<?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>118833</bug_id>
          
          <creation_ts>2013-07-17 22:36:51 -0700</creation_ts>
          <short_desc>WebKit should include remaining ANGLE source files</short_desc>
          <delta_ts>2013-08-20 09:09:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>ANGLE</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>909587</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2013-07-17 22:36:51 -0700</bug_when>
    <thetext>WebGL on Windows requires ANGLE source files that were previously not included in the WebKit repository.  These files should be included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909588</commentid>
    <comment_count>1</comment_count>
      <attachid>206950</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2013-07-17 22:40:46 -0700</bug_when>
    <thetext>Created attachment 206950
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909595</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2013-07-17 23:25:12 -0700</bug_when>
    <thetext>I&apos;m not sure why it thinks the Visual Studio project files are binary, or if that&apos;s a problem.  For some reason the execute bits of the files are set.  Should I chmod everything before adding, after adding, or not at all?  It might be nice to keep as much in common with the ANGLE repository as possible, but I&apos;ll have to edit the project files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909857</commentid>
    <comment_count>3</comment_count>
      <attachid>206950</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-07-18 13:46:47 -0700</bug_when>
    <thetext>Comment on attachment 206950
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909861</commentid>
    <comment_count>4</comment_count>
      <attachid>206950</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-18 14:11:17 -0700</bug_when>
    <thetext>Comment on attachment 206950
Patch

Clearing flags on attachment: 206950

Committed r152863: &lt;http://trac.webkit.org/changeset/152863&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909862</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-18 14:11:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910493</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-07-20 15:26:26 -0700</bug_when>
    <thetext>Rolled out in https://trac.webkit.org/r152946</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919070</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2013-08-20 09:09:37 -0700</bug_when>
    <thetext>This was added in r152863, rolled out in r152946, and correctly added again in r153064.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206950</attachid>
            <date>2013-07-17 22:40:46 -0700</date>
            <delta_ts>2013-07-18 14:11:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118833-20130717224047.patch</filename>
            <type>text/plain</type>
            <size>1187971</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MjgyOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEwNzQgQEAKKzIwMTMtMDctMTcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5AYXBw
bGUuY29tPgorCisgICAgICAgIEFkZGVkIHByZXZpb3VzbHkgdW5pbmNsdWRlZCBmaWxlcyBmcm9t
IEFOR0xFIHIyNDI2IHdpdGggdGhlc2UgZXhjZXB0aW9uczoKKyAgICAgICAgTm8gZ3lwIGZpbGVz
IGFyZSBpbmNsdWRlZC4gIE5vIFdlYktpdCBwb3J0cyB1c2UgdGhlbS4KKyAgICAgICAgQU5HTEUu
c2xuIGlzIG5vdCBpbmNsdWRlZC4gIEkgd2lsbCBub3QgdXNlIHRoYXQuCisgICAgICAgIHRyYW5z
bGF0b3JfY29tbW9uIGFuZCB0cmFuc2xhdG9yX2hsc2wgcHJvamVjdHMgYW5kIGZpbHRlcnMgYXJl
IG5vdCBpbmNsdWRlZC4KKyAgICAgICAgSSB3aWxsIG5lZWQgdG8gbWFrZSBhIGN1c3RvbWl6ZWQg
dHJhbnNsYXRvciAgcHJvamVjdCB0aGF0IHVzZXMgdGhlIEdMU0wgdHJhbnNsYXRvciBpbnN0ZWFk
IG9mIHRoZSBITFNMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE4ODMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvYnVpbHRpbl9zeW1ib2xzLmpzb246IEFkZGVkLgorICAgICAg
ICAqIHNyYy9jb21waWxlci9nZW5lcmF0ZV9idWlsdGluX3N5bWJvbF90YWJsZS5weTogQWRkZWQu
CisgICAgICAgIChwYXJzZUJ1aWx0aW4pOgorICAgICAgICAqIHNyYy9saWJFR0w6IFJlcGxhY2Vk
LgorICAgICAgICAqIHNyYy9saWJFR0wvQ29uZmlnLmNwcDogQWRkZWQuCisgICAgICAgIChlZ2w6
OkNvbmZpZzo6Q29uZmlnKToKKyAgICAgICAgKGVnbDo6Q29uZmlnOjpzZXREZWZhdWx0cyk6Cisg
ICAgICAgIChlZ2w6OkNvbmZpZzo6c2V0KToKKyAgICAgICAgKGVnbDo6Q29uZmlnOjpnZXRIYW5k
bGUpOgorICAgICAgICAoZWdsOjpTb3J0Q29uZmlnOjpTb3J0Q29uZmlnKToKKyAgICAgICAgKGVn
bDo6U29ydENvbmZpZzo6c2NhbkZvcldhbnRlZENvbXBvbmVudHMpOgorICAgICAgICAoZWdsOjpT
b3J0Q29uZmlnOjp3YW50ZWRDb21wb25lbnRzU2l6ZSk6CisgICAgICAgIChlZ2w6OlNvcnRDb25m
aWc6Om9wZXJhdG9yKCkpOgorICAgICAgICAoZWdsOjpDb25maWdTZXQ6OkNvbmZpZ1NldCk6Cisg
ICAgICAgIChlZ2w6OkNvbmZpZ1NldDo6YWRkKToKKyAgICAgICAgKGVnbDo6Q29uZmlnU2V0Ojpz
aXplKToKKyAgICAgICAgKGVnbDo6Q29uZmlnU2V0OjpnZXRDb25maWdzKToKKyAgICAgICAgKGVn
bDo6Q29uZmlnU2V0OjpnZXQpOgorICAgICAgICAqIHNyYy9saWJFR0wvQ29uZmlnLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5jcHA6IEFkZGVkLgorICAgICAgICAoZWds
OjpEaXNwbGF5OjpnZXREaXNwbGF5KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6RGlzcGxheSk6
CisgICAgICAgIChlZ2w6OkRpc3BsYXk6On5EaXNwbGF5KToKKyAgICAgICAgKGVnbDo6RGlzcGxh
eTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OnRlcm1pbmF0ZSk6CisgICAg
ICAgIChlZ2w6OkRpc3BsYXk6OnN0YXJ0U2NlbmUpOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojpl
bmRTY2VuZSk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldENvbmZpZ3MpOgorICAgICAgICAo
ZWdsOjpEaXNwbGF5OjpnZXRDb25maWdBdHRyaWIpOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojpj
cmVhdGVEZXZpY2UpOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojppbml0aWFsaXplRGV2aWNlKToK
KyAgICAgICAgKGVnbDo6RGlzcGxheTo6cmVzZXREZXZpY2UpOgorICAgICAgICAoZWdsOjpEaXNw
bGF5OjpjcmVhdGVXaW5kb3dTdXJmYWNlKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Y3JlYXRl
T2Zmc2NyZWVuU3VyZmFjZSk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmNyZWF0ZUNvbnRleHQp
OgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpyZXN0b3JlTG9zdERldmljZSk6CisgICAgICAgIChl
Z2w6OkRpc3BsYXk6OmRlc3Ryb3lTdXJmYWNlKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6ZGVz
dHJveUNvbnRleHQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojpub3RpZnlEZXZpY2VMb3N0KToK
KyAgICAgICAgKGVnbDo6RGlzcGxheTo6aXNEZXZpY2VMb3N0KToKKyAgICAgICAgKGVnbDo6RGlz
cGxheTo6aXNJbml0aWFsaXplZCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmlzVmFsaWRDb25m
aWcpOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojppc1ZhbGlkQ29udGV4dCk6CisgICAgICAgIChl
Z2w6OkRpc3BsYXk6OmlzVmFsaWRTdXJmYWNlKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6aGFz
RXhpc3RpbmdXaW5kb3dTdXJmYWNlKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0TWluU3dh
cEludGVydmFsKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0TWF4U3dhcEludGVydmFsKToK
KyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0RGV2aWNlKToKKyAgICAgICAgKGVnbDo6RGlzcGxh
eTo6Z2V0RGV2aWNlQ2Fwcyk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldEFkYXB0ZXJJZGVu
dGlmaWVyKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6dGVzdERldmljZUxvc3QpOgorICAgICAg
ICAoZWdsOjpEaXNwbGF5Ojp0ZXN0RGV2aWNlUmVzZXR0YWJsZSk6CisgICAgICAgIChlZ2w6OkRp
c3BsYXk6OnN5bmMpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjphbGxvY2F0ZUV2ZW50UXVlcnkp
OgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpmcmVlRXZlbnRRdWVyeSk6CisgICAgICAgIChlZ2w6
OkRpc3BsYXk6OmdldE11bHRpU2FtcGxlU3VwcG9ydCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6
OmdldERYVDFUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERYVDNU
ZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERYVDVUZXh0dXJlU3Vw
cG9ydCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQpOgor
ICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQpOgorICAgICAg
ICAoZWdsOjpEaXNwbGF5OjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQpOgorICAgICAgICAoZWds
OjpEaXNwbGF5OjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChlZ2w6OkRp
c3BsYXk6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQpOgorICAgICAgICAoZWdsOjpE
aXNwbGF5OjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQpOgorICAgICAgICAoZWds
OjpEaXNwbGF5OjpnZXRCdWZmZXJQb29sKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0VGV4
dHVyZVBvb2wpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCk6
CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycyk6Cisg
ICAgICAgIChlZ2w6OkRpc3BsYXk6OmluaXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZWds
OjpEaXNwbGF5OjpnZXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojpp
bml0VmVuZG9yU3RyaW5nKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0VmVuZG9yU3RyaW5n
KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6c2hhcmVIYW5kbGVTdXBwb3J0ZWQpOgorICAgICAg
ICAoZWdsOjpEaXNwbGF5OjpjcmVhdGVWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZWdsOjpEaXNw
bGF5Ojpjb21waWxlU2hhZGVyU291cmNlKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Y3JlYXRl
UGl4ZWxTaGFkZXIpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRWZXJ0ZXhUZXh0dXJlU3Vw
cG9ydCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0
KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KToKKyAg
ICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0SW5zdGFuY2luZ1N1cHBvcnQpOgorICAgICAgICAqIHNy
Yy9saWJFR0wvRGlzcGxheS5oOiBBZGRlZC4KKyAgICAgICAgKGdldENvbXBhcmFibGVPU1ZlcnNp
b24pOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojppc0QzZDlFeERldmljZSk6CisgICAgICAgICog
c3JjL2xpYkVHTC9SRUFETUU6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkVHTC9TaGFkZXJD
YWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKGVnbDo6U2hhZGVyQ2FjaGU6OlNoYWRlckNhY2hlKToK
KyAgICAgICAgKGVnbDo6U2hhZGVyQ2FjaGU6On5TaGFkZXJDYWNoZSk6CisgICAgICAgIChlZ2w6
OlNoYWRlckNhY2hlOjppbml0aWFsaXplKToKKyAgICAgICAgKGVnbDo6U2hhZGVyQ2FjaGU6OmNy
ZWF0ZSk6CisgICAgICAgIChlZ2w6OlNoYWRlckNhY2hlOjpjbGVhcik6CisgICAgICAgIChlZ2w6
OlNoYWRlckNhY2hlOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFj
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpTdXJmYWNlKToKKyAgICAgICAg
KGVnbDo6U3VyZmFjZTo6flN1cmZhY2UpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjppbml0aWFs
aXplKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cmVsZWFzZSk6CisgICAgICAgIChlZ2w6OlN1
cmZhY2U6OnJlc2V0U3dhcENoYWluKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3dhcFJlY3Qp
OgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAoZWds
OjpTdXJmYWNlV2luZG93UHJvYyk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnN1YmNsYXNzV2lu
ZG93KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6dW5zdWJjbGFzc1dpbmRvdyk6CisgICAgICAg
IChlZ2w6OlN1cmZhY2U6OmNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKToKKyAgICAgICAgKGVn
bDo6U3VyZmFjZTo6Y29udmVydEludGVydmFsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3dh
cCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnBvc3RTdWJCdWZmZXIpOgorICAgICAgICAoZWds
OjpTdXJmYWNlOjpnZXRXaWR0aCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldEhlaWdodCk6
CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChlZ2w6OlN1cmZh
Y2U6OmdldERlcHRoU3RlbmNpbCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldE9mZnNjcmVl
blRleHR1cmUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpzZXRTd2FwSW50ZXJ2YWwpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpnZXRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKGVnbDo6U3Vy
ZmFjZTo6Z2V0VGV4dHVyZVRhcmdldCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnNldEJvdW5k
VGV4dHVyZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldEJvdW5kVGV4dHVyZSk6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OmdldEZvcm1hdCk6CisgICAgICAgICogc3JjL2xpYkVHTC9TdXJm
YWNlLmg6IEFkZGVkLgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRTaGFyZUhhbmRsZSk6Cisg
ICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKHZhbGlkYXRl
RGlzcGxheSk6CisgICAgICAgICh2YWxpZGF0ZUNvbmZpZyk6CisgICAgICAgICh2YWxpZGF0ZUNv
bnRleHQpOgorICAgICAgICAodmFsaWRhdGVTdXJmYWNlKToKKyAgICAgICAgKiBzcmMvbGliRUdM
L2xpYkVHTC5kZWY6IEFkZGVkLgorICAgICAgICAqIHNyYy9saWJFR0wvbGliRUdMLnJjOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvbGliRUdML2xpYkVHTC52Y3hwcm9qOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvbGliRUdML2xpYkVHTC52Y3hwcm9qLmZpbHRlcnM6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9saWJFR0wvbWFpbi5jcHA6IEFkZGVkLgorICAgICAgICAoRGxsTWFpbik6CisgICAgICAgIChl
Z2w6OnNldEN1cnJlbnRFcnJvcik6CisgICAgICAgIChlZ2w6OmdldEN1cnJlbnRFcnJvcik6Cisg
ICAgICAgIChlZ2w6OnNldEN1cnJlbnRBUEkpOgorICAgICAgICAoZWdsOjpnZXRDdXJyZW50QVBJ
KToKKyAgICAgICAgKGVnbDo6c2V0Q3VycmVudERpc3BsYXkpOgorICAgICAgICAoZWdsOjpnZXRD
dXJyZW50RGlzcGxheSk6CisgICAgICAgIChlZ2w6OnNldEN1cnJlbnREcmF3U3VyZmFjZSk6Cisg
ICAgICAgIChlZ2w6OmdldEN1cnJlbnREcmF3U3VyZmFjZSk6CisgICAgICAgIChlZ2w6OnNldEN1
cnJlbnRSZWFkU3VyZmFjZSk6CisgICAgICAgIChlZ2w6OmdldEN1cnJlbnRSZWFkU3VyZmFjZSk6
CisgICAgICAgIChlcnJvcik6CisgICAgICAgICogc3JjL2xpYkVHTC9tYWluLmg6IEFkZGVkLgor
ICAgICAgICAoZXJyb3IpOgorICAgICAgICAoc3VjY2Vzcyk6CisgICAgICAgICogc3JjL2xpYkVH
TC9yZXNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyOiBSZXBsYWNlZC4K
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0JpbmFyeVN0cmVhbS5oOiBBZGRlZC4KKyAgICAgICAg
KGdsOjpCaW5hcnlJbnB1dFN0cmVhbTo6QmluYXJ5SW5wdXRTdHJlYW0pOgorICAgICAgICAoZ2w6
OkJpbmFyeUlucHV0U3RyZWFtOjpyZWFkKToKKyAgICAgICAgKGdsOjpCaW5hcnlJbnB1dFN0cmVh
bTo6c2tpcCk6CisgICAgICAgIChnbDo6QmluYXJ5SW5wdXRTdHJlYW06Om9mZnNldCk6CisgICAg
ICAgIChnbDo6QmluYXJ5SW5wdXRTdHJlYW06OmVycm9yKToKKyAgICAgICAgKGdsOjpCaW5hcnlJ
bnB1dFN0cmVhbTo6ZW5kT2ZTdHJlYW0pOgorICAgICAgICAoZ2w6OkJpbmFyeU91dHB1dFN0cmVh
bTo6QmluYXJ5T3V0cHV0U3RyZWFtKToKKyAgICAgICAgKGdsOjpCaW5hcnlPdXRwdXRTdHJlYW06
OndyaXRlKToKKyAgICAgICAgKGdsOjpCaW5hcnlPdXRwdXRTdHJlYW06Omxlbmd0aCk6CisgICAg
ICAgIChnbDo6QmluYXJ5T3V0cHV0U3RyZWFtOjpkYXRhKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0JsaXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdsOjpCbGl0OjpCbGl0KToKKyAgICAgICAg
KGdsOjpCbGl0Ojp+QmxpdCk6CisgICAgICAgIChnbDo6QmxpdDo6aW5pdEdlb21ldHJ5KToKKyAg
ICAgICAgKGdsOjpCbGl0OjpzZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkJsaXQ6OnNldFZlcnRl
eFNoYWRlcik6CisgICAgICAgIChnbDo6QmxpdDo6c2V0UGl4ZWxTaGFkZXIpOgorICAgICAgICAo
Z2w6OkJsaXQ6OmdldFN1cmZhY2VSZWN0KToKKyAgICAgICAgKGdsOjpCbGl0Ojpib3hGaWx0ZXIp
OgorICAgICAgICAoZ2w6OkJsaXQ6OmNvcHkpOgorICAgICAgICAoZ2w6OkJsaXQ6OmZvcm1hdENv
bnZlcnQpOgorICAgICAgICAoZ2w6OkJsaXQ6OnNldEZvcm1hdENvbnZlcnRTaGFkZXJzKToKKyAg
ICAgICAgKGdsOjpCbGl0Ojpjb3B5U3VyZmFjZVRvVGV4dHVyZSk6CisgICAgICAgIChnbDo6Qmxp
dDo6c2V0Vmlld3BvcnQpOgorICAgICAgICAoZ2w6OkJsaXQ6OnNldENvbW1vbkJsaXRTdGF0ZSk6
CisgICAgICAgIChnbDo6QmxpdDo6cmVuZGVyKToKKyAgICAgICAgKGdsOjpCbGl0OjpzYXZlU3Rh
dGUpOgorICAgICAgICAoZ2w6OkJsaXQ6OnJlc3RvcmVTdGF0ZSk6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9CbGl0Lmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQnVmZmVyLmNw
cDogQWRkZWQuCisgICAgICAgIChnbDo6QnVmZmVyOjpCdWZmZXIpOgorICAgICAgICAoZ2w6OkJ1
ZmZlcjo6fkJ1ZmZlcik6CisgICAgICAgIChnbDo6QnVmZmVyOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKGdsOjpCdWZmZXI6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoZ2w6OkJ1ZmZlcjo6Z2V0
U3RhdGljVmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpCdWZmZXI6OmdldFN0YXRpY0luZGV4
QnVmZmVyKToKKyAgICAgICAgKGdsOjpCdWZmZXI6OmludmFsaWRhdGVTdGF0aWNEYXRhKToKKyAg
ICAgICAgKGdsOjpCdWZmZXI6OnByb21vdGVTdGF0aWNVc2FnZSk6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9CdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChnbDo6QnVmZmVyOjpkYXRhKToKKyAg
ICAgICAgKGdsOjpCdWZmZXI6OnNpemUpOgorICAgICAgICAoZ2w6OkJ1ZmZlcjo6dXNhZ2UpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6
Om1ha2VTdGF0aWNTdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OkNvbnRleHQpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6On5Db250ZXh0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYWtl
Q3VycmVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6Om1hcmtDb250ZXh0TG9zdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNDb250ZXh0
TG9zdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJDb2xvcik6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c2V0Q2xlYXJEZXB0aCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q2xl
YXJTdGVuY2lsKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDdWxsRmFjZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6aXNDdWxsRmFjZUVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnNldEN1bGxNb2RlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcm9udEZhY2UpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldERlcHRoVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
aXNEZXB0aFRlc3RFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXREZXB0aEZ1bmMp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldERlcHRoUmFuZ2UpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldEJsZW5kKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXRCbGVuZENvbG9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZEVx
dWF0aW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsVGVzdCk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6aXNTdGVuY2lsVGVzdEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnNldFN0ZW5jaWxQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxC
YWNrUGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0
UG9seWdvbk9mZnNldEZpbGwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzUG9seWdvbk9mZnNl
dEZpbGxFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFy
YW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpz
ZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U2Npc3Nv
clRlc3QpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzU2Npc3NvclRlc3RFbmFibGVkKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzZXREaXRoZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omlz
RGl0aGVyRW5hYmxlZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0TGluZVdpZHRoKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnNldFZpZXdwb3J0UGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRT
Y2lzc29yUGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDb2xvck1hc2spOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldERlcHRoTWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0QWN0aXZlU2FtcGxlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVm
ZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5k
bGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmdldEFjdGl2ZVF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VmVydGV4QXR0cmli
U3RhdGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpz
ZXRQYWNrQWxpZ25tZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFVucGFja0FsaWdubWVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0UGFja1JldmVyc2VSb3dPcmRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UGFja1Jl
dmVyc2VSb3dPcmRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0
ZUZlbmNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVT
aGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZUZlbmNlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpkZWxldGVRdWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QnVmZmVyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dFByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmUpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
UmVhZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZm
ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAgICAgIChn
bDo6Q29udGV4dDo6YmluZEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6YmluZFRleHR1cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmVDdWJl
TWFwKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp1c2VQcm9ncmFt
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6c2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmVnaW5RdWVy
eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZW5kUXVlcnkpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnNldEZyYW1lYnVmZmVyWmVybyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UmVuZGVy
YnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RnJhbWVidWZmZXIpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEZlbmNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRRdWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QXJyYXlCdWZmZXIpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dFRleHR1cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXApOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRCb29sZWFudik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RmxvYXR2KToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmFwcGx5SW5kZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5U2hhZGVycyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y2xlYXIpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmRyYXdBcnJheXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRyYXdF
bGVtZW50cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3luYyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6ZHJhd0xpbmVMb29wKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWNvcmRJbnZhbGlk
RW51bSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6cmVjb3JkSW52YWxpZFZhbHVlKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpyZWNvcmRJbnZhbGlkT3BlcmF0aW9uKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpyZWNvcmRPdXRPZk1lbW9yeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6cmVjb3Jk
SW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRF
cnJvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVzZXRTdGF0dXMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
TWF4aW11bVBvaW50U2l6ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bVZhcnlp
bmdWZWN0b3JzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1Db21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtRnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4U3VwcG9ydGVk
U2FtcGxlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBs
ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRXZlbnRRdWVyaWVzKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpz
dXBwb3J0c0RYVDNUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEWFQ1
VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlRleHR1cmVz
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcik6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZUxldmVsKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpz
dXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0
c0x1bWluYW5jZUFscGhhVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRz
RGVwdGhUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGlj
ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNJbnN0YW5jaW5nKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzdXBwb3J0c0Rlcml2YXRpdmVJbnN0cnVjdGlvbnMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaEJ1
ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoVGV4dHVyZSk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRl
dGFjaFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW5jb21wbGV0ZVRl
eHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNraXBEcmF3KToKKyAgICAgICAgKGdsOjpD
b250ZXh0Ojppc1RyaWFuZ2xlTW9kZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0VmVydGV4
QXR0cmliKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKToK
KyAgICAgICAgKGdsOjpDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omlu
aXRSZW5kZXJlclN0cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVuZGVyZXJTdHJp
bmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChn
bDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSk6CisgICAg
ICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9uQ2FjaGUp
OgorICAgICAgICAoZ2w6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24p
OgorICAgICAgICAoZ2w6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChnbDo6
VmVydGV4QXR0cmlidXRlOjpWZXJ0ZXhBdHRyaWJ1dGUpOgorICAgICAgICAoZ2w6OlZlcnRleEF0
dHJpYnV0ZTo6dHlwZVNpemUpOgorICAgICAgICAoZ2w6OlZlcnRleEF0dHJpYnV0ZTo6c3RyaWRl
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRCbGl0dGVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXREZXZpY2VDYXBzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0QzRENvbnN0YW50
VGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdsOjpEM0RDb25zdGFudDo6RDNEQ29uc3RhbnQp
OgorICAgICAgICAoZ2w6OkQzRENvbnN0YW50Ojp+RDNEQ29uc3RhbnQpOgorICAgICAgICAoZ2w6
OkQzRENvbnN0YW50OjphZGRTdHJ1Y3RNZW1iZXJzKToKKyAgICAgICAgKGdsOjpEM0RDb25zdGFu
dFRhYmxlOjpEM0RDb25zdGFudFRhYmxlKToKKyAgICAgICAgKGdsOjpEM0RDb25zdGFudFRhYmxl
Ojp+RDNEQ29uc3RhbnRUYWJsZSk6CisgICAgICAgIChnbDo6RDNEQ29uc3RhbnRUYWJsZTo6Z2V0
Q29uc3RhbnQpOgorICAgICAgICAoZ2w6OkQzRENvbnN0YW50VGFibGU6OmdldENvbnN0YW50QnlO
YW1lKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0QzRENvbnN0YW50VGFibGUuaDogQWRkZWQu
CisgICAgICAgIChnbDo6RDNEQ29uc3RhbnRUYWJsZTo6ZXJyb3IpOgorICAgICAgICAoZ2w6OkQz
RENvbnN0YW50VGFibGU6OmNvbnN0YW50cyk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GZW5j
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6OkZlbmNlOjpGZW5jZSk6CisgICAgICAgIChnbDo6
RmVuY2U6On5GZW5jZSk6CisgICAgICAgIChnbDo6RmVuY2U6OmlzRmVuY2UpOgorICAgICAgICAo
Z2w6OkZlbmNlOjpzZXRGZW5jZSk6CisgICAgICAgIChnbDo6RmVuY2U6OnRlc3RGZW5jZSk6Cisg
ICAgICAgIChnbDo6RmVuY2U6OmZpbmlzaEZlbmNlKToKKyAgICAgICAgKGdsOjpGZW5jZTo6Z2V0
RmVuY2Vpdik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GZW5jZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL0Zsb2F0MTZUb0Zsb2F0MzIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KGdsOjpmbG9hdDE2VG9GbG9hdDMyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0Zsb2F0MTZU
b0Zsb2F0MzIucHk6IEFkZGVkLgorICAgICAgICAoY29udmVydE1hbnRpc3NhKToKKyAgICAgICAg
KGNvbnZlcnRFeHBvbmVudCk6CisgICAgICAgIChjb252ZXJ0T2Zmc2V0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChnbDo6RnJhbWVi
dWZmZXI6OkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6bG9va3VwUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6c2V0Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkZy
YW1lYnVmZmVyOjpzZXREZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OnNl
dFN0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0dXJl
KToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKToKKyAgICAgICAgKGds
OjpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhi
dWZmZXJTZXJpYWwpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVy
U2VyaWFsKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIpOgorICAg
ICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJh
bWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpn
ZXROdWxsQ29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1
ZmZlclR5cGUpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclR5cGUp
OgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyVHlwZSk6CisgICAg
ICAgIChnbDo6RnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGds
OjpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkZyYW1l
YnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6aGFzU3RlbmNpbCk6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcyk6
CisgICAgICAgIChnbDo6RGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIpOgor
ICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpEZWZh
dWx0RnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcyk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9j
YXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6OkhhbmRsZUFsbG9jYXRvcjo6SGFuZGxlQWxs
b2NhdG9yKToKKyAgICAgICAgKGdsOjpIYW5kbGVBbGxvY2F0b3I6On5IYW5kbGVBbGxvY2F0b3Ip
OgorICAgICAgICAoZ2w6OkhhbmRsZUFsbG9jYXRvcjo6c2V0QmFzZUhhbmRsZSk6CisgICAgICAg
IChnbDo6SGFuZGxlQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChnbDo6SGFuZGxlQWxs
b2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRv
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKGdsOjpJbmRleERhdGFNYW5hZ2VyOjpJbmRleERhdGFNYW5hZ2Vy
KToKKyAgICAgICAgKGdsOjpJbmRleERhdGFNYW5hZ2VyOjp+SW5kZXhEYXRhTWFuYWdlcik6Cisg
ICAgICAgIChnbDo6Y29udmVydEluZGljZXMpOgorICAgICAgICAoZ2w6OmNvbXB1dGVSYW5nZSk6
CisgICAgICAgIChnbDo6SW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0YSk6CisgICAg
ICAgIChnbDo6SW5kZXhEYXRhTWFuYWdlcjo6aW5kZXhTaXplKToKKyAgICAgICAgKGdsOjpJbmRl
eERhdGFNYW5hZ2VyOjp0eXBlU2l6ZSk6CisgICAgICAgIChnbDo6SW5kZXhEYXRhTWFuYWdlcjo6
Z2V0Q291bnRpbmdJbmRpY2VzKToKKyAgICAgICAgKGdsOjpJbmRleEJ1ZmZlcjo6SW5kZXhCdWZm
ZXIpOgorICAgICAgICAoZ2w6OkluZGV4QnVmZmVyOjp+SW5kZXhCdWZmZXIpOgorICAgICAgICAo
Z2w6OkluZGV4QnVmZmVyOjpnZXRCdWZmZXIpOgorICAgICAgICAoZ2w6OkluZGV4QnVmZmVyOjpn
ZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkluZGV4QnVmZmVyOjppc3N1ZVNlcmlhbCk6CisgICAg
ICAgIChnbDo6SW5kZXhCdWZmZXI6OnVubWFwKToKKyAgICAgICAgKGdsOjpTdHJlYW1pbmdJbmRl
eEJ1ZmZlcjo6U3RyZWFtaW5nSW5kZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OlN0cmVhbWluZ0lu
ZGV4QnVmZmVyOjp+U3RyZWFtaW5nSW5kZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OlN0cmVhbWlu
Z0luZGV4QnVmZmVyOjptYXApOgorICAgICAgICAoZ2w6OlN0cmVhbWluZ0luZGV4QnVmZmVyOjpy
ZXNlcnZlU3BhY2UpOgorICAgICAgICAoZ2w6OlN0YXRpY0luZGV4QnVmZmVyOjpTdGF0aWNJbmRl
eEJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RhdGljSW5kZXhCdWZmZXI6On5TdGF0aWNJbmRleEJ1
ZmZlcik6CisgICAgICAgIChnbDo6U3RhdGljSW5kZXhCdWZmZXI6Om1hcCk6CisgICAgICAgIChn
bDo6U3RhdGljSW5kZXhCdWZmZXI6OnJlc2VydmVTcGFjZSk6CisgICAgICAgIChnbDo6U3RhdGlj
SW5kZXhCdWZmZXI6Omxvb2t1cFR5cGUpOgorICAgICAgICAoZ2w6OlN0YXRpY0luZGV4QnVmZmVy
Ojpsb29rdXBSYW5nZSk6CisgICAgICAgIChnbDo6U3RhdGljSW5kZXhCdWZmZXI6OmFkZFJhbmdl
KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaDogQWRkZWQuCisg
ICAgICAgIChnbDo6SW5kZXhCdWZmZXI6OnNpemUpOgorICAgICAgICAoZ2w6OlN0YXRpY0luZGV4
QnVmZmVyOjpJbmRleFJhbmdlOjpvcGVyYXRvcjwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjpBdHRy
aWJ1dGVCaW5kaW5ncyk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6On5BdHRyaWJ1
dGVCaW5kaW5ncyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6SW5mb0xvZyk6CisgICAgICAgIChn
bDo6SW5mb0xvZzo6fkluZm9Mb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmdldExlbmd0aCk6
CisgICAgICAgIChnbDo6SW5mb0xvZzo6Z2V0TG9nKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjph
cHBlbmRTYW5pdGl6ZWQpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmFwcGVuZCk6CisgICAgICAg
IChnbDo6SW5mb0xvZzo6cmVzZXQpOgorICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgor
ICAgICAgICAoZ2w6OlByb2dyYW06On5Qcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjph
dHRhY2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmRldGFjaFNoYWRlcik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQpOgorICAgICAgICAoZ2w6
OkF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6
OlByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJpbmRp
bmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6aXNMaW5rZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldFByb2dyYW1CaW5hcnkpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OnNldFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlBy
b2dyYW06OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmFkZFJlZik6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6Z2V0UmVmQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldFBy
b2dyYW1CaW5hcnlMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEluZm9Mb2dMZW5n
dGgpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEluZm9Mb2cpOgorICAgICAgICAoZ2w6OlBy
b2dyYW06OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVD
b3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3Ro
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGds
OjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW06
OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmZsYWdG
b3JEZWxldGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24p
OgorICAgICAgICAoZ2w6OlByb2dyYW06OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFt
Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHA6IEFkZGVkLgorICAg
ICAgICAoZ2w6OnN0cik6CisgICAgICAgIChnbDo6VW5pZm9ybTo6VW5pZm9ybSk6CisgICAgICAg
IChnbDo6VW5pZm9ybTo6flVuaWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OmlzQXJyYXkp
OgorICAgICAgICAoZ2w6OlVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojppc3N1ZVNlcmlhbCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFZlcnRleFNoYWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6Z2V0QXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmdldFNlbWFudGljSW5kZXgpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVzZWRT
YW1wbGVyUmFuZ2UpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnVzZXNQb2ludFNpemUp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNm
dik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdik6CisgICAgICAg
IChnbDo6dHJhbnNwb3NlTWF0cml4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4M2Z2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4
NGZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpz
ZXRVbmlmb3JtNGl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Y29t
cGlsZVRvQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3Mp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyk6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6bG9hZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2F2
ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0TGVuZ3RoKToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpsaW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5r
QXR0cmlidXRlcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1zKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpjcmVhdGVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpkZWNvcmF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6dW5k
ZWNvcmF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bW5idik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmZ2KToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0xaXYpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6YXBwbHlVbmlmb3JtM2l2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBs
eVVuaWZvcm00aXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5p
dik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpn
ZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2
YWxpZGF0ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVycyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24pOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhDb29yZExvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbik6CisgICAgICAgIChnbDo6
UHJvZ3JhbUJpbmFyeTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6U2FtcGxlcjo6U2FtcGxlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtQmluYXJ5Lmg6IEFkZGVkLgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5m
bzo6UmVnaXN0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OnNl
dCk6CisgICAgICAgIChnbDo6VW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24pOgorICAg
ICAgICAqIHNyYy9saWJHTEVTdjIvUXVlcnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdsOjpRdWVy
eTo6UXVlcnkpOgorICAgICAgICAoZ2w6OlF1ZXJ5Ojp+UXVlcnkpOgorICAgICAgICAoZ2w6OlF1
ZXJ5OjpiZWdpbik6CisgICAgICAgIChnbDo6UXVlcnk6OmVuZCk6CisgICAgICAgIChnbDo6UXVl
cnk6OmdldFJlc3VsdCk6CisgICAgICAgIChnbDo6UXVlcnk6OmlzUmVzdWx0QXZhaWxhYmxlKToK
KyAgICAgICAgKGdsOjpRdWVyeTo6Z2V0VHlwZSk6CisgICAgICAgIChnbDo6UXVlcnk6OnRlc3RR
dWVyeSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9RdWVyeS5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvbGliR0xFU3YyL1JFQURNRTogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlckludGVy
ZmFjZTo6UmVuZGVyYnVmZmVySW50ZXJmYWNlKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJJ
bnRlcmZhY2U6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJJbnRlcmZh
Y2U6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVySW50ZXJmYWNlOjpn
ZXRSZWRTaXplKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldEdyZWVu
U2l6ZSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRCbHVlU2l6ZSk6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRBbHBoYVNpemUpOgorICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0RGVwdGhTaXplKToKKyAgICAgICAg
KGdsOjpSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldFN0ZW5jaWxTaXplKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAg
KGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5k
ZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJE
OjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJE
OjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0
U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6On5SZW5kZXJidWZmZXIp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpSZW5k
ZXJidWZmZXI6OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVy
VGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCk6Cisg
ICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0SW50ZXJu
YWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0RDNERm9ybWF0KToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldFJlZFNpemUpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldEJs
dWVTaXplKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldEFscGhhU2l6ZSk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXREZXB0aFNpemUpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlcjo6Z2V0U3RlbmNpbFNpemUpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0
U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRTZXJpYWwpOgorICAgICAg
ICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6c2V0U3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVm
ZmVyU3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVm
ZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
U3RvcmFnZTo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9y
YWdlOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0SGVp
Z2h0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRJbnRlcm5hbEZvcm1h
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0RDNERm9ybWF0KToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTYW1wbGVzKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9y
YWdlOjppc3N1ZUN1YmVTZXJpYWxzKToKKyAgICAgICAgKGdsOjpDb2xvcmJ1ZmZlcjo6Q29sb3Ji
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIpOgorICAgICAg
ICAoZ2w6OkNvbG9yYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OkRlcHRo
U3RlbmNpbGJ1ZmZlcjo6RGVwdGhTdGVuY2lsYnVmZmVyKToKKyAgICAgICAgKGdsOjpEZXB0aFN0
ZW5jaWxidWZmZXI6On5EZXB0aFN0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OkRlcHRoU3Rl
bmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpEZXB0aGJ1ZmZlcjo6
RGVwdGhidWZmZXIpOgorICAgICAgICAoZ2w6OkRlcHRoYnVmZmVyOjp+RGVwdGhidWZmZXIpOgor
ICAgICAgICAoZ2w6OlN0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6
OlN0ZW5jaWxidWZmZXI6On5TdGVuY2lsYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJJbnRlcmZh
Y2U6On5SZW5kZXJidWZmZXJJbnRlcmZhY2UpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVz
b3VyY2VNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpS
ZXNvdXJjZU1hbmFnZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6flJlc291cmNl
TWFuYWdlcik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjphZGRSZWYpOgorICAgICAg
ICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6UmVzb3VyY2VN
YW5hZ2VyOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Y3Jl
YXRlU2hhZGVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVByb2dyYW0p
OgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6
OlJlc291cmNlTWFuYWdlcjo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1h
bmFnZXI6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpkZWxl
dGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVRleHR1cmUp
OgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmdldEJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVz
b3VyY2VNYW5hZ2VyOjpnZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6
Z2V0VGV4dHVyZSk6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpnZXRQcm9ncmFtKToK
KyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpzZXRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlJl
c291cmNlTWFuYWdlcjo6Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpSZXNv
dXJjZU1hbmFnZXI6OmNoZWNrVGV4dHVyZUFsbG9jYXRpb24pOgorICAgICAgICAoZ2w6OlJlc291
cmNlTWFuYWdlcjo6Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKiBzcmMv
bGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6OlNoYWRlcjo6U2hhZGVyKToKKyAg
ICAgICAgKGdsOjpTaGFkZXI6On5TaGFkZXIpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6Z2V0SGFu
ZGxlKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OnNldFNvdXJjZSk6CisgICAgICAgIChnbDo6U2hh
ZGVyOjpnZXRJbmZvTG9nTGVuZ3RoKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldEluZm9Mb2cp
OgorICAgICAgICAoZ2w6OlNoYWRlcjo6Z2V0U291cmNlTGVuZ3RoKToKKyAgICAgICAgKGdsOjpT
aGFkZXI6OmdldFRyYW5zbGF0ZWRTb3VyY2VMZW5ndGgpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6
Z2V0U291cmNlSW1wbCk6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRTb3VyY2UpOgorICAgICAg
ICAoZ2w6OlNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZSk6CisgICAgICAgIChnbDo6U2hhZGVy
Ojppc0NvbXBpbGVkKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldEhMU0wpOgorICAgICAgICAo
Z2w6OlNoYWRlcjo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OnJlbGVhc2UpOgorICAg
ICAgICAoZ2w6OlNoYWRlcjo6Z2V0UmVmQ291bnQpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6aXNG
bGFnZ2VkRm9yRGVsZXRpb24pOgorICAgICAgICAoZ2w6OlNoYWRlcjo6ZmxhZ0ZvckRlbGV0aW9u
KToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmluaXRpYWxpemVDb21waWxlcik6CisgICAgICAgIChn
bDo6U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6cGFyc2VW
YXJ5aW5ncyk6CisgICAgICAgIChnbDo6U2hhZGVyOjp1bmNvbXBpbGUpOgorICAgICAgICAoZ2w6
OlNoYWRlcjo6Y29tcGlsZVRvSExTTCk6CisgICAgICAgIChnbDo6U2hhZGVyOjpwYXJzZVR5cGUp
OgorICAgICAgICAoZ2w6OlNoYWRlcjo6Y29tcGFyZVZhcnlpbmcpOgorICAgICAgICAoZ2w6OlZl
cnRleFNoYWRlcjo6VmVydGV4U2hhZGVyKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhTaGFkZXI6On5W
ZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlZlcnRleFNoYWRlcjo6Z2V0VHlwZSk6CisgICAg
ICAgIChnbDo6VmVydGV4U2hhZGVyOjp1bmNvbXBpbGUpOgorICAgICAgICAoZ2w6OlZlcnRleFNo
YWRlcjo6Y29tcGlsZSk6CisgICAgICAgIChnbDo6VmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0lu
ZGV4KToKKyAgICAgICAgKGdsOjpWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcyk6CisgICAg
ICAgIChnbDo6RnJhZ21lbnRTaGFkZXI6OkZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKGdsOjpG
cmFnbWVudFNoYWRlcjo6fkZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKGdsOjpGcmFnbWVudFNo
YWRlcjo6Z2V0VHlwZSk6CisgICAgICAgIChnbDo6RnJhZ21lbnRTaGFkZXI6OmNvbXBpbGUpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmg6IEFkZGVkLgorICAgICAgICAoZ2w6OlZh
cnlpbmc6OlZhcnlpbmcpOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZTo6QXR0cmlidXRlKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdsOjpD
b252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKToKKyAgICAgICAgKGdsOjpHZXRUZXh0dXJlVXNhZ2UpOgorICAgICAgICAo
Z2w6Ok1ha2VWYWxpZFNpemUpOgorICAgICAgICAoZ2w6OkNvcHlMb2NrYWJsZVN1cmZhY2VzKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6SW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjp+SW1hZ2Up
OgorICAgICAgICAoZ2w6OkltYWdlOjpyZWRlZmluZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmNy
ZWF0ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2NrKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6dW5sb2NrKToKKyAgICAgICAgKGdsOjpJbWFnZTo6aXNSZW5kZXJhYmxlRm9ybWF0KToK
KyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6
Z2V0U3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnNldE1hbmFnZWRTdXJmYWNlKToKKyAg
ICAgICAgKGdsOjpJbWFnZTo6dXBkYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6Omxv
YWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEFscGhhRGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRB
bHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlRGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2Fk
THVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5h
bmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQlVCeXRl
RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVEYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JI
YWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEpOgor
ICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBRmxvYXRE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZENv
bXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6Y29weSk6CisgICAgICAgIChnbDo6
VGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3Rv
cmFnZTo6flRleHR1cmVTdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6aXNS
ZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc01hbmFnZWQpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjpnZXRQb29sKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlU3RvcmFnZTo6Z2V0VXNhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjpnZXRU
ZXh0dXJlU2VyaWFsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6aXNzdWVUZXh0dXJl
U2VyaWFsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6Z2V0TG9kT2Zmc2V0KToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjp+VGV4
dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0TWluRmlsdGVyKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpzZXRNYWdGaWx0ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldFdyYXBT
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRXcmFwVCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6c2V0TWF4QW5pc290cm9weSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0VXNhZ2UpOgor
ICAgICAgICAoZ2w6OlRleHR1cmU6OmdldE1pbkZpbHRlcik6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6Z2V0TWFnRmlsdGVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRXcmFwUyk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTo6Z2V0V3JhcFQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldE1h
eEFuaXNvdHJvcHkpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFVzYWdlKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlOjppc01pcG1hcEZpbHRlcmVkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpz
ZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c3Vi
SW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRUZXh0dXJlKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpoYXNEaXJ0eVBhcmFtZXRlcnMpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6Omhhc0RpcnR5SW1hZ2VzKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpyZXNldERpcnR5
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFsKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmU6
OmlzSW1tdXRhYmxlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRMb2RPZmZzZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpsZXZlbENvdW50KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRCbGl0dGVyKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1
cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9y
YWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJE
OjpnZXRTdXJmYWNlTGV2ZWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OmdldEJh
c2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6VGV4dHVyZTJEKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlMkQ6On5UZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6YWRk
UHJveHlSZWYpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVsZWFzZVByb3h5KToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlMkQ6OmdldFRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpn
ZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRIZWlnaHQpOgorICAgICAgICAo
Z2w6OlRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUy
RDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2Up
OgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1
cmUyRDo6YmluZFRleEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnJlbGVhc2VUZXhJ
bWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6Y29tbWl0UmVjdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
OjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQp
OgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weUltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlMkQ6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdG9yYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzRGVwdGgpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUy
RDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMpOgorICAgICAgICAoZ2w6OlRleHR1
cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRl
clRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0U3RvcmFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0
b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXApOgorICAgICAgICAoZ2w6OlRleHR1
cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRDdWJlTWFwU3VyZmFjZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4
dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmFk
ZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpn
ZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1h
dCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OnNldEltYWdlTmVnWCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNl
dEltYWdlUG9zWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWSk6
CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWik6CisgICAgICAgIChn
bDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWik6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6
OmNvbW1pdFJlY3QpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJl
TWFwOjppc01pcG1hcEN1YmVDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6
OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEJhc2VUZXh0
dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJ
bmRleCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpz
dG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2VuZXJhdGVNaXBtYXBzKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0
dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9UZXh0dXJl
Lmg6IEFkZGVkLgorICAgICAgICAoZ2w6OkltYWdlOjptYXJrRGlydHkpOgorICAgICAgICAoZ2w6
OkltYWdlOjptYXJrQ2xlYW4pOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXRXaWR0aCk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldEludGVy
bmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6aXNEaXJ0eSk6CisgICAgICAgICogc3Jj
L2xpYkdMRVN2Mi9UZXh0dXJlU1NFMi5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6OkltYWdlOjps
b2FkUkdCQVVCeXRlRGF0YVNTRTIpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoZ2w6OmVsZW1lbnRzSW5CdWZmZXIpOgorICAgICAgICAoZ2w6OlZlcnRl
eERhdGFNYW5hZ2VyOjpWZXJ0ZXhEYXRhTWFuYWdlcik6CisgICAgICAgIChnbDo6VmVydGV4RGF0
YU1hbmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdlcik6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1h
bmFnZXI6OndyaXRlQXR0cmlidXRlRGF0YSk6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFn
ZXI6OnByZXBhcmVWZXJ0ZXhEYXRhKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6
c3BhY2VSZXF1aXJlZCk6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFnZXI6OmNoZWNrVmVy
dGV4Q2Fwcyk6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFnZXI6OnR5cGVJbmRleCk6Cisg
ICAgICAgIChnbDo6VmVydGV4QnVmZmVyOjpWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OlZl
cnRleEJ1ZmZlcjo6flZlcnRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6VmVydGV4QnVmZmVyOjp1
bm1hcCk6CisgICAgICAgIChnbDo6VmVydGV4QnVmZmVyOjpnZXRCdWZmZXIpOgorICAgICAgICAo
Z2w6OlZlcnRleEJ1ZmZlcjo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhCdWZmZXI6
Omlzc3VlU2VyaWFsKToKKyAgICAgICAgKGdsOjpBcnJheVZlcnRleEJ1ZmZlcjo6QXJyYXlWZXJ0
ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OkFycmF5VmVydGV4QnVmZmVyOjp+QXJyYXlWZXJ0ZXhC
dWZmZXIpOgorICAgICAgICAoZ2w6OkFycmF5VmVydGV4QnVmZmVyOjphZGRSZXF1aXJlZFNwYWNl
KToKKyAgICAgICAgKGdsOjpTdHJlYW1pbmdWZXJ0ZXhCdWZmZXI6OlN0cmVhbWluZ1ZlcnRleEJ1
ZmZlcik6CisgICAgICAgIChnbDo6U3RyZWFtaW5nVmVydGV4QnVmZmVyOjp+U3RyZWFtaW5nVmVy
dGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpTdHJlYW1pbmdWZXJ0ZXhCdWZmZXI6Om1hcCk6Cisg
ICAgICAgIChnbDo6U3RyZWFtaW5nVmVydGV4QnVmZmVyOjpyZXNlcnZlUmVxdWlyZWRTcGFjZSk6
CisgICAgICAgIChnbDo6U3RhdGljVmVydGV4QnVmZmVyOjpTdGF0aWNWZXJ0ZXhCdWZmZXIpOgor
ICAgICAgICAoZ2w6OlN0YXRpY1ZlcnRleEJ1ZmZlcjo6flN0YXRpY1ZlcnRleEJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6U3RhdGljVmVydGV4QnVmZmVyOjptYXApOgorICAgICAgICAoZ2w6OlN0YXRp
Y1ZlcnRleEJ1ZmZlcjo6cmVzZXJ2ZVJlcXVpcmVkU3BhY2UpOgorICAgICAgICAoZ2w6OlN0YXRp
Y1ZlcnRleEJ1ZmZlcjo6bG9va3VwQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRh
TWFuYWdlcjo6Zm9ybWF0Q29udmVydGVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRl
eERhdGFNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoZ2w6OkFycmF5VmVydGV4QnVmZmVyOjpz
aXplKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6ZGlydHlDdXJyZW50VmFsdWUp
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDogQWRkZWQuCisgICAgICAg
ICh2YWxpZEltYWdlU2l6ZSk6CisgICAgICAgIChjaGVja1RleHR1cmVGb3JtYXRUeXBlKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRCk6CisgICAgICAgICh2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zQ3ViZSk6CisgICAgICAgICh2YWxpZFJlYWRGb3JtYXRUeXBlKToKKyAgICAgICAg
KiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWY6IEFkZGVkLgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvbGliR0xFU3YyLnJjOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi52Y3hwcm9qOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3hwcm9qLmZpbHRlcnM6IEFkZGVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbWFpbi5jcHA6
IEFkZGVkLgorICAgICAgICAoRGxsTWFpbik6CisgICAgICAgIChnbDo6bWFrZUN1cnJlbnQpOgor
ICAgICAgICAoZ2w6OmdldENvbnRleHQpOgorICAgICAgICAoZ2w6OmdldE5vbkxvc3RDb250ZXh0
KToKKyAgICAgICAgKGdsOjpnZXREaXNwbGF5KToKKyAgICAgICAgKGdsOjpnZXREZXZpY2UpOgor
ICAgICAgICAoZ2w6OmNoZWNrRGV2aWNlTG9zdCk6CisgICAgICAgIChlcnJvcik6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9tYWluLmg6IEFkZGVkLgorICAgICAgICAoZXJyb3IpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvbWF0aHV0aWwuaDogQWRkZWQuCisgICAgICAgIChnbDo6VmVjdG9y
NDo6VmVjdG9yNCk6CisgICAgICAgIChnbDo6aXNQb3cyKToKKyAgICAgICAgKGdsOjpsb2cyKToK
KyAgICAgICAgKGdsOjpjZWlsUG93Mik6CisgICAgICAgIChnbDo6Y2xhbXApOgorICAgICAgICAo
Z2w6OmNsYW1wMDEpOgorICAgICAgICAoZ2w6OnVub3JtKToKKyAgICAgICAgKGdsOjpzdXBwb3J0
c1NTRTIpOgorICAgICAgICAoZ2w6OmZsb2F0MzJUb0Zsb2F0MTYpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvcmVzb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9zaGFk
ZXJzOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL3NoYWRlcnMvQmxpdC5wczogQWRk
ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL0JsaXQudnM6IEFkZGVkLgorICAg
ICAgICAqIHNyYy9saWJHTEVTdjIvc2hhZGVycy9jb21wb25lbnRtYXNrcHMuaDogQWRkZWQuCisg
ICAgICAgICogc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL2ZsaXB5dnMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0OiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL3NoYWRlcnMvbHVtaW5hbmNlcHMuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL3Bhc3N0aHJvdWdocHMuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL3N0YW5kYXJkdnMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdsOjpVbmlm
b3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCk6CisgICAgICAgIChnbDo6VW5pZm9ybUludGVybmFs
Q29tcG9uZW50Q291bnQpOgorICAgICAgICAoZ2w6OlVuaWZvcm1Db21wb25lbnRUeXBlKToKKyAg
ICAgICAgKGdsOjpVbmlmb3JtQ29tcG9uZW50U2l6ZSk6CisgICAgICAgIChnbDo6VW5pZm9ybUlu
dGVybmFsU2l6ZSk6CisgICAgICAgIChnbDo6VW5pZm9ybUV4dGVybmFsU2l6ZSk6CisgICAgICAg
IChnbDo6VmFyaWFibGVSb3dDb3VudCk6CisgICAgICAgIChnbDo6VmFyaWFibGVDb2x1bW5Db3Vu
dCk6CisgICAgICAgIChnbDo6QWxsb2NhdGVGaXJzdEZyZWVCaXRzKToKKyAgICAgICAgKGdsOjpD
b21wdXRlUGl0Y2gpOgorICAgICAgICAoZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2gpOgorICAg
ICAgICAoZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSk6CisgICAgICAgIChnbDo6SXNDb21wcmVz
c2VkKToKKyAgICAgICAgKGdsOjpJc0RlcHRoVGV4dHVyZSk6CisgICAgICAgIChnbDo6SXNTdGVu
Y2lsVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29tcHV0ZVBpeGVsU2l6ZSk6CisgICAgICAgIChn
bDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCk6CisgICAgICAgIChnbDo6SXNJbnRlcm5hbFRleHR1
cmVUYXJnZXQpOgorICAgICAgICAoZ2w6OkNvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KToKKyAg
ICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6Cisg
ICAgICAgIChnbDo6SXNDb2xvclJlbmRlcmFibGUpOgorICAgICAgICAoZ2w6OklzRGVwdGhSZW5k
ZXJhYmxlKToKKyAgICAgICAgKGdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKToKKyAgICAgICAgKGds
OjpJc0Zsb2F0MzJGb3JtYXQpOgorICAgICAgICAoZ2w6OklzRmxvYXQxNkZvcm1hdCk6CisgICAg
ICAgIChlczJkeDo6Q29udmVydENvbXBhcmlzb24pOgorICAgICAgICAoZXMyZHg6OkNvbnZlcnRD
b2xvcik6CisgICAgICAgIChlczJkeDo6Q29udmVydEJsZW5kRnVuYyk6CisgICAgICAgIChlczJk
eDo6Q29udmVydEJsZW5kT3ApOgorICAgICAgICAoZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3ApOgor
ICAgICAgICAoZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCk6CisgICAgICAgIChlczJkeDo6Q29u
dmVydEN1bGxNb2RlKToKKyAgICAgICAgKGVzMmR4OjpDb252ZXJ0Q3ViZUZhY2UpOgorICAgICAg
ICAoZXMyZHg6OkNvbnZlcnRDb2xvck1hc2spOgorICAgICAgICAoZXMyZHg6OkNvbnZlcnRNYWdG
aWx0ZXIpOgorICAgICAgICAoZXMyZHg6OkNvbnZlcnRNaW5GaWx0ZXIpOgorICAgICAgICAoZXMy
ZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKToKKyAgICAgICAgKGVzMmR4OjpDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KToKKyAgICAgICAgKGVzMmR4OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2Ft
cGxlcyk6CisgICAgICAgIChkeDJlczo6R2V0U3RlbmNpbFNpemUpOgorICAgICAgICAoZHgyZXM6
OkdldEFscGhhU2l6ZSk6CisgICAgICAgIChkeDJlczo6R2V0UmVkU2l6ZSk6CisgICAgICAgIChk
eDJlczo6R2V0R3JlZW5TaXplKToKKyAgICAgICAgKGR4MmVzOjpHZXRCbHVlU2l6ZSk6CisgICAg
ICAgIChkeDJlczo6R2V0RGVwdGhTaXplKToKKyAgICAgICAgKGR4MmVzOjpHZXRTYW1wbGVzRnJv
bU11bHRpc2FtcGxlVHlwZSk6CisgICAgICAgIChkeDJlczo6SXNGb3JtYXRDaGFubmVsRXF1aXZh
bGVudCk6CisgICAgICAgIChkeDJlczo6Q29udmVydFJlYWRCdWZmZXJGb3JtYXQpOgorICAgICAg
ICAoZHgyZXM6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KToKKyAgICAgICAgKGR4MmVzOjpDb252
ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKGR4OjpJc0NvbXByZXNzZWRGb3JtYXQp
OgorICAgICAgICAoZHg6OkNvbXB1dGVSb3dTaXplKToKKyAgICAgICAgKGdldFRlbXBQYXRoKToK
KyAgICAgICAgKHdyaXRlRmlsZSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
aDogQWRkZWQuCisgICAgICAgIChpc0RldmljZUxvc3RFcnJvcik6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi92ZXJ0ZXhjb252ZXJzaW9uLmg6IEFkZGVkLgorICAgICAgICAoZ2w6OklkZW50aXR5
Ojpjb252ZXJ0KToKKyAgICAgICAgKGdsOjpDYXN0Ojpjb252ZXJ0KToKKyAgICAgICAgKGdsOjpO
b3JtYWxpemU6OmNvbnZlcnQpOgorICAgICAgICAoZ2w6OkZpeGVkVG9GbG9hdDo6Y29udmVydCk6
CisgICAgICAgIChnbDo6U2ltcGxlRGVmYXVsdFZhbHVlczo6emVybyk6CisgICAgICAgIChnbDo6
U2ltcGxlRGVmYXVsdFZhbHVlczo6b25lKToKKyAgICAgICAgKGdsOjpOb3JtYWxpemVkRGVmYXVs
dFZhbHVlczo6emVybyk6CisgICAgICAgIChnbDo6Tm9ybWFsaXplZERlZmF1bHRWYWx1ZXM6Om9u
ZSk6CisgICAgICAgIChnbDo6VmVydGV4RGF0YUNvbnZlcnRlcjo6Y29udmVydEFycmF5KToKKyAg
ICAgICAgKGdsOjpWZXJ0ZXhEYXRhQ29udmVydGVyOjpwb2ludGVyQWRkQnl0ZXMpOgorICAgICAg
ICAoZ2w6OlZlcnRleERhdGFDb252ZXJ0ZXI6OmNvcHlDb21wb25lbnQpOgorCiAyMDEzLTA3LTE3
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBN
YWRlIGEgcmVwZWF0YWJsZSBwcm9jZXNzIGZvciB1cGRhdGluZyBBTkdMRSB0aGF0IGRvZXMgbm90
IGluY2x1ZGUgbWFudWFsbHkgZWRpdGluZyBhbnkgZmlsZXMuCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvYnVpbHRpbl9zeW1ib2xzLmpzb24KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2J1aWx0aW5fc3ltYm9scy5q
c29uCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2J1aWx0aW5fc3ltYm9scy5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgxNiBAQAor
eworInR0eXBlbWFwIiA6IHsKKyAiZmxvYXQiOiJuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVm
aW5lZCwgRXZxR2xvYmFsLCAxLCBmYWxzZSwgZmFsc2UpIiwKKyAiaW50IjoibmV3IFRUeXBlKEVi
dEludCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEsIGZhbHNlLCBmYWxzZSkiLAorICJib29s
IjoibmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxLCBmYWxzZSwg
ZmFsc2UpIiwKKyAidmVjMiI6Im5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFH
bG9iYWwsIDIsIGZhbHNlLCBmYWxzZSkiLAorICJ2ZWMzIjoibmV3IFRUeXBlKEVidEZsb2F0LCBF
YnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMywgZmFsc2UsIGZhbHNlKSIsCisgInZlYzQiOiJuZXcg
VFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0LCBmYWxzZSwgZmFsc2Up
IiwKKyAiYnZlYzIiOiJuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWws
IDIsIGZhbHNlLCBmYWxzZSkiLAorICJidmVjMyI6Im5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUdsb2JhbCwgMywgZmFsc2UsIGZhbHNlKSIsCisgImJ2ZWM0IjoibmV3IFRUeXBl
KEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0LCBmYWxzZSwgZmFsc2UpIiwKKyAi
aXZlYzIiOiJuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMiwgZmFs
c2UsIGZhbHNlKSIsCisgIml2ZWMzIjoibmV3IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBF
dnFHbG9iYWwsIDMsIGZhbHNlLCBmYWxzZSkiLAorICJpdmVjNCI6Im5ldyBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0LCBmYWxzZSwgZmFsc2UpIiwKKyAibWF0MiI6Im5l
dyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIsIHRydWUsIGZhbHNl
KSIsCisgIm1hdDMiOiJuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFs
LCAzLCB0cnVlLCBmYWxzZSkiLAorICJtYXQ0IjoibmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRl
ZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSwgZmFsc2UpIiwKKyAic2FtcGxlcjJEIjoibmV3IFRU
eXBlKEVidFNhbXBsZXIyRCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEsIGZhbHNlLCBmYWxz
ZSkiLAorICJzYW1wbGVyQ3ViZSI6Im5ldyBUVHlwZShFYnRTYW1wbGVyQ3ViZSwgRWJwVW5kZWZp
bmVkLCBFdnFHbG9iYWwsIDEsIGZhbHNlLCBmYWxzZSkiLAorICJzYW1wbGVyRXh0ZXJuYWxPRVMi
OiJuZXcgVFR5cGUoRWJ0U2FtcGxlckV4dGVybmFsT0VTLCBFYnBVbmRlZmluZWQsIEV2cUdsb2Jh
bCwgMSwgZmFsc2UsIGZhbHNlKSIsCisgInNhbXBsZXIyRFJlY3QiOiJuZXcgVFR5cGUoRWJ0U2Ft
cGxlcjJEUmVjdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEsIGZhbHNlLCBmYWxzZSkiCit9
LAorCisiY29tbW9uIiA6IFsKKyB7CisgICJuYW1lIjogInJhZGlhbnMiLAorICAicmV0dXJuX3R5
cGUiOiAiZmxvYXQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogImZsb2F0IiwgIm5h
bWUiOiAiZGVncmVlcyJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAicmFkaWFucyIsCisgICJy
ZXR1cm5fdHlwZSI6ICJ2ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMy
IiwgIm5hbWUiOiAiZGVncmVlcyJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAicmFkaWFucyIs
CisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6
ICJ2ZWMzIiwgIm5hbWUiOiAiZGVncmVlcyJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAicmFk
aWFucyIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsi
dHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAiZGVncmVlcyJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUi
OiAiZGVncmVlcyIsCisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIiOiBb
CisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJyYWRpYW5zIn0KKyAgXQorIH0sCisgewor
ICAibmFtZSI6ICJkZWdyZWVzIiwKKyAgInJldHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1l
dGVyIjogWworICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJyYWRpYW5zIn0KKyAgXQorIH0s
CisgeworICAibmFtZSI6ICJkZWdyZWVzIiwKKyAgInJldHVybl90eXBlIjogInZlYzMiLAorICAi
cGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJyYWRpYW5zIn0KKyAg
XQorIH0sCisgeworICAibmFtZSI6ICJkZWdyZWVzIiwKKyAgInJldHVybl90eXBlIjogInZlYzQi
LAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJyYWRpYW5z
In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJzaW4iLAorICAicmV0dXJuX3R5cGUiOiAiZmxv
YXQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAiYW5n
bGUifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogInNpbiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2
ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAiYW5n
bGUifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogInNpbiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2
ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAiYW5n
bGUifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogInNpbiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2
ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAiYW5n
bGUifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImNvcyIsCisgICJyZXR1cm5fdHlwZSI6ICJm
bG9hdCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJh
bmdsZSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiY29zIiwKKyAgInJldHVybl90eXBlIjog
InZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJh
bmdsZSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiY29zIiwKKyAgInJldHVybl90eXBlIjog
InZlYzMiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJh
bmdsZSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiY29zIiwKKyAgInJldHVybl90eXBlIjog
InZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJh
bmdsZSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAidGFuIiwKKyAgInJldHVybl90eXBlIjog
ImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjog
ImFuZ2xlIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJ0YW4iLAorICAicmV0dXJuX3R5cGUi
OiAidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjog
ImFuZ2xlIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJ0YW4iLAorICAicmV0dXJuX3R5cGUi
OiAidmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjog
ImFuZ2xlIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJ0YW4iLAorICAicmV0dXJuX3R5cGUi
OiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjNCIsICJuYW1lIjog
ImFuZ2xlIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJhc2luIiwKKyAgInJldHVybl90eXBl
IjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1l
IjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImFzaW4iLAorICAicmV0dXJuX3R5cGUi
OiAidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjog
IngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImFzaW4iLAorICAicmV0dXJuX3R5cGUiOiAi
dmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogIngi
fQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImFzaW4iLAorICAicmV0dXJuX3R5cGUiOiAidmVj
NCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjNCIsICJuYW1lIjogIngifQor
ICBdCisgfSwKKyB7CisgICJuYW1lIjogImFjb3MiLAorICAicmV0dXJuX3R5cGUiOiAiZmxvYXQi
LAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAieCJ9Cisg
IF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiYWNvcyIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMyIiwK
KyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieCJ9CisgIF0K
KyB9LAorIHsKKyAgIm5hbWUiOiAiYWNvcyIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMzIiwKKyAg
InBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9
LAorIHsKKyAgIm5hbWUiOiAiYWNvcyIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBh
cmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAor
IHsKKyAgIm5hbWUiOiAiYXRhbiIsCisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJh
bWV0ZXIiOiBbCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJ5In0sCisgICB7InR5cGUi
OiAiZmxvYXQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJhdGFuIiwK
KyAgInJldHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjog
InZlYzIiLCAibmFtZSI6ICJ5In0sCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjogIngifQor
ICBdCisgfSwKKyB7CisgICJuYW1lIjogImF0YW4iLAorICAicmV0dXJuX3R5cGUiOiAidmVjMyIs
CisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogInkifSwKKyAg
IHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAi
YXRhbiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsi
dHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieSJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6
ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJhdGFuIiwKKyAgInJldHVybl90eXBlIjog
ImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjog
Inlfb3Zlcl94In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJhdGFuIiwKKyAgInJldHVybl90
eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzIiLCAibmFt
ZSI6ICJ5X292ZXJfeCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiYXRhbiIsCisgICJyZXR1
cm5fdHlwZSI6ICJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwg
Im5hbWUiOiAieV9vdmVyX3gifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImF0YW4iLAorICAi
cmV0dXJuX3R5cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVj
NCIsICJuYW1lIjogInlfb3Zlcl94In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJwb3ciLAor
ICAicmV0dXJuX3R5cGUiOiAiZmxvYXQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjog
ImZsb2F0IiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAieSJ9
CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAicG93IiwKKyAgInJldHVybl90eXBlIjogInZlYzIi
LAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJ4In0sCisg
ICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjog
InBvdyIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsi
dHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6
ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJwb3ciLAorICAicmV0dXJuX3R5cGUiOiAi
dmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjNCIsICJuYW1lIjogIngi
fSwKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5h
bWUiOiAiZXhwIiwKKyAgInJldHVybl90eXBlIjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsK
KyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1l
IjogImV4cCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAg
IHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAi
ZXhwIiwKKyAgInJldHVybl90eXBlIjogInZlYzMiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0
eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJleHAi
LAorICAicmV0dXJuX3R5cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUi
OiAidmVjNCIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImxvZyIsCisg
ICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAi
ZmxvYXQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJsb2ciLAorICAi
cmV0dXJuX3R5cGUiOiAidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVj
MiIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImxvZyIsCisgICJyZXR1
cm5fdHlwZSI6ICJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwg
Im5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibG9nIiwKKyAgInJldHVybl90
eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzQiLCAibmFt
ZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJleHAyIiwKKyAgInJldHVybl90eXBl
IjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1l
IjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImV4cDIiLAorICAicmV0dXJuX3R5cGUi
OiAidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjog
IngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImV4cDIiLAorICAicmV0dXJuX3R5cGUiOiAi
dmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogIngi
fQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImV4cDIiLAorICAicmV0dXJuX3R5cGUiOiAidmVj
NCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjNCIsICJuYW1lIjogIngifQor
ICBdCisgfSwKKyB7CisgICJuYW1lIjogImxvZzIiLAorICAicmV0dXJuX3R5cGUiOiAiZmxvYXQi
LAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAieCJ9Cisg
IF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibG9nMiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMyIiwK
KyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieCJ9CisgIF0K
KyB9LAorIHsKKyAgIm5hbWUiOiAibG9nMiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMzIiwKKyAg
InBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9
LAorIHsKKyAgIm5hbWUiOiAibG9nMiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBh
cmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAor
IHsKKyAgIm5hbWUiOiAic3FydCIsCisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJh
bWV0ZXIiOiBbCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisg
eworICAibmFtZSI6ICJzcXJ0IiwKKyAgInJldHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1l
dGVyIjogWworICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgewor
ICAibmFtZSI6ICJzcXJ0IiwKKyAgInJldHVybl90eXBlIjogInZlYzMiLAorICAicGFyYW1ldGVy
IjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAi
bmFtZSI6ICJzcXJ0IiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjog
WworICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFt
ZSI6ICJpbnZlcnNlc3FydCIsCisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0
ZXIiOiBbCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgewor
ICAibmFtZSI6ICJpbnZlcnNlc3FydCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMyIiwKKyAgInBh
cmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAor
IHsKKyAgIm5hbWUiOiAiaW52ZXJzZXNxcnQiLAorICAicmV0dXJuX3R5cGUiOiAidmVjMyIsCisg
ICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogIngifQorICBdCisg
fSwKKyB7CisgICJuYW1lIjogImludmVyc2VzcXJ0IiwKKyAgInJldHVybl90eXBlIjogInZlYzQi
LAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ4In0KKyAg
XQorIH0sCisgeworICAibmFtZSI6ICJhYnMiLAorICAicmV0dXJuX3R5cGUiOiAiZmxvYXQiLAor
ICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAieCJ9CisgIF0K
KyB9LAorIHsKKyAgIm5hbWUiOiAiYWJzIiwKKyAgInJldHVybl90eXBlIjogInZlYzIiLAorICAi
cGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0s
CisgeworICAibmFtZSI6ICJhYnMiLAorICAicmV0dXJuX3R5cGUiOiAidmVjMyIsCisgICJwYXJh
bWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7
CisgICJuYW1lIjogImFicyIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRl
ciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAg
Im5hbWUiOiAic2lnbiIsCisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIi
OiBbCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAi
bmFtZSI6ICJzaWduIiwKKyAgInJldHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjog
WworICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFt
ZSI6ICJzaWduIiwKKyAgInJldHVybl90eXBlIjogInZlYzMiLAorICAicGFyYW1ldGVyIjogWwor
ICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6
ICJzaWduIiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAg
eyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJm
bG9vciIsCisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7
InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJm
bG9vciIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsi
dHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiZmxv
b3IiLAorICAicmV0dXJuX3R5cGUiOiAidmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5
cGUiOiAidmVjMyIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImZsb29y
IiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBl
IjogInZlYzQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJjZWlsIiwK
KyAgInJldHVybl90eXBlIjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6
ICJmbG9hdCIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImNlaWwiLAor
ICAicmV0dXJuX3R5cGUiOiAidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAi
dmVjMiIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImNlaWwiLAorICAi
cmV0dXJuX3R5cGUiOiAidmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVj
MyIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImNlaWwiLAorICAicmV0
dXJuX3R5cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjNCIs
ICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImZyYWN0IiwKKyAgInJldHVy
bl90eXBlIjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIs
ICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImZyYWN0IiwKKyAgInJldHVy
bl90eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzIiLCAi
bmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJmcmFjdCIsCisgICJyZXR1cm5f
dHlwZSI6ICJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5h
bWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiZnJhY3QiLAorICAicmV0dXJuX3R5
cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjNCIsICJuYW1l
IjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogIm1vZCIsCisgICJyZXR1cm5fdHlwZSI6
ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6
ICJ4In0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgewor
ICAibmFtZSI6ICJtb2QiLAorICAicmV0dXJuX3R5cGUiOiAidmVjMiIsCisgICJwYXJhbWV0ZXIi
OiBbCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjogIngifSwKKyAgIHsidHlwZSI6ICJmbG9h
dCIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogIm1vZCIsCisgICJyZXR1
cm5fdHlwZSI6ICJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwg
Im5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9
LAorIHsKKyAgIm5hbWUiOiAibW9kIiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFy
YW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUi
OiAiZmxvYXQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJtb2QiLAor
ICAicmV0dXJuX3R5cGUiOiAidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAi
dmVjMiIsICJuYW1lIjogIngifSwKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieSJ9Cisg
IF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibW9kIiwKKyAgInJldHVybl90eXBlIjogInZlYzMiLAor
ICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7
InR5cGUiOiAidmVjMyIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogIm1v
ZCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlw
ZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ5
In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJtaW4iLAorICAicmV0dXJuX3R5cGUiOiAiZmxv
YXQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAieCJ9
LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5h
bWUiOiAibWluIiwKKyAgInJldHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjogWwor
ICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAi
bmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJtaW4iLAorICAicmV0dXJuX3R5
cGUiOiAidmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1l
IjogIngifSwKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7
CisgICJuYW1lIjogIm1pbiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRl
ciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogImZs
b2F0IiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibWluIiwKKyAgInJl
dHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzIi
LCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjogInkifQorICBdCisg
fSwKKyB7CisgICJuYW1lIjogIm1pbiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMzIiwKKyAgInBh
cmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBl
IjogInZlYzMiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJtaW4iLAor
ICAicmV0dXJuX3R5cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAi
dmVjNCIsICJuYW1lIjogIngifSwKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieSJ9Cisg
IF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibWF4IiwKKyAgInJldHVybl90eXBlIjogImZsb2F0IiwK
KyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogIngifSwKKyAg
IHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjog
Im1heCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsi
dHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUi
OiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibWF4IiwKKyAgInJldHVybl90eXBlIjog
InZlYzMiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4
In0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAi
bmFtZSI6ICJtYXgiLAorICAicmV0dXJuX3R5cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBb
CisgICB7InR5cGUiOiAidmVjNCIsICJuYW1lIjogIngifSwKKyAgIHsidHlwZSI6ICJmbG9hdCIs
ICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogIm1heCIsCisgICJyZXR1cm5f
dHlwZSI6ICJ2ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5h
bWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisg
eworICAibmFtZSI6ICJtYXgiLAorICAicmV0dXJuX3R5cGUiOiAidmVjMyIsCisgICJwYXJhbWV0
ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogIngifSwKKyAgIHsidHlwZSI6ICJ2
ZWMzIiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibWF4IiwKKyAgInJl
dHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzQi
LCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAidmVjNCIsICJuYW1lIjogInkifQorICBdCisg
fSwKKyB7CisgICJuYW1lIjogImNsYW1wIiwKKyAgInJldHVybl90eXBlIjogImZsb2F0IiwKKyAg
InBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogIngifSwKKyAgIHsi
dHlwZSI6ICJmbG9hdCIsICJuYW1lIjogIm1pblZhbCJ9LAorICAgeyJ0eXBlIjogImZsb2F0Iiwg
Im5hbWUiOiAibWF4VmFsIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJjbGFtcCIsCisgICJy
ZXR1cm5fdHlwZSI6ICJ2ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMy
IiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAibWluVmFsIn0s
CisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJtYXhWYWwifQorICBdCisgfSwKKyB7Cisg
ICJuYW1lIjogImNsYW1wIiwKKyAgInJldHVybl90eXBlIjogInZlYzMiLAorICAicGFyYW1ldGVy
IjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiZmxv
YXQiLCAibmFtZSI6ICJtaW5WYWwifSwKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogIm1h
eFZhbCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiY2xhbXAiLAorICAicmV0dXJuX3R5cGUi
OiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjNCIsICJuYW1lIjog
IngifSwKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogIm1pblZhbCJ9LAorICAgeyJ0eXBl
IjogImZsb2F0IiwgIm5hbWUiOiAibWF4VmFsIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJj
bGFtcCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsi
dHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6
ICJtaW5WYWwifSwKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAibWF4VmFsIn0KKyAgXQor
IH0sCisgeworICAibmFtZSI6ICJjbGFtcCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMzIiwKKyAg
InBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0
eXBlIjogInZlYzMiLCAibmFtZSI6ICJtaW5WYWwifSwKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5h
bWUiOiAibWF4VmFsIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJjbGFtcCIsCisgICJyZXR1
cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0Iiwg
Im5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJtaW5WYWwifSwKKyAg
IHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAibWF4VmFsIn0KKyAgXQorIH0sCisgeworICAibmFt
ZSI6ICJtaXgiLAorICAicmV0dXJuX3R5cGUiOiAiZmxvYXQiLAorICAicGFyYW1ldGVyIjogWwor
ICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogImZsb2F0Iiwg
Im5hbWUiOiAieSJ9LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAiYSJ9CisgIF0KKyB9
LAorIHsKKyAgIm5hbWUiOiAibWl4IiwKKyAgInJldHVybl90eXBlIjogInZlYzIiLAorICAicGFy
YW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUi
OiAidmVjMiIsICJuYW1lIjogInkifSwKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogImEi
fQorICBdCisgfSwKKyB7CisgICJuYW1lIjogIm1peCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMz
IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9LAor
ICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ5In0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAi
bmFtZSI6ICJhIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJtaXgiLAorICAicmV0dXJuX3R5
cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjNCIsICJuYW1l
IjogIngifSwKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieSJ9LAorICAgeyJ0eXBlIjog
ImZsb2F0IiwgIm5hbWUiOiAiYSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibWl4IiwKKyAg
InJldHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZl
YzIiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjogInkifSwKKyAg
IHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAiYSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAi
bWl4IiwKKyAgInJldHVybl90eXBlIjogInZlYzMiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0
eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjog
InkifSwKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAiYSJ9CisgIF0KKyB9LAorIHsKKyAg
Im5hbWUiOiAibWl4IiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjog
WworICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAidmVjNCIs
ICJuYW1lIjogInkifSwKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAiYSJ9CisgIF0KKyB9
LAorIHsKKyAgIm5hbWUiOiAic3RlcCIsCisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJw
YXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJlZGdlIn0sCisgICB7
InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJz
dGVwIiwKKyAgInJldHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0
eXBlIjogInZlYzIiLCAibmFtZSI6ICJlZGdlIn0sCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1l
IjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogInN0ZXAiLAorICAicmV0dXJuX3R5cGUi
OiAidmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjog
ImVkZ2UifSwKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsK
KyAgIm5hbWUiOiAic3RlcCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRl
ciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAiZWRnZSJ9LAorICAgeyJ0eXBlIjog
InZlYzQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJzdGVwIiwKKyAg
InJldHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogImZs
b2F0IiwgIm5hbWUiOiAiZWRnZSJ9LAorICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJ4In0K
KyAgXQorIH0sCisgeworICAibmFtZSI6ICJzdGVwIiwKKyAgInJldHVybl90eXBlIjogInZlYzMi
LAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAiZWRnZSJ9
LAorICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFt
ZSI6ICJzdGVwIiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWwor
ICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAiZWRnZSJ9LAorICAgeyJ0eXBlIjogInZlYzQi
LCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJzbW9vdGhzdGVwIiwKKyAg
InJldHVybl90eXBlIjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJm
bG9hdCIsICJuYW1lIjogImVkZ2UwIn0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJl
ZGdlMSJ9LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsK
KyAgIm5hbWUiOiAic21vb3Roc3RlcCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMyIiwKKyAgInBh
cmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAiZWRnZTAifSwKKyAgIHsi
dHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAiZWRnZTEifSwKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5h
bWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAic21vb3Roc3RlcCIsCisgICJyZXR1
cm5fdHlwZSI6ICJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwg
Im5hbWUiOiAiZWRnZTAifSwKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAiZWRnZTEifSwK
KyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUi
OiAic21vb3Roc3RlcCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6
IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAiZWRnZTAifSwKKyAgIHsidHlwZSI6ICJ2
ZWM0IiwgIm5hbWUiOiAiZWRnZTEifSwKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9
CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAic21vb3Roc3RlcCIsCisgICJyZXR1cm5fdHlwZSI6
ICJ2ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjog
ImVkZ2UwIn0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJlZGdlMSJ9LAorICAgeyJ0
eXBlIjogInZlYzIiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJzbW9v
dGhzdGVwIiwKKyAgInJldHVybl90eXBlIjogInZlYzMiLAorICAicGFyYW1ldGVyIjogWworICAg
eyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAiZWRnZTAifSwKKyAgIHsidHlwZSI6ICJmbG9hdCIs
ICJuYW1lIjogImVkZ2UxIn0sCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogIngifQorICBd
CisgfSwKKyB7CisgICJuYW1lIjogInNtb290aHN0ZXAiLAorICAicmV0dXJuX3R5cGUiOiAidmVj
NCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJlZGdl
MCJ9LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAiZWRnZTEifSwKKyAgIHsidHlwZSI6
ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibGVuZ3RoIiwK
KyAgInJldHVybl90eXBlIjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6
ICJmbG9hdCIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImxlbmd0aCIs
CisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUi
OiAidmVjMiIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImxlbmd0aCIs
CisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUi
OiAidmVjMyIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImxlbmd0aCIs
CisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUi
OiAidmVjNCIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImRpc3RhbmNl
IiwKKyAgInJldHVybl90eXBlIjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlw
ZSI6ICJmbG9hdCIsICJuYW1lIjogInAwIn0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6
ICJwMSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiZGlzdGFuY2UiLAorICAicmV0dXJuX3R5
cGUiOiAiZmxvYXQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzIiLCAibmFt
ZSI6ICJwMCJ9LAorICAgeyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJwMSJ9CisgIF0KKyB9LAor
IHsKKyAgIm5hbWUiOiAiZGlzdGFuY2UiLAorICAicmV0dXJuX3R5cGUiOiAiZmxvYXQiLAorICAi
cGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJwMCJ9LAorICAgeyJ0
eXBlIjogInZlYzMiLCAibmFtZSI6ICJwMSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiZGlz
dGFuY2UiLAorICAicmV0dXJuX3R5cGUiOiAiZmxvYXQiLAorICAicGFyYW1ldGVyIjogWworICAg
eyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJwMCJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFt
ZSI6ICJwMSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiZG90IiwKKyAgInJldHVybl90eXBl
IjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1l
IjogIngifSwKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7
CisgICJuYW1lIjogImRvdCIsCisgICJyZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0
ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjogIngifSwKKyAgIHsidHlwZSI6ICJ2
ZWMyIiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiZG90IiwKKyAgInJl
dHVybl90eXBlIjogImZsb2F0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMz
IiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ5In0KKyAgXQor
IH0sCisgeworICAibmFtZSI6ICJkb3QiLAorICAicmV0dXJuX3R5cGUiOiAiZmxvYXQiLAorICAi
cGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ4In0sCisgICB7InR5
cGUiOiAidmVjNCIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImNyb3Nz
IiwKKyAgInJldHVybl90eXBlIjogInZlYzMiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBl
IjogInZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogInki
fQorICBdCisgfSwKKyB7CisgICJuYW1lIjogIm5vcm1hbGl6ZSIsCisgICJyZXR1cm5fdHlwZSI6
ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6
ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJub3JtYWxpemUiLAorICAicmV0dXJuX3R5
cGUiOiAidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1l
IjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogIm5vcm1hbGl6ZSIsCisgICJyZXR1cm5f
dHlwZSI6ICJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5h
bWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibm9ybWFsaXplIiwKKyAgInJldHVy
bl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzQiLCAi
bmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJmYWNlZm9yd2FyZCIsCisgICJy
ZXR1cm5fdHlwZSI6ICJmbG9hdCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiZmxv
YXQiLCAibmFtZSI6ICJOIn0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJJIn0sCisg
ICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJOcmVmIn0KKyAgXQorIH0sCisgeworICAibmFt
ZSI6ICJmYWNlZm9yd2FyZCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMyIiwKKyAgInBhcmFtZXRl
ciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAiTiJ9LAorICAgeyJ0eXBlIjogInZl
YzIiLCAibmFtZSI6ICJJIn0sCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjogIk5yZWYifQor
ICBdCisgfSwKKyB7CisgICJuYW1lIjogImZhY2Vmb3J3YXJkIiwKKyAgInJldHVybl90eXBlIjog
InZlYzMiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJO
In0sCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogIkkifSwKKyAgIHsidHlwZSI6ICJ2ZWMz
IiwgIm5hbWUiOiAiTnJlZiJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiZmFjZWZvcndhcmQi
LAorICAicmV0dXJuX3R5cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUi
OiAidmVjNCIsICJuYW1lIjogIk4ifSwKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAiSSJ9
LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJOcmVmIn0KKyAgXQorIH0sCisgeworICAi
bmFtZSI6ICJyZWZsZWN0IiwKKyAgInJldHVybl90eXBlIjogImZsb2F0IiwKKyAgInBhcmFtZXRl
ciI6IFsKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogIkkifSwKKyAgIHsidHlwZSI6ICJm
bG9hdCIsICJuYW1lIjogIk4ifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogInJlZmxlY3QiLAor
ICAicmV0dXJuX3R5cGUiOiAidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAi
dmVjMiIsICJuYW1lIjogIkkifSwKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAiTiJ9Cisg
IF0KKyB9LAorIHsKKyAgIm5hbWUiOiAicmVmbGVjdCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMz
IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAiSSJ9LAor
ICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJOIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6
ICJyZWZsZWN0IiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWwor
ICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJJIn0sCisgICB7InR5cGUiOiAidmVjNCIsICJu
YW1lIjogIk4ifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogInJlZnJhY3QiLAorICAicmV0dXJu
X3R5cGUiOiAiZmxvYXQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogImZsb2F0Iiwg
Im5hbWUiOiAiSSJ9LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAiTiJ9LAorICAgeyJ0
eXBlIjogImZsb2F0IiwgIm5hbWUiOiAiZXRhIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJy
ZWZyYWN0IiwKKyAgInJldHVybl90eXBlIjogInZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAg
eyJ0eXBlIjogInZlYzIiLCAibmFtZSI6ICJJIn0sCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1l
IjogIk4ifSwKKyAgIHsidHlwZSI6ICJmbG9hdCIsICJuYW1lIjogImV0YSJ9CisgIF0KKyB9LAor
IHsKKyAgIm5hbWUiOiAicmVmcmFjdCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWMzIiwKKyAgInBh
cmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAiSSJ9LAorICAgeyJ0eXBl
IjogInZlYzMiLCAibmFtZSI6ICJOIn0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJl
dGEifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogInJlZnJhY3QiLAorICAicmV0dXJuX3R5cGUi
OiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjNCIsICJuYW1lIjog
IkkifSwKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAiTiJ9LAorICAgeyJ0eXBlIjogImZs
b2F0IiwgIm5hbWUiOiAiZXRhIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJtYXRyaXhDb21w
TXVsdCIsCisgICJyZXR1cm5fdHlwZSI6ICJtYXQyIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsi
dHlwZSI6ICJtYXQyIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogIm1hdDIiLCAibmFtZSI6
ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJtYXRyaXhDb21wTXVsdCIsCisgICJyZXR1
cm5fdHlwZSI6ICJtYXQzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJtYXQzIiwg
Im5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogIm1hdDMiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0s
CisgeworICAibmFtZSI6ICJtYXRyaXhDb21wTXVsdCIsCisgICJyZXR1cm5fdHlwZSI6ICJtYXQ0
IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJtYXQ0IiwgIm5hbWUiOiAieCJ9LAor
ICAgeyJ0eXBlIjogIm1hdDQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6
ICJsZXNzVGhhbiIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBb
CisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjogIngifSwKKyAgIHsidHlwZSI6ICJ2ZWMyIiwg
Im5hbWUiOiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibGVzc1RoYW4iLAorICAicmV0
dXJuX3R5cGUiOiAiYnZlYzMiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzMi
LCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1lIjogInkifQorICBdCisg
fSwKKyB7CisgICJuYW1lIjogImxlc3NUaGFuIiwKKyAgInJldHVybl90eXBlIjogImJ2ZWM0IiwK
KyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9LAorICAg
eyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJs
ZXNzVGhhbiIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisg
ICB7InR5cGUiOiAiaXZlYzIiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiaXZlYzIiLCAi
bmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJsZXNzVGhhbiIsCisgICJyZXR1
cm5fdHlwZSI6ICJidmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiaXZlYzMi
LCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiaXZlYzMiLCAibmFtZSI6ICJ5In0KKyAgXQor
IH0sCisgeworICAibmFtZSI6ICJsZXNzVGhhbiIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjNCIs
CisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiaXZlYzQiLCAibmFtZSI6ICJ4In0sCisg
ICB7InR5cGUiOiAiaXZlYzQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6
ICJsZXNzVGhhbkVxdWFsIiwKKyAgInJldHVybl90eXBlIjogImJ2ZWMyIiwKKyAgInBhcmFtZXRl
ciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZl
YzIiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJsZXNzVGhhbkVxdWFs
IiwKKyAgInJldHVybl90eXBlIjogImJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlw
ZSI6ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ5
In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJsZXNzVGhhbkVxdWFsIiwKKyAgInJldHVybl90
eXBlIjogImJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5h
bWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisg
eworICAibmFtZSI6ICJsZXNzVGhhbkVxdWFsIiwKKyAgInJldHVybl90eXBlIjogImJ2ZWMyIiwK
KyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJpdmVjMiIsICJuYW1lIjogIngifSwKKyAg
IHsidHlwZSI6ICJpdmVjMiIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjog
Imxlc3NUaGFuRXF1YWwiLAorICAicmV0dXJuX3R5cGUiOiAiYnZlYzMiLAorICAicGFyYW1ldGVy
IjogWworICAgeyJ0eXBlIjogIml2ZWMzIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogIml2
ZWMzIiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibGVzc1RoYW5FcXVh
bCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5
cGUiOiAiaXZlYzQiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiaXZlYzQiLCAibmFtZSI6
ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJncmVhdGVyVGhhbiIsCisgICJyZXR1cm5f
dHlwZSI6ICJidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMiIsICJu
YW1lIjogIngifSwKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9LAor
IHsKKyAgIm5hbWUiOiAiZ3JlYXRlclRoYW4iLAorICAicmV0dXJuX3R5cGUiOiAiYnZlYzMiLAor
ICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7
InR5cGUiOiAidmVjMyIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImdy
ZWF0ZXJUaGFuIiwKKyAgInJldHVybl90eXBlIjogImJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsK
KyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAi
bmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJncmVhdGVyVGhhbiIsCisgICJy
ZXR1cm5fdHlwZSI6ICJidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiaXZl
YzIiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiaXZlYzIiLCAibmFtZSI6ICJ5In0KKyAg
XQorIH0sCisgeworICAibmFtZSI6ICJncmVhdGVyVGhhbiIsCisgICJyZXR1cm5fdHlwZSI6ICJi
dmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiaXZlYzMiLCAibmFtZSI6ICJ4
In0sCisgICB7InR5cGUiOiAiaXZlYzMiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAi
bmFtZSI6ICJncmVhdGVyVGhhbiIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjNCIsCisgICJwYXJh
bWV0ZXIiOiBbCisgICB7InR5cGUiOiAiaXZlYzQiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUi
OiAiaXZlYzQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJncmVhdGVy
VGhhbkVxdWFsIiwKKyAgInJldHVybl90eXBlIjogImJ2ZWMyIiwKKyAgInBhcmFtZXRlciI6IFsK
KyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzIiLCAi
bmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJncmVhdGVyVGhhbkVxdWFsIiwK
KyAgInJldHVybl90eXBlIjogImJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6
ICJ2ZWMzIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ5In0K
KyAgXQorIH0sCisgeworICAibmFtZSI6ICJncmVhdGVyVGhhbkVxdWFsIiwKKyAgInJldHVybl90
eXBlIjogImJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5h
bWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisg
eworICAibmFtZSI6ICJncmVhdGVyVGhhbkVxdWFsIiwKKyAgInJldHVybl90eXBlIjogImJ2ZWMy
IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJpdmVjMiIsICJuYW1lIjogIngifSwK
KyAgIHsidHlwZSI6ICJpdmVjMiIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1l
IjogImdyZWF0ZXJUaGFuRXF1YWwiLAorICAicmV0dXJuX3R5cGUiOiAiYnZlYzMiLAorICAicGFy
YW1ldGVyIjogWworICAgeyJ0eXBlIjogIml2ZWMzIiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBl
IjogIml2ZWMzIiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAiZ3JlYXRl
clRoYW5FcXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBb
CisgICB7InR5cGUiOiAiaXZlYzQiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiaXZlYzQi
LCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJlcXVhbCIsCisgICJyZXR1
cm5fdHlwZSI6ICJidmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMiIs
ICJuYW1lIjogIngifSwKKyAgIHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9
LAorIHsKKyAgIm5hbWUiOiAiZXF1YWwiLAorICAicmV0dXJuX3R5cGUiOiAiYnZlYzMiLAorICAi
cGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7InR5
cGUiOiAidmVjMyIsICJuYW1lIjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogImVxdWFs
IiwKKyAgInJldHVybl90eXBlIjogImJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlw
ZSI6ICJ2ZWM0IiwgIm5hbWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ5
In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJlcXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJi
dmVjMiIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiaXZlYzIiLCAibmFtZSI6ICJ4
In0sCisgICB7InR5cGUiOiAiaXZlYzIiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAi
bmFtZSI6ICJlcXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMyIsCisgICJwYXJhbWV0ZXIi
OiBbCisgICB7InR5cGUiOiAiaXZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiaXZl
YzMiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJlcXVhbCIsCisgICJy
ZXR1cm5fdHlwZSI6ICJidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiaXZl
YzQiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiaXZlYzQiLCAibmFtZSI6ICJ5In0KKyAg
XQorIH0sCisgeworICAibmFtZSI6ICJlcXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMiIs
CisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiYnZlYzIiLCAibmFtZSI6ICJ4In0sCisg
ICB7InR5cGUiOiAiYnZlYzIiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6
ICJlcXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisg
ICB7InR5cGUiOiAiYnZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiYnZlYzMiLCAi
bmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJlcXVhbCIsCisgICJyZXR1cm5f
dHlwZSI6ICJidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiYnZlYzQiLCAi
bmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiYnZlYzQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0s
CisgeworICAibmFtZSI6ICJub3RFcXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMiIsCisg
ICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAidmVjMiIsICJuYW1lIjogIngifSwKKyAgIHsi
dHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAieSJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAibm90
RXF1YWwiLAorICAicmV0dXJuX3R5cGUiOiAiYnZlYzMiLAorICAicGFyYW1ldGVyIjogWworICAg
eyJ0eXBlIjogInZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAidmVjMyIsICJuYW1l
IjogInkifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogIm5vdEVxdWFsIiwKKyAgInJldHVybl90
eXBlIjogImJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJ2ZWM0IiwgIm5h
bWUiOiAieCJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisg
eworICAibmFtZSI6ICJub3RFcXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMiIsCisgICJw
YXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiaXZlYzIiLCAibmFtZSI6ICJ4In0sCisgICB7InR5
cGUiOiAiaXZlYzIiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJub3RF
cXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7
InR5cGUiOiAiaXZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiaXZlYzMiLCAibmFt
ZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJub3RFcXVhbCIsCisgICJyZXR1cm5f
dHlwZSI6ICJidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiaXZlYzQiLCAi
bmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiaXZlYzQiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0s
CisgeworICAibmFtZSI6ICJub3RFcXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMiIsCisg
ICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiYnZlYzIiLCAibmFtZSI6ICJ4In0sCisgICB7
InR5cGUiOiAiYnZlYzIiLCAibmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJu
b3RFcXVhbCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjMyIsCisgICJwYXJhbWV0ZXIiOiBbCisg
ICB7InR5cGUiOiAiYnZlYzMiLCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiYnZlYzMiLCAi
bmFtZSI6ICJ5In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJub3RFcXVhbCIsCisgICJyZXR1
cm5fdHlwZSI6ICJidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiYnZlYzQi
LCAibmFtZSI6ICJ4In0sCisgICB7InR5cGUiOiAiYnZlYzQiLCAibmFtZSI6ICJ5In0KKyAgXQor
IH0sCisgeworICAibmFtZSI6ICJhbnkiLAorICAicmV0dXJuX3R5cGUiOiAiYm9vbCIsCisgICJw
YXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAiYnZlYzIiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0s
CisgeworICAibmFtZSI6ICJhbnkiLAorICAicmV0dXJuX3R5cGUiOiAiYm9vbCIsCisgICJwYXJh
bWV0ZXIiOiBbCisgICB7InR5cGUiOiAiYnZlYzMiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisg
eworICAibmFtZSI6ICJhbnkiLAorICAicmV0dXJuX3R5cGUiOiAiYm9vbCIsCisgICJwYXJhbWV0
ZXIiOiBbCisgICB7InR5cGUiOiAiYnZlYzQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgewor
ICAibmFtZSI6ICJhbGwiLAorICAicmV0dXJuX3R5cGUiOiAiYm9vbCIsCisgICJwYXJhbWV0ZXIi
OiBbCisgICB7InR5cGUiOiAiYnZlYzIiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAi
bmFtZSI6ICJhbGwiLAorICAicmV0dXJuX3R5cGUiOiAiYm9vbCIsCisgICJwYXJhbWV0ZXIiOiBb
CisgICB7InR5cGUiOiAiYnZlYzMiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFt
ZSI6ICJhbGwiLAorICAicmV0dXJuX3R5cGUiOiAiYm9vbCIsCisgICJwYXJhbWV0ZXIiOiBbCisg
ICB7InR5cGUiOiAiYnZlYzQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6
ICJub3QiLAorICAicmV0dXJuX3R5cGUiOiAiYnZlYzIiLAorICAicGFyYW1ldGVyIjogWworICAg
eyJ0eXBlIjogImJ2ZWMyIiwgIm5hbWUiOiAieCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAi
bm90IiwKKyAgInJldHVybl90eXBlIjogImJ2ZWMzIiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsi
dHlwZSI6ICJidmVjMyIsICJuYW1lIjogIngifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogIm5v
dCIsCisgICJyZXR1cm5fdHlwZSI6ICJidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5
cGUiOiAiYnZlYzQiLCAibmFtZSI6ICJ4In0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJ0ZXh0
dXJlMkQiLAorICAicmV0dXJuX3R5cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7
InR5cGUiOiAic2FtcGxlcjJEIiwgIm5hbWUiOiAic2FtcGxlciJ9LAorICAgeyJ0eXBlIjogInZl
YzIiLCAibmFtZSI6ICJjb29yZCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAidGV4dHVyZTJE
UHJvaiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsi
dHlwZSI6ICJzYW1wbGVyMkQiLCAibmFtZSI6ICJzYW1wbGVyIn0sCisgICB7InR5cGUiOiAidmVj
MyIsICJuYW1lIjogImNvb3JkIn0KKyAgXQorIH0sCisgeworICAibmFtZSI6ICJ0ZXh0dXJlMkRQ
cm9qIiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0
eXBlIjogInNhbXBsZXIyRCIsICJuYW1lIjogInNhbXBsZXIifSwKKyAgIHsidHlwZSI6ICJ2ZWM0
IiwgIm5hbWUiOiAiY29vcmQifQorICBdCisgfSwKKyB7CisgICJuYW1lIjogInRleHR1cmVDdWJl
IiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBl
IjogInNhbXBsZXJDdWJlIiwgIm5hbWUiOiAic2FtcGxlciJ9LAorICAgeyJ0eXBlIjogInZlYzMi
LCAibmFtZSI6ICJjb29yZCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAidGV4dHVyZTJEIiwK
KyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0eXBlIjog
InNhbXBsZXJFeHRlcm5hbE9FUyIsICJuYW1lIjogInNhbXBsZXIifSwKKyAgIHsidHlwZSI6ICJ2
ZWMyIiwgIm5hbWUiOiAiY29vcmQifQorICBdLAorICAiY29uZGl0aW9uIjoicmVzb3VyY2VzLk9F
U19FR0xfaW1hZ2VfZXh0ZXJuYWwiCisgfSwKKyB7CisgICJuYW1lIjogInRleHR1cmUyRFByb2oi
LAorICAicmV0dXJuX3R5cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUi
OiAic2FtcGxlckV4dGVybmFsT0VTIiwgIm5hbWUiOiAic2FtcGxlciJ9LAorICAgeyJ0eXBlIjog
InZlYzMiLCAibmFtZSI6ICJjb29yZCJ9CisgIF0sCisgICJjb25kaXRpb24iOiJyZXNvdXJjZXMu
T0VTX0VHTF9pbWFnZV9leHRlcm5hbCIKKyB9LAorIHsKKyAgIm5hbWUiOiAidGV4dHVyZTJEUHJv
aiIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlw
ZSI6ICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAibmFtZSI6ICJzYW1wbGVyIn0sCisgICB7InR5cGUi
OiAidmVjNCIsICJuYW1lIjogImNvb3JkIn0KKyAgXSwKKyAgImNvbmRpdGlvbiI6InJlc291cmNl
cy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsIgorIH0sCisgeworICAibmFtZSI6ICJ0ZXh0dXJlMkRS
ZWN0IiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0
eXBlIjogInNhbXBsZXIyRFJlY3QiLCAibmFtZSI6ICJzYW1wbGVyIn0sCisgICB7InR5cGUiOiAi
dmVjMiIsICJuYW1lIjogImNvb3JkIn0KKyAgXSwKKyAgImNvbmRpdGlvbiI6InJlc291cmNlcy5B
UkJfdGV4dHVyZV9yZWN0YW5nbGUiCisgfSwKKyB7CisgICJuYW1lIjogInRleHR1cmUyRFJlY3RQ
cm9qIiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0
eXBlIjogInNhbXBsZXIyRFJlY3QiLCAibmFtZSI6ICJzYW1wbGVyIn0sCisgICB7InR5cGUiOiAi
dmVjMyIsICJuYW1lIjogImNvb3JkIn0KKyAgXSwKKyAgImNvbmRpdGlvbiI6InJlc291cmNlcy5B
UkJfdGV4dHVyZV9yZWN0YW5nbGUiCisgfSwKKyB7CisgICJuYW1lIjogInRleHR1cmUyRFJlY3RQ
cm9qIiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1ldGVyIjogWworICAgeyJ0
eXBlIjogInNhbXBsZXIyRFJlY3QiLCAibmFtZSI6ICJzYW1wbGVyIn0sCisgICB7InR5cGUiOiAi
dmVjNCIsICJuYW1lIjogImNvb3JkIn0KKyAgXSwKKyAgImNvbmRpdGlvbiI6InJlc291cmNlcy5B
UkJfdGV4dHVyZV9yZWN0YW5nbGUiCisgfQorXSwKKyAKKyJ2ZXJ0ZXgiIDogWworIHsKKyAgIm5h
bWUiOiAidGV4dHVyZTJETG9kIiwKKyAgInJldHVybl90eXBlIjogInZlYzQiLAorICAicGFyYW1l
dGVyIjogWworICAgeyJ0eXBlIjogInNhbXBsZXIyRCIsICJuYW1lIjogInNhbXBsZXIifSwKKyAg
IHsidHlwZSI6ICJ2ZWMyIiwgIm5hbWUiOiAiY29vcmQifSwKKyAgIHsidHlwZSI6ICJmbG9hdCIs
ICJuYW1lIjogImxvZCJ9CisgIF0KKyB9LAorIHsKKyAgIm5hbWUiOiAidGV4dHVyZTJEUHJvakxv
ZCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBhcmFtZXRlciI6IFsKKyAgIHsidHlw
ZSI6ICJzYW1wbGVyMkQiLCAibmFtZSI6ICJzYW1wbGVyIn0sCisgICB7InR5cGUiOiAidmVjMyIs
ICJuYW1lIjogImNvb3JkIn0sCisgICB7InR5cGUiOiAiZmxvYXQiLCAibmFtZSI6ICJsb2QifQor
ICBdCisgfSwKKyB7CisgICJuYW1lIjogInRleHR1cmUyRFByb2pMb2QiLAorICAicmV0dXJuX3R5
cGUiOiAidmVjNCIsCisgICJwYXJhbWV0ZXIiOiBbCisgICB7InR5cGUiOiAic2FtcGxlcjJEIiwg
Im5hbWUiOiAic2FtcGxlciJ9LAorICAgeyJ0eXBlIjogInZlYzQiLCAibmFtZSI6ICJjb29yZCJ9
LAorICAgeyJ0eXBlIjogImZsb2F0IiwgIm5hbWUiOiAibG9kIn0KKyAgXQorIH0sCisgeworICAi
bmFtZSI6ICJ0ZXh0dXJlQ3ViZUxvZCIsCisgICJyZXR1cm5fdHlwZSI6ICJ2ZWM0IiwKKyAgInBh
cmFtZXRlciI6IFsKKyAgIHsidHlwZSI6ICJzYW1wbGVyQ3ViZSIsICJuYW1lIjogInNhbXBsZXIi
fSwKKyAgIHsidHlwZSI6ICJ2ZWMzIiwgIm5hbWUiOiAiY29vcmQifSwKKyAgIHsidHlwZSI6ICJm
bG9hdCIsICJuYW1lIjogImxvZCJ9CisgIF0KKyB9CitdCisKK30gCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvYnVpbHRpbl9zeW1ib2xz
Lmpzb24KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfYnVpbHRpbl9zeW1ib2xfdGFibGUucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dlbmVyYXRlX2J1
aWx0aW5fc3ltYm9sX3RhYmxlLnB5CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dlbmVyYXRlX2J1aWx0aW5fc3ltYm9sX3RhYmxlLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisjIS91c3IvYmluL3B5dGhvbgorCisjIENvcHly
aWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKK2lt
cG9ydCBqc29uCisKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgYWxs
IHRoZSBidWlsdGluIGluIEpTT04gZm9ybWF0LgoranNvbl9kYXRhID0gb3BlbignYnVpbHRpbl9z
eW1ib2xzLmpzb24nKQorYnVpbHRpbiA9IGpzb24ubG9hZChqc29uX2RhdGEpCisKKyMgVGhpcyBt
YXBzIHRoZSBzaGFkZXIgbGFuZ3VhZ2UncyB0eXBlcyBhbmQgaG93IHRvIGNyZWF0ZSB0aGUgVFR5
cGVzIGluIHRoZSBzeW1ib2wgdGFibGUuCit0dHlwZU1hcCA9IGJ1aWx0aW5bInR0eXBlbWFwIl0K
KworIyBUaGlzIGlzIHRoZSBvdXRwdXQgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZ2VuZXJhdGUuCitv
dXRwdXQgPSBvcGVuKCdidWlsdGluX3N5bWJvbF90YWJsZS5jcHAnLCAndycpOworCisjIFRoZSBo
ZWFkZXIgcGFydCBvZiB0aGUgZmlsZS4KK2hlYWRlciA9ICIiIi8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CisvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2J1aWx0aW5fc3ltYm9sX3Rh
YmxlLnB5LgorLy8gICAgICAgICAgICAgICAgICogRE8gTk9UIEhBTkQgTU9ESUZZICoKKy8vICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKKyNpbmNsdWRlICJjb21waWxlci9idWlsdGluX3N5bWJvbF90YWJsZS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisiIiIKK291dHB1dC53cml0ZShoZWFkZXIpCisKK3Jl
Z2lzdGVyZnVuYyA9ICIiIgorc3RhdGljIHZvaWQgYnVpbHRpbjEoVFN5bWJvbFRhYmxlKiB0LCBU
VHlwZSogcnZhbHVlLCBjb25zdCBjaGFyKiBuYW1lLCBUVHlwZSogcHR5cGUxLCBjb25zdCBjaGFy
KiBwbmFtZTEpCit7CisgIFRGdW5jdGlvbiogZiA9IG5ldyBURnVuY3Rpb24obmV3IFRTdHJpbmco
bmFtZSksICpydmFsdWUpOworICBUUGFyYW1ldGVyIHBhcmFtID0ge25ldyBUU3RyaW5nKHBuYW1l
MSksIHB0eXBlMX07CisgIGYtPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgIHQtPmluc2VydCgqZik7
Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWx0aW4yKFRTeW1ib2xUYWJsZSogdCwgVFR5cGUqIHJ2YWx1
ZSwgY29uc3QgY2hhciogbmFtZSwgVFR5cGUqIHB0eXBlMSwgY29uc3QgY2hhciogcG5hbWUxLCBU
VHlwZSogcHR5cGUyLCBjb25zdCBjaGFyKiBwbmFtZTIpCit7CisgIFRGdW5jdGlvbiogZiA9IG5l
dyBURnVuY3Rpb24obmV3IFRTdHJpbmcobmFtZSksICpydmFsdWUpOworICBUUGFyYW1ldGVyIHBh
cmFtMSA9IHtuZXcgVFN0cmluZyhwbmFtZTEpLCBwdHlwZTF9OworICBmLT5hZGRQYXJhbWV0ZXIo
cGFyYW0xKTsKKyAgVFBhcmFtZXRlciBwYXJhbTIgPSB7bmV3IFRTdHJpbmcocG5hbWUyKSwgcHR5
cGUyfTsKKyAgZi0+YWRkUGFyYW1ldGVyKHBhcmFtMik7CisgIHQtPmluc2VydCgqZik7Cit9CisK
K3N0YXRpYyB2b2lkIGJ1aWx0aW4zKFRTeW1ib2xUYWJsZSogdCwgVFR5cGUqIHJ2YWx1ZSwgY29u
c3QgY2hhciogbmFtZSwgVFR5cGUqIHB0eXBlMSwgY29uc3QgY2hhciogcG5hbWUxLCBUVHlwZSog
cHR5cGUyLCBjb25zdCBjaGFyKiBwbmFtZTIsIFRUeXBlKiBwdHlwZTMsIGNvbnN0IGNoYXIqIHBu
YW1lMykKK3sKKyAgVEZ1bmN0aW9uKiBmID0gbmV3IFRGdW5jdGlvbihuZXcgVFN0cmluZyhuYW1l
KSwgKnJ2YWx1ZSk7CisgIFRQYXJhbWV0ZXIgcGFyYW0xID0ge25ldyBUU3RyaW5nKHBuYW1lMSks
IHB0eXBlMX07CisgIGYtPmFkZFBhcmFtZXRlcihwYXJhbTEpOworICBUUGFyYW1ldGVyIHBhcmFt
MiA9IHtuZXcgVFN0cmluZyhwbmFtZTIpLCBwdHlwZTJ9OworICBmLT5hZGRQYXJhbWV0ZXIocGFy
YW0yKTsKKyAgVFBhcmFtZXRlciBwYXJhbTMgPSB7bmV3IFRTdHJpbmcocG5hbWUzKSwgcHR5cGUz
fTsKKyAgZi0+YWRkUGFyYW1ldGVyKHBhcmFtMyk7CisgIHQtPmluc2VydCgqZik7Cit9CisKKyIi
Igorb3V0cHV0LndyaXRlKHJlZ2lzdGVyZnVuYykKKworIyBBIGZ1bmN0aW9uIHRoYXQgcGFyc2Vz
IHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgbGlzdCBvZiBidWlsdGluIGZ1bmN0aW9ucy4K
K2RlZiBwYXJzZUJ1aWx0aW4obmFtZSk6CisgICAgZm9yIGZ1bmMgaW4gYnVpbHRpbltuYW1lXToK
KyAgICAgICAgb3V0ID0gIiIKKyAgICAgICAgaW5kZW50ID0gIiAgICAiOworICAgICAgICBzaXpl
ID0gbGVuKGZ1bmNbJ3BhcmFtZXRlciddKQorICAgICAgICBpZiAnY29uZGl0aW9uJyBpbiBmdW5j
OgorICAgICAgICAgICAgb3V0ICs9IGluZGVudCArICJpZiAoIiArIGZ1bmNbJ2NvbmRpdGlvbidd
ICsgIikge1xuIgorICAgICAgICAgICAgaW5kZW50ICs9IGluZGVudDsKKyAgICAgICAgb3V0ICs9
IGluZGVudCArICJidWlsdGluIiArIHN0cihzaXplKSArICIodCwgIgorICAgICAgICBvdXQgKz0g
dHR5cGVNYXBbZnVuY1sncmV0dXJuX3R5cGUnXV0KKyAgICAgICAgb3V0ICs9ICIsIFwiIiArIGZ1
bmNbJ25hbWUnXSArICJcIiIKKyAgICAgICAgcGFyYW1saXN0ID0gZnVuY1sncGFyYW1ldGVyJ10K
KyAgICAgICAgcGFyYW1kZWYgPSAiIjsKKyAgICAgICAgZm9yIHBhcmFtIGluIHBhcmFtbGlzdDoK
KyAgICAgICAgICAgIHBhcmFtZGVmICs9ICIsICIKKyAgICAgICAgICAgIHBhcmFtZGVmICs9IHR0
eXBlTWFwW3BhcmFtWyd0eXBlJ11dIAorICAgICAgICAgICAgcGFyYW1kZWYgKz0gIiwgXCIiICsg
cGFyYW1bJ25hbWUnXSArICJcIiIKKyAgICAgICAgb3V0ICs9IHBhcmFtZGVmICsgIik7XG4iCisg
ICAgICAgIGlmICdjb25kaXRpb24nIGluIGZ1bmM6CisgICAgICAgICAgICBvdXQgKz0gIiAgICB9
XG4iCisgICAgICAgIG91dHB1dC53cml0ZShvdXQpCisKK2NvbW1vbkhlYWRlciA9ICJ2b2lkIElu
c2VydEJ1aWx0SW5GdW5jdGlvbnNDb21tb24oY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNv
dXJjZXMsIFRTeW1ib2xUYWJsZSogdCkge1xuIgorb3V0cHV0LndyaXRlKGNvbW1vbkhlYWRlcikK
K3BhcnNlQnVpbHRpbigiY29tbW9uIikKK291dHB1dC53cml0ZSgifVxuXG4iKQorCit2ZXJ0ZXhI
ZWFkZXIgPSAidm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zVmVydGV4KGNvbnN0IFNoQnVpbHRJ
blJlc291cmNlcyYgcmVzb3VyY2VzLCBUU3ltYm9sVGFibGUqIHQpIHtcbiIKK291dHB1dC53cml0
ZSh2ZXJ0ZXhIZWFkZXIpCitwYXJzZUJ1aWx0aW4oInZlcnRleCIpCitvdXRwdXQud3JpdGUoIn1c
blxuIikKKworanNvbl9kYXRhLmNsb3NlKCkKK291dHB1dC5jbG9zZSgpCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfYnVp
bHRpbl9zeW1ib2xfdGFibGUucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzk5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBDb25m
aWcuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVzY3JpYmluZyB0aGUg
Zm9ybWF0LCB0eXBlCisvLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNlLiBJbXBsZW1lbnRz
IEVHTENvbmZpZyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW0VHTCAxLjRdIHNlY3Rp
b24gMy40IHBhZ2UgMTUuCisKKyNpbmNsdWRlICJsaWJFR0wvQ29uZmlnLmgiCisKKyNpbmNsdWRl
IDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBlZ2wKK3sKK0NvbmZpZzo6
Q29uZmlnKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluSW50ZXJ2YWwsIEVH
TGludCBtYXhJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFU
IGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lkdGgs
IEVHTGludCB0ZXhIZWlnaHQpCisgICAgOiBtRGlzcGxheU1vZGUoZGlzcGxheU1vZGUpLCBtUmVu
ZGVyVGFyZ2V0Rm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCksIG1EZXB0aFN0ZW5jaWxGb3JtYXQo
ZGVwdGhTdGVuY2lsRm9ybWF0KSwgbU11bHRpU2FtcGxlKG11bHRpU2FtcGxlKQoreworICAgIHNl
dChkaXNwbGF5TW9kZSwgbWluSW50ZXJ2YWwsIG1heEludGVydmFsLCByZW5kZXJUYXJnZXRGb3Jt
YXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1wbGUsIHRleFdpZHRoLCB0ZXhIZWlnaHQp
OworfQorCit2b2lkIENvbmZpZzo6c2V0RGVmYXVsdHMoKQoreworICAgIG1CdWZmZXJTaXplID0g
MDsKKyAgICBtUmVkU2l6ZSA9IDA7CisgICAgbUdyZWVuU2l6ZSA9IDA7CisgICAgbUJsdWVTaXpl
ID0gMDsKKyAgICBtTHVtaW5hbmNlU2l6ZSA9IDA7CisgICAgbUFscGhhU2l6ZSA9IDA7CisgICAg
bUFscGhhTWFza1NpemUgPSAwOworICAgIG1CaW5kVG9UZXh0dXJlUkdCID0gRUdMX0RPTlRfQ0FS
RTsKKyAgICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db2xvckJ1
ZmZlclR5cGUgPSBFR0xfUkdCX0JVRkZFUjsKKyAgICBtQ29uZmlnQ2F2ZWF0ID0gRUdMX0RPTlRf
Q0FSRTsKKyAgICBtQ29uZmlnSUQgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db25mb3JtYW50ID0g
MDsKKyAgICBtRGVwdGhTaXplID0gMDsKKyAgICBtTGV2ZWwgPSAwOworICAgIG1NYXRjaE5hdGl2
ZVBpeG1hcCA9IEVHTF9OT05FOworICAgIG1NYXhQQnVmZmVyV2lkdGggPSAwOworICAgIG1NYXhQ
QnVmZmVySGVpZ2h0ID0gMDsKKyAgICBtTWF4UEJ1ZmZlclBpeGVscyA9IDA7CisgICAgbU1heFN3
YXBJbnRlcnZhbCA9IEVHTF9ET05UX0NBUkU7CisgICAgbU1pblN3YXBJbnRlcnZhbCA9IEVHTF9E
T05UX0NBUkU7CisgICAgbU5hdGl2ZVJlbmRlcmFibGUgPSBFR0xfRE9OVF9DQVJFOworICAgIG1O
YXRpdmVWaXN1YWxJRCA9IDA7CisgICAgbU5hdGl2ZVZpc3VhbFR5cGUgPSBFR0xfRE9OVF9DQVJF
OworICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVNfQklUOworICAgIG1TYW1wbGVC
dWZmZXJzID0gMDsKKyAgICBtU2FtcGxlcyA9IDA7CisgICAgbVN0ZW5jaWxTaXplID0gMDsKKyAg
ICBtU3VyZmFjZVR5cGUgPSBFR0xfV0lORE9XX0JJVDsKKyAgICBtVHJhbnNwYXJlbnRUeXBlID0g
RUdMX05PTkU7CisgICAgbVRyYW5zcGFyZW50UmVkVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworICAg
IG1UcmFuc3BhcmVudEdyZWVuVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworICAgIG1UcmFuc3BhcmVu
dEJsdWVWYWx1ZSA9IEVHTF9ET05UX0NBUkU7Cit9CisKK3ZvaWQgQ29uZmlnOjpzZXQoRDNERElT
UExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heEludGVy
dmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2ls
Rm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVHTGludCB0ZXhXaWR0aCwgRUdMaW50IHRleEhl
aWdodCkKK3sKKyAgICBtQmluZFRvVGV4dHVyZVJHQiA9IEVHTF9GQUxTRTsKKyAgICBtQmluZFRv
VGV4dHVyZVJHQkEgPSBFR0xfRkFMU0U7CisgICAgc3dpdGNoIChyZW5kZXJUYXJnZXRGb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgIG1CdWZmZXJTaXpl
ID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDU7Cisg
ICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAxOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAgICBtQnVmZmVyU2l6
ZSA9IDMyOworICAgICAgICBtUmVkU2l6ZSA9IDEwOworICAgICAgICBtR3JlZW5TaXplID0gMTA7
CisgICAgICAgIG1CbHVlU2l6ZSA9IDEwOworICAgICAgICBtQWxwaGFTaXplID0gMjsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgbUJ1ZmZlclNp
emUgPSAzMjsKKyAgICAgICAgbVJlZFNpemUgPSA4OworICAgICAgICBtR3JlZW5TaXplID0gODsK
KyAgICAgICAgbUJsdWVTaXplID0gODsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDg7CisgICAgICAg
IG1CaW5kVG9UZXh0dXJlUkdCQSA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBE
M0RGTVRfUjVHNkI1OgorICAgICAgICBtQnVmZmVyU2l6ZSA9IDE2OworICAgICAgICBtUmVkU2l6
ZSA9IDU7CisgICAgICAgIG1HcmVlblNpemUgPSA2OworICAgICAgICBtQmx1ZVNpemUgPSA1Owor
ICAgICAgICBtQWxwaGFTaXplID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZN
VF9YOFI4RzhCODoKKyAgICAgICAgbUJ1ZmZlclNpemUgPSAzMjsKKyAgICAgICAgbVJlZFNpemUg
PSA4OworICAgICAgICBtR3JlZW5TaXplID0gODsKKyAgICAgICAgbUJsdWVTaXplID0gODsKKyAg
ICAgICAgbUFscGhhU2l6ZSA9IDA7CisgICAgICAgIG1CaW5kVG9UZXh0dXJlUkdCID0gdHJ1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOyAg
IC8vIE90aGVyIGZvcm1hdHMgc2hvdWxkIG5vdCBiZSB2YWxpZAorICAgIH0KKworICAgIG1MdW1p
bmFuY2VTaXplID0gMDsKKyAgICBtQWxwaGFNYXNrU2l6ZSA9IDA7CisgICAgbUNvbG9yQnVmZmVy
VHlwZSA9IEVHTF9SR0JfQlVGRkVSOworICAgIG1Db25maWdDYXZlYXQgPSAoZGlzcGxheU1vZGUu
Rm9ybWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCkgPyBFR0xfTk9ORSA6IEVHTF9TTE9XX0NPTkZJ
RzsKKyAgICBtQ29uZmlnSUQgPSAwOworICAgIG1Db25mb3JtYW50ID0gRUdMX09QRU5HTF9FUzJf
QklUOworCisgICAgc3dpdGNoIChkZXB0aFN0ZW5jaWxGb3JtYXQpCisgICAgeworICAgICAgY2Fz
ZSBEM0RGTVRfVU5LTk9XTjoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDA7CisgICAgICAgIG1TdGVu
Y2lsU2l6ZSA9IDA7CisgICAgICAgIGJyZWFrOworLy8gICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tB
QkxFOgorLy8gICAgICBtRGVwdGhTaXplID0gMTY7CisvLyAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7
CisvLyAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDMyOgorICAgICAgICBtRGVwdGhT
aXplID0gMzI7CisgICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBEM0RGTVRfRDE1UzE6CisgICAgICAgIG1EZXB0aFNpemUgPSAxNTsKKyAgICAgICAg
bVN0ZW5jaWxTaXplID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9EMjRT
ODoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDI0OworICAgICAgICBtU3RlbmNpbFNpemUgPSA4Owor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgorICAgICAgICBtRGVwdGhT
aXplID0gMjQ7CisgICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDI0OworICAgICAg
ICBtU3RlbmNpbFNpemUgPSA0OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0Qx
NjoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDE2OworICAgICAgICBtU3RlbmNpbFNpemUgPSAwOwor
ICAgICAgICBicmVhazsKKy8vICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6CisvLyAgICAg
IG1EZXB0aFNpemUgPSAzMjsKKy8vICAgICAgbVN0ZW5jaWxTaXplID0gMDsKKy8vICAgICAgYnJl
YWs7CisvLyAgICBjYXNlIEQzREZNVF9EMjRGUzg6CisvLyAgICAgIG1EZXB0aFNpemUgPSAyNDsK
Ky8vICAgICAgbVN0ZW5jaWxTaXplID0gODsKKy8vICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIG1MZXZlbCA9IDA7CisgICAg
bU1hdGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7CisgICAgbU1heFBCdWZmZXJXaWR0aCA9IHRl
eFdpZHRoOworICAgIG1NYXhQQnVmZmVySGVpZ2h0ID0gdGV4SGVpZ2h0OworICAgIG1NYXhQQnVm
ZmVyUGl4ZWxzID0gdGV4V2lkdGgqdGV4SGVpZ2h0OworICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBt
YXhJbnRlcnZhbDsKKyAgICBtTWluU3dhcEludGVydmFsID0gbWluSW50ZXJ2YWw7CisgICAgbU5h
dGl2ZVJlbmRlcmFibGUgPSBFR0xfRkFMU0U7CisgICAgbU5hdGl2ZVZpc3VhbElEID0gMDsKKyAg
ICBtTmF0aXZlVmlzdWFsVHlwZSA9IDA7CisgICAgbVJlbmRlcmFibGVUeXBlID0gRUdMX09QRU5H
TF9FUzJfQklUOworICAgIG1TYW1wbGVCdWZmZXJzID0gbXVsdGlTYW1wbGUgPyAxIDogMDsKKyAg
ICBtU2FtcGxlcyA9IG11bHRpU2FtcGxlOworICAgIG1TdXJmYWNlVHlwZSA9IEVHTF9QQlVGRkVS
X0JJVCB8IEVHTF9XSU5ET1dfQklUIHwgRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVDsK
KyAgICBtVHJhbnNwYXJlbnRUeXBlID0gRUdMX05PTkU7CisgICAgbVRyYW5zcGFyZW50UmVkVmFs
dWUgPSAwOworICAgIG1UcmFuc3BhcmVudEdyZWVuVmFsdWUgPSAwOworICAgIG1UcmFuc3BhcmVu
dEJsdWVWYWx1ZSA9IDA7Cit9CisKK0VHTENvbmZpZyBDb25maWc6OmdldEhhbmRsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIChFR0xDb25maWcpKHNpemVfdCltQ29uZmlnSUQ7Cit9CisKK1NvcnRD
b25maWc6OlNvcnRDb25maWcoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQorICAgIDogbVdhbnRS
ZWQoZmFsc2UpLCBtV2FudEdyZWVuKGZhbHNlKSwgbVdhbnRCbHVlKGZhbHNlKSwgbVdhbnRBbHBo
YShmYWxzZSksIG1XYW50THVtaW5hbmNlKGZhbHNlKQoreworICAgIHNjYW5Gb3JXYW50ZWRDb21w
b25lbnRzKGF0dHJpYkxpc3QpOworfQorCit2b2lkIFNvcnRDb25maWc6OnNjYW5Gb3JXYW50ZWRD
b21wb25lbnRzKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCkKK3sKKyAgICAvLyBbRUdMXSBzZWN0
aW9uIDMuNC4xIHBhZ2UgMjQKKyAgICAvLyBTb3J0aW5nIHJ1bGUgIzM6IGJ5IGxhcmdlciB0b3Rh
bCBudW1iZXIgb2YgY29sb3IgYml0cywgbm90IGNvbnNpZGVyaW5nCisgICAgLy8gY29tcG9uZW50
cyB0aGF0IGFyZSAwIG9yIGRvbid0LWNhcmUuCisgICAgZm9yIChjb25zdCBFR0xpbnQgKmF0dHIg
PSBhdHRyaWJMaXN0OyBhdHRyWzBdICE9IEVHTF9OT05FOyBhdHRyICs9IDIpCisgICAgeworICAg
ICAgICBpZiAoYXR0clsxXSAhPSAwICYmIGF0dHJbMV0gIT0gRUdMX0RPTlRfQ0FSRSkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChhdHRyWzBdKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEVHTF9SRURfU0laRTogICAgICAgbVdhbnRSZWQgPSB0cnVlOyBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTogICAgIG1XYW50R3JlZW4gPSB0cnVl
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQkxVRV9TSVpFOiAgICAgIG1XYW50Qmx1
ZSA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9BTFBIQV9TSVpFOiAgICAg
bVdhbnRBbHBoYSA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9MVU1JTkFO
Q0VfU0laRTogbVdhbnRMdW1pbmFuY2UgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKworRUdMaW50IFNvcnRDb25maWc6OndhbnRlZENvbXBvbmVudHNT
aXplKGNvbnN0IENvbmZpZyAmY29uZmlnKSBjb25zdAoreworICAgIEVHTGludCB0b3RhbCA9IDA7
CisKKyAgICBpZiAobVdhbnRSZWQpICAgICAgIHRvdGFsICs9IGNvbmZpZy5tUmVkU2l6ZTsKKyAg
ICBpZiAobVdhbnRHcmVlbikgICAgIHRvdGFsICs9IGNvbmZpZy5tR3JlZW5TaXplOworICAgIGlm
IChtV2FudEJsdWUpICAgICAgdG90YWwgKz0gY29uZmlnLm1CbHVlU2l6ZTsKKyAgICBpZiAobVdh
bnRBbHBoYSkgICAgIHRvdGFsICs9IGNvbmZpZy5tQWxwaGFTaXplOworICAgIGlmIChtV2FudEx1
bWluYW5jZSkgdG90YWwgKz0gY29uZmlnLm1MdW1pbmFuY2VTaXplOworCisgICAgcmV0dXJuIHRv
dGFsOworfQorCitib29sIFNvcnRDb25maWc6Om9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICp4LCBj
b25zdCBDb25maWcgKnkpIGNvbnN0Cit7CisgICAgcmV0dXJuICgqdGhpcykoKngsICp5KTsKK30K
KworYm9vbCBTb3J0Q29uZmlnOjpvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAmeCwgY29uc3QgQ29u
ZmlnICZ5KSBjb25zdAoreworICAgICNkZWZpbmUgU09SVChhdHRyaWJ1dGUpICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBpZiAoeC5hdHRyaWJ1dGUgIT0geS5hdHRyaWJ1dGUpICAg
ICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIHguYXR0cmlidXRlIDwgeS5hdHRyaWJ1dGU7ICAg
ICAgXAorICAgICAgICB9CisKKyAgICBNRVRBX0FTU0VSVChFR0xfTk9ORSA8IEVHTF9TTE9XX0NP
TkZJRyAmJiBFR0xfU0xPV19DT05GSUcgPCBFR0xfTk9OX0NPTkZPUk1BTlRfQ09ORklHKTsKKyAg
ICBTT1JUKG1Db25maWdDYXZlYXQpOworCisgICAgTUVUQV9BU1NFUlQoRUdMX1JHQl9CVUZGRVIg
PCBFR0xfTFVNSU5BTkNFX0JVRkZFUik7CisgICAgU09SVChtQ29sb3JCdWZmZXJUeXBlKTsKKwor
ICAgIC8vIEJ5IGxhcmdlciB0b3RhbCBudW1iZXIgb2YgY29sb3IgYml0cywgb25seSBjb25zaWRl
cmluZyB0aG9zZSB0aGF0IGFyZSByZXF1ZXN0ZWQgdG8gYmUgPiAwLgorICAgIEVHTGludCB4Q29t
cG9uZW50c1NpemUgPSB3YW50ZWRDb21wb25lbnRzU2l6ZSh4KTsKKyAgICBFR0xpbnQgeUNvbXBv
bmVudHNTaXplID0gd2FudGVkQ29tcG9uZW50c1NpemUoeSk7CisgICAgaWYgKHhDb21wb25lbnRz
U2l6ZSAhPSB5Q29tcG9uZW50c1NpemUpCisgICAgeworICAgICAgICByZXR1cm4geENvbXBvbmVu
dHNTaXplID4geUNvbXBvbmVudHNTaXplOworICAgIH0KKworICAgIFNPUlQobUJ1ZmZlclNpemUp
OworICAgIFNPUlQobVNhbXBsZUJ1ZmZlcnMpOworICAgIFNPUlQobVNhbXBsZXMpOworICAgIFNP
UlQobURlcHRoU2l6ZSk7CisgICAgU09SVChtU3RlbmNpbFNpemUpOworICAgIFNPUlQobUFscGhh
TWFza1NpemUpOworICAgIFNPUlQobU5hdGl2ZVZpc3VhbFR5cGUpOworICAgIFNPUlQobUNvbmZp
Z0lEKTsKKworICAgICN1bmRlZiBTT1JUCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFdl
J2QgbGlrZSB0byB1c2UgU29ydENvbmZpZyB0byBhbHNvIGVsaW1pbmF0ZSBkdXBsaWNhdGUgY29u
Zmlncy4KKy8vIFRoaXMgd29ya3MgYXMgbG9uZyBhcyB3ZSBuZXZlciBoYXZlIHR3byBjb25maWdz
IHdpdGggZGlmZmVyZW50IHBlci1SR0ItY29tcG9uZW50IGxheW91dHMsCisvLyBidXQgdGhlIHNh
bWUgdG90YWwuCisvLyA1NTUxIGFuZCA1NjUgYXJlIGRpZmZlcmVudCBiZWNhdXNlIFIrRytCIGlz
IGRpZmZlcmVudC4KKy8vIDU1NTEgYW5kIDU1NSBhcmUgZGlmZmVyZW50IGJlY2F1c2UgYnVmZmVy
U2l6ZSBpcyBkaWZmZXJlbnQuCitjb25zdCBFR0xpbnQgQ29uZmlnU2V0OjptU29ydEF0dHJpYnNb
XSA9Cit7CisgICAgRUdMX1JFRF9TSVpFLCAxLAorICAgIEVHTF9HUkVFTl9TSVpFLCAxLAorICAg
IEVHTF9CTFVFX1NJWkUsIDEsCisgICAgRUdMX0xVTUlOQU5DRV9TSVpFLCAxLAorICAgIC8vIEJV
VCBOT1QgQUxQSEEKKyAgICBFR0xfTk9ORQorfTsKKworQ29uZmlnU2V0OjpDb25maWdTZXQoKQor
ICAgIDogbVNldChTb3J0Q29uZmlnKG1Tb3J0QXR0cmlicykpCit7Cit9CisKK3ZvaWQgQ29uZmln
U2V0OjphZGQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2
YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQs
IEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdMaW50
IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KQoreworICAgIENvbmZpZyBjb25maWcoZGlzcGxh
eU1vZGUsIG1pblN3YXBJbnRlcnZhbCwgbWF4U3dhcEludGVydmFsLCByZW5kZXJUYXJnZXRGb3Jt
YXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1wbGUsIHRleFdpZHRoLCB0ZXhIZWlnaHQp
OworCisgICAgbVNldC5pbnNlcnQoY29uZmlnKTsKK30KKworc2l6ZV90IENvbmZpZ1NldDo6c2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXQuc2l6ZSgpOworfQorCitib29sIENvbmZpZ1Nl
dDo6Z2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlz
dCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKQoreworICAgIHZlY3Rvcjxj
b25zdCBDb25maWcqPiBwYXNzZWQ7CisgICAgcGFzc2VkLnJlc2VydmUobVNldC5zaXplKCkpOwor
CisgICAgZm9yIChJdGVyYXRvciBjb25maWcgPSBtU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBtU2V0
LmVuZCgpOyBjb25maWcrKykKKyAgICB7CisgICAgICAgIGJvb2wgbWF0Y2ggPSB0cnVlOworICAg
ICAgICBjb25zdCBFR0xpbnQgKmF0dHJpYnV0ZSA9IGF0dHJpYkxpc3Q7CisKKyAgICAgICAgd2hp
bGUgKGF0dHJpYnV0ZVswXSAhPSBFR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChhdHRyaWJ1dGVbMF0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRUdM
X0JVRkZFUl9TSVpFOiAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQnVmZmVyU2l6ZSA+
PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVHTF9BTFBIQV9TSVpFOiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUFs
cGhhU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFR0xfQkxVRV9TSVpFOiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBj
b25maWctPm1CbHVlU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICAgICAgICAgICAg
IG1hdGNoID0gY29uZmlnLT5tR3JlZW5TaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9SRURfU0laRTogICAgICAg
ICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bVJlZFNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfREVQVEhf
U0laRTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1EZXB0aFNpemUgPj0gYXR0cmli
dXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RUdMX1NURU5DSUxfU0laRTogICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU3RlbmNpbFNp
emUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVHTF9DT05GSUdfQ0FWRUFUOiAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+
bUNvbmZpZ0NhdmVhdCA9PSAoRUdMZW51bSkgYXR0cmlidXRlWzFdOyAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOiAgICAgICAgICAgICAgICAgbWF0Y2gg
PSBjb25maWctPm1Db25maWdJRCA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0xFVkVMOiAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoID0gY29uZmlnLT5tTGV2ZWwgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfUkVOREVS
QUJMRTogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVJlbmRlcmFibGUgPT0gKEVHTEJv
b2xlYW4pIGF0dHJpYnV0ZVsxXTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTkFU
SVZFX1ZJU1VBTF9UWVBFOiAgICAgICAgbWF0Y2ggPSBjb25maWctPm1OYXRpdmVWaXN1YWxUeXBl
ID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRUdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2FtcGxl
cyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICBtYXRjaCA9IGNvbmZp
Zy0+bVNhbXBsZUJ1ZmZlcnMgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfU1VSRkFDRV9UWVBFOiAgICAgICAgICAgICAgbWF0
Y2ggPSAoY29uZmlnLT5tU3VyZmFjZVR5cGUgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0ZVsx
XTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZUEU6ICAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRUeXBlID09IChFR0xlbnVtKSBhdHRy
aWJ1dGVbMV07ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVO
VF9CTFVFX1ZBTFVFOiAgICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50Qmx1ZVZhbHVlID09
IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
VFJBTlNQQVJFTlRfR1JFRU5fVkFMVUU6ICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudEdy
ZWVuVmFsdWUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRUdMX1RSQU5TUEFSRU5UX1JFRF9WQUxVRTogICAgIG1hdGNoID0gY29uZmlnLT5tVHJh
bnNwYXJlbnRSZWRWYWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCOiAgICAgICBtYXRjaCA9IGNv
bmZpZy0+bUJpbmRUb1RleHR1cmVSR0IgPT0gKEVHTEJvb2xlYW4pIGF0dHJpYnV0ZVsxXTsgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQklORF9UT19URVhUVVJFX1JHQkE6ICAgICAg
bWF0Y2ggPSBjb25maWctPm1CaW5kVG9UZXh0dXJlUkdCQSA9PSAoRUdMQm9vbGVhbikgYXR0cmli
dXRlWzFdOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01JTl9TV0FQX0lOVEVSVkFM
OiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWluU3dhcEludGVydmFsID09IGF0dHJpYnV0ZVsx
XTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9NQVhfU1dB
UF9JTlRFUlZBTDogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU1heFN3YXBJbnRlcnZhbCA9PSBh
dHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
R0xfTFVNSU5BTkNFX1NJWkU6ICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MdW1pbmFuY2VT
aXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRUdMX0FMUEhBX01BU0tfU0laRTogICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5t
QWxwaGFNYXNrU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICBtYXRjaCA9
IGNvbmZpZy0+bUNvbG9yQnVmZmVyVHlwZSA9PSAoRUdMZW51bSkgYXR0cmlidXRlWzFdOyAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfUkVOREVSQUJMRV9UWVBFOiAgICAgICAg
ICAgbWF0Y2ggPSAoY29uZmlnLT5tUmVuZGVyYWJsZVR5cGUgJiBhdHRyaWJ1dGVbMV0pID09IGF0
dHJpYnV0ZVsxXTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01BVENIX05BVElWRV9Q
SVhNQVA6ICAgICAgIG1hdGNoID0gZmFsc2U7IFVOSU1QTEVNRU5URUQoKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9DT05G
T1JNQU5UOiAgICAgICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1Db25mb3JtYW50ICYgYXR0
cmlidXRlWzFdKSA9PSBhdHRyaWJ1dGVbMV07ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFR0xfTUFYX1BCVUZGRVJfV0lEVEg6ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1NYXhQQnVm
ZmVyV2lkdGggPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRUdMX01BWF9QQlVGRkVSX0hFSUdIVDogICAgICAgIG1hdGNoID0gY29uZmln
LT5tTWF4UEJ1ZmZlckhlaWdodCA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9QSVhFTFM6ICAgICAgICBtYXRj
aCA9IGNvbmZpZy0+bU1heFBCdWZmZXJQaXhlbHMgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbWF0Y2gpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGF0dHJpYnV0ZSArPSAyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKQor
ICAgICAgICB7CisgICAgICAgICAgICBwYXNzZWQucHVzaF9iYWNrKCYqY29uZmlnKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChjb25maWdzKQorICAgIHsKKyAgICAgICAgc29ydChwYXNz
ZWQuYmVnaW4oKSwgcGFzc2VkLmVuZCgpLCBTb3J0Q29uZmlnKGF0dHJpYkxpc3QpKTsKKworICAg
ICAgICBFR0xpbnQgaW5kZXg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvbmZp
Z1NpemUgJiYgaW5kZXggPCBzdGF0aWNfY2FzdDxFR0xpbnQ+KHBhc3NlZC5zaXplKCkpOyBpbmRl
eCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWdzW2luZGV4XSA9IHBhc3NlZFtpbmRl
eF0tPmdldEhhbmRsZSgpOworICAgICAgICB9CisKKyAgICAgICAgKm51bUNvbmZpZyA9IGluZGV4
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqbnVtQ29uZmlnID0gcGFzc2VkLnNp
emUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY29uc3QgZWdsOjpDb25maWcg
KkNvbmZpZ1NldDo6Z2V0KEVHTENvbmZpZyBjb25maWdIYW5kbGUpCit7CisgICAgZm9yIChJdGVy
YXRvciBjb25maWcgPSBtU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBtU2V0LmVuZCgpOyBjb25maWcr
KykKKyAgICB7CisgICAgICAgIGlmIChjb25maWctPmdldEhhbmRsZSgpID09IGNvbmZpZ0hhbmRs
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICYoKmNvbmZpZyk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29u
ZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9D
b25maWcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJF
R0wvQ29uZmlnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIENvbmZpZy5oOiBEZWZpbmVzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVz
Y3JpYmluZyB0aGUgZm9ybWF0LCB0eXBlCisvLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNl
LiBJbXBsZW1lbnRzIEVHTENvbmZpZyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW0VH
TCAxLjRdIHNlY3Rpb24gMy40IHBhZ2UgMTUuCisKKyNpZm5kZWYgSU5DTFVERV9DT05GSUdfSF8K
KyNkZWZpbmUgSU5DTFVERV9DT05GSUdfSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxF
R0wvZWdsLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgRGlzcGxh
eTsKKworY2xhc3MgQ29uZmlnCit7CisgIHB1YmxpYzoKKyAgICBDb25maWcoRDNERElTUExBWU1P
REUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50
ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5j
aWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdMaW50IHRleFdpZHRoLCBFR0xpbnQgdGV4
SGVpZ2h0KTsKKworICAgIHZvaWQgc2V0RGVmYXVsdHMoKTsKKyAgICB2b2lkIHNldChEM0RESVNQ
TEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1pblN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3
YXBJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRo
U3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lkdGgsIEVHTGlu
dCB0ZXhIZWlnaHQpOworICAgIEVHTENvbmZpZyBnZXRIYW5kbGUoKSBjb25zdDsKKworICAgIGNv
bnN0IEQzRERJU1BMQVlNT0RFIG1EaXNwbGF5TW9kZTsKKyAgICBjb25zdCBEM0RGT1JNQVQgbVJl
bmRlclRhcmdldEZvcm1hdDsKKyAgICBjb25zdCBEM0RGT1JNQVQgbURlcHRoU3RlbmNpbEZvcm1h
dDsKKyAgICBjb25zdCBFR0xpbnQgbU11bHRpU2FtcGxlOworCisgICAgRUdMaW50IG1CdWZmZXJT
aXplOyAgICAgICAgICAgICAgLy8gRGVwdGggb2YgdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGlu
dCBtUmVkU2l6ZTsgICAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgUmVkIGluIHRoZSBjb2xvciBi
dWZmZXIKKyAgICBFR0xpbnQgbUdyZWVuU2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEdy
ZWVuIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xpbnQgbUJsdWVTaXplOyAgICAgICAgICAg
ICAgICAvLyBCaXRzIG9mIEJsdWUgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtTHVt
aW5hbmNlU2l6ZTsgICAgICAgICAgIC8vIEJpdHMgb2YgTHVtaW5hbmNlIGluIHRoZSBjb2xvciBi
dWZmZXIKKyAgICBFR0xpbnQgbUFscGhhU2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEFs
cGhhIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xpbnQgbUFscGhhTWFza1NpemU7ICAgICAg
ICAgICAvLyBCaXRzIG9mIEFscGhhIE1hc2sgaW4gdGhlIG1hc2sgYnVmZmVyCisgICAgRUdMQm9v
bGVhbiBtQmluZFRvVGV4dHVyZVJHQjsgICAgLy8gVHJ1ZSBpZiBiaW5kYWJsZSB0byBSR0IgdGV4
dHVyZXMuCisgICAgRUdMQm9vbGVhbiBtQmluZFRvVGV4dHVyZVJHQkE7ICAgLy8gVHJ1ZSBpZiBi
aW5kYWJsZSB0byBSR0JBIHRleHR1cmVzLgorICAgIEVHTGVudW0gbUNvbG9yQnVmZmVyVHlwZTsg
ICAgICAgIC8vIENvbG9yIGJ1ZmZlciB0eXBlCisgICAgRUdMZW51bSBtQ29uZmlnQ2F2ZWF0OyAg
ICAgICAgICAgLy8gQW55IGNhdmVhdHMgZm9yIHRoZSBjb25maWd1cmF0aW9uCisgICAgRUdMaW50
IG1Db25maWdJRDsgICAgICAgICAgICAgICAgLy8gVW5pcXVlIEVHTENvbmZpZyBpZGVudGlmaWVy
CisgICAgRUdMaW50IG1Db25mb3JtYW50OyAgICAgICAgICAgICAgLy8gV2hldGhlciBjb250ZXh0
cyBjcmVhdGVkIHdpdGggdGhpcyBjb25maWcgYXJlIGNvbmZvcm1hbnQKKyAgICBFR0xpbnQgbURl
cHRoU2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIFogaW4gdGhlIGRlcHRoIGJ1ZmZlcgor
ICAgIEVHTGludCBtTGV2ZWw7ICAgICAgICAgICAgICAgICAgIC8vIEZyYW1lIGJ1ZmZlciBsZXZl
bAorICAgIEVHTEJvb2xlYW4gbU1hdGNoTmF0aXZlUGl4bWFwOyAgIC8vIE1hdGNoIHRoZSBuYXRp
dmUgcGl4bWFwIGZvcm1hdAorICAgIEVHTGludCBtTWF4UEJ1ZmZlcldpZHRoOyAgICAgICAgIC8v
IE1heGltdW0gd2lkdGggb2YgcGJ1ZmZlcgorICAgIEVHTGludCBtTWF4UEJ1ZmZlckhlaWdodDsg
ICAgICAgIC8vIE1heGltdW0gaGVpZ2h0IG9mIHBidWZmZXIKKyAgICBFR0xpbnQgbU1heFBCdWZm
ZXJQaXhlbHM7ICAgICAgICAvLyBNYXhpbXVtIHNpemUgb2YgcGJ1ZmZlcgorICAgIEVHTGludCBt
TWF4U3dhcEludGVydmFsOyAgICAgICAgIC8vIE1heGltdW0gc3dhcCBpbnRlcnZhbAorICAgIEVH
TGludCBtTWluU3dhcEludGVydmFsOyAgICAgICAgIC8vIE1pbmltdW0gc3dhcCBpbnRlcnZhbAor
ICAgIEVHTEJvb2xlYW4gbU5hdGl2ZVJlbmRlcmFibGU7ICAgIC8vIEVHTF9UUlVFIGlmIG5hdGl2
ZSByZW5kZXJpbmcgQVBJcyBjYW4gcmVuZGVyIHRvIHN1cmZhY2UKKyAgICBFR0xpbnQgbU5hdGl2
ZVZpc3VhbElEOyAgICAgICAgICAvLyBIYW5kbGUgb2YgY29ycmVzcG9uZGluZyBuYXRpdmUgdmlz
dWFsCisgICAgRUdMaW50IG1OYXRpdmVWaXN1YWxUeXBlOyAgICAgICAgLy8gTmF0aXZlIHZpc3Vh
bCB0eXBlIG9mIHRoZSBhc3NvY2lhdGVkIHZpc3VhbAorICAgIEVHTGludCBtUmVuZGVyYWJsZVR5
cGU7ICAgICAgICAgIC8vIFdoaWNoIGNsaWVudCByZW5kZXJpbmcgQVBJcyBhcmUgc3VwcG9ydGVk
LgorICAgIEVHTGludCBtU2FtcGxlQnVmZmVyczsgICAgICAgICAgIC8vIE51bWJlciBvZiBtdWx0
aXNhbXBsZSBidWZmZXJzCisgICAgRUdMaW50IG1TYW1wbGVzOyAgICAgICAgICAgICAgICAgLy8g
TnVtYmVyIG9mIHNhbXBsZXMgcGVyIHBpeGVsCisgICAgRUdMaW50IG1TdGVuY2lsU2l6ZTsgICAg
ICAgICAgICAgLy8gQml0cyBvZiBTdGVuY2lsIGluIHRoZSBzdGVuY2lsIGJ1ZmZlcgorICAgIEVH
TGludCBtU3VyZmFjZVR5cGU7ICAgICAgICAgICAgIC8vIFdoaWNoIHR5cGVzIG9mIEVHTCBzdXJm
YWNlcyBhcmUgc3VwcG9ydGVkLgorICAgIEVHTGVudW0gbVRyYW5zcGFyZW50VHlwZTsgICAgICAg
IC8vIFR5cGUgb2YgdHJhbnNwYXJlbmN5IHN1cHBvcnRlZAorICAgIEVHTGludCBtVHJhbnNwYXJl
bnRSZWRWYWx1ZTsgICAgIC8vIFRyYW5zcGFyZW50IHJlZCB2YWx1ZQorICAgIEVHTGludCBtVHJh
bnNwYXJlbnRHcmVlblZhbHVlOyAgIC8vIFRyYW5zcGFyZW50IGdyZWVuIHZhbHVlCisgICAgRUdM
aW50IG1UcmFuc3BhcmVudEJsdWVWYWx1ZTsgICAgLy8gVHJhbnNwYXJlbnQgYmx1ZSB2YWx1ZQor
fTsKKworLy8gRnVuY3Rpb24gb2JqZWN0IHVzZWQgYnkgU1RMIHNvcnRpbmcgcm91dGluZXMgZm9y
IG9yZGVyaW5nIENvbmZpZ3MgYWNjb3JkaW5nIHRvIFtFR0xdIHNlY3Rpb24gMy40LjEgcGFnZSAy
NC4KK2NsYXNzIFNvcnRDb25maWcKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFNvcnRDb25m
aWcoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKKworICAgIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBDb25maWcgKngsIGNvbnN0IENvbmZpZyAqeSkgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IENvbmZpZyAmeCwgY29uc3QgQ29uZmlnICZ5KSBjb25zdDsKKworICBwcml2YXRlOgor
ICAgIHZvaWQgc2NhbkZvcldhbnRlZENvbXBvbmVudHMoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0
KTsKKyAgICBFR0xpbnQgd2FudGVkQ29tcG9uZW50c1NpemUoY29uc3QgQ29uZmlnICZjb25maWcp
IGNvbnN0OworCisgICAgYm9vbCBtV2FudFJlZDsKKyAgICBib29sIG1XYW50R3JlZW47CisgICAg
Ym9vbCBtV2FudEJsdWU7CisgICAgYm9vbCBtV2FudEFscGhhOworICAgIGJvb2wgbVdhbnRMdW1p
bmFuY2U7Cit9OworCitjbGFzcyBDb25maWdTZXQKK3sKKyAgICBmcmllbmQgRGlzcGxheTsKKwor
ICBwdWJsaWM6CisgICAgQ29uZmlnU2V0KCk7CisKKyAgICB2b2lkIGFkZChEM0RESVNQTEFZTU9E
RSBkaXNwbGF5TW9kZSwgRUdMaW50IG1pblN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRl
cnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNp
bEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lkdGgsIEVHTGludCB0ZXhI
ZWlnaHQpOworICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBnZXRDb25maWdzKEVH
TENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmln
U2l6ZSwgRUdMaW50ICpudW1Db25maWcpOworICAgIGNvbnN0IGVnbDo6Q29uZmlnICpnZXQoRUdM
Q29uZmlnIGNvbmZpZ0hhbmRsZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oQ29uZmlnU2V0KTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8Q29uZmlnLCBTb3J0
Q29uZmlnPiBTZXQ7CisgICAgdHlwZWRlZiBTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOworICAgIFNl
dCBtU2V0OworCisgICAgc3RhdGljIGNvbnN0IEVHTGludCBtU29ydEF0dHJpYnNbXTsKK307Cit9
CisKKyNlbmRpZiAgIC8vIElOQ0xVREVfQ09ORklHX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMzUgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIERpc3BsYXkuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OkRp
c3BsYXkgY2xhc3MsIHJlcHJlc2VudGluZyB0aGUgYWJzdHJhY3QKKy8vIGRpc3BsYXkgb24gd2hp
Y2ggZ3JhcGhpY3MgYXJlIGRyYXduLiBJbXBsZW1lbnRzIEVHTERpc3BsYXkuCisvLyBbRUdMIDEu
NF0gc2VjdGlvbiAyLjEuMiBwYWdlIDMuCisKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgor
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDx2ZWN0b3I+
CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0
aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJsaWJF
R0wvbWFpbi5oIgorCisvLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRlZmluaW5nIEZPUkNFX1JF
Rl9SQVNUIGluIHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MKKyNkZWZpbmUgUkVGX1JB
U1QgMAorCisvLyBUaGUgIkRlYnVnIFRoaXMgUGl4ZWwuLi4iIGZlYXR1cmUgaW4gUElYIG9mdGVu
IGZhaWxzIHdoZW4gdXNpbmcgdGhlCisvLyBEM0Q5RXggaW50ZXJmYWNlcy4gIEluIG9yZGVyIHRv
IGdldCBkZWJ1ZyBwaXhlbCB0byB3b3JrIG9uIGEgVmlzdGEvV2luIDcKKy8vIG1hY2hpbmUsIGRl
ZmluZSAiQU5HTEVfRU5BQkxFX0QzRDlFWD0wIiBpbiB5b3VyIHByb2plY3QgZmlsZS4KKyNpZiAh
ZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOUVYKQorLy8gRW5hYmxlcyB1c2Ugb2YgdGhlIElEaXJl
Y3QzRDlFeCBpbnRlcmZhY2UsIHdoZW4gYXZhaWxhYmxlCisjZGVmaW5lIEFOR0xFX0VOQUJMRV9E
M0Q5RVggMQorI2VuZGlmIC8vICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5RVgpCisKK25hbWVz
cGFjZSBlZ2wKK3sKK25hbWVzcGFjZQoreworICAgIHR5cGVkZWYgc3RkOjptYXA8RUdMTmF0aXZl
RGlzcGxheVR5cGUsIERpc3BsYXkqPiBEaXNwbGF5TWFwOyAKKyAgICBEaXNwbGF5TWFwIGRpc3Bs
YXlzOworfQorCitlZ2w6OkRpc3BsYXkgKkRpc3BsYXk6OmdldERpc3BsYXkoRUdMTmF0aXZlRGlz
cGxheVR5cGUgZGlzcGxheUlkKQoreworICAgIGlmIChkaXNwbGF5cy5maW5kKGRpc3BsYXlJZCkg
IT0gZGlzcGxheXMuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gZGlzcGxheXNbZGlzcGxh
eUlkXTsKKyAgICB9CisKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOworCisgICAg
aWYgKGRpc3BsYXlJZCA9PSBFR0xfREVGQVVMVF9ESVNQTEFZKQorICAgIHsKKyAgICAgICAgZGlz
cGxheSA9IG5ldyBlZ2w6OkRpc3BsYXkoZGlzcGxheUlkLCAoSERDKU5VTEwsIGZhbHNlKTsKKyAg
ICB9CisgICAgZWxzZSBpZiAoZGlzcGxheUlkID09IEVHTF9TT0ZUV0FSRV9ESVNQTEFZX0FOR0xF
KQorICAgIHsKKyAgICAgICAgZGlzcGxheSA9IG5ldyBlZ2w6OkRpc3BsYXkoZGlzcGxheUlkLCAo
SERDKU5VTEwsIHRydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBGSVhN
RTogQ2hlY2sgaWYgZGlzcGxheUlkIGlzIGEgdmFsaWQgZGlzcGxheSBkZXZpY2UgY29udGV4dAor
CisgICAgICAgIGRpc3BsYXkgPSBuZXcgZWdsOjpEaXNwbGF5KGRpc3BsYXlJZCwgKEhEQylkaXNw
bGF5SWQsIGZhbHNlKTsKKyAgICB9CisKKyAgICBkaXNwbGF5c1tkaXNwbGF5SWRdID0gZGlzcGxh
eTsKKyAgICByZXR1cm4gZGlzcGxheTsKK30KKworRGlzcGxheTo6RGlzcGxheShFR0xOYXRpdmVE
aXNwbGF5VHlwZSBkaXNwbGF5SWQsIEhEQyBkZXZpY2VDb250ZXh0LCBib29sIHNvZnR3YXJlKSA6
IG1EYyhkZXZpY2VDb250ZXh0KQoreworICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKKyAgICBtRDNk
Q29tcGlsZXJNb2R1bGUgPSBOVUxMOworCisgICAgbUQzZDkgPSBOVUxMOworICAgIG1EM2Q5RXgg
PSBOVUxMOworICAgIG1EZXZpY2UgPSBOVUxMOworICAgIG1EZXZpY2VFeCA9IE5VTEw7CisgICAg
bURldmljZVdpbmRvdyA9IE5VTEw7CisKKyAgICBtQWRhcHRlciA9IEQzREFEQVBURVJfREVGQVVM
VDsKKworICAgICNpZiBSRUZfUkFTVCA9PSAxIHx8IGRlZmluZWQoRk9SQ0VfUkVGX1JBU1QpCisg
ICAgICAgIG1EZXZpY2VUeXBlID0gRDNEREVWVFlQRV9SRUY7CisgICAgI2Vsc2UKKyAgICAgICAg
bURldmljZVR5cGUgPSBEM0RERVZUWVBFX0hBTDsKKyAgICAjZW5kaWYKKworICAgIG1EaXNwbGF5
TW9kZSA9IEQzRERJU1BMQVlNT0RFKCk7CisKKyAgICBtTWluU3dhcEludGVydmFsID0gMTsKKyAg
ICBtTWF4U3dhcEludGVydmFsID0gMTsKKyAgICBtU29mdHdhcmVEZXZpY2UgPSBzb2Z0d2FyZTsK
KyAgICBtRGlzcGxheUlkID0gZGlzcGxheUlkOworICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7Cit9
CisKK0Rpc3BsYXk6On5EaXNwbGF5KCkKK3sKKyAgICB0ZXJtaW5hdGUoKTsKKworICAgIERpc3Bs
YXlNYXA6Oml0ZXJhdG9yIHRoaXNEaXNwbGF5ID0gZGlzcGxheXMuZmluZChtRGlzcGxheUlkKTsK
KworICAgIGlmICh0aGlzRGlzcGxheSAhPSBkaXNwbGF5cy5lbmQoKSkKKyAgICB7CisgICAgICBk
aXNwbGF5cy5lcmFzZSh0aGlzRGlzcGxheSk7CisgICAgfQorfQorCitib29sIERpc3BsYXk6Omlu
aXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobVNvZnR3YXJlRGV2aWNlKQorICAgIHsKKyAg
ICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoInN3aWZ0c2hhZGVyX2QzZDku
ZGxsIikpOworICAgIH0gCisgICAgZWxzZQorICAgIHsKKyAgICAgIG1EM2Q5TW9kdWxlID0gR2V0
TW9kdWxlSGFuZGxlKFRFWFQoImQzZDkuZGxsIikpOworICAgIH0KKyAgICBpZiAobUQzZDlNb2R1
bGUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRlcm1pbmF0ZSgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRpcmVjdDNEQ3Jl
YXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4KiopOworICAgIERpcmVjdDNEQ3JlYXRlOUV4
RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVh
dGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNEQ3JlYXRlOUV4
IikpOworCisgICNpZiBkZWZpbmVkKEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RVTEVf
TkFNRVMpCisgICAgICAvLyBGaW5kIGEgRDNEQ29tcGlsZXIgbW9kdWxlIHRoYXQgaGFkIGFscmVh
ZHkgYmVlbiBsb2FkZWQgYmFzZWQgb24gYSBwcmVkZWZpbmVkIGxpc3Qgb2YgdmVyc2lvbnMuCisg
ICAgICBzdGF0aWMgVENIQVIqIGQzZENvbXBpbGVyTmFtZXNbXSA9IEFOR0xFX1BSRUxPQURFRF9E
M0RDT01QSUxFUl9NT0RVTEVfTkFNRVM7CisgIAorICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
aXplb2YoZDNkQ29tcGlsZXJOYW1lcykgLyBzaXplb2YoKmQzZENvbXBpbGVyTmFtZXMpOyArK2kp
CisgICAgICB7CisgICAgICAgICAgaWYgKEdldE1vZHVsZUhhbmRsZUV4KDAsIGQzZENvbXBpbGVy
TmFtZXNbaV0sICZtRDNkQ29tcGlsZXJNb2R1bGUpKQorICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQorICAjZWxzZQorICAgICAgLy8gTG9hZCB0
aGUgdmVyc2lvbiBvZiB0aGUgRDNEQ29tcGlsZXIgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgRGly
ZWN0M0QgdmVyc2lvbiBBTkdMRSB3YXMgYnVpbHQgd2l0aC4KKyAgICAgIG1EM2RDb21waWxlck1v
ZHVsZSA9IExvYWRMaWJyYXJ5KEQzRENPTVBJTEVSX0RMTCk7CisgICNlbmRpZiAgLy8gQU5HTEVf
UFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUworICAKKyAgICAgIGlmICghbUQzZENv
bXBpbGVyTW9kdWxlKQorICAgICAgeworICAgICAgICAgIHRlcm1pbmF0ZSgpOworICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgCisgICAgICBtRDNEQ29tcGlsZUZ1bmMgPSByZWlu
dGVycHJldF9jYXN0PEQzRENvbXBpbGVGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkQ29tcGlsZXJN
b2R1bGUsICJEM0RDb21waWxlIikpOworICAgICAgQVNTRVJUKG1EM0RDb21waWxlRnVuYyk7CisK
KyAgICAvLyBVc2UgRGlyZWN0M0Q5RXggaWYgYXZhaWxhYmxlLiBBbW9uZyBvdGhlciB0aGluZ3Ms
IHRoaXMgdmVyc2lvbiBpcyBsZXNzCisgICAgLy8gaW5jbGluZWQgdG8gcmVwb3J0IGEgbG9zdCBj
b250ZXh0LCBmb3IgZXhhbXBsZSB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzCisgICAgLy8gZGVza3Rv
cC4gRGlyZWN0M0Q5RXggaXMgYXZhaWxhYmxlIGluIFdpbmRvd3MgVmlzdGEgYW5kIGxhdGVyIGlm
IHN1aXRhYmxlIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS4KKyAgICBpZiAoQU5HTEVfRU5BQkxFX0Qz
RDlFWCAmJiBEaXJlY3QzRENyZWF0ZTlFeFB0ciAmJiBTVUNDRUVERUQoRGlyZWN0M0RDcmVhdGU5
RXhQdHIoRDNEX1NES19WRVJTSU9OLCAmbUQzZDlFeCkpKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1EM2Q5RXgpOworICAgICAgICBtRDNkOUV4LT5RdWVyeUludGVyZmFjZShJSURfSURpcmVjdDNE
OSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtRDNkOSkpOworICAgICAgICBBU1NFUlQobUQz
ZDkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRDNkOSA9IERpcmVjdDNEQ3Jl
YXRlOShEM0RfU0RLX1ZFUlNJT04pOworICAgIH0KKworICAgIGlmIChtRDNkOSkKKyAgICB7Cisg
ICAgICAgIGlmIChtRGMgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAvLyAgVU5JTVBMRU1F
TlRFRCgpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgd2hpY2ggYWRhcHRlciBpbmRleCB0aGUgZGV2
aWNlIGNvbnRleHQgY29ycmVzcG9uZHMgdG8KKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQg
cmVzdWx0OworICAgICAgICAKKyAgICAgICAgLy8gR2l2ZSB1cCBvbiBnZXR0aW5nIGRldmljZSBj
YXBzIGFmdGVyIGFib3V0IG9uZSBzZWNvbmQuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MTA7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkdldERldmlj
ZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURldmljZUNhcHMpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChy
ZXN1bHQgPT0gRDNERVJSX05PVEFWQUlMQUJMRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBTbGVlcCgxMDApOyAgIC8vIEdpdmUgdGhlIGRyaXZlciBzb21lIHRpbWUgdG8gaW5pdGlh
bGl6ZS9yZWNvdmVyCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChGQUlMRUQo
cmVzdWx0KSkgICAvLyBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSwgRV9PVVRPRk1FTU9SWSwgRDNE
RVJSX0lOVkFMSURERVZJQ0UsIG9yIGFub3RoZXIgZXJyb3Igd2UgY2FuJ3QgcmVjb3ZlciBmcm9t
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVybWluYXRlKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24g
PCBEM0RQU19WRVJTSU9OKDIsIDApKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXJtaW5hdGUo
KTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBmYWxzZSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBXaGVuIERpcmVjdFg5IGlzIHJ1bm5pbmcgd2l0aCBh
biBvbGRlciBEaXJlY3RYOCBkcml2ZXIsIGEgU3RyZXRjaFJlY3QgZnJvbSBhIHJlZ3VsYXIgdGV4
dHVyZSB0byBhIHJlbmRlciB0YXJnZXQgdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAg
ICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
LgorICAgICAgICBpZiAoKG1EZXZpY2VDYXBzLkRldkNhcHMyICYgRDNEREVWQ0FQUzJfQ0FOX1NU
UkVUQ0hSRUNUX0ZST01fVEVYVFVSRVMpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRl
cm1pbmF0ZSgpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9OT1RfSU5JVElBTElaRUQs
IGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSA0OworICAg
ICAgICBtTWF4U3dhcEludGVydmFsID0gMDsKKworICAgICAgICBpZiAobURldmljZUNhcHMuUHJl
c2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEUpIHttTWlu
U3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMCk7IG1NYXhTd2FwSW50
ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAwKTt9CisgICAgICAgIGlmIChtRGV2
aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX09ORSkg
ICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAxKTsg
bU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDEpO30KKyAgICAg
ICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5U
RVJWQUxfVFdPKSAgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50
ZXJ2YWwsIDIpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwg
Mik7fQorICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNE
UFJFU0VOVF9JTlRFUlZBTF9USFJFRSkgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4o
bU1pblN3YXBJbnRlcnZhbCwgMyk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dh
cEludGVydmFsLCAzKTt9CisgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRl
cnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVIpICAgICAge21NaW5Td2FwSW50ZXJ2YWwg
PSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCA0KTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6
bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDQpO30KKworICAgICAgICBtRDNkOS0+R2V0QWRhcHRlcklk
ZW50aWZpZXIobUFkYXB0ZXIsIDAsICZtQWRhcHRlcklkZW50aWZpZXIpOworCisgICAgICAgIC8v
IEFUSSBjYXJkcyBvbiBYUCBoYXZlIHByb2JsZW1zIHdpdGggbm9uLXBvd2VyLW9mLXR3byB0ZXh0
dXJlcy4KKyAgICAgICAgbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXMgPSAhKG1EZXZpY2VDYXBz
LlRleHR1cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX1BPVzIpICYmCisgICAgICAgICAgICEobURl
dmljZUNhcHMuVGV4dHVyZUNhcHMgJiBEM0RQVEVYVFVSRUNBUFNfQ1VCRU1BUF9QT1cyKSAmJgor
ICAgICAgICAgICAhKG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX05P
TlBPVzJDT05ESVRJT05BTCkgJiYKKyAgICAgICAgICAgIShnZXRDb21wYXJhYmxlT1NWZXJzaW9u
KCkgPCB2ZXJzaW9uV2luZG93c1Zpc3RhICYmIG1BZGFwdGVySWRlbnRpZmllci5WZW5kb3JJZCA9
PSBWRU5ET1JfSURfQU1EKTsKKworICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0
Rm9ybWF0c1tdID0KKyAgICAgICAgeworICAgICAgICAgICAgRDNERk1UX0ExUjVHNUI1LAorICAg
ICAgICAvLyAgRDNERk1UX0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1wIGNvbmZvcm1h
bmNlIHRlc3QgdXNlcyBSZWFkUGl4ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVzaW5nIGl0IHRv
IHRoaW5rIHRoYXQgcmVuZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCisgICAgICAgICAg
ICBEM0RGTVRfQThSOEc4QjgsCisgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAorICAgICAgICAv
LyAgRDNERk1UX1gxUjVHNUI1LCAgICAgIC8vIEhhcyBubyBjb21wYXRpYmxlIE9wZW5HTCBFUyBy
ZW5kZXJidWZmZXIgZm9ybWF0CisgICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgKKyAgICAgICAg
fTsKKworICAgICAgICBjb25zdCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0c1tdID0KKyAg
ICAgICAgeworICAgICAgICAgICAgRDNERk1UX1VOS05PV04sCisgICAgICAgIC8vICBEM0RGTVRf
RDE2X0xPQ0tBQkxFLAorICAgICAgICAgICAgRDNERk1UX0QzMiwKKyAgICAgICAgLy8gIEQzREZN
VF9EMTVTMSwKKyAgICAgICAgICAgIEQzREZNVF9EMjRTOCwKKyAgICAgICAgICAgIEQzREZNVF9E
MjRYOCwKKyAgICAgICAgLy8gIEQzREZNVF9EMjRYNFM0LAorICAgICAgICAgICAgRDNERk1UX0Qx
NiwKKyAgICAgICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAorICAgICAgICAvLyAgRDNERk1U
X0QyNEZTOAorICAgICAgICB9OworCisgICAgICAgIGlmIChGQUlMRUQobUQzZDktPkdldEFkYXB0
ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJm1EaXNwbGF5TW9kZSkpKQorICAgICAgICB7CisgICAg
ICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIENvbmZpZ1NldCBjb25maWdTZXQ7CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IHNpemVvZihyZW5kZXJUYXJnZXRG
b3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyBmb3JtYXRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9y
bWF0c1tmb3JtYXRJbmRleF07CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURpc3BsYXlNb2RlLkZv
cm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCByZW5kZXJUYXJn
ZXRGb3JtYXQpOworCisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGVwdGhTdGVuY2lsSW5k
ZXggPSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IHNpemVvZihkZXB0aFN0ZW5jaWxGb3JtYXRzKSAv
IHNpemVvZihEM0RGT1JNQVQpOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IGRl
cHRoU3RlbmNpbEZvcm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhdOworICAgICAgICAgICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IEQzRF9PSzsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGlmKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURpc3BsYXlNb2Rl
LkZvcm1hdCwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9TVVJGQUNFLCBkZXB0aFN0
ZW5jaWxGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZihkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04p
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gbUQzZDktPkNoZWNrRGVwdGhTdGVuY2lsTWF0Y2gobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBtRGlzcGxheU1vZGUuRm9ybWF0LCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNp
bEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNh
bXBsaW5nCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdTZXQuYWRkKG1EaXNw
bGF5TW9kZSwgbU1pblN3YXBJbnRlcnZhbCwgbU1heFN3YXBJbnRlcnZhbCwgcmVuZGVyVGFyZ2V0
Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlV2lkdGgsIG1EZXZpY2VDYXBz
Lk1heFRleHR1cmVIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gR2l2ZSB0aGUgc29ydGVkIGNvbmZpZ3MgYSB1bmlxdWUgSUQgYW5kIHN0
b3JlIHRoZW0gaW50ZXJuYWxseQorICAgICAgICBFR0xpbnQgaW5kZXggPSAxOworICAgICAgICBm
b3IgKENvbmZpZ1NldDo6SXRlcmF0b3IgY29uZmlnID0gY29uZmlnU2V0Lm1TZXQuYmVnaW4oKTsg
Y29uZmlnICE9IGNvbmZpZ1NldC5tU2V0LmVuZCgpOyBjb25maWcrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgQ29uZmlnIGNvbmZpZ3VyYXRpb24gPSAqY29uZmlnOworICAgICAgICAgICAgY29u
ZmlndXJhdGlvbi5tQ29uZmlnSUQgPSBpbmRleDsKKyAgICAgICAgICAgIGluZGV4Kys7CisKKyAg
ICAgICAgICAgIG1Db25maWdTZXQubVNldC5pbnNlcnQoY29uZmlndXJhdGlvbik7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICB7CisgICAgICAgIHRl
cm1pbmF0ZSgpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbml0RXh0
ZW5zaW9uU3RyaW5nKCk7CisgICAgaW5pdFZlbmRvclN0cmluZygpOworCisgICAgc3RhdGljIGNv
bnN0IFRDSEFSIHdpbmRvd05hbWVbXSA9IFRFWFQoIkFuZ2xlSGlkZGVuV2luZG93Iik7CisgICAg
c3RhdGljIGNvbnN0IFRDSEFSIGNsYXNzTmFtZVtdID0gVEVYVCgiU1RBVElDIik7CisKKyAgICBt
RGV2aWNlV2luZG93ID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSwgY2xhc3NOYW1l
LCB3aW5kb3dOYW1lLCBXU19ESVNBQkxFRCB8IFdTX1BPUFVQLCAwLCAwLCAxLCAxLCBIV05EX01F
U1NBR0UsIE5VTEwsIEdldE1vZHVsZUhhbmRsZShOVUxMKSwgTlVMTCk7CisKKyAgICBpZiAoIWNy
ZWF0ZURldmljZSgpKQorICAgIHsKKyAgICAgICAgdGVybWluYXRlKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBtVmVydGV4U2hhZGVyQ2FjaGUuaW5pdGlhbGl6ZShtRGV2
aWNlKTsKKyAgICBtUGl4ZWxTaGFkZXJDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRGlzcGxheTo6dGVybWluYXRlKCkKK3sKKyAgICB3aGls
ZSAoIW1TdXJmYWNlU2V0LmVtcHR5KCkpCisgICAgeworICAgICAgICBkZXN0cm95U3VyZmFjZSgq
bVN1cmZhY2VTZXQuYmVnaW4oKSk7CisgICAgfQorCisgICAgd2hpbGUgKCFtQ29udGV4dFNldC5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVzdHJveUNvbnRleHQoKm1Db250ZXh0U2V0LmJlZ2lu
KCkpOworICAgIH0KKworICAgIHdoaWxlICghbUV2ZW50UXVlcnlQb29sLmVtcHR5KCkpCisgICAg
eworICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygpLT5SZWxlYXNlKCk7CisgICAgICAgIG1F
dmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOworICAgIH0KKworICAgIG1WZXJ0ZXhTaGFkZXJDYWNo
ZS5jbGVhcigpOworICAgIG1QaXhlbFNoYWRlckNhY2hlLmNsZWFyKCk7CisKKyAgICBpZiAobURl
dmljZSkKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSBkZXZpY2UgaXMgbG9zdCwgcmVzZXQgaXQg
Zmlyc3QgdG8gcHJldmVudCBsZWF2aW5nIHRoZSBkcml2ZXIgaW4gYW4gdW5zdGFibGUgc3RhdGUK
KyAgICAgICAgaWYgKHRlc3REZXZpY2VMb3N0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
c2V0RGV2aWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Cisg
ICAgICAgIG1EZXZpY2UgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtRGV2aWNlRXgpCisgICAg
eworICAgICAgICBtRGV2aWNlRXgtPlJlbGVhc2UoKTsKKyAgICAgICAgbURldmljZUV4ID0gTlVM
TDsKKyAgICB9CisKKyAgICBpZiAobUQzZDkpCisgICAgeworICAgICAgICBtRDNkOS0+UmVsZWFz
ZSgpOworICAgICAgICBtRDNkOSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXZpY2VXaW5k
b3cpCisgICAgeworICAgICAgICBEZXN0cm95V2luZG93KG1EZXZpY2VXaW5kb3cpOworICAgICAg
ICBtRGV2aWNlV2luZG93ID0gTlVMTDsKKyAgICB9CisgICAgCisgICAgaWYgKG1EM2Q5RXgpCisg
ICAgeworICAgICAgICBtRDNkOUV4LT5SZWxlYXNlKCk7CisgICAgICAgIG1EM2Q5RXggPSBOVUxM
OworICAgIH0KKworICAgIGlmIChtRDNkOU1vZHVsZSkKKyAgICB7CisgICAgICAgIG1EM2Q5TW9k
dWxlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUQzZENvbXBpbGVyTW9kdWxlKQorICAgIHsK
KyAgICAgICAgRnJlZUxpYnJhcnkobUQzZENvbXBpbGVyTW9kdWxlKTsKKyAgICAgICAgbUQzZENv
bXBpbGVyTW9kdWxlID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGxheTo6c3RhcnRTY2Vu
ZSgpCit7CisgICAgaWYgKCFtU2NlbmVTdGFydGVkKQorICAgIHsKKyAgICAgICAgbG9uZyByZXN1
bHQgPSBtRGV2aWNlLT5CZWdpblNjZW5lKCk7CisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0
KSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBkZWZlbnNpdmUgY2hlY2tpbmcgYWdhaW5zdCB0
aGUgZGV2aWNlIGJlaW5nCisgICAgICAgICAgICAvLyBsb3N0IGF0IHVuZXhwZWN0ZWQgdGltZXMu
CisgICAgICAgICAgICBtU2NlbmVTdGFydGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBEaXNwbGF5OjplbmRTY2VuZSgpCit7CisgICAgaWYgKG1TY2VuZVN0YXJ0ZWQpCisg
ICAgeworICAgICAgICAvLyBFbmRTY2VuZSBjYW4gZmFpbCBpZiB0aGUgZGV2aWNlIHdhcyBsb3N0
LCBmb3IgZXhhbXBsZSBkdWUKKyAgICAgICAgLy8gdG8gYSBURFIgZHVyaW5nIGEgZHJhdyBjYWxs
LgorICAgICAgICBtRGV2aWNlLT5FbmRTY2VuZSgpOworICAgICAgICBtU2NlbmVTdGFydGVkID0g
ZmFsc2U7CisgICAgfQorfQorCitib29sIERpc3BsYXk6OmdldENvbmZpZ3MoRUdMQ29uZmlnICpj
b25maWdzLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QsIEVHTGludCBjb25maWdTaXplLCBFR0xp
bnQgKm51bUNvbmZpZykKK3sKKyAgICByZXR1cm4gbUNvbmZpZ1NldC5nZXRDb25maWdzKGNvbmZp
Z3MsIGF0dHJpYkxpc3QsIGNvbmZpZ1NpemUsIG51bUNvbmZpZyk7Cit9CisKK2Jvb2wgRGlzcGxh
eTo6Z2V0Q29uZmlnQXR0cmliKEVHTENvbmZpZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVH
TGludCAqdmFsdWUpCit7CisgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24gPSBt
Q29uZmlnU2V0LmdldChjb25maWcpOworCisgICAgc3dpdGNoIChhdHRyaWJ1dGUpCisgICAgewor
ICAgICAgY2FzZSBFR0xfQlVGRkVSX1NJWkU6ICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmln
dXJhdGlvbi0+bUJ1ZmZlclNpemU7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xf
QUxQSEFfU0laRTogICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUFscGhh
U2l6ZTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfQkxVRV9TSVpFOiAgICAg
ICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUJsdWVTaXplOyAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTogICAgICAgICAgICAgICAgKnZh
bHVlID0gY29uZmlndXJhdGlvbi0+bUdyZWVuU2l6ZTsgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFR0xfUkVEX1NJWkU6ICAgICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJh
dGlvbi0+bVJlZFNpemU7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfREVQ
VEhfU0laRTogICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bURlcHRoU2l6
ZTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfU1RFTkNJTF9TSVpFOiAgICAg
ICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVN0ZW5jaWxTaXplOyAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFR0xfQ09ORklHX0NBVkVBVDogICAgICAgICAgICAgKnZhbHVl
ID0gY29uZmlndXJhdGlvbi0+bUNvbmZpZ0NhdmVhdDsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFR0xfQ09ORklHX0lEOiAgICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlv
bi0+bUNvbmZpZ0lEOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfTEVWRUw6
ICAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUxldmVsOyAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfTkFUSVZFX1JFTkRFUkFCTEU6ICAg
ICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU5hdGl2ZVJlbmRlcmFibGU7ICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFR0xfTkFUSVZFX1ZJU1VBTF9UWVBFOiAgICAgICAgKnZhbHVlID0g
Y29uZmlndXJhdGlvbi0+bU5hdGl2ZVZpc3VhbFR5cGU7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFR0xfU0FNUExFUzogICAgICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+
bVNhbXBsZXM7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfU0FNUExFX0JV
RkZFUlM6ICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVNhbXBsZUJ1ZmZlcnM7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfU1VSRkFDRV9UWVBFOiAgICAgICAgICAg
ICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVN1cmZhY2VUeXBlOyAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAgICAgKnZhbHVlID0gY29u
ZmlndXJhdGlvbi0+bVRyYW5zcGFyZW50VHlwZTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
R0xfVFJBTlNQQVJFTlRfQkxVRV9WQUxVRTogICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVRy
YW5zcGFyZW50Qmx1ZVZhbHVlOyAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRf
R1JFRU5fVkFMVUU6ICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVRyYW5zcGFyZW50R3JlZW5W
YWx1ZTsgIGJyZWFrOworICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfUkVEX1ZBTFVFOiAgICAg
KnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVRyYW5zcGFyZW50UmVkVmFsdWU7ICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFR0xfQklORF9UT19URVhUVVJFX1JHQjogICAgICAgKnZhbHVlID0gY29uZmln
dXJhdGlvbi0+bUJpbmRUb1RleHR1cmVSR0I7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xf
QklORF9UT19URVhUVVJFX1JHQkE6ICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUJpbmRU
b1RleHR1cmVSR0JBOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfTUlOX1NXQVBfSU5URVJW
QUw6ICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU1pblN3YXBJbnRlcnZhbDsgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfTUFYX1NXQVBfSU5URVJWQUw6ICAgICAgICAgKnZh
bHVlID0gY29uZmlndXJhdGlvbi0+bU1heFN3YXBJbnRlcnZhbDsgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFR0xfTFVNSU5BTkNFX1NJWkU6ICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJh
dGlvbi0+bUx1bWluYW5jZVNpemU7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfQUxQ
SEFfTUFTS19TSVpFOiAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUFscGhhTWFz
a1NpemU7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfQ09MT1JfQlVGRkVSX1RZUEU6
ICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUNvbG9yQnVmZmVyVHlwZTsgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFR0xfUkVOREVSQUJMRV9UWVBFOiAgICAgICAgICAgKnZhbHVl
ID0gY29uZmlndXJhdGlvbi0+bVJlbmRlcmFibGVUeXBlOyAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1BUDogICAgICAgKnZhbHVlID0gZmFsc2U7IFVOSU1Q
TEVNRU5URUQoKTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfQ09ORk9S
TUFOVDogICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUNvbmZvcm1hbnQ7
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFR0xfTUFYX1BCVUZGRVJfV0lEVEg6ICAg
ICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU1heFBCdWZmZXJXaWR0aDsgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFR0xfTUFYX1BCVUZGRVJfSEVJR0hUOiAgICAgICAgKnZhbHVlID0g
Y29uZmlndXJhdGlvbi0+bU1heFBCdWZmZXJIZWlnaHQ7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFR0xfTUFYX1BCVUZGRVJfUElYRUxTOiAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+
bU1heFBCdWZmZXJQaXhlbHM7ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERpc3Bs
YXk6OmNyZWF0ZURldmljZSgpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOworICAgIH0K
KyAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSBnZXREZWZhdWx0
UHJlc2VudFBhcmFtZXRlcnMoKTsKKyAgICBEV09SRCBiZWhhdmlvckZsYWdzID0gRDNEQ1JFQVRF
X0ZQVV9QUkVTRVJWRSB8IEQzRENSRUFURV9OT1dJTkRPV0NIQU5HRVM7CisKKyAgICBIUkVTVUxU
IHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2
aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRFWFBST0NF
U1NJTkcgfCBEM0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmlj
ZSk7CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7CisgICAgfQorCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNy
ZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5kb3csIGJlaGF2aW9y
RmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywgJnByZXNlbnRQYXJh
bWV0ZXJzLCAmbURldmljZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfTk9UQVZBSUxB
QkxFIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KG1EM2Q5RXgpCisgICAgeworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFj
ZShJSURfSURpcmVjdDNERGV2aWNlOUV4LCAodm9pZCoqKSAmbURldmljZUV4KTsKKyAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICBpbml0aWFsaXplRGV2aWNl
KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gZG8gYW55IG9uZS10aW1lIGRldmljZSBp
bml0aWFsaXphdGlvbgorLy8gTk9URTogdGhpcyBpcyBhbHNvIG5lZWRlZCBhZnRlciBhIGRldmlj
ZSBsb3N0L3Jlc2V0CisvLyB0byByZXNldCB0aGUgc2NlbmUgc3RhdHVzIGFuZCBlbnN1cmUgdGhl
IGRlZmF1bHQgc3RhdGVzIGFyZSByZXNldC4KK3ZvaWQgRGlzcGxheTo6aW5pdGlhbGl6ZURldmlj
ZSgpCit7CisgICAgLy8gUGVybWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcworICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVFKTsKKyAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19MQVNUUElYRUwsIEZBTFNFKTsKKworICAgIGlmICht
RGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKSkKKyAg
ICB7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU0laRV9NQVgs
IChEV09SRCYpbURldmljZUNhcHMuTWF4UG9pbnRTaXplKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTSVpFX01BWCwg
MHgzRjgwMDAwMCk7ICAgLy8gMS4wZgorICAgIH0KKworICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxz
ZTsKK30KKworYm9vbCBEaXNwbGF5OjpyZXNldERldmljZSgpCit7CisgICAgRDNEUFJFU0VOVF9Q
QVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gZ2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJz
KCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRF9PSzsKKyAgICBib29sIGxvc3QgPSB0ZXN0
RGV2aWNlTG9zdCgpOworICAgIGludCBhdHRlbXB0cyA9IDM7ICAgIAorCisgICAgd2hpbGUgKGxv
c3QgJiYgYXR0ZW1wdHMgPiAwKQorICAgIHsKKyAgICAgICAgaWYgKG1EZXZpY2VFeCkKKyAgICAg
ICAgeworICAgICAgICAgICAgU2xlZXAoNTAwKTsgICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2
ZXIgc29tZSBDUFUgdGltZQorICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZUV4LT5SZXNldEV4
KCZwcmVzZW50UGFyYW1ldGVycywgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZl
bCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09IEQzREVSUl9E
RVZJQ0VMT1NUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNsZWVwKDEwMCk7ICAg
Ly8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJpdmVyIHNvbWUgQ1BVIHRpbWUKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VOT1RSRVNFVCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5SZXNldCgmcHJl
c2VudFBhcmFtZXRlcnMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbG9z
dCA9IHRlc3REZXZpY2VMb3N0KCk7CisgICAgICAgIGF0dGVtcHRzIC0tOworICAgIH0KKworICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiUmVzZXQvUmVzZXRFeCBm
YWlsZWQgbXVsdGlwbGUgdGltZXM6IDB4JTA4WCIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7CisgICAgfQorCisgICAgLy8gcmVzZXQgZGV2aWNl
IGRlZmF1bHRzCisgICAgaW5pdGlhbGl6ZURldmljZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0VHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZShIV05EIHdpbmRvdywg
RUdMQ29uZmlnIGNvbmZpZywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQoreworICAgIGNvbnN0
IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZyk7CisgICAgRUdM
aW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBFR0xfRkFMU0U7CisKKyAgICBpZiAoYXR0cmli
TGlzdCkKKyAgICB7CisgICAgICAgIHdoaWxlICgqYXR0cmliTGlzdCAhPSBFR0xfTk9ORSkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJMaXN0WzBdKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJfQlVGRkVSOgorICAgICAgICAgICAgICAg
IHN3aXRjaCAoYXR0cmliTGlzdFsxXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICBjYXNlIEVHTF9CQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIEVHTF9TSU5HTEVfQlVGRkVSOgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOyAgIC8vIFJl
bmRlcmluZyBkaXJlY3RseSB0byBmcm9udCBidWZmZXIgbm90IHN1cHBvcnRlZAorICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJf
U1VQUE9SVEVEX05WOgorICAgICAgICAgICAgICAgIHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBh
dHRyaWJMaXN0WzFdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEVHTF9WR19DT0xPUlNQQUNFOgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X01BVENILCBFR0xfTk9fU1VSRkFDRSk7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhB
X0ZPUk1BVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdM
X05PX1NVUkZBQ0UpOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBhdHRyaWJMaXN0ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoaGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKHdpbmRvdykpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKwor
ICAgIGlmICh0ZXN0RGV2aWNlTG9zdCgpKSAKKyAgICB7CisgICAgICAgIGlmICghcmVzdG9yZUxv
c3REZXZpY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICB9CisK
KyAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywgY29uZmlndXJhdGlvbiwg
d2luZG93LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKKworICAgIGlmICghc3VyZmFjZS0+aW5p
dGlhbGl6ZSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHN1cmZhY2U7CisgICAgICAgIHJldHVy
biBFR0xfTk9fU1VSRkFDRTsKKyAgICB9CisKKyAgICBtU3VyZmFjZVNldC5pbnNlcnQoc3VyZmFj
ZSk7CisKKyAgICByZXR1cm4gc3VjY2VzcyhzdXJmYWNlKTsKK30KKworRUdMU3VyZmFjZSBEaXNw
bGF5OjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVHTENvbmZpZyBjb25maWcsIEhBTkRMRSBzaGFy
ZUhhbmRsZSwgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQoreworICAgIEVHTGludCB3aWR0aCA9
IDAsIGhlaWdodCA9IDA7CisgICAgRUdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gRUdMX05PX1RFWFRV
UkU7CisgICAgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7CisgICAgY29u
c3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKKworICAg
IGlmIChhdHRyaWJMaXN0KQorICAgIHsKKyAgICAgICAgd2hpbGUgKCphdHRyaWJMaXN0ICE9IEVH
TF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYkxpc3RbMF0pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1dJRFRIOgorICAgICAgICAgICAg
ICAgIHdpZHRoID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgorICAgICAgICAgICAgICAgIGhlaWdodCA9IGF0dHJp
Ykxpc3RbMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdM
X0xBUkdFU1RfUEJVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAoYXR0cmliTGlzdFsxXSAhPSBF
R0xfRkFMU0UpCisgICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7IC8vIEZJWE1FCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfRk9S
TUFUOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliTGlzdFsxXSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEVHTF9OT19URVhUVVJFOgorICAgICAgICAg
ICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9SR0I6CisgICAgICAgICAgICAgICAgICBjYXNlIEVH
TF9URVhUVVJFX1JHQkE6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSBhdHRy
aWJMaXN0WzFdOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJ
QlVURSwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9UQVJHRVQ6CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChhdHRyaWJMaXN0WzFdKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgRUdMX05PX1RFWFRVUkU6CisgICAgICAgICAgICAgICAgICBjYXNl
IEVHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlVGFyZ2V0ID0gYXR0
cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRS
SUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01JUE1BUF9URVhUVVJFOgorICAgICAg
ICAgICAgICAgIGlmIChhdHRyaWJMaXN0WzFdICE9IEVHTF9GQUxTRSkKKyAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNF
OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VS
RkFDRSk7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOworICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBhdHRyaWJMaXN0ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAod2lkdGggPCAw
IHx8IGhlaWdodCA8IDApCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJB
TUVURVIsIEVHTF9OT19TVVJGQUNFKTsKKyAgICB9CisKKyAgICBpZiAod2lkdGggPT0gMCB8fCBo
ZWlnaHQgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVU
RSwgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKworICAgIGlmICh0ZXh0dXJlRm9ybWF0ICE9IEVH
TF9OT19URVhUVVJFICYmICFnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpICYmICghZ2w6Omlz
UG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKworICAgIGlm
ICgodGV4dHVyZUZvcm1hdCAhPSBFR0xfTk9fVEVYVFVSRSAmJiB0ZXh0dXJlVGFyZ2V0ID09IEVH
TF9OT19URVhUVVJFKSB8fAorICAgICAgICAodGV4dHVyZUZvcm1hdCA9PSBFR0xfTk9fVEVYVFVS
RSAmJiB0ZXh0dXJlVGFyZ2V0ICE9IEVHTF9OT19URVhUVVJFKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAg
aWYgKCEoY29uZmlndXJhdGlvbi0+bVN1cmZhY2VUeXBlICYgRUdMX1BCVUZGRVJfQklUKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7
CisgICAgfQorCisgICAgaWYgKCh0ZXh0dXJlRm9ybWF0ID09IEVHTF9URVhUVVJFX1JHQiAmJiBj
b25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQiAhPSBFR0xfVFJVRSkgfHwKKyAgICAgICAg
KHRleHR1cmVGb3JtYXQgPT0gRUdMX1RFWFRVUkVfUkdCQSAmJiBjb25maWd1cmF0aW9uLT5tQmlu
ZFRvVGV4dHVyZVJHQkEgIT0gRUdMX1RSVUUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgaWYgKHRl
c3REZXZpY2VMb3N0KCkpIAorICAgIHsKKyAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERldmljZSgp
KQorICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOworICAgIH0KKworICAgIFN1cmZh
Y2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlzLCBjb25maWd1cmF0aW9uLCBzaGFyZUhhbmRs
ZSwgd2lkdGgsIGhlaWdodCwgdGV4dHVyZUZvcm1hdCwgdGV4dHVyZVRhcmdldCk7CisKKyAgICBp
ZiAoIXN1cmZhY2UtPmluaXRpYWxpemUoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBzdXJmYWNl
OworICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgfQorCisgICAgbVN1cmZhY2VT
ZXQuaW5zZXJ0KHN1cmZhY2UpOworCisgICAgcmV0dXJuIHN1Y2Nlc3Moc3VyZmFjZSk7Cit9CisK
K0VHTENvbnRleHQgRGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxl
LCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9v
bCByb2J1c3RBY2Nlc3MpCit7CisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAgICAgICAgaWYg
KCFjcmVhdGVEZXZpY2UoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGVzdERldmljZUxvc3QoKSkgICAvLyBMb3N0
IGRldmljZQorICAgIHsKKyAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERldmljZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZp
ZyA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZ0hhbmRsZSk7CisKKyAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsQ3JlYXRlQ29udGV4dChjb25maWcsIHNoYXJlQ29udGV4dCwgbm90aWZ5UmVzZXRz
LCByb2J1c3RBY2Nlc3MpOworICAgIG1Db250ZXh0U2V0Lmluc2VydChjb250ZXh0KTsKKyAgICBt
RGV2aWNlTG9zdCA9IGZhbHNlOworCisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK2Jvb2wgRGlz
cGxheTo6cmVzdG9yZUxvc3REZXZpY2UoKQoreworICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0
b3IgY3R4ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY3R4ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBj
dHgrKykKKyAgICB7CisgICAgICAgIGlmICgoKmN0eCktPmlzUmVzZXROb3RpZmljYXRpb25FbmFi
bGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gSWYgcmVzZXQgbm90aWZpY2F0
aW9ucyBoYXZlIGJlZW4gcmVxdWVzdGVkLCBhcHBsaWNhdGlvbiBtdXN0IGRlbGV0ZSBhbGwgY29u
dGV4dHMgZmlyc3QKKyAgICB9CisgCisgICAgLy8gUmVsZWFzZSBzdXJmYWNlIHJlc291cmNlcyB0
byBtYWtlIHRoZSBSZXNldCgpIHN1Y2NlZWQKKyAgICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJhdG9y
IHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0LmVu
ZCgpOyBzdXJmYWNlKyspCisgICAgeworICAgICAgICAoKnN1cmZhY2UpLT5yZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgd2hpbGUgKCFtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKKyAgICB7CisgICAg
ICAgIG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJlbGVhc2UoKTsKKyAgICAgICAgbUV2ZW50UXVl
cnlQb29sLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgbVZlcnRleFNoYWRlckNhY2hlLmNsZWFy
KCk7CisgICAgbVBpeGVsU2hhZGVyQ2FjaGUuY2xlYXIoKTsKKworICAgIGlmICghcmVzZXREZXZp
Y2UoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXN0
b3JlIGFueSBzdXJmYWNlcyB0aGF0IG1heSBoYXZlIGJlZW4gbG9zdAorICAgIGZvciAoU3VyZmFj
ZVNldDo6aXRlcmF0b3Igc3VyZmFjZSA9IG1TdXJmYWNlU2V0LmJlZ2luKCk7IHN1cmZhY2UgIT0g
bVN1cmZhY2VTZXQuZW5kKCk7IHN1cmZhY2UrKykKKyAgICB7CisgICAgICAgICgqc3VyZmFjZSkt
PnJlc2V0U3dhcENoYWluKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKwordm9p
ZCBEaXNwbGF5OjpkZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAg
ZGVsZXRlIHN1cmZhY2U7CisgICAgbVN1cmZhY2VTZXQuZXJhc2Uoc3VyZmFjZSk7Cit9CisKK3Zv
aWQgRGlzcGxheTo6ZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAg
Z2xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKKyAgICBtQ29udGV4dFNldC5lcmFzZShjb250ZXh0
KTsKK30KKwordm9pZCBEaXNwbGF5Ojpub3RpZnlEZXZpY2VMb3N0KCkKK3sKKyAgICBmb3IgKENv
bnRleHRTZXQ6Oml0ZXJhdG9yIGNvbnRleHQgPSBtQ29udGV4dFNldC5iZWdpbigpOyBjb250ZXh0
ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjb250ZXh0KyspCisgICAgeworICAgICAgICAoKmNvbnRl
eHQpLT5tYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CisgICAgbURldmljZUxvc3QgPSB0cnVlOwor
ICAgIGVycm9yKEVHTF9DT05URVhUX0xPU1QpOworfQorCitib29sIERpc3BsYXk6OmlzRGV2aWNl
TG9zdCgpCit7CisgICAgcmV0dXJuIG1EZXZpY2VMb3N0OworfQorCitib29sIERpc3BsYXk6Omlz
SW5pdGlhbGl6ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtRDNkOSAhPSBOVUxMICYmIG1Db25m
aWdTZXQuc2l6ZSgpID4gMDsKK30KKworYm9vbCBEaXNwbGF5Ojppc1ZhbGlkQ29uZmlnKEVHTENv
bmZpZyBjb25maWcpCit7CisgICAgcmV0dXJuIG1Db25maWdTZXQuZ2V0KGNvbmZpZykgIT0gTlVM
TDsKK30KKworYm9vbCBEaXNwbGF5Ojppc1ZhbGlkQ29udGV4dChnbDo6Q29udGV4dCAqY29udGV4
dCkKK3sKKyAgICByZXR1cm4gbUNvbnRleHRTZXQuZmluZChjb250ZXh0KSAhPSBtQ29udGV4dFNl
dC5lbmQoKTsKK30KKworYm9vbCBEaXNwbGF5Ojppc1ZhbGlkU3VyZmFjZShlZ2w6OlN1cmZhY2Ug
KnN1cmZhY2UpCit7CisgICAgcmV0dXJuIG1TdXJmYWNlU2V0LmZpbmQoc3VyZmFjZSkgIT0gbVN1
cmZhY2VTZXQuZW5kKCk7Cit9CisKK2Jvb2wgRGlzcGxheTo6aGFzRXhpc3RpbmdXaW5kb3dTdXJm
YWNlKEhXTkQgd2luZG93KQoreworICAgIGZvciAoU3VyZmFjZVNldDo6aXRlcmF0b3Igc3VyZmFj
ZSA9IG1TdXJmYWNlU2V0LmJlZ2luKCk7IHN1cmZhY2UgIT0gbVN1cmZhY2VTZXQuZW5kKCk7IHN1
cmZhY2UrKykKKyAgICB7CisgICAgICAgIGlmICgoKnN1cmZhY2UpLT5nZXRXaW5kb3dIYW5kbGUo
KSA9PSB3aW5kb3cpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitFR0xpbnQgRGlzcGxheTo6Z2V0
TWluU3dhcEludGVydmFsKCkKK3sKKyAgICByZXR1cm4gbU1pblN3YXBJbnRlcnZhbDsKK30KKwor
RUdMaW50IERpc3BsYXk6OmdldE1heFN3YXBJbnRlcnZhbCgpCit7CisgICAgcmV0dXJuIG1NYXhT
d2FwSW50ZXJ2YWw7Cit9CisKK0lEaXJlY3QzRERldmljZTkgKkRpc3BsYXk6OmdldERldmljZSgp
Cit7CisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAgICAgICAgaWYgKCFjcmVhdGVEZXZpY2Uo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gbURldmljZTsKK30KKworRDNEQ0FQUzkgRGlzcGxheTo6Z2V0RGV2aWNl
Q2FwcygpCit7CisgICAgcmV0dXJuIG1EZXZpY2VDYXBzOworfQorCitEM0RBREFQVEVSX0lERU5U
SUZJRVI5ICpEaXNwbGF5OjpnZXRBZGFwdGVySWRlbnRpZmllcigpCit7CisgICAgcmV0dXJuICZt
QWRhcHRlcklkZW50aWZpZXI7Cit9CisKK2Jvb2wgRGlzcGxheTo6dGVzdERldmljZUxvc3QoKQor
eworICAgIGJvb2wgaXNMb3N0ID0gZmFsc2U7CisKKyAgICBpZiAobURldmljZUV4KQorICAgIHsK
KyAgICAgICAgaXNMb3N0ID0gRkFJTEVEKG1EZXZpY2VFeC0+Q2hlY2tEZXZpY2VTdGF0ZShOVUxM
KSk7CisgICAgfQorICAgIGVsc2UgaWYgKG1EZXZpY2UpCisgICAgeworICAgICAgICBpc0xvc3Qg
PSBGQUlMRUQobURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIGlzTG9zdDsKK30KKworYm9vbCBEaXNwbGF5Ojp0ZXN0RGV2aWNlUmVzZXR0YWJsZSgp
Cit7CisgICAgSFJFU1VMVCBzdGF0dXMgPSBEM0RfT0s7CisKKyAgICBpZiAobURldmljZUV4KQor
ICAgIHsKKyAgICAgICAgc3RhdHVzID0gbURldmljZUV4LT5DaGVja0RldmljZVN0YXRlKE5VTEwp
OworICAgIH0KKyAgICBlbHNlIGlmIChtRGV2aWNlKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0g
bURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHN0
YXR1cykKKyAgICB7CisgICAgICBjYXNlIEQzREVSUl9ERVZJQ0VOT1RSRVNFVDoKKyAgICAgIGNh
c2UgRDNERVJSX0RFVklDRUhVTkc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBEaXNwbGF5OjpzeW5j
KGJvb2wgYmxvY2spCit7CisgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICBJRGlyZWN0M0RRdWVy
eTkqIHF1ZXJ5ID0gYWxsb2NhdGVFdmVudFF1ZXJ5KCk7CisgICAgaWYgKCFxdWVyeSkKKyAgICB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXN1bHQgPSBxdWVyeS0+SXNzdWUoRDNE
SVNTVUVfRU5EKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgZG8KKyAg
ICB7CisgICAgICAgIHJlc3VsdCA9IHF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFf
RkxVU0gpOworCisgICAgICAgIGlmKGJsb2NrICYmIHJlc3VsdCA9PSBTX0ZBTFNFKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBLZWVwIHBvbGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0aHJlYWRz
IHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgZmlyc3QKKyAgICAgICAgICAgIFNsZWVwKDApOworICAg
ICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVjayBmb3IgZGV2aWNlIGxvc3MKKyAgICAgICAgICAg
IC8vIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJldHVybiBTX0ZBTFNFIGV2ZW4gaWYgdGhlIGRldmlj
ZSBpcyBsb3N0CisgICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIEQzREVSUl9ERVZJQ0VMT1NUIGxp
a2UgdGhleSBzaG91bGQKKyAgICAgICAgICAgIGlmICh0ZXN0RGV2aWNlTG9zdCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEQzREVSUl9ERVZJQ0VMT1NUOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHdoaWxlKGJsb2NrICYmIHJlc3VsdCA9
PSBTX0ZBTFNFKTsKKworICAgIGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKKworICAgIGlmIChpc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgIHsKKyAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgp
OworICAgIH0KK30KKworSURpcmVjdDNEUXVlcnk5KiBEaXNwbGF5OjphbGxvY2F0ZUV2ZW50UXVl
cnkoKQoreworICAgIElEaXJlY3QzRFF1ZXJ5OSAqcXVlcnkgPSBOVUxMOworCisgICAgaWYgKG1F
dmVudFF1ZXJ5UG9vbC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfRVZFTlQsICZxdWVyeSk7CisgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHF1ZXJ5ID0gbUV2ZW50UXVlcnlQb29sLmJhY2soKTsKKyAgICAgICAgbUV2ZW50UXVlcnlQ
b29sLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgcmV0dXJuIHF1ZXJ5OworfQorCit2b2lkIERp
c3BsYXk6OmZyZWVFdmVudFF1ZXJ5KElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkpCit7CisgICAgaWYg
KG1FdmVudFF1ZXJ5UG9vbC5zaXplKCkgPiAxMDAwKQorICAgIHsKKyAgICAgICAgcXVlcnktPlJl
bGVhc2UoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUV2ZW50UXVlcnlQb29s
LnB1c2hfYmFjayhxdWVyeSk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXk6OmdldE11bHRpU2Ft
cGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQorewor
ICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQz
RE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1B
ZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQ
RSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKKworICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211
bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VFREVEKHJlc3VsdCk7CisgICAgfQorfQorCitib29sIERp
c3BsYXk6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGlzcGxheU1v
ZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUMSkpOworfQorCitib29s
IERpc3BsYXk6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIFNVQ0NFRURF
RChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGlzcGxh
eU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUMykpOworfQorCiti
b29sIERpc3BsYXk6OmdldERYVDVUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGlz
cGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUNSkpOworfQor
CisvLyB3ZSB1c2UgSU5UWiBmb3IgZGVwdGggdGV4dHVyZXMgaW4gRGlyZWN0M0Q5CisvLyB3ZSBh
bHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBk
ZXB0aC1vbmx5IEZCT3MKKy8vIHNlZSBodHRwOi8vYXJhcy1wLmluZm8vdGV4dHMvRDNEOUdQVUhh
Y2tzLmh0bWwKK2Jvb2wgRGlzcGxheTo6Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7
CisgICAgYm9vbCBpbnR6ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRh
cHRlciwgbURldmljZVR5cGUsIG1EaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9ERVBUSFNURU5DSUws
IEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9JTlRaKSk7CisgICAgYm9vbCBudWxsID0gU1VDQ0VF
REVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIG1EaXNw
bGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIEQzREZN
VF9OVUxMKSk7CisKKyAgICByZXR1cm4gaW50eiAmJiBudWxsOworfQorCitib29sIERpc3BsYXk6
OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFi
bGUpCit7CisgICAgKmZpbHRlcmluZyA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3Jt
YXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9R
VUVSWV9GSUxURVIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkgJiYKKyAg
ICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRl
ciwgbURldmljZVR5cGUsIG1EaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRF
UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKKyAgICAKKyAgICAq
cmVuZGVyYWJsZSA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBtRGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkmJgorICAgICAgICAgICAgICAg
ICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIG1EaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VC
RVRFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7CisKKyAgICBpZiAoISpmaWx0ZXJpbmcg
JiYgISpyZW5kZXJhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+
Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGlzcGxheU1vZGUuRm9y
bWF0LCAwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAgICAgICAg
ICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIG1EaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMy
QjMyRzMyUjMyRikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9Cit9CisKK2Jvb2wgRGlzcGxheTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJv
b2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK3sKKyAgICAqZmlsdGVyaW5nID0gU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIG1E
aXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwg
RDNERk1UX0ExNkIxNkcxNlIxNkYpKSAmJgorICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURpc3BsYXlNb2Rl
LkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRf
QTE2QjE2RzE2UjE2RikpOworICAgIAorICAgICpyZW5kZXJhYmxlID0gU1VDQ0VFREVEKG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIG1EaXNwbGF5TW9kZS5G
b3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0ExNkIx
NkcxNlIxNkYpKSAmJgorICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURpc3BsYXlNb2RlLkZvcm1hdCwgRDNE
VVNBR0VfUkVOREVSVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2
RikpOworCisgICAgaWYgKCEqZmlsdGVyaW5nICYmICEqcmVuZGVyYWJsZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgbURpc3BsYXlNb2RlLkZvcm1hdCwgMCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9B
MTZCMTZHMTZSMTZGKSkgJiYKKyAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGlzcGxheU1vZGUuRm9ybWF0LCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RS
VFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29sIERpc3BsYXk6
OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIG1EaXNwbGF5TW9k
ZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9MOCkpOworfQorCitib29sIERp
c3BsYXk6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
bURpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0E4TDgpKTsK
K30KKworZmxvYXQgRGlzcGxheTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICAvLyBNdXN0IHN1cHBvcnQgYSBtaW5pbXVtIG9mIDI6MSBhbmlzb3Ryb3B5
IGZvciBtYXggYW5pc290cm9weSB0byBiZSBjb25zaWRlcmVkIHN1cHBvcnRlZCwgcGVyIHRoZSBz
cGVjCisgICAgaWYgKChtRGV2aWNlQ2Fwcy5SYXN0ZXJDYXBzICYgRDNEUFJBU1RFUkNBUFNfQU5J
U09UUk9QWSkgJiYgKG1EZXZpY2VDYXBzLk1heEFuaXNvdHJvcHkgPj0gMikpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1EZXZpY2VDYXBzLk1heEFuaXNvdHJvcHkp
OworICAgIH0KKyAgICByZXR1cm4gMS4wZjsKK30KKworRDNEUE9PTCBEaXNwbGF5OjpnZXRCdWZm
ZXJQb29sKERXT1JEIHVzYWdlKSBjb25zdAoreworICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCisg
ICAgeworICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBpZiAoISh1c2FnZSAmIEQzRFVTQUdFX0RZTkFNSUMpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gRDNEUE9PTF9NQU5BR0VEOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKK30KKworRDNEUE9PTCBEaXNwbGF5OjpnZXRU
ZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3QKK3sKKyAgICBpZiAobUQzZDlFeCAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwg
RDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBE
M0RQT09MX01BTkFHRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRDNEUE9PTF9E
RUZBVUxUOworfQorCitib29sIERpc3BsYXk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkKK3sKKyAg
ICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0gYWxsb2NhdGVFdmVudFF1ZXJ5KCk7CisgICAgaWYg
KHF1ZXJ5KQorICAgIHsKKyAgICAgICAgZnJlZUV2ZW50UXVlcnkocXVlcnkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworRDNEUFJFU0VOVF9QQVJBTUVURVJTIERpc3BsYXk6OmdldERlZmF1bHRQ
cmVzZW50UGFyYW1ldGVycygpCit7CisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQ
YXJhbWV0ZXJzID0gezB9OworCisgICAgLy8gVGhlIGRlZmF1bHQgc3dhcCBjaGFpbiBpcyBuZXZl
ciBhY3R1YWxseSB1c2VkLiBTdXJmYWNlIHdpbGwgY3JlYXRlIGEgbmV3IHN3YXAgY2hhaW4gd2l0
aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMuCisgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRo
U3RlbmNpbEZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJh
Y2tCdWZmZXJDb3VudCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1h
dCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0
aCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDE7CisgICAg
cHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOworICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNl
V2luZG93ID0gbURldmljZVdpbmRvdzsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBs
ZVF1YWxpdHkgPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQz
RE1VTFRJU0FNUExFX05PTkU7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50
ZXJ2YWwgPSBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7CisgICAgcHJlc2VudFBhcmFtZXRl
cnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICBwcmVzZW50UGFyYW1l
dGVycy5XaW5kb3dlZCA9IFRSVUU7CisKKyAgICByZXR1cm4gcHJlc2VudFBhcmFtZXRlcnM7Cit9
CisKK3ZvaWQgRGlzcGxheTo6aW5pdEV4dGVuc2lvblN0cmluZygpCit7CisgICAgSE1PRFVMRSBz
d2lmdFNoYWRlciA9IEdldE1vZHVsZUhhbmRsZShURVhUKCJzd2lmdHNoYWRlcl9kM2Q5LmRsbCIp
KTsKKworICAgIG1FeHRlbnNpb25TdHJpbmcgPSAiIjsKKworICAgIC8vIE11bHRpLXZlbmRvciAo
RVhUKSBleHRlbnNpb25zCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0VYVF9jcmVhdGVf
Y29udGV4dF9yb2J1c3RuZXNzICI7CisKKyAgICAvLyBBTkdMRS1zcGVjaWZpYyBleHRlbnNpb25z
CisgICAgaWYgKHNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpCisgICAgeworICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJFR0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRfYnVmZmVyICI7
CisgICAgfQorCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3F1ZXJ5X3N1cmZh
Y2VfcG9pbnRlciAiOworCisgICAgaWYgKHN3aWZ0U2hhZGVyKQorICAgIHsKKyAgICAgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3NvZnR3YXJlX2Rpc3BsYXkgIjsKKyAgICB9CisK
KyAgICBpZiAoc2hhcmVIYW5kbGVTdXBwb3J0ZWQoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkVHTF9BTkdMRV9zdXJmYWNlX2QzZF90ZXh0dXJlXzJkX3NoYXJlX2hhbmRs
ZSAiOworICAgIH0KKworICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9OVl9wb3N0X3N1Yl9i
dWZmZXIiOworCisgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3Ry
aW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKKyAgICBpZiAoZW5kICE9IHN0ZDo6c3RyaW5nOjpu
cG9zKQorICAgIHsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEpOworICAg
IH0KK30KKworY29uc3QgY2hhciAqRGlzcGxheTo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOworfQorCit2b2lkIERpc3Bs
YXk6OmluaXRWZW5kb3JTdHJpbmcoKQoreworICAgIG1WZW5kb3JTdHJpbmcgPSAiR29vZ2xlIElu
Yy4iOworCisgICAgaWYgKG1EM2Q5RXgpCisgICAgeworICAgICAgICBMVUlEIGFkYXB0ZXJMdWlk
ID0gezB9OworICAgICAgICBtRDNkOUV4LT5HZXRBZGFwdGVyTFVJRChtQWRhcHRlciwgJmFkYXB0
ZXJMdWlkKTsKKworICAgICAgICBjaGFyIGFkYXB0ZXJMdWlkU3RyaW5nWzY0XTsKKyAgICAgICAg
c3ByaW50Zl9zKGFkYXB0ZXJMdWlkU3RyaW5nLCBzaXplb2YoYWRhcHRlckx1aWRTdHJpbmcpLCAi
IChhZGFwdGVyIExVSUQ6ICUwOHglMDh4KSIsIGFkYXB0ZXJMdWlkLkhpZ2hQYXJ0LCBhZGFwdGVy
THVpZC5Mb3dQYXJ0KTsKKworICAgICAgICBtVmVuZG9yU3RyaW5nICs9IGFkYXB0ZXJMdWlkU3Ry
aW5nOworICAgIH0KK30KKworY29uc3QgY2hhciAqRGlzcGxheTo6Z2V0VmVuZG9yU3RyaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVZlbmRvclN0cmluZy5jX3N0cigpOworfQorCitib29sIERp
c3BsYXk6OnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkgY29uc3QgCit7CisgICAgLy8gUElYIGRvZXNu
J3Qgc2VlbSB0byBzdXBwb3J0IHVzaW5nIHNoYXJlIGhhbmRsZXMsIHNvIGRpc2FibGUgdGhlbS4K
KyAgICByZXR1cm4gaXNEM2Q5RXhEZXZpY2UoKSAmJiAhZ2w6OnBlcmZBY3RpdmUoKTsKK30KKwor
SURpcmVjdDNEVmVydGV4U2hhZGVyOSAqRGlzcGxheTo6Y3JlYXRlVmVydGV4U2hhZGVyKGNvbnN0
IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbVZlcnRleFNo
YWRlckNhY2hlLmNyZWF0ZShmdW5jdGlvbiwgbGVuZ3RoKTsKK30KKworSFJFU1VMVCBEaXNwbGF5
Ojpjb21waWxlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIGhsc2wsIGNvbnN0IGNoYXIqIHNvdXJj
ZU5hbWUsIGNvbnN0IGNoYXIqIHByb2ZpbGUsIERXT1JEIGZsYWdzLCBJRDNEQmxvYioqIGJpbmFy
eSwgSUQzREJsb2IqKiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIG1EM0RDb21waWxlRnVu
YyhobHNsLCBzdHJsZW4oaGxzbCksIHNvdXJjZU5hbWUsIE5VTEwsIE5VTEwsICJtYWluIiwgcHJv
ZmlsZSwgZmxhZ3MsIDAsIGJpbmFyeSwgZXJyb3JNZXNzYWdlKTsKK30KKworSURpcmVjdDNEUGl4
ZWxTaGFkZXI5ICpEaXNwbGF5OjpjcmVhdGVQaXhlbFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rp
b24sIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIG1QaXhlbFNoYWRlckNhY2hlLmNyZWF0
ZShmdW5jdGlvbiwgbGVuZ3RoKTsKK30KKworLy8gT25seSBEaXJlY3QzRCAxMCByZWFkeSBkZXZp
Y2VzIHN1cHBvcnQgYWxsIHRoZSBuZWNlc3NhcnkgdmVydGV4IHRleHR1cmUgZm9ybWF0cy4KKy8v
IFdlIHRlc3QgdGhpcyB1c2luZyBEM0Q5IGJ5IGNoZWNraW5nIHN1cHBvcnQgZm9yIHRoZSBSMTZG
IGZvcm1hdC4KK2Jvb2wgRGlzcGxheTo6Z2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25zdAor
eworICAgIGlmICghaXNJbml0aWFsaXplZCgpIHx8IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVy
c2lvbiA8IEQzRFBTX1ZFUlNJT04oMywgMCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVS
WV9WRVJURVhURVhUVVJFLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfUjE2Rik7CisKKyAgICBy
ZXR1cm4gU1VDQ0VFREVEKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGlzcGxheTo6Z2V0Tm9uUG93ZXIy
VGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJU
ZXh0dXJlczsKK30KKworYm9vbCBEaXNwbGF5OjpnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBj
b25zdAoreworICAgIGlmICghaXNJbml0aWFsaXplZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIElEaXJlY3QzRFF1ZXJ5OSAqcXVlcnkgPSBOVUxMOworICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xV
U0lPTiwgJnF1ZXJ5KTsKKyAgICAKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgcXVlcnkp
CisgICAgeworICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBEaXNwbGF5OjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDAp
OyAKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9EaXNwbGF5LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQoj
IyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxODcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIERpc3Bs
YXkuaDogRGVmaW5lcyB0aGUgZWdsOjpEaXNwbGF5IGNsYXNzLCByZXByZXNlbnRpbmcgdGhlIGFi
c3RyYWN0CisvLyBkaXNwbGF5IG9uIHdoaWNoIGdyYXBoaWNzIGFyZSBkcmF3bi4gSW1wbGVtZW50
cyBFR0xEaXNwbGF5LgorLy8gW0VHTCAxLjRdIHNlY3Rpb24gMi4xLjIgcGFnZSAzLgorCisjaWZu
ZGVmIExJQkVHTF9ESVNQTEFZX0hfCisjZGVmaW5lIExJQkVHTF9ESVNQTEFZX0hfCisKKyNpbmNs
dWRlICJjb21tb24vc3lzdGVtLmgiCisjaW5jbHVkZSA8ZDNkOS5oPgorI2luY2x1ZGUgPEQzRGNv
bXBpbGVyLmg+CisKKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworI2luY2x1ZGUgImxpYkVHTC9Db25maWcuaCIKKyNp
bmNsdWRlICJsaWJFR0wvU2hhZGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5o
IgorCitjb25zdCBpbnQgdmVyc2lvbldpbmRvd3NWaXN0YSA9IE1BS0VXT1JEKDB4MDAsIDB4MDYp
OworY29uc3QgaW50IHZlcnNpb25XaW5kb3dzNyA9IE1BS0VXT1JEKDB4MDEsIDB4MDYpOworCisv
LyBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaW4gYSBmb3JtYXQg
c3VpdGFibGUgZm9yIG9yZGVyaW5nCisvLyBjb21wYXJpc29uLgoraW5saW5lIGludCBnZXRDb21w
YXJhYmxlT1NWZXJzaW9uKCkKK3sKKyAgICBEV09SRCB2ZXJzaW9uID0gR2V0VmVyc2lvbigpOwor
ICAgIGludCBtYWpvclZlcnNpb24gPSBMT0JZVEUoTE9XT1JEKHZlcnNpb24pKTsKKyAgICBpbnQg
bWlub3JWZXJzaW9uID0gSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7CisgICAgcmV0dXJuIE1BS0VX
T1JEKG1pbm9yVmVyc2lvbiwgbWFqb3JWZXJzaW9uKTsKK30KKworbmFtZXNwYWNlIGVnbAorewor
Y2xhc3MgRGlzcGxheQoreworICBwdWJsaWM6CisgICAgfkRpc3BsYXkoKTsKKworICAgIGJvb2wg
aW5pdGlhbGl6ZSgpOworICAgIHZvaWQgdGVybWluYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c3RhcnRTY2VuZSgpOworICAgIHZpcnR1YWwgdm9pZCBlbmRTY2VuZSgpOworCisgICAgc3RhdGlj
IGVnbDo6RGlzcGxheSAqZ2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5SWQp
OworCisgICAgYm9vbCBnZXRDb25maWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50
ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpOworICAg
IGJvb2wgZ2V0Q29uZmlnQXR0cmliKEVHTENvbmZpZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUs
IEVHTGludCAqdmFsdWUpOworCisgICAgRUdMU3VyZmFjZSBjcmVhdGVXaW5kb3dTdXJmYWNlKEhX
TkQgd2luZG93LCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwor
ICAgIEVHTFN1cmZhY2UgY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29uZmlnLCBI
QU5ETEUgc2hhcmVIYW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7CisgICAgRUdMQ29u
dGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250
ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7
CisKKyAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CisgICAg
dm9pZCBkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CisKKyAgICBib29sIGlz
SW5pdGlhbGl6ZWQoKSBjb25zdDsKKyAgICBib29sIGlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNv
bmZpZyk7CisgICAgYm9vbCBpc1ZhbGlkQ29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7Cisg
ICAgYm9vbCBpc1ZhbGlkU3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworICAgIGJvb2wg
aGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93KTsKKworICAgIEVHTGludCBnZXRN
aW5Td2FwSW50ZXJ2YWwoKTsKKyAgICBFR0xpbnQgZ2V0TWF4U3dhcEludGVydmFsKCk7CisKKyAg
ICB2aXJ0dWFsIElEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpOworICAgIHZpcnR1YWwgRDNE
Q0FQUzkgZ2V0RGV2aWNlQ2FwcygpOworICAgIHZpcnR1YWwgRDNEQURBUFRFUl9JREVOVElGSUVS
OSAqZ2V0QWRhcHRlcklkZW50aWZpZXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZUxv
c3QoKTsKKyAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZVJlc2V0dGFibGUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3luYyhib29sIGJsb2NrKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFF1ZXJ5OSog
YWxsb2NhdGVFdmVudFF1ZXJ5KCk7CisgICAgdmlydHVhbCB2b2lkIGZyZWVFdmVudFF1ZXJ5KElE
aXJlY3QzRFF1ZXJ5OSogcXVlcnkpOworICAgIHZpcnR1YWwgdm9pZCBnZXRNdWx0aVNhbXBsZVN1
cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSk7CisgICAgdmly
dHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQzVGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBw
b3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCk7CisgICAgdmly
dHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wg
KnJlbmRlcmFibGUpOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQo
Ym9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNl
QWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXRWZXJ0ZXhUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgZmxvYXQgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBEM0RQT09MIGdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0OworICAg
IHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOworICAgIGJvb2wgaXNEZXZpY2VMb3N0
KCk7CisKKyAgICBib29sIGlzRDNkOUV4RGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbUQzZDlFeCAh
PSBOVUxMOyB9CisgICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7Cisg
ICAgY29uc3QgY2hhciAqZ2V0VmVuZG9yU3RyaW5nKCkgY29uc3Q7CisgICAgYm9vbCBzaGFyZUhh
bmRsZVN1cHBvcnRlZCgpIGNvbnN0OworCisgICAgdmlydHVhbCBJRGlyZWN0M0RWZXJ0ZXhTaGFk
ZXI5ICpjcmVhdGVWZXJ0ZXhTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFk
ZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoKTsKKworICAgIHZpcnR1YWwg
SFJFU1VMVCBjb21waWxlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIGhsc2wsIGNvbnN0IGNoYXIq
IHNvdXJjZU5hbWUsIGNvbnN0IGNoYXIqIHByb2ZpbGUsIERXT1JEIGZsYWdzLCBJRDNEQmxvYioq
IGJpbmFyeSwgSUQzREJsb2IqKiBlcnJvck1lc3NhZ2UpOworCisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKERpc3BsYXkpOworCisgICAgRGlzcGxheShFR0xOYXRpdmVE
aXNwbGF5VHlwZSBkaXNwbGF5SWQsIEhEQyBkZXZpY2VDb250ZXh0LCBib29sIHNvZnR3YXJlKTsK
KworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMo
KTsKKworICAgIGJvb2wgcmVzdG9yZUxvc3REZXZpY2UoKTsKKworICAgIEVHTE5hdGl2ZURpc3Bs
YXlUeXBlIG1EaXNwbGF5SWQ7CisgICAgY29uc3QgSERDIG1EYzsKKworICAgIEhNT0RVTEUgbUQz
ZDlNb2R1bGU7CisgICAgCisgICAgVUlOVCBtQWRhcHRlcjsKKyAgICBEM0RERVZUWVBFIG1EZXZp
Y2VUeXBlOworICAgIEQzRERJU1BMQVlNT0RFIG1EaXNwbGF5TW9kZTsKKyAgICBJRGlyZWN0M0Q5
ICptRDNkOTsgIC8vIEFsd2F5cyB2YWxpZCBhZnRlciBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9u
LgorICAgIElEaXJlY3QzRDlFeCAqbUQzZDlFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4
IGlzIG5vdCBzdXBwb3J0ZWQuCisgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKKyAgICBJ
RGlyZWN0M0REZXZpY2U5RXggKm1EZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4
IGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAvLyBBIHBvb2wgb2YgZXZlbnQgcXVlcmllcyB0aGF0
IGFyZSBjdXJyZW50bHkgdW51c2VkLgorICAgIHN0ZDo6dmVjdG9yPElEaXJlY3QzRFF1ZXJ5OSo+
IG1FdmVudFF1ZXJ5UG9vbDsKKworICAgIFZlcnRleFNoYWRlckNhY2hlIG1WZXJ0ZXhTaGFkZXJD
YWNoZTsKKyAgICBQaXhlbFNoYWRlckNhY2hlIG1QaXhlbFNoYWRlckNhY2hlOworCisgICAgRDNE
Q0FQUzkgbURldmljZUNhcHM7CisgICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSBtQWRhcHRlcklk
ZW50aWZpZXI7CisgICAgSFdORCBtRGV2aWNlV2luZG93OworCisgICAgYm9vbCBtU2NlbmVTdGFy
dGVkOworICAgIEVHTGludCBtTWF4U3dhcEludGVydmFsOworICAgIEVHTGludCBtTWluU3dhcElu
dGVydmFsOworICAgIGJvb2wgbVNvZnR3YXJlRGV2aWNlOworICAgIGJvb2wgbVN1cHBvcnRzTm9u
UG93ZXIyVGV4dHVyZXM7CisgICAgCisgICAgdHlwZWRlZiBzdGQ6OnNldDxTdXJmYWNlKj4gU3Vy
ZmFjZVNldDsKKyAgICBTdXJmYWNlU2V0IG1TdXJmYWNlU2V0OworCisgICAgQ29uZmlnU2V0IG1D
b25maWdTZXQ7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PGdsOjpDb250ZXh0Kj4gQ29udGV4dFNl
dDsKKyAgICBDb250ZXh0U2V0IG1Db250ZXh0U2V0OworICAgIGJvb2wgbURldmljZUxvc3Q7CisK
KyAgICBib29sIGNyZWF0ZURldmljZSgpOworICAgIHZvaWQgaW5pdGlhbGl6ZURldmljZSgpOwor
ICAgIGJvb2wgcmVzZXREZXZpY2UoKTsKKworICAgIHZvaWQgaW5pdEV4dGVuc2lvblN0cmluZygp
OworICAgIHN0ZDo6c3RyaW5nIG1FeHRlbnNpb25TdHJpbmc7CisKKyAgICB2b2lkIGluaXRWZW5k
b3JTdHJpbmcoKTsKKyAgICBzdGQ6OnN0cmluZyBtVmVuZG9yU3RyaW5nOworCisgICAgdHlwZWRl
ZiBIUkVTVUxUIChXSU5BUEkgKkQzRENvbXBpbGVGdW5jKShMUENWT0lEIHBTcmNEYXRhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRV9UIFNyY0RhdGFT
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RS
IHBTb3VyY2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09OU1QgRDNEX1NIQURFUl9NQUNSTyogcERlZmluZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJRDNESW5jbHVkZSogcEluY2x1ZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENTVFIgcEVudHJ5cG9pbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENTVFIgcFRh
cmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQg
RmxhZ3MxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlO
VCBGbGFnczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
RDNEQmxvYioqIHBwQ29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIElEM0RCbG9iKiogcHBFcnJvck1zZ3MpOworCisgICAgSE1PRFVMRSBtRDNkQ29tcGls
ZXJNb2R1bGU7CisgICAgRDNEQ29tcGlsZUZ1bmMgbUQzRENvbXBpbGVGdW5jOworfTsKK30KKwor
I2VuZGlmICAgLy8gTElCRUdMX0RJU1BMQVlfSF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9SRUFETUUK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9SRUFETUUJ
KHJldmlzaW9uIDE1MjgyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
UkVBRE1FCSh3b3JraW5nIGNvcHkpCkBAIC0xICswLDAgQEAKLVRoaXMgZGlyZWN0b3J5J3MgY29u
dGVudHMgYXJlIG5vdCBzeW5jZWQgZnJvbSB0aGUgQU5HTEUgcHJvamVjdCBiZWNhdXNlIG5vIHBs
YXRmb3JtIGluIFdlYktpdCBuZWVkcyB0aGVtIHlldC4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvU2hhZGVyQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1NoYWRlckNhY2hlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1NoYWRlckNhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBEaXNwbGF5Lmg6IERl
ZmluZXMgZWdsOjpTaGFkZXJDYWNoZSwgYSBjYWNoZSBvZiBEaXJlY3QzRCBzaGFkZXIgb2JqZWN0
cworLy8ga2V5ZWQgYnkgdGhlaXIgYnl0ZSBjb2RlLgorCisjaWZuZGVmIExJQkVHTF9TSEFERVJf
Q0FDSEVfSF8KKyNkZWZpbmUgTElCRUdMX1NIQURFUl9DQUNIRV9IXworCisjaW5jbHVkZSA8ZDNk
OS5oPgorCisjaWZkZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxoYXNoX21hcD4KKyNlbHNlCisjaW5j
bHVkZSA8dW5vcmRlcmVkX21hcD4KKyNlbmRpZgorCituYW1lc3BhY2UgZWdsCit7Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgU2hhZGVyT2JqZWN0PgorY2xhc3MgU2hhZGVyQ2FjaGUKK3sKKyAgcHVibGlj
OgorICAgIFNoYWRlckNhY2hlKCkgOiBtRGV2aWNlKE5VTEwpCisgICAgeworICAgIH0KKworICAg
IH5TaGFkZXJDYWNoZSgpCisgICAgeworICAgICAgICAvLyBDYWxsIGNsZWFyIHdoaWxlIHRoZSBk
ZXZpY2UgaXMgc3RpbGwgdmFsaWQuCisgICAgICAgIEFTU0VSVChtTWFwLmVtcHR5KCkpOworICAg
IH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZShJRGlyZWN0M0REZXZpY2U5KiBkZXZpY2UpCisgICAg
eworICAgICAgICBtRGV2aWNlID0gZGV2aWNlOworICAgIH0KKworICAgIFNoYWRlck9iamVjdCAq
Y3JlYXRlKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCkKKyAgICB7CisgICAg
ICAgIHN0ZDo6c3RyaW5nIGtleShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihmdW5jdGlv
biksIGxlbmd0aCk7CisgICAgICAgIHR5cGVuYW1lIE1hcDo6aXRlcmF0b3IgaXQgPSBtTWFwLmZp
bmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ICE9IG1NYXAuZW5kKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPkFkZFJlZigpOworICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFNoYWRlck9iamVjdCAqc2hhZGVyOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNyZWF0ZVNoYWRlcihmdW5jdGlvbiwgJnNoYWRlcik7
CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvLyBSYW5kb20gZXZpY3Rpb24gcG9saWN5
LgorICAgICAgICBpZiAobU1hcC5zaXplKCkgPj0ga01heE1hcFNpemUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1NYXAuYmVnaW4oKS0+c2Vjb25kLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBt
TWFwLmVyYXNlKG1NYXAuYmVnaW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBzaGFkZXItPkFk
ZFJlZigpOworICAgICAgICBtTWFwW2tleV0gPSBzaGFkZXI7CisKKyAgICAgICAgcmV0dXJuIHNo
YWRlcjsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGZvciAodHlw
ZW5hbWUgTWFwOjppdGVyYXRvciBpdCA9IG1NYXAuYmVnaW4oKTsgaXQgIT0gbU1hcC5lbmQoKTsg
KytpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaXQtPnNlY29uZC0+UmVsZWFzZSgpOworICAg
ICAgICB9CisKKyAgICAgICAgbU1hcC5jbGVhcigpOworICAgIH0KKworICBwcml2YXRlOgorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJDYWNoZSk7CisKKyAgICBjb25zdCBzdGF0
aWMgc2l6ZV90IGtNYXhNYXBTaXplID0gMTAwOworCisgICAgSFJFU1VMVCBjcmVhdGVTaGFkZXIo
Y29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICoqc2hhZGVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihmdW5jdGlv
biwgc2hhZGVyKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIGNyZWF0ZVNoYWRlcihjb25zdCBEV09S
RCAqZnVuY3Rpb24sIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqKnNoYWRlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgc2hhZGVyKTsK
KyAgICB9CisKKyNpZm5kZWYgSEFTSF9NQVAKKyMgaWZkZWYgX01TQ19WRVIKKyMgIGRlZmluZSBI
QVNIX01BUCBzdGRleHQ6Omhhc2hfbWFwCisjIGVsc2UKKyMgIGRlZmluZSBIQVNIX01BUCBzdGQ6
OnVub3JkZXJlZF9tYXAKKyMgZW5kaWYKKyNlbmRpZgorCisgICAgdHlwZWRlZiBIQVNIX01BUDxz
dGQ6OnN0cmluZywgU2hhZGVyT2JqZWN0Kj4gTWFwOworICAgIE1hcCBtTWFwOworCisgICAgSURp
cmVjdDNERGV2aWNlOSAqbURldmljZTsKK307CisKK3R5cGVkZWYgU2hhZGVyQ2FjaGU8SURpcmVj
dDNEVmVydGV4U2hhZGVyOT4gVmVydGV4U2hhZGVyQ2FjaGU7Cit0eXBlZGVmIFNoYWRlckNhY2hl
PElEaXJlY3QzRFBpeGVsU2hhZGVyOT4gUGl4ZWxTaGFkZXJDYWNoZTsKKworfQorCisjZW5kaWYg
ICAvLyBMSUJFR0xfU0hBREVSX0NBQ0hFX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1NoYWRlckNhY2hlLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
U3VyZmFjZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjU1IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBTdXJmYWNlLmNwcDogSW1wbGVtZW50cyB0aGUgZWdsOjpTdXJm
YWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKKy8vIHN1Y2ggYXMgdGhl
IGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4KKy8v
IEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEu
NF0gc2VjdGlvbiAyLjIgcGFnZSAzLgorCisjaW5jbHVkZSA8dGNoYXIuaD4KKworI2luY2x1ZGUg
ImxpYkVHTC9TdXJmYWNlLmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorCisjaW5jbHVkZSAibGliRUdML21haW4uaCIKKyNpbmNs
dWRlICJsaWJFR0wvRGlzcGxheS5oIgorCituYW1lc3BhY2UgZWdsCit7CisKK1N1cmZhY2U6OlN1
cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93
LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCisgICAgOiBtRGlzcGxheShkaXNwbGF5
KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVmZmVyU3VwcG9y
dGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCit7CisgICAgbVN3YXBDaGFpbiA9IE5VTEw7Cisg
ICAgbUJhY2tCdWZmZXIgPSBOVUxMOworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIG1S
ZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKKyAgICBt
U2hhcmVIYW5kbGUgPSBOVUxMOworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtVGV4dHVyZUZv
cm1hdCA9IEVHTF9OT19URVhUVVJFOworICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRV
UkU7CisKKyAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZ
X1NDQUxJTkcpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRp
bworICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7CisgICAgbVN3YXBCZWhhdmlv
ciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOworICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKKyAgICBz
ZXRTd2FwSW50ZXJ2YWwoMSk7CisKKyAgICBzdWJjbGFzc1dpbmRvdygpOworfQorCitTdXJmYWNl
OjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUg
c2hhcmVIYW5kbGUsIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJl
Rm9ybWF0LCBFR0xlbnVtIHRleHR1cmVUeXBlKQorICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1X
aW5kb3coTlVMTCksIG1Db25maWcoY29uZmlnKSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwg
bVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChF
R0xfRkFMU0UpCit7CisgICAgbVN3YXBDaGFpbiA9IE5VTEw7CisgICAgbUJhY2tCdWZmZXIgPSBO
VUxMOworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxM
OworICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKKyAgICBtV2luZG93U3ViY2xhc3NlZCA9
IGZhbHNlOworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1
cmVGb3JtYXQ7CisgICAgbVRleHR1cmVUYXJnZXQgPSB0ZXh0dXJlVHlwZTsKKworICAgIG1QaXhl
bEFzcGVjdFJhdGlvID0gKEVHTGludCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8g
RklYTUU6IERldGVybWluZSBhY3R1YWwgcGl4ZWwgYXNwZWN0IHJhdGlvCisgICAgbVJlbmRlckJ1
ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsKKyAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9Q
UkVTRVJWRUQ7CisgICAgbVN3YXBJbnRlcnZhbCA9IC0xOworICAgIHNldFN3YXBJbnRlcnZhbCgx
KTsKK30KKworU3VyZmFjZTo6flN1cmZhY2UoKQoreworICAgIHVuc3ViY2xhc3NXaW5kb3coKTsK
KyAgICByZWxlYXNlKCk7Cit9CisKK2Jvb2wgU3VyZmFjZTo6aW5pdGlhbGl6ZSgpCit7CisgICAg
QVNTRVJUKCFtU3dhcENoYWluICYmICFtT2Zmc2NyZWVuVGV4dHVyZSAmJiAhbURlcHRoU3RlbmNp
bCk7CisKKyAgICBpZiAoIXJlc2V0U3dhcENoYWluKCkpCisgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdXJmYWNlOjpyZWxlYXNlKCkKK3sKKyAgICBp
ZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAg
ICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1CYWNrQnVmZmVyKQor
ICAgIHsKKyAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUJhY2tCdWZm
ZXIgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAg
ICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVM
TDsKKyAgICB9CisKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisgICAg
fQorCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbU9mZnNjcmVl
blRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwor
ICAgIH0KKworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5yZWxl
YXNlVGV4SW1hZ2UoKTsKKyAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgIH0KKworICAgIG1T
aGFyZUhhbmRsZSA9IE5VTEw7Cit9CisKK2Jvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQor
eworICAgIGlmICghbVdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiByZXNldFN3YXBDaGFp
bihtV2lkdGgsIG1IZWlnaHQpOworICAgIH0KKworICAgIFJFQ1Qgd2luZG93UmVjdDsKKyAgICBp
ZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmll
dmUgdGhlIHdpbmRvdyBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzZXRTd2FwQ2hhaW4od2luZG93UmVjdC5yaWdodCAtIHdpbmRvd1Jl
Y3QubGVmdCwgd2luZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcCk7Cit9CisKK2Jvb2wg
U3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZm
ZXJIZWlnaHQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdl
dERldmljZSgpOworCisgICAgaWYgKGRldmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0
ZXh0dXJlcyB0byBzeXN0ZW0gbWVtb3J5IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMKKyAgICAv
LyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9y
eSBhcyBwb3NzaWJsZS4KKyAgICBkZXZpY2UtPkV2aWN0TWFuYWdlZFJlc291cmNlcygpOworCisg
ICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICAvLyBSZWxlYXNlIHNwZWNpZmljIHJlc291cmNlcyB0
byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0LCB3aGlsZSB0aGUKKyAg
ICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIHBy
ZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgorICAgIGlmIChtU3dhcENoYWluKQorICAgIHsKKyAgICAg
ICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKKyAg
ICB9CisKKyAgICBpZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+
UmVsZWFzZSgpOworICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgaWYg
KG1PZmZzY3JlZW5UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJl
bGVhc2UoKTsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOworICAgIH0KKworICAg
IGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFz
ZSgpOworICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB9CisKKyAgICBtU2hhcmVI
YW5kbGUgPSBOVUxMOworICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsKKyAgICBpZiAo
IW1XaW5kb3cgJiYgbURpc3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpCisgICAgeworICAg
ICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxlOworICAgIH0KKworICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQs
IDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbU9m
ZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAl
MDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2UoKTsKKworICAgICAgICBpZihpc0Rldmlj
ZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlzcGxheS0+bm90
aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpvbGRSZW5kZXJUYXJnZXQgPSBtUmVuZGVyVGFyZ2V0OworCisgICAgcmVzdWx0ID0gbU9mZnNj
cmVlblRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmbVJlbmRlclRhcmdldCk7CisgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGlmIChvbGRSZW5kZXJUYXJnZXQpCisgICAg
eworICAgICAgICBSRUNUIHJlY3QgPQorICAgICAgICB7CisgICAgICAgICAgICAwLCAwLAorICAg
ICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHJlY3Qu
cmlnaHQgPiBzdGF0aWNfY2FzdDxMT05HPihiYWNrYnVmZmVyV2lkdGgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZWN0LnJpZ2h0ID0gYmFja2J1ZmZlcldpZHRoOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHJlY3QuYm90dG9tID4gc3RhdGljX2Nhc3Q8TE9ORz4oYmFja2J1ZmZlckhlaWdo
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlY3QuYm90dG9tID0gYmFja2J1ZmZlckhlaWdo
dDsKKyAgICAgICAgfQorCisgICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOworCisgICAgICAg
IHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJl
bmRlclRhcmdldCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICAgICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAg
fQorCisgICAgaWYgKG1XaW5kb3cpCisgICAgeworICAgICAgICBEM0RQUkVTRU5UX1BBUkFNRVRF
UlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1
dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0OworICAg
ICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOworICAgICAgICBwcmVz
ZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZv
cm1hdDsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9
IEZBTFNFOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7CisgICAgICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBnZXRXaW5kb3dIYW5kbGUoKTsKKyAgICAg
ICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAorICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5N
dWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxl
bWVudGVkCisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0g
bVByZXNlbnRJbnRlcnZhbDsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9
IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93
ZWQgPSBUUlVFOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSBi
YWNrYnVmZmVyV2lkdGg7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWln
aHQgPSBiYWNrYnVmZmVySGVpZ2h0OworCisgICAgICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTQw
MjM5CisgICAgICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTQzNDM0CisgICAgICAgIC8vCisgICAg
ICAgIC8vIFNvbWUgQU1EL0ludGVsIHN3aXRjaGFibGUgc3lzdGVtcyAvIGRyaXZlcnMgYXBwZWFy
IHRvIHJvdW5kIHN3YXAgY2hhaW4gc3VyZmFjZXMgdG8gYSBtdWx0aXBsZSBvZiA2NCBwaXhlbHMg
aW4gd2lkdGgKKyAgICAgICAgLy8gd2hlbiB1c2luZyB0aGUgaW50ZWdyYXRlZCBJbnRlbC4gVGhp
cyByb3VuZHMgdGhlIHdpZHRoIHVwIHJhdGhlciB0aGFuIGRvd24uCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFNvbWUgbm9uLXN3aXRjaGFibGUgQU1EIEdQVXMgLyBkcml2ZXJzIGRvIG5vdCByZXNw
ZWN0IHRoZSBzb3VyY2UgcmVjdGFuZ2xlIHRvIFByZXNlbnQuIFRoZXJlZm9yZSwgd2hlbiB0aGUg
dmVuZG9yIElECisgICAgICAgIC8vIGlzIG5vdCBJbnRlbCwgdGhlIGJhY2sgYnVmZmVyIHdpZHRo
IG11c3QgYmUgZXhhY3RseSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgd2luZG93IG9yIGhvcml6b250
YWwgc2NhbGluZyB3aWxsIG9jY3VyLgorICAgICAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5KiBh
ZGFwdGVySWRlbnRpZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOworICAg
ICAgICBpZiAoYWRhcHRlcklkZW50aWZpZXItPlZlbmRvcklkID09IFZFTkRPUl9JRF9JTlRFTCkK
KyAgICAgICAgeworICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRo
ID0gKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCArIDYzKSAvIDY0ICogNjQ7Cisg
ICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2Fw
Q2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7CisKKyAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3Vs
dCA9PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsK
KworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFp
bnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICBy
ZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3Qo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBF
X01PTk8sICZtQmFja0J1ZmZlcik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisgICAgICAgIEludmFsaWRhdGVSZWN0KG1XaW5kb3csIE5VTEwsIEZBTFNFKTsKKyAgICB9CisK
KyAgICBpZiAobUNvbmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikK
KyAgICB7CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFj
ZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIG1Db25maWctPm1EZXB0aFN0ZW5j
aWxGb3JtYXQsIEQzRE1VTFRJU0FNUExFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIE5VTEwp
OworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMKTsKKworICAgICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dh
cCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKworICAg
ICAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFs
c2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbVdpZHRoID0gYmFj
a2J1ZmZlcldpZHRoOworICAgIG1IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OworCisgICAgbVBy
ZXNlbnRJbnRlcnZhbERpcnR5ID0gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U3VyZmFjZTo6c3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGlu
dCBoZWlnaHQpCit7CisgICAgaWYgKCFtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKHggKyB3aWR0aCA+IG1XaWR0aCkKKyAgICB7CisgICAg
ICAgIHdpZHRoID0gbVdpZHRoIC0geDsKKyAgICB9CisKKyAgICBpZiAoeSArIGhlaWdodCA+IG1I
ZWlnaHQpCisgICAgeworICAgICAgICBoZWlnaHQgPSBtSGVpZ2h0IC0geTsKKyAgICB9CisKKyAg
ICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5n
ZXREZXZpY2UoKTsKKworICAgIC8vIERpc2FibGUgYWxsIHBpcGVsaW5lIG9wZXJhdGlvbnMKKyAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsKKyAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsK
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0Up
OworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFM
U0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExf
Tk9ORSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBG
QUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUs
IDApOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwg
RDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQz
RENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7
CisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICBkZXZpY2UtPlNldFZlcnRl
eFNoYWRlcihOVUxMKTsKKworICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1CYWNrQnVm
ZmVyKTsKKyAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7CisKKyAgICBk
ZXZpY2UtPlNldFRleHR1cmUoMCwgbU9mZnNjcmVlblRleHR1cmUpOworICAgIGRldmljZS0+U2V0
VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsK
KyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQz
RFRBX1RFWFRVUkUpOworICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMSwgRDNEVFNT
X0NPTE9ST1AsIEQzRFRPUF9ESVNBQkxFKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgw
LCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CisgICAgZGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRldmlj
ZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NMQU1Q
KTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBEM0RU
QUREUkVTU19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZW
Rl9URVgxKTsKKworICAgIEQzRFZJRVdQT1JUOSB2aWV3cG9ydCA9IHswLCAwLCBtV2lkdGgsIG1I
ZWlnaHQsIDAuMGYsIDEuMGZ9OworICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsK
KworICAgIGZsb2F0IHgxID0geCAtIDAuNWY7CisgICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkg
LSBoZWlnaHQpIC0gMC41ZjsKKyAgICBmbG9hdCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsKKyAg
ICBmbG9hdCB5MiA9IChtSGVpZ2h0IC0geSkgLSAwLjVmOworCisgICAgZmxvYXQgdTEgPSB4IC8g
ZmxvYXQobVdpZHRoKTsKKyAgICBmbG9hdCB2MSA9IHkgLyBmbG9hdChtSGVpZ2h0KTsKKyAgICBm
bG9hdCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxvYXQobVdpZHRoKTsKKyAgICBmbG9hdCB2MiA9ICh5
ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpOworCisgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7
eDEsIHkxLCAwLjBmLCAxLjBmLCB1MSwgdjJ9LAorICAgICAgICAgICAgICAgICAgICAgICAge3gy
LCB5MSwgMC4wZiwgMS4wZiwgdTIsIHYyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHt4Miwg
eTIsIDAuMGYsIDEuMGYsIHUyLCB2MX0sCisgICAgICAgICAgICAgICAgICAgICAgICB7eDEsIHky
LCAwLjBmLCAxLjBmLCB1MSwgdjF9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKKworICAgIG1E
aXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRf
VFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsKKyAgICBtRGlzcGxheS0+
ZW5kU2NlbmUoKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKKworICAgIFJF
Q1QgcmVjdCA9CisgICAgeworICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhlaWdodCwKKyAgICAg
ICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQorICAgIH07CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9
IG1Td2FwQ2hhaW4tPlByZXNlbnQoJnJlY3QsICZyZWN0LCBOVUxMLCBOVUxMLCAwKTsKKworICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihnbEdldEN1
cnJlbnRDb250ZXh0KCkpOworICAgIGlmIChjb250ZXh0KQorICAgIHsKKyAgICAgICAgY29udGV4
dC0+bWFya0FsbFN0YXRlRGlydHkoKTsKKyAgICB9CisKKyAgICBpZiAoaXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkKKyAgICB7CisgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9
PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgIGNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQoreworICAgIHJl
dHVybiBtV2luZG93OworfQorCisKKyNkZWZpbmUga1N1cmZhY2VQcm9wZXJ0eSBfVEVYVCgiRWds
OjpTdXJmYWNlT3duZXIiKQorI2RlZmluZSBrUGFyZW50V25kUHJvYyBfVEVYVCgiRWdsOjpTdXJm
YWNlUGFyZW50V25kUHJvYyIpCisKK3N0YXRpYyBMUkVTVUxUIENBTExCQUNLIFN1cmZhY2VXaW5k
b3dQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBh
cmFtKQoreworICBpZiAobWVzc2FnZSA9PSBXTV9TSVpFKQorICB7CisgICAgICBTdXJmYWNlKiBz
dXJmID0gcmVpbnRlcnByZXRfY2FzdDxTdXJmYWNlKj4oR2V0UHJvcChod25kLCBrU3VyZmFjZVBy
b3BlcnR5KSk7CisgICAgICBpZihzdXJmKQorICAgICAgeworICAgICAgICAgIHN1cmYtPmNoZWNr
Rm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7CisgICAgICB9CisgIH0KKyAgV05EUFJPQyBwcmV2V25k
RnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQyA+KEdldFByb3AoaHduZCwga1BhcmVudFdu
ZFByb2MpKTsKKyAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHByZXZXbmRGdW5jLCBod25kLCBtZXNz
YWdlLCB3cGFyYW0sIGxwYXJhbSk7Cit9CisKK3ZvaWQgU3VyZmFjZTo6c3ViY2xhc3NXaW5kb3co
KQoreworICAgIGlmICghbVdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBEV09SRCBwcm9jZXNzSWQ7CisgICAgRFdPUkQgdGhyZWFkSWQgPSBHZXRXaW5kb3dUaHJl
YWRQcm9jZXNzSWQobVdpbmRvdywgJnByb2Nlc3NJZCk7CisgICAgaWYgKHByb2Nlc3NJZCAhPSBH
ZXRDdXJyZW50UHJvY2Vzc0lkKCkgfHwgdGhyZWFkSWQgIT0gR2V0Q3VycmVudFRocmVhZElkKCkp
CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU2V0TGFzdEVycm9yKDApOwor
ICAgIExPTkdfUFRSIG9sZFduZFByb2MgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBf
V05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRvd1Byb2MpKTsK
KyAgICBpZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU1VDQ0VT
UykKKyAgICB7CisgICAgICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBTZXRQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHksIHJl
aW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7CisgICAgU2V0UHJvcChtV2luZG93LCBrUGFy
ZW50V25kUHJvYywgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KG9sZFduZFByb2MpKTsKKyAgICBt
V2luZG93U3ViY2xhc3NlZCA9IHRydWU7Cit9CisKK3ZvaWQgU3VyZmFjZTo6dW5zdWJjbGFzc1dp
bmRvdygpCit7CisgICAgaWYoIW1XaW5kb3dTdWJjbGFzc2VkKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIHVuLXN1YmNsYXNzCisgICAgTE9OR19QVFIgcGFyZW50V25k
RnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEdldFByb3AobVdpbmRvdywga1BhcmVu
dFduZFByb2MpKTsKKworICAgIC8vIENoZWNrIHRoZSB3aW5kb3dwcm9jIGlzIHN0aWxsIFN1cmZh
Y2VXaW5kb3dQcm9jLgorICAgIC8vIElmIHRoaXMgYXNzZXJ0IGZhaWxzLCB0aGVuIGl0IGlzIGxp
a2VseSB0aGUgYXBwbGljYXRpb24gaGFzIHN1YmNsYXNzZWQgdGhlCisgICAgLy8gaHduZCBhcyB3
ZWxsIGFuZCBkaWQgbm90IHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIEVHTCBjb250
ZXh0LiBUaGUKKyAgICAvLyBhcHBsaWNhdGlvbiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZWl0aGVy
IHN1YmNsYXNzIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCisgICAgLy8gRUdMIGNvbnRleHQsIG9y
IHRvIHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIEVHTCBjb250ZXh0LgorICAgIGlm
KHBhcmVudFduZEZ1bmMpCisgICAgeworICAgICAgICBMT05HX1BUUiBwcmV2V25kRnVuYyA9IFNl
dFdpbmRvd0xvbmdQdHIobVdpbmRvdywgR1dMUF9XTkRQUk9DLCBwYXJlbnRXbmRGdW5jKTsKKyAg
ICAgICAgQVNTRVJUKHByZXZXbmRGdW5jID09IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1
cmZhY2VXaW5kb3dQcm9jKSk7CisgICAgfQorCisgICAgUmVtb3ZlUHJvcChtV2luZG93LCBrU3Vy
ZmFjZVByb3BlcnR5KTsKKyAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKTsK
KyAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOworfQorCitib29sIFN1cmZhY2U6OmNoZWNr
Rm9yT3V0T2ZEYXRlU3dhcENoYWluKCkKK3sKKyAgICBSRUNUIGNsaWVudDsKKyAgICBpZiAoIUdl
dENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEdy
b3cgdGhlIGJ1ZmZlciBub3csIGlmIHRoZSB3aW5kb3cgaGFzIGdyb3duLiBXZSBuZWVkIHRvIGdy
b3cgbm93IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1hdGlvbi4KKyAgICBpbnQgY2xpZW50V2lkdGgg
PSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdDsKKyAgICBpbnQgY2xpZW50SGVpZ2h0ID0gY2xp
ZW50LmJvdHRvbSAtIGNsaWVudC50b3A7CisgICAgYm9vbCBzaXplRGlydHkgPSBjbGllbnRXaWR0
aCAhPSBnZXRXaWR0aCgpIHx8IGNsaWVudEhlaWdodCAhPSBnZXRIZWlnaHQoKTsKKworICAgIGlm
IChzaXplRGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQorICAgIHsKKyAgICAgICAgcmVz
ZXRTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCk7CisgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSkgPT0gdGhpcykK
KyAgICAgICAgeworICAgICAgICAgICAgZ2xNYWtlQ3VycmVudChnbEdldEN1cnJlbnRDb250ZXh0
KCksIHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGdldEN1cnJlbnREaXNwbGF5KCkpLCB0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK0RXT1JEIFN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2
YWwpCit7CisgICAgc3dpdGNoKGludGVydmFsKQorICAgIHsKKyAgICAgIGNhc2UgMDogcmV0dXJu
IEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOworICAgICAgY2FzZSAxOiByZXR1cm4gRDNE
UFJFU0VOVF9JTlRFUlZBTF9PTkU7CisgICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RXTzsKKyAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhS
RUU7CisgICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBEM0RQUkVTRU5U
X0lOVEVSVkFMX0RFRkFVTFQ7Cit9CisKK2Jvb2wgU3VyZmFjZTo6c3dhcCgpCit7CisgICAgcmV0
dXJuIHN3YXBSZWN0KDAsIDAsIG1XaWR0aCwgbUhlaWdodCk7Cit9CisKK2Jvb2wgU3VyZmFjZTo6
cG9zdFN1YkJ1ZmZlcihFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhl
aWdodCkKK3sKKyAgICBpZiAoIW1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQorICAgIHsKKyAgICAg
ICAgLy8gU3BlYyBpcyBub3QgY2xlYXIgYWJvdXQgaG93IHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQu
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gc3dhcFJlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK0VHTGludCBTdXJmYWNlOjpnZXRXaWR0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1XaWR0aDsKK30KKworRUdMaW50IFN1cmZhY2U6OmdldEhlaWdo
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9CisKK0VHTGludCBTdXJmYWNlOjpp
c1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtUG9zdFN1YkJ1
ZmZlclN1cHBvcnRlZDsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RT
dXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpZiAobVJlbmRlclRh
cmdldCkKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOworICAgIH0KKwor
ICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
K0lEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIGlm
IChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7
CisgICAgfQorCisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9CisKK0lEaXJlY3QzRFRleHR1
cmU5ICpTdXJmYWNlOjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKK3sKKyAgICBpZiAobU9mZnNjcmVl
blRleHR1cmUpCisgICAgeworICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOworfQorCit2b2lkIFN1cmZhY2U6
OnNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCit7CisgICAgaWYgKG1Td2FwSW50ZXJ2
YWwgPT0gaW50ZXJ2YWwpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IG1Td2FwSW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICBtU3dhcEludGVydmFsID0gc3RkOjptYXgo
bVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1pblN3YXBJbnRlcnZhbCgpKTsKKyAgICBtU3dh
cEludGVydmFsID0gc3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1heFN3YXBJ
bnRlcnZhbCgpKTsKKworICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobVN3
YXBJbnRlcnZhbCk7CisgICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsKK30KKworRUdM
ZW51bSBTdXJmYWNlOjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRl
eHR1cmVGb3JtYXQ7Cit9CisKK0VHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZVRhcmdldCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlVGFyZ2V0OworfQorCit2b2lkIFN1cmZhY2U6OnNl
dEJvdW5kVGV4dHVyZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQoreworICAgIG1UZXh0dXJlID0g
dGV4dHVyZTsKK30KKworZ2w6OlRleHR1cmUyRCAqU3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK0QzREZPUk1BVCBTdXJmYWNlOjpn
ZXRGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9y
bWF0OworfQorfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9TdXJmYWNlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQoj
IyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFN1cmZh
Y2UuaDogRGVmaW5lcyB0aGUgZWdsOjpTdXJmYWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3
aW5nIHN1cmZhY2UKKy8vIHN1Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNs
dWRpbmcgYW55IGJhY2sgYnVmZmVycy4KKy8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVs
YXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLgorCisjaWZu
ZGVmIElOQ0xVREVfU1VSRkFDRV9IXworI2RlZmluZSBJTkNMVURFX1NVUkZBQ0VfSF8KKworI2Rl
ZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBU
ZXh0dXJlMkQ7Cit9CisKK25hbWVzcGFjZSBlZ2wKK3sKK2NsYXNzIERpc3BsYXk7CitjbGFzcyBD
b25maWc7CisKK2NsYXNzIFN1cmZhY2UKK3sKKyAgcHVibGljOgorICAgIFN1cmZhY2UoRGlzcGxh
eSAqZGlzcGxheSwgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGlu
dCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKKyAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXks
IGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgRUdMaW50IHdp
ZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVHTGVudW0gdGV4dHVy
ZVRhcmdldCk7CisKKyAgICB+U3VyZmFjZSgpOworCisgICAgYm9vbCBpbml0aWFsaXplKCk7Cisg
ICAgdm9pZCByZWxlYXNlKCk7CisgICAgYm9vbCByZXNldFN3YXBDaGFpbigpOworCisgICAgSFdO
RCBnZXRXaW5kb3dIYW5kbGUoKTsKKyAgICBib29sIHN3YXAoKTsKKyAgICBib29sIHBvc3RTdWJC
dWZmZXIoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpOwor
CisgICAgdmlydHVhbCBFR0xpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEVHTGlu
dCBnZXRIZWlnaHQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgRUdMaW50IGlzUG9zdFN1YkJ1ZmZl
clN1cHBvcnRlZCgpIGNvbnN0OworCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0
UmVuZGVyVGFyZ2V0KCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhT
dGVuY2lsKCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RUZXh0dXJlOSAqZ2V0T2Zmc2NyZWVuVGV4
dHVyZSgpOworCisgICAgSEFORExFIGdldFNoYXJlSGFuZGxlKCkgeyByZXR1cm4gbVNoYXJlSGFu
ZGxlOyB9CisKKyAgICB2b2lkIHNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpOworICAg
IGJvb2wgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsgICAvLyBSZXR1cm5zIHRydWUgaWYg
c3dhcGNoYWluIGNoYW5nZWQgZHVlIHRvIHJlc2l6ZSBvciBpbnRlcnZhbCB1cGRhdGUKKworICAg
IHZpcnR1YWwgRUdMZW51bSBnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBF
R0xlbnVtIGdldFRleHR1cmVUYXJnZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzREZPUk1BVCBn
ZXRGb3JtYXQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZFRleHR1cmUoZ2w6
OlRleHR1cmUyRCAqdGV4dHVyZSk7CisgICAgdmlydHVhbCBnbDo6VGV4dHVyZTJEICpnZXRCb3Vu
ZFRleHR1cmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oU3VyZmFjZSk7CisKKyAgICBEaXNwbGF5ICpjb25zdCBtRGlzcGxheTsKKyAgICBJRGlyZWN0
M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1
ZmZlcjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSogbVJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSogbU9mZnNj
cmVlblRleHR1cmU7CisKKyAgICBIQU5ETEUgbVNoYXJlSGFuZGxlOworCisgICAgdm9pZCBzdWJj
bGFzc1dpbmRvdygpOworICAgIHZvaWQgdW5zdWJjbGFzc1dpbmRvdygpOworICAgIGJvb2wgcmVz
ZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpOwor
ICAgIGJvb2wgc3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGlu
dCBoZWlnaHQpOworICAgIHN0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVy
dmFsKTsKKworICAgIGNvbnN0IEhXTkQgbVdpbmRvdzsgICAgICAgICAgICAvLyBXaW5kb3cgdGhh
dCB0aGUgc3VyZmFjZSBpcyBjcmVhdGVkIGZvci4KKyAgICBib29sIG1XaW5kb3dTdWJjbGFzc2Vk
OyAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgd2Ugc3VjY2Vzc2Z1bGx5IHN1YmNsYXNzZWQg
bVdpbmRvdyBmb3IgV01fUkVTSVpFIGhvb2tpbmcKKyAgICBjb25zdCBlZ2w6OkNvbmZpZyAqbUNv
bmZpZzsgICAgLy8gRUdMIGNvbmZpZyBzdXJmYWNlIHdhcyBjcmVhdGVkIHdpdGgKKyAgICBFR0xp
bnQgbUhlaWdodDsgICAgICAgICAgICAgICAgLy8gSGVpZ2h0IG9mIHN1cmZhY2UKKyAgICBFR0xp
bnQgbVdpZHRoOyAgICAgICAgICAgICAgICAgLy8gV2lkdGggb2Ygc3VyZmFjZQorLy8gIEVHTGlu
dCBob3Jpem9udGFsUmVzb2x1dGlvbjsgICAvLyBIb3Jpem9udGFsIGRvdCBwaXRjaAorLy8gIEVH
TGludCB2ZXJ0aWNhbFJlc29sdXRpb247ICAgICAvLyBWZXJ0aWNhbCBkb3QgcGl0Y2gKKy8vICBF
R0xCb29sZWFuIGxhcmdlc3RQQnVmZmVyOyAgICAgLy8gSWYgdHJ1ZSwgY3JlYXRlIGxhcmdlc3Qg
cGJ1ZmZlciBwb3NzaWJsZQorLy8gIEVHTEJvb2xlYW4gbWlwbWFwVGV4dHVyZTsgICAgICAvLyBU
cnVlIGlmIHRleHR1cmUgaGFzIG1pcG1hcHMKKy8vICBFR0xpbnQgbWlwbWFwTGV2ZWw7ICAgICAg
ICAgICAgLy8gTWlwbWFwIGxldmVsIHRvIHJlbmRlciB0bworLy8gIEVHTGVudW0gbXVsdGlzYW1w
bGVSZXNvbHZlOyAgICAvLyBNdWx0aXNhbXBsZSByZXNvbHZlIGJlaGF2aW9yCisgICAgRUdMaW50
IG1QaXhlbEFzcGVjdFJhdGlvOyAgICAgIC8vIERpc3BsYXkgYXNwZWN0IHJhdGlvCisgICAgRUdM
ZW51bSBtUmVuZGVyQnVmZmVyOyAgICAgICAgIC8vIFJlbmRlciBidWZmZXIKKyAgICBFR0xlbnVt
IG1Td2FwQmVoYXZpb3I7ICAgICAgICAgLy8gQnVmZmVyIHN3YXAgYmVoYXZpb3IKKyAgICBFR0xl
bnVtIG1UZXh0dXJlRm9ybWF0OyAgICAgICAgLy8gRm9ybWF0IG9mIHRleHR1cmU6IFJHQiwgUkdC
QSwgb3Igbm8gdGV4dHVyZQorICAgIEVHTGVudW0gbVRleHR1cmVUYXJnZXQ7ICAgICAgICAvLyBU
eXBlIG9mIHRleHR1cmU6IDJEIG9yIG5vIHRleHR1cmUKKy8vICBFR0xlbnVtIHZnQWxwaGFGb3Jt
YXQ7ICAgICAgICAgLy8gQWxwaGEgZm9ybWF0IGZvciBPcGVuVkcKKy8vICBFR0xlbnVtIHZnQ29s
b3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgZm9yIE9wZW5WRworICAgIEVHTGludCBt
U3dhcEludGVydmFsOworICAgIEVHTGludCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZDsKKyAgICAK
KyAgICBEV09SRCBtUHJlc2VudEludGVydmFsOworICAgIGJvb2wgbVByZXNlbnRJbnRlcnZhbERp
cnR5OworICAgIGdsOjpUZXh0dXJlMkQgKm1UZXh0dXJlOworfTsKK30KKworI2VuZGlmICAgLy8g
SU5DTFVERV9TVVJGQUNFX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTgxIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBsaWJFR0wuY3BwOiBJbXBsZW1lbnRzIHRoZSBleHBvcnRlZCBFR0wgZnVuY3Rpb25zLgor
CisjaW5jbHVkZSA8ZXhjZXB0aW9uPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5j
bHVkZSAiY29tbW9uL3ZlcnNpb24uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5o
IgorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKKworYm9vbCB2YWxpZGF0ZURpc3BsYXko
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQoreworICAgIGlmIChkaXNwbGF5ID09IEVHTF9OT19ESVNQ
TEFZKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgZmFsc2Up
OworICAgIH0KKworICAgIGlmICghZGlzcGxheS0+aXNJbml0aWFsaXplZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9OT1RfSU5JVElBTElaRUQsIGZhbHNlKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCB2YWxpZGF0ZUNvbmZpZyhlZ2w6OkRpc3BsYXkg
KmRpc3BsYXksIEVHTENvbmZpZyBjb25maWcpCit7CisgICAgaWYgKCF2YWxpZGF0ZURpc3BsYXko
ZGlzcGxheSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KCFkaXNwbGF5LT5pc1ZhbGlkQ29uZmlnKGNvbmZpZykpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9DT05GSUcsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCB2YWxpZGF0ZUNvbnRleHQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBnbDo6Q29u
dGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlz
VmFsaWRDb250ZXh0KGNvbnRleHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQ09OVEVYVCwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IHZhbGlkYXRlU3VyZmFjZShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSkKK3sKKyAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRTdXJm
YWNlKHN1cmZhY2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFD
RSwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitleHRlcm4gIkMiCit7
CitFR0xpbnQgX19zdGRjYWxsIGVnbEdldEVycm9yKHZvaWQpCit7CisgICAgRVZFTlQoIigpIik7
CisKKyAgICBFR0xpbnQgZXJyb3IgPSBlZ2w6OmdldEN1cnJlbnRFcnJvcigpOworCisgICAgaWYg
KGVycm9yICE9IEVHTF9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZWdsOjpzZXRDdXJyZW50RXJy
b3IoRUdMX1NVQ0NFU1MpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworRUdMRGlz
cGxheSBfX3N0ZGNhbGwgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5
X2lkKQoreworICAgIEVWRU5UKCIoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9pZCA9IDB4
JTAuOHApIiwgZGlzcGxheV9pZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHJldHVybiBl
Z2w6OkRpc3BsYXk6OmdldERpc3BsYXkoZGlzcGxheV9pZCk7CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfTk9fRElTUExBWSk7CisgICAgfQorfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xJ
bml0aWFsaXplKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgKm1ham9yLCBFR0xpbnQgKm1pbm9yKQor
eworICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xpbnQgKm1ham9yID0g
MHglMC44cCwgRUdMaW50ICptaW5vciA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIG1ham9y
LCBtaW5vcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChkcHkgPT0gRUdMX05PX0RJ
U1BMQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0RJU1BM
QVksIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghZGlz
cGxheS0+aW5pdGlhbGl6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX05PVF9JTklUSUFMSVpFRCwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtYWpvcikgKm1ham9yID0gMTsKKyAgICAgICAgaWYgKG1pbm9yKSAqbWlub3IgPSA0OworCisg
ICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVH
TF9GQUxTRSk7CisgICAgfQorfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xUZXJtaW5hdGUo
RUdMRGlzcGxheSBkcHkpCit7CisgICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAp
IiwgZHB5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElT
UExBWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExB
WSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgZGlzcGxheS0+
dGVybWluYXRlKCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIgKl9fc3Rk
Y2FsbCBlZ2xRdWVyeVN0cmluZyhFR0xEaXNwbGF5IGRweSwgRUdMaW50IG5hbWUpCit7CisgICAg
RVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTGludCBuYW1lID0gJWQpIiwgZHB5
LCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlk
YXRlRGlzcGxheShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG5hbWUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEVHTF9DTElFTlRfQVBJUzoKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCJPcGVu
R0xfRVMiKTsKKyAgICAgICAgICBjYXNlIEVHTF9FWFRFTlNJT05TOgorICAgICAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MoZGlzcGxheS0+Z2V0RXh0ZW5zaW9uU3RyaW5nKCkpOworICAgICAgICAgIGNh
c2UgRUdMX1ZFTkRPUjoKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKGRpc3BsYXktPmdldFZl
bmRvclN0cmluZygpKTsKKyAgICAgICAgICBjYXNlIEVHTF9WRVJTSU9OOgorICAgICAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MoIjEuNCAoQU5HTEUgIiBWRVJTSU9OX1NUUklORyAiKSIpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCAoY29uc3QgY2hh
ciopTlVMTCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoY29uc3QgY2hhciopTlVMTCk7CisgICAg
fQorfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xHZXRDb25maWdzKEVHTERpc3BsYXkgZHB5
LCBFR0xDb25maWcgKmNvbmZpZ3MsIEVHTGludCBjb25maWdfc2l6ZSwgRUdMaW50ICpudW1fY29u
ZmlnKQoreworICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcg
KmNvbmZpZ3MgPSAweCUwLjhwLCAiCisgICAgICAgICAgIkVHTGludCBjb25maWdfc2l6ZSA9ICVk
LCBFR0xpbnQgKm51bV9jb25maWcgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBjb25maWdz
LCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZURpc3BsYXkoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW51bV9j
b25maWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFN
RVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEVHTGludCBhdHRy
aWJMaXN0W10gPSAgICB7RUdMX05PTkV9OworCisgICAgICAgIGlmICghZGlzcGxheS0+Z2V0Q29u
Zmlncyhjb25maWdzLCBhdHRyaWJMaXN0LCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZykpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZB
TFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorfQorCitFR0xCb29sZWFuIF9f
c3RkY2FsbCBlZ2xDaG9vc2VDb25maWcoRUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0
cmliX2xpc3QsIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQg
Km51bV9jb25maWcpCit7CisgICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIGNv
bnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwLCAiCisgICAgICAgICAgIkVHTENvbmZp
ZyAqY29uZmlncyA9IDB4JTAuOHAsIEVHTGludCBjb25maWdfc2l6ZSA9ICVkLCBFR0xpbnQgKm51
bV9jb25maWcgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBhdHRyaWJfbGlzdCwgY29uZmln
cywgY29uZmlnX3NpemUsIG51bV9jb25maWcpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwor
CisgICAgICAgIGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFudW1f
Y29uZmlnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJB
TUVURVIsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBFR0xpbnQgYXR0
cmliTGlzdFtdID0gICAge0VHTF9OT05FfTsKKworICAgICAgICBpZiAoIWF0dHJpYl9saXN0KQor
ICAgICAgICB7CisgICAgICAgICAgICBhdHRyaWJfbGlzdCA9IGF0dHJpYkxpc3Q7CisgICAgICAg
IH0KKworICAgICAgICBkaXNwbGF5LT5nZXRDb25maWdzKGNvbmZpZ3MsIGF0dHJpYl9saXN0LCBj
b25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RS
VUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9Cit9CisKK0VHTEJv
b2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ0F0dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMQ29u
ZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKK3sKKyAgICBFVkVO
VCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAs
IEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAg
ICAgICBkcHksIGNvbmZpZywgYXR0cmlidXRlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+
KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFkaXNwbGF5LT5nZXRDb25maWdBdHRyaWIoY29uZmlnLCBhdHRyaWJ1dGUsIHZh
bHVlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklC
VVRFLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9Cit9CisKK0VH
TFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxheSBkcHks
IEVHTENvbmZpZyBjb25maWcsIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luLCBjb25zdCBFR0xpbnQg
KmF0dHJpYl9saXN0KQoreworICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBF
R0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4gPSAweCUw
LjhwLCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIs
IGRweSwgY29uZmlnLCB3aW4sIGF0dHJpYl9saXN0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXksIGNvbmZpZykpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgfQorCisg
ICAgICAgIEhXTkQgd2luZG93ID0gKEhXTkQpd2luOworCisgICAgICAgIGlmICghSXNXaW5kb3co
d2luZG93KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTkFU
SVZFX1dJTkRPVywgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGRpc3BsYXktPmNyZWF0ZVdpbmRvd1N1cmZhY2Uod2luZG93LCBjb25maWcsIGF0dHJpYl9saXN0
KTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKKyAgICB9Cit9CisKK0VH
TFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKEVHTERpc3BsYXkgZHB5
LCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQoreworICAgIEVW
RU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44
cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHks
IGNvbmZpZywgYXR0cmliX2xpc3QpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAg
ICAgIGlmICghdmFsaWRhdGVDb25maWcoZGlzcGxheSwgY29uZmlnKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGRpc3BsYXktPmNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoY29uZmlnLCBOVUxMLCBhdHRyaWJf
bGlzdCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorfQor
CitFR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNlKEVHTERpc3BsYXkg
ZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xOYXRpdmVQaXhtYXBUeXBlIHBpeG1hcCwgY29uc3Qg
RUdMaW50ICphdHRyaWJfbGlzdCkKK3sKKyAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHgl
MC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4
bWFwID0gMHglMC44cCwgIgorICAgICAgICAgICJjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0g
MHglMC44cCkiLCBkcHksIGNvbmZpZywgcGl4bWFwLCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBj
b25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Cisg
ICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAg
ICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBF
R0xfTk9fU1VSRkFDRSk7CisgICAgfQorfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0
cm95U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQoreworICAgIEVW
RU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUw
LjhwKSIsIGRweSwgc3VyZmFjZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisgICAgICAg
IGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1
cmZhY2UpOworCisgICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZh
Y2UpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7CisgICAg
ICAgIH0KKworICAgICAgICBkaXNwbGF5LT5kZXN0cm95U3VyZmFjZSgoZWdsOjpTdXJmYWNlKilz
dXJmYWNlKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwg
ZWdsUXVlcnlTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGlu
dCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpCit7CisgICAgRVZFTlQoIihFR0xEaXNwbGF5IGRw
eSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1
dGUgPSAlZCwgRUdMaW50ICp2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIHN1cmZh
Y2UsIGF0dHJpYnV0ZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworICAgICAg
ICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOworCisg
ICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAg
ICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRUdMX1ZH
X0FMUEhBX0ZPUk1BVDoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfVkdfQ09MT1JTUEFDRToKKyAg
ICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9I
RUlHSFQ6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5nZXRIZWlnaHQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX0hPUklaT05UQUxfUkVTT0xVVElP
TjoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTEFSR0VTVF9QQlVGRkVSOgorICAgICAgICAgICAg
VU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEVHTF9NSVBNQVBfVEVYVFVSRToKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTUlQTUFQ
X0xFVkVMOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFOgorICAg
ICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEVHTF9QSVhFTF9BU1BFQ1RfUkFUSU86CisgICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgRUdMX1JFTkRFUl9CVUZGRVI6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1NXQVBfQkVIQVZJ
T1I6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfRk9STUFUOgorICAgICAgICAgICAg
VU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEVHTF9URVhUVVJFX1RBUkdFVDoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfVkVSVElD
QUxfUkVTT0xVVElPTjoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfV0lEVEg6CisgICAgICAgICAg
ICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBFR0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBPUlRFRF9OVjoKKyAgICAgICAg
ICAgICp2YWx1ZSA9IGVnbFN1cmZhY2UtPmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7CisgICAgfQorfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZhY2VQb2lu
dGVyQU5HTEUoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJp
YnV0ZSwgdm9pZCAqKnZhbHVlKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUw
LjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQs
IHZvaWQgKip2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIHN1cmZhY2UsIGF0dHJp
YnV0ZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworICAgICAgICBlZ2w6OlN1
cmZhY2UgKmVnbFN1cmZhY2UgPSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOworCisgICAgICAgIGlm
ICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cmZh
Y2UgPT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0
Y2ggKGF0dHJpYnV0ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRUdMX0QzRF9URVhUVVJF
XzJEX1NIQVJFX0hBTkRMRV9BTkdMRToKKyAgICAgICAgICAgICp2YWx1ZSA9ICh2b2lkKikgZWds
U3VyZmFjZS0+Z2V0U2hhcmVIYW5kbGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVH
TF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KK30KKworRUdMQm9vbGVh
biBfX3N0ZGNhbGwgZWdsQmluZEFQSShFR0xlbnVtIGFwaSkKK3sKKyAgICBFVkVOVCgiKEVHTGVu
dW0gYXBpID0gMHglWCkiLCBhcGkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2gg
KGFwaSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9BUEk6CisgICAgICAg
ICAgY2FzZSBFR0xfT1BFTlZHX0FQSToKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsgICAvLyBOb3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVt
ZW50YXRpb24KKyAgICAgICAgICBjYXNlIEVHTF9PUEVOR0xfRVNfQVBJOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6c2V0
Q3VycmVudEFQSShhcGkpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorfQorCitFR0xlbnVtIF9fc3Rk
Y2FsbCBlZ2xRdWVyeUFQSSh2b2lkKQoreworICAgIEVWRU5UKCIoKSIpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBFR0xlbnVtIEFQSSA9IGVnbDo6Z2V0Q3VycmVudEFQSSgpOworCisgICAg
ICAgIHJldHVybiBzdWNjZXNzKEFQSSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0Up
OworICAgIH0KK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdENsaWVudCh2b2lkKQor
eworICAgIEVWRU5UKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorfQorCitFR0xCb29sZWFuIF9fc3RkY2Fs
bCBlZ2xSZWxlYXNlVGhyZWFkKHZvaWQpCit7CisgICAgRVZFTlQoIigpIik7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGVnbE1ha2VDdXJyZW50KEVHTF9OT19ESVNQTEFZLCBFR0xfTk9fQ09O
VEVYVCwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFKTsKKworICAgICAgICByZXR1cm4g
c3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAg
IH0KK30KKworRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRC
dWZmZXIoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gYnVmdHlwZSwgRUdMQ2xpZW50QnVmZmVyIGJ1
ZmZlciwgRUdMQ29uZmlnIGNvbmZpZywgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkKK3sKKyAg
ICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMZW51bSBidWZ0eXBlID0gMHgl
WCwgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiRUdMQ29u
ZmlnIGNvbmZpZyA9IDB4JTAuOHAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhw
KSIsCisgICAgICAgICAgZHB5LCBidWZ0eXBlLCBidWZmZXIsIGNvbmZpZywgYXR0cmliX2xpc3Qp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGVDb25m
aWcoZGlzcGxheSwgY29uZmlnKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9O
T19TVVJGQUNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJ1ZnR5cGUgIT0gRUdMX0QzRF9U
RVhUVVJFXzJEX1NIQVJFX0hBTkRMRV9BTkdMRSB8fCAhYnVmZmVyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkaXNwbGF5LT5jcmVhdGVPZmZzY3JlZW5TdXJm
YWNlKGNvbmZpZywgKEhBTkRMRSlidWZmZXIsIGF0dHJpYl9saXN0KTsKKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKKyAgICB9Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxs
IGVnbFN1cmZhY2VBdHRyaWIoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdM
aW50IGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVlKQoreworICAgIEVWRU5UKCIoRUdMRGlzcGxheSBk
cHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBFR0xpbnQgYXR0cmli
dXRlID0gJWQsIEVHTGludCB2YWx1ZSA9ICVkKSIsCisgICAgICAgICAgZHB5LCBzdXJmYWNlLCBh
dHRyaWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKyAgICAgICAgZWds
OjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFj
ZSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKwor
ICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3Vj
Y2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0K
K30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsQmluZFRleEltYWdlKEVHTERpc3BsYXkgZHB5
LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpCit7CisgICAgRVZFTlQoIihFR0xE
aXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGlu
dCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2UsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7CisgICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0
PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOworCisgICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNl
KGRpc3BsYXksIGVnbFN1cmZhY2UpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdM
X0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJ1ZmZlciAhPSBFR0xfQkFDS19CVUZG
RVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRF
UiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9O
T19TVVJGQUNFIHx8IGVnbFN1cmZhY2UtPmdldFdpbmRvd0hhbmRsZSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGVnbFN1cmZhY2UtPmdldEJvdW5kVGV4dHVyZSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BQ0NFU1MsIEVHTF9GQUxT
RSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZWdsU3VyZmFjZS0+Z2V0VGV4dHVyZUZvcm1h
dCgpID09IEVHTF9OT19URVhUVVJFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9NQVRDSCwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
Z2xCaW5kVGV4SW1hZ2UoZWdsU3VyZmFjZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNF
KTsKKyAgICB9Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFJlbGVhc2VUZXhJbWFnZShF
R0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQgYnVmZmVyKQoreworICAg
IEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAw
eCUwLjhwLCBFR0xpbnQgYnVmZmVyID0gJWQpIiwgZHB5LCBzdXJmYWNlLCBidWZmZXIpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2Fz
dDxlZ2w6OkRpc3BsYXkqPihkcHkpOworICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2Ug
PSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKKworICAgICAgICBpZiAoIXZh
bGlkYXRlU3VyZmFjZShkaXNwbGF5LCBlZ2xTdXJmYWNlKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChidWZmZXIgIT0g
RUdMX0JBQ0tfQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3Vy
ZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSB8fCBlZ2xTdXJmYWNlLT5nZXRXaW5kb3dIYW5kbGUoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdM
X0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlZ2xTdXJmYWNlLT5nZXRUZXh0dXJl
Rm9ybWF0KCkgPT0gRUdMX05PX1RFWFRVUkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGVnbFN1cmZhY2UtPmdldEJvdW5kVGV4dHVyZSgpOwor
CisgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXh0dXJlLT5y
ZWxlYXNlVGV4SW1hZ2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVH
TF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorfQorCitF
R0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xTd2FwSW50ZXJ2YWwoRUdMRGlzcGxheSBkcHksIEVHTGlu
dCBpbnRlcnZhbCkKK3sKKyAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdM
aW50IGludGVydmFsID0gJWQpIiwgZHB5LCBpbnRlcnZhbCk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+
KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZURpc3BsYXkoZGlzcGxheSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBl
Z2w6OlN1cmZhY2UgKmRyYXdfc3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGVn
bDo6Z2V0Q3VycmVudERyYXdTdXJmYWNlKCkpOworCisgICAgICAgIGlmIChkcmF3X3N1cmZhY2Ug
PT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VS
RkFDRSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZHJhd19zdXJm
YWNlLT5zZXRTd2FwSW50ZXJ2YWwoaW50ZXJ2YWwpOworCisgICAgICAgIHJldHVybiBzdWNjZXNz
KEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorfQor
CitFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQsIGNvbnN0IEVHTGludCAq
YXR0cmliX2xpc3QpCit7CisgICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVH
TENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQgPSAweCUw
LjhwLCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIs
IGRweSwgY29uZmlnLCBzaGFyZV9jb250ZXh0LCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIC8vIEdldCB0aGUgcmVxdWVzdGVkIGNsaWVudCB2ZXJzaW9uIChkZWZhdWx0
IGlzIDEpIGFuZCBjaGVjayBpdCBpcyB0d28uCisgICAgICAgIEVHTGludCBjbGllbnRfdmVyc2lv
biA9IDE7CisgICAgICAgIGJvb2wgcmVzZXRfbm90aWZpY2F0aW9uID0gZmFsc2U7CisgICAgICAg
IGJvb2wgcm9idXN0X2FjY2VzcyA9IGZhbHNlOworCisgICAgICAgIGlmIChhdHRyaWJfbGlzdCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBFR0xpbnQqIGF0dHJpYnV0ZSA9IGF0
dHJpYl9saXN0OyBhdHRyaWJ1dGVbMF0gIT0gRUdMX05PTkU7IGF0dHJpYnV0ZSArPSAyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmlidXRlWzBdKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZF
UlNJT046CisgICAgICAgICAgICAgICAgICAgIGNsaWVudF92ZXJzaW9uID0gYXR0cmlidXRlWzFd
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdM
X0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfRVhUOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlWzFdID09IEVHTF9UUlVFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19D
T05URVhUKTsgICAvLyBVbmltcGxlbWVudGVkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBy
b2J1c3RfYWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVbMV0gIT0gRUdMX0ZBTFNFKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09OVEVY
VCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBF
R0xfQ09OVEVYVF9PUEVOR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVsxXSA9PSBFR0xfTE9TRV9DT05URVhUX09OX1JF
U0VUX0VYVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X25vdGlmaWNhdGlvbiA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZVsxXSAhPSBFR0xfTk9f
UkVTRVRfTk9USUZJQ0FUSU9OX0VYVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX0NPTlRFWFQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChj
bGllbnRfdmVyc2lvbiAhPSAyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzaGFyZV9jb250ZXh0ICYmIHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4
dCktPmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05P
X0NPTlRFWFQpOworICAgICAgICB9CisKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0g
c3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRl
Q29uZmlnKGRpc3BsYXksIGNvbmZpZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBF
R0xfTk9fQ09OVEVYVDsKKyAgICAgICAgfQorCisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9
IGRpc3BsYXktPmNyZWF0ZUNvbnRleHQoY29uZmlnLCBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+
KHNoYXJlX2NvbnRleHQpLCByZXNldF9ub3RpZmljYXRpb24sIHJvYnVzdF9hY2Nlc3MpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NU
LCBFR0xfTk9fQ09OVEVYVCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fQ09OVEVYVCk7
CisgICAgfQorfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95Q29udGV4dChFR0xE
aXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgpCit7CisgICAgRVZFTlQoIihFR0xEaXNwbGF5IGRw
eSA9IDB4JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCkiLCBkcHksIGN0eCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0
PGVnbDo6RGlzcGxheSo+KGRweSk7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOworCisgICAgICAgIGlmICghdmFsaWRhdGVDb250
ZXh0KGRpc3BsYXksIGNvbnRleHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdM
X0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN0eCA9PSBFR0xfTk9fQ09OVEVYVCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09OVEVYVCwgRUdM
X0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXktPmRlc3Ryb3lDb250ZXh0KGNv
bnRleHQpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBl
Z2xNYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBkcmF3LCBFR0xTdXJmYWNl
IHJlYWQsIEVHTENvbnRleHQgY3R4KQoreworICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAw
eCUwLjhwLCBFR0xTdXJmYWNlIGRyYXcgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHJlYWQgPSAweCUw
LjhwLCBFR0xDb250ZXh0IGN0eCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGRyYXcsIHJl
YWQsIGN0eCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOworICAgICAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKKworICAgICAgICBp
ZiAoIWRldmljZSB8fCBkaXNwbGF5LT50ZXN0RGV2aWNlTG9zdCgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBkaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgICAgICAgICByZXR1cm4g
RUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpc3BsYXktPmlzRGV2aWNlTG9z
dCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9T
VCwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdHggIT0gRUdMX05PX0NP
TlRFWFQgJiYgIXZhbGlkYXRlQ29udGV4dChkaXNwbGF5LCBjb250ZXh0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgo
ZHJhdyAhPSBFR0xfTk9fU1VSRkFDRSAmJiAhdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIHN0YXRp
Y19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKSkgfHwKKyAgICAgICAgICAgIChyZWFkICE9IEVH
TF9OT19TVVJGQUNFICYmICF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgc3RhdGljX2Nhc3Q8ZWds
OjpTdXJmYWNlKj4ocmVhZCkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9G
QUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3ICE9IHJlYWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICB9CisKKyAg
ICAgICAgZWdsOjpzZXRDdXJyZW50RGlzcGxheShkcHkpOworICAgICAgICBlZ2w6OnNldEN1cnJl
bnREcmF3U3VyZmFjZShkcmF3KTsKKyAgICAgICAgZWdsOjpzZXRDdXJyZW50UmVhZFN1cmZhY2Uo
cmVhZCk7CisKKyAgICAgICAgZ2xNYWtlQ3VycmVudChjb250ZXh0LCBkaXNwbGF5LCBzdGF0aWNf
Y2FzdDxlZ2w6OlN1cmZhY2UqPihkcmF3KSk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9Cit9CisKK0VH
TENvbnRleHQgX19zdGRjYWxsIGVnbEdldEN1cnJlbnRDb250ZXh0KHZvaWQpCit7CisgICAgRVZF
TlQoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9
IGdsR2V0Q3VycmVudENvbnRleHQoKTsKKworICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0
KTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19DT05URVhUKTsKKyAgICB9Cit9CisKK0VH
TFN1cmZhY2UgX19zdGRjYWxsIGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTGludCByZWFkZHJhdykK
K3sKKyAgICBFVkVOVCgiKEVHTGludCByZWFkZHJhdyA9ICVkKSIsIHJlYWRkcmF3KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKHJlYWRkcmF3ID09IEVHTF9SRUFEKQorICAgICAgICB7
CisgICAgICAgICAgICBFR0xTdXJmYWNlIHJlYWQgPSBlZ2w6OmdldEN1cnJlbnRSZWFkU3VyZmFj
ZSgpOworICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MocmVhZCk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAocmVhZGRyYXcgPT0gRUdMX0RSQVcpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEVHTFN1cmZhY2UgZHJhdyA9IGVnbDo6Z2V0Q3VycmVudERyYXdTdXJmYWNlKCk7CisgICAgICAg
ICAgICByZXR1cm4gc3VjY2VzcyhkcmF3KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05P
X1NVUkZBQ0UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFD
RSk7CisgICAgfQorfQorCitFR0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50RGlzcGxh
eSh2b2lkKQoreworICAgIEVWRU5UKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBF
R0xEaXNwbGF5IGRweSA9IGVnbDo6Z2V0Q3VycmVudERpc3BsYXkoKTsKKworICAgICAgICByZXR1
cm4gc3VjY2VzcyhkcHkpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0RJU1BMQVkpOwor
ICAgIH0KK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVlcnlDb250ZXh0KEVHTERpc3Bs
YXkgZHB5LCBFR0xDb250ZXh0IGN0eCwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkK
K3sKKyAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29udGV4dCBjdHgg
PSAweCUwLjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGludCAqdmFsdWUgPSAweCUwLjhw
KSIsCisgICAgICAgICAgZHB5LCBjdHgsIGF0dHJpYnV0ZSwgdmFsdWUpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRp
c3BsYXkqPihkcHkpOworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0
PGdsOjpDb250ZXh0Kj4oY3R4KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlQ29udGV4dChkaXNw
bGF5LCBjb250ZXh0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsK
KyAgICAgICAgfQorCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAg
ICAgIHJldHVybiBzdWNjZXNzKDApOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsK
KyAgICB9Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFdhaXRHTCh2b2lkKQoreworICAg
IEVWRU5UKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7
ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xX
YWl0TmF0aXZlKEVHTGludCBlbmdpbmUpCit7CisgICAgRVZFTlQoIihFR0xpbnQgZW5naW5lID0g
JWQpIiwgZW5naW5lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWds
U3dhcEJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSkKK3sKKyAgICBF
VkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHgl
MC44cCkiLCBkcHksIHN1cmZhY2UpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworICAgICAg
ICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOworCisg
ICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGRpc3BsYXktPmlzRGV2aWNlTG9zdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGVnbFN1cmZhY2UtPnN3YXAoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJv
b2xlYW4gX19zdGRjYWxsIGVnbENvcHlCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNl
IHN1cmZhY2UsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgdGFyZ2V0KQoreworICAgIEVWRU5UKCIoRUdM
RGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBFR0xO
YXRpdmVQaXhtYXBUeXBlIHRhcmdldCA9IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlLCB0YXJnZXQp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1
cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKKworICAgICAgICBp
ZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBlZ2xTdXJmYWNlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkaXNw
bGF5LT5pc0RldmljZUxvc3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9DT05URVhUX0xPU1QsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorfQorCitFR0xCb29sZWFuIF9f
c3RkY2FsbCBlZ2xQb3N0U3ViQnVmZmVyTlYoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSwgRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCit7
CisgICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFj
ZSA9IDB4JTAuOHAsIEVHTGludCB4ID0gJWQsIEVHTGludCB5ID0gJWQsIEVHTGludCB3aWR0aCA9
ICVkLCBFR0xpbnQgaGVpZ2h0ID0gJWQpIiwgZHB5LCBzdXJmYWNlLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHggPCAwIHx8IHkgPCAwIHx8IHdp
ZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwor
ICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZh
Y2UqPihzdXJmYWNlKTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBl
Z2xTdXJmYWNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChkaXNwbGF5LT5pc0RldmljZUxvc3QoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhUX0xPU1QsIEVHTF9GQUxTRSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZB
TFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlZ2xTdXJmYWNlLT5wb3N0U3ViQnVmZmVy
KHgsIHksIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3Vj
Y2VzcyhFR0xfVFJVRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworX19lZ2xNdXN0Q2FzdFRv
UHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZWdsR2V0UHJvY0FkZHJlc3MoY29u
c3QgY2hhciAqcHJvY25hbWUpCit7CisgICAgRVZFTlQoIihjb25zdCBjaGFyICpwcm9jbmFtZSA9
IFwiJXNcIikiLCBwcm9jbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN0cnVjdCBF
eHRlbnNpb24KKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAg
ICAgICAgIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgYWRkcmVzczsK
KyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGVnbEV4dGVuc2lv
bnNbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHsiZWdsUXVlcnlTdXJmYWNlUG9pbnRlckFO
R0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZWdsUXVlcnlT
dXJmYWNlUG9pbnRlckFOR0xFfSwKKyAgICAgICAgICAgIHsiZWdsUG9zdFN1YkJ1ZmZlck5WIiwg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZWdsUG9zdFN1YkJ1ZmZl
ck5WfSwKKyAgICAgICAgICAgIHsiIiwgTlVMTH0sCisgICAgICAgIH07CisKKyAgICAgICAgZm9y
IChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGVnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVu
c2lvbik7IGV4dCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3RyY21wKHByb2NuYW1l
LCBlZ2xFeHRlbnNpb25zW2V4dF0ubmFtZSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUp
ZWdsRXh0ZW5zaW9uc1tleHRdLmFkZHJlc3M7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZ2xHZXRQcm9jQWRkcmVzcyhwcm9jbmFtZSk7CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlOVUxMKTsK
KyAgICB9Cit9Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML2xpYkVHTC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
IyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5kZWYKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCShyZXZpc2lv
biAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKK0xJQlJBUlkJbGliRUdMCitFWFBPUlRTCisJ
ZWdsQmluZEFQSSAgICAgICAgICAgICAgICAgICAgICBAMTQKKwllZ2xCaW5kVGV4SW1hZ2UgICAg
ICAgICAgICAgICAgIEAyMAorCWVnbENob29zZUNvbmZpZyAgICAgICAgICAgICAgICAgQDcKKwll
Z2xDb3B5QnVmZmVycyAgICAgICAgICAgICAgICAgIEAzMworCWVnbENyZWF0ZUNvbnRleHQgICAg
ICAgICAgICAgICAgQDIzCisJZWdsQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIgICAgICAg
IEAxOAorCWVnbENyZWF0ZVBidWZmZXJTdXJmYWNlICAgICAgICAgQDEwCisJZWdsQ3JlYXRlUGl4
bWFwU3VyZmFjZSAgICAgICAgICBAMTEKKwllZ2xDcmVhdGVXaW5kb3dTdXJmYWNlICAgICAgICAg
IEA5CisJZWdsRGVzdHJveUNvbnRleHQgICAgICAgICAgICAgICBAMjQKKwllZ2xEZXN0cm95U3Vy
ZmFjZSAgICAgICAgICAgICAgIEAxMgorCWVnbEdldENvbmZpZ0F0dHJpYiAgICAgICAgICAgICAg
QDgKKwllZ2xHZXRDb25maWdzICAgICAgICAgICAgICAgICAgIEA2CisJZWdsR2V0Q3VycmVudENv
bnRleHQgICAgICAgICAgICBAMjYKKwllZ2xHZXRDdXJyZW50RGlzcGxheSAgICAgICAgICAgIEAy
OAorCWVnbEdldEN1cnJlbnRTdXJmYWNlICAgICAgICAgICAgQDI3CisJZWdsR2V0RGlzcGxheSAg
ICAgICAgICAgICAgICAgICBAMgorCWVnbEdldEVycm9yICAgICAgICAgICAgICAgICAgICAgQDEK
KwllZ2xHZXRQcm9jQWRkcmVzcyAgICAgICAgICAgICAgIEAzNAorCWVnbEluaXRpYWxpemUgICAg
ICAgICAgICAgICAgICAgQDMKKwllZ2xNYWtlQ3VycmVudCAgICAgICAgICAgICAgICAgIEAyNQor
CWVnbFF1ZXJ5QVBJICAgICAgICAgICAgICAgICAgICAgQDE1CisJZWdsUXVlcnlDb250ZXh0ICAg
ICAgICAgICAgICAgICBAMjkKKwllZ2xRdWVyeVN0cmluZyAgICAgICAgICAgICAgICAgIEA1CisJ
ZWdsUXVlcnlTdXJmYWNlICAgICAgICAgICAgICAgICBAMTMKKwllZ2xSZWxlYXNlVGV4SW1hZ2Ug
ICAgICAgICAgICAgIEAyMQorCWVnbFJlbGVhc2VUaHJlYWQgICAgICAgICAgICAgICAgQDE3CisJ
ZWdsU3VyZmFjZUF0dHJpYiAgICAgICAgICAgICAgICBAMTkKKwllZ2xTd2FwQnVmZmVycyAgICAg
ICAgICAgICAgICAgIEAzMgorCWVnbFN3YXBJbnRlcnZhbCAgICAgICAgICAgICAgICAgQDIyCisJ
ZWdsVGVybWluYXRlICAgICAgICAgICAgICAgICAgICBANAorCWVnbFdhaXRDbGllbnQgICAgICAg
ICAgICAgICAgICAgQDE2CisJZWdsV2FpdEdMICAgICAgICAgICAgICAgICAgICAgICBAMzAKKwll
Z2xXYWl0TmF0aXZlICAgICAgICAgICAgICAgICAgIEAzMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvbGliRUdMLmRlZgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCww
ICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJjCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJjCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDIgQEAKKy8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCBy
ZXNvdXJjZSBzY3JpcHQuCisvLworI2luY2x1ZGUgInJlc291cmNlLmgiCisKKyNkZWZpbmUgQVBT
VFVESU9fUkVBRE9OTFlfU1lNQk9MUworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZW5l
cmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KKy8vCisjaW5jbHVkZSA8d2lu
ZG93cy5oPgorI2luY2x1ZGUgIi4uL2NvbW1vbi92ZXJzaW9uLmgiCisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisjdW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCisKKyNpZiAhZGVmaW5lZChBRlhf
UkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkKKyNpZmRlZiBfV0lOMzIKK0xB
TkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VTCisjcHJhZ21hIGNvZGVfcGFn
ZSgxMjUyKQorI2VuZGlmIC8vX1dJTjMyCisKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRFWFRJTkNMVURFCisvLworCisxIFRFWFRJTkNMVURF
IAorQkVHSU4KKyAgICAicmVzb3VyY2UuaFwwIgorRU5ECisKKzIgVEVYVElOQ0xVREUgCitCRUdJ
TgorICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIgorICAgICIjaW5jbHVkZSAiIi4uL2Nv
bW1vbi92ZXJzaW9uLmgiIlwwIgorRU5ECisKKzMgVEVYVElOQ0xVREUgCitCRUdJTgorICAgICJc
clxuIgorICAgICJcMCIKK0VORAorCisjZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAorCisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVmVyc2lvbgorLy8KKworVlNfVkVSU0lPTl9J
TkZPIFZFUlNJT05JTkZPCisgRklMRVZFUlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9O
LEJVSUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04KKyBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJT
SU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTgorIEZJTEVGTEFH
U01BU0sgMHgxN0wKKyNpZmRlZiBfREVCVUcKKyBGSUxFRkxBR1MgMHgxTAorI2Vsc2UKKyBGSUxF
RkxBR1MgMHgwTAorI2VuZGlmCisgRklMRU9TIDB4NEwKKyBGSUxFVFlQRSAweDJMCisgRklMRVNV
QlRZUEUgMHgwTAorQkVHSU4KKyAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgICAgQkVHSU4K
KyAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIgorICAgICAgICBCRUdJTgorICAgICAgICAgICAgVkFM
VUUgIkZpbGVEZXNjcmlwdGlvbiIsICJBTkdMRSBsaWJFR0wgRHluYW1pYyBMaW5rIExpYnJhcnki
CisgICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORworICAgICAg
ICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJFR0wiCisgICAgICAgICAgICBWQUxVRSAi
TGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIgorICAgICAg
ICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliRUdMLmRsbCIKKyAgICAgICAgICAg
IFZBTFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORworICAgICAgICAgICAgVkFMVUUg
IlByb2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkVHTCBEeW5hbWljIExpbmsgTGlicmFyeSIKKyAgICAg
ICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HCisgICAgICAgIEVO
RAorICAgIEVORAorICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgICBCRUdJTgorICAgICAgICBW
QUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMAorICAgIEVORAorRU5ECisKKyNlbmRpZiAg
ICAvLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwor
CisjaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8g
R2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCisvLworCisKKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisjZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdM
LnJjCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9tYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML21haW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWFpbi5jcHA6IERMTCBlbnRyeSBwb2ludCBh
bmQgbWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KKworI2luY2x1ZGUgImxpYkVHTC9t
YWluLmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworc3RhdGljIERXT1JEIGN1cnJl
bnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7CisKK2V4dGVybiAiQyIgQk9PTCBXSU5BUEkgRGxs
TWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQor
eworICAgIHN3aXRjaCAocmVhc29uKQorICAgIHsKKyAgICAgIGNhc2UgRExMX1BST0NFU1NfQVRU
QUNIOgorICAgICAgICB7CisjaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkKKyAgICAg
ICAgICAgIEZJTEUgKmRlYnVnID0gZm9wZW4oVFJBQ0VfT1VUUFVUX0ZJTEUsICJydCIpOworCisg
ICAgICAgICAgICBpZiAoZGVidWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmNs
b3NlKGRlYnVnKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZvcGVuKFRSQUNFX09VVFBVVF9G
SUxFLCAid3QiKTsgICAvLyBFcmFzZQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChkZWJ1ZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZjbG9z
ZShkZWJ1Zyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCisKKyAg
ICAgICAgICAgIGN1cnJlbnRUTFMgPSBUbHNBbGxvYygpOworCisgICAgICAgICAgICBpZiAoY3Vy
cmVudFRMUyA9PSBUTFNfT1VUX09GX0lOREVYRVMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6ZSBpbmRleAorICAgICAgY2FzZSBETExfVEhSRUFE
X0FUVEFDSDoKKyAgICAgICAgeworICAgICAgICAgICAgZWdsOjpDdXJyZW50ICpjdXJyZW50ID0g
KGVnbDo6Q3VycmVudCopTG9jYWxBbGxvYyhMUFRSLCBzaXplb2YoZWdsOjpDdXJyZW50KSk7CisK
KyAgICAgICAgICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOworCisgICAgICAgICAgICAgICAgY3Vy
cmVudC0+ZXJyb3IgPSBFR0xfU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5BUEkg
PSBFR0xfT1BFTkdMX0VTX0FQSTsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5kaXNwbGF5ID0g
RUdMX05PX0RJU1BMQVk7CisgICAgICAgICAgICAgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBF
R0xfTk9fU1VSRkFDRTsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IEVH
TF9OT19TVVJGQUNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKKyAgICAgICAgeworICAgICAgICAgICAgdm9p
ZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgICAgICAgICBpZiAo
Y3VycmVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NB
TCljdXJyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgorICAgICAgICB7CisgICAgICAgICAgICB2b2lk
ICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICAgICAgICAgIGlmIChj
dXJyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FM
KWN1cnJlbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUbHNGcmVlKGN1cnJlbnRU
TFMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK25hbWVzcGFjZSBlZ2wKK3sK
K3ZvaWQgc2V0Q3VycmVudEVycm9yKEVHTGludCBlcnJvcikKK3sKKyAgICBDdXJyZW50ICpjdXJy
ZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+
ZXJyb3IgPSBlcnJvcjsKK30KKworRUdMaW50IGdldEN1cnJlbnRFcnJvcigpCit7CisgICAgQ3Vy
cmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAg
IHJldHVybiBjdXJyZW50LT5lcnJvcjsKK30KKwordm9pZCBzZXRDdXJyZW50QVBJKEVHTGVudW0g
QVBJKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3Vy
cmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5BUEkgPSBBUEk7Cit9CisKK0VHTGVudW0gZ2V0Q3Vy
cmVudEFQSSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1
ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5BUEk7Cit9CisKK3ZvaWQgc2V0
Q3VycmVudERpc3BsYXkoRUdMRGlzcGxheSBkcHkpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9
IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJlbnQtPmRpc3Bs
YXkgPSBkcHk7Cit9CisKK0VHTERpc3BsYXkgZ2V0Q3VycmVudERpc3BsYXkoKQoreworICAgIEN1
cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAg
ICByZXR1cm4gY3VycmVudC0+ZGlzcGxheTsKK30KKwordm9pZCBzZXRDdXJyZW50RHJhd1N1cmZh
Y2UoRUdMU3VyZmFjZSBzdXJmYWNlKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVu
dCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5kcmF3U3VyZmFjZSA9
IHN1cmZhY2U7Cit9CisKK0VHTFN1cmZhY2UgZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkKK3sKKyAg
ICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwor
CisgICAgcmV0dXJuIGN1cnJlbnQtPmRyYXdTdXJmYWNlOworfQorCit2b2lkIHNldEN1cnJlbnRS
ZWFkU3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9
IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJlbnQtPnJlYWRT
dXJmYWNlID0gc3VyZmFjZTsKK30KKworRUdMU3VyZmFjZSBnZXRDdXJyZW50UmVhZFN1cmZhY2Uo
KQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVu
dFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+cmVhZFN1cmZhY2U7Cit9Cit9CisKK3ZvaWQg
ZXJyb3IoRUdMaW50IGVycm9yQ29kZSkKK3sKKyAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihlcnJv
ckNvZGUpOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9tYWluLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAt
MCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWFpbi5oOiBNYW5hZ2VtZW50
IG9mIHRocmVhZC1sb2NhbCBkYXRhLgorCisjaWZuZGVmIExJQkVHTF9NQUlOX0hfCisjZGVmaW5l
IExJQkVHTF9NQUlOX0hfCisKKyNkZWZpbmUgRUdMQVBJCisjaW5jbHVkZSA8RUdML2VnbC5oPgor
I2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KKworbmFtZXNwYWNlIGVnbAoreworc3RydWN0IEN1cnJl
bnQKK3sKKyAgICBFR0xpbnQgZXJyb3I7CisgICAgRUdMZW51bSBBUEk7CisgICAgRUdMRGlzcGxh
eSBkaXNwbGF5OworICAgIEVHTFN1cmZhY2UgZHJhd1N1cmZhY2U7CisgICAgRUdMU3VyZmFjZSBy
ZWFkU3VyZmFjZTsKK307CisKK3ZvaWQgc2V0Q3VycmVudEVycm9yKEVHTGludCBlcnJvcik7CitF
R0xpbnQgZ2V0Q3VycmVudEVycm9yKCk7CisKK3ZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQ
SSk7CitFR0xlbnVtIGdldEN1cnJlbnRBUEkoKTsKKwordm9pZCBzZXRDdXJyZW50RGlzcGxheShF
R0xEaXNwbGF5IGRweSk7CitFR0xEaXNwbGF5IGdldEN1cnJlbnREaXNwbGF5KCk7CisKK3ZvaWQg
c2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFjZSk7CitFR0xTdXJmYWNlIGdl
dEN1cnJlbnREcmF3U3VyZmFjZSgpOworCit2b2lkIHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xT
dXJmYWNlIHN1cmZhY2UpOworRUdMU3VyZmFjZSBnZXRDdXJyZW50UmVhZFN1cmZhY2UoKTsKK30K
Kwordm9pZCBlcnJvcihFR0xpbnQgZXJyb3JDb2RlKTsKKwordGVtcGxhdGU8Y2xhc3MgVD4KK2Nv
bnN0IFQgJmVycm9yKEVHTGludCBlcnJvckNvZGUsIGNvbnN0IFQgJnJldHVyblZhbHVlKQorewor
ICAgIGVycm9yKGVycm9yQ29kZSk7CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIFQ+Citjb25zdCBUICZzdWNjZXNzKGNvbnN0IFQgJnJldHVyblZhbHVlKQor
eworICAgIGVnbDo6c2V0Q3VycmVudEVycm9yKEVHTF9TVUNDRVNTKTsKKworICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKK30KKworI2VuZGlmICAvLyBMSUJFR0xfTUFJTl9IXwoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML3Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9yZXNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9yZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQgQEAK
Ky8ve3tOT19ERVBFTkRFTkNJRVN9fQorLy8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJhdGVk
IGluY2x1ZGUgZmlsZS4KKy8vIFVzZWQgYnkgbGliRUdMLnJjCisKKy8vIE5leHQgZGVmYXVsdCB2
YWx1ZXMgZm9yIG5ldyBvYmplY3RzCisvLyAKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisjaWZu
ZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKyNkZWZpbmUgX0FQU19ORVhUX1JFU09VUkNF
X1ZBTFVFICAgICAgICAxMDEKKyNkZWZpbmUgX0FQU19ORVhUX0NPTU1BTkRfVkFMVUUgICAgICAg
ICA0MDAwMQorI2RlZmluZSBfQVBTX05FWFRfQ09OVFJPTF9WQUxVRSAgICAgICAgIDEwMDEKKyNk
ZWZpbmUgX0FQU19ORVhUX1NZTUVEX1ZBTFVFICAgICAgICAgICAxMDEKKyNlbmRpZgorI2VuZGlm
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L3Jlc291cmNlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAj
IworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JpbmFyeVN0cmVhbS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQmluYXJ5U3RyZWFtLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JpbmFyeVN0
cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY3IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gQmluYXJ5U3RyZWFtLmg6IFByb3ZpZGVzIGJpbmFyeSBzZXJpYWxpemF0aW9uIG9mIHNpbXBs
ZSB0eXBlcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfQklOQVJZU1RSRUFNX0hfCisjZGVmaW5lIExJ
QkdMRVNWMl9CSU5BUllTVFJFQU1fSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2
ZWN0b3I+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wK
K3sKKworY2xhc3MgQmluYXJ5SW5wdXRTdHJlYW0KK3sKKyAgcHVibGljOgorICAgIEJpbmFyeUlu
cHV0U3RyZWFtKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAg
ICBtRXJyb3IgPSBmYWxzZTsKKyAgICAgICAgbU9mZnNldCA9IDA7CisgICAgICAgIG1EYXRhID0g
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpOworICAgICAgICBtTGVuZ3RoID0gbGVuZ3Ro
OworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHZvaWQgcmVhZChUICp2
LCBzaXplX3QgbnVtKQorICAgIHsKKyAgICAgICAgdW5pb24KKyAgICAgICAgeworICAgICAgICAg
ICAgVCBkdW1teTsgIC8vIENvbXBpbGF0aW9uIGVycm9yIGZvciBub24tdHJpdmlhbCB0eXBlcwor
ICAgICAgICB9IGR1bW15OworICAgICAgICAodm9pZCkgZHVtbXk7CisKKyAgICAgICAgaWYgKG1F
cnJvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgc2l6ZV90IGxlbmd0aCA9IG51bSAqIHNpemVvZihUKTsKKworICAgICAgICBpZiAobU9mZnNl
dCArIGxlbmd0aCA+IG1MZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FcnJvciA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodiwg
bURhdGEgKyBtT2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBtT2Zmc2V0ICs9IGxlbmd0aDsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHJlYWQoVCAqIHYpCisg
ICAgeworICAgICAgICByZWFkKHYsIDEpOworICAgIH0KKworICAgIHZvaWQgcmVhZChzdGQ6OnN0
cmluZyAqdikKKyAgICB7CisgICAgICAgIHNpemVfdCBsZW5ndGg7CisgICAgICAgIHJlYWQoJmxl
bmd0aCk7CisKKyAgICAgICAgaWYgKG1FcnJvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1PZmZzZXQgKyBsZW5ndGggPiBtTGVuZ3Ro
KQorICAgICAgICB7CisgICAgICAgICAgICBtRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgdi0+YXNzaWduKG1EYXRhICsgbU9mZnNldCwgbGVu
Z3RoKTsKKyAgICAgICAgbU9mZnNldCArPSBsZW5ndGg7CisgICAgfQorCisgICAgdm9pZCBza2lw
KHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICBpZiAobU9mZnNldCArIGxlbmd0aCA+IG1M
ZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FcnJvciA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtT2Zmc2V0ICs9IGxlbmd0aDsKKyAgICB9
CisKKyAgICBzaXplX3Qgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtT2Zm
c2V0OworICAgIH0KKworICAgIGJvb2wgZXJyb3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1FcnJvcjsKKyAgICB9CisKKyAgICBib29sIGVuZE9mU3RyZWFtKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtT2Zmc2V0ID09IG1MZW5ndGg7CisgICAgfQorCisgIHByaXZhdGU6
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJpbmFyeUlucHV0U3RyZWFtKTsKKyAgICBi
b29sIG1FcnJvcjsKKyAgICBzaXplX3QgbU9mZnNldDsKKyAgICBjb25zdCBjaGFyICptRGF0YTsK
KyAgICBzaXplX3QgbUxlbmd0aDsKK307CisKK2NsYXNzIEJpbmFyeU91dHB1dFN0cmVhbQorewor
ICBwdWJsaWM6CisgICAgQmluYXJ5T3V0cHV0U3RyZWFtKCkKKyAgICB7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9pZCB3cml0ZShjb25zdCBUICp2LCBzaXplX3Qg
bnVtKQorICAgIHsKKyAgICAgICAgdW5pb24KKyAgICAgICAgeworICAgICAgICAgICAgVCBkdW1t
eTsgIC8vIENvbXBpbGF0aW9uIGVycm9yIGZvciBub24tdHJpdmlhbCB0eXBlcworICAgICAgICB9
IGR1bW15OworICAgICAgICAodm9pZCkgZHVtbXk7CisKKyAgICAgICAgY29uc3QgY2hhciAqYXNC
eXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHYpOworICAgICAgICBtRGF0YS5p
bnNlcnQobURhdGEuZW5kKCksIGFzQnl0ZXMsIGFzQnl0ZXMgKyBudW0gKiBzaXplb2YoVCkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHZvaWQgd3JpdGUoY29uc3Qg
VCAmdikKKyAgICB7CisgICAgICAgIHdyaXRlKCZ2LCAxKTsKKyAgICB9CisKKyAgICB2b2lkIHdy
aXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZ2KQorICAgIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9
IHYubGVuZ3RoKCk7CisgICAgICAgIHdyaXRlKGxlbmd0aCk7CisKKyAgICAgICAgd3JpdGUodi5j
X3N0cigpLCBsZW5ndGgpOworICAgIH0KKworICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1EYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICBjb25zdCB2b2lk
KiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtRGF0YS5zaXplKCkgPyAmbURh
dGFbMF0gOiBOVUxMOworICAgIH0KKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihCaW5hcnlPdXRwdXRTdHJlYW0pOworICAgIHN0ZDo6dmVjdG9yPGNoYXI+IG1EYXRh
OworfTsKK30KKworI2VuZGlmICAvLyBMSUJHTEVTVjJfQklOQVJZU1RSRUFNX0hfCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JpbmFy
eVN0cmVhbS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMK
KyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQmxpdC5jcHA6IFN1
cmZhY2UgY29weSB1dGlsaXR5IGNsYXNzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCIK
KworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZQoreworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9zaGFkZXJzL3N0YW5kYXJkdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvc2hhZGVycy9mbGlweXZzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3NoYWRlcnMvcGFzc3Ro
cm91Z2hwcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9zaGFkZXJzL2x1bWluYW5jZXBzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3NoYWRlcnMvY29tcG9uZW50bWFza3BzLmgiCisKK2NvbnN0IEJZ
VEUqIGNvbnN0IGdfc2hhZGVyQ29kZVtdID0KK3sKKyAgICBnX3ZzMjBfc3RhbmRhcmR2cywKKyAg
ICBnX3ZzMjBfZmxpcHl2cywKKyAgICBnX3BzMjBfcGFzc3Rocm91Z2hwcywKKyAgICBnX3BzMjBf
bHVtaW5hbmNlcHMsCisgICAgZ19wczIwX2NvbXBvbmVudG1hc2twcworfTsKKworY29uc3Qgc2l6
ZV90IGdfc2hhZGVyU2l6ZVtdID0KK3sKKyAgICBzaXplb2YoZ192czIwX3N0YW5kYXJkdnMpLAor
ICAgIHNpemVvZihnX3ZzMjBfZmxpcHl2cyksCisgICAgc2l6ZW9mKGdfcHMyMF9wYXNzdGhyb3Vn
aHBzKSwKKyAgICBzaXplb2YoZ19wczIwX2x1bWluYW5jZXBzKSwKKyAgICBzaXplb2YoZ19wczIw
X2NvbXBvbmVudG1hc2twcykKK307Cit9CisKK25hbWVzcGFjZSBnbAoreworQmxpdDo6QmxpdChD
b250ZXh0ICpjb250ZXh0KQorICA6IG1Db250ZXh0KGNvbnRleHQpLCBtUXVhZFZlcnRleEJ1ZmZl
cihOVUxMKSwgbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbihOVUxMKSwgbVNhdmVkU3RhdGVCbG9jayhO
VUxMKSwgbVNhdmVkUmVuZGVyVGFyZ2V0KE5VTEwpLCBtU2F2ZWREZXB0aFN0ZW5jaWwoTlVMTCkK
K3sKKyAgICBpbml0R2VvbWV0cnkoKTsKKyAgICBtZW1zZXQobUNvbXBpbGVkU2hhZGVycywgMCwg
c2l6ZW9mKG1Db21waWxlZFNoYWRlcnMpKTsKK30KKworQmxpdDo6fkJsaXQoKQoreworICAgIGlm
IChtU2F2ZWRTdGF0ZUJsb2NrKSBtU2F2ZWRTdGF0ZUJsb2NrLT5SZWxlYXNlKCk7CisgICAgaWYg
KG1RdWFkVmVydGV4QnVmZmVyKSBtUXVhZFZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOworICAgIGlm
IChtUXVhZFZlcnRleERlY2xhcmF0aW9uKSBtUXVhZFZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNl
KCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFNIQURFUl9DT1VOVDsgaSsrKQorICAgIHsK
KyAgICAgICAgaWYgKG1Db21waWxlZFNoYWRlcnNbaV0pCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1Db21waWxlZFNoYWRlcnNbaV0tPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBCbGl0Ojppbml0R2VvbWV0cnkoKQoreworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBxdWFk
W10gPQorICAgIHsKKyAgICAgICAgLTEsIC0xLAorICAgICAgICAtMSwgIDEsCisgICAgICAgICAx
LCAtMSwKKyAgICAgICAgIDEsICAxCisgICAgfTsKKworICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IGdldERldmljZSgpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVZlcnRleEJ1ZmZlcihzaXplb2YocXVhZCksIEQzRFVTQUdFX1dSSVRFT05MWSwgMCwgRDNEUE9P
TF9ERUZBVUxULCAmbVF1YWRWZXJ0ZXhCdWZmZXIsIE5VTEwpOworCisgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB2b2lkICpsb2NrUHRyID0gTlVMTDsK
KyAgICByZXN1bHQgPSBtUXVhZFZlcnRleEJ1ZmZlci0+TG9jaygwLCAwLCAmbG9ja1B0ciwgMCk7
CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkgfHwgbG9ja1B0ciA9PSBOVUxMKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9CisKKyAgICBtZW1jcHkobG9ja1B0ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKKyAg
ICBtUXVhZFZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVS
VEVYRUxFTUVOVDkgZWxlbWVudHNbXSA9CisgICAgeworICAgICAgICB7IDAsIDAsIEQzRERFQ0xU
WVBFX0ZMT0FUMiwgRDNEREVDTE1FVEhPRF9ERUZBVUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04s
IDAgfSwKKyAgICAgICAgRDNEREVDTF9FTkQoKQorICAgIH07CisKKyAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVZlcnRleERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmbVF1YWRWZXJ0ZXhEZWNsYXJh
dGlvbik7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KwordGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Citib29sIEJsaXQ6OnNldFNoYWRlcihT
aGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAg
ICBEM0RTaGFkZXJUeXBlICooZWdsOjpEaXNwbGF5OjoqY3JlYXRlU2hhZGVyKShjb25zdCBEV09S
RCAqLCBzaXplX3QgbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQ
SSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVyKShEM0RTaGFkZXJUeXBlKikpCit7CisgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGRpc3BsYXktPmdldERldmljZSgpOworCisgICAgRDNEU2hhZGVyVHlwZSAq
c2hhZGVyOworCisgICAgaWYgKG1Db21waWxlZFNoYWRlcnNbc291cmNlXSAhPSBOVUxMKQorICAg
IHsKKyAgICAgICAgc2hhZGVyID0gc3RhdGljX2Nhc3Q8RDNEU2hhZGVyVHlwZSo+KG1Db21waWxl
ZFNoYWRlcnNbc291cmNlXSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0
IEJZVEUqIHNoYWRlckNvZGUgPSBnX3NoYWRlckNvZGVbc291cmNlXTsKKyAgICAgICAgc2l6ZV90
IHNoYWRlclNpemUgPSBnX3NoYWRlclNpemVbc291cmNlXTsKKworICAgICAgICBzaGFkZXIgPSAo
ZGlzcGxheS0+KmNyZWF0ZVNoYWRlcikocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHNo
YWRlckNvZGUpLCBzaGFkZXJTaXplKTsKKyAgICAgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0
aW9uIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBt
Q29tcGlsZWRTaGFkZXJzW3NvdXJjZV0gPSBzaGFkZXI7CisgICAgfQorCisgICAgSFJFU1VMVCBo
ciA9IChkZXZpY2UtPipzZXRTaGFkZXIpKHNoYWRlcik7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHNldCBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0
aW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBCbGl0OjpzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVyKQoreworICAg
IHJldHVybiBzZXRTaGFkZXI8SURpcmVjdDNEVmVydGV4U2hhZGVyOT4oc2hhZGVyLCAidnNfMl8w
IiwgJmVnbDo6RGlzcGxheTo6Y3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6
U2V0VmVydGV4U2hhZGVyKTsKK30KKworYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJ
ZCBzaGFkZXIpCit7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+
KHNoYWRlciwgInBzXzJfMCIsICZlZ2w6OkRpc3BsYXk6OmNyZWF0ZVBpeGVsU2hhZGVyLCAmSURp
cmVjdDNERGV2aWNlOTo6U2V0UGl4ZWxTaGFkZXIpOworfQorCitSRUNUIEJsaXQ6OmdldFN1cmZh
Y2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdAoreworICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjOworICAgIHN1cmZhY2UtPkdldERlc2MoJmRlc2MpOworCisgICAgUkVDVCBy
ZWN0OworICAgIHJlY3QubGVmdCA9IDA7CisgICAgcmVjdC50b3AgPSAwOworICAgIHJlY3Qucmln
aHQgPSBkZXNjLldpZHRoOworICAgIHJlY3QuYm90dG9tID0gZGVzYy5IZWlnaHQ7CisKKyAgICBy
ZXR1cm4gcmVjdDsKK30KKworYm9vbCBCbGl0Ojpib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkg
KnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7CisgICAgSURpcmVjdDNEVGV4dHVy
ZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIGdldFN1cmZhY2VSZWN0
KHNvdXJjZSkpOworICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsK
KworICAgIHNhdmVTdGF0ZSgpOworCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHRleHR1cmUp
OworICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIGRlc3QpOworCisgICAgc2V0VmVydGV4
U2hhZGVyKFNIQURFUl9WU19TVEFOREFSRCk7CisgICAgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BT
X1BBU1NUSFJPVUdIKTsKKworICAgIHNldENvbW1vbkJsaXRTdGF0ZSgpOworICAgIGRldmljZS0+
U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX0xJTkVBUik7Cisg
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZf
TElORUFSKTsKKworICAgIHNldFZpZXdwb3J0KGdldFN1cmZhY2VSZWN0KGRlc3QpLCAwLCAwKTsK
KworICAgIHJlbmRlcigpOworCisgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworCisgICAgcmVzdG9y
ZVN0YXRlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCbGl0Ojpjb3B5KElEaXJl
Y3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0
Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAq
ZGVzdCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKwor
ICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXN0
RGVzYzsKKyAgICBzb3VyY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOworICAgIGRlc3QtPkdldERl
c2MoJmRlc3REZXNjKTsKKworICAgIGlmIChzb3VyY2VEZXNjLkZvcm1hdCA9PSBkZXN0RGVzYy5G
b3JtYXQgJiYgZGVzdERlc2MuVXNhZ2UgJiBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgJiYKKyAgICAg
ICAgZHgyZXM6OklzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoZGVzdERlc2MuRm9ybWF0LCBkZXN0
Rm9ybWF0KSkgICAvLyBDYW4gdXNlIFN0cmV0Y2hSZWN0CisgICAgeworICAgICAgICBSRUNUIGRl
c3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyAoc291cmNlUmVjdC5yaWdodCAt
IHNvdXJjZVJlY3QubGVmdCksIHlvZmZzZXQgKyAoc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VS
ZWN0LnRvcCl9OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qo
c291cmNlLCAmc291cmNlUmVjdCwgZGVzdCwgJmRlc3RSZWN0LCBEM0RURVhGX1BPSU5UKTsKKwor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZm9y
bWF0Q29udmVydChzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZz
ZXQsIGRlc3QpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OmZv
cm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNl
UmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0KQoreworICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJl
ID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNlLCBzb3VyY2VSZWN0KTsKKyAgICBpZiAoIXRl
eHR1cmUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBzYXZlU3RhdGUoKTsKKwor
ICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFJlbmRl
clRhcmdldCgwLCBkZXN0KTsKKworICAgIHNldFZpZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQs
IHlvZmZzZXQpOworCisgICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7CisgICAgaWYgKHNldEZvcm1h
dENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQpKQorICAgIHsKKyAgICAgICAgcmVuZGVyKCk7Cisg
ICAgfQorCisgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworCisgICAgcmVzdG9yZVN0YXRlKCk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVy
cyhHTGVudW0gZGVzdEZvcm1hdCkKK3sKKyAgICBib29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIo
U0hBREVSX1ZTX1NUQU5EQVJEKTsKKworICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKKyAgICB7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAg
Y2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgY2FzZSBHTF9BTFBI
QToKKyAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBP
TkVOVE1BU0spOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Cisg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0
UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0xVTUlOQU5DRSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGlmICghb2theSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBlbnVtIHsgWCA9IDAsIFkgPSAxLCBaID0gMiwgVyA9IDMgfTsKKworICAgIC8vIFRoZSBt
ZWFuaW5nIG9mIHRoaXMgY29uc3RhbnQgZGVwZW5kcyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNl
bGVjdGVkLgorICAgIC8vIFNlZSB0aGUgc2hhZGVyIGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRl
dGFpbHMuCisgICAgZmxvYXQgcHNDb25zdDBbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKworICAgIHN3
aXRjaCAoZGVzdEZvcm1hdCkKKyAgICB7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgcHND
b25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFtaXSA9IDE7CisgICAgICAgIGJyZWFrOwor
CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgcHNDb25zdDBbWF0gPSAxOworICAgICAgICBw
c0NvbnN0MFtXXSA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX0FMUEhBOgor
ICAgICAgICBwc0NvbnN0MFtaXSA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKKyAgICAgICAgcHNDb25zdDBbWV0gPSAxOworICAgICAgICBicmVhazsKKwor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIHBzQ29uc3QwW1hdID0gMTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZ2V0RGV2aWNlKCktPlNldFBpeGVsU2hhZGVy
Q29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitJRGly
ZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpCit7CisgICAgaWYgKCFzdXJmYWNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIHNvdXJjZURlc2M7CisgICAgc3Vy
ZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7CisKKyAgICAvLyBDb3B5IHRoZSByZW5kZXIgdGFy
Z2V0IGludG8gYSB0ZXh0dXJlCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmU7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoc291cmNlUmVjdC5yaWdodCAt
IHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCwgMSwg
RDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNjLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxU
LCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlks
IChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAgfQorCisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnRleHR1cmVTdXJmYWNlOworICAgIHJlc3VsdCA9IHRleHR1cmUtPkdldFN1cmZhY2VMZXZl
bCgwLCAmdGV4dHVyZVN1cmZhY2UpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVM
TCk7CisgICAgfQorCisgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKyAgICByZXN1bHQgPSBkZXZp
Y2UtPlN0cmV0Y2hSZWN0KHN1cmZhY2UsICZzb3VyY2VSZWN0LCB0ZXh0dXJlU3VyZmFjZSwgTlVM
TCwgRDNEVEVYRl9OT05FKTsKKworICAgIHRleHR1cmVTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGV4
dHVyZTsKK30KKwordm9pZCBCbGl0OjpzZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KQoreworICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRDNEVklFV1BPUlQ5IHZwOworICAgIHZwLlgg
ICAgICA9IHhvZmZzZXQ7CisgICAgdnAuWSAgICAgID0geW9mZnNldDsKKyAgICB2cC5XaWR0aCAg
PSBzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0OworICAgIHZwLkhlaWdodCA9IHNv
dXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVjdC50b3A7CisgICAgdnAuTWluWiAgID0gMC4wZjsK
KyAgICB2cC5NYXhaICAgPSAxLjBmOworICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZwKTsKKwor
ICAgIGZsb2F0IGhhbGZQaXhlbEFkanVzdFs0XSA9IHsgLTEuMGYvdnAuV2lkdGgsIDEuMGYvdnAu
SGVpZ2h0LCAwLCAwIH07CisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwg
aGFsZlBpeGVsQWRqdXN0LCAxKTsKK30KKwordm9pZCBCbGl0OjpzZXRDb21tb25CbGl0U3RhdGUo
KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAg
ZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVF
TkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5B
QkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworCisgICAgZGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOwor
ICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhG
X1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JURVhU
VVJFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERS
RVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAs
IEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKworICAgIFJFQ1Qgc2Npc3Nv
clJlY3QgPSB7MH07ICAgLy8gU2Npc3NvcmluZyBpcyBkaXNhYmxlZCBmb3IgZmxpcHBpbmcsIGJ1
dCB3ZSBuZWVkIHRoaXMgdG8gY2FwdHVyZSBhbmQgcmVzdG9yZSB0aGUgb2xkIHJlY3RhbmdsZQor
ICAgIGRldmljZS0+U2V0U2Npc3NvclJlY3QoJnNjaXNzb3JSZWN0KTsKKworICAgIGZvcihpbnQg
aSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGRldmlj
ZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6cmVu
ZGVyKCkKK3sKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CisgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBIUkVTVUxUIGhy
ID0gZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDIgKiBz
aXplb2YoZmxvYXQpKTsKKyAgICBociA9IGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1
YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAg
aHIgPSBkZXZpY2UtPkRyYXdQcmltaXRpdmUoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMCwgMik7Cit9
CisKK3ZvaWQgQmxpdDo6c2F2ZVN0YXRlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBnZXREZXZpY2UoKTsKKworICAgIEhSRVNVTFQgaHI7CisKKyAgICBkZXZpY2UtPkdldERl
cHRoU3RlbmNpbFN1cmZhY2UoJm1TYXZlZERlcHRoU3RlbmNpbCk7CisgICAgZGV2aWNlLT5HZXRS
ZW5kZXJUYXJnZXQoMCwgJm1TYXZlZFJlbmRlclRhcmdldCk7CisKKyAgICBpZiAobVNhdmVkU3Rh
dGVCbG9jayA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVC
bG9jaygpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICBzZXRDb21t
b25CbGl0U3RhdGUoKTsKKworICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0
XSA9IHsgMCwgMCwgMCwgMCB9OworCisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5V
TEwpOworICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNv
bnN0LCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICAgICAg
ZGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKKworICAg
ICAgICBEM0RWSUVXUE9SVDkgZHVtbXlWcDsKKyAgICAgICAgZHVtbXlWcC5YID0gMDsKKyAgICAg
ICAgZHVtbXlWcC5ZID0gMDsKKyAgICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7CisgICAgICAgIGR1
bW15VnAuSGVpZ2h0ID0gMTsKKyAgICAgICAgZHVtbXlWcC5NaW5aID0gMDsKKyAgICAgICAgZHVt
bXlWcC5NYXhaID0gMTsKKworICAgICAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsK
KworICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7CisKKyAgICAgICAgZGV2aWNl
LT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDApOworCisgICAgICAg
IGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisK
KyAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOwor
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVk
U3RhdGVCbG9jayAhPSBOVUxMKTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwp
CisgICAgeworICAgICAgICBociA9IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KK30KKwordm9pZCBCbGl0OjpyZXN0b3Jl
U3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwor
CisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKG1TYXZlZERlcHRoU3RlbmNpbCk7
CisgICAgaWYgKG1TYXZlZERlcHRoU3RlbmNpbCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVNh
dmVkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1TYXZlZERlcHRoU3RlbmNpbCA9
IE5VTEw7CisgICAgfQorCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVNhdmVkUmVu
ZGVyVGFyZ2V0KTsKKyAgICBpZiAobVNhdmVkUmVuZGVyVGFyZ2V0ICE9IE5VTEwpCisgICAgewor
ICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNhdmVkUmVu
ZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAh
PSBOVUxMKTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCisgICAgeworICAg
ICAgICBtU2F2ZWRTdGF0ZUJsb2NrLT5BcHBseSgpOworICAgIH0KK30KKworfQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQmxpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvQmxpdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQmxpdC5jcHA6IFN1cmZhY2UgY29weSB1dGls
aXR5IGNsYXNzLgorCisjaWZuZGVmIExJQkdMRVNWMl9CTElUX0hfCisjZGVmaW5lIExJQkdMRVNW
Ml9CTElUX0hfCisKKyNpbmNsdWRlIDxtYXA+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKworI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKK25hbWVzcGFj
ZSBnbAoreworY2xhc3MgQ29udGV4dDsKKworY2xhc3MgQmxpdAoreworICBwdWJsaWM6CisgICAg
ZXhwbGljaXQgQmxpdChDb250ZXh0ICpjb250ZXh0KTsKKyAgICB+QmxpdCgpOworCisgICAgLy8g
Q29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KKyAgICAvLyBzb3VyY2VS
ZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBl
ci1sZWZ0KQorICAgIGJvb2wgY29weShJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBS
RUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworCisgICAgLy8gQ29weSBmcm9tIHNv
dXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KKyAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0
LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQorICAg
IC8vIHNvdXJjZSBpcyBpbnRlcnByZXRlZCBhcyBSR0JBIGFuZCBkZXN0Rm9ybWF0IHNwZWNpZmll
cyB0aGUgZGVzaXJlZCByZXN1bHQgZm9ybWF0LiBGb3IgZXhhbXBsZSwgaWYgZGVzdEZvcm1hdCA9
IEdMX1JHQiwgdGhlIGFscGhhIGNoYW5uZWwgd2lsbCBiZSBmb3JjZWQgdG8gMC4KKyAgICBib29s
IGZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291
cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKKworICAgIC8vIDJ4MiBib3ggZmlsdGVyIHNhbXBs
ZSBmcm9tIHNvdXJjZSB0byBkZXN0LgorICAgIC8vIFJlcXVpcmVzIHRoYXQgc291cmNlIGlzIFJH
QihBKSBhbmQgZGVzdCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIHNvdXJjZS4KKyAgICBib29sIGJv
eEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dCk7CisKKyAgcHJpdmF0ZToKKyAgICBDb250ZXh0ICptQ29udGV4dDsKKworICAgIElEaXJlY3Qz
RFZlcnRleEJ1ZmZlcjkgKm1RdWFkVmVydGV4QnVmZmVyOworICAgIElEaXJlY3QzRFZlcnRleERl
Y2xhcmF0aW9uOSAqbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbjsKKworICAgIHZvaWQgaW5pdEdlb21l
dHJ5KCk7CisKKyAgICBib29sIHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0Rm9y
bWF0KTsKKworICAgIElEaXJlY3QzRFRleHR1cmU5ICpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGly
ZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCk7CisgICAgdm9p
ZCBzZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0KTsKKyAgICB2b2lkIHNldENvbW1vbkJsaXRTdGF0ZSgpOworICAgIFJFQ1QgZ2V0
U3VyZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0OworCisgICAgLy8g
VGhpcyBlbnVtIGlzIHVzZWQgdG8gaW5kZXggbUNvbXBpbGVkU2hhZGVycyBhbmQgbVNoYWRlclNv
dXJjZS4KKyAgICBlbnVtIFNoYWRlcklkCisgICAgeworICAgICAgICBTSEFERVJfVlNfU1RBTkRB
UkQsCisgICAgICAgIFNIQURFUl9WU19GTElQWSwKKyAgICAgICAgU0hBREVSX1BTX1BBU1NUSFJP
VUdILAorICAgICAgICBTSEFERVJfUFNfTFVNSU5BTkNFLAorICAgICAgICBTSEFERVJfUFNfQ09N
UE9ORU5UTUFTSywKKyAgICAgICAgU0hBREVSX0NPVU5UCisgICAgfTsKKworICAgIC8vIFRoaXMg
YWN0dWFsbHkgY29udGFpbnMgSURpcmVjdDNEVmVydGV4U2hhZGVyOSBvciBJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgY2FzdGVkIHRvIElVbmtub3duLgorICAgIElVbmtub3duICptQ29tcGlsZWRTaGFk
ZXJzW1NIQURFUl9DT1VOVF07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4K
KyAgICBib29sIHNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUs
CisgICAgICAgICAgICAgICAgICAgRDNEU2hhZGVyVHlwZSAqKGVnbDo6RGlzcGxheTo6KmNyZWF0
ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgc2l6ZV90IGxlbmd0aCksCisgICAgICAgICAgICAgICAg
ICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRl
clR5cGUqKSk7CisKKyAgICBib29sIHNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOwor
ICAgIGJvb2wgc2V0UGl4ZWxTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsKKyAgICB2b2lkIHJlbmRl
cigpOworCisgICAgdm9pZCBzYXZlU3RhdGUoKTsKKyAgICB2b2lkIHJlc3RvcmVTdGF0ZSgpOwor
ICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICptU2F2ZWRTdGF0ZUJsb2NrOworICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICptU2F2ZWRSZW5kZXJUYXJnZXQ7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1T
YXZlZERlcHRoU3RlbmNpbDsKKworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCbGl0KTsK
K307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9CTElUX0hfCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJ1ZmZlci5jcHA6IEltcGxlbWVudHMg
dGhlIGdsOjpCdWZmZXIgY2xhc3MsIHJlcHJlc2VudGluZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQv
b3IKKy8vIGluZGV4IGRhdGEuIEltcGxlbWVudHMgR0wgYnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4KKy8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdl
IDIxLgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCisjaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5oIgorCituYW1lc3BhY2UgZ2wKK3sK
KworQnVmZmVyOjpCdWZmZXIoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQoreworICAg
IG1Db250ZW50cyA9IE5VTEw7CisgICAgbVNpemUgPSAwOworICAgIG1Vc2FnZSA9IEdMX0RZTkFN
SUNfRFJBVzsKKworICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOworICAgIG1TdGF0aWNJ
bmRleEJ1ZmZlciA9IE5VTEw7CisgICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKK30KKworQnVm
ZmVyOjp+QnVmZmVyKCkKK3sKKyAgICBkZWxldGVbXSBtQ29udGVudHM7CisgICAgZGVsZXRlIG1T
dGF0aWNWZXJ0ZXhCdWZmZXI7CisgICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKK30KKwor
dm9pZCBCdWZmZXI6OmJ1ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXpl
LCBHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICB7CisgICAgICAgIGRl
bGV0ZVtdIG1Db250ZW50czsKKyAgICAgICAgbUNvbnRlbnRzID0gTlVMTDsKKyAgICB9CisgICAg
ZWxzZSBpZiAoc2l6ZSAhPSBtU2l6ZSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVtdIG1Db250ZW50
czsKKyAgICAgICAgbUNvbnRlbnRzID0gbmV3IEdMdWJ5dGVbc2l6ZV07CisgICAgICAgIG1lbXNl
dChtQ29udGVudHMsIDAsIHNpemUpOworICAgIH0KKworICAgIGlmIChkYXRhICE9IE5VTEwgJiYg
c2l6ZSA+IDApCisgICAgeworICAgICAgICBtZW1jcHkobUNvbnRlbnRzLCBkYXRhLCBzaXplKTsK
KyAgICB9CisKKyAgICBtU2l6ZSA9IHNpemU7CisgICAgbVVzYWdlID0gdXNhZ2U7CisKKyAgICBp
bnZhbGlkYXRlU3RhdGljRGF0YSgpOworCisgICAgaWYgKHVzYWdlID09IEdMX1NUQVRJQ19EUkFX
KQorICAgIHsKKyAgICAgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhC
dWZmZXIoZ2V0RGV2aWNlKCkpOworICAgICAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBuZXcgU3Rh
dGljSW5kZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOworICAgIH0KK30KKwordm9pZCBCdWZmZXI6OmJ1
ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGludHB0ciBv
ZmZzZXQpCit7CisgICAgbWVtY3B5KG1Db250ZW50cyArIG9mZnNldCwgZGF0YSwgc2l6ZSk7Cisg
ICAgCisgICAgaWYgKChtU3RhdGljVmVydGV4QnVmZmVyICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXIt
PnNpemUoKSAhPSAwKSB8fCAobVN0YXRpY0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZl
ci0+c2l6ZSgpICE9IDApKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsK
KyAgICB9CisKKyAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOworfQorCitTdGF0aWNWZXJ0ZXhC
dWZmZXIgKkJ1ZmZlcjo6Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0
YXRpY1ZlcnRleEJ1ZmZlcjsKK30KKworU3RhdGljSW5kZXhCdWZmZXIgKkJ1ZmZlcjo6Z2V0U3Rh
dGljSW5kZXhCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGljSW5kZXhCdWZmZXI7Cit9CisK
K3ZvaWQgQnVmZmVyOjppbnZhbGlkYXRlU3RhdGljRGF0YSgpCit7CisgICAgZGVsZXRlIG1TdGF0
aWNWZXJ0ZXhCdWZmZXI7CisgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7CisKKyAgICBk
ZWxldGUgbVN0YXRpY0luZGV4QnVmZmVyOworICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7
CisKKyAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOworfQorCisvLyBDcmVhdGVzIHN0YXRpYyBi
dWZmZXJzIGlmIHN1ZmZpY2llbnQgdXNlZCBkYXRhIGhhcyBiZWVuIGxlZnQgdW5tb2RpZmllZAor
dm9pZCBCdWZmZXI6OnByb21vdGVTdGF0aWNVc2FnZShpbnQgZGF0YVNpemUpCit7CisgICAgaWYg
KCFtU3RhdGljVmVydGV4QnVmZmVyICYmICFtU3RhdGljSW5kZXhCdWZmZXIpCisgICAgeworICAg
ICAgICBtVW5tb2RpZmllZERhdGFVc2UgKz0gZGF0YVNpemU7CisKKyAgICAgICAgaWYgKG1Vbm1v
ZGlmaWVkRGF0YVVzZSA+IDMgKiBtU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRp
Y1ZlcnRleEJ1ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOworICAg
ICAgICAgICAgbVN0YXRpY0luZGV4QnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKGdldERl
dmljZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0J1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXIuaDogRGVmaW5lcyB0aGUgZ2w6OkJ1ZmZl
ciBjbGFzcywgcmVwcmVzZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgorLy8gaW5kZXgg
ZGF0YS4gSW1wbGVtZW50cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LgorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEuCisKKyNpZm5k
ZWYgTElCR0xFU1YyX0JVRkZFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfQlVGRkVSX0hfCisKKyNp
bmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorCituYW1lc3BhY2UgZ2wKK3sK
K2NsYXNzIFN0YXRpY1ZlcnRleEJ1ZmZlcjsKK2NsYXNzIFN0YXRpY0luZGV4QnVmZmVyOworCitj
bGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVibGljOgorICAgIGV4
cGxpY2l0IEJ1ZmZlcihHTHVpbnQgaWQpOworCisgICAgdmlydHVhbCB+QnVmZmVyKCk7CisKKyAg
ICB2b2lkIGJ1ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGVu
dW0gdXNhZ2UpOworICAgIHZvaWQgYnVmZmVyU3ViRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNp
emVpcHRyIHNpemUsIEdMaW50cHRyIG9mZnNldCk7CisKKyAgICB2b2lkICpkYXRhKCkgeyByZXR1
cm4gbUNvbnRlbnRzOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtU2l6ZTsg
fQorICAgIEdMZW51bSB1c2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2FnZTsgfQorCisgICAgU3Rh
dGljVmVydGV4QnVmZmVyICpnZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKTsKKyAgICBTdGF0aWNJbmRl
eEJ1ZmZlciAqZ2V0U3RhdGljSW5kZXhCdWZmZXIoKTsKKyAgICB2b2lkIGludmFsaWRhdGVTdGF0
aWNEYXRhKCk7CisgICAgdm9pZCBwcm9tb3RlU3RhdGljVXNhZ2UoaW50IGRhdGFTaXplKTsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXIpOworCisgICAg
R0x1Ynl0ZSAqbUNvbnRlbnRzOworICAgIEdMc2l6ZWlwdHIgbVNpemU7CisgICAgR0xlbnVtIG1V
c2FnZTsKKworICAgIFN0YXRpY1ZlcnRleEJ1ZmZlciAqbVN0YXRpY1ZlcnRleEJ1ZmZlcjsKKyAg
ICBTdGF0aWNJbmRleEJ1ZmZlciAqbVN0YXRpY0luZGV4QnVmZmVyOworICAgIEdMc2l6ZWlwdHIg
bVVubW9kaWZpZWREYXRhVXNlOworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfQlVG
RkVSX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0J1ZmZlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0w
LDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1NTEgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIENvbnRleHQuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFu
YWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nCisvLyByZW5kZXJpbmcgb3BlcmF0aW9u
cy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQu
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGht
PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgorCisj
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L0JsaXQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUXVlcnkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJl
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCIKKworI3VuZGVmIG5lYXIKKyN1bmRlZiBmYXIK
KworbmFtZXNwYWNlIGdsCit7CitzdGF0aWMgY29uc3QgY2hhciogbWFrZVN0YXRpY1N0cmluZyhj
b25zdCBzdGQ6OnN0cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBzdGQ6OnNldDxzdGQ6OnN0cmlu
Zz4gc3RyaW5nczsKKyAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz46Oml0ZXJhdG9yIGl0ID0gc3Ry
aW5ncy5maW5kKHN0cik7CisgICAgaWYgKGl0ICE9IHN0cmluZ3MuZW5kKCkpCisgICAgICByZXR1
cm4gaXQtPmNfc3RyKCk7CisKKyAgICByZXR1cm4gc3RyaW5ncy5pbnNlcnQoc3RyKS5maXJzdC0+
Y19zdHIoKTsKK30KKworQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmln
LCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9v
bCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhjb25maWcpCit7CisgICAgQVNTRVJUKHJvYnVzdEFj
Y2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRlZAorCisgICAgbURpc3BsYXkgPSBOVUxM
OworICAgIG1EZXZpY2UgPSBOVUxMOworCisgICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnNldEJh
c2VIYW5kbGUoMCk7CisKKyAgICBzZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYp
OworCisgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7CisgICAgbVN0YXRlLnN0ZW5j
aWxDbGVhclZhbHVlID0gMDsKKworICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGZhbHNlOworICAgIG1T
dGF0ZS5jdWxsTW9kZSA9IEdMX0JBQ0s7CisgICAgbVN0YXRlLmZyb250RmFjZSA9IEdMX0NDVzsK
KyAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZmFsc2U7CisgICAgbVN0YXRlLmRlcHRoRnVuYyA9IEdM
X0xFU1M7CisgICAgbVN0YXRlLmJsZW5kID0gZmFsc2U7CisgICAgbVN0YXRlLnNvdXJjZUJsZW5k
UkdCID0gR0xfT05FOworICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOworICAg
IG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOworICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBo
YSA9IEdMX1pFUk87CisgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsK
KyAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gR0xfRlVOQ19BREQ7CisgICAgbVN0YXRl
LmJsZW5kQ29sb3IucmVkID0gMDsKKyAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9IDA7Cisg
ICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9IDA7CisgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxw
aGEgPSAwOworICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOworICAgIG1TdGF0ZS5zdGVu
Y2lsRnVuYyA9IEdMX0FMV0FZUzsKKyAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IDA7CisgICAgbVN0
YXRlLnN0ZW5jaWxNYXNrID0gLTE7CisgICAgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgPSAtMTsK
KyAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOworICAgIG1TdGF0ZS5zdGVu
Y2lsQmFja1JlZiA9IDA7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IC0gMTsKKyAgICBt
U3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsKKyAgICBtU3RhdGUuc3RlbmNpbEZhaWwg
PSBHTF9LRUVQOworICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IEdMX0tFRVA7Cisg
ICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsKKyAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tGYWlsID0gR0xfS0VFUDsKKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhG
YWlsID0gR0xfS0VFUDsKKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gR0xf
S0VFUDsKKyAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxzZTsKKyAgICBtU3RhdGUu
cG9seWdvbk9mZnNldEZhY3RvciA9IDAuMGY7CisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0
cyA9IDAuMGY7CisgICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOworICAg
IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGZhbHNlOworICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFn
ZVZhbHVlID0gMS4wZjsKKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgPSBmYWxzZTsK
KyAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBmYWxzZTsKKyAgICBtU3RhdGUuZGl0aGVyID0gdHJ1
ZTsKKyAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xfRE9OVF9DQVJFOworICAgIG1T
dGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50ID0gR0xfRE9OVF9DQVJFOworCisgICAg
bVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7CisKKyAgICBtU3RhdGUudmlld3BvcnRYID0gMDsKKyAg
ICBtU3RhdGUudmlld3BvcnRZID0gMDsKKyAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IGNvbmZp
Zy0+bURpc3BsYXlNb2RlLldpZHRoOworICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IGNvbmZp
Zy0+bURpc3BsYXlNb2RlLkhlaWdodDsKKyAgICBtU3RhdGUuek5lYXIgPSAwLjBmOworICAgIG1T
dGF0ZS56RmFyID0gMS4wZjsKKworICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7CisgICAgbVN0YXRl
LnNjaXNzb3JZID0gMDsKKyAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gY29uZmlnLT5tRGlzcGxh
eU1vZGUuV2lkdGg7CisgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBjb25maWctPm1EaXNwbGF5
TW9kZS5IZWlnaHQ7CisKKyAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gdHJ1ZTsKKyAgICBtU3Rh
dGUuY29sb3JNYXNrR3JlZW4gPSB0cnVlOworICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlID0gdHJ1
ZTsKKyAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOworICAgIG1TdGF0ZS5kZXB0aE1h
c2sgPSB0cnVlOworCisgICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQorICAgIHsKKyAgICAg
ICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsKKyAg
ICAgICAgbVJlc291cmNlTWFuYWdlci0+YWRkUmVmKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7CisgICAg
fQorCisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6CisgICAg
Ly8gSW4gdGhlIGluaXRpYWwgc3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRFWFRVUkVfQ1VCRV9NQVAg
aGF2ZSB0d29kaW1lbnNpb25hbAorICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJlIHN0YXRlIHZl
Y3RvcnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICAgIC8vIEluIG9yZGVy
IHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRoZXkg
YXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQorICAgIC8vIG9iamVjdHMgYWxsIG9mIHdob3NlIG5hbWVz
IGFyZSAwLgorCisgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQoMCkpOworICAg
IG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1hcCgwKSk7CisKKyAgICBt
U3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7CisgICAgYmluZEFycmF5QnVmZmVyKDApOworICAgIGJp
bmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7CisgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOworICAg
IGJpbmRUZXh0dXJlMkQoMCk7CisgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsKKyAgICBiaW5k
RHJhd0ZyYW1lYnVmZmVyKDApOworICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7CisKKyAgICBtU3Rh
dGUuY3VycmVudFByb2dyYW0gPSAwOworICAgIG1DdXJyZW50UHJvZ3JhbUJpbmFyeS5zZXQoTlVM
TCk7CisKKyAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IDQ7CisgICAgbVN0YXRlLnVucGFja0Fs
aWdubWVudCA9IDQ7CisgICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSBmYWxzZTsKKwor
ICAgIG1FeHRlbnNpb25TdHJpbmcgPSBOVUxMOworICAgIG1SZW5kZXJlclN0cmluZyA9IE5VTEw7
CisKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1JbmRleERhdGFNYW5hZ2Vy
ID0gTlVMTDsKKyAgICBtQmxpdCA9IE5VTEw7CisgICAgbUxpbmVMb29wSUIgPSBOVUxMOworCisg
ICAgbUludmFsaWRFbnVtID0gZmFsc2U7CisgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOworICAg
IG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7CisgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7Cisg
ICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOworCisgICAgbUhhc0JlZW5D
dXJyZW50ID0gZmFsc2U7CisgICAgbUNvbnRleHRMb3N0ID0gZmFsc2U7CisgICAgbVJlc2V0U3Rh
dHVzID0gR0xfTk9fRVJST1I7CisgICAgbVJlc2V0U3RyYXRlZ3kgPSAobm90aWZ5UmVzZXRzID8g
R0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCA6IEdMX05PX1JFU0VUX05PVElGSUNBVElPTl9F
WFQpOworICAgIG1Sb2J1c3RBY2Nlc3MgPSByb2J1c3RBY2Nlc3M7CisKKyAgICBtU3VwcG9ydHNE
WFQxVGV4dHVyZXMgPSBmYWxzZTsKKyAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBmYWxzZTsK
KyAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBmYWxzZTsKKyAgICBtU3VwcG9ydHNFdmVudFF1
ZXJpZXMgPSBmYWxzZTsKKyAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzID0gZmFsc2U7Cisg
ICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7CisgICAgbU1heFN1cHBvcnRlZFNh
bXBsZXMgPSAwOworICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOworICAgIG1hcmtB
bGxTdGF0ZURpcnR5KCk7Cit9CisKK0NvbnRleHQ6On5Db250ZXh0KCkKK3sKKyAgICBpZiAobVN0
YXRlLmN1cnJlbnRQcm9ncmFtICE9IDApCisgICAgeworICAgICAgICBQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dy
YW0pOworICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIG1TdGF0ZS5jdXJy
ZW50UHJvZ3JhbSA9IDA7CisgICAgfQorICAgIG1DdXJyZW50UHJvZ3JhbUJpbmFyeS5zZXQoTlVM
TCk7CisKKyAgICB3aGlsZSAoIW1GcmFtZWJ1ZmZlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAg
ICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAg
ICB9CisKKyAgICB3aGlsZSAoIW1GZW5jZU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVs
ZXRlRmVuY2UobUZlbmNlTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAo
IW1RdWVyeU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFw
LmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBv
cnQuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0
LmJlZ2luKCktPnNlY29uZDsKKyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVs
dGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOworICAgIH0KKworICAgIGZvciAoaW50IHR5cGUgPSAw
OyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCisgICAgeworICAgICAgICBmb3Ig
KGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VO
SVRTX1ZURjsgc2FtcGxlcisrKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhdGUuc2FtcGxl
clRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykK
KyAgICB7CisgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KE5VTEwpOworICAg
IH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisg
ICAgeworICAgICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQo
TlVMTCk7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5U
OyBpKyspCisgICAgeworICAgICAgICBtU3RhdGUuYWN0aXZlUXVlcnlbaV0uc2V0KE5VTEwpOwor
ICAgIH0KKworICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQo
TlVMTCk7CisKKyAgICBtVGV4dHVyZTJEWmVyby5zZXQoTlVMTCk7CisgICAgbVRleHR1cmVDdWJl
TWFwWmVyby5zZXQoTlVMTCk7CisKKyAgICBkZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOworICAg
IGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKKyAgICBkZWxldGUgbUJsaXQ7CisgICAgZGVsZXRl
IG1MaW5lTG9vcElCOworCisgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpCisgICAgewor
ICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAg
bVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgpOworfQorCit2b2lkIENvbnRleHQ6Om1ha2VDdXJy
ZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAg
IG1EaXNwbGF5ID0gZGlzcGxheTsKKyAgICBtRGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgp
OworCisgICAgaWYgKCFtSGFzQmVlbkN1cnJlbnQpCisgICAgeworICAgICAgICBtRGV2aWNlQ2Fw
cyA9IG1EaXNwbGF5LT5nZXREZXZpY2VDYXBzKCk7CisKKyAgICAgICAgbVZlcnRleERhdGFNYW5h
Z2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOworICAgICAgICBtSW5k
ZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRleERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOworICAg
ICAgICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOworCisgICAgICAgIG1TdXBwb3J0c1NoYWRlck1v
ZGVsMyA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMs
IDApOworICAgICAgICBtTWF4aW11bVBvaW50U2l6ZSA9IG1EZXZpY2VDYXBzLk1heFBvaW50U2l6
ZTsKKyAgICAgICAgbVN1cHBvcnRzVmVydGV4VGV4dHVyZSA9IG1EaXNwbGF5LT5nZXRWZXJ0ZXhU
ZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlID0gbURp
c3BsYXktPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0lu
c3RhbmNpbmcgPSBtRGlzcGxheS0+Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsKKworICAgICAgICBt
TWF4VGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKChpbnQpbURldmljZUNhcHMu
TWF4VGV4dHVyZVdpZHRoLCAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24g
PSBzdGQ6Om1pbihtTWF4VGV4dHVyZURpbWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSk7CisgICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1l
bnNpb24gPSBtTWF4VGV4dHVyZURpbWVuc2lvbjsKKyAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9
IGxvZzIobU1heFRleHR1cmVEaW1lbnNpb24pICsgMTsKKyAgICAgICAgbU1heFRleHR1cmVBbmlz
b3Ryb3B5ID0gbURpc3BsYXktPmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpOwor
ICAgICAgICBUUkFDRSgiTWF4VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1l
bnNpb249JWQsIE1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVsPSVk
LCBNYXhUZXh0dXJlQW5pc290cm9weT0lZiIsCisgICAgICAgICAgICAgIG1NYXhUZXh0dXJlRGlt
ZW5zaW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNp
b24sIG1NYXhUZXh0dXJlTGV2ZWwsIG1NYXhUZXh0dXJlQW5pc290cm9weSk7CisKKyAgICAgICAg
Y29uc3QgRDNERk9STUFUIHJlbmRlckJ1ZmZlckZvcm1hdHNbXSA9CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEQzREZNVF9BOFI4RzhCOCwKKyAgICAgICAgICAgIEQzREZNVF9YOFI4RzhCOCwKKyAg
ICAgICAgICAgIEQzREZNVF9SNUc2QjUsCisgICAgICAgICAgICBEM0RGTVRfRDI0UzgKKyAgICAg
ICAgfTsKKworICAgICAgICBpbnQgbWF4ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBzaXplb2YocmVuZGVyQnVmZmVyRm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFU
KTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5ID0g
bmV3IGJvb2xbRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUyArIDFdOworICAgICAgICAgICAgbURp
c3BsYXktPmdldE11bHRpU2FtcGxlU3VwcG9ydChyZW5kZXJCdWZmZXJGb3JtYXRzW2ldLCBtdWx0
aXNhbXBsZUFycmF5KTsKKyAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbcmVuZGVyQnVm
ZmVyRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OworCisgICAgICAgICAgICBmb3IgKGlu
dCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RN
VUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWF4ID0gajsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKKwor
ICAgICAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBtRGlzcGxheS0+Z2V0RXZlbnRRdWVyeVN1
cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcyA9IG1EaXNwbGF5LT5n
ZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRFhUMVRleHR1cmVz
ID0gbURpc3BsYXktPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNE
WFQzVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7CisgICAgICAg
IG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQ1VGV4dHVyZVN1cHBvcnQo
KTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0
MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJm1TdXBwb3J0
c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDE2VGV4
dHVyZXMgPSBtRGlzcGxheS0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7Cisg
ICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVy
ZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgICAg
ICBtU3VwcG9ydHNEZXB0aFRleHR1cmVzID0gbURpc3BsYXktPmdldERlcHRoVGV4dHVyZVN1cHBv
cnQoKTsKKyAgICAgICAgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSBtTWF4VGV4
dHVyZUFuaXNvdHJvcHkgPj0gMi4wZjsKKyAgICAgICAgbVN1cHBvcnRzRGVyaXZhdGl2ZUluc3Ry
dWN0aW9ucyA9IChtRGV2aWNlQ2Fwcy5QUzIwQ2Fwcy5DYXBzICYgRDNEUFMyMENBUFNfR1JBRElF
TlRJTlNUUlVDVElPTlMpICE9IDA7CisgICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9IG1E
ZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKKworICAgICAgICBtTnVtQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsKKyAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1
cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1h
dHMgKz0gMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyArPSAx
OworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAgICAg
ICB7CisgICAgICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDE7CisgICAg
ICAgIH0KKworICAgICAgICBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7CisgICAgICAgIGluaXRSZW5k
ZXJlclN0cmluZygpOworCisgICAgICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOworICAgICAgICBt
U3RhdGUudmlld3BvcnRZID0gMDsKKyAgICAgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBzdXJm
YWNlLT5nZXRXaWR0aCgpOworICAgICAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNl
LT5nZXRIZWlnaHQoKTsKKworICAgICAgICBtU3RhdGUuc2Npc3NvclggPSAwOworICAgICAgICBt
U3RhdGUuc2Npc3NvclkgPSAwOworICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFj
ZS0+Z2V0V2lkdGgoKTsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBzdXJmYWNlLT5n
ZXRIZWlnaHQoKTsKKworICAgICAgICBtSGFzQmVlbkN1cnJlbnQgPSB0cnVlOworICAgIH0KKwor
ICAgIC8vIFdyYXAgdGhlIGV4aXN0aW5nIERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2Jq
ZWN0cyBhbmQgYXNzaWduIHRoZW0gdG8gdGhlICcwJyBuYW1lcworICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gc3VyZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Cisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3Rl
bmNpbCgpOworCisgICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyWmVybyA9IG5ldyBDb2xvcmJ1
ZmZlcihkZWZhdWx0UmVuZGVyVGFyZ2V0KTsKKyAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRo
U3RlbmNpbGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7
CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZm
ZXIoY29sb3JidWZmZXJaZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJvKTsKKworICAgIHNldEZy
YW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOworCisgICAgaWYgKGRlZmF1bHRSZW5kZXJU
YXJnZXQpCisgICAgeworICAgICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNp
bC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Cit9CisKKy8v
IFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1yZWxhdGVkIGRpcnR5IGZs
YWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQgcHJlLWRyYXcuCit2b2lk
IENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKK3sKKyAgICBmb3IgKGludCB0ID0gMDsgdCA8
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB0KyspCisgICAgeworICAgICAgICBtQXBwbGllZFRl
eHR1cmVTZXJpYWxQU1t0XSA9IDA7CisgICAgfQorCisgICAgZm9yIChpbnQgdCA9IDA7IHQgPCBN
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyB0KyspCisgICAgeworICAgICAgICBt
QXBwbGllZFRleHR1cmVTZXJpYWxWU1t0XSA9IDA7CisgICAgfQorCisgICAgbUFwcGxpZWRQcm9n
cmFtQmluYXJ5U2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IDA7
CisgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7CisgICAgbUFwcGxpZWRTdGVuY2ls
YnVmZmVyU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZElCU2VyaWFsID0gMDsKKyAgICBtRGVwdGhT
dGVuY2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtVmlld3BvcnRJbml0aWFsaXplZCA9IGZh
bHNlOworICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIG1W
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLm1hcmtTdGF0ZURpcnR5KCk7CisKKyAgICBtQ2xlYXJTdGF0
ZURpcnR5ID0gdHJ1ZTsKKyAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1EZXB0aFN0
YXRlRGlydHkgPSB0cnVlOworICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbUJsZW5k
U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBt
UG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9
IHRydWU7CisgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOworICAgIG1EaXRoZXJTdGF0ZURp
cnR5ID0gdHJ1ZTsKKyAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOworICAgIG1EeFVuaWZvcm1z
RGlydHkgPSB0cnVlOworfQorCit2b2lkIENvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkoKQor
eworICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworfQorCit2b2lkIENvbnRleHQ6Om1hcmtD
b250ZXh0TG9zdCgpCit7CisgICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVY
VF9PTl9SRVNFVF9FWFQpCisgICAgICAgIG1SZXNldFN0YXR1cyA9IEdMX1VOS05PV05fQ09OVEVY
VF9SRVNFVF9FWFQ7CisgICAgbUNvbnRleHRMb3N0ID0gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0
Ojppc0NvbnRleHRMb3N0KCkKK3sKKyAgICByZXR1cm4gbUNvbnRleHRMb3N0OworfQorCit2b2lk
IENvbnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1
ZSwgZmxvYXQgYWxwaGEpCit7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7
CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdyZWVuOworICAgIG1TdGF0ZS5j
b2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJsdWU7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5h
bHBoYSA9IGFscGhhOworfQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQgZGVw
dGgpCit7CisgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOworfQorCit2b2lkIENv
bnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKK3sKKyAgICBtU3RhdGUuc3RlbmNp
bENsZWFyVmFsdWUgPSBzdGVuY2lsOworfQorCit2b2lkIENvbnRleHQ6OnNldEN1bGxGYWNlKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJsZWQpCisgICAg
eworICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOworICAgICAgICBtQ3VsbFN0YXRl
RGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc0N1bGxGYWNlRW5hYmxl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsKK30KKwordm9pZCBDb250
ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAobVN0YXRlLmN1bGxNb2Rl
ICE9IG1vZGUpCisgICAgeworICAgICAgICBtU3RhdGUuY3VsbE1vZGUgPSBtb2RlOworICAgICAg
ICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRG
cm9udEZhY2UoR0xlbnVtIGZyb250KQoreworICAgIGlmIChtU3RhdGUuZnJvbnRGYWNlICE9IGZy
b250KQorICAgIHsKKyAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9IGZyb250OworICAgICAgICBt
RnJvbnRGYWNlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXREZXB0
aFRlc3QoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0ICE9IGVuYWJs
ZWQpCisgICAgeworICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZW5hYmxlZDsKKyAgICAgICAg
bURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzRGVw
dGhUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5kZXB0aFRlc3Q7Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpCit7CisgICAg
aWYgKG1TdGF0ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQorICAgIHsKKyAgICAgICAgbVN0YXRl
LmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7
CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIsIGZs
b2F0IHpGYXIpCit7CisgICAgbVN0YXRlLnpOZWFyID0gek5lYXI7CisgICAgbVN0YXRlLnpGYXIg
PSB6RmFyOworfQorCit2b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBpZiAobVN0YXRlLmJsZW5kICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuYmxl
bmQgPSBlbmFibGVkOworICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9
CisKK2Jvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
U3RhdGUuYmxlbmQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKEdMZW51bSBz
b3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdMZW51bSBkZXN0
QWxwaGEpCit7CisgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBzb3VyY2VSR0IgfHwK
KyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291cmNlQWxwaGEgfHwKKyAgICAg
ICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8CisgICAgICAgIG1TdGF0ZS5kZXN0
QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpCisgICAgeworICAgICAgICBtU3RhdGUuc291cmNlQmxl
bmRSR0IgPSBzb3VyY2VSR0I7CisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBkZXN0UkdC
OworICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNvdXJjZUFscGhhOworICAgICAg
ICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7CisgICAgICAgIG1CbGVuZFN0YXRl
RGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRCbGVuZENvbG9yKGZs
b2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQoreworICAgIGlm
IChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZENv
bG9yLmdyZWVuICE9IGdyZWVuIHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgIT0g
Ymx1ZSB8fAorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkKKyAgICB7
CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsKKyAgICAgICAgbVN0YXRlLmJs
ZW5kQ29sb3IuZ3JlZW4gPSBncmVlbjsKKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9
IGJsdWU7CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7CisgICAgICAg
IG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRC
bGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24pCit7
CisgICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8CisgICAg
ICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFFcXVhdGlvbikKKyAgICB7Cisg
ICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247CisgICAgICAgIG1T
dGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9uOworICAgICAgICBtQmxlbmRT
dGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFRl
c3QoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3QgIT0gZW5hYmxl
ZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGVuYWJsZWQ7CisgICAgICAg
IG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6Omlz
U3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnN0ZW5jaWxU
ZXN0OworfQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xlbnVtIHN0ZW5jaWxG
dW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1hc2spCit7CisgICAgaWYgKG1T
dGF0ZS5zdGVuY2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAorICAgICAgICBtU3RhdGUuc3RlbmNp
bFJlZiAhPSBzdGVuY2lsUmVmIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBzdGVu
Y2lsTWFzaykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5j
OworICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2lsUmVmID4gMCkgPyBzdGVuY2ls
UmVmIDogMDsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gc3RlbmNpbE1hc2s7CisgICAg
ICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6
OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5j
aWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQoreworICAgIGlmIChtU3RhdGUuc3Rl
bmNpbEJhY2tGdW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAorICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
TWFzayAhPSBzdGVuY2lsQmFja01hc2spCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEJh
Y2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYg
PSAoc3RlbmNpbEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVmIDogMDsKKyAgICAgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsKKyAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFdy
aXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFzaykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5z
dGVuY2lsV3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKKyAgICAgICAgbVN0ZW5jaWxTdGF0
ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tX
cml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQoreworICAgIGlmIChtU3RhdGUu
c3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spCisgICAgeworICAg
ICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFja1dyaXRlbWFzazsK
KyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
dGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWlsLCBHTGVudW0gc3Rl
bmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzcykKK3sKKyAgICBp
ZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8CisgICAgICAgIG1TdGF0ZS5z
dGVuY2lsUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRoRmFpbCB8fAorICAgICAgICBt
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCisgICAg
eworICAgICAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2lsRmFpbDsKKyAgICAgICAgbVN0
YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7CisgICAgICAg
IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzOworICAg
ICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0
OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbCwgR0xlbnVt
IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFz
cykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAhPSBzdGVuY2lsQmFja0ZhaWwg
fHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsQmFj
a1Bhc3NEZXB0aEZhaWwgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFz
cyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpCisgICAgeworICAgICAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWlsOworICAgICAgICBtU3RhdGUuc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOworICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOwor
ICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0
ZS5wb2x5Z29uT2Zmc2V0RmlsbCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnBv
bHlnb25PZmZzZXRGaWxsID0gZW5hYmxlZDsKKyAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURp
cnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0Rmls
bEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7
CisKK30KKwordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFj
dG9yLCBHTGZsb2F0IHVuaXRzKQoreworICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZhY3Rv
ciAhPSBmYWN0b3IgfHwKKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1bml0
cykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9yOwor
ICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7CisgICAgICAgIG1Qb2x5
Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNl
dFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5z
YW1wbGVBbHBoYVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5z
YW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOworICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0
eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVy
YWdlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292
ZXJhZ2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UoYm9vbCBlbmFibGVk
KQoreworICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkKKyAgICB7Cisg
ICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7CisgICAgICAgIG1TYW1wbGVT
dGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVDb3Zl
cmFnZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7
Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFs
dWUsIGJvb2wgaW52ZXJ0KQoreworICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAh
PSB2YWx1ZSB8fAorICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgIT0gaW52ZXJ0
KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0OworICAgICAgICBtU2Ft
cGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldFNjaXNz
b3JUZXN0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0ICE9IGVu
YWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOworICAg
ICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0
Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5zY2lz
c29yVGVzdDsKK30KKwordm9pZCBDb250ZXh0OjpzZXREaXRoZXIoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUu
ZGl0aGVyID0gZW5hYmxlZDsKKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOworICAg
IH0KK30KKworYm9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtU3RhdGUuZGl0aGVyOworfQorCit2b2lkIENvbnRleHQ6OnNldExpbmVXaWR0aChHTGZs
b2F0IHdpZHRoKQoreworICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0aDsKK30KKwordm9pZCBD
b250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpCit7CisgICAgbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludCA9IGhpbnQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludChHTGVudW0gaGludCkKK3sKKyAgICBtU3RhdGUuZnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IGhpbnQ7CisgICAgLy8gVE9ETzogUHJvcGFnYXRlIHRo
ZSBoaW50IHRvIHNoYWRlciB0cmFuc2xhdG9yIHNvIHdlIGNhbiB3cml0ZQorICAgIC8vIGRkeCwg
ZGR4X2NvYXJzZSwgb3IgZGR4X2ZpbmUgZGVwZW5kaW5nIG9uIHRoZSBoaW50LgorICAgIC8vIEln
bm9yZSBmb3Igbm93LiBJdCBpcyB2YWxpZCBmb3IgaW1wbGVtZW50YXRpb25zIHRvIGlnbm9yZSBo
aW50LgorfQorCit2b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIG1TdGF0ZS52aWV3cG9y
dFggPSB4OworICAgIG1TdGF0ZS52aWV3cG9ydFkgPSB5OworICAgIG1TdGF0ZS52aWV3cG9ydFdp
ZHRoID0gd2lkdGg7CisgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0OworfQorCit2
b2lkIENvbnRleHQ6OnNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKG1TdGF0ZS5zY2lzc29yWCAhPSB4IHx8
IG1TdGF0ZS5zY2lzc29yWSAhPSB5IHx8IAorICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoICE9
IHdpZHRoIHx8IG1TdGF0ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdodCkKKyAgICB7CisgICAgICAg
IG1TdGF0ZS5zY2lzc29yWCA9IHg7CisgICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IHk7CisgICAg
ICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSB3aWR0aDsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7CisgICAg
fQorfQorCit2b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwg
Ym9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIGlmIChtU3RhdGUuY29sb3JNYXNrUmVkICE9
IHJlZCB8fCBtU3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4gfHwKKyAgICAgICAgbVN0YXRl
LmNvbG9yTWFza0JsdWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0gYWxwaGEp
CisgICAgeworICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gcmVkOworICAgICAgICBtU3Rh
dGUuY29sb3JNYXNrR3JlZW4gPSBncmVlbjsKKyAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUg
PSBibHVlOworICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSBhbHBoYTsKKyAgICAgICAg
bU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVw
dGhNYXNrKGJvb2wgbWFzaykKK3sKKyAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAhPSBtYXNrKQor
ICAgIHsKKyAgICAgICAgbVN0YXRlLmRlcHRoTWFzayA9IG1hc2s7CisgICAgICAgIG1NYXNrU3Rh
dGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldEFjdGl2ZVNhbXBs
ZXIodW5zaWduZWQgaW50IGFjdGl2ZSkKK3sKKyAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IGFj
dGl2ZTsKK30KKworR0x1aW50IENvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7Cit9CisKK0dMdWludCBD
b250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBt
U3RhdGUuZHJhd0ZyYW1lYnVmZmVyOworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0UmVuZGVyYnVm
ZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgp
OworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsKK30KKworR0x1aW50IENvbnRleHQ6
OmdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0Cit7CisgICAgUXVlcnkgKnF1ZXJ5
T2JqZWN0ID0gTlVMTDsKKyAgICAKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0
YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF0uZ2V0KCk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VY
VDoKKyAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NB
TVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAocXVlcnlP
YmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gcXVlcnlPYmplY3QtPmlkKCk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBi
b29sIGVuYWJsZWQpCit7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1B
cnJheUVuYWJsZWQgPSBlbmFibGVkOworfQorCitjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJkNvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pCit7CisgICAg
cmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXTsKK30KKwordm9pZCBDb250
ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIg
KmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3Qg
dm9pZCAqcG9pbnRlcikKK3sKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0u
bUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0
dHJpYk51bV0ubVR5cGUgPSB0eXBlOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmli
TnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKK30KKworY29uc3Qgdm9pZCAqQ29udGV4
dDo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAor
eworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7
Cit9CisKK2NvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsKK30KKwordm9p
ZCBDb250ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKK3sKKyAgICBtU3Rh
dGUucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKK30KKworR0xpbnQgQ29udGV4dDo6Z2V0UGFj
a0FsaWdubWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50Owor
fQorCit2b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCit7
CisgICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKK30KKworR0xpbnQgQ29u
dGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnVu
cGFja0FsaWdubWVudDsKK30KKwordm9pZCBDb250ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09yZGVy
KGJvb2wgcmV2ZXJzZVJvd09yZGVyKQoreworICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVy
ID0gcmV2ZXJzZVJvd09yZGVyOworfQorCitib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93
T3JkZXIoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsK
K30KKworR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1SZXNv
dXJjZU1hbmFnZXItPmNyZWF0ZUJ1ZmZlcigpOworfQorCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRl
UHJvZ3JhbSgpCit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVByb2dyYW0o
KTsKK30KKworR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKK3sKKyAg
ICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlU2hhZGVyKHR5cGUpOworfQorCitHTHVp
bnQgQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmNyZWF0ZVRleHR1cmUoKTsKK30KKworR0x1aW50IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpCit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpOworfQorCisvLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBuYW1lCitHTHVpbnQg
Q29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtRnJh
bWVidWZmZXJIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKKworICAgIG1GcmFtZWJ1ZmZlck1h
cFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK0dMdWludCBDb250
ZXh0OjpjcmVhdGVGZW5jZSgpCit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFs
bG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbUZlbmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2Uo
bURpc3BsYXkpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVz
ZWQgcXVlcnkgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVF1ZXJ5KCkKK3sKKyAgICBHTHVp
bnQgaGFuZGxlID0gbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisKKyAgICBtUXVl
cnlNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit2b2lkIENv
bnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIGlmIChtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRCdWZmZXIoYnVmZmVyKSkKKyAgICB7CisgICAgICAgIGRldGFjaEJ1ZmZlcihi
dWZmZXIpOworICAgIH0KKyAgICAKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVCdWZmZXIo
YnVmZmVyKTsKK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikK
K3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9p
ZCBDb250ZXh0OjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVs
ZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBpZiAobVJlc291cmNlTWFuYWdlci0+
Z2V0VGV4dHVyZSh0ZXh0dXJlKSkKKyAgICB7CisgICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVy
ZSk7CisgICAgfQorCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJl
KTsKK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1
ZmZlcikKK3sKKyAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKHJlbmRl
cmJ1ZmZlcikpCisgICAgeworICAgICAgICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVy
KTsKKyAgICB9CisgICAgCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVy
KHJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1
aW50IGZyYW1lYnVmZmVyKQoreworICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1
ZmZlck9iamVjdCA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKKworICAgIGlm
IChmcmFtZWJ1ZmZlck9iamVjdCAhPSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAg
ICAgICBkZXRhY2hGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgbUZyYW1lYnVm
ZmVySGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZnJhbWVidWZmZXJPYmplY3QtPmZpcnN0KTsKKyAg
ICAgICAgZGVsZXRlIGZyYW1lYnVmZmVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1GcmFtZWJ1
ZmZlck1hcC5lcmFzZShmcmFtZWJ1ZmZlck9iamVjdCk7CisgICAgfQorfQorCit2b2lkIENvbnRl
eHQ6OmRlbGV0ZUZlbmNlKEdMdWludCBmZW5jZSkKK3sKKyAgICBGZW5jZU1hcDo6aXRlcmF0b3Ig
ZmVuY2VPYmplY3QgPSBtRmVuY2VNYXAuZmluZChmZW5jZSk7CisKKyAgICBpZiAoZmVuY2VPYmpl
Y3QgIT0gbUZlbmNlTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgbUZlbmNlSGFuZGxlQWxsb2Nh
dG9yLnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgZGVsZXRlIGZlbmNlT2Jq
ZWN0LT5zZWNvbmQ7CisgICAgICAgIG1GZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7CisgICAg
fQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSkKK3sKKyAgICBR
dWVyeU1hcDo6aXRlcmF0b3IgcXVlcnlPYmplY3QgPSBtUXVlcnlNYXAuZmluZChxdWVyeSk7Cisg
ICAgaWYgKHF1ZXJ5T2JqZWN0ICE9IG1RdWVyeU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1R
dWVyeUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHF1ZXJ5T2JqZWN0LT5maXJzdCk7CisgICAgICAg
IGlmIChxdWVyeU9iamVjdC0+c2Vjb25kKQorICAgICAgICB7CisgICAgICAgICAgICBxdWVyeU9i
amVjdC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgbVF1ZXJ5TWFwLmVy
YXNlKHF1ZXJ5T2JqZWN0KTsKKyAgICB9Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0QnVmZmVy
KEdMdWludCBoYW5kbGUpCit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZl
cihoYW5kbGUpOworfQorCitTaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxl
KQoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTaGFkZXIoaGFuZGxlKTsKK30K
KworUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKQoreworICAgIHJl
dHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKGhhbmRsZSk7Cit9CisKK1RleHR1cmUg
KkNvbnRleHQ6OmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSkKK3sKKyAgICByZXR1cm4gbVJlc291
cmNlTWFuYWdlci0+Z2V0VGV4dHVyZShoYW5kbGUpOworfQorCitSZW5kZXJidWZmZXIgKkNvbnRl
eHQ6OmdldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKQoreworICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKK30KKworRnJhbWVidWZmZXIgKkNv
bnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGdldEZyYW1lYnVmZmVy
KG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIpOworfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0
RHJhd0ZyYW1lYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwor
fQorCit2b2lkIENvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQor
eworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwor
CisgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3Zv
aWQgQ29udGV4dDo6YmluZEVsZW1lbnRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQor
eworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwor
CisgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwor
fQorCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCit7CisgICAg
bVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJF
XzJEKTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0
aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOworfQorCit2b2lkIENvbnRleHQ6
OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfQ1VCRSk7CisKKyAg
ICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxl
cl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRSZWFk
RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQoreworICAgIGlmICghZ2V0RnJhbWVidWZm
ZXIoZnJhbWVidWZmZXIpKQorICAgIHsKKyAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVm
ZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigpOworICAgIH0KKworICAgIG1TdGF0ZS5yZWFkRnJhbWVi
dWZmZXIgPSBmcmFtZWJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVm
ZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBu
ZXcgRnJhbWVidWZmZXIoKTsKKyAgICB9CisKKyAgICBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID0g
ZnJhbWVidWZmZXI7CisKKyAgICBtQm91bmREcmF3RnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZl
cihmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVp
bnQgcmVuZGVyYnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrUmVuZGVyYnVm
ZmVyQWxsb2NhdGlvbihyZW5kZXJidWZmZXIpOworCisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5z
ZXQoZ2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpOworfQorCit2b2lkIENvbnRleHQ6OnVz
ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9IG1T
dGF0ZS5jdXJyZW50UHJvZ3JhbTsKKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9ncmFt
OyAgICAgICAgICAgICAgIC8vIE11c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLCBv
dGhlcndpc2UgaXQgb25seSBnZXRzIGZsYWdnZWQuCisKKyAgICBpZiAocHJpb3JQcm9ncmFtICE9
IHByb2dyYW0pCisgICAgeworICAgICAgICBQcm9ncmFtICpuZXdQcm9ncmFtID0gbVJlc291cmNl
TWFuYWdlci0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgUHJvZ3JhbSAqb2xkUHJvZ3Jh
bSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJpb3JQcm9ncmFtKTsKKyAgICAgICAg
bUN1cnJlbnRQcm9ncmFtQmluYXJ5LnNldChOVUxMKTsKKyAgICAgICAgbUR4VW5pZm9ybXNEaXJ0
eSA9IHRydWU7CisKKyAgICAgICAgaWYgKG5ld1Byb2dyYW0pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG5ld1Byb2dyYW0tPmFkZFJlZigpOworICAgICAgICAgICAgbUN1cnJlbnRQcm9ncmFtQmlu
YXJ5LnNldChuZXdQcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAob2xkUHJvZ3JhbSkKKyAgICAgICAgeworICAgICAgICAgICAgb2xk
UHJvZ3JhbS0+cmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6
OmxpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIFByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgYm9vbCBs
aW5rZWQgPSBwcm9ncmFtT2JqZWN0LT5saW5rKCk7CisKKyAgICAvLyBpZiB0aGUgY3VycmVudCBw
cm9ncmFtIHdhcyByZWxpbmtlZCBzdWNjZXNzZnVsbHkgd2UKKyAgICAvLyBuZWVkIHRvIGluc3Rh
bGwgdGhlIG5ldyBleGVjdXRhYmxlcworICAgIGlmIChsaW5rZWQgJiYgcHJvZ3JhbSA9PSBtU3Rh
dGUuY3VycmVudFByb2dyYW0pCisgICAgeworICAgICAgICBtQ3VycmVudFByb2dyYW1CaW5hcnku
c2V0KHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSk7CisgICAgICAgIG1EeFVuaWZv
cm1zRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRQcm9ncmFtQmlu
YXJ5KEdMdWludCBwcm9ncmFtLCBjb25zdCB2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCkKK3sK
KyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgIGJvb2wgbG9hZGVkID0gcHJvZ3JhbU9iamVjdC0+c2V0UHJvZ3Jh
bUJpbmFyeShiaW5hcnksIGxlbmd0aCk7CisKKyAgICAvLyBpZiB0aGUgY3VycmVudCBwcm9ncmFt
IHdhcyByZWxvYWRlZCBzdWNjZXNzZnVsbHkgd2UKKyAgICAvLyBuZWVkIHRvIGluc3RhbGwgdGhl
IG5ldyBleGVjdXRhYmxlcworICAgIGlmIChsb2FkZWQgJiYgcHJvZ3JhbSA9PSBtU3RhdGUuY3Vy
cmVudFByb2dyYW0pCisgICAgeworICAgICAgICBtQ3VycmVudFByb2dyYW1CaW5hcnkuc2V0KHBy
b2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSk7CisgICAgICAgIG1EeFVuaWZvcm1zRGly
dHkgPSB0cnVlOworICAgIH0KKworfQorCit2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVt
IHRhcmdldCwgR0x1aW50IHF1ZXJ5KQoreworICAgIC8vIEZyb20gRVhUX29jY2x1c2lvbl9xdWVy
eV9ib29sZWFuOiBJZiBCZWdpblF1ZXJ5RVhUIGlzIGNhbGxlZCB3aXRoIGFuIDxpZD4gIAorICAg
IC8vIG9mIHplcm8sIGlmIHRoZSBhY3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIDx0YXJnZXQ+
IGlzIG5vbi16ZXJvIChmb3IgdGhlICAKKyAgICAvLyB0YXJnZXRzIEFOWV9TQU1QTEVTX1BBU1NF
RF9FWFQgYW5kIEFOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhULCBpZiAgCisgICAg
Ly8gdGhlIGFjdGl2ZSBxdWVyeSBmb3IgZWl0aGVyIHRhcmdldCBpcyBub24temVybyksIGlmIDxp
ZD4gaXMgdGhlIG5hbWUgb2YgYW4gCisgICAgLy8gZXhpc3RpbmcgcXVlcnkgb2JqZWN0IHdob3Nl
IHR5cGUgZG9lcyBub3QgbWF0Y2ggPHRhcmdldD4sIG9yIGlmIDxpZD4gaXMgdGhlCisgICAgLy8g
YWN0aXZlIHF1ZXJ5IG9iamVjdCBuYW1lIGZvciBhbnkgcXVlcnkgdHlwZSwgdGhlIGVycm9yIElO
VkFMSURfT1BFUkFUSU9OIGlzCisgICAgLy8gZ2VuZXJhdGVkLgorCisgICAgLy8gRW5zdXJlIG5v
IG90aGVyIHF1ZXJpZXMgYXJlIGFjdGl2ZQorICAgIC8vIE5PVEU6IElmIG90aGVyIHF1ZXJpZXMg
dGhhbiBvY2NsdXNpb24gYXJlIHN1cHBvcnRlZCwgd2Ugd2lsbCBuZWVkIHRvIGNoZWNrCisgICAg
Ly8gc2VwYXJhdGVseSB0aGF0OgorICAgIC8vICAgIGEpIFRoZSBxdWVyeSBJRCBwYXNzZWQgaXMg
bm90IHRoZSBjdXJyZW50IGFjdGl2ZSBxdWVyeSBmb3IgYW55IHRhcmdldC90eXBlCisgICAgLy8g
ICAgYikgVGhlcmUgYXJlIG5vIGFjdGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdl
dCAoYW5kIGluIHRoZSBjYXNlCisgICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VE
X0VYVCBhbmQgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsCisgICAgLy8g
ICAgICAgbm8gcXVlcnkgbWF5IGJlIGFjdGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVnaW5RdWVyeSB0
YXJnZXRzIGVpdGhlci4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7
IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlUXVlcnlbaV0uZ2V0KCkgIT0g
TlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFF1ZXJ5VHlwZSBxVHlwZTsKKyAgICBz
d2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9F
WFQ6IAorICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VY
VDogCisgICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElW
RTsgCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogCisgICAgICAgIEFTU0VSVChmYWxz
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBn
ZXRRdWVyeShxdWVyeSwgdHJ1ZSwgdGFyZ2V0KTsKKworICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3
YXMgb2J0YWluZWQgd2l0aCBnbEdlblF1ZXJpZXMKKyAgICBpZiAoIXF1ZXJ5T2JqZWN0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisK
KyAgICAvLyBjaGVjayBmb3IgdHlwZSBtaXNtYXRjaAorICAgIGlmIChxdWVyeU9iamVjdC0+Z2V0
VHlwZSgpICE9IHRhcmdldCkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgfQorCisgICAgLy8gc2V0IHF1ZXJ5IGFzIGFjdGl2ZSBmb3Igc3Bl
Y2lmaWVkIHRhcmdldAorICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KHF1ZXJ5T2Jq
ZWN0KTsKKworICAgIC8vIGJlZ2luIHF1ZXJ5CisgICAgcXVlcnlPYmplY3QtPmJlZ2luKCk7Cit9
CisKK3ZvaWQgQ29udGV4dDo6ZW5kUXVlcnkoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBRdWVyeVR5
cGUgcVR5cGU7CisKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FO
WV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAorICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVT
X1BBU1NFRDsgCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFX0VYVDogCisgICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNf
UEFTU0VEX0NPTlNFUlZBVElWRTsgCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogCisg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRdWVy
eSAqcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLmdldCgpOworCisgICAg
aWYgKHF1ZXJ5T2JqZWN0ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsKKwor
ICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KE5VTEwpOworfQorCit2b2lkIENvbnRl
eHQ6OnNldEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRlbGV0
ZSBtRnJhbWVidWZmZXJNYXBbMF07CisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOwor
ICAgIGlmIChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IDApCisgICAgeworICAgICAgICBtQm91
bmREcmF3RnJhbWVidWZmZXIgPSBidWZmZXI7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNl
dFJlbmRlcmJ1ZmZlclN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQor
eworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRlcmJ1
ZmZlci5nZXQoKTsKKyAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVm
ZmVyKTsKK30KKworRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVk
IGludCBoYW5kbGUpCit7CisgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVy
ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChmcmFtZWJ1ZmZlciA9
PSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyLT5zZWNvbmQ7
CisgICAgfQorfQorCitGZW5jZSAqQ29udGV4dDo6Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRs
ZSkKK3sKKyAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2UgPSBtRmVuY2VNYXAuZmluZChoYW5k
bGUpOworCisgICAgaWYgKGZlbmNlID09IG1GZW5jZU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmVu
Y2UtPnNlY29uZDsKKyAgICB9Cit9CisKK1F1ZXJ5ICpDb250ZXh0OjpnZXRRdWVyeSh1bnNpZ25l
ZCBpbnQgaGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUpCit7CisgICAgUXVlcnlNYXA6
Oml0ZXJhdG9yIHF1ZXJ5ID0gbVF1ZXJ5TWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChxdWVy
eSA9PSBtUXVlcnlNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCFxdWVyeS0+c2Vjb25kICYmIGNyZWF0ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcXVlcnktPnNlY29uZCA9IG5ldyBRdWVyeShoYW5kbGUs
IHR5cGUpOworICAgICAgICAgICAgcXVlcnktPnNlY29uZC0+YWRkUmVmKCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHF1ZXJ5LT5zZWNvbmQ7CisgICAgfQorfQorCitCdWZmZXIgKkNvbnRl
eHQ6OmdldEFycmF5QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdl
dCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCit7Cisg
ICAgcmV0dXJuIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7Cit9CisKK1Byb2dyYW1C
aW5hcnkgKkNvbnRleHQ6OmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCkKK3sKKyAgICByZXR1cm4g
bUN1cnJlbnRQcm9ncmFtQmluYXJ5LmdldCgpOworfQorCitUZXh0dXJlMkQgKkNvbnRleHQ6Omdl
dFRleHR1cmUyRCgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNh
bXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7Cit9CisKK1Rl
eHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFj
dGl2ZVNhbXBsZXIsIFRFWFRVUkVfQ1VCRSkpOworfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRT
YW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkKK3sK
KyAgICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0u
aWQoKTsKKworICAgIGlmICh0ZXhpZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMg
dG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAorICAgIHsK
KyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJE
WmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcFplcm8uZ2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbVN0YXRl
LnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmdldCgpOworfQorCitib29sIENvbnRleHQ6
OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJhbXMpCit7CisgICAgc3dp
dGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjogICAgICAg
ICAgICpwYXJhbXMgPSBHTF9UUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZUludmVydDsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBU
SF9XUklURU1BU0s6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoTWFzazsgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKKyAgICAg
ICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFza1JlZDsKKyAgICAgICAgcGFyYW1zWzFdID0g
bVN0YXRlLmNvbG9yTWFza0dyZWVuOworICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JN
YXNrQmx1ZTsKKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhhOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHln
b25PZmZzZXRGaWxsOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBI
QV9UT19DT1ZFUkFHRTogICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOyAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNz
b3JUZXN0OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVT
VDogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFRlc3Q7ICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5kZXB0aFRlc3Q7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5k
OyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RJVEhFUjogICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGl0aGVyOyAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBh
cmFtcyA9IG1Sb2J1c3RBY2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7IGJyZWFrOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIENvbnRleHQ6OmdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBh
cmFtcykKK3sKKyAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgaW5jbHVk
ZWQgaW4gb3VyIGludGVybmFsIGdldEZsb2F0diBpbXBsZW1lbnRhdGlvbgorICAgIC8vIGJlY2F1
c2UgaXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgR0wg
RVMgMi4wIHNwZWMgbmFtZXMKKyAgICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5
IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24gaW4gYW55CisgICAgLy8g
Y2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxp
Y2F0aW9uLgorICAgIHN3aXRjaCAocG5hbWUpCisgICAgeworICAgICAgY2FzZSBHTF9MSU5FX1dJ
RFRIOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUubGluZVdpZHRoOyAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6ICAgICpwYXJhbXMg
PSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZTsgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBU
SF9DTEVBUl9WQUxVRTogICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOyAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6ICAgICpwYXJh
bXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcjsgIGJyZWFrOworICAgICAgY2FzZSBHTF9Q
T0xZR09OX09GRlNFVF9VTklUUzogICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldFVu
aXRzOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Cisg
ICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOOworICAg
ICAgICBwYXJhbXNbMV0gPSBnbDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01BWDsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICAg
ICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU47CisgICAgICAg
IHBhcmFtc1sxXSA9IGdldE1heGltdW1Qb2ludFNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0RFUFRIX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7
CisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS56RmFyOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5j
b2xvckNsZWFyVmFsdWUucmVkOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JDbGVh
clZhbHVlLmdyZWVuOworICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
LmJsdWU7CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGE7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKKyAgICAgICAgcGFy
YW1zWzBdID0gbVN0YXRlLmJsZW5kQ29sb3IucmVkOworICAgICAgICBwYXJhbXNbMV0gPSBtU3Rh
dGUuYmxlbmRDb2xvci5ncmVlbjsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmJsZW5kQ29s
b3IuYmx1ZTsKKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGE7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9F
WFQ6CisgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgKnBh
cmFtcyA9IG1NYXhUZXh0dXJlQW5pc290cm9weTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1z
KQoreworICAgIC8vIFBsZWFzZSBub3RlOiBERVBUSF9DTEVBUl9WQUxVRSBpcyBub3QgaW5jbHVk
ZWQgaW4gb3VyIGludGVybmFsIGdldEludGVnZXJ2IGltcGxlbWVudGF0aW9uCisgICAgLy8gYmVj
YXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBH
TCBFUyAyLjAgc3BlYyBuYW1lcworICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVl
cnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBhbnkKKyAgICAv
LyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBw
bGljYXRpb24uIFlvdSBtYXkgZmluZCBpdCBpbiAKKyAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYu
CisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRU
UklCUzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RP
UlM6ICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAgICAgICAgICAg
KnBhcmFtcyA9IGdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOyAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0g
Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7CisgICAgICBjYXNl
IEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAqcGFyYW1zID0gZ2V0TWF4aW11
bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFM7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5J
Rk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0
b3JzKCk7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAg
ICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpOyAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAgICpw
YXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgLyogbm8gc2hhZGVyIGJpbmFy
eSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5
QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRUxFTUVOVF9B
UlJBWV9CVUZGRVJfQklORElORzogICAgICpwYXJhbXMgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVm
ZmVyLmlkKCk7ICAgICAgIGJyZWFrOworICAgICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJ
Tkc6ICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9C
SU5ESU5HX0FOR0xFCisgICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdM
RTogICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJh
bXMgPSBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NV
UlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQ
cm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1F
TlQ6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFja0FsaWdubWVudDsgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVS
X0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnVucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQ6ICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50OyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogKnBhcmFtcyA9IG1TdGF0
ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50OyBicmVhazsKKyAgICAgIGNhc2UgR0xfQUNU
SVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNh
bXBsZXIgKyBHTF9URVhUVVJFMCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsRnVuYzsgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmM7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxCYWNrUmVmOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tN
YXNrOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsRmFpbDsgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3M7ICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX1BBU1NfREVQVEhfUEFTUzogICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNz
RGVwdGhQYXNzOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JM
RU5EX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVu
ZEFscGhhOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJ
T05fUkdCOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTog
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2s7ICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
dGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NVQlBJ
WEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0la
RTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigp
OyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpF
OiAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzogICAK
KyAgICAgICAgcGFyYW1zWzBdID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9TQU1QTEVTX0FOR0xFOgorICAgICAgICB7Cisg
ICAgICAgICAgICBHTHNpemVpIG1heFNhbXBsZXMgPSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCk7
CisgICAgICAgICAgICBpZiAobWF4U2FtcGxlcyAhPSAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtYXhTYW1wbGVzOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGNhc2Ug
R0xfU0FNUExFX0JVRkZFUlM6ICAgICAgICAgICAgICAgICAgIAorICAgICAgY2FzZSBHTF9TQU1Q
TEVTOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmNv
bXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDE7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
U0FNUExFUzoKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGZyYW1lYnVmZmVyLT5nZXRT
YW1wbGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKKyAg
ICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CisgICAgICAgIHsK
KyAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIHR5cGU7CisgICAgICAgICAgICBpZiAoZ2V0Q3Vy
cmVudFJlYWRGb3JtYXRUeXBlKCZmb3JtYXQsICZ0eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JN
QVQpCisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBmb3JtYXQ7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gdHlwZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JU
X0RJTVM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1h
eChnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCksIGdldE1heGltdW1UZXh0dXJlRGlt
ZW5zaW9uKCkpOworICAgICAgICAgICAgcGFyYW1zWzBdID0gbWF4RGltZW5zaW9uOworICAgICAg
ICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5zaW9uOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VDsKKyAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0
dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9WSUVX
UE9SVDoKKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnZpZXdwb3J0WDsKKyAgICAgICAgcGFy
YW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0WTsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLnZp
ZXdwb3J0V2lkdGg7CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgorICAgICAgICBwYXJh
bXNbMF0gPSBtU3RhdGUuc2Npc3Nvclg7CisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5zY2lz
c29yWTsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLnNjaXNzb3JXaWR0aDsKKyAgICAgICAg
cGFyYW1zWzNdID0gbVN0YXRlLnNjaXNzb3JIZWlnaHQ7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERTogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5jdWxsTW9kZTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GUk9OVF9G
QUNFOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRURfQklUUzoKKyAgICAgIGNhc2Ug
R0xfR1JFRU5fQklUUzoKKyAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgorICAgICAgY2FzZSBHTF9B
TFBIQV9CSVRTOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOworCisgICAg
ICAgICAgICBpZiAoY29sb3JidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX1JFRF9CSVRTOiAgICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0UmVkU2l6ZSgpOyAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOiAqcGFyYW1zID0gY29s
b3JidWZmZXItPmdldEdyZWVuU2l6ZSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfQkxVRV9CSVRTOiAgKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRCbHVlU2l6ZSgpOyAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6ICpwYXJhbXMgPSBjb2xv
cmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgICAgICAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhi
dWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoKKyAgICAgICAgeworICAgICAgICAgICAg
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOworICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyKCk7CisKKyAgICAgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRT
dGVuY2lsU2l6ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdldE1heGlt
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElO
R19DVUJFX01BUDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1w
bGVyID4gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3Rp
dmVTYW1wbGVyXS5pZCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgorICAgICAgICAqcGFyYW1zID0gbVJl
c2V0U3RyYXRlZ3k7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9C
SU5BUllfRk9STUFUU19PRVM6CisgICAgICAgICpwYXJhbXMgPSAxOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6CisgICAgICAgICpwYXJh
bXMgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xl
bnVtICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcykKK3sKKyAgICAvLyBQbGVhc2Ugbm90
ZTogdGhlIHF1ZXJ5IHR5cGUgcmV0dXJuZWQgZm9yIERFUFRIX0NMRUFSX1ZBTFVFIGluIHRoaXMg
aW1wbGVtZW50YXRpb24KKyAgICAvLyBpcyBGTE9BVCByYXRoZXIgdGhhbiBJTlQsIGFzIHdvdWxk
IGJlIHN1Z2dlc3RlZCBieSB0aGUgR0wgRVMgMi4wIHNwZWMuIFRoaXMgaXMgZHVlCisgICAgLy8g
dG8gdGhlIGZhY3QgdGhhdCBpdCBpcyBzdG9yZWQgaW50ZXJuYWxseSBhcyBhIGZsb2F0LCBhbmQg
c28gd291bGQgcmVxdWlyZSBjb252ZXJzaW9uCisgICAgLy8gaWYgcmV0dXJuZWQgZnJvbSBDb250
ZXh0OjpnZXRJbnRlZ2Vydi4gU2luY2UgdGhpcyBjb252ZXJzaW9uIGlzIGFscmVhZHkgaW1wbGVt
ZW50ZWQgCisgICAgLy8gaW4gdGhlIGNhc2UgdGhhdCBvbmUgY2FsbHMgZ2xHZXRJbnRlZ2VydiB0
byByZXRyaWV2ZSBhIGZsb2F0LXR5cGVkIHN0YXRlIHZhcmlhYmxlLCB3ZQorICAgIC8vIHBsYWNl
IERFUFRIX0NMRUFSX1ZBTFVFIHdpdGggdGhlIGZsb2F0cy4gVGhpcyBzaG91bGQgbWFrZSBubyBk
aWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nCisgICAgLy8gYXBwbGljYXRpb24uCisgICAgc3dpdGNo
IChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRT
OgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAgICpu
dW1QYXJhbXMgPSBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICAg
IHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOworICAgICAgICAgICAgKm51bVBhcmFtcyA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhf
QVRUUklCUzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CisgICAg
ICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5F
RF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFM6CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAg
ICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgorICAgICAgY2FzZSBHTF9N
QVhfUkVOREVSQlVGRkVSX1NJWkU6CisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZP
Uk1BVFM6CisgICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAg
Y2FzZSBHTF9DVVJSRU5UX1BST0dSQU06CisgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOgor
ICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOgorICAgICAgY2FzZSBH
TF9VTlBBQ0tfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDoK
KyAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6CisgICAg
ICBjYXNlIEdMX1JFRF9CSVRTOgorICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOgorICAgICAgY2Fz
ZSBHTF9CTFVFX0JJVFM6CisgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6CisgICAgICBjYXNlIEdM
X0RFUFRIX0JJVFM6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoKKyAgICAgIGNhc2UgR0xf
RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01P
REU6CisgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6CisgICAgICBjYXNlIEdMX0FDVElWRV9URVhU
VVJFOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6CisgICAgICBjYXNlIEdMX1NURU5DSUxf
VkFMVUVfTUFTSzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6CisgICAgICBjYXNlIEdMX1NU
RU5DSUxfRkFJTDoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOgorICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfRlVOQzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19G
QUlMOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOgorICAgICAgY2FzZSBHTF9ERVBU
SF9GVU5DOgorICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOgorICAgICAgY2FzZSBHTF9CTEVO
RF9TUkNfQUxQSEE6CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6CisgICAgICBjYXNlIEdM
X0JMRU5EX0RTVF9BTFBIQToKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOgorICAg
ICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQToKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9X
UklURU1BU0s6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6CisgICAgICBj
YXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6CisgICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6
CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX1NJWkU6CisgICAgICBjYXNlIEdMX01BWF9DVUJF
X01BUF9URVhUVVJFX1NJWkU6CisgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVTOgorICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X1RZUEU6CisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOgor
ICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6CisgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR19DVUJFX01BUDoKKyAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFU
RUdZX0VYVDoKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgor
ICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgeworICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAg
ICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WSUVX
UE9SVF9ESU1TOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAg
ICAgICAgICpudW1QYXJhbXMgPSAyOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9WSUVXUE9SVDoKKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6CisgICAgICAgIHsK
KyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxF
UjoKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDoKKyAgICAgIGNhc2UgR0xf
REVQVEhfV1JJVEVNQVNLOgorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAg
IC8vIENVTExfRkFDRSB0aHJvdWdoIERJVEhFUiBhcmUgbmF0dXJhbCB0byBJc0VuYWJsZWQsCisg
ICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgLy8gYnV0IGNhbiBiZSByZXRy
aWV2ZWQgdGhyb3VnaCB0aGUgR2V0e1R5cGV9diBxdWVyaWVzLgorICAgICAgY2FzZSBHTF9TQU1Q
TEVfQUxQSEFfVE9fQ09WRVJBR0U6IC8vIEZvciB0aGlzIHB1cnBvc2UsIHRoZXkgYXJlIHRyZWF0
ZWQgaGVyZSBhcyBib29sLW5hdHVyYWwKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOgor
ICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDoK
KyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDoKKyAgICAgIGNhc2UgR0xfQkxFTkQ6CisgICAgICBj
YXNlIEdMX0RJVEhFUjoKKyAgICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDoK
KyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOworICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NP
TE9SX1dSSVRFTUFTSzoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwor
ICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICAgIGNhc2UgR0xfUE9MWUdP
Tl9PRkZTRVRfVU5JVFM6CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToKKyAg
ICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6CisgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6
CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CisgICAgICAgICAgICAq
bnVtUGFyYW1zID0gMTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0U6CisgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOgorICAgICAgICB7CisgICAgICAg
ICAgICAqdHlwZSA9IEdMX0ZMT0FUOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgor
ICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUg
PSBHTF9GTE9BVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6
CisgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgKnR5cGUg
PSBHTF9GTE9BVDsKKyAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCisvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRlcHRoIHN0
ZW5jaWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZAorLy8gc2Npc3NvciByZWN0YW5n
bGUgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCitib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFy
Z2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
T2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoIWZyYW1lYnVmZmVyT2Jq
ZWN0IHx8IGZyYW1lYnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZF
Ul9DT01QTEVURSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIC8vIGlmIHRoZXJlIGlzIG5v
IGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBjb2xvcmF0dGFjaG1l
bnQKKyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4gIFRoaXMgc2hvdWxkIG9u
bHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgorICAgIFJlbmRlcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyT2JqZWN0ID0gTlVMTDsKKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldENv
bG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXJP
YmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXIoKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldE51bGxDb2xvcmJ1ZmZlcigpOworICAgIH0KKyAgICBpZiAoIXJlbmRlcmJ1ZmZlck9i
amVjdCkKKyAgICB7CisgICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJidWZmZXIg
Zm9yIEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgcmVu
ZGVyVGFyZ2V0Q2hhbmdlZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRT
ZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNlcmlhbCgpOworICAgIGlmIChyZW5kZXJU
YXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCisgICAgeworICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5n
ZXRSZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxs
LiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0
CisgICAgICAgIH0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRh
cmdldCk7CisgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0
U2VyaWFsOworICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOyAvLyBTY2lzc29yIGFy
ZWEgbXVzdCBiZSBjbGFtcGVkIHRvIHJlbmRlciB0YXJnZXQncyBzaXplLS0gdGhpcyBpcyBkaWZm
ZXJlbnQgZm9yIGRpZmZlcmVudCByZW5kZXIgdGFyZ2V0cy4KKyAgICAgICAgcmVuZGVyVGFyZ2V0
Q2hhbmdlZCA9IHRydWU7CisgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0K
KworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIHVuc2ln
bmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7CisgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxi
dWZmZXJTZXJpYWwgPSAwOworICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZm
ZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhi
dWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgZGVw
dGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBpZiAo
IWRlcHRoU3RlbmNpbCkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2ls
IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhi
dWZmZXItPmdldFNlcmlhbCgpOworICAgIH0KKyAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgUmVu
ZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXIoKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3Rl
bmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpOworICAgIH0KKwor
ICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsIHx8
CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2Vy
aWFsIHx8CisgICAgICAgICFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAg
ICBtRGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKGRlcHRoU3RlbmNpbCk7CisgICAgICAg
IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICAgICAg
bUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZlclNlcmlhbDsKKyAgICAg
ICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoZGVw
dGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAg
fQorCisgICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkIHx8IHJlbmRlclRhcmdl
dENoYW5nZWQpCisgICAgeworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0
ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgaWYgKCFy
ZW5kZXJUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBD
b250ZXh0IG11c3QgYmUgbG9zdAorICAgICAgICB9CisgICAgICAgIHJlbmRlclRhcmdldC0+R2V0
RGVzYygmbVJlbmRlclRhcmdldERlc2MpOworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgfQor
CisgICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0OworCisgICAgZmxvYXQgek5lYXIgPSBjbGFtcDAx
KG1TdGF0ZS56TmVhcik7CisgICAgZmxvYXQgekZhciA9IGNsYW1wMDEobVN0YXRlLnpGYXIpOwor
CisgICAgaWYgKGlnbm9yZVZpZXdwb3J0KQorICAgIHsKKyAgICAgICAgdmlld3BvcnQuWCA9IDA7
CisgICAgICAgIHZpZXdwb3J0LlkgPSAwOworICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IG1SZW5k
ZXJUYXJnZXREZXNjLldpZHRoOworICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBtUmVuZGVyVGFy
Z2V0RGVzYy5IZWlnaHQ7CisgICAgICAgIHZpZXdwb3J0Lk1pblogPSAwLjBmOworICAgICAgICB2
aWV3cG9ydC5NYXhaID0gMS4wZjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmll
d3BvcnQuWCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPiht
UmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOworICAgICAgICB2aWV3cG9ydC5ZID0gY2xhbXAobVN0
YXRlLnZpZXdwb3J0WSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhl
aWdodCkpOworICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFdp
ZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgpIC0gc3Rh
dGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWCkpOworICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBj
bGFtcChtU3RhdGUudmlld3BvcnRIZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVy
VGFyZ2V0RGVzYy5IZWlnaHQpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWSkpOworICAg
ICAgICB2aWV3cG9ydC5NaW5aID0gek5lYXI7CisgICAgICAgIHZpZXdwb3J0Lk1heFogPSB6RmFy
OworICAgIH0KKworICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8IHZpZXdwb3J0LkhlaWdo
dCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8gcmVu
ZGVyCisgICAgfQorCisgICAgaWYgKHJlbmRlclRhcmdldENoYW5nZWQgfHwgIW1WaWV3cG9ydElu
aXRpYWxpemVkIHx8IG1lbWNtcCgmdmlld3BvcnQsICZtU2V0Vmlld3BvcnQsIHNpemVvZiBtU2V0
Vmlld3BvcnQpICE9IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWaWV3cG9ydCgmdmll
d3BvcnQpOworICAgICAgICBtU2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsKKyAgICAgICAgbVZpZXdw
b3J0SW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAobVNjaXNzb3JTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYg
KG1TdGF0ZS5zY2lzc29yVGVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVDVCByZWN0Owor
ICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2xhbXAobVN0YXRlLnNjaXNzb3JYLCAwTCwgc3RhdGlj
X2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgpKTsKKyAgICAgICAgICAgIHJlY3Qu
dG9wID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRl
clRhcmdldERlc2MuSGVpZ2h0KSk7CisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gY2xhbXAobVN0
YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+
KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7CisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IGNs
YW1wKG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0LCAwTCwgc3RhdGljX2Nh
c3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7CisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgbVNjaXNz
b3JTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJv
Z3JhbSAmJiBtRHhVbmlmb3Jtc0RpcnR5KQorICAgIHsKKyAgICAgICAgUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgR0xp
bnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1CaW5hcnktPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0
aW9uKCk7CisgICAgICAgIEdMZmxvYXQgeHlbMl0gPSB7MS4wZiAvIHZpZXdwb3J0LldpZHRoLCAt
MS4wZiAvIHZpZXdwb3J0LkhlaWdodH07CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOworCisgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBh
cmUgdXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWlu
Z3MoKS4KKyAgICAgICAgR0xpbnQgY29vcmQgPSBwcm9ncmFtQmluYXJ5LT5nZXREeENvb3JkTG9j
YXRpb24oKTsKKyAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRo
IC8gMi4wZiwgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZiwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGgg
LyAyLjBmLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9y
dFkgKyBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKKyAgICAgICAgcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CisKKyAgICAgICAgR0xpbnQgZGVwdGgg
PSBwcm9ncmFtQmluYXJ5LT5nZXREeERlcHRoTG9jYXRpb24oKTsKKyAgICAgICAgR0xmbG9hdCBk
elsyXSA9IHsoekZhciAtIHpOZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07Cisg
ICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKKworICAg
ICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aFJhbmdlTG9j
YXRpb24oKTsKKyAgICAgICAgR0xmbG9hdCBuZWFyRmFyRGlmZlszXSA9IHt6TmVhciwgekZhciwg
ekZhciAtIHpOZWFyfTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihkZXB0
aFJhbmdlLCAxLCBuZWFyRmFyRGlmZik7CisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQXBwbGllcyB0aGUgZml4ZWQt
ZnVuY3Rpb24gc3RhdGUgKGN1bGxpbmcsIGRlcHRoIHRlc3QsIGFscGhhIGJsZW5kaW5nLCBzdGVu
Y2lsaW5nLCBldGMpIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQordm9pZCBDb250ZXh0OjphcHBs
eVN0YXRlKEdMZW51bSBkcmF3TW9kZSkKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKworICAgIEZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOworCisgICAgR0xpbnQgZnJvbnRD
Q1cgPSBwcm9ncmFtQmluYXJ5LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKKyAgICBHTGludCBj
Y3cgPSAobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cpOworICAgIHByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOworCisgICAgR0xpbnQgcG9pbnRzT3JMaW5l
cyA9IHByb2dyYW1CaW5hcnktPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7CisgICAgR0xp
bnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOworICAgIHByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKKwor
ICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0QWRh
cHRlcklkZW50aWZpZXIoKTsKKyAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0gaWRlbnRp
Zmllci0+VmVuZG9ySWQgIT0gMHgxMDAyOworICAgIC8vIEFwcGFyZW50bHkgc29tZSBBVEkgY2Fy
ZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8gY29sb3IKKyAgICAvLyB3cml0
ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGluY29ycmVjdCByZXN1bHRzLiBJ
bnN0ZWFkLAorICAgIC8vIHNldCBhIG5vbnplcm8gY29sb3Igd3JpdGUgbWFzayBidXQgbW9kaWZ5
IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0IG5vCisgICAgLy8gZHJhd2luZyBpcyBkb25lLgorICAg
IC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9p
ZD0xNjkKKworICAgIGlmIChtQ3VsbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5KQorICAg
IHsKKyAgICAgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIGVzMmR4OjpDb252ZXJ0Q3Vs
bE1vZGUobVN0YXRlLmN1bGxNb2RlLCBtU3RhdGUuZnJvbnRGYWNlKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICAgICAgfQorCisgICAgICAgIG1D
dWxsU3RhdGVEaXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGF0ZURpcnR5
KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUp
OworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGVzMmR4
OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuZGVwdGhGdW5jKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBtRGVwdGhT
dGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCF6ZXJvQ29sb3JNYXNrQWxsb3dl
ZCAmJiAobU1hc2tTdGF0ZURpcnR5IHx8IG1CbGVuZFN0YXRlRGlydHkpKQorICAgIHsKKyAgICAg
ICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRy
dWU7CisgICAgfQorCisgICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCisgICAgeworICAgICAgICBp
ZiAobVN0YXRlLmJsZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKKworICAgICAgICAgICAgaWYg
KG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUuc291
cmNlQmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCisgICAgICAgICAg
ICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUu
ZGVzdEJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZB
Q1RPUiwgZXMyZHg6OkNvbnZlcnRDb2xvcihtU3RhdGUuYmxlbmRDb2xvcikpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKHVu
b3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+
KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0
ZS5ibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVu
ZENvbG9yLmFscGhhKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0
YXRlLnNvdXJjZUJsZW5kUkdCKSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19ERVNUQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0Qmxl
bmRSR0IpKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5E
T1AsIGVzMmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQikpOworCisg
ICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0ZS5zb3VyY2VCbGVu
ZEFscGhhIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gbVN0YXRl
LmRlc3RCbGVuZEFscGhhIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9u
UkdCICE9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5E
RU5BQkxFLCBUUlVFKTsKKworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NSQ0JMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5zb3Vy
Y2VCbGVuZEFscGhhKSk7CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfREVTVEJMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0
QmxlbmRBbHBoYSkpOworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0JMRU5ET1BBTFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVxdWF0
aW9uQWxwaGEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFU
RUFMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIG1C
bGVuZFN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxTdGF0ZURp
cnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUuc3RlbmNp
bFRlc3QgJiYgZnJhbWVidWZmZXJPYmplY3QtPmhhc1N0ZW5jaWwoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJV
RSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNU
RU5DSUxNT0RFLCBUUlVFKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5
IEQzRDkKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RF
TkNJTFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJT
VEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7CisgICAg
ICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1B
U0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOworICAgICAgICAgICAgaWYgKG1TdGF0ZS5zdGVu
Y2lsV3JpdGVtYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8fCAKKyAgICAgICAg
ICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgfHwgCisg
ICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja01h
c2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9i
YWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBtYXNr
IHZhbHVlcyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYKKyAgICAgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8
PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7CisKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNf
U1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3Rl
bmNpbFdyaXRlbWFzayk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3Rh
dGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NU
RU5DSUxGVU5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNv
bnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOworCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NU
RU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdM
aW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NX
ID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVu
Y2lsTWFzayk7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5m
cm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJ
TEZBSUwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVy
dFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFpG
QUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRo
RmFpbCkpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250
RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFT
UywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3Rl
bmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcykpOworCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RF
TkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNp
bEJhY2tXcml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0
YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NU
RU5DSUxGVU5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNv
bnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsKKworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJT
X1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsQmFja1Jl
ZiA8IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA6IG1heFN0ZW5j
aWwpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFj
ZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBt
U3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNE
UlNfQ0NXX1NURU5DSUxGQUlMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOworICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/
IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUu
c3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsKSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBE
M0RSU19DQ1dfU1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNz
KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7CisgICAgICAg
IH0KKworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICAgICAgbUZyb250
RmFjZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1NYXNrU3RhdGVEaXJ0eSkKKyAg
ICB7CisgICAgICAgIGludCBjb2xvck1hc2sgPSBlczJkeDo6Q29udmVydENvbG9yTWFzayhtU3Rh
dGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4sIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1T
dGF0ZS5jb2xvck1hc2tBbHBoYSk7CisgICAgICAgIGlmIChjb2xvck1hc2sgPT0gMCAmJiAhemVy
b0NvbG9yTWFza0FsbG93ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVuYWJsZSBncmVl
biBjaGFubmVsLCBidXQgc2V0IGJsZW5kaW5nIHNvIG5vdGhpbmcgd2lsbCBiZSBkcmF3bi4KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUs
IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4pOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7CisKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9aRVJPKTsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgRDNEQkxF
TkRfT05FKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5E
T1AsIEQzREJMRU5ET1BfQUREKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFC
TEUsIGNvbG9yTWFzayk7CisgICAgICAgIH0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWldSSVRFRU5BQkxFLCBtU3RhdGUuZGVwdGhNYXNrID8gVFJVRSA6IEZBTFNFKTsK
KworICAgICAgICBtTWFza1N0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobVBv
bHlnb25PZmZzZXRTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5wb2x5Z29u
T2Zmc2V0RmlsbCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVw
dGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAg
ICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAqKChEV09SRCop
Jm1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yKSk7CisgICAgICAgICAgICAgICAgZmxvYXQgZGVw
dGhCaWFzID0gbGRleHAobVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLShpbnQpKGRlcHRoYnVm
ZmVyLT5nZXREZXB0aFNpemUoKSkpOworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0RFUFRIQklBUywgKigoRFdPUkQqKSZkZXB0aEJpYXMpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsIDApOworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAwKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IGZhbHNlOworICAg
IH0KKworICAgIGlmIChtU2FtcGxlU3RhdGVEaXJ0eSkKKyAgICB7CisgICAgICAgIGlmIChtU3Rh
dGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBGSVhNRSgi
U2FtcGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7CisgICAgICAgIH0K
KworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElB
TElBUywgVFJVRSk7CisgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsKKyAgICAgICAgICAgIGlmICht
U3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZsb2F0IHRocmVzaG9sZCA9IDAuNWY7CisKKyAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTYW1wbGVzKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1hc2sgPDw9IDE7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKChpICsgMSkgKiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA+PSB0
aHJlc2hvbGQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRocmVzaG9sZCArPSAxLjBmOworICAgICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAxOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1hc2sgPSB+bWFzazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElT
QU1QTEVNQVNLLCBtYXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywg
MHhGRkZGRkZGRik7CisgICAgICAgIH0KKworICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IGZh
bHNlOworICAgIH0KKworICAgIGlmIChtRGl0aGVyU3RhdGVEaXJ0eSkKKyAgICB7CisgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwgbVN0YXRlLmRpdGhl
ciA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSBmYWxzZTsK
KyAgICB9Cit9CisKK0dMZW51bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcp
Cit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklC
U107CisKKyAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4
RGF0YShmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CisgICAgaWYgKGVyciAh
PSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
CisgICAgcmV0dXJuIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmFwcGx5RGVjbGFyYXRpb24obURl
dmljZSwgYXR0cmlidXRlcywgcHJvZ3JhbUJpbmFyeSwgaW5zdGFuY2VzLCByZXBlYXREcmF3KTsK
K30KKworLy8gQXBwbGllcyB0aGUgaW5kaWNlcyBhbmQgZWxlbWVudCBhcnJheSBiaW5kaW5ncyB0
byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK0dMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVy
KGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51
bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCit7CisgICAgR0xlbnVtIGVy
ciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRhKHR5cGUsIGNvdW50LCBtU3Rh
dGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpLCBpbmRpY2VzLCBpbmRleEluZm8pOworCisgICAg
aWYgKGVyciA9PSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIGlmIChpbmRleEluZm8tPnNl
cmlhbCAhPSBtQXBwbGllZElCU2VyaWFsKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRJbmRpY2VzKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOworICAgICAgICAgICAgbUFwcGxp
ZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIGVycjsKK30KKworLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNvbnN0
YW50cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJz
KCkKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dy
YW1CaW5hcnkoKTsKKworICAgIGlmIChwcm9ncmFtQmluYXJ5LT5nZXRTZXJpYWwoKSAhPSBtQXBw
bGllZFByb2dyYW1CaW5hcnlTZXJpYWwpCisgICAgeworICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsK
KyAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1CaW5h
cnktPmdldFBpeGVsU2hhZGVyKCk7CisKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIo
cGl4ZWxTaGFkZXIpOworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hh
ZGVyKTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgICAg
ICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJpYWwo
KTsKKyAgICB9CisKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7Cit9CisKKy8v
IEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0Qg
OSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygpCit7CisgICAgYXBwbHlUZXh0
dXJlcyhTQU1QTEVSX1BJWEVMKTsKKworICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1ZFUlRFWCk7CisgICAgfQorfQor
CisvLyBGb3IgZWFjaCBEaXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2
ZXJ0ZXggc3RhZ2UsCisvLyBsb29rcyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVy
ZSBpbWFnZSB1bml0IGFuZCB0ZXh0dXJlIHR5cGUsCisvLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBh
bmQgaXRzIGFkZHJlc3NpbmcvZmlsdGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUp
Lgordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
CisKKyAgICBpbnQgc2FtcGxlckNvdW50ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyA6IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7
ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0QgOSBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUK
KyAgICB1bnNpZ25lZCBpbnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExF
Ul9QSVhFTCkgPyBtQXBwbGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlh
bFZTOworICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkg
PyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOworICAgIGludCBzYW1wbGVyUmFuZ2UgPSBw
cm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOworCisgICAgZm9yIChpbnQg
c2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5k
ZXgrKykKKyAgICB7CisgICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1CaW5hcnktPmdl
dFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUg
aW1hZ2UgdW5pdCBpbmRleAorICAgICAgICBpbnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCAr
IGQzZFNhbXBsZXJPZmZzZXQ7CisKKyAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQorICAg
ICAgICB7CisgICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1CaW5h
cnktPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOworCisgICAgICAg
ICAgICBUZXh0dXJlICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRl
eHR1cmVUeXBlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5pc1Nh
bXBsZXJDb21wbGV0ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmUg
PSBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGludCB0ZXhTZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2Vy
aWFsKCk7CisKKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5k
ZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8fCB0ZXh0
dXJlLT5oYXNEaXJ0eUltYWdlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IHRleHR1cmUtPmdldFRleHR1cmUoKTsK
KworICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhd
ICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwUyA9IHRleHR1cmUtPmdl
dFdyYXBTKCk7CisgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwVCA9IHRleHR1cmUtPmdl
dFdyYXBUKCk7CisgICAgICAgICAgICAgICAgICAgIEdMZW51bSBtaW5GaWx0ZXIgPSB0ZXh0dXJl
LT5nZXRNaW5GaWx0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9
IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBtYXhB
bmlzb3Ryb3B5ID0gdGV4dHVyZS0+Z2V0TWF4QW5pc290cm9weSgpOworCisgICAgICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJF
U1NVLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBTKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NW
LCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBUKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFHRklMVEVS
LCBlczJkeDo6Q29udmVydE1hZ0ZpbHRlcihtYWdGaWx0ZXIsIG1heEFuaXNvdHJvcHkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgRDNEVEVYVFVSRUZJTFRFUlRZUEUgZDNkTWluRmlsdGVyLCBkM2RN
aXBGaWx0ZXI7CisgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0TWluRmlsdGVyKG1p
bkZpbHRlciwgJmQzZE1pbkZpbHRlciwgJmQzZE1pcEZpbHRlciwgbWF4QW5pc290cm9weSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBE
M0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbURl
dmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RN
aXBGaWx0ZXIpOworICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
ZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgdGV4dHVyZS0+Z2V0TG9kT2Zmc2V0KCkp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ry
b3B5KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWEFOSVNPVFJPUFks
IChEV09SRCltYXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShk
M2RTYW1wbGVyLCBkM2RUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4U2VyaWFsOworICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4
dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBOVUxMKTsKKyAgICAgICAgICAg
ICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IHNhbXBs
ZXJSYW5nZTsgc2FtcGxlckluZGV4IDwgc2FtcGxlckNvdW50OyBzYW1wbGVySW5kZXgrKykKKyAg
ICB7CisgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlckluZGV4
ICsgZDNkU2FtcGxlck9mZnNldCwgTlVMTCk7CisgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMpCit7CisgICAgRnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoZnJhbWVidWZm
ZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAg
ICB9CisKKyAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1
ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBD
b21wdXRlUGl0Y2god2lkdGgsIENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlw
ZSksIG1TdGF0ZS5wYWNrQWxpZ25tZW50KTsKKyAgICAvLyBzaXplZCBxdWVyeSBzYW5pdHkgY2hl
Y2sKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZFNpemUgPSBv
dXRwdXRQaXRjaCAqIGhlaWdodDsKKyAgICAgICAgaWYgKHJlcXVpcmVkU2l6ZSA+ICpidWZTaXpl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICB9CisgICAgfQorCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRh
cmdldCA9IGZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBpZiAoIXJlbmRlclRh
cmdldCkKKyAgICB7CisgICAgICAgIHJldHVybjsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdCwg
cmV0dXJuIHNpbGVudGx5CisgICAgfQorCisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAg
cmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKKworICAgIGlmIChkZXNjLk11bHRpU2FtcGxl
VHlwZSAhPSBEM0RNVUxUSVNBTVBMRV9OT05FKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGludG8g
bm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFyZ2V0CisgICAgICAgIHJlbmRlclRhcmdldC0+UmVs
ZWFzZSgpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
CisgICAgSFJFU1VMVCByZXN1bHQ7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN5c3RlbVN1cmZh
Y2UgPSBOVUxMOworICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhZ2V0UGFja1JldmVyc2VSb3dP
cmRlcigpICYmIGdldFBhY2tBbGlnbm1lbnQoKSA8PSA0ICYmIG1EaXNwbGF5LT5pc0QzZDlFeERl
dmljZSgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgIHggPT0gMCAmJiB5ID09IDAgJiYg
VUlOVCh3aWR0aCkgPT0gZGVzYy5XaWR0aCAmJiBVSU5UKGhlaWdodCkgPT0gZGVzYy5IZWlnaHQg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhH
OEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJiB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEU7
CisgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQorICAgIHsKKyAgICAgICAgLy8gVXNlIHRoZSBwaXhl
bHMgcHRyIGFzIGEgc2hhcmVkIGhhbmRsZSB0byB3cml0ZSBkaXJlY3RseSBpbnRvIGNsaWVudCdz
IG1lbW9yeQorICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1
cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1N
RU0sICZzeXN0ZW1TdXJmYWNlLCAmcGl4ZWxzKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUcnkgYWdhaW4gd2l0aG91dCB0aGUgc2hhcmVk
IGhhbmRsZQorICAgICAgICAgICAgZGlyZWN0VG9QaXhlbHMgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICghZGlyZWN0VG9QaXhlbHMpCisgICAgeworICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5I
ZWlnaHQsIGRlc2MuRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCBOVUxM
KTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmVzdWx0ID0gbURldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShyZW5kZXJUYXJnZXQs
IHN5c3RlbVN1cmZhY2UpOworICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIHJlbmRl
clRhcmdldCA9IE5VTEw7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAg
ICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRo
YXQgRDNEIHdpbGwgc29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcgorICAgICAgICAvLyBjb2Rl
cyB0aGFuIHRob3NlIGRvY3VtZW50ZWQuCisgICAgICAgIGlmIChjaGVja0RldmljZUxvc3QocmVz
dWx0KSkKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBpZiAoZGlyZWN0VG9QaXhlbHMp
CisgICAgeworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gY2xhbXAoeCwgMEws
IHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKKyAgICByZWN0LnRvcCA9IGNsYW1wKHks
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOworICAgIHJlY3QucmlnaHQgPSBj
bGFtcCh4ICsgd2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7CisgICAg
cmVjdC5ib3R0b20gPSBjbGFtcCh5ICsgaGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVz
Yy5IZWlnaHQpKTsKKworICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7CisgICAgcmVzdWx0ID0gc3lz
dGVtU3VyZmFjZS0+TG9ja1JlY3QoJmxvY2ssICZyZWN0LCBEM0RMT0NLX1JFQURPTkxZKTsKKwor
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAgICAgICByZXR1cm47ICAgLy8g
Tm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBpeGVsczsKKyAgICB1bnNpZ25lZCBzaG9ydCAqZGVz
dDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7CisKKyAgICB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2U7CisgICAgaW50IGlucHV0UGl0Y2g7CisgICAgaWYgKGdldFBhY2tSZXZlcnNlUm93T3JkZXIo
KSkKKyAgICB7CisgICAgICAgIHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykg
KyBsb2NrLlBpdGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKKyAgICAgICAgaW5w
dXRQaXRjaCA9IC1sb2NrLlBpdGNoOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBz
b3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsKKyAgICAgICAgaW5wdXRQaXRjaCA9
IGxvY2suUGl0Y2g7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUgPSAw
OworCisgICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgorICAgICAgICBm
b3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRF
KQorICAgIHsKKyAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7CisgICAgfQorICAgIGVsc2UgaWYg
KChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYKKyAgICAgICAgICAgICBmb3JtYXQg
PT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzRfUkVWX0VYVCkgfHwKKyAgICAgICAgICAgICAoZGVzYy5Gb3JtYXQgPT0gRDNERk1U
X0ExUjVHNUI1ICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCisgICAg
ICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKQorICAg
IHsKKyAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKGRlc2Mu
Rm9ybWF0ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCisgICAgICAgICAgICAgZm9ybWF0ID09
IEdMX1JHQkEgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQorICAg
IHsKKyAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7CisgICAgfQorICAgIGVsc2UgaWYgKGRlc2Mu
Rm9ybWF0ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCisgICAgICAgICAgICAgZm9ybWF0ID09
IEdMX1JHQkEgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAg
ICAgZmFzdFBpeGVsU2l6ZSA9IDE2OworICAgIH0KKworICAgIGZvciAoaW50IGogPSAwOyBqIDwg
cmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQorICAgIHsKKyAgICAgICAgaWYgKGZhc3RQaXhl
bFNpemUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBmb3Jt
YXRzIHdoaWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246CisgICAgICAgICAgICAvLyBEM0RGTVRf
QThSOEc4QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCisgICAgICAgICAgICAvLyBEM0RGTVRfQTRS
NEc0QjQgdG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQKKyAgICAgICAgICAg
IC8vIEQzREZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VY
VAorICAgICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIxNkYgdG8gUkdCQS9IQUxGX0ZMT0FU
X09FUworICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkczMlIzMkYgdG8gUkdCQS9GTE9BVAor
ICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5v
IGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KKyAgICAgICAgICAgIG1lbWNw
eShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLAorICAgICAgICAgICAgICAgICAgIHNvdXJjZSArIGog
KiBpbnB1dFBpdGNoLAorICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0
KSAqIGZhc3RQaXhlbFNpemUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCisgICAgICAg
ICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgICAgIHR5cGUgPT0g
R0xfVU5TSUdORURfQllURSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZv
ciBzd2FwcGluZyByZWQgd2l0aCBibHVlCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkg
KyBqICogaW5wdXRQaXRjaCk7CisgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0
ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KKyAgICAgICAgICAgICAgICAgICAgKGFyZ2Ig
JiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCisgICAgICAgICAg
ICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVl
CisgICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3Zl
IGJsdWUgdG8gcmVkCisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVm
dDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCByOworICAgICAgICAgICAgZmxv
YXQgZzsKKyAgICAgICAgICAgIGZsb2F0IGI7CisgICAgICAgICAgICBmbG9hdCBhOworCisgICAg
ICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAq
IGkgKyBqICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Cisg
ICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsK
KyAgICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3RTAp
OworICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4Rjgw
MCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNl
ICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChh
cmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKGFy
Z2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOworICAgICAgICAgICAgICAgICAgICBnID0g
KGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOworICAgICAgICAgICAgICAgICAgICBy
ID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4
Qjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
YXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7
CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAv
IDB4RkYwMDAwMDApOworICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZG
KSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAm
IDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAgICAgICAgICAg
ciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfWDhSOEc4Qjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5w
dXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7CisgICAgICAgICAgICAg
ICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKKyAg
ICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAw
MEZGMDApOworICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgx
LjBmIC8gMHgwMEZGMDAwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25l
ZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKworICAgICAgICAgICAg
ICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7Cisg
ICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAw
MDAwM0ZGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAo
MS4wZiAvIDB4MDAwRkZDMDApOworICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNG
RjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJG
OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0
cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5k
CisgICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGog
KiBpbnB1dFBpdGNoKSArIDApOworICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxvYXQqKShz
b3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMik7
CisgICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGog
KiBpbnB1dFBpdGNoKSArIDMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFy
ZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAorICAgICAgICAg
ICAgICAgICAgICByID0gZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJj
ZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCkpOworICAgICAgICAgICAgICAgICAgICBn
ID0gZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsg
aiAqIGlucHV0UGl0Y2gpICsgMSkpOworICAgICAgICAgICAgICAgICAgICBiID0gZmxvYXQxNlRv
RmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0
Y2gpICsgMikpOworICAgICAgICAgICAgICAgICAgICBhID0gZmxvYXQxNlRvRmxvYXQzMigqKCh1
bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMykpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5
cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNo
ICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOworICAgICAgICAgICAgICAg
ICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhciko
MjU1ICogZyArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOworICAgICAg
ICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWdu
ZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhU
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgICAg
IGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUg
KiBiICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0
UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7CisgICAgICAgICAg
ICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBj
aGFyKSgyNTUgKiByICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBq
ICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6CisgICAgICAgICAgICAgICAgICAgIC8vIEFjY29y
ZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVj
dGFuZ2xlcyIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFj
a2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAg
MTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAx
ICAgIDAKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgICAgICAgICAgICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAg
ICAgICAgfCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKKyAgICAgICAg
ICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAg
ICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQs
IEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICBkZXN0MTZb
aSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwK
KyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYp
IDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICog
ZyArIDAuNWYpIDw8IDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hv
cnQpKDE1ICogYiArIDAuNWYpIDw8IDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgor
ICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBp
biB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KKyAgICAgICAgICAg
ICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAg
ICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAg
ICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCisgICAgICAgICAgICAgICAgICAgIC8v
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8
ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAx
c3QgY29tcG9uZW50ICAgICB8CisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VY
VCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4K
KyAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTApIHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF81XzZfNToKKyAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0
Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAg
KCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCkgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsgMC41ZikgPDwgNSkgfAorICAgICAg
ICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRw
dXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVk
IGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSAr
IGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHN5c3RlbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKworICAg
IHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhcihHTGJp
dGZpZWxkIG1hc2spCit7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0
RHJhd0ZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1l
YnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTik7CisgICAgfQorCisgICAgRFdPUkQgZmxhZ3MgPSAwOworCisgICAgaWYgKG1hc2sgJiBH
TF9DT0xPUl9CVUZGRVJfQklUKQorICAgIHsKKyAgICAgICAgbWFzayAmPSB+R0xfQ09MT1JfQlVG
RkVSX0JJVDsKKworICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVy
VHlwZSgpICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IEQzRENM
RUFSX1RBUkdFVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtYXNrICYgR0xfREVQVEhf
QlVGRkVSX0JJVCkKKyAgICB7CisgICAgICAgIG1hc2sgJj0gfkdMX0RFUFRIX0JVRkZFUl9CSVQ7
CisgICAgICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRE
ZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFn
cyB8PSBEM0RDTEVBUl9aQlVGRkVSOworICAgICAgICB9CisgICAgfQorCisgICAgR0x1aW50IHN0
ZW5jaWxVbm1hc2tlZCA9IDB4MDsKKworICAgIGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJf
QklUKQorICAgIHsKKyAgICAgICAgbWFzayAmPSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAg
ICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xf
Tk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3Rl
bmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3Rl
bmNpbCgpOworICAgICAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICAgICAgICAgIGRlcHRo
U3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7CisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsKKworICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZHgyZXM6Okdl
dFN0ZW5jaWxTaXplKGRlc2MuRm9ybWF0KTsKKyAgICAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9
ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKKworICAgICAgICAgICAgaWYgKHN0ZW5jaWxVbm1h
c2tlZCAhPSAweDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRDNE
Q0xFQVJfU1RFTkNJTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChtYXNrICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgfQorCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldCh0cnVlKSkgICAvLyBDbGlw
cyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0
CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRDNEQ09MT1IgY29sb3IgPSBE
M0RDT0xPUl9BUkdCKHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xl
YXJWYWx1ZS5yZWQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08
OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiksIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWUpKTsKKyAg
ICBmbG9hdCBkZXB0aCA9IGNsYW1wMDEobVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSk7CisgICAgaW50
IHN0ZW5jaWwgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOworCisgICAg
Ym9vbCBhbHBoYVVubWFza2VkID0gKGR4MmVzOjpHZXRBbHBoYVNpemUobVJlbmRlclRhcmdldERl
c2MuRm9ybWF0KSA9PSAwKSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGE7CisKKyAgICBjb25zdCBi
b29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9TVEVOQ0lMKSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU3RhdGUuc3RlbmNp
bFdyaXRlbWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2VkOworICAgIGNv
bnN0IGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQp
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEobVN0YXRlLmNvbG9y
TWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3JlZW4gJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAmJiBhbHBoYVVubWFza2Vk
KTsKKworICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8fCBuZWVkTWFza2VkU3RlbmNpbENs
ZWFyKQorICAgIHsKKyAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBhbGwgcGF0
aHMgZnJvbSB0aGlzIHBvaW50IHRvIHRoZSBjbGVhciBjYWxsIGlzIHNhdmVkLgorICAgICAgICAv
LyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIG9ubHkgc29tZSBwYXRocyB3aWxsIGJlIGZsYWdn
ZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhhdAorICAgICAgICAvLyAgdGhhdCBwYXRoIGlzIHRha2Vu
LgorICAgICAgICBIUkVTVUxUIGhyOworICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBociA9IG1EZXZpY2UtPkJlZ2luU3Rh
dGVCbG9jaygpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgRkFMU0UpOwor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9B
TFdBWVMpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJM
RSwgRkFMU0UpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VM
TE1PREUsIEQzRENVTExfTk9ORSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJM
RSwgMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldS
SVRFRU5BQkxFLCAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyKE5VTEwpOworICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwor
ICAgICAgICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElGRlVT
RSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgTlVMTCwgMCwgMCk7
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhB
QkxFTkRFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdl
U3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRB
X1RGQUNUT1IpOworICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwg
RDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RGQUNUT1Ip
OworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RP
UiwgY29sb3IpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVM
VElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
KGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGhyID0gbURldmljZS0+RW5kU3RhdGVCbG9jaygmbU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZSk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8
fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsK
KyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5V
TEwpOworCisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGhyID0gbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+Q2FwdHVyZSgp
OworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAgICB9CisKKyAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlT
KTsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFMU0Up
OworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VM
TF9OT05FKTsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUs
IEQzREZJTExfU09MSUQpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19B
TFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworCisgICAgICAgIGlmIChmbGFncyAm
IEQzRENMRUFSX1RBUkdFVCkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgZXMyZHg6OkNvbnZlcnRDb2xvck1hc2so
bVN0YXRlLmNvbG9yTWFza1JlZCwgbVN0YXRlLmNvbG9yTWFza0dyZWVuLCBtU3RhdGUuY29sb3JN
YXNrQmx1ZSwgbVN0YXRlLmNvbG9yTWFza0FscGhhKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
T0xPUldSSVRFRU5BQkxFLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGVuY2lsVW5t
YXNrZWQgIT0gMHgwICYmIChmbGFncyAmIEQzRENMRUFSX1NURU5DSUwpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBU
UlVFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVE
U1RFTkNJTE1PREUsIEZBTFNFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxSRUYsIHN0ZW5jaWwpOworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0
ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1RFTkNJTEZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxaRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExB
Q0UpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFBB
U1MsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0
eSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICAg
ICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBtRGV2aWNlLT5TZXRG
VkYoRDNERlZGX1hZWlJIVyk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7CisgICAgICAgIG1EZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEs
IEQzRFRBX1RGQUNUT1IpOworICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgw
LCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgICAgICBtRGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsK
KyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29s
b3IpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1B
U0ssIDB4RkZGRkZGRkYpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFt
U291cmNlRnJlcShpLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IHF1YWRbNF1bNF07
ICAgLy8gQSBxdWFkcmlsYXRlcmFsIGNvdmVyaW5nIHRoZSB0YXJnZXQsIGFsaWduZWQgdG8gbWF0
Y2ggdGhlIGVkZ2VzCisgICAgICAgIHF1YWRbMF1bMF0gPSAtMC41ZjsKKyAgICAgICAgcXVhZFsw
XVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCAtIDAuNWY7CisgICAgICAgIHF1YWRbMF1b
Ml0gPSAwLjBmOworICAgICAgICBxdWFkWzBdWzNdID0gMS4wZjsKKworICAgICAgICBxdWFkWzFd
WzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAwLjVmOworICAgICAgICBxdWFkWzFdWzFd
ID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsKKyAgICAgICAgcXVhZFsxXVsyXSA9
IDAuMGY7CisgICAgICAgIHF1YWRbMV1bM10gPSAxLjBmOworCisgICAgICAgIHF1YWRbMl1bMF0g
PSAtMC41ZjsKKyAgICAgICAgcXVhZFsyXVsxXSA9IC0wLjVmOworICAgICAgICBxdWFkWzJdWzJd
ID0gMC4wZjsKKyAgICAgICAgcXVhZFsyXVszXSA9IDEuMGY7CisKKyAgICAgICAgcXVhZFszXVsw
XSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0gMC41ZjsKKyAgICAgICAgcXVhZFszXVsxXSA9
IC0wLjVmOworICAgICAgICBxdWFkWzNdWzJdID0gMC4wZjsKKyAgICAgICAgcXVhZFszXVszXSA9
IDEuMGY7CisKKyAgICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICAgICAgbURldmlj
ZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihm
bG9hdFs0XSkpOworCisgICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1pCVUZGRVIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUs
IFRSVUUpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRF
RU5BQkxFLCBUUlVFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENM
RUFSX1pCVUZGRVIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAg
ICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgaWYgKGZsYWdzKQorICAgIHsKKyAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVM
TCwgZmxhZ3MsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgfQorfQorCit2b2lkIENvbnRl
eHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIGluc3RhbmNlcykKK3sKKyAgICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQor
CisgICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOworICAgIGludCBwcmltaXRpdmVD
b3VudDsKKworICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQs
ICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQorICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKworICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFs
c2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5U3RhdGUobW9k
ZSk7CisKKyAgICBHTHNpemVpIHJlcGVhdERyYXcgPSAxOworICAgIEdMZW51bSBlcnIgPSBhcHBs
eVZlcnRleEJ1ZmZlcihmaXJzdCwgY291bnQsIGluc3RhbmNlcywgJnJlcGVhdERyYXcpOworICAg
IGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoZXJy
KTsKKyAgICB9CisKKyAgICBhcHBseVNoYWRlcnMoKTsKKyAgICBhcHBseVRleHR1cmVzKCk7CisK
KyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoTlVM
TCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgIH0KKworICAgIGlmICghc2tpcERyYXcobW9kZSkpCisgICAgeworICAgICAgICBtRGlzcGxh
eS0+c3RhcnRTY2VuZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9M
T09QKQorICAgICAgICB7CisgICAgICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIEdMX05PTkUs
IE5VTEwsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlcyA+IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFN0YXRpY0luZGV4QnVmZmVyICpjb3VudGluZ0lCID0gbUlu
ZGV4RGF0YU1hbmFnZXItPmdldENvdW50aW5nSW5kaWNlcyhjb3VudCk7CisgICAgICAgICAgICBp
ZiAoY291bnRpbmdJQikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobUFwcGxp
ZWRJQlNlcmlhbCAhPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoY291bnRpbmdJQi0+Z2V0
QnVmZmVyKCkpOworICAgICAgICAgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gY291bnRp
bmdJQi0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwcmltaXRp
dmVUeXBlLCAwLCAwLCBjb3VudCwgMCwgcHJpbWl0aXZlQ291bnQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBjb3VudGluZyBpbmRleCBidWZmZXIg
Zm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSAgIC8vIFJlZ3VsYXIgY2FzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5E
cmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2ZUNvdW50KTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdM
c2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkg
aW5zdGFuY2VzKQoreworICAgIGlmICghbVN0YXRlLmN1cnJlbnRQcm9ncmFtKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBp
ZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIEQzRFBS
SU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKKyAgICBpbnQgcHJpbWl0aXZlQ291bnQ7CisKKyAg
ICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZl
VHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisKKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkKKyAgICB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KGZhbHNlKSkKKyAgICB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlKG1vZGUpOworCisgICAg
VHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87CisgICAgR0xlbnVtIGVyciA9IGFwcGx5SW5k
ZXhCdWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZpbmRleEluZm8pOworICAgIGlm
IChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsK
KyAgICB9CisKKyAgICBHTHNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4IC0g
aW5kZXhJbmZvLm1pbkluZGV4ICsgMTsKKyAgICBHTHNpemVpIHJlcGVhdERyYXcgPSAxOworICAg
IGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQs
IGluc3RhbmNlcywgJnJlcGVhdERyYXcpOworICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKKyAgICB9CisKKyAgICBhcHBseVNoYWRl
cnMoKTsKKyAgICBhcHBseVRleHR1cmVzKCk7CisKKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFt
QmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIGlmICghc2tpcERyYXco
bW9kZSkpCisgICAgeworICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOworCisgICAgICAg
IGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKKyAgICAgICAgeworICAgICAgICAgICAgZHJhd0xp
bmVMb29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgpOyAgIAorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCByZXBlYXREcmF3OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJ
bmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbmRleEluZm8u
c3RhcnRJbmRleCwgcHJpbWl0aXZlQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCisvLyBJbXBsZW1lbnRzIGdsRmx1c2ggd2hlbiBibG9jayBpcyBmYWxzZSwgZ2xG
aW5pc2ggd2hlbiBibG9jayBpcyB0cnVlCit2b2lkIENvbnRleHQ6OnN5bmMoYm9vbCBibG9jaykK
K3sKKyAgICBtRGlzcGxheS0+c3luYyhibG9jayk7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZHJhd0xp
bmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMs
IGludCBtaW5JbmRleCkKK3sKKyAgICAvLyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZvciBhbiBpbmRl
eGVkIGRyYXcKKyAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIG1TdGF0ZS5lbGVtZW50QXJyYXlC
dWZmZXIuZ2V0KCkpCisgICAgeworICAgICAgICBCdWZmZXIgKmluZGV4QnVmZmVyID0gbVN0YXRl
LmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7CisgICAgICAgIGluZGljZXMgPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kZXhCdWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7Cisg
ICAgfQorCisgICAgVUlOVCBzdGFydEluZGV4ID0gMDsKKyAgICBib29sIHN1Y2NlZWRlZCA9IGZh
bHNlOworCisgICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCisgICAgeworICAgICAgICBj
b25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291bnQgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQp
OworCisgICAgICAgIGlmICghbUxpbmVMb29wSUIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1M
aW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5E
RVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDMyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtTGluZUxvb3BJQikKKyAgICAgICAgeworICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2Vy
dmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKTsKKworICAgICAgICAgICAgVUlO
VCBvZmZzZXQgPSAwOworICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkp
OworICAgICAgICAgICAgc3RhcnRJbmRleCA9IG9mZnNldCAvIDQ7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX05P
TkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFbaV0gPSBpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRp
Y2VzKVswXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMp
W2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291
bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVpbnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgpOworICAgICAgICAgICAgICAg
IHN1Y2NlZWRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IHNwYWNlTmVlZGVkID0gKGNvdW50ICsgMSkg
KiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworCisgICAgICAgIGlmICghbUxpbmVMb29wSUIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVm
ZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDE2KTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtTGluZUxvb3BJQikKKyAgICAgICAgeworICAgICAg
ICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURf
U0hPUlQpOworCisgICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7CisgICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obUxpbmVMb29w
SUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOworICAgICAgICAgICAgc3RhcnRJbmRleCA9
IG9mZnNldCAvIDI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkYXRhKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1
c2hvcnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4o
aW5kaWNlcylbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1MaW5lTG9v
cElCLT51bm1hcCgpOworICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHN1Y2NlZWRlZCkKKyAgICB7
CisgICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhtTGluZUxvb3BJ
Qi0+Z2V0QnVmZmVyKCkpOworICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9v
cElCLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRl
eGVkUHJpbWl0aXZlKEQzRFBUX0xJTkVTVFJJUCwgLW1pbkluZGV4LCBtaW5JbmRleCwgY291bnQs
IHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIGEgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9P
UC4iKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRW51bSgpCit7CisgICAgbUludmFsaWRFbnVt
ID0gdHJ1ZTsKK30KKwordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkVmFsdWUoKQoreworICAg
IG1JbnZhbGlkVmFsdWUgPSB0cnVlOworfQorCit2b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRP
cGVyYXRpb24oKQoreworICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBD
b250ZXh0OjpyZWNvcmRPdXRPZk1lbW9yeSgpCit7CisgICAgbU91dE9mTWVtb3J5ID0gdHJ1ZTsK
K30KKwordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKQor
eworICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSB0cnVlOworfQorCisvLyBHZXQg
b25lIG9mIHRoZSByZWNvcmRlZCBlcnJvcnMgYW5kIGNsZWFyIGl0cyBmbGFnLCBpZiBhbnkuCisv
LyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjUgcGFnZSAxMy4KK0dMZW51bSBDb250ZXh0
OjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1JbnZhbGlkRW51bSkKKyAgICB7CisgICAgICAgIG1J
bnZhbGlkRW51bSA9IGZhbHNlOworCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX0VOVU07Cisg
ICAgfQorCisgICAgaWYgKG1JbnZhbGlkVmFsdWUpCisgICAgeworICAgICAgICBtSW52YWxpZFZh
bHVlID0gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfVkFMVUU7CisgICAgfQor
CisgICAgaWYgKG1JbnZhbGlkT3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgbUludmFsaWRPcGVy
YXRpb24gPSBmYWxzZTsKKworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Cisg
ICAgfQorCisgICAgaWYgKG1PdXRPZk1lbW9yeSkKKyAgICB7CisgICAgICAgIG1PdXRPZk1lbW9y
eSA9IGZhbHNlOworCisgICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOworICAgIH0KKwor
ICAgIGlmIChtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgbUlu
dmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOworCisgICAgICAgIHJldHVybiBHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9f
RVJST1I7Cit9CisKK0dMZW51bSBDb250ZXh0OjpnZXRSZXNldFN0YXR1cygpCit7CisgICAgaWYg
KG1SZXNldFN0YXR1cyA9PSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIGJvb2wgbG9zdCA9
IG1EaXNwbGF5LT50ZXN0RGV2aWNlTG9zdCgpOworCisgICAgICAgIGlmIChsb3N0KQorICAgICAg
ICB7CisgICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOyAgIC8vIFNldHMg
bVJlc2V0U3RhdHVzCisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTGVudW0gc3RhdHVzID0gbVJl
c2V0U3RhdHVzOworCisgICAgaWYgKG1SZXNldFN0YXR1cyAhPSBHTF9OT19FUlJPUikKKyAgICB7
CisgICAgICAgIGlmIChtRGlzcGxheS0+dGVzdERldmljZVJlc2V0dGFibGUoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJST1I7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYm9vbCBDb250ZXh0Ojppc1Jlc2V0
Tm90aWZpY2F0aW9uRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIChtUmVzZXRTdHJhdGVneSA9PSBH
TF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKTsKK30KKworYm9vbCBDb250ZXh0OjpzdXBwb3J0
c1NoYWRlck1vZGVsMygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVs
MzsKK30KKworZmxvYXQgQ29udGV4dDo6Z2V0TWF4aW11bVBvaW50U2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IG1NYXhpbXVtUG9pbnRTaXplIDogQUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTI7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhp
bXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJN
b2RlbDMgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00y
OworfQorCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFn
ZVVuaXRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzVmVydGV4VGV4dHVyZSA/IE1B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYgOiAwOworfQorCit1bnNpZ25lZCBpbnQg
Q29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAorewor
ICAgIHJldHVybiBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIGdldE1heGltdW1WZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMg
PyBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NNMyA6IE1BWF9GUkFHTUVOVF9VTklGT1JN
X1ZFQ1RPUlNfU00yOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOworfQorCitpbnQgQ29u
dGV4dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJl
cXVlc3RlZCkgY29uc3QKK3sKKyAgICBpZiAocmVxdWVzdGVkID09IDApCisgICAgeworICAgICAg
ICByZXR1cm4gcmVxdWVzdGVkOworICAgIH0KKworICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9v
bCAqPjo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1h
dCk7CisgICAgaWYgKGl0ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkg
PD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKGl0
ci0+c2Vjb25kW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IC0xOworfQorCitib29sIENvbnRleHQ6OnN1cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVN1cHBvcnRzRXZlbnRRdWVyaWVzOworfQorCitib29sIENvbnRleHQ6OnN1
cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c09j
Y2x1c2lvblF1ZXJpZXM7Cit9CisKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXMo
KSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNEWFQxVGV4dHVyZXM7Cit9CisKK2Jvb2wg
Q29udGV4dDo6c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3Vw
cG9ydHNEWFQzVGV4dHVyZXM7Cit9CisKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQ1VGV4dHVy
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNEWFQ1VGV4dHVyZXM7Cit9CisKK2Jv
b2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVy
biBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXM7Cit9CisKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNG
bG9hdDMyTGluZWFyRmlsdGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQz
MkxpbmVhckZpbHRlcjsKK30KKworYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJh
YmxlVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyUmVuZGVy
YWJsZVRleHR1cmVzOworfQorCitib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzOworfQorCiti
b29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXI7Cit9CisKK2Jvb2wgQ29udGV4dDo6
c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKK30KKworaW50IENvbnRleHQ6Omdl
dE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtTWF4
UmVuZGVyYnVmZmVyRGltZW5zaW9uOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtTWF4VGV4dHVyZURpbWVuc2lvbjsK
K30KKworaW50IENvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKK30KKworaW50IENvbnRl
eHQ6OmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4VGV4
dHVyZUxldmVsOworfQorCitib29sIENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMo
KSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKK30KKwor
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOworfQorCitib29sIENv
bnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBw
b3J0c0RlcHRoVGV4dHVyZXM7Cit9CisKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGlj
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7Cit9CisKK2Jv
b2wgQ29udGV4dDo6c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZTsKK30KKworYm9vbCBDb250ZXh0OjpzdXBwb3J0
c0luc3RhbmNpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNJbnN0YW5jaW5nOwor
fQorCitib29sIENvbnRleHQ6OnN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSBjb25z
dAoreworICAgIHJldHVybiBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weTsKK30KKwor
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0Rlcml2YXRpdmVJbnN0cnVjdGlvbnMoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3VwcG9ydHNEZXJpdmF0aXZlSW5zdHJ1Y3Rpb25zOworfQorCitmbG9hdCBD
b250ZXh0OjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1N
YXhUZXh0dXJlQW5pc290cm9weTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZv
cm1hdFR5cGUoR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSkKK3sKKyAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBpZiAoIWZyYW1lYnVm
ZmVyIHx8IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01Q
TEVURSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOworICAgIH0KKworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKCk7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICB9
CisKKyAgICBpZighZHgyZXM6OkNvbnZlcnRSZWFkQnVmZmVyRm9ybWF0KHJlbmRlcmJ1ZmZlci0+
Z2V0RDNERm9ybWF0KCksIGZvcm1hdCwgdHlwZSkpCisgICAgeworICAgICAgICBBU1NFUlQoZmFs
c2UpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgLy8g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjI6CisgICAgLy8gSWYgYSBidWZm
ZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFsbCBiaW5kaW5ncyB0byB0
aGF0IG9iamVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0CisgICAgLy8gKGkuZS4gaW4gdGhlIHRo
cmVhZCB0aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRvIHplcm8uCisKKyAg
ICBpZiAobVN0YXRlLmFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQorICAgIHsKKyAgICAgICAg
bVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKKyAgICB9CisKKyAgICBpZiAobVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOworICAgIH0KKworICAgIGZvciAoaW50IGF0dHJp
YnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCisg
ICAgeworICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3Vu
ZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVy
ZSkKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjggcGFnZSA4NDoKKyAg
ICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0IGlzIGFzIGlmIGFsbCB0ZXh0
dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1cmUgb2JqZWN0IGFyZQorICAg
IC8vIHJlYm91bmQgdG8gdGV4dHVyZSBvYmplY3QgemVybworCisgICAgZm9yIChpbnQgdHlwZSA9
IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKKyAgICB7CisgICAgICAgIGZv
ciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFNfVlRGOyBzYW1wbGVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUu
c2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKSA9PSB0ZXh0dXJlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVy
XS5zZXQoTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTI6CisgICAgLy8gSWYgYSB0ZXh0
dXJlIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUg
Y3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCB0aGVuIGl0IGlzCisgICAgLy8gYXMgaWYgRnJh
bWVidWZmZXJUZXh0dXJlMkQgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgdGV4dHVyZSBvZiAwLCBm
b3IgZWFjaCBhdHRhY2htZW50IHBvaW50IHRvIHdoaWNoIHRoaXMKKyAgICAvLyBpbWFnZSB3YXMg
YXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KKworICAgIEZyYW1l
YnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBGcmFt
ZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisKKyAgICBp
ZiAocmVhZEZyYW1lYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRh
Y2hUZXh0dXJlKHRleHR1cmUpOworICAgIH0KKworICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYg
ZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAgIGRyYXdG
cmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
dGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQoreworICAgIC8vIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNzoKKyAgICAvLyBJZiBhIGZyYW1l
YnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVCVUZGRVIg
aXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoCisgICAgLy8gQmluZEZyYW1lYnVmZmVyIGhhZCBi
ZWVuIGV4ZWN1dGVkIHdpdGggdGhlIHRhcmdldCBvZiBGUkFNRUJVRkZFUiBhbmQgZnJhbWVidWZm
ZXIgb2YgemVyby4KKworICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVmZmVyID09IGZyYW1lYnVm
ZmVyKQorICAgIHsKKyAgICAgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsKKyAgICB9CisKKyAg
ICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRl
dGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIC8vIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwOToKKyAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZl
ciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBSRU5ERVJCVUZGRVIgaXMgZGVsZXRlZCwgaXQg
aXMgYXMgdGhvdWdoIEJpbmRSZW5kZXJidWZmZXIKKyAgICAvLyBoYWQgYmVlbiBleGVjdXRlZCB3
aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHplcm8uCisKKyAgICBpZiAo
bVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZlcikKKyAgICB7CisgICAgICAg
IGJpbmRSZW5kZXJidWZmZXIoMCk7CisgICAgfQorCisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRd
IHNlY3Rpb24gNC40IHBhZ2UgMTExOgorICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIG9iamVjdCBp
cyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJv
dW5kIGZyYW1lYnVmZmVyLAorICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYgRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVmZmVyIG9mIDAsIGZvciBl
YWNoIGF0dGFjaG1lbnQKKyAgICAvLyBwb2ludCB0byB3aGljaCB0aGlzIGltYWdlIHdhcyBhdHRh
Y2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgorCisgICAgRnJhbWVidWZm
ZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVm
ZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgIGlmIChy
ZWFkRnJhbWVidWZmZXIpCisgICAgeworICAgICAgICByZWFkRnJhbWVidWZmZXItPmRldGFjaFJl
bmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworICAgIH0KKworICAgIGlmIChkcmF3RnJhbWVidWZm
ZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAg
IGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CisgICAg
fQorfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0dXJlVHlw
ZSB0eXBlKQoreworICAgIFRleHR1cmUgKnQgPSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLmdl
dCgpOworCisgICAgaWYgKHQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBH
THVieXRlIGNvbG9yW10gPSB7IDAsIDAsIDAsIDI1NSB9OworCisgICAgICAgIHN3aXRjaCAodHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdoIHRvIFRFWFRVUkVfMkQK
KworICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQoVGV4dHVyZTo6SU5D
T01QTEVURV9URVhUVVJFX0lEKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQtPnNldElt
YWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAg
ICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRToKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3IFRleHR1cmVD
dWJlTWFwKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7CisKKyAgICAgICAgICAgICAg
aW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFn
ZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAg
ICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1
YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBj
b2xvcik7CisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1ooMCwgMSwg
MSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICBp
bmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIDEsIGNvbG9yKTsKKworICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1YmU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG1J
bmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQpOworICAgIH0KKworICAgIHJldHVybiB0Owor
fQorCitib29sIENvbnRleHQ6OnNraXBEcmF3KEdMZW51bSBkcmF3TW9kZSkKK3sKKyAgICBpZiAo
ZHJhd01vZGUgPT0gR0xfUE9JTlRTKQorICAgIHsKKyAgICAgICAgLy8gUHJvZ3JhbUJpbmFyeSBh
c3N1bWVzIG5vbi1wb2ludCByZW5kZXJpbmcgaWYgZ2xfUG9pbnRTaXplIGlzbid0IHdyaXR0ZW4s
CisgICAgICAgIC8vIHdoaWNoIGFmZmVjdHMgdmFyeWluZyBpbnRlcnBvbGF0aW9uLiBTaW5jZSB0
aGUgdmFsdWUgb2YgZ2xfUG9pbnRTaXplIGlzCisgICAgICAgIC8vIHVuZGVmaW5lZCB3aGVuIG5v
dCB3cml0dGVuLCBqdXN0IHNraXAgZHJhd2luZyB0byBhdm9pZCB1bmV4cGVjdGVkIHJlc3VsdHMu
CisgICAgICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKS0+dXNlc1BvaW50U2l6ZSgp
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHN0aWN0bHkgc3BlYWtpbmcgbm90
IGFuIGVycm9yLCBidXQgZGV2ZWxvcGVycyBzaG91bGQgYmUgCisgICAgICAgICAgICAvLyBub3Rp
ZmllZCBvZiByaXNraW5nIHVuZGVmaW5lZCBiZWhhdmlvci4KKyAgICAgICAgICAgIEVSUigiUG9p
bnQgcmVuZGVyaW5nIHdpdGhvdXQgd3JpdGluZyB0byBnbF9Qb2ludFNpemUuIik7CisKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGlzVHJp
YW5nbGVNb2RlKGRyYXdNb2RlKSkKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUuY3VsbEZhY2Ug
JiYgbVN0YXRlLmN1bGxNb2RlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCit7
CisgICAgc3dpdGNoIChkcmF3TW9kZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoK
KyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgorICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJ
UDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgIGNh
c2UgR0xfTElORVM6CisgICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgIGNhc2UgR0xfTElO
RV9TVFJJUDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0
VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKQoreworICAg
IEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsKKyAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFd
OworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMl0gPSB2
YWx1ZXNbMl07CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1
ZVszXSA9IHZhbHVlc1szXTsKKworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlci0+ZGlydHlDdXJyZW50
VmFsdWUoaW5kZXgpOworfQorCit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3Io
R0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhd
Lm1EaXZpc29yID0gZGl2aXNvcjsKK30KKworLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBmb2xsb3dp
bmcgb3JkZXIKKy8vIE9FUyBleHRlbnNpb25zCisvLyBFWFQgZXh0ZW5zaW9ucworLy8gVmVuZG9y
IGV4dGVuc2lvbnMKK3ZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCit7CisgICAg
c3RkOjpzdHJpbmcgZXh0ZW5zaW9uU3RyaW5nID0gIiI7CisKKyAgICAvLyBPRVMgZXh0ZW5zaW9u
cworICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQorICAgIHsKKyAgICAgICAgZXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICI7CisgICAgfQorCisgICAg
ZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKKyAgICBl
eHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgIjsKKyAgICBleHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7CisgICAgaWYgKHN1cHBvcnRzRGVy
aXZhdGl2ZUluc3RydWN0aW9ucygpKQorICAgIHsKKyAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKKyAgICB9CisKKyAgICBpZiAoc3VwcG9y
dHNGbG9hdDE2VGV4dHVyZXMoKSkKKyAgICB7CisgICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAi
R0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAiOworICAgIH0KKyAgICBpZiAoc3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKCkpCisgICAgeworICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdM
X09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICI7CisgICAgfQorICAgIGlmIChzdXBwb3J0
c0Zsb2F0MzJUZXh0dXJlcygpKQorICAgIHsKKyAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9PRVNfdGV4dHVyZV9mbG9hdCAiOworICAgIH0KKyAgICBpZiAoc3VwcG9ydHNGbG9hdDMyTGlu
ZWFyRmlsdGVyKCkpCisgICAgeworICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190
ZXh0dXJlX2Zsb2F0X2xpbmVhciAiOworICAgIH0KKworICAgIGlmIChzdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKSkKKyAgICB7CisgICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3Rl
eHR1cmVfbnBvdCAiOworICAgIH0KKworICAgIC8vIE11bHRpLXZlbmRvciAoRVhUKSBleHRlbnNp
b25zCisgICAgaWYgKHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpKQorICAgIHsKKyAgICAgICAg
ZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4gIjsKKyAg
ICB9CisKKyAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7
CisgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcm9idXN0bmVzcyAiOworCisgICAgaWYg
KHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgeworICAgICAgICBleHRlbnNpb25TdHJpbmcg
Kz0gIkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEgIjsKKyAgICB9CisKKyAgICBpZiAo
c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgIHsKKyAgICAgICAgZXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgIjsKKyAgICB9
CisKKyAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCAiOworICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSAiOwor
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX2ZyYWdfZGVwdGggIjsKKworICAgIC8vIEFO
R0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkp
CisgICAgeworICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1
cmUgIjsKKyAgICB9CisKKyAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVm
ZmVyX2JsaXQgIjsKKyAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCisgICAg
eworICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlICI7CisgICAgfQorCisgICAgaWYgKHN1cHBvcnRzSW5zdGFuY2luZygpKQorICAgIHsK
KyAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICI7
CisgICAgfQorCisgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3JldmVyc2Vf
cm93X29yZGVyICI7CisKKyAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKKyAgICB7Cisg
ICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9k
eHQzICI7CisgICAgfQorICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAgIHsKKyAg
ICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4
dDUgIjsKKyAgICB9CisKKyAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVf
dXNhZ2UgIjsKKyAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hh
ZGVyX3NvdXJjZSAiOworCisgICAgLy8gT3RoZXIgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMK
KyAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSkKKyAgICB7CisgICAgICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfTlZfZmVuY2UgIjsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZzo6c2l6
ZV90eXBlIGVuZCA9IGV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7CisgICAg
aWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIGV4dGVuc2lvblN0
cmluZy5yZXNpemUoZW5kKzEpOworICAgIH0KKworICAgIG1FeHRlbnNpb25TdHJpbmcgPSBtYWtl
U3RhdGljU3RyaW5nKGV4dGVuc2lvblN0cmluZyk7Cit9CisKK2NvbnN0IGNoYXIgKkNvbnRleHQ6
OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJp
bmc7Cit9CisKK3ZvaWQgQ29udGV4dDo6aW5pdFJlbmRlcmVyU3RyaW5nKCkKK3sKKyAgICBEM0RB
REFQVEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJZGVu
dGlmaWVyKCk7CisKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcmVuZGVyZXJTdHJpbmc7CisgICAg
cmVuZGVyZXJTdHJpbmcgPDwgIkFOR0xFICgiOworCisgICAgcmVuZGVyZXJTdHJpbmcgPDwgaWRl
bnRpZmllci0+RGVzY3JpcHRpb247CisKKyAgICBpZiAobURpc3BsYXktPmlzRDNkOUV4RGV2aWNl
KCkpCisgICAgeworICAgICAgICByZW5kZXJlclN0cmluZyA8PCAiIERpcmVjdDNEOUV4IjsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBEaXJlY3Qz
RDkiOworICAgIH0KKworICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgdnNfIiA8PCBEM0RTSEFERVJf
VkVSU0lPTl9NQUpPUihtRGV2aWNlQ2Fwcy5WZXJ0ZXhTaGFkZXJWZXJzaW9uKSA8PCAiXyIgPDwg
RDNEU0hBREVSX1ZFUlNJT05fTUlOT1IobURldmljZUNhcHMuVmVydGV4U2hhZGVyVmVyc2lvbik7
CisgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBwc18iIDw8IEQzRFNIQURFUl9WRVJTSU9OX01BSk9S
KG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbikgPDwgIl8iIDw8IEQzRFNIQURFUl9WRVJT
SU9OX01JTk9SKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbikgPDwgIikiOworCisgICAg
bVJlbmRlcmVyU3RyaW5nID0gbWFrZVN0YXRpY1N0cmluZyhyZW5kZXJlclN0cmluZy5zdHIoKSk7
Cit9CisKK2NvbnN0IGNoYXIgKkNvbnRleHQ6OmdldFJlbmRlcmVyU3RyaW5nKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVJlbmRlcmVyU3RyaW5nOworfQorCit2b2lkIENvbnRleHQ6OmJsaXRGcmFt
ZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZ
MSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0
WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMYml0ZmllbGQgbWFzaykKK3sKKyAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVy
ID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZl
ciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKCFyZWFkRnJhbWVidWZmZXIgfHwg
cmVhZEZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RSB8fAorICAgICAgICAhZHJhd0ZyYW1lYnVmZmVyIHx8IGRyYXdGcmFtZWJ1ZmZlci0+Y29tcGxl
dGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgIH0KKworICAg
IGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBpbnQgcmVh
ZEJ1ZmZlcldpZHRoID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0
aCgpOworICAgIGludCByZWFkQnVmZmVySGVpZ2h0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xv
cmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsKKyAgICBpbnQgZHJhd0J1ZmZlcldpZHRoID0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOworICAgIGludCBkcmF3QnVm
ZmVySGVpZ2h0ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQo
KTsKKworICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICBSRUNUIGRlc3RSZWN0OworCisgICAgaWYg
KHNyY1gwIDwgc3JjWDEpCisgICAgeworICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsK
KyAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHNyY1gxOworICAgICAgICBkZXN0UmVjdC5sZWZ0
ID0gZHN0WDA7CisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gxOworICAgICAgICBkZXN0
UmVjdC5sZWZ0ID0gZHN0WDE7CisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMDsKKyAg
ICAgICAgZGVzdFJlY3QucmlnaHQgPSBkc3RYMDsKKyAgICB9CisKKyAgICBpZiAoc3JjWTAgPCBz
cmNZMSkKKyAgICB7CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTE7CisgICAgICAg
IGRlc3RSZWN0LmJvdHRvbSA9IGRzdFkxOworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kw
OworICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBzcmNZMDsKKyAgICAgICAgZGVzdFJlY3QuYm90
dG9tID0gZHN0WTA7CisgICAgICAgIHNvdXJjZVJlY3QudG9wID0gc3JjWTE7CisgICAgICAgIGRl
c3RSZWN0LnRvcCA9IGRzdFkxOworICAgIH0KKworICAgIFJFQ1Qgc291cmNlU2Npc3NvcmVkUmVj
dCA9IHNvdXJjZVJlY3Q7CisgICAgUkVDVCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0Owor
CisgICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCkKKyAgICB7CisgICAgICAgIC8vIE9ubHkgd3Jp
dGUgdG8gcGFydHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhl
IHNjaXNzb3IgdGVzdAorICAgICAgICAvLyBQbGVhc2Ugbm90ZTogdGhlIGRlc3RSZWN0IGlzIG5v
dyBpbiBEM0Qtc3R5bGUgY29vcmRpbmF0ZXMsIHNvIHRoZSAqdG9wKiBvZiB0aGUKKyAgICAgICAg
Ly8gcmVjdCB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRoYW4gdGhl
IGJvdHRvbS4KKyAgICAgICAgaWYgKGRlc3RSZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3NvclgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAtIGRlc3RS
ZWN0LmxlZnQ7CisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNj
aXNzb3JYOworICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5sZWZ0ICs9IHhEaWZmOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlc3RSZWN0LnJpZ2h0ID4gbVN0YXRlLnNjaXNzb3JY
ICsgbVN0YXRlLnNjaXNzb3JXaWR0aCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHhEaWZm
ID0gZGVzdFJlY3QucmlnaHQgLSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0
aCk7CisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5yaWdodCA9IG1TdGF0ZS5zY2lzc29y
WCArIG1TdGF0ZS5zY2lzc29yV2lkdGg7CisgICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0
LnJpZ2h0IC09IHhEaWZmOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlc3RSZWN0LnRvcCA8
IG1TdGF0ZS5zY2lzc29yWSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHlEaWZmID0gbVN0
YXRlLnNjaXNzb3JZIC0gZGVzdFJlY3QudG9wOworICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJl
Y3QudG9wID0gbVN0YXRlLnNjaXNzb3JZOworICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVj
dC50b3AgKz0geURpZmY7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVzdFJlY3QuYm90dG9t
ID4gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludCB5RGlmZiA9IGRlc3RSZWN0LmJvdHRvbSAtIChtU3RhdGUuc2Npc3Nvclkg
KyBtU3RhdGUuc2Npc3NvckhlaWdodCk7CisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5i
b3R0b20gPSBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsKKyAgICAgICAg
ICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuYm90dG9tIC09IHlEaWZmOworICAgICAgICB9CisgICAg
fQorCisgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7CisgICAgYm9vbCBibGl0RGVw
dGhTdGVuY2lsID0gZmFsc2U7CisKKyAgICBSRUNUIHNvdXJjZVRyaW1tZWRSZWN0ID0gc291cmNl
U2Npc3NvcmVkUmVjdDsKKyAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lzc29yZWRS
ZWN0OworCisgICAgLy8gVGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgYWxzbyBt
YXkgbmVlZCB0byBiZSB0cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5kcyBvZiAK
KyAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuCisgICAgaWYgKHNvdXJj
ZVRyaW1tZWRSZWN0LmxlZnQgPCAwKQorICAgIHsKKyAgICAgICAgaW50IHhEaWZmID0gMCAtIHNv
dXJjZVRyaW1tZWRSZWN0LmxlZnQ7CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPSAw
OworICAgICAgICBkZXN0VHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKKyAgICB9CisKKyAgICBp
ZiAoc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgpCisgICAgeworICAg
ICAgICBpbnQgeERpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHJlYWRCdWZmZXJXaWR0
aDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lkdGg7Cisg
ICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKKyAgICB9CisKKyAgICBpZiAo
c291cmNlVHJpbW1lZFJlY3QudG9wIDwgMCkKKyAgICB7CisgICAgICAgIGludCB5RGlmZiA9IDAg
LSBzb3VyY2VUcmltbWVkUmVjdC50b3A7CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9
IDA7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7CisgICAgfQorCisgICAg
aWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJIZWlnaHQpCisgICAgewor
ICAgICAgICBpbnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVy
SGVpZ2h0OworICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVp
Z2h0OworICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOworICAgIH0KKwor
ICAgIGlmIChkZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApCisgICAgeworICAgICAgICBpbnQgeERp
ZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQ7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5s
ZWZ0ID0gMDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKKyAgICB9
CisKKyAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRoKQorICAg
IHsKKyAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJhd0J1ZmZl
cldpZHRoOworICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7
CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOworICAgIH0KKworICAg
IGlmIChkZXN0VHJpbW1lZFJlY3QudG9wIDwgMCkKKyAgICB7CisgICAgICAgIGludCB5RGlmZiA9
IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9wOworICAgICAgICBkZXN0VHJpbW1lZFJlY3QudG9wID0g
MDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOworICAgIH0KKworICAg
IGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdodCkKKyAgICB7Cisg
ICAgICAgIGludCB5RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkcmF3QnVmZmVySGVp
Z2h0OworICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodDsK
KyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOworICAgIH0KKworICAg
IGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsKKyAgICBpZiAoc291cmNlVHJpbW1lZFJl
Y3QuYm90dG9tIC0gc291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEJ1ZmZlckhlaWdodCB8fAor
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQg
PCByZWFkQnVmZmVyV2lkdGggfHwgCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBk
ZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fAorICAgICAgICBkZXN0VHJp
bW1lZFJlY3QucmlnaHQgLSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdCdWZmZXJXaWR0aCB8
fAorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1lZFJlY3Qu
dG9wICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmltbWVkUmVj
dC5sZWZ0ICE9IDApCisgICAgeworICAgICAgICBwYXJ0aWFsQnVmZmVyQ29weSA9IHRydWU7Cisg
ICAgfQorCisgICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgIHsKKyAgICAg
ICAgY29uc3QgYm9vbCB2YWxpZFJlYWRUeXBlID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1
ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8CisgICAgICAgICAgICByZWFkRnJhbWVidWZm
ZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKKyAgICAgICAgY29u
c3QgYm9vbCB2YWxpZERyYXdUeXBlID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5
cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8CisgICAgICAgICAgICBkcmF3RnJhbWVidWZmZXItPmdl
dENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKKyAgICAgICAgaWYgKCF2YWxp
ZFJlYWRUeXBlIHx8ICF2YWxpZERyYXdUeXBlIHx8CisgICAgICAgICAgICByZWFkRnJhbWVidWZm
ZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEVSUigiQ29sb3IgYnVmZmVyIGZvcm1hdCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1ZmZlckFO
R0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U2Ft
cGxlcygpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBibGl0UmVuZGVyVGFyZ2V0ID0g
dHJ1ZTsKKworICAgIH0KKworICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBH
TF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQorICAgIHsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpyZWFk
RFNCdWZmZXIgPSBOVUxMOworICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5V
TEw7CisKKyAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwsIGFu
ZCBkbyBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0ZW5jaWwg
YnVmZmVyLCBzbyBpZiB3ZSBoYXZlCisgICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNp
bCBidWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgorCisgICAgICAgIGlmIChtYXNr
ICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlclR5cGUoKSB8fAorICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldERl
cHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhi
dWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIo
KTsKKyAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldERl
cHRoYnVmZmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobWFz
ayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJl
YWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZWFk
RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8CisgICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwg
PSB0cnVlOworICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdG
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5KQorICAgICAgICB7CisgICAgICAgICAg
ICBFUlIoIk9ubHkgd2hvbGUtYnVmZmVyIGRlcHRoIGFuZCBzdGVuY2lsIGJsaXRzIGFyZSBzdXBw
b3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUg
cGVybWl0dGVkCisgICAgICAgIH0KKworICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3
RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKKyAgICAgICAgICAgIChyZWFkRFNCdWZm
ZXIgJiYgcmVhZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2lsKQorICAg
IHsKKyAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7CisKKyAgICAgICAgaWYgKGJsaXRSZW5k
ZXJUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFk
UmVuZGVyVGFyZ2V0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0ZyYW1lYnVm
ZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5TdHJldGNoUmVjdChyZWFkUmVuZGVyVGFyZ2V0LCAmc291cmNlVHJpbW1lZFJlY3Qs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3
UmVuZGVyVGFyZ2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05PTkUpOworCisgICAgICAg
ICAgICByZWFkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBkcmF3UmVuZGVy
VGFyZ2V0LT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZh
aWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoYmxpdERl
cHRoU3RlbmNpbCkKKyAgICAgICAgeworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJl
YWREZXB0aFN0ZW5jaWwgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworICAg
ICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0ZW5jaWwgPSBkcmF3RnJhbWVi
dWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWwsIE5VTEwsIGRyYXdEZXB0aFN0
ZW5jaWwsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAgICAgIHJlYWREZXB0aFN0ZW5j
aWwtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
KworICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCBy
ZXR1cm5lZCAleC4iLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6VmVy
dGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1heExydSgwKQoreworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKKyAgICB7CisgICAgICAg
IG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOworICAgICAgICBt
VmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50ID0gMDsKKyAgICB9Cit9CisKK1ZlcnRleERlY2xh
cmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkKK3sKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAg
ICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbikKKyAgICAgICAg
eworICAgICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVs
ZWFzZSgpOworICAgICAgICB9CisgICAgfQorfQorCitHTGVudW0gVmVydGV4RGVjbGFyYXRpb25D
YWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0
ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBH
THNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdykKK3sKKyAgICAqcmVwZWF0RHJh
dyA9IDE7CisKKyAgICBpbnQgaW5kZXhlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsK
KyAgICBpbnQgaW5zdGFuY2VkQXR0cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRSSUJTOworCisgICAg
aWYgKGluc3RhbmNlcyA+IDApCisgICAgeworICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0
cmlidXRlIHRvIGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDAKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChpbmRleGVkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0g
MCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhl
ZEF0dHJpYnV0ZSA9IGk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJU
RVhfQVRUUklCUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
dHRyaWJ1dGVzW2ldLmRpdmlzb3IgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGJyZWFrOyAg
IC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFY
X1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJ
RF9PUEVSQVRJT047CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEM0RWRVJURVhFTEVNRU5UOSBl
bGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKKyAgICBEM0RWRVJURVhFTEVNRU5UOSAq
ZWxlbWVudCA9ICZlbGVtZW50c1swXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3Rp
dmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdHJlYW0gPSBpOworCisgICAgICAgICAg
ICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBE
dWUgdG8gYSBidWcgb24gQVRJIGNhcmRzIHdlIGNhbid0IGVuYWJsZSBpbnN0YW5jaW5nIHdoZW4g
bm9uZSBvZiB0aGUgYXR0cmlidXRlcyBhcmUgaW5zdGFuY2VkLgorICAgICAgICAgICAgICAgIGlm
IChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRBdHRyaWJ1dGUpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBpbmRl
eGVkQXR0cmlidXRlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgVUlOVCBmcmVxdWVuY3kgPSAxOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VS
Q0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwgYXR0
cmlidXRlc1tpXS5kaXZpc29yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEo
c3RyZWFtLCBmcmVxdWVuY3kpOworICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2luZ0VuYWJs
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsICE9IGF0dHJpYnV0ZXNbaV0uc2VyaWFs
IHx8CisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUgIT0gYXR0cmli
dXRlc1tpXS5zdHJpZGUgfHwKKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9m
ZnNldCAhPSBhdHRyaWJ1dGVzW2ldLm9mZnNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShzdHJlYW0sIGF0dHJpYnV0ZXNbaV0udmVydGV4
QnVmZmVyLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwgYXR0cmlidXRlc1tpXS5zdHJpZGUpOworICAg
ICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsID0gYXR0cmlidXRlc1tpXS5z
ZXJpYWw7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUgPSBhdHRy
aWJ1dGVzW2ldLnN0cmlkZTsKKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9m
ZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07CisgICAgICAgICAgICBlbGVtZW50LT5PZmZzZXQg
PSAwOworICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsKKyAg
ICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKKyAgICAg
ICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOworICAgICAgICAg
ICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgo
aSk7CisgICAgICAgICAgICBlbGVtZW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
aW5zdGFuY2VzID09IDAgfHwgaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklC
UykKKyAgICB7CisgICAgICAgIGlmIChtSW5zdGFuY2luZ0VuYWJsZWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVx
KGksIDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtSW5zdGFuY2luZ0VuYWJsZWQg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhF
TEVNRU5UOSBlbmQgPSBEM0RERUNMX0VORCgpOworICAgICooZWxlbWVudCsrKSA9IGVuZDsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkr
KykKKyAgICB7CisgICAgICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICplbnRyeSA9ICZtVmVydGV4
RGVjbENhY2hlW2ldOworICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5jYWNoZWRFbGVtZW50cywg
ZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5
KSkgPT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVudHJ5LT5scnVDb3VudCA9ICsrbU1heExydTsKKyAgICAgICAgICAgIGlmKGVudHJ5LT52
ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24oZW50cnktPnZlcnRleERlY2xh
cmF0aW9uKTsKKyAgICAgICAgICAgICAgICBtTGFzdFNldFZEZWNsID0gZW50cnktPnZlcnRleERl
Y2xhcmF0aW9uOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gR0xfTk9fRVJS
T1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqbGFzdENh
Y2hlID0gbVZlcnRleERlY2xDYWNoZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZF
UlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4
RGVjbENhY2hlW2ldLmxydUNvdW50IDwgbGFzdENhY2hlLT5scnVDb3VudCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAobGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBOVUxMKQor
ICAgIHsKKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwor
ICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsKKyAgICAgICAgLy8g
bUxhc3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJlcGxhY2VtZW50LCBzbyB3ZSBkb24ndCBoYXZl
IHRvIHdvcnJ5CisgICAgICAgIC8vIGFib3V0IGl0LgorICAgIH0KKworICAgIG1lbWNweShsYXN0
Q2FjaGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBz
aXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsKKyAgICBkZXZpY2UtPkNyZWF0ZVZlcnRleERlY2xh
cmF0aW9uKGVsZW1lbnRzLCAmbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgZGV2
aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsK
KyAgICBtTGFzdFNldFZEZWNsID0gbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICBs
YXN0Q2FjaGUtPmxydUNvdW50ID0gKyttTWF4THJ1OworCisgICAgcmV0dXJuIEdMX05PX0VSUk9S
OworfQorCit2b2lkIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KCkKK3sK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsK
KyAgICAgICAgbUFwcGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKKyAgICB9CisKKyAgICBtTGFzdFNl
dFZEZWNsID0gTlVMTDsKKyAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNl
cyBpdCB0byBiZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkCit9CisKK30KKworZXh0ZXJuICJDIgor
eworZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmln
LCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9v
bCByb2J1c3RBY2Nlc3MpCit7CisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcsIHNo
YXJlQ29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOworfQorCit2b2lkIGdsRGVz
dHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgZGVsZXRlIGNvbnRleHQ7
CisKKyAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQorICAgIHsKKyAgICAgICAg
Z2w6Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwpOworICAgIH0KK30KKwordm9pZCBnbE1h
a2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICBnbDo6bWFrZUN1cnJlbnQoY29udGV4dCwgZGlz
cGxheSwgc3VyZmFjZSk7Cit9CisKK2dsOjpDb250ZXh0ICpnbEdldEN1cnJlbnRDb250ZXh0KCkK
K3sKKyAgICByZXR1cm4gZ2w6OmdldENvbnRleHQoKTsKK30KK30KClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjg3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBDb250ZXh0Lmg6IERlZmluZXMgdGhl
IGdsOjpDb250ZXh0IGNsYXNzLCBtYW5hZ2luZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcK
Ky8vIHJlbmRlcmluZyBvcGVyYXRpb25zLiBJdCBpcyB0aGUgR0xFUzIgc3BlY2lmaWMgaW1wbGVt
ZW50YXRpb24gb2YgRUdMQ29udGV4dC4KKworI2lmbmRlZiBMSUJHTEVTVjJfQ09OVEVYVF9IXwor
I2RlZmluZSBMSUJHTEVTVjJfQ09OVEVYVF9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNkZWZpbmUgRUdM
QVBJCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUg
PHN0cmluZz4KKyNpbmNsdWRlIDxtYXA+CisjaWZkZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxoYXNo
X21hcD4KKyNlbHNlCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNlbmRpZgorCisjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3Qu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgZWdsCit7CitjbGFzcyBEaXNw
bGF5OworY2xhc3MgU3VyZmFjZTsKK2NsYXNzIENvbmZpZzsKK30KKworbmFtZXNwYWNlIGdsCit7
CitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKK3N0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRh
OworCitjbGFzcyBCdWZmZXI7CitjbGFzcyBTaGFkZXI7CitjbGFzcyBQcm9ncmFtOworY2xhc3Mg
UHJvZ3JhbUJpbmFyeTsKK2NsYXNzIFRleHR1cmU7CitjbGFzcyBUZXh0dXJlMkQ7CitjbGFzcyBU
ZXh0dXJlQ3ViZU1hcDsKK2NsYXNzIEZyYW1lYnVmZmVyOworY2xhc3MgUmVuZGVyYnVmZmVyOwor
Y2xhc3MgUmVuZGVyYnVmZmVyU3RvcmFnZTsKK2NsYXNzIENvbG9yYnVmZmVyOworY2xhc3MgRGVw
dGhidWZmZXI7CitjbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlcjsKK2NsYXNzIFN0ZW5jaWxidWZm
ZXI7CitjbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7CitjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcjsK
K2NsYXNzIEluZGV4RGF0YU1hbmFnZXI7CitjbGFzcyBCbGl0OworY2xhc3MgRmVuY2U7CitjbGFz
cyBRdWVyeTsKKworZW51bQoreworICAgIEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyA9IDI1NiwK
KyAgICBEM0Q5X01BWF9CT09MX0NPTlNUQU5UUyA9IDE2LAorICAgIEQzRDlfTUFYX0lOVF9DT05T
VEFOVFMgPSAxNiwKKworICAgIE1BWF9WRVJURVhfQVRUUklCUyA9IDE2LAorICAgIE1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTID0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTIC0gMiwgICAvLyBS
ZXNlcnZlIHNwYWNlIGZvciBkeF9IYWxmUGl4ZWxTaXplIGFuZCBkeF9EZXB0aFJhbmdlLgorICAg
IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yID0gOCwKKyAgICBNQVhfVkFSWUlOR19WRUNUT1JTX1NN
MyA9IDEwLAorICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYsCisgICAgTUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURiA9IDQsICAgLy8gRm9yIGRldmljZXMgc3VwcG9ydGlu
ZyB2ZXJ0ZXggdGV4dHVyZSBmZXRjaAorICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VO
SVRTX1ZURiA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsgTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTX1ZURiwgICAgCisgICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTIg
PSAzMiAtIDMsICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGR4X0Nvb3JkLCBkeF9EZXB0aCwgYW5k
IGR4X0RlcHRoUmFuZ2UuIGR4X1BvaW50T3JMaW5lcyBhbmQgZHhfRnJvbnRDQ1cgdXNlIHNlcGFy
YXRlIGJvb2wgcmVnaXN0ZXJzLgorICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00z
ID0gMjI0IC0gMywKKyAgICBNQVhfRFJBV19CVUZGRVJTID0gMSwKKworICAgIEdMX0JHUkE0X0FO
R0xFWCA9IDB4NkFCQywKKyAgICBHTF9CR1I1X0ExX0FOR0xFWCA9IDB4NkFCRAorfTsKKworZW51
bSBRdWVyeVR5cGUKK3sKKyAgICBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQsCisgICAgUVVFUllf
QU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRSwKKworICAgIFFVRVJZX1RZUEVfQ09VTlQK
K307CisKK2NvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NSU4gPSAxLjBmOwor
Y29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01BWCA9IDEuMGY7Citjb25zdCBm
bG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yID0gMS4wZjsKKworc3RydWN0IENvbG9yCit7
CisgICAgZmxvYXQgcmVkOworICAgIGZsb2F0IGdyZWVuOworICAgIGZsb2F0IGJsdWU7CisgICAg
ZmxvYXQgYWxwaGE7Cit9OworCisvLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzaW5n
bGUgdmVydGV4IGF0dHJpYnV0ZQorY2xhc3MgVmVydGV4QXR0cmlidXRlCit7CisgIHB1YmxpYzoK
KyAgICBWZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoMCksIG1Ob3Jt
YWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJheUVuYWJsZWQo
ZmFsc2UpLCBtRGl2aXNvcigwKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVswXSA9IDAu
MGY7CisgICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwLjBmOworICAgICAgICBtQ3VycmVudFZh
bHVlWzJdID0gMC4wZjsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDEuMGY7CisgICAgfQor
CisgICAgaW50IHR5cGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobVR5cGUp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICByZXR1cm4gbVNp
emUgKiBzaXplb2YoR0xieXRlKTsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICBy
ZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7CisgICAgICAgICAgY2FzZSBHTF9TSE9SVDog
ICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOworICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVzaG9ydCk7CisgICAg
ICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZml4
ZWQpOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNp
emVvZihHTGZsb2F0KTsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4g
bVNpemUgKiBzaXplb2YoR0xmbG9hdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTHNpemVp
IHN0cmlkZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVN0cmlkZSA/IG1TdHJpZGUg
OiB0eXBlU2l6ZSgpOworICAgIH0KKworICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
CisgICAgR0xlbnVtIG1UeXBlOworICAgIEdMaW50IG1TaXplOworICAgIGJvb2wgbU5vcm1hbGl6
ZWQ7CisgICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKKwor
ICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKKyAgICAgICAg
aW50cHRyX3QgbU9mZnNldDsKKyAgICB9OworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBt
Qm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBvaW50ZXIgaXMg
Y2FsbGVkLgorCisgICAgYm9vbCBtQXJyYXlFbmFibGVkOyAgIC8vIEZyb20gZ2xFbmFibGUvRGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5CisgICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0XTsgICAvLyBG
cm9tIGdsVmVydGV4QXR0cmliCisgICAgdW5zaWduZWQgaW50IG1EaXZpc29yOworfTsKKwordHlw
ZWRlZiBWZXJ0ZXhBdHRyaWJ1dGUgVmVydGV4QXR0cmlidXRlQXJyYXlbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKKworLy8gSGVscGVyIHN0cnVjdHVyZSB0byBzdG9yZSBhbGwgcmF3IHN0YXRlCitzdHJ1
Y3QgU3RhdGUKK3sKKyAgICBDb2xvciBjb2xvckNsZWFyVmFsdWU7CisgICAgR0xjbGFtcGYgZGVw
dGhDbGVhclZhbHVlOworICAgIGludCBzdGVuY2lsQ2xlYXJWYWx1ZTsKKworICAgIGJvb2wgY3Vs
bEZhY2U7CisgICAgR0xlbnVtIGN1bGxNb2RlOworICAgIEdMZW51bSBmcm9udEZhY2U7CisgICAg
Ym9vbCBkZXB0aFRlc3Q7CisgICAgR0xlbnVtIGRlcHRoRnVuYzsKKyAgICBib29sIGJsZW5kOwor
ICAgIEdMZW51bSBzb3VyY2VCbGVuZFJHQjsKKyAgICBHTGVudW0gZGVzdEJsZW5kUkdCOworICAg
IEdMZW51bSBzb3VyY2VCbGVuZEFscGhhOworICAgIEdMZW51bSBkZXN0QmxlbmRBbHBoYTsKKyAg
ICBHTGVudW0gYmxlbmRFcXVhdGlvblJHQjsKKyAgICBHTGVudW0gYmxlbmRFcXVhdGlvbkFscGhh
OworICAgIENvbG9yIGJsZW5kQ29sb3I7CisgICAgYm9vbCBzdGVuY2lsVGVzdDsKKyAgICBHTGVu
dW0gc3RlbmNpbEZ1bmM7CisgICAgR0xpbnQgc3RlbmNpbFJlZjsKKyAgICBHTHVpbnQgc3RlbmNp
bE1hc2s7CisgICAgR0xlbnVtIHN0ZW5jaWxGYWlsOworICAgIEdMZW51bSBzdGVuY2lsUGFzc0Rl
cHRoRmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3M7CisgICAgR0x1aW50IHN0
ZW5jaWxXcml0ZW1hc2s7CisgICAgR0xlbnVtIHN0ZW5jaWxCYWNrRnVuYzsKKyAgICBHTGludCBz
dGVuY2lsQmFja1JlZjsKKyAgICBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrOworICAgIEdMZW51bSBz
dGVuY2lsQmFja0ZhaWw7CisgICAgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsKKyAg
ICBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOworICAgIEdMdWludCBzdGVuY2lsQmFj
a1dyaXRlbWFzazsKKyAgICBib29sIHBvbHlnb25PZmZzZXRGaWxsOworICAgIEdMZmxvYXQgcG9s
eWdvbk9mZnNldEZhY3RvcjsKKyAgICBHTGZsb2F0IHBvbHlnb25PZmZzZXRVbml0czsKKyAgICBi
b29sIHNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKKyAgICBib29sIHNhbXBsZUNvdmVyYWdlOworICAg
IEdMY2xhbXBmIHNhbXBsZUNvdmVyYWdlVmFsdWU7CisgICAgYm9vbCBzYW1wbGVDb3ZlcmFnZUlu
dmVydDsKKyAgICBib29sIHNjaXNzb3JUZXN0OworICAgIGJvb2wgZGl0aGVyOworCisgICAgR0xm
bG9hdCBsaW5lV2lkdGg7CisKKyAgICBHTGVudW0gZ2VuZXJhdGVNaXBtYXBIaW50OworICAgIEdM
ZW51bSBmcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50OworCisgICAgR0xpbnQgdmlld3BvcnRY
OworICAgIEdMaW50IHZpZXdwb3J0WTsKKyAgICBHTHNpemVpIHZpZXdwb3J0V2lkdGg7CisgICAg
R0xzaXplaSB2aWV3cG9ydEhlaWdodDsKKyAgICBmbG9hdCB6TmVhcjsKKyAgICBmbG9hdCB6RmFy
OworCisgICAgR0xpbnQgc2Npc3Nvclg7CisgICAgR0xpbnQgc2Npc3Nvclk7CisgICAgR0xzaXpl
aSBzY2lzc29yV2lkdGg7CisgICAgR0xzaXplaSBzY2lzc29ySGVpZ2h0OworCisgICAgYm9vbCBj
b2xvck1hc2tSZWQ7CisgICAgYm9vbCBjb2xvck1hc2tHcmVlbjsKKyAgICBib29sIGNvbG9yTWFz
a0JsdWU7CisgICAgYm9vbCBjb2xvck1hc2tBbHBoYTsKKyAgICBib29sIGRlcHRoTWFzazsKKwor
ICAgIHVuc2lnbmVkIGludCBhY3RpdmVTYW1wbGVyOyAgIC8vIEFjdGl2ZSB0ZXh0dXJlIHVuaXQg
c2VsZWN0b3IgLSBHTF9URVhUVVJFMAorICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gYXJyYXlC
dWZmZXI7CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXI7Cisg
ICAgR0x1aW50IHJlYWRGcmFtZWJ1ZmZlcjsKKyAgICBHTHVpbnQgZHJhd0ZyYW1lYnVmZmVyOwor
ICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gcmVuZGVyYnVmZmVyOworICAgIEdMdWlu
dCBjdXJyZW50UHJvZ3JhbTsKKworICAgIFZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVb
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlPiBzYW1wbGVy
VGV4dHVyZVtURVhUVVJFX1RZUEVfQ09VTlRdW01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VO
SVRTX1ZURl07CisgICAgQmluZGluZ1BvaW50ZXI8UXVlcnk+IGFjdGl2ZVF1ZXJ5W1FVRVJZX1RZ
UEVfQ09VTlRdOworCisgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50OworICAgIEdMaW50IHBhY2tB
bGlnbm1lbnQ7CisgICAgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyOworfTsKKworLy8gSGVscGVy
IGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVydGV4IGRlY2xhcmF0aW9ucworY2xhc3Mg
VmVydGV4RGVjbGFyYXRpb25DYWNoZQoreworICBwdWJsaWM6CisgICAgVmVydGV4RGVjbGFyYXRp
b25DYWNoZSgpOworICAgIH5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7CisKKyAgICBHTGVudW0g
YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRy
aWJ1dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTHNpemVp
IGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdyk7CisKKyAgICB2b2lkIG1hcmtTdGF0ZURp
cnR5KCk7CisKKyAgcHJpdmF0ZToKKyAgICBVSU5UIG1NYXhMcnU7CisKKyAgICBlbnVtIHsgTlVN
X1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAzMiB9OworCisgICAgc3RydWN0IFZCRGF0YQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHNlcmlhbDsKKyAgICAgICAgdW5zaWduZWQgaW50
IHN0cmlkZTsKKyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldDsKKyAgICB9OworCisgICAgVkJE
YXRhIG1BcHBsaWVkVkJzW01BWF9WRVJURVhfQVRUUklCU107CisgICAgSURpcmVjdDNEVmVydGV4
RGVjbGFyYXRpb245ICptTGFzdFNldFZEZWNsOworICAgIGJvb2wgbUluc3RhbmNpbmdFbmFibGVk
OworCisgICAgc3RydWN0IFZlcnRleERlY2xDYWNoZUVudHJ5CisgICAgeworICAgICAgICBEM0RW
RVJURVhFTEVNRU5UOSBjYWNoZWRFbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKKyAg
ICAgICAgVUlOVCBscnVDb3VudDsKKyAgICAgICAgSURpcmVjdDNEVmVydGV4RGVjbGFyYXRpb245
ICp2ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICB9IG1WZXJ0ZXhEZWNsQ2FjaGVbTlVNX1ZFUlRFWF9E
RUNMX0NBQ0hFX0VOVFJJRVNdOworfTsKKworY2xhc3MgQ29udGV4dAoreworICBwdWJsaWM6Cisg
ICAgQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAq
c2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOworCisg
ICAgfkNvbnRleHQoKTsKKworICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNw
bGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworCisgICAgdmlydHVhbCB2b2lkIG1hcmtBbGxT
dGF0ZURpcnR5KCk7CisgICAgdm9pZCBtYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgbWFya0NvbnRleHRMb3N0KCk7CisgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CisK
KyAgICAvLyBTdGF0ZSBtYW5pcHVsYXRpb24KKyAgICB2b2lkIHNldENsZWFyQ29sb3IoZmxvYXQg
cmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpOworCisgICAgdm9pZCBz
ZXRDbGVhckRlcHRoKGZsb2F0IGRlcHRoKTsKKworICAgIHZvaWQgc2V0Q2xlYXJTdGVuY2lsKGlu
dCBzdGVuY2lsKTsKKworICAgIHZvaWQgc2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVkKTsKKyAgICBi
b29sIGlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEN1bGxNb2RlKEdM
ZW51bSBtb2RlKTsKKworICAgIHZvaWQgc2V0RnJvbnRGYWNlKEdMZW51bSBmcm9udCk7CisKKyAg
ICB2b2lkIHNldERlcHRoVGVzdChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNEZXB0aFRlc3RF
bmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERlcHRoRnVuYyhHTGVudW0gZGVwdGhGdW5j
KTsKKworICAgIHZvaWQgc2V0RGVwdGhSYW5nZShmbG9hdCB6TmVhciwgZmxvYXQgekZhcik7Cisg
ICAgCisgICAgdm9pZCBzZXRCbGVuZChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNCbGVuZEVu
YWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0QmxlbmRGYWN0b3JzKEdMZW51bSBzb3VyY2VS
R0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdMZW51bSBkZXN0QWxwaGEp
OworICAgIHZvaWQgc2V0QmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlLCBmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBzZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JF
cXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24pOworCisgICAgdm9pZCBzZXRTdGVuY2lsVGVz
dChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNTdGVuY2lsVGVzdEVuYWJsZWQoKSBjb25zdDsK
KworICAgIHZvaWQgc2V0U3RlbmNpbFBhcmFtcyhHTGVudW0gc3RlbmNpbEZ1bmMsIEdMaW50IHN0
ZW5jaWxSZWYsIEdMdWludCBzdGVuY2lsTWFzayk7CisgICAgdm9pZCBzZXRTdGVuY2lsQmFja1Bh
cmFtcyhHTGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVuY2lsQmFja1JlZiwgR0x1aW50
IHN0ZW5jaWxCYWNrTWFzayk7CisgICAgdm9pZCBzZXRTdGVuY2lsV3JpdGVtYXNrKEdMdWludCBz
dGVuY2lsV3JpdGVtYXNrKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxCYWNrV3JpdGVtYXNrKEdMdWlu
dCBzdGVuY2lsQmFja1dyaXRlbWFzayk7CisgICAgdm9pZCBzZXRTdGVuY2lsT3BlcmF0aW9ucyhH
TGVudW0gc3RlbmNpbEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0
ZW5jaWxQYXNzRGVwdGhQYXNzKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhH
TGVudW0gc3RlbmNpbEJhY2tGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsLCBH
TGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKTsKKworICAgIHZvaWQgc2V0UG9seWdvbk9m
ZnNldEZpbGwoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzUG9seWdvbk9mZnNldEZpbGxFbmFi
bGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBvbHlnb25PZmZzZXRQYXJhbXMoR0xmbG9hdCBm
YWN0b3IsIEdMZmxvYXQgdW5pdHMpOworCisgICAgdm9pZCBzZXRTYW1wbGVBbHBoYVRvQ292ZXJh
Z2UoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxl
ZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRTYW1wbGVDb3ZlcmFnZShib29sIGVuYWJsZWQpOwor
ICAgIGJvb2wgaXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0
U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KTsKKworICAg
IHZvaWQgc2V0U2Npc3NvclRlc3QoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzU2Npc3NvclRl
c3RFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERpdGhlcihib29sIGVuYWJsZWQpOwor
ICAgIGJvb2wgaXNEaXRoZXJFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldExpbmVXaWR0
aChHTGZsb2F0IHdpZHRoKTsKKworICAgIHZvaWQgc2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51
bSBoaW50KTsKKyAgICB2b2lkIHNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xlbnVt
IGhpbnQpOworCisgICAgdm9pZCBzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICB2b2lkIHNldFNjaXNzb3JQYXJh
bXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisg
ICAgdm9pZCBzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9v
bCBhbHBoYSk7CisgICAgdm9pZCBzZXREZXB0aE1hc2soYm9vbCBtYXNrKTsKKworICAgIHZvaWQg
c2V0QWN0aXZlU2FtcGxlcih1bnNpZ25lZCBpbnQgYWN0aXZlKTsKKworICAgIEdMdWludCBnZXRS
ZWFkRnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0RHJhd0ZyYW1lYnVm
ZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNv
bnN0OworCisgICAgR0x1aW50IGdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3Q7CisKKyAgICBH
THVpbnQgZ2V0QWN0aXZlUXVlcnkoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5h
YmxlZCk7CisgICAgY29uc3QgVmVydGV4QXR0cmlidXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYlN0YXRlKHVu
c2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdM
ZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVk
LCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CisgICAgY29uc3Qgdm9pZCAq
Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdDsKKwor
ICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZnZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CisK
KyAgICB2b2lkIHNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpOworICAgIEdMaW50
IGdldFVucGFja0FsaWdubWVudCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRQYWNrQWxpZ25tZW50
KEdMaW50IGFsaWdubWVudCk7CisgICAgR0xpbnQgZ2V0UGFja0FsaWdubWVudCgpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJvb2wgcmV2ZXJzZVJvd09yZGVyKTsK
KyAgICBib29sIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBjb25zdDsKKworICAgIC8vIFRoZXNl
IGNyZWF0ZSAgYW5kIGRlc3Ryb3kgbWV0aG9kcyBhcmUgbWVyZWx5IHBhc3MtdGhyb3VnaHMgdG8g
CisgICAgLy8gUmVzb3VyY2VNYW5hZ2VyLCB3aGljaCBvd25zIHRoZXNlIG9iamVjdCB0eXBlcwor
ICAgIEdMdWludCBjcmVhdGVCdWZmZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2hhZGVyKEdMZW51
bSB0eXBlKTsKKyAgICBHTHVpbnQgY3JlYXRlUHJvZ3JhbSgpOworICAgIEdMdWludCBjcmVhdGVU
ZXh0dXJlKCk7CisgICAgR0x1aW50IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworCisgICAgdm9pZCBk
ZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBkZWxldGVTaGFkZXIoR0x1aW50
IHNoYWRlcik7CisgICAgdm9pZCBkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKKyAgICB2
b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgZGVsZXRlUmVuZGVy
YnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworCisgICAgLy8gRnJhbWVidWZmZXJzIGFyZSBv
d25lZCBieSB0aGUgQ29udGV4dCwgc28gdGhlc2UgbWV0aG9kcyBkbyBub3QgcGFzcyB0aHJvdWdo
CisgICAgR0x1aW50IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgdm9pZCBkZWxldGVGcmFtZWJ1
ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOworCisgICAgLy8gRmVuY2VzIGFyZSBvd25lZCBieSB0
aGUgQ29udGV4dC4KKyAgICBHTHVpbnQgY3JlYXRlRmVuY2UoKTsKKyAgICB2b2lkIGRlbGV0ZUZl
bmNlKEdMdWludCBmZW5jZSk7CisgICAgCisgICAgLy8gUXVlcmllcyBhcmUgb3duZWQgYnkgdGhl
IENvbnRleHQ7CisgICAgR0x1aW50IGNyZWF0ZVF1ZXJ5KCk7CisgICAgdm9pZCBkZWxldGVRdWVy
eShHTHVpbnQgcXVlcnkpOworCisgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZl
cik7CisgICAgdm9pZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIpOworICAg
IHZvaWQgYmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVy
ZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgYmluZFJlYWRGcmFtZWJ1ZmZlcihH
THVpbnQgZnJhbWVidWZmZXIpOworICAgIHZvaWQgYmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQg
ZnJhbWVidWZmZXIpOworICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVm
ZmVyKTsKKyAgICB2b2lkIHVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOworICAgIHZvaWQgbGlu
a1Byb2dyYW0oR0x1aW50IHByb2dyYW0pOworICAgIHZvaWQgc2V0UHJvZ3JhbUJpbmFyeShHTHVp
bnQgcHJvZ3JhbSwgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpOworCisgICAgdm9p
ZCBiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBxdWVyeSk7CisgICAgdm9pZCBlbmRR
dWVyeShHTGVudW0gdGFyZ2V0KTsKKworICAgIHZvaWQgc2V0RnJhbWVidWZmZXJaZXJvKEZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlcik7CisKKyAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
UmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKTsKKworICAgIHZvaWQgc2V0VmVydGV4
QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIHNl
dFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CisKKyAg
ICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBGZW5jZSAqZ2V0RmVuY2Uo
R0x1aW50IGhhbmRsZSk7CisgICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7Cisg
ICAgUHJvZ3JhbSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBUZXh0dXJlICpnZXRU
ZXh0dXJlKEdMdWludCBoYW5kbGUpOworICAgIEZyYW1lYnVmZmVyICpnZXRGcmFtZWJ1ZmZlcihH
THVpbnQgaGFuZGxlKTsKKyAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTHVpbnQg
aGFuZGxlKTsKKyAgICBRdWVyeSAqZ2V0UXVlcnkoR0x1aW50IGhhbmRsZSwgYm9vbCBjcmVhdGUs
IEdMZW51bSB0eXBlKTsKKworICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKKyAgICBCdWZm
ZXIgKmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIFByb2dyYW1CaW5hcnkgKmdldEN1cnJl
bnRQcm9ncmFtQmluYXJ5KCk7CisgICAgVGV4dHVyZTJEICpnZXRUZXh0dXJlMkQoKTsKKyAgICBU
ZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICBUZXh0dXJlICpnZXRTYW1w
bGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSk7CisgICAg
RnJhbWVidWZmZXIgKmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVmZmVyICpnZXRE
cmF3RnJhbWVidWZmZXIoKTsKKworICAgIGJvb2wgZ2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xm
bG9hdCAqcGFyYW1zKTsKKyAgICBib29sIGdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgR0xpbnQg
KnBhcmFtcyk7CisgICAgYm9vbCBnZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAq
cGFyYW1zKTsKKworICAgIGJvb2wgZ2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwg
R0xlbnVtICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcyk7CisKKyAgICB2b2lkIHJlYWRQ
aXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMp
OworICAgIHZvaWQgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKKyAgICB2b2lkIGRyYXdBcnJheXMo
R0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cyk7CisgICAgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAg
ICB2b2lkIHN5bmMoYm9vbCBibG9jayk7ICAgLy8gZmx1c2gvZmluaXNoCisKKyAgICB2b2lkIGRy
YXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRp
Y2VzLCBpbnQgbWluSW5kZXgpOworCisgICAgdm9pZCByZWNvcmRJbnZhbGlkRW51bSgpOworICAg
IHZvaWQgcmVjb3JkSW52YWxpZFZhbHVlKCk7CisgICAgdm9pZCByZWNvcmRJbnZhbGlkT3BlcmF0
aW9uKCk7CisgICAgdm9pZCByZWNvcmRPdXRPZk1lbW9yeSgpOworICAgIHZvaWQgcmVjb3JkSW52
YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCk7CisKKyAgICBHTGVudW0gZ2V0RXJyb3IoKTsKKyAg
ICBHTGVudW0gZ2V0UmVzZXRTdGF0dXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZXNldE5vdGlm
aWNhdGlvbkVuYWJsZWQoKTsKKworICAgIGJvb2wgc3VwcG9ydHNTaGFkZXJNb2RlbDMoKSBjb25z
dDsKKyAgICBmbG9hdCBnZXRNYXhpbXVtUG9pbnRTaXplKCkgY29uc3Q7CisgICAgaW50IGdldE1h
eGltdW1WYXJ5aW5nVmVjdG9ycygpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBnZXRNYXhpbXVt
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4
aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11
bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bVJlbmRl
cmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtVGV4dHVyZURpbWVu
c2lvbigpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBj
b25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIEdMc2l6
ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OworICAgIGludCBnZXROZWFyZXN0U3Vw
cG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKKyAg
ICBjb25zdCBjaGFyICpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdDsKKyAgICBjb25zdCBjaGFy
ICpnZXRSZW5kZXJlclN0cmluZygpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNFdmVudFF1ZXJp
ZXMoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0Owor
ICAgIGJvb2wgc3VwcG9ydHNEWFQxVGV4dHVyZXMoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRz
RFhUM1RleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0RYVDVUZXh0dXJlcygpIGNv
bnN0OworICAgIGJvb2wgc3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSBjb25zdDsKKyAgICBib29s
IHN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNG
bG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0
MTZUZXh0dXJlcygpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVy
KCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSBj
b25zdDsKKyAgICBib29sIHN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25zdDsKKyAgICBi
b29sIHN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0OworICAgIGJvb2wgc3Vw
cG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0czMyYml0SW5kaWNl
cygpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgY29uc3Q7Cisg
ICAgYm9vbCBzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzVGV4
dHVyZUZpbHRlckFuaXNvdHJvcHkoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzRGVyaXZhdGl2
ZUluc3RydWN0aW9ucygpIGNvbnN0OworCisgICAgYm9vbCBnZXRDdXJyZW50UmVhZEZvcm1hdFR5
cGUoR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSk7CisKKyAgICBmbG9hdCBnZXRUZXh0dXJl
TWF4QW5pc290cm9weSgpIGNvbnN0OworCisgICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0xpbnQg
c3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdM
aW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzayk7CisK
KyAgICBCbGl0ICpnZXRCbGl0dGVyKCkgeyByZXR1cm4gbUJsaXQ7IH0KKworICAgIGNvbnN0IEQz
RENBUFM5ICZnZXREZXZpY2VDYXBzKCkgeyByZXR1cm4gbURldmljZUNhcHM7IH0KKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb250ZXh0KTsKKworICAgIGJvb2wg
YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCk7CisgICAgdm9pZCBhcHBseVN0
YXRlKEdMZW51bSBkcmF3TW9kZSk7CisgICAgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKEdMaW50
IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0
RHJhdyk7CisgICAgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRl
eERhdGEgKmluZGV4SW5mbyk7CisgICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKKyAgICB2b2lkIGFw
cGx5VGV4dHVyZXMoKTsKKyAgICB2b2lkIGFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSk7
CisKKyAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGRldGFj
aFRleHR1cmUoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgZGV0YWNoRnJhbWVidWZmZXIoR0x1
aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVu
ZGVyYnVmZmVyKTsKKworICAgIFRleHR1cmUgKmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVU
eXBlIHR5cGUpOworCisgICAgYm9vbCBza2lwRHJhdyhHTGVudW0gZHJhd01vZGUpOworICAgIGJv
b2wgaXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKTsKKworICAgIHZvaWQgaW5pdEV4dGVu
c2lvblN0cmluZygpOworICAgIHZvaWQgaW5pdFJlbmRlcmVyU3RyaW5nKCk7CisKKyAgICBjb25z
dCBlZ2w6OkNvbmZpZyAqY29uc3QgbUNvbmZpZzsKKyAgICBlZ2w6OkRpc3BsYXkgKm1EaXNwbGF5
OworICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAgICBTdGF0ZSBtU3RhdGU7CisK
KyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlMkQ+IG1UZXh0dXJlMkRaZXJvOworICAgIEJpbmRp
bmdQb2ludGVyPFRleHR1cmVDdWJlTWFwPiBtVGV4dHVyZUN1YmVNYXBaZXJvOworCisjaWZuZGVm
IEhBU0hfTUFQCisjIGlmZGVmIF9NU0NfVkVSCisjICBkZWZpbmUgSEFTSF9NQVAgc3RkZXh0Ojpo
YXNoX21hcAorIyBlbHNlCisjICBkZWZpbmUgSEFTSF9NQVAgc3RkOjp1bm9yZGVyZWRfbWFwCisj
IGVuZGlmCisjZW5kaWYKKworICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBGcmFtZWJ1ZmZl
cio+IEZyYW1lYnVmZmVyTWFwOworICAgIEZyYW1lYnVmZmVyTWFwIG1GcmFtZWJ1ZmZlck1hcDsK
KyAgICBIYW5kbGVBbGxvY2F0b3IgbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yOworCisgICAg
dHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIEZlbmNlKj4gRmVuY2VNYXA7CisgICAgRmVuY2VNYXAg
bUZlbmNlTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtRmVuY2VIYW5kbGVBbGxvY2F0b3I7CisK
KyAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUXVlcnkqPiBRdWVyeU1hcDsKKyAgICBRdWVy
eU1hcCBtUXVlcnlNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1RdWVyeUhhbmRsZUFsbG9jYXRv
cjsKKworICAgIGNvbnN0IGNoYXIgKm1FeHRlbnNpb25TdHJpbmc7CisgICAgY29uc3QgY2hhciAq
bVJlbmRlcmVyU3RyaW5nOworCisgICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFu
YWdlcjsKKyAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKKworICAgIEJs
aXQgKm1CbGl0OworCisgICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIgKm1MaW5lTG9vcElCOworICAg
IAorICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IG1JbmNvbXBsZXRlVGV4dHVyZXNbVEVYVFVS
RV9UWVBFX0NPVU5UXTsKKworICAgIC8vIFJlY29yZGVkIGVycm9ycworICAgIGJvb2wgbUludmFs
aWRFbnVtOworICAgIGJvb2wgbUludmFsaWRWYWx1ZTsKKyAgICBib29sIG1JbnZhbGlkT3BlcmF0
aW9uOworICAgIGJvb2wgbU91dE9mTWVtb3J5OworICAgIGJvb2wgbUludmFsaWRGcmFtZWJ1ZmZl
ck9wZXJhdGlvbjsKKworICAgIC8vIEN1cnJlbnQvbG9zdCBjb250ZXh0IGZsYWdzCisgICAgYm9v
bCBtSGFzQmVlbkN1cnJlbnQ7CisgICAgYm9vbCBtQ29udGV4dExvc3Q7CisgICAgR0xlbnVtIG1S
ZXNldFN0YXR1czsKKyAgICBHTGVudW0gbVJlc2V0U3RyYXRlZ3k7CisgICAgYm9vbCBtUm9idXN0
QWNjZXNzOworCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTW01BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRUZXh0dXJlU2Vy
aWFsVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisgICAgdW5zaWduZWQg
aW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxp
ZWRSZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkRGVwdGhidWZm
ZXJTZXJpYWw7CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbDsK
KyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRJQlNlcmlhbDsKKyAgICBib29sIG1EZXB0aFN0ZW5j
aWxJbml0aWFsaXplZDsKKyAgICBib29sIG1WaWV3cG9ydEluaXRpYWxpemVkOworICAgIEQzRFZJ
RVdQT1JUOSBtU2V0Vmlld3BvcnQ7CisgICAgYm9vbCBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxp
emVkOworICAgIEQzRFNVUkZBQ0VfREVTQyBtUmVuZGVyVGFyZ2V0RGVzYzsKKyAgICBib29sIG1E
eFVuaWZvcm1zRGlydHk7CisgICAgQmluZGluZ1BvaW50ZXI8UHJvZ3JhbUJpbmFyeT4gbUN1cnJl
bnRQcm9ncmFtQmluYXJ5OworICAgIEZyYW1lYnVmZmVyICptQm91bmREcmF3RnJhbWVidWZmZXI7
CisKKyAgICBib29sIG1TdXBwb3J0c1NoYWRlck1vZGVsMzsKKyAgICBmbG9hdCBtTWF4aW11bVBv
aW50U2l6ZTsKKyAgICBib29sIG1TdXBwb3J0c1ZlcnRleFRleHR1cmU7CisgICAgYm9vbCBtU3Vw
cG9ydHNOb25Qb3dlcjJUZXh0dXJlOworICAgIGJvb2wgbVN1cHBvcnRzSW5zdGFuY2luZzsKKyAg
ICBpbnQgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247CisgICAgaW50ICBtTWF4VGV4dHVyZURp
bWVuc2lvbjsKKyAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1N
YXhUZXh0dXJlTGV2ZWw7CisgICAgZmxvYXQgbU1heFRleHR1cmVBbmlzb3Ryb3B5OworICAgIHN0
ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPiBtTXVsdGlTYW1wbGVTdXBwb3J0OworICAgIEdMc2l6
ZWkgbU1heFN1cHBvcnRlZFNhbXBsZXM7CisgICAgYm9vbCBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7
CisgICAgYm9vbCBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzOworICAgIGJvb2wgbVN1cHBvcnRz
RFhUMVRleHR1cmVzOworICAgIGJvb2wgbVN1cHBvcnRzRFhUM1RleHR1cmVzOworICAgIGJvb2wg
bVN1cHBvcnRzRFhUNVRleHR1cmVzOworICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVz
OworICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcjsKKyAgICBib29sIG1TdXBw
b3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNGbG9hdDE2
VGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyOworICAgIGJv
b2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0
c0x1bWluYW5jZVRleHR1cmVzOworICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0
dXJlczsKKyAgICBib29sIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9y
dHMzMmJpdEluZGljZXM7CisgICAgYm9vbCBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9w
eTsKKyAgICBib29sIG1TdXBwb3J0c0Rlcml2YXRpdmVJbnN0cnVjdGlvbnM7CisgICAgaW50IG1O
dW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CisKKyAgICAvLyBzdGF0ZSBjYWNoaW5nIGZsYWdz
CisgICAgYm9vbCBtQ2xlYXJTdGF0ZURpcnR5OworICAgIGJvb2wgbUN1bGxTdGF0ZURpcnR5Owor
ICAgIGJvb2wgbURlcHRoU3RhdGVEaXJ0eTsKKyAgICBib29sIG1NYXNrU3RhdGVEaXJ0eTsKKyAg
ICBib29sIG1QaXhlbFBhY2tpbmdTdGF0ZURpcnR5OworICAgIGJvb2wgbUJsZW5kU3RhdGVEaXJ0
eTsKKyAgICBib29sIG1TdGVuY2lsU3RhdGVEaXJ0eTsKKyAgICBib29sIG1Qb2x5Z29uT2Zmc2V0
U3RhdGVEaXJ0eTsKKyAgICBib29sIG1TY2lzc29yU3RhdGVEaXJ0eTsKKyAgICBib29sIG1TYW1w
bGVTdGF0ZURpcnR5OworICAgIGJvb2wgbUZyb250RmFjZURpcnR5OworICAgIGJvb2wgbURpdGhl
clN0YXRlRGlydHk7CisKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZTsKKworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworCisgICAgUmVzb3VyY2VNYW5h
Z2VyICptUmVzb3VyY2VNYW5hZ2VyOworCisgICAgVmVydGV4RGVjbGFyYXRpb25DYWNoZSBtVmVy
dGV4RGVjbGFyYXRpb25DYWNoZTsKK307Cit9CisKK2V4dGVybiAiQyIKK3sKKy8vIEV4cG9ydGVk
IGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IEVHTAorZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChj
b25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0
LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwordm9pZCBnbERlc3Ryb3lD
b250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKK3ZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29u
dGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZh
Y2UpOworZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKK19fZWdsTXVzdENhc3RU
b1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29u
c3QgY2hhciAqcHJvY25hbWUpOworYm9vbCBfX3N0ZGNhbGwgZ2xCaW5kVGV4SW1hZ2UoZWdsOjpT
dXJmYWNlICpzdXJmYWNlKTsKK30KKworI2VuZGlmICAgLy8gSU5DTFVERV9DT05URVhUX0hfCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMj
CisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRDNEQ29uc3RhbnRUYWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EM0RDb25zdGFudFRhYmxl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvRDNEQ29uc3RhbnRUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzEgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBEM0RDb25zdGFudFRhYmxlLmNwcDogSW1wbGVtZW50cyB0aGUg
RDNEQ29uc3RhbnRUYWJsZSBjbGFzcyB3aGljaCBwYXJzZXMKKy8vIGluZm9ybWF0aW9uIGFib3V0
IGNvbnN0YW50cyBmcm9tIHRoZSBDVEFCIGNvbW1lbnQgaW4gYSBEM0Qgc2hhZGVyIGJsb2IuCisv
LyBSZXN0cnVjdHVyZXMgdGhlIGNvbnN0YW50IHRhYmxlIGFzIGEgaGllcmFyY2h5IG9mIGNvbnN0
YW50cyBpbiB0aGUgc2FtZQorLy8gd2F5IGFzIEQzRFguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
RDNEQ29uc3RhbnRUYWJsZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL3N5c3RlbS5oIgorI2luY2x1
ZGUgPGQzZDkuaD4KKyNpbmNsdWRlIDxkM2Q5dHlwZXMuaD4KKyNpbmNsdWRlIDxtbXN5c3RlbS5o
PgorCisjaW5jbHVkZSAibGliR0xFU3YyL0JpbmFyeVN0cmVhbS5oIgorCitjb25zdCBzdGF0aWMg
aW50IFNIQURFUl9WRVJTSU9OX01BU0sgPSBEM0RWU19WRVJTSU9OKDAsIDApOworY29uc3Qgc3Rh
dGljIGludCBGT1VSQ0NfQ1RBQiA9IE1BS0VGT1VSQ0MoJ0MnLCdUJywnQScsJ0InKTsKKworbmFt
ZXNwYWNlIGdsCit7CisvLyBUaGVzZSBzdHJ1Y3RzIGFuZCBjb25zdGFudHMgY29ycmVzcG9uZCB0
byB0aGUgZm9ybWF0IG9mIHRoZSBjb25zdGFudCB0YWJsZSBpbiBhIHNoYWRlciBiaW5hcnkuCisv
LyBUaGV5IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIHN0cnVjdHVyZXMgaW4gZDNkeDlzaGFkZXIu
aC4KK25hbWVzcGFjZSBjdGFiCit7CitzdHJ1Y3QgQ29uc3RhbnRUYWJsZQoreworICAgIERXT1JE
IHNpemU7CisgICAgRFdPUkQgY3JlYXRvcjsKKyAgICBEV09SRCB2ZXJzaW9uOworICAgIERXT1JE
IGNvbnN0YW50czsKKyAgICBEV09SRCBjb25zdGFudEluZm9zOworICAgIERXT1JEIGZsYWdzOwor
ICAgIERXT1JEIHRhcmdldDsKK307CisKK3N0cnVjdCBDb25zdGFudEluZm8KK3sKKyAgICBEV09S
RCBuYW1lOworICAgIFdPUkQgcmVnaXN0ZXJTZXQ7CisgICAgV09SRCByZWdpc3RlckluZGV4Owor
ICAgIFdPUkQgcmVnaXN0ZXJDb3VudDsKKyAgICBXT1JEIHJlc2VydmVkOworICAgIERXT1JEIHR5
cGVJbmZvOworICAgIERXT1JEIGRlZmF1bHRWYWx1ZTsKK307CisKK3N0cnVjdCBUeXBlSW5mbwor
eworICAgIFdPUkQgdHlwZUNsYXNzOworICAgIFdPUkQgdHlwZTsKKyAgICBXT1JEIHJvd3M7Cisg
ICAgV09SRCBjb2x1bW5zOworICAgIFdPUkQgZWxlbWVudHM7CisgICAgV09SRCBzdHJ1Y3RNZW1i
ZXJzOworICAgIERXT1JEIHN0cnVjdE1lbWJlckluZm9zOworfTsKKworc3RydWN0IFN0cnVjdE1l
bWJlckluZm8KK3sKKyAgICBEV09SRCBuYW1lOworICAgIERXT1JEIHR5cGVJbmZvOworfTsKK30K
KworRDNEQ29uc3RhbnQ6OkQzRENvbnN0YW50KGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGN0YWI6
OkNvbnN0YW50SW5mbyAqY29uc3RhbnRJbmZvKQoreworICAgIGNvbnN0IGN0YWI6OlR5cGVJbmZv
ICp0eXBlSW5mbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY3RhYjo6VHlwZUluZm8qPihiYXNl
ICsgY29uc3RhbnRJbmZvLT50eXBlSW5mbyk7CisKKyAgICBuYW1lID0gYmFzZSArIGNvbnN0YW50
SW5mby0+bmFtZTsKKyAgICByZWdpc3RlclNldCA9IHN0YXRpY19jYXN0PFJlZ2lzdGVyU2V0Pihj
b25zdGFudEluZm8tPnJlZ2lzdGVyU2V0KTsKKyAgICByZWdpc3RlckluZGV4ID0gY29uc3RhbnRJ
bmZvLT5yZWdpc3RlckluZGV4OworICAgIHJlZ2lzdGVyQ291bnQgPSBjb25zdGFudEluZm8tPnJl
Z2lzdGVyQ291bnQ7CisgICAgdHlwZUNsYXNzID0gc3RhdGljX2Nhc3Q8Q2xhc3M+KHR5cGVJbmZv
LT50eXBlQ2xhc3MpOworICAgIHR5cGUgPSBzdGF0aWNfY2FzdDxUeXBlPih0eXBlSW5mby0+dHlw
ZSk7CisgICAgcm93cyA9IHR5cGVJbmZvLT5yb3dzOworICAgIGNvbHVtbnMgPSB0eXBlSW5mby0+
Y29sdW1uczsKKyAgICBlbGVtZW50cyA9IHR5cGVJbmZvLT5lbGVtZW50czsKKworICAgIGlmICh0
eXBlQ2xhc3MgPT0gQ0xBU1NfU1RSVUNUKQorICAgIHsKKyAgICAgICAgYWRkU3RydWN0TWVtYmVy
cyhiYXNlLCByZWdpc3RlclNldCwgcmVnaXN0ZXJJbmRleCwgcmVnaXN0ZXJJbmRleCArIHJlZ2lz
dGVyQ291bnQsIHR5cGVJbmZvKTsKKyAgICB9Cit9CisKK0QzRENvbnN0YW50OjpEM0RDb25zdGFu
dChjb25zdCBjaGFyICpiYXNlLCBSZWdpc3RlclNldCByZWdpc3RlclNldCwgdW5zaWduZWQgcmVn
aXN0ZXJJbmRleCwgdW5zaWduZWQgbWF4UmVnaXN0ZXIsIGNvbnN0IGN0YWI6OlN0cnVjdE1lbWJl
ckluZm8gKm1lbWJlckluZm8pCisgICAgOiByZWdpc3RlclNldChyZWdpc3RlclNldCksIHJlZ2lz
dGVySW5kZXgocmVnaXN0ZXJJbmRleCkKK3sKKyAgICBjb25zdCBjdGFiOjpUeXBlSW5mbyAqdHlw
ZUluZm8gPSByZWludGVycHJldF9jYXN0PGNvbnN0IGN0YWI6OlR5cGVJbmZvKj4oYmFzZSArIG1l
bWJlckluZm8tPnR5cGVJbmZvKTsKKworICAgIG5hbWUgPSBiYXNlICsgbWVtYmVySW5mby0+bmFt
ZTsKKyAgICByZWdpc3RlckNvdW50ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50PihtYXhSZWdp
c3RlciAtIHJlZ2lzdGVySW5kZXgpLCB0eXBlSW5mby0+cm93cyAqIHR5cGVJbmZvLT5lbGVtZW50
cyk7CisgICAgdHlwZUNsYXNzID0gc3RhdGljX2Nhc3Q8Q2xhc3M+KHR5cGVJbmZvLT50eXBlQ2xh
c3MpOworICAgIHR5cGUgPSBzdGF0aWNfY2FzdDxUeXBlPih0eXBlSW5mby0+dHlwZSk7CisgICAg
cm93cyA9IHR5cGVJbmZvLT5yb3dzOworICAgIGNvbHVtbnMgPSB0eXBlSW5mby0+Y29sdW1uczsK
KyAgICBlbGVtZW50cyA9IHR5cGVJbmZvLT5lbGVtZW50czsKKworICAgIGlmICh0eXBlQ2xhc3Mg
PT0gQ0xBU1NfU1RSVUNUKQorICAgIHsKKyAgICAgICAgcmVnaXN0ZXJDb3VudCA9IGFkZFN0cnVj
dE1lbWJlcnMoYmFzZSwgcmVnaXN0ZXJTZXQsIHJlZ2lzdGVySW5kZXgsIG1heFJlZ2lzdGVyLCB0
eXBlSW5mbyk7CisgICAgfQorfQorCitEM0RDb25zdGFudDo6fkQzRENvbnN0YW50KCkKK3sKKyAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN0cnVjdE1lbWJlcnMuc2l6ZSgpOyArK2opCisgICAg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdE1lbWJlcnNbal0uc2l6ZSgp
OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSBzdHJ1Y3RNZW1iZXJzW2pdW2ld
OworICAgICAgICB9CisgICAgfQorfQorCit1bnNpZ25lZCBEM0RDb25zdGFudDo6YWRkU3RydWN0
TWVtYmVycyhjb25zdCBjaGFyICpiYXNlLCBSZWdpc3RlclNldCByZWdpc3RlclNldCwgdW5zaWdu
ZWQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgbWF4UmVnaXN0ZXIsIGNvbnN0IGN0YWI6OlR5cGVJ
bmZvICp0eXBlSW5mbykKK3sKKyAgICBjb25zdCBjdGFiOjpTdHJ1Y3RNZW1iZXJJbmZvICptZW1i
ZXJJbmZvcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY3RhYjo6U3RydWN0TWVtYmVySW5mbyo+
KAorICAgICAgICBiYXNlICsgdHlwZUluZm8tPnN0cnVjdE1lbWJlckluZm9zKTsKKworICAgIHVu
c2lnbmVkIG1lbWJlckluZGV4ID0gcmVnaXN0ZXJJbmRleDsKKworICAgIHN0cnVjdE1lbWJlcnMu
cmVzaXplKGVsZW1lbnRzKTsKKworICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBlbGVtZW50
czsgKytqKQorICAgIHsKKyAgICAgICAgc3RydWN0TWVtYmVyc1tqXS5yZXNpemUodHlwZUluZm8t
PnN0cnVjdE1lbWJlcnMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0eXBl
SW5mby0+c3RydWN0TWVtYmVyczsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBj
dGFiOjpUeXBlSW5mbyAqbWVtYmVyVHlwZUluZm8gPSByZWludGVycHJldF9jYXN0PGNvbnN0IGN0
YWI6OlR5cGVJbmZvKj4oCisgICAgICAgICAgICAgICAgYmFzZSArIG1lbWJlckluZm9zW2ldLnR5
cGVJbmZvKTsKKworICAgICAgICAgICAgRDNEQ29uc3RhbnQgKm1lbWJlciA9IG5ldyBEM0RDb25z
dGFudChiYXNlLCByZWdpc3RlclNldCwgbWVtYmVySW5kZXgsIG1heFJlZ2lzdGVyLCBtZW1iZXJJ
bmZvcyArIGkpOworICAgICAgICAgICAgbWVtYmVySW5kZXggKz0gbWVtYmVyLT5yZWdpc3RlckNv
dW50OworCisgICAgICAgICAgICBzdHJ1Y3RNZW1iZXJzW2pdW2ldID0gbWVtYmVyOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIG1lbWJlckluZGV4IC0gcmVnaXN0ZXJJbmRleDsKK30K
KworRDNEQ29uc3RhbnRUYWJsZTo6RDNEQ29uc3RhbnRUYWJsZSh2b2lkICpibG9iLCBzaXplX3Qg
c2l6ZSkgOiBtRXJyb3IoZmFsc2UpCit7CisgICAgQmluYXJ5SW5wdXRTdHJlYW0gc3RyZWFtKGJs
b2IsIHNpemUpOworCisgICAgaW50IHZlcnNpb247CisgICAgc3RyZWFtLnJlYWQoJnZlcnNpb24p
OworICAgIGlmICgodmVyc2lvbiAmIFNIQURFUl9WRVJTSU9OX01BU0spICE9IFNIQURFUl9WRVJT
SU9OX01BU0spCisgICAgeworICAgICAgICBtRXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY29uc3QgY3RhYjo6Q29uc3RhbnRUYWJsZSogY29uc3RhbnRUYWJsZSA9
IE5VTEw7CisKKyAgICB3aGlsZSAoIXN0cmVhbS5lcnJvcigpKQorICAgIHsKKyAgICAgICAgaW50
IHRva2VuOworICAgICAgICBzdHJlYW0ucmVhZCgmdG9rZW4pOworCisgICAgICAgIGlmICgodG9r
ZW4gJiBEM0RTSV9PUENPREVfTUFTSykgPT0gRDNEU0lPX0NPTU1FTlQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHNpemVfdCBsZW5ndGggPSAoKHRva2VuICYgRDNEU0lfQ09NTUVOVFNJWkVfTUFT
SykgPj4gRDNEU0lfQ09NTUVOVFNJWkVfU0hJRlQpICogc2l6ZW9mKERXT1JEKTsKKworICAgICAg
ICAgICAgaW50IGZvdXJjYzsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZmb3VyY2MpOworICAg
ICAgICAgICAgaWYgKGZvdXJjYyA9PSBGT1VSQ0NfQ1RBQikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjb25zdGFudFRhYmxlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjdGFiOjpD
b25zdGFudFRhYmxlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJsb2IpICsgc3RyZWFtLm9m
ZnNldCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3RyZWFtLnNraXAobGVuZ3RoIC0gc2l6ZW9mKGZvdXJjYykpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHRva2VuID09IEQzRFNJT19FTkQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgbUVycm9yID0gIWNvbnN0YW50VGFi
bGUgfHwgc3RyZWFtLmVycm9yKCk7CisgICAgaWYgKG1FcnJvcikKKyAgICB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyICpiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oY29uc3RhbnRUYWJsZSk7CisKKyAgICBtQ29uc3RhbnRzLnJlc2l6ZShjb25z
dGFudFRhYmxlLT5jb25zdGFudHMpOworICAgIGNvbnN0IGN0YWI6OkNvbnN0YW50SW5mbyAqY29u
c3RhbnRJbmZvcyA9CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY3RhYjo6Q29uc3Rh
bnRJbmZvKj4oYmFzZSArIGNvbnN0YW50VGFibGUtPmNvbnN0YW50SW5mb3MpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29uc3RhbnRUYWJsZS0+Y29uc3RhbnRzOyArK2kpCisgICAgewor
ICAgICAgICBtQ29uc3RhbnRzW2ldID0gbmV3IEQzRENvbnN0YW50KGJhc2UsIGNvbnN0YW50SW5m
b3MgKyBpKTsKKyAgICB9Cit9CisKK0QzRENvbnN0YW50VGFibGU6On5EM0RDb25zdGFudFRhYmxl
KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1Db25zdGFudHMuc2l6ZSgpOyArK2kp
CisgICAgeworICAgICAgICBkZWxldGUgbUNvbnN0YW50c1tpXTsKKyAgICB9Cit9CisKK2NvbnN0
IEQzRENvbnN0YW50ICpEM0RDb25zdGFudFRhYmxlOjpnZXRDb25zdGFudCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUNvbnN0YW50c1tpbmRleF07Cit9CisKK2NvbnN0IEQz
RENvbnN0YW50ICpEM0RDb25zdGFudFRhYmxlOjpnZXRDb25zdGFudEJ5TmFtZShjb25zdCBjaGFy
ICpuYW1lKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUNvbnN0YW50cy5z
aXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IEQzRENvbnN0YW50ICpjb25zdGFudCA9
IGdldENvbnN0YW50KGkpOworICAgICAgICBpZiAoY29uc3RhbnQtPm5hbWUgPT0gbmFtZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50OworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRDNEQ29uc3RhbnRUYWJsZS5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0QzRENvbnN0YW50VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0QzRENvbnN0YW50VGFibGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRDNEQ29uc3RhbnRUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRDNE
Q29uc3RhbnRUYWJsZS5oOiBJbXBsZW1lbnRzIHRoZSBEM0RDb25zdGFudFRhYmxlIGNsYXNzIHdo
aWNoIHBhcnNlcworLy8gaW5mb3JtYXRpb24gYWJvdXQgY29uc3RhbnRzIGZyb20gdGhlIENUQUIg
Y29tbWVudCBpbiBhIEQzRCBzaGFkZXIgYmxvYi4KKy8vIFJlc3RydWN0dXJlcyB0aGUgY29uc3Rh
bnQgdGFibGUgYXMgYSBoaWVyYXJjaHkgb2YgY29uc3RhbnRzIGluIHRoZSBzYW1lCisvLyB3YXkg
YXMgRDNEWC4KKworI2lmbmRlZiBMSUJHTEVTVjJfRDNEQ09OU1RBTlRUQUJMRV9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfRDNEQ09OU1RBTlRUQUJMRV9IXworCisjaW5jbHVkZSA8dmVjdG9yPgorI2lu
Y2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVz
cGFjZSBnbAoreworCituYW1lc3BhY2UgY3RhYgoreworc3RydWN0IENvbnN0YW50VGFibGU7Citz
dHJ1Y3QgQ29uc3RhbnRJbmZvOworc3RydWN0IFR5cGVJbmZvOworc3RydWN0IFN0cnVjdE1lbWJl
ckluZm87Cit9CisKK3N0cnVjdCBEM0RDb25zdGFudAoreworICAgIC8vIFRoZXNlIGVudW1zIG1h
dGNoIHRob3NlIGluIGQzZHg5c2hhZGVyLmguCisgICAgZW51bSBDbGFzcworICAgIHsKKyAgICAg
ICAgQ0xBU1NfU0NBTEFSLAorICAgICAgICBDTEFTU19WRUNUT1IsCisgICAgICAgIENMQVNTX01B
VFJJWF9ST1dTLAorICAgICAgICBDTEFTU19NQVRSSVhfQ09MVU1OUywKKyAgICAgICAgQ0xBU1Nf
T0JKRUNULAorICAgICAgICBDTEFTU19TVFJVQ1QsCisgICAgfTsKKworICAgIGVudW0gUmVnaXN0
ZXJTZXQKKyAgICB7CisgICAgICAgIFJTX0JPT0wsCisgICAgICAgIFJTX0lOVDQsCisgICAgICAg
IFJTX0ZMT0FUNCwKKyAgICAgICAgUlNfU0FNUExFUiwKKyAgICB9OworCisgICAgZW51bSBUeXBl
CisgICAgeworICAgICAgICBQVF9WT0lELAorICAgICAgICBQVF9CT09MLAorICAgICAgICBQVF9J
TlQsCisgICAgICAgIFBUX0ZMT0FULAorICAgICAgICBQVF9TVFJJTkcsCisgICAgICAgIFBUX1RF
WFRVUkUsCisgICAgICAgIFBUX1RFWFRVUkUxRCwKKyAgICAgICAgUFRfVEVYVFVSRTJELAorICAg
ICAgICBQVF9URVhUVVJFM0QsCisgICAgICAgIFBUX1RFWFRVUkVDVUJFLAorICAgICAgICBQVF9T
QU1QTEVSLAorICAgICAgICBQVF9TQU1QTEVSMUQsCisgICAgICAgIFBUX1NBTVBMRVIyRCwKKyAg
ICAgICAgUFRfU0FNUExFUjNELAorICAgICAgICBQVF9TQU1QTEVSQ1VCRSwKKyAgICAgICAgUFRf
UElYRUxTSEFERVIsCisgICAgICAgIFBUX1ZFUlRFWFNIQURFUiwKKyAgICAgICAgUFRfUElYRUxG
UkFHTUVOVCwKKyAgICAgICAgUFRfVkVSVEVYRlJBR01FTlQsCisgICAgICAgIFBUX1VOU1VQUE9S
VEVELAorICAgIH07CisgICAgCisgICAgRDNEQ29uc3RhbnQoY29uc3QgY2hhciAqYmFzZSwgY29u
c3QgY3RhYjo6Q29uc3RhbnRJbmZvICpjb25zdGFudEluZm8pOworICAgIH5EM0RDb25zdGFudCgp
OworCisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICBSZWdpc3RlclNldCByZWdpc3RlclNldDsK
KyAgICB1bnNpZ25lZCByZWdpc3RlckluZGV4OworICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQ7
CisgICAgQ2xhc3MgdHlwZUNsYXNzOworICAgIFR5cGUgdHlwZTsKKyAgICB1bnNpZ25lZCByb3dz
OworICAgIHVuc2lnbmVkIGNvbHVtbnM7CisgICAgdW5zaWduZWQgZWxlbWVudHM7CisKKyAgICAv
LyBBcnJheSBvZiBzdHJ1Y3R1cmUgbWVtYmVycy4KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3Rv
cjxjb25zdCBEM0RDb25zdGFudCo+ID4gc3RydWN0TWVtYmVyczsgICAgCisKKyAgcHJpdmF0ZToK
KyAgICBEM0RDb25zdGFudChjb25zdCBjaGFyICpiYXNlLCBSZWdpc3RlclNldCByZWdpc3RlclNl
dCwgdW5zaWduZWQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgbWF4UmVnaXN0ZXIsIGNvbnN0IGN0
YWI6OlN0cnVjdE1lbWJlckluZm8gKm1lbWJlckluZm8pOworICAgIHVuc2lnbmVkIGFkZFN0cnVj
dE1lbWJlcnMoY29uc3QgY2hhciAqYmFzZSwgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJTZXQsIHVuc2ln
bmVkIHJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIG1heFJlZ2lzdGVyLCBjb25zdCBjdGFiOjpUeXBl
SW5mbyAqdHlwZUluZm8pOworfTsKKworY2xhc3MgRDNEQ29uc3RhbnRUYWJsZQoreworICBwdWJs
aWM6CisgICAgRDNEQ29uc3RhbnRUYWJsZSh2b2lkICpibG9iLCBzaXplX3Qgc2l6ZSk7CisgICAg
fkQzRENvbnN0YW50VGFibGUoKTsKKworICAgIGJvb2wgZXJyb3IoKSBjb25zdCB7IHJldHVybiBt
RXJyb3I7IH0KKworICAgIHVuc2lnbmVkIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1Db25z
dGFudHMuc2l6ZSgpOyB9CisgICAgY29uc3QgRDNEQ29uc3RhbnQgKmdldENvbnN0YW50KHVuc2ln
bmVkIGluZGV4KSBjb25zdDsKKyAgICBjb25zdCBEM0RDb25zdGFudCAqZ2V0Q29uc3RhbnRCeU5h
bWUoY29uc3QgY2hhciAqbmFtZSkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oRDNEQ29uc3RhbnRUYWJsZSk7CisgICAgc3RkOjp2ZWN0b3I8Y29uc3Qg
RDNEQ29uc3RhbnQqPiBtQ29uc3RhbnRzOworICAgIGJvb2wgbUVycm9yOworfTsKKworfQorCisj
ZW5kaWYgICAvLyBMSUJHTEVTVjJfRDNEQ09OU1RBTlRUQUJMRV9IXwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EM0RDb25zdGFudFRh
YmxlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTMyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBGZW5jZS5jcHA6IElt
cGxlbWVudHMgdGhlIGdsOjpGZW5jZSBjbGFzcywgd2hpY2ggc3VwcG9ydHMgdGhlIEdMX05WX2Zl
bmNlIGV4dGVuc2lvbi4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgorCisjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKKworbmFtZXNwYWNlIGdsCit7CisKK0ZlbmNlOjpGZW5jZShl
Z2w6OkRpc3BsYXkqIGRpc3BsYXkpCit7CisgICAgbURpc3BsYXkgPSBkaXNwbGF5OworICAgIG1R
dWVyeSA9IE5VTEw7CisgICAgbUNvbmRpdGlvbiA9IEdMX05PTkU7CisgICAgbVN0YXR1cyA9IEdM
X0ZBTFNFOworfQorCitGZW5jZTo6fkZlbmNlKCkKK3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwp
CisgICAgeworICAgICAgICBtRGlzcGxheS0+ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKKyAgICB9
Cit9CisKK0dMYm9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCit7CisgICAgLy8gR0xfTlZfZmVuY2Ug
c3BlYzoKKyAgICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBub3QgeWV0
IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZlbmNl
LgorICAgIHJldHVybiBtUXVlcnkgIT0gTlVMTDsKK30KKwordm9pZCBGZW5jZTo6c2V0RmVuY2Uo
R0xlbnVtIGNvbmRpdGlvbikKK3sKKyAgICBpZiAoIW1RdWVyeSkKKyAgICB7CisgICAgICAgIG1R
dWVyeSA9IG1EaXNwbGF5LT5hbGxvY2F0ZUV2ZW50UXVlcnkoKTsKKyAgICAgICAgaWYgKCFtUXVl
cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1
ZShEM0RJU1NVRV9FTkQpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBt
Q29uZGl0aW9uID0gY29uZGl0aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKK30KKworR0xi
b29sZWFuIEZlbmNlOjp0ZXN0RmVuY2UoKQoreworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7
CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwg
RDNER0VUREFUQV9GTFVTSCk7CisKKyAgICBpZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkpCisg
ICAgeworICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKKyAg
ICB9CisKKyAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOwor
ICAgIG1TdGF0dXMgPSByZXN1bHQgPT0gU19PSzsKKyAgICByZXR1cm4gbVN0YXR1czsKK30KKwor
dm9pZCBGZW5jZTo6ZmluaXNoRmVuY2UoKQoreworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQor
CisgICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkKKyAgICB7CisgICAgICAgIFNsZWVwKDApOworICAg
IH0KK30KKwordm9pZCBGZW5jZTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJh
bXMpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBuYW1lKQor
ICAgIHsKKyAgICAgICAgY2FzZSBHTF9GRU5DRV9TVEFUVVNfTlY6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0
dXMgb2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRl
c3RlZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5j
ZU5WCisgICAgICAgICAgICAvLyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NU
QVRVU19OViksIHRoZSBzdGF0dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNl
TlYgb2YgdGhlIGZlbmNlLgorICAgICAgICAgICAgaWYgKG1TdGF0dXMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7CisgICAgICAgICAgICBt
U3RhdHVzID0gcmVzdWx0ID09IFNfT0s7CisgICAgICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdHVz
OworICAgICAgICAgICAgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgICAgIHBhcmFtc1swXSA9IG1Db25k
aXRpb247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0ZlbmNlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQoj
IyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRmVu
Y2UuaDogRGVmaW5lcyB0aGUgZ2w6OkZlbmNlIGNsYXNzLCB3aGljaCBzdXBwb3J0cyB0aGUgR0xf
TlZfZmVuY2UgZXh0ZW5zaW9uLgorCisjaWZuZGVmIExJQkdMRVNWMl9GRU5DRV9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfRkVOQ0VfSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRp
bHMuaCIKKworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgRGlzcGxheTsKK30KKworbmFtZXNwYWNl
IGdsCit7CisKK2NsYXNzIEZlbmNlCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBGZW5jZShl
Z2w6OkRpc3BsYXkqIGRpc3BsYXkpOworICAgIHZpcnR1YWwgfkZlbmNlKCk7CisKKyAgICBHTGJv
b2xlYW4gaXNGZW5jZSgpOworICAgIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7Cisg
ICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOworICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKKyAgICB2
b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKworICBwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZSk7CisKKyAgICBlZ2w6OkRpc3Bs
YXkqIG1EaXNwbGF5OworICAgIElEaXJlY3QzRFF1ZXJ5OSogbVF1ZXJ5OworICAgIEdMZW51bSBt
Q29uZGl0aW9uOworICAgIEdMYm9vbGVhbiBtU3RhdHVzOworfTsKKworfQorCisjZW5kaWYgICAv
LyBMSUJHTEVTVjJfRkVOQ0VfSF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmxvYXQxNlRvRmxv
YXQzMi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9GbG9hdDE2VG9GbG9hdDMyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmxvYXQxNlRvRmxvYXQzMi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMjAzIEBACisvLw0KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUNCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQorLy8gVGhpcyBmaWxl
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLg0KKw0KK25hbWVzcGFjZSBnbA0KK3sNCisNCitj
b25zdCBzdGF0aWMgdW5zaWduZWQgZ19tYW50aXNzYVsyMDQ4XSA9IHsNCisgICAgMHgwMDAwMDAw
MCwNCisgICAgMHgzMzgwMDAwMCwNCisgICAgMHgzNDAwMDAwMCwNCisgICAgMHgzNDQwMDAwMCwN
CisgICAgMHgzNDgwMDAwMCwNCisgICAgMHgzNGEwMDAwMCwNCisgICAgMHgzNGMwMDAwMCwNCisg
ICAgMHgzNGUwMDAwMCwNCisgICAgMHgzNTAwMDAwMCwNCisgICAgMHgzNTEwMDAwMCwNCisgICAg
MHgzNTIwMDAwMCwNCisgICAgMHgzNTMwMDAwMCwNCisgICAgMHgzNTQwMDAwMCwNCisgICAgMHgz
NTUwMDAwMCwNCisgICAgMHgzNTYwMDAwMCwNCisgICAgMHgzNTcwMDAwMCwNCisgICAgMHgzNTgw
MDAwMCwNCisgICAgMHgzNTg4MDAwMCwNCisgICAgMHgzNTkwMDAwMCwNCisgICAgMHgzNTk4MDAw
MCwNCisgICAgMHgzNWEwMDAwMCwNCisgICAgMHgzNWE4MDAwMCwNCisgICAgMHgzNWIwMDAwMCwN
CisgICAgMHgzNWI4MDAwMCwNCisgICAgMHgzNWMwMDAwMCwNCisgICAgMHgzNWM4MDAwMCwNCisg
ICAgMHgzNWQwMDAwMCwNCisgICAgMHgzNWQ4MDAwMCwNCisgICAgMHgzNWUwMDAwMCwNCisgICAg
MHgzNWU4MDAwMCwNCisgICAgMHgzNWYwMDAwMCwNCisgICAgMHgzNWY4MDAwMCwNCisgICAgMHgz
NjAwMDAwMCwNCisgICAgMHgzNjA0MDAwMCwNCisgICAgMHgzNjA4MDAwMCwNCisgICAgMHgzNjBj
MDAwMCwNCisgICAgMHgzNjEwMDAwMCwNCisgICAgMHgzNjE0MDAwMCwNCisgICAgMHgzNjE4MDAw
MCwNCisgICAgMHgzNjFjMDAwMCwNCisgICAgMHgzNjIwMDAwMCwNCisgICAgMHgzNjI0MDAwMCwN
CisgICAgMHgzNjI4MDAwMCwNCisgICAgMHgzNjJjMDAwMCwNCisgICAgMHgzNjMwMDAwMCwNCisg
ICAgMHgzNjM0MDAwMCwNCisgICAgMHgzNjM4MDAwMCwNCisgICAgMHgzNjNjMDAwMCwNCisgICAg
MHgzNjQwMDAwMCwNCisgICAgMHgzNjQ0MDAwMCwNCisgICAgMHgzNjQ4MDAwMCwNCisgICAgMHgz
NjRjMDAwMCwNCisgICAgMHgzNjUwMDAwMCwNCisgICAgMHgzNjU0MDAwMCwNCisgICAgMHgzNjU4
MDAwMCwNCisgICAgMHgzNjVjMDAwMCwNCisgICAgMHgzNjYwMDAwMCwNCisgICAgMHgzNjY0MDAw
MCwNCisgICAgMHgzNjY4MDAwMCwNCisgICAgMHgzNjZjMDAwMCwNCisgICAgMHgzNjcwMDAwMCwN
CisgICAgMHgzNjc0MDAwMCwNCisgICAgMHgzNjc4MDAwMCwNCisgICAgMHgzNjdjMDAwMCwNCisg
ICAgMHgzNjgwMDAwMCwNCisgICAgMHgzNjgyMDAwMCwNCisgICAgMHgzNjg0MDAwMCwNCisgICAg
MHgzNjg2MDAwMCwNCisgICAgMHgzNjg4MDAwMCwNCisgICAgMHgzNjhhMDAwMCwNCisgICAgMHgz
NjhjMDAwMCwNCisgICAgMHgzNjhlMDAwMCwNCisgICAgMHgzNjkwMDAwMCwNCisgICAgMHgzNjky
MDAwMCwNCisgICAgMHgzNjk0MDAwMCwNCisgICAgMHgzNjk2MDAwMCwNCisgICAgMHgzNjk4MDAw
MCwNCisgICAgMHgzNjlhMDAwMCwNCisgICAgMHgzNjljMDAwMCwNCisgICAgMHgzNjllMDAwMCwN
CisgICAgMHgzNmEwMDAwMCwNCisgICAgMHgzNmEyMDAwMCwNCisgICAgMHgzNmE0MDAwMCwNCisg
ICAgMHgzNmE2MDAwMCwNCisgICAgMHgzNmE4MDAwMCwNCisgICAgMHgzNmFhMDAwMCwNCisgICAg
MHgzNmFjMDAwMCwNCisgICAgMHgzNmFlMDAwMCwNCisgICAgMHgzNmIwMDAwMCwNCisgICAgMHgz
NmIyMDAwMCwNCisgICAgMHgzNmI0MDAwMCwNCisgICAgMHgzNmI2MDAwMCwNCisgICAgMHgzNmI4
MDAwMCwNCisgICAgMHgzNmJhMDAwMCwNCisgICAgMHgzNmJjMDAwMCwNCisgICAgMHgzNmJlMDAw
MCwNCisgICAgMHgzNmMwMDAwMCwNCisgICAgMHgzNmMyMDAwMCwNCisgICAgMHgzNmM0MDAwMCwN
CisgICAgMHgzNmM2MDAwMCwNCisgICAgMHgzNmM4MDAwMCwNCisgICAgMHgzNmNhMDAwMCwNCisg
ICAgMHgzNmNjMDAwMCwNCisgICAgMHgzNmNlMDAwMCwNCisgICAgMHgzNmQwMDAwMCwNCisgICAg
MHgzNmQyMDAwMCwNCisgICAgMHgzNmQ0MDAwMCwNCisgICAgMHgzNmQ2MDAwMCwNCisgICAgMHgz
NmQ4MDAwMCwNCisgICAgMHgzNmRhMDAwMCwNCisgICAgMHgzNmRjMDAwMCwNCisgICAgMHgzNmRl
MDAwMCwNCisgICAgMHgzNmUwMDAwMCwNCisgICAgMHgzNmUyMDAwMCwNCisgICAgMHgzNmU0MDAw
MCwNCisgICAgMHgzNmU2MDAwMCwNCisgICAgMHgzNmU4MDAwMCwNCisgICAgMHgzNmVhMDAwMCwN
CisgICAgMHgzNmVjMDAwMCwNCisgICAgMHgzNmVlMDAwMCwNCisgICAgMHgzNmYwMDAwMCwNCisg
ICAgMHgzNmYyMDAwMCwNCisgICAgMHgzNmY0MDAwMCwNCisgICAgMHgzNmY2MDAwMCwNCisgICAg
MHgzNmY4MDAwMCwNCisgICAgMHgzNmZhMDAwMCwNCisgICAgMHgzNmZjMDAwMCwNCisgICAgMHgz
NmZlMDAwMCwNCisgICAgMHgzNzAwMDAwMCwNCisgICAgMHgzNzAxMDAwMCwNCisgICAgMHgzNzAy
MDAwMCwNCisgICAgMHgzNzAzMDAwMCwNCisgICAgMHgzNzA0MDAwMCwNCisgICAgMHgzNzA1MDAw
MCwNCisgICAgMHgzNzA2MDAwMCwNCisgICAgMHgzNzA3MDAwMCwNCisgICAgMHgzNzA4MDAwMCwN
CisgICAgMHgzNzA5MDAwMCwNCisgICAgMHgzNzBhMDAwMCwNCisgICAgMHgzNzBiMDAwMCwNCisg
ICAgMHgzNzBjMDAwMCwNCisgICAgMHgzNzBkMDAwMCwNCisgICAgMHgzNzBlMDAwMCwNCisgICAg
MHgzNzBmMDAwMCwNCisgICAgMHgzNzEwMDAwMCwNCisgICAgMHgzNzExMDAwMCwNCisgICAgMHgz
NzEyMDAwMCwNCisgICAgMHgzNzEzMDAwMCwNCisgICAgMHgzNzE0MDAwMCwNCisgICAgMHgzNzE1
MDAwMCwNCisgICAgMHgzNzE2MDAwMCwNCisgICAgMHgzNzE3MDAwMCwNCisgICAgMHgzNzE4MDAw
MCwNCisgICAgMHgzNzE5MDAwMCwNCisgICAgMHgzNzFhMDAwMCwNCisgICAgMHgzNzFiMDAwMCwN
CisgICAgMHgzNzFjMDAwMCwNCisgICAgMHgzNzFkMDAwMCwNCisgICAgMHgzNzFlMDAwMCwNCisg
ICAgMHgzNzFmMDAwMCwNCisgICAgMHgzNzIwMDAwMCwNCisgICAgMHgzNzIxMDAwMCwNCisgICAg
MHgzNzIyMDAwMCwNCisgICAgMHgzNzIzMDAwMCwNCisgICAgMHgzNzI0MDAwMCwNCisgICAgMHgz
NzI1MDAwMCwNCisgICAgMHgzNzI2MDAwMCwNCisgICAgMHgzNzI3MDAwMCwNCisgICAgMHgzNzI4
MDAwMCwNCisgICAgMHgzNzI5MDAwMCwNCisgICAgMHgzNzJhMDAwMCwNCisgICAgMHgzNzJiMDAw
MCwNCisgICAgMHgzNzJjMDAwMCwNCisgICAgMHgzNzJkMDAwMCwNCisgICAgMHgzNzJlMDAwMCwN
CisgICAgMHgzNzJmMDAwMCwNCisgICAgMHgzNzMwMDAwMCwNCisgICAgMHgzNzMxMDAwMCwNCisg
ICAgMHgzNzMyMDAwMCwNCisgICAgMHgzNzMzMDAwMCwNCisgICAgMHgzNzM0MDAwMCwNCisgICAg
MHgzNzM1MDAwMCwNCisgICAgMHgzNzM2MDAwMCwNCisgICAgMHgzNzM3MDAwMCwNCisgICAgMHgz
NzM4MDAwMCwNCisgICAgMHgzNzM5MDAwMCwNCisgICAgMHgzNzNhMDAwMCwNCisgICAgMHgzNzNi
MDAwMCwNCisgICAgMHgzNzNjMDAwMCwNCisgICAgMHgzNzNkMDAwMCwNCisgICAgMHgzNzNlMDAw
MCwNCisgICAgMHgzNzNmMDAwMCwNCisgICAgMHgzNzQwMDAwMCwNCisgICAgMHgzNzQxMDAwMCwN
CisgICAgMHgzNzQyMDAwMCwNCisgICAgMHgzNzQzMDAwMCwNCisgICAgMHgzNzQ0MDAwMCwNCisg
ICAgMHgzNzQ1MDAwMCwNCisgICAgMHgzNzQ2MDAwMCwNCisgICAgMHgzNzQ3MDAwMCwNCisgICAg
MHgzNzQ4MDAwMCwNCisgICAgMHgzNzQ5MDAwMCwNCisgICAgMHgzNzRhMDAwMCwNCisgICAgMHgz
NzRiMDAwMCwNCisgICAgMHgzNzRjMDAwMCwNCisgICAgMHgzNzRkMDAwMCwNCisgICAgMHgzNzRl
MDAwMCwNCisgICAgMHgzNzRmMDAwMCwNCisgICAgMHgzNzUwMDAwMCwNCisgICAgMHgzNzUxMDAw
MCwNCisgICAgMHgzNzUyMDAwMCwNCisgICAgMHgzNzUzMDAwMCwNCisgICAgMHgzNzU0MDAwMCwN
CisgICAgMHgzNzU1MDAwMCwNCisgICAgMHgzNzU2MDAwMCwNCisgICAgMHgzNzU3MDAwMCwNCisg
ICAgMHgzNzU4MDAwMCwNCisgICAgMHgzNzU5MDAwMCwNCisgICAgMHgzNzVhMDAwMCwNCisgICAg
MHgzNzViMDAwMCwNCisgICAgMHgzNzVjMDAwMCwNCisgICAgMHgzNzVkMDAwMCwNCisgICAgMHgz
NzVlMDAwMCwNCisgICAgMHgzNzVmMDAwMCwNCisgICAgMHgzNzYwMDAwMCwNCisgICAgMHgzNzYx
MDAwMCwNCisgICAgMHgzNzYyMDAwMCwNCisgICAgMHgzNzYzMDAwMCwNCisgICAgMHgzNzY0MDAw
MCwNCisgICAgMHgzNzY1MDAwMCwNCisgICAgMHgzNzY2MDAwMCwNCisgICAgMHgzNzY3MDAwMCwN
CisgICAgMHgzNzY4MDAwMCwNCisgICAgMHgzNzY5MDAwMCwNCisgICAgMHgzNzZhMDAwMCwNCisg
ICAgMHgzNzZiMDAwMCwNCisgICAgMHgzNzZjMDAwMCwNCisgICAgMHgzNzZkMDAwMCwNCisgICAg
MHgzNzZlMDAwMCwNCisgICAgMHgzNzZmMDAwMCwNCisgICAgMHgzNzcwMDAwMCwNCisgICAgMHgz
NzcxMDAwMCwNCisgICAgMHgzNzcyMDAwMCwNCisgICAgMHgzNzczMDAwMCwNCisgICAgMHgzNzc0
MDAwMCwNCisgICAgMHgzNzc1MDAwMCwNCisgICAgMHgzNzc2MDAwMCwNCisgICAgMHgzNzc3MDAw
MCwNCisgICAgMHgzNzc4MDAwMCwNCisgICAgMHgzNzc5MDAwMCwNCisgICAgMHgzNzdhMDAwMCwN
CisgICAgMHgzNzdiMDAwMCwNCisgICAgMHgzNzdjMDAwMCwNCisgICAgMHgzNzdkMDAwMCwNCisg
ICAgMHgzNzdlMDAwMCwNCisgICAgMHgzNzdmMDAwMCwNCisgICAgMHgzNzgwMDAwMCwNCisgICAg
MHgzNzgwODAwMCwNCisgICAgMHgzNzgxMDAwMCwNCisgICAgMHgzNzgxODAwMCwNCisgICAgMHgz
NzgyMDAwMCwNCisgICAgMHgzNzgyODAwMCwNCisgICAgMHgzNzgzMDAwMCwNCisgICAgMHgzNzgz
ODAwMCwNCisgICAgMHgzNzg0MDAwMCwNCisgICAgMHgzNzg0ODAwMCwNCisgICAgMHgzNzg1MDAw
MCwNCisgICAgMHgzNzg1ODAwMCwNCisgICAgMHgzNzg2MDAwMCwNCisgICAgMHgzNzg2ODAwMCwN
CisgICAgMHgzNzg3MDAwMCwNCisgICAgMHgzNzg3ODAwMCwNCisgICAgMHgzNzg4MDAwMCwNCisg
ICAgMHgzNzg4ODAwMCwNCisgICAgMHgzNzg5MDAwMCwNCisgICAgMHgzNzg5ODAwMCwNCisgICAg
MHgzNzhhMDAwMCwNCisgICAgMHgzNzhhODAwMCwNCisgICAgMHgzNzhiMDAwMCwNCisgICAgMHgz
NzhiODAwMCwNCisgICAgMHgzNzhjMDAwMCwNCisgICAgMHgzNzhjODAwMCwNCisgICAgMHgzNzhk
MDAwMCwNCisgICAgMHgzNzhkODAwMCwNCisgICAgMHgzNzhlMDAwMCwNCisgICAgMHgzNzhlODAw
MCwNCisgICAgMHgzNzhmMDAwMCwNCisgICAgMHgzNzhmODAwMCwNCisgICAgMHgzNzkwMDAwMCwN
CisgICAgMHgzNzkwODAwMCwNCisgICAgMHgzNzkxMDAwMCwNCisgICAgMHgzNzkxODAwMCwNCisg
ICAgMHgzNzkyMDAwMCwNCisgICAgMHgzNzkyODAwMCwNCisgICAgMHgzNzkzMDAwMCwNCisgICAg
MHgzNzkzODAwMCwNCisgICAgMHgzNzk0MDAwMCwNCisgICAgMHgzNzk0ODAwMCwNCisgICAgMHgz
Nzk1MDAwMCwNCisgICAgMHgzNzk1ODAwMCwNCisgICAgMHgzNzk2MDAwMCwNCisgICAgMHgzNzk2
ODAwMCwNCisgICAgMHgzNzk3MDAwMCwNCisgICAgMHgzNzk3ODAwMCwNCisgICAgMHgzNzk4MDAw
MCwNCisgICAgMHgzNzk4ODAwMCwNCisgICAgMHgzNzk5MDAwMCwNCisgICAgMHgzNzk5ODAwMCwN
CisgICAgMHgzNzlhMDAwMCwNCisgICAgMHgzNzlhODAwMCwNCisgICAgMHgzNzliMDAwMCwNCisg
ICAgMHgzNzliODAwMCwNCisgICAgMHgzNzljMDAwMCwNCisgICAgMHgzNzljODAwMCwNCisgICAg
MHgzNzlkMDAwMCwNCisgICAgMHgzNzlkODAwMCwNCisgICAgMHgzNzllMDAwMCwNCisgICAgMHgz
NzllODAwMCwNCisgICAgMHgzNzlmMDAwMCwNCisgICAgMHgzNzlmODAwMCwNCisgICAgMHgzN2Ew
MDAwMCwNCisgICAgMHgzN2EwODAwMCwNCisgICAgMHgzN2ExMDAwMCwNCisgICAgMHgzN2ExODAw
MCwNCisgICAgMHgzN2EyMDAwMCwNCisgICAgMHgzN2EyODAwMCwNCisgICAgMHgzN2EzMDAwMCwN
CisgICAgMHgzN2EzODAwMCwNCisgICAgMHgzN2E0MDAwMCwNCisgICAgMHgzN2E0ODAwMCwNCisg
ICAgMHgzN2E1MDAwMCwNCisgICAgMHgzN2E1ODAwMCwNCisgICAgMHgzN2E2MDAwMCwNCisgICAg
MHgzN2E2ODAwMCwNCisgICAgMHgzN2E3MDAwMCwNCisgICAgMHgzN2E3ODAwMCwNCisgICAgMHgz
N2E4MDAwMCwNCisgICAgMHgzN2E4ODAwMCwNCisgICAgMHgzN2E5MDAwMCwNCisgICAgMHgzN2E5
ODAwMCwNCisgICAgMHgzN2FhMDAwMCwNCisgICAgMHgzN2FhODAwMCwNCisgICAgMHgzN2FiMDAw
MCwNCisgICAgMHgzN2FiODAwMCwNCisgICAgMHgzN2FjMDAwMCwNCisgICAgMHgzN2FjODAwMCwN
CisgICAgMHgzN2FkMDAwMCwNCisgICAgMHgzN2FkODAwMCwNCisgICAgMHgzN2FlMDAwMCwNCisg
ICAgMHgzN2FlODAwMCwNCisgICAgMHgzN2FmMDAwMCwNCisgICAgMHgzN2FmODAwMCwNCisgICAg
MHgzN2IwMDAwMCwNCisgICAgMHgzN2IwODAwMCwNCisgICAgMHgzN2IxMDAwMCwNCisgICAgMHgz
N2IxODAwMCwNCisgICAgMHgzN2IyMDAwMCwNCisgICAgMHgzN2IyODAwMCwNCisgICAgMHgzN2Iz
MDAwMCwNCisgICAgMHgzN2IzODAwMCwNCisgICAgMHgzN2I0MDAwMCwNCisgICAgMHgzN2I0ODAw
MCwNCisgICAgMHgzN2I1MDAwMCwNCisgICAgMHgzN2I1ODAwMCwNCisgICAgMHgzN2I2MDAwMCwN
CisgICAgMHgzN2I2ODAwMCwNCisgICAgMHgzN2I3MDAwMCwNCisgICAgMHgzN2I3ODAwMCwNCisg
ICAgMHgzN2I4MDAwMCwNCisgICAgMHgzN2I4ODAwMCwNCisgICAgMHgzN2I5MDAwMCwNCisgICAg
MHgzN2I5ODAwMCwNCisgICAgMHgzN2JhMDAwMCwNCisgICAgMHgzN2JhODAwMCwNCisgICAgMHgz
N2JiMDAwMCwNCisgICAgMHgzN2JiODAwMCwNCisgICAgMHgzN2JjMDAwMCwNCisgICAgMHgzN2Jj
ODAwMCwNCisgICAgMHgzN2JkMDAwMCwNCisgICAgMHgzN2JkODAwMCwNCisgICAgMHgzN2JlMDAw
MCwNCisgICAgMHgzN2JlODAwMCwNCisgICAgMHgzN2JmMDAwMCwNCisgICAgMHgzN2JmODAwMCwN
CisgICAgMHgzN2MwMDAwMCwNCisgICAgMHgzN2MwODAwMCwNCisgICAgMHgzN2MxMDAwMCwNCisg
ICAgMHgzN2MxODAwMCwNCisgICAgMHgzN2MyMDAwMCwNCisgICAgMHgzN2MyODAwMCwNCisgICAg
MHgzN2MzMDAwMCwNCisgICAgMHgzN2MzODAwMCwNCisgICAgMHgzN2M0MDAwMCwNCisgICAgMHgz
N2M0ODAwMCwNCisgICAgMHgzN2M1MDAwMCwNCisgICAgMHgzN2M1ODAwMCwNCisgICAgMHgzN2M2
MDAwMCwNCisgICAgMHgzN2M2ODAwMCwNCisgICAgMHgzN2M3MDAwMCwNCisgICAgMHgzN2M3ODAw
MCwNCisgICAgMHgzN2M4MDAwMCwNCisgICAgMHgzN2M4ODAwMCwNCisgICAgMHgzN2M5MDAwMCwN
CisgICAgMHgzN2M5ODAwMCwNCisgICAgMHgzN2NhMDAwMCwNCisgICAgMHgzN2NhODAwMCwNCisg
ICAgMHgzN2NiMDAwMCwNCisgICAgMHgzN2NiODAwMCwNCisgICAgMHgzN2NjMDAwMCwNCisgICAg
MHgzN2NjODAwMCwNCisgICAgMHgzN2NkMDAwMCwNCisgICAgMHgzN2NkODAwMCwNCisgICAgMHgz
N2NlMDAwMCwNCisgICAgMHgzN2NlODAwMCwNCisgICAgMHgzN2NmMDAwMCwNCisgICAgMHgzN2Nm
ODAwMCwNCisgICAgMHgzN2QwMDAwMCwNCisgICAgMHgzN2QwODAwMCwNCisgICAgMHgzN2QxMDAw
MCwNCisgICAgMHgzN2QxODAwMCwNCisgICAgMHgzN2QyMDAwMCwNCisgICAgMHgzN2QyODAwMCwN
CisgICAgMHgzN2QzMDAwMCwNCisgICAgMHgzN2QzODAwMCwNCisgICAgMHgzN2Q0MDAwMCwNCisg
ICAgMHgzN2Q0ODAwMCwNCisgICAgMHgzN2Q1MDAwMCwNCisgICAgMHgzN2Q1ODAwMCwNCisgICAg
MHgzN2Q2MDAwMCwNCisgICAgMHgzN2Q2ODAwMCwNCisgICAgMHgzN2Q3MDAwMCwNCisgICAgMHgz
N2Q3ODAwMCwNCisgICAgMHgzN2Q4MDAwMCwNCisgICAgMHgzN2Q4ODAwMCwNCisgICAgMHgzN2Q5
MDAwMCwNCisgICAgMHgzN2Q5ODAwMCwNCisgICAgMHgzN2RhMDAwMCwNCisgICAgMHgzN2RhODAw
MCwNCisgICAgMHgzN2RiMDAwMCwNCisgICAgMHgzN2RiODAwMCwNCisgICAgMHgzN2RjMDAwMCwN
CisgICAgMHgzN2RjODAwMCwNCisgICAgMHgzN2RkMDAwMCwNCisgICAgMHgzN2RkODAwMCwNCisg
ICAgMHgzN2RlMDAwMCwNCisgICAgMHgzN2RlODAwMCwNCisgICAgMHgzN2RmMDAwMCwNCisgICAg
MHgzN2RmODAwMCwNCisgICAgMHgzN2UwMDAwMCwNCisgICAgMHgzN2UwODAwMCwNCisgICAgMHgz
N2UxMDAwMCwNCisgICAgMHgzN2UxODAwMCwNCisgICAgMHgzN2UyMDAwMCwNCisgICAgMHgzN2Uy
ODAwMCwNCisgICAgMHgzN2UzMDAwMCwNCisgICAgMHgzN2UzODAwMCwNCisgICAgMHgzN2U0MDAw
MCwNCisgICAgMHgzN2U0ODAwMCwNCisgICAgMHgzN2U1MDAwMCwNCisgICAgMHgzN2U1ODAwMCwN
CisgICAgMHgzN2U2MDAwMCwNCisgICAgMHgzN2U2ODAwMCwNCisgICAgMHgzN2U3MDAwMCwNCisg
ICAgMHgzN2U3ODAwMCwNCisgICAgMHgzN2U4MDAwMCwNCisgICAgMHgzN2U4ODAwMCwNCisgICAg
MHgzN2U5MDAwMCwNCisgICAgMHgzN2U5ODAwMCwNCisgICAgMHgzN2VhMDAwMCwNCisgICAgMHgz
N2VhODAwMCwNCisgICAgMHgzN2ViMDAwMCwNCisgICAgMHgzN2ViODAwMCwNCisgICAgMHgzN2Vj
MDAwMCwNCisgICAgMHgzN2VjODAwMCwNCisgICAgMHgzN2VkMDAwMCwNCisgICAgMHgzN2VkODAw
MCwNCisgICAgMHgzN2VlMDAwMCwNCisgICAgMHgzN2VlODAwMCwNCisgICAgMHgzN2VmMDAwMCwN
CisgICAgMHgzN2VmODAwMCwNCisgICAgMHgzN2YwMDAwMCwNCisgICAgMHgzN2YwODAwMCwNCisg
ICAgMHgzN2YxMDAwMCwNCisgICAgMHgzN2YxODAwMCwNCisgICAgMHgzN2YyMDAwMCwNCisgICAg
MHgzN2YyODAwMCwNCisgICAgMHgzN2YzMDAwMCwNCisgICAgMHgzN2YzODAwMCwNCisgICAgMHgz
N2Y0MDAwMCwNCisgICAgMHgzN2Y0ODAwMCwNCisgICAgMHgzN2Y1MDAwMCwNCisgICAgMHgzN2Y1
ODAwMCwNCisgICAgMHgzN2Y2MDAwMCwNCisgICAgMHgzN2Y2ODAwMCwNCisgICAgMHgzN2Y3MDAw
MCwNCisgICAgMHgzN2Y3ODAwMCwNCisgICAgMHgzN2Y4MDAwMCwNCisgICAgMHgzN2Y4ODAwMCwN
CisgICAgMHgzN2Y5MDAwMCwNCisgICAgMHgzN2Y5ODAwMCwNCisgICAgMHgzN2ZhMDAwMCwNCisg
ICAgMHgzN2ZhODAwMCwNCisgICAgMHgzN2ZiMDAwMCwNCisgICAgMHgzN2ZiODAwMCwNCisgICAg
MHgzN2ZjMDAwMCwNCisgICAgMHgzN2ZjODAwMCwNCisgICAgMHgzN2ZkMDAwMCwNCisgICAgMHgz
N2ZkODAwMCwNCisgICAgMHgzN2ZlMDAwMCwNCisgICAgMHgzN2ZlODAwMCwNCisgICAgMHgzN2Zm
MDAwMCwNCisgICAgMHgzN2ZmODAwMCwNCisgICAgMHgzODAwMDAwMCwNCisgICAgMHgzODAwNDAw
MCwNCisgICAgMHgzODAwODAwMCwNCisgICAgMHgzODAwYzAwMCwNCisgICAgMHgzODAxMDAwMCwN
CisgICAgMHgzODAxNDAwMCwNCisgICAgMHgzODAxODAwMCwNCisgICAgMHgzODAxYzAwMCwNCisg
ICAgMHgzODAyMDAwMCwNCisgICAgMHgzODAyNDAwMCwNCisgICAgMHgzODAyODAwMCwNCisgICAg
MHgzODAyYzAwMCwNCisgICAgMHgzODAzMDAwMCwNCisgICAgMHgzODAzNDAwMCwNCisgICAgMHgz
ODAzODAwMCwNCisgICAgMHgzODAzYzAwMCwNCisgICAgMHgzODA0MDAwMCwNCisgICAgMHgzODA0
NDAwMCwNCisgICAgMHgzODA0ODAwMCwNCisgICAgMHgzODA0YzAwMCwNCisgICAgMHgzODA1MDAw
MCwNCisgICAgMHgzODA1NDAwMCwNCisgICAgMHgzODA1ODAwMCwNCisgICAgMHgzODA1YzAwMCwN
CisgICAgMHgzODA2MDAwMCwNCisgICAgMHgzODA2NDAwMCwNCisgICAgMHgzODA2ODAwMCwNCisg
ICAgMHgzODA2YzAwMCwNCisgICAgMHgzODA3MDAwMCwNCisgICAgMHgzODA3NDAwMCwNCisgICAg
MHgzODA3ODAwMCwNCisgICAgMHgzODA3YzAwMCwNCisgICAgMHgzODA4MDAwMCwNCisgICAgMHgz
ODA4NDAwMCwNCisgICAgMHgzODA4ODAwMCwNCisgICAgMHgzODA4YzAwMCwNCisgICAgMHgzODA5
MDAwMCwNCisgICAgMHgzODA5NDAwMCwNCisgICAgMHgzODA5ODAwMCwNCisgICAgMHgzODA5YzAw
MCwNCisgICAgMHgzODBhMDAwMCwNCisgICAgMHgzODBhNDAwMCwNCisgICAgMHgzODBhODAwMCwN
CisgICAgMHgzODBhYzAwMCwNCisgICAgMHgzODBiMDAwMCwNCisgICAgMHgzODBiNDAwMCwNCisg
ICAgMHgzODBiODAwMCwNCisgICAgMHgzODBiYzAwMCwNCisgICAgMHgzODBjMDAwMCwNCisgICAg
MHgzODBjNDAwMCwNCisgICAgMHgzODBjODAwMCwNCisgICAgMHgzODBjYzAwMCwNCisgICAgMHgz
ODBkMDAwMCwNCisgICAgMHgzODBkNDAwMCwNCisgICAgMHgzODBkODAwMCwNCisgICAgMHgzODBk
YzAwMCwNCisgICAgMHgzODBlMDAwMCwNCisgICAgMHgzODBlNDAwMCwNCisgICAgMHgzODBlODAw
MCwNCisgICAgMHgzODBlYzAwMCwNCisgICAgMHgzODBmMDAwMCwNCisgICAgMHgzODBmNDAwMCwN
CisgICAgMHgzODBmODAwMCwNCisgICAgMHgzODBmYzAwMCwNCisgICAgMHgzODEwMDAwMCwNCisg
ICAgMHgzODEwNDAwMCwNCisgICAgMHgzODEwODAwMCwNCisgICAgMHgzODEwYzAwMCwNCisgICAg
MHgzODExMDAwMCwNCisgICAgMHgzODExNDAwMCwNCisgICAgMHgzODExODAwMCwNCisgICAgMHgz
ODExYzAwMCwNCisgICAgMHgzODEyMDAwMCwNCisgICAgMHgzODEyNDAwMCwNCisgICAgMHgzODEy
ODAwMCwNCisgICAgMHgzODEyYzAwMCwNCisgICAgMHgzODEzMDAwMCwNCisgICAgMHgzODEzNDAw
MCwNCisgICAgMHgzODEzODAwMCwNCisgICAgMHgzODEzYzAwMCwNCisgICAgMHgzODE0MDAwMCwN
CisgICAgMHgzODE0NDAwMCwNCisgICAgMHgzODE0ODAwMCwNCisgICAgMHgzODE0YzAwMCwNCisg
ICAgMHgzODE1MDAwMCwNCisgICAgMHgzODE1NDAwMCwNCisgICAgMHgzODE1ODAwMCwNCisgICAg
MHgzODE1YzAwMCwNCisgICAgMHgzODE2MDAwMCwNCisgICAgMHgzODE2NDAwMCwNCisgICAgMHgz
ODE2ODAwMCwNCisgICAgMHgzODE2YzAwMCwNCisgICAgMHgzODE3MDAwMCwNCisgICAgMHgzODE3
NDAwMCwNCisgICAgMHgzODE3ODAwMCwNCisgICAgMHgzODE3YzAwMCwNCisgICAgMHgzODE4MDAw
MCwNCisgICAgMHgzODE4NDAwMCwNCisgICAgMHgzODE4ODAwMCwNCisgICAgMHgzODE4YzAwMCwN
CisgICAgMHgzODE5MDAwMCwNCisgICAgMHgzODE5NDAwMCwNCisgICAgMHgzODE5ODAwMCwNCisg
ICAgMHgzODE5YzAwMCwNCisgICAgMHgzODFhMDAwMCwNCisgICAgMHgzODFhNDAwMCwNCisgICAg
MHgzODFhODAwMCwNCisgICAgMHgzODFhYzAwMCwNCisgICAgMHgzODFiMDAwMCwNCisgICAgMHgz
ODFiNDAwMCwNCisgICAgMHgzODFiODAwMCwNCisgICAgMHgzODFiYzAwMCwNCisgICAgMHgzODFj
MDAwMCwNCisgICAgMHgzODFjNDAwMCwNCisgICAgMHgzODFjODAwMCwNCisgICAgMHgzODFjYzAw
MCwNCisgICAgMHgzODFkMDAwMCwNCisgICAgMHgzODFkNDAwMCwNCisgICAgMHgzODFkODAwMCwN
CisgICAgMHgzODFkYzAwMCwNCisgICAgMHgzODFlMDAwMCwNCisgICAgMHgzODFlNDAwMCwNCisg
ICAgMHgzODFlODAwMCwNCisgICAgMHgzODFlYzAwMCwNCisgICAgMHgzODFmMDAwMCwNCisgICAg
MHgzODFmNDAwMCwNCisgICAgMHgzODFmODAwMCwNCisgICAgMHgzODFmYzAwMCwNCisgICAgMHgz
ODIwMDAwMCwNCisgICAgMHgzODIwNDAwMCwNCisgICAgMHgzODIwODAwMCwNCisgICAgMHgzODIw
YzAwMCwNCisgICAgMHgzODIxMDAwMCwNCisgICAgMHgzODIxNDAwMCwNCisgICAgMHgzODIxODAw
MCwNCisgICAgMHgzODIxYzAwMCwNCisgICAgMHgzODIyMDAwMCwNCisgICAgMHgzODIyNDAwMCwN
CisgICAgMHgzODIyODAwMCwNCisgICAgMHgzODIyYzAwMCwNCisgICAgMHgzODIzMDAwMCwNCisg
ICAgMHgzODIzNDAwMCwNCisgICAgMHgzODIzODAwMCwNCisgICAgMHgzODIzYzAwMCwNCisgICAg
MHgzODI0MDAwMCwNCisgICAgMHgzODI0NDAwMCwNCisgICAgMHgzODI0ODAwMCwNCisgICAgMHgz
ODI0YzAwMCwNCisgICAgMHgzODI1MDAwMCwNCisgICAgMHgzODI1NDAwMCwNCisgICAgMHgzODI1
ODAwMCwNCisgICAgMHgzODI1YzAwMCwNCisgICAgMHgzODI2MDAwMCwNCisgICAgMHgzODI2NDAw
MCwNCisgICAgMHgzODI2ODAwMCwNCisgICAgMHgzODI2YzAwMCwNCisgICAgMHgzODI3MDAwMCwN
CisgICAgMHgzODI3NDAwMCwNCisgICAgMHgzODI3ODAwMCwNCisgICAgMHgzODI3YzAwMCwNCisg
ICAgMHgzODI4MDAwMCwNCisgICAgMHgzODI4NDAwMCwNCisgICAgMHgzODI4ODAwMCwNCisgICAg
MHgzODI4YzAwMCwNCisgICAgMHgzODI5MDAwMCwNCisgICAgMHgzODI5NDAwMCwNCisgICAgMHgz
ODI5ODAwMCwNCisgICAgMHgzODI5YzAwMCwNCisgICAgMHgzODJhMDAwMCwNCisgICAgMHgzODJh
NDAwMCwNCisgICAgMHgzODJhODAwMCwNCisgICAgMHgzODJhYzAwMCwNCisgICAgMHgzODJiMDAw
MCwNCisgICAgMHgzODJiNDAwMCwNCisgICAgMHgzODJiODAwMCwNCisgICAgMHgzODJiYzAwMCwN
CisgICAgMHgzODJjMDAwMCwNCisgICAgMHgzODJjNDAwMCwNCisgICAgMHgzODJjODAwMCwNCisg
ICAgMHgzODJjYzAwMCwNCisgICAgMHgzODJkMDAwMCwNCisgICAgMHgzODJkNDAwMCwNCisgICAg
MHgzODJkODAwMCwNCisgICAgMHgzODJkYzAwMCwNCisgICAgMHgzODJlMDAwMCwNCisgICAgMHgz
ODJlNDAwMCwNCisgICAgMHgzODJlODAwMCwNCisgICAgMHgzODJlYzAwMCwNCisgICAgMHgzODJm
MDAwMCwNCisgICAgMHgzODJmNDAwMCwNCisgICAgMHgzODJmODAwMCwNCisgICAgMHgzODJmYzAw
MCwNCisgICAgMHgzODMwMDAwMCwNCisgICAgMHgzODMwNDAwMCwNCisgICAgMHgzODMwODAwMCwN
CisgICAgMHgzODMwYzAwMCwNCisgICAgMHgzODMxMDAwMCwNCisgICAgMHgzODMxNDAwMCwNCisg
ICAgMHgzODMxODAwMCwNCisgICAgMHgzODMxYzAwMCwNCisgICAgMHgzODMyMDAwMCwNCisgICAg
MHgzODMyNDAwMCwNCisgICAgMHgzODMyODAwMCwNCisgICAgMHgzODMyYzAwMCwNCisgICAgMHgz
ODMzMDAwMCwNCisgICAgMHgzODMzNDAwMCwNCisgICAgMHgzODMzODAwMCwNCisgICAgMHgzODMz
YzAwMCwNCisgICAgMHgzODM0MDAwMCwNCisgICAgMHgzODM0NDAwMCwNCisgICAgMHgzODM0ODAw
MCwNCisgICAgMHgzODM0YzAwMCwNCisgICAgMHgzODM1MDAwMCwNCisgICAgMHgzODM1NDAwMCwN
CisgICAgMHgzODM1ODAwMCwNCisgICAgMHgzODM1YzAwMCwNCisgICAgMHgzODM2MDAwMCwNCisg
ICAgMHgzODM2NDAwMCwNCisgICAgMHgzODM2ODAwMCwNCisgICAgMHgzODM2YzAwMCwNCisgICAg
MHgzODM3MDAwMCwNCisgICAgMHgzODM3NDAwMCwNCisgICAgMHgzODM3ODAwMCwNCisgICAgMHgz
ODM3YzAwMCwNCisgICAgMHgzODM4MDAwMCwNCisgICAgMHgzODM4NDAwMCwNCisgICAgMHgzODM4
ODAwMCwNCisgICAgMHgzODM4YzAwMCwNCisgICAgMHgzODM5MDAwMCwNCisgICAgMHgzODM5NDAw
MCwNCisgICAgMHgzODM5ODAwMCwNCisgICAgMHgzODM5YzAwMCwNCisgICAgMHgzODNhMDAwMCwN
CisgICAgMHgzODNhNDAwMCwNCisgICAgMHgzODNhODAwMCwNCisgICAgMHgzODNhYzAwMCwNCisg
ICAgMHgzODNiMDAwMCwNCisgICAgMHgzODNiNDAwMCwNCisgICAgMHgzODNiODAwMCwNCisgICAg
MHgzODNiYzAwMCwNCisgICAgMHgzODNjMDAwMCwNCisgICAgMHgzODNjNDAwMCwNCisgICAgMHgz
ODNjODAwMCwNCisgICAgMHgzODNjYzAwMCwNCisgICAgMHgzODNkMDAwMCwNCisgICAgMHgzODNk
NDAwMCwNCisgICAgMHgzODNkODAwMCwNCisgICAgMHgzODNkYzAwMCwNCisgICAgMHgzODNlMDAw
MCwNCisgICAgMHgzODNlNDAwMCwNCisgICAgMHgzODNlODAwMCwNCisgICAgMHgzODNlYzAwMCwN
CisgICAgMHgzODNmMDAwMCwNCisgICAgMHgzODNmNDAwMCwNCisgICAgMHgzODNmODAwMCwNCisg
ICAgMHgzODNmYzAwMCwNCisgICAgMHgzODQwMDAwMCwNCisgICAgMHgzODQwNDAwMCwNCisgICAg
MHgzODQwODAwMCwNCisgICAgMHgzODQwYzAwMCwNCisgICAgMHgzODQxMDAwMCwNCisgICAgMHgz
ODQxNDAwMCwNCisgICAgMHgzODQxODAwMCwNCisgICAgMHgzODQxYzAwMCwNCisgICAgMHgzODQy
MDAwMCwNCisgICAgMHgzODQyNDAwMCwNCisgICAgMHgzODQyODAwMCwNCisgICAgMHgzODQyYzAw
MCwNCisgICAgMHgzODQzMDAwMCwNCisgICAgMHgzODQzNDAwMCwNCisgICAgMHgzODQzODAwMCwN
CisgICAgMHgzODQzYzAwMCwNCisgICAgMHgzODQ0MDAwMCwNCisgICAgMHgzODQ0NDAwMCwNCisg
ICAgMHgzODQ0ODAwMCwNCisgICAgMHgzODQ0YzAwMCwNCisgICAgMHgzODQ1MDAwMCwNCisgICAg
MHgzODQ1NDAwMCwNCisgICAgMHgzODQ1ODAwMCwNCisgICAgMHgzODQ1YzAwMCwNCisgICAgMHgz
ODQ2MDAwMCwNCisgICAgMHgzODQ2NDAwMCwNCisgICAgMHgzODQ2ODAwMCwNCisgICAgMHgzODQ2
YzAwMCwNCisgICAgMHgzODQ3MDAwMCwNCisgICAgMHgzODQ3NDAwMCwNCisgICAgMHgzODQ3ODAw
MCwNCisgICAgMHgzODQ3YzAwMCwNCisgICAgMHgzODQ4MDAwMCwNCisgICAgMHgzODQ4NDAwMCwN
CisgICAgMHgzODQ4ODAwMCwNCisgICAgMHgzODQ4YzAwMCwNCisgICAgMHgzODQ5MDAwMCwNCisg
ICAgMHgzODQ5NDAwMCwNCisgICAgMHgzODQ5ODAwMCwNCisgICAgMHgzODQ5YzAwMCwNCisgICAg
MHgzODRhMDAwMCwNCisgICAgMHgzODRhNDAwMCwNCisgICAgMHgzODRhODAwMCwNCisgICAgMHgz
ODRhYzAwMCwNCisgICAgMHgzODRiMDAwMCwNCisgICAgMHgzODRiNDAwMCwNCisgICAgMHgzODRi
ODAwMCwNCisgICAgMHgzODRiYzAwMCwNCisgICAgMHgzODRjMDAwMCwNCisgICAgMHgzODRjNDAw
MCwNCisgICAgMHgzODRjODAwMCwNCisgICAgMHgzODRjYzAwMCwNCisgICAgMHgzODRkMDAwMCwN
CisgICAgMHgzODRkNDAwMCwNCisgICAgMHgzODRkODAwMCwNCisgICAgMHgzODRkYzAwMCwNCisg
ICAgMHgzODRlMDAwMCwNCisgICAgMHgzODRlNDAwMCwNCisgICAgMHgzODRlODAwMCwNCisgICAg
MHgzODRlYzAwMCwNCisgICAgMHgzODRmMDAwMCwNCisgICAgMHgzODRmNDAwMCwNCisgICAgMHgz
ODRmODAwMCwNCisgICAgMHgzODRmYzAwMCwNCisgICAgMHgzODUwMDAwMCwNCisgICAgMHgzODUw
NDAwMCwNCisgICAgMHgzODUwODAwMCwNCisgICAgMHgzODUwYzAwMCwNCisgICAgMHgzODUxMDAw
MCwNCisgICAgMHgzODUxNDAwMCwNCisgICAgMHgzODUxODAwMCwNCisgICAgMHgzODUxYzAwMCwN
CisgICAgMHgzODUyMDAwMCwNCisgICAgMHgzODUyNDAwMCwNCisgICAgMHgzODUyODAwMCwNCisg
ICAgMHgzODUyYzAwMCwNCisgICAgMHgzODUzMDAwMCwNCisgICAgMHgzODUzNDAwMCwNCisgICAg
MHgzODUzODAwMCwNCisgICAgMHgzODUzYzAwMCwNCisgICAgMHgzODU0MDAwMCwNCisgICAgMHgz
ODU0NDAwMCwNCisgICAgMHgzODU0ODAwMCwNCisgICAgMHgzODU0YzAwMCwNCisgICAgMHgzODU1
MDAwMCwNCisgICAgMHgzODU1NDAwMCwNCisgICAgMHgzODU1ODAwMCwNCisgICAgMHgzODU1YzAw
MCwNCisgICAgMHgzODU2MDAwMCwNCisgICAgMHgzODU2NDAwMCwNCisgICAgMHgzODU2ODAwMCwN
CisgICAgMHgzODU2YzAwMCwNCisgICAgMHgzODU3MDAwMCwNCisgICAgMHgzODU3NDAwMCwNCisg
ICAgMHgzODU3ODAwMCwNCisgICAgMHgzODU3YzAwMCwNCisgICAgMHgzODU4MDAwMCwNCisgICAg
MHgzODU4NDAwMCwNCisgICAgMHgzODU4ODAwMCwNCisgICAgMHgzODU4YzAwMCwNCisgICAgMHgz
ODU5MDAwMCwNCisgICAgMHgzODU5NDAwMCwNCisgICAgMHgzODU5ODAwMCwNCisgICAgMHgzODU5
YzAwMCwNCisgICAgMHgzODVhMDAwMCwNCisgICAgMHgzODVhNDAwMCwNCisgICAgMHgzODVhODAw
MCwNCisgICAgMHgzODVhYzAwMCwNCisgICAgMHgzODViMDAwMCwNCisgICAgMHgzODViNDAwMCwN
CisgICAgMHgzODViODAwMCwNCisgICAgMHgzODViYzAwMCwNCisgICAgMHgzODVjMDAwMCwNCisg
ICAgMHgzODVjNDAwMCwNCisgICAgMHgzODVjODAwMCwNCisgICAgMHgzODVjYzAwMCwNCisgICAg
MHgzODVkMDAwMCwNCisgICAgMHgzODVkNDAwMCwNCisgICAgMHgzODVkODAwMCwNCisgICAgMHgz
ODVkYzAwMCwNCisgICAgMHgzODVlMDAwMCwNCisgICAgMHgzODVlNDAwMCwNCisgICAgMHgzODVl
ODAwMCwNCisgICAgMHgzODVlYzAwMCwNCisgICAgMHgzODVmMDAwMCwNCisgICAgMHgzODVmNDAw
MCwNCisgICAgMHgzODVmODAwMCwNCisgICAgMHgzODVmYzAwMCwNCisgICAgMHgzODYwMDAwMCwN
CisgICAgMHgzODYwNDAwMCwNCisgICAgMHgzODYwODAwMCwNCisgICAgMHgzODYwYzAwMCwNCisg
ICAgMHgzODYxMDAwMCwNCisgICAgMHgzODYxNDAwMCwNCisgICAgMHgzODYxODAwMCwNCisgICAg
MHgzODYxYzAwMCwNCisgICAgMHgzODYyMDAwMCwNCisgICAgMHgzODYyNDAwMCwNCisgICAgMHgz
ODYyODAwMCwNCisgICAgMHgzODYyYzAwMCwNCisgICAgMHgzODYzMDAwMCwNCisgICAgMHgzODYz
NDAwMCwNCisgICAgMHgzODYzODAwMCwNCisgICAgMHgzODYzYzAwMCwNCisgICAgMHgzODY0MDAw
MCwNCisgICAgMHgzODY0NDAwMCwNCisgICAgMHgzODY0ODAwMCwNCisgICAgMHgzODY0YzAwMCwN
CisgICAgMHgzODY1MDAwMCwNCisgICAgMHgzODY1NDAwMCwNCisgICAgMHgzODY1ODAwMCwNCisg
ICAgMHgzODY1YzAwMCwNCisgICAgMHgzODY2MDAwMCwNCisgICAgMHgzODY2NDAwMCwNCisgICAg
MHgzODY2ODAwMCwNCisgICAgMHgzODY2YzAwMCwNCisgICAgMHgzODY3MDAwMCwNCisgICAgMHgz
ODY3NDAwMCwNCisgICAgMHgzODY3ODAwMCwNCisgICAgMHgzODY3YzAwMCwNCisgICAgMHgzODY4
MDAwMCwNCisgICAgMHgzODY4NDAwMCwNCisgICAgMHgzODY4ODAwMCwNCisgICAgMHgzODY4YzAw
MCwNCisgICAgMHgzODY5MDAwMCwNCisgICAgMHgzODY5NDAwMCwNCisgICAgMHgzODY5ODAwMCwN
CisgICAgMHgzODY5YzAwMCwNCisgICAgMHgzODZhMDAwMCwNCisgICAgMHgzODZhNDAwMCwNCisg
ICAgMHgzODZhODAwMCwNCisgICAgMHgzODZhYzAwMCwNCisgICAgMHgzODZiMDAwMCwNCisgICAg
MHgzODZiNDAwMCwNCisgICAgMHgzODZiODAwMCwNCisgICAgMHgzODZiYzAwMCwNCisgICAgMHgz
ODZjMDAwMCwNCisgICAgMHgzODZjNDAwMCwNCisgICAgMHgzODZjODAwMCwNCisgICAgMHgzODZj
YzAwMCwNCisgICAgMHgzODZkMDAwMCwNCisgICAgMHgzODZkNDAwMCwNCisgICAgMHgzODZkODAw
MCwNCisgICAgMHgzODZkYzAwMCwNCisgICAgMHgzODZlMDAwMCwNCisgICAgMHgzODZlNDAwMCwN
CisgICAgMHgzODZlODAwMCwNCisgICAgMHgzODZlYzAwMCwNCisgICAgMHgzODZmMDAwMCwNCisg
ICAgMHgzODZmNDAwMCwNCisgICAgMHgzODZmODAwMCwNCisgICAgMHgzODZmYzAwMCwNCisgICAg
MHgzODcwMDAwMCwNCisgICAgMHgzODcwNDAwMCwNCisgICAgMHgzODcwODAwMCwNCisgICAgMHgz
ODcwYzAwMCwNCisgICAgMHgzODcxMDAwMCwNCisgICAgMHgzODcxNDAwMCwNCisgICAgMHgzODcx
ODAwMCwNCisgICAgMHgzODcxYzAwMCwNCisgICAgMHgzODcyMDAwMCwNCisgICAgMHgzODcyNDAw
MCwNCisgICAgMHgzODcyODAwMCwNCisgICAgMHgzODcyYzAwMCwNCisgICAgMHgzODczMDAwMCwN
CisgICAgMHgzODczNDAwMCwNCisgICAgMHgzODczODAwMCwNCisgICAgMHgzODczYzAwMCwNCisg
ICAgMHgzODc0MDAwMCwNCisgICAgMHgzODc0NDAwMCwNCisgICAgMHgzODc0ODAwMCwNCisgICAg
MHgzODc0YzAwMCwNCisgICAgMHgzODc1MDAwMCwNCisgICAgMHgzODc1NDAwMCwNCisgICAgMHgz
ODc1ODAwMCwNCisgICAgMHgzODc1YzAwMCwNCisgICAgMHgzODc2MDAwMCwNCisgICAgMHgzODc2
NDAwMCwNCisgICAgMHgzODc2ODAwMCwNCisgICAgMHgzODc2YzAwMCwNCisgICAgMHgzODc3MDAw
MCwNCisgICAgMHgzODc3NDAwMCwNCisgICAgMHgzODc3ODAwMCwNCisgICAgMHgzODc3YzAwMCwN
CisgICAgMHgzODc4MDAwMCwNCisgICAgMHgzODc4NDAwMCwNCisgICAgMHgzODc4ODAwMCwNCisg
ICAgMHgzODc4YzAwMCwNCisgICAgMHgzODc5MDAwMCwNCisgICAgMHgzODc5NDAwMCwNCisgICAg
MHgzODc5ODAwMCwNCisgICAgMHgzODc5YzAwMCwNCisgICAgMHgzODdhMDAwMCwNCisgICAgMHgz
ODdhNDAwMCwNCisgICAgMHgzODdhODAwMCwNCisgICAgMHgzODdhYzAwMCwNCisgICAgMHgzODdi
MDAwMCwNCisgICAgMHgzODdiNDAwMCwNCisgICAgMHgzODdiODAwMCwNCisgICAgMHgzODdiYzAw
MCwNCisgICAgMHgzODdjMDAwMCwNCisgICAgMHgzODdjNDAwMCwNCisgICAgMHgzODdjODAwMCwN
CisgICAgMHgzODdjYzAwMCwNCisgICAgMHgzODdkMDAwMCwNCisgICAgMHgzODdkNDAwMCwNCisg
ICAgMHgzODdkODAwMCwNCisgICAgMHgzODdkYzAwMCwNCisgICAgMHgzODdlMDAwMCwNCisgICAg
MHgzODdlNDAwMCwNCisgICAgMHgzODdlODAwMCwNCisgICAgMHgzODdlYzAwMCwNCisgICAgMHgz
ODdmMDAwMCwNCisgICAgMHgzODdmNDAwMCwNCisgICAgMHgzODdmODAwMCwNCisgICAgMHgzODdm
YzAwMCwNCisgICAgMHgzODAwMDAwMCwNCisgICAgMHgzODAwMjAwMCwNCisgICAgMHgzODAwNDAw
MCwNCisgICAgMHgzODAwNjAwMCwNCisgICAgMHgzODAwODAwMCwNCisgICAgMHgzODAwYTAwMCwN
CisgICAgMHgzODAwYzAwMCwNCisgICAgMHgzODAwZTAwMCwNCisgICAgMHgzODAxMDAwMCwNCisg
ICAgMHgzODAxMjAwMCwNCisgICAgMHgzODAxNDAwMCwNCisgICAgMHgzODAxNjAwMCwNCisgICAg
MHgzODAxODAwMCwNCisgICAgMHgzODAxYTAwMCwNCisgICAgMHgzODAxYzAwMCwNCisgICAgMHgz
ODAxZTAwMCwNCisgICAgMHgzODAyMDAwMCwNCisgICAgMHgzODAyMjAwMCwNCisgICAgMHgzODAy
NDAwMCwNCisgICAgMHgzODAyNjAwMCwNCisgICAgMHgzODAyODAwMCwNCisgICAgMHgzODAyYTAw
MCwNCisgICAgMHgzODAyYzAwMCwNCisgICAgMHgzODAyZTAwMCwNCisgICAgMHgzODAzMDAwMCwN
CisgICAgMHgzODAzMjAwMCwNCisgICAgMHgzODAzNDAwMCwNCisgICAgMHgzODAzNjAwMCwNCisg
ICAgMHgzODAzODAwMCwNCisgICAgMHgzODAzYTAwMCwNCisgICAgMHgzODAzYzAwMCwNCisgICAg
MHgzODAzZTAwMCwNCisgICAgMHgzODA0MDAwMCwNCisgICAgMHgzODA0MjAwMCwNCisgICAgMHgz
ODA0NDAwMCwNCisgICAgMHgzODA0NjAwMCwNCisgICAgMHgzODA0ODAwMCwNCisgICAgMHgzODA0
YTAwMCwNCisgICAgMHgzODA0YzAwMCwNCisgICAgMHgzODA0ZTAwMCwNCisgICAgMHgzODA1MDAw
MCwNCisgICAgMHgzODA1MjAwMCwNCisgICAgMHgzODA1NDAwMCwNCisgICAgMHgzODA1NjAwMCwN
CisgICAgMHgzODA1ODAwMCwNCisgICAgMHgzODA1YTAwMCwNCisgICAgMHgzODA1YzAwMCwNCisg
ICAgMHgzODA1ZTAwMCwNCisgICAgMHgzODA2MDAwMCwNCisgICAgMHgzODA2MjAwMCwNCisgICAg
MHgzODA2NDAwMCwNCisgICAgMHgzODA2NjAwMCwNCisgICAgMHgzODA2ODAwMCwNCisgICAgMHgz
ODA2YTAwMCwNCisgICAgMHgzODA2YzAwMCwNCisgICAgMHgzODA2ZTAwMCwNCisgICAgMHgzODA3
MDAwMCwNCisgICAgMHgzODA3MjAwMCwNCisgICAgMHgzODA3NDAwMCwNCisgICAgMHgzODA3NjAw
MCwNCisgICAgMHgzODA3ODAwMCwNCisgICAgMHgzODA3YTAwMCwNCisgICAgMHgzODA3YzAwMCwN
CisgICAgMHgzODA3ZTAwMCwNCisgICAgMHgzODA4MDAwMCwNCisgICAgMHgzODA4MjAwMCwNCisg
ICAgMHgzODA4NDAwMCwNCisgICAgMHgzODA4NjAwMCwNCisgICAgMHgzODA4ODAwMCwNCisgICAg
MHgzODA4YTAwMCwNCisgICAgMHgzODA4YzAwMCwNCisgICAgMHgzODA4ZTAwMCwNCisgICAgMHgz
ODA5MDAwMCwNCisgICAgMHgzODA5MjAwMCwNCisgICAgMHgzODA5NDAwMCwNCisgICAgMHgzODA5
NjAwMCwNCisgICAgMHgzODA5ODAwMCwNCisgICAgMHgzODA5YTAwMCwNCisgICAgMHgzODA5YzAw
MCwNCisgICAgMHgzODA5ZTAwMCwNCisgICAgMHgzODBhMDAwMCwNCisgICAgMHgzODBhMjAwMCwN
CisgICAgMHgzODBhNDAwMCwNCisgICAgMHgzODBhNjAwMCwNCisgICAgMHgzODBhODAwMCwNCisg
ICAgMHgzODBhYTAwMCwNCisgICAgMHgzODBhYzAwMCwNCisgICAgMHgzODBhZTAwMCwNCisgICAg
MHgzODBiMDAwMCwNCisgICAgMHgzODBiMjAwMCwNCisgICAgMHgzODBiNDAwMCwNCisgICAgMHgz
ODBiNjAwMCwNCisgICAgMHgzODBiODAwMCwNCisgICAgMHgzODBiYTAwMCwNCisgICAgMHgzODBi
YzAwMCwNCisgICAgMHgzODBiZTAwMCwNCisgICAgMHgzODBjMDAwMCwNCisgICAgMHgzODBjMjAw
MCwNCisgICAgMHgzODBjNDAwMCwNCisgICAgMHgzODBjNjAwMCwNCisgICAgMHgzODBjODAwMCwN
CisgICAgMHgzODBjYTAwMCwNCisgICAgMHgzODBjYzAwMCwNCisgICAgMHgzODBjZTAwMCwNCisg
ICAgMHgzODBkMDAwMCwNCisgICAgMHgzODBkMjAwMCwNCisgICAgMHgzODBkNDAwMCwNCisgICAg
MHgzODBkNjAwMCwNCisgICAgMHgzODBkODAwMCwNCisgICAgMHgzODBkYTAwMCwNCisgICAgMHgz
ODBkYzAwMCwNCisgICAgMHgzODBkZTAwMCwNCisgICAgMHgzODBlMDAwMCwNCisgICAgMHgzODBl
MjAwMCwNCisgICAgMHgzODBlNDAwMCwNCisgICAgMHgzODBlNjAwMCwNCisgICAgMHgzODBlODAw
MCwNCisgICAgMHgzODBlYTAwMCwNCisgICAgMHgzODBlYzAwMCwNCisgICAgMHgzODBlZTAwMCwN
CisgICAgMHgzODBmMDAwMCwNCisgICAgMHgzODBmMjAwMCwNCisgICAgMHgzODBmNDAwMCwNCisg
ICAgMHgzODBmNjAwMCwNCisgICAgMHgzODBmODAwMCwNCisgICAgMHgzODBmYTAwMCwNCisgICAg
MHgzODBmYzAwMCwNCisgICAgMHgzODBmZTAwMCwNCisgICAgMHgzODEwMDAwMCwNCisgICAgMHgz
ODEwMjAwMCwNCisgICAgMHgzODEwNDAwMCwNCisgICAgMHgzODEwNjAwMCwNCisgICAgMHgzODEw
ODAwMCwNCisgICAgMHgzODEwYTAwMCwNCisgICAgMHgzODEwYzAwMCwNCisgICAgMHgzODEwZTAw
MCwNCisgICAgMHgzODExMDAwMCwNCisgICAgMHgzODExMjAwMCwNCisgICAgMHgzODExNDAwMCwN
CisgICAgMHgzODExNjAwMCwNCisgICAgMHgzODExODAwMCwNCisgICAgMHgzODExYTAwMCwNCisg
ICAgMHgzODExYzAwMCwNCisgICAgMHgzODExZTAwMCwNCisgICAgMHgzODEyMDAwMCwNCisgICAg
MHgzODEyMjAwMCwNCisgICAgMHgzODEyNDAwMCwNCisgICAgMHgzODEyNjAwMCwNCisgICAgMHgz
ODEyODAwMCwNCisgICAgMHgzODEyYTAwMCwNCisgICAgMHgzODEyYzAwMCwNCisgICAgMHgzODEy
ZTAwMCwNCisgICAgMHgzODEzMDAwMCwNCisgICAgMHgzODEzMjAwMCwNCisgICAgMHgzODEzNDAw
MCwNCisgICAgMHgzODEzNjAwMCwNCisgICAgMHgzODEzODAwMCwNCisgICAgMHgzODEzYTAwMCwN
CisgICAgMHgzODEzYzAwMCwNCisgICAgMHgzODEzZTAwMCwNCisgICAgMHgzODE0MDAwMCwNCisg
ICAgMHgzODE0MjAwMCwNCisgICAgMHgzODE0NDAwMCwNCisgICAgMHgzODE0NjAwMCwNCisgICAg
MHgzODE0ODAwMCwNCisgICAgMHgzODE0YTAwMCwNCisgICAgMHgzODE0YzAwMCwNCisgICAgMHgz
ODE0ZTAwMCwNCisgICAgMHgzODE1MDAwMCwNCisgICAgMHgzODE1MjAwMCwNCisgICAgMHgzODE1
NDAwMCwNCisgICAgMHgzODE1NjAwMCwNCisgICAgMHgzODE1ODAwMCwNCisgICAgMHgzODE1YTAw
MCwNCisgICAgMHgzODE1YzAwMCwNCisgICAgMHgzODE1ZTAwMCwNCisgICAgMHgzODE2MDAwMCwN
CisgICAgMHgzODE2MjAwMCwNCisgICAgMHgzODE2NDAwMCwNCisgICAgMHgzODE2NjAwMCwNCisg
ICAgMHgzODE2ODAwMCwNCisgICAgMHgzODE2YTAwMCwNCisgICAgMHgzODE2YzAwMCwNCisgICAg
MHgzODE2ZTAwMCwNCisgICAgMHgzODE3MDAwMCwNCisgICAgMHgzODE3MjAwMCwNCisgICAgMHgz
ODE3NDAwMCwNCisgICAgMHgzODE3NjAwMCwNCisgICAgMHgzODE3ODAwMCwNCisgICAgMHgzODE3
YTAwMCwNCisgICAgMHgzODE3YzAwMCwNCisgICAgMHgzODE3ZTAwMCwNCisgICAgMHgzODE4MDAw
MCwNCisgICAgMHgzODE4MjAwMCwNCisgICAgMHgzODE4NDAwMCwNCisgICAgMHgzODE4NjAwMCwN
CisgICAgMHgzODE4ODAwMCwNCisgICAgMHgzODE4YTAwMCwNCisgICAgMHgzODE4YzAwMCwNCisg
ICAgMHgzODE4ZTAwMCwNCisgICAgMHgzODE5MDAwMCwNCisgICAgMHgzODE5MjAwMCwNCisgICAg
MHgzODE5NDAwMCwNCisgICAgMHgzODE5NjAwMCwNCisgICAgMHgzODE5ODAwMCwNCisgICAgMHgz
ODE5YTAwMCwNCisgICAgMHgzODE5YzAwMCwNCisgICAgMHgzODE5ZTAwMCwNCisgICAgMHgzODFh
MDAwMCwNCisgICAgMHgzODFhMjAwMCwNCisgICAgMHgzODFhNDAwMCwNCisgICAgMHgzODFhNjAw
MCwNCisgICAgMHgzODFhODAwMCwNCisgICAgMHgzODFhYTAwMCwNCisgICAgMHgzODFhYzAwMCwN
CisgICAgMHgzODFhZTAwMCwNCisgICAgMHgzODFiMDAwMCwNCisgICAgMHgzODFiMjAwMCwNCisg
ICAgMHgzODFiNDAwMCwNCisgICAgMHgzODFiNjAwMCwNCisgICAgMHgzODFiODAwMCwNCisgICAg
MHgzODFiYTAwMCwNCisgICAgMHgzODFiYzAwMCwNCisgICAgMHgzODFiZTAwMCwNCisgICAgMHgz
ODFjMDAwMCwNCisgICAgMHgzODFjMjAwMCwNCisgICAgMHgzODFjNDAwMCwNCisgICAgMHgzODFj
NjAwMCwNCisgICAgMHgzODFjODAwMCwNCisgICAgMHgzODFjYTAwMCwNCisgICAgMHgzODFjYzAw
MCwNCisgICAgMHgzODFjZTAwMCwNCisgICAgMHgzODFkMDAwMCwNCisgICAgMHgzODFkMjAwMCwN
CisgICAgMHgzODFkNDAwMCwNCisgICAgMHgzODFkNjAwMCwNCisgICAgMHgzODFkODAwMCwNCisg
ICAgMHgzODFkYTAwMCwNCisgICAgMHgzODFkYzAwMCwNCisgICAgMHgzODFkZTAwMCwNCisgICAg
MHgzODFlMDAwMCwNCisgICAgMHgzODFlMjAwMCwNCisgICAgMHgzODFlNDAwMCwNCisgICAgMHgz
ODFlNjAwMCwNCisgICAgMHgzODFlODAwMCwNCisgICAgMHgzODFlYTAwMCwNCisgICAgMHgzODFl
YzAwMCwNCisgICAgMHgzODFlZTAwMCwNCisgICAgMHgzODFmMDAwMCwNCisgICAgMHgzODFmMjAw
MCwNCisgICAgMHgzODFmNDAwMCwNCisgICAgMHgzODFmNjAwMCwNCisgICAgMHgzODFmODAwMCwN
CisgICAgMHgzODFmYTAwMCwNCisgICAgMHgzODFmYzAwMCwNCisgICAgMHgzODFmZTAwMCwNCisg
ICAgMHgzODIwMDAwMCwNCisgICAgMHgzODIwMjAwMCwNCisgICAgMHgzODIwNDAwMCwNCisgICAg
MHgzODIwNjAwMCwNCisgICAgMHgzODIwODAwMCwNCisgICAgMHgzODIwYTAwMCwNCisgICAgMHgz
ODIwYzAwMCwNCisgICAgMHgzODIwZTAwMCwNCisgICAgMHgzODIxMDAwMCwNCisgICAgMHgzODIx
MjAwMCwNCisgICAgMHgzODIxNDAwMCwNCisgICAgMHgzODIxNjAwMCwNCisgICAgMHgzODIxODAw
MCwNCisgICAgMHgzODIxYTAwMCwNCisgICAgMHgzODIxYzAwMCwNCisgICAgMHgzODIxZTAwMCwN
CisgICAgMHgzODIyMDAwMCwNCisgICAgMHgzODIyMjAwMCwNCisgICAgMHgzODIyNDAwMCwNCisg
ICAgMHgzODIyNjAwMCwNCisgICAgMHgzODIyODAwMCwNCisgICAgMHgzODIyYTAwMCwNCisgICAg
MHgzODIyYzAwMCwNCisgICAgMHgzODIyZTAwMCwNCisgICAgMHgzODIzMDAwMCwNCisgICAgMHgz
ODIzMjAwMCwNCisgICAgMHgzODIzNDAwMCwNCisgICAgMHgzODIzNjAwMCwNCisgICAgMHgzODIz
ODAwMCwNCisgICAgMHgzODIzYTAwMCwNCisgICAgMHgzODIzYzAwMCwNCisgICAgMHgzODIzZTAw
MCwNCisgICAgMHgzODI0MDAwMCwNCisgICAgMHgzODI0MjAwMCwNCisgICAgMHgzODI0NDAwMCwN
CisgICAgMHgzODI0NjAwMCwNCisgICAgMHgzODI0ODAwMCwNCisgICAgMHgzODI0YTAwMCwNCisg
ICAgMHgzODI0YzAwMCwNCisgICAgMHgzODI0ZTAwMCwNCisgICAgMHgzODI1MDAwMCwNCisgICAg
MHgzODI1MjAwMCwNCisgICAgMHgzODI1NDAwMCwNCisgICAgMHgzODI1NjAwMCwNCisgICAgMHgz
ODI1ODAwMCwNCisgICAgMHgzODI1YTAwMCwNCisgICAgMHgzODI1YzAwMCwNCisgICAgMHgzODI1
ZTAwMCwNCisgICAgMHgzODI2MDAwMCwNCisgICAgMHgzODI2MjAwMCwNCisgICAgMHgzODI2NDAw
MCwNCisgICAgMHgzODI2NjAwMCwNCisgICAgMHgzODI2ODAwMCwNCisgICAgMHgzODI2YTAwMCwN
CisgICAgMHgzODI2YzAwMCwNCisgICAgMHgzODI2ZTAwMCwNCisgICAgMHgzODI3MDAwMCwNCisg
ICAgMHgzODI3MjAwMCwNCisgICAgMHgzODI3NDAwMCwNCisgICAgMHgzODI3NjAwMCwNCisgICAg
MHgzODI3ODAwMCwNCisgICAgMHgzODI3YTAwMCwNCisgICAgMHgzODI3YzAwMCwNCisgICAgMHgz
ODI3ZTAwMCwNCisgICAgMHgzODI4MDAwMCwNCisgICAgMHgzODI4MjAwMCwNCisgICAgMHgzODI4
NDAwMCwNCisgICAgMHgzODI4NjAwMCwNCisgICAgMHgzODI4ODAwMCwNCisgICAgMHgzODI4YTAw
MCwNCisgICAgMHgzODI4YzAwMCwNCisgICAgMHgzODI4ZTAwMCwNCisgICAgMHgzODI5MDAwMCwN
CisgICAgMHgzODI5MjAwMCwNCisgICAgMHgzODI5NDAwMCwNCisgICAgMHgzODI5NjAwMCwNCisg
ICAgMHgzODI5ODAwMCwNCisgICAgMHgzODI5YTAwMCwNCisgICAgMHgzODI5YzAwMCwNCisgICAg
MHgzODI5ZTAwMCwNCisgICAgMHgzODJhMDAwMCwNCisgICAgMHgzODJhMjAwMCwNCisgICAgMHgz
ODJhNDAwMCwNCisgICAgMHgzODJhNjAwMCwNCisgICAgMHgzODJhODAwMCwNCisgICAgMHgzODJh
YTAwMCwNCisgICAgMHgzODJhYzAwMCwNCisgICAgMHgzODJhZTAwMCwNCisgICAgMHgzODJiMDAw
MCwNCisgICAgMHgzODJiMjAwMCwNCisgICAgMHgzODJiNDAwMCwNCisgICAgMHgzODJiNjAwMCwN
CisgICAgMHgzODJiODAwMCwNCisgICAgMHgzODJiYTAwMCwNCisgICAgMHgzODJiYzAwMCwNCisg
ICAgMHgzODJiZTAwMCwNCisgICAgMHgzODJjMDAwMCwNCisgICAgMHgzODJjMjAwMCwNCisgICAg
MHgzODJjNDAwMCwNCisgICAgMHgzODJjNjAwMCwNCisgICAgMHgzODJjODAwMCwNCisgICAgMHgz
ODJjYTAwMCwNCisgICAgMHgzODJjYzAwMCwNCisgICAgMHgzODJjZTAwMCwNCisgICAgMHgzODJk
MDAwMCwNCisgICAgMHgzODJkMjAwMCwNCisgICAgMHgzODJkNDAwMCwNCisgICAgMHgzODJkNjAw
MCwNCisgICAgMHgzODJkODAwMCwNCisgICAgMHgzODJkYTAwMCwNCisgICAgMHgzODJkYzAwMCwN
CisgICAgMHgzODJkZTAwMCwNCisgICAgMHgzODJlMDAwMCwNCisgICAgMHgzODJlMjAwMCwNCisg
ICAgMHgzODJlNDAwMCwNCisgICAgMHgzODJlNjAwMCwNCisgICAgMHgzODJlODAwMCwNCisgICAg
MHgzODJlYTAwMCwNCisgICAgMHgzODJlYzAwMCwNCisgICAgMHgzODJlZTAwMCwNCisgICAgMHgz
ODJmMDAwMCwNCisgICAgMHgzODJmMjAwMCwNCisgICAgMHgzODJmNDAwMCwNCisgICAgMHgzODJm
NjAwMCwNCisgICAgMHgzODJmODAwMCwNCisgICAgMHgzODJmYTAwMCwNCisgICAgMHgzODJmYzAw
MCwNCisgICAgMHgzODJmZTAwMCwNCisgICAgMHgzODMwMDAwMCwNCisgICAgMHgzODMwMjAwMCwN
CisgICAgMHgzODMwNDAwMCwNCisgICAgMHgzODMwNjAwMCwNCisgICAgMHgzODMwODAwMCwNCisg
ICAgMHgzODMwYTAwMCwNCisgICAgMHgzODMwYzAwMCwNCisgICAgMHgzODMwZTAwMCwNCisgICAg
MHgzODMxMDAwMCwNCisgICAgMHgzODMxMjAwMCwNCisgICAgMHgzODMxNDAwMCwNCisgICAgMHgz
ODMxNjAwMCwNCisgICAgMHgzODMxODAwMCwNCisgICAgMHgzODMxYTAwMCwNCisgICAgMHgzODMx
YzAwMCwNCisgICAgMHgzODMxZTAwMCwNCisgICAgMHgzODMyMDAwMCwNCisgICAgMHgzODMyMjAw
MCwNCisgICAgMHgzODMyNDAwMCwNCisgICAgMHgzODMyNjAwMCwNCisgICAgMHgzODMyODAwMCwN
CisgICAgMHgzODMyYTAwMCwNCisgICAgMHgzODMyYzAwMCwNCisgICAgMHgzODMyZTAwMCwNCisg
ICAgMHgzODMzMDAwMCwNCisgICAgMHgzODMzMjAwMCwNCisgICAgMHgzODMzNDAwMCwNCisgICAg
MHgzODMzNjAwMCwNCisgICAgMHgzODMzODAwMCwNCisgICAgMHgzODMzYTAwMCwNCisgICAgMHgz
ODMzYzAwMCwNCisgICAgMHgzODMzZTAwMCwNCisgICAgMHgzODM0MDAwMCwNCisgICAgMHgzODM0
MjAwMCwNCisgICAgMHgzODM0NDAwMCwNCisgICAgMHgzODM0NjAwMCwNCisgICAgMHgzODM0ODAw
MCwNCisgICAgMHgzODM0YTAwMCwNCisgICAgMHgzODM0YzAwMCwNCisgICAgMHgzODM0ZTAwMCwN
CisgICAgMHgzODM1MDAwMCwNCisgICAgMHgzODM1MjAwMCwNCisgICAgMHgzODM1NDAwMCwNCisg
ICAgMHgzODM1NjAwMCwNCisgICAgMHgzODM1ODAwMCwNCisgICAgMHgzODM1YTAwMCwNCisgICAg
MHgzODM1YzAwMCwNCisgICAgMHgzODM1ZTAwMCwNCisgICAgMHgzODM2MDAwMCwNCisgICAgMHgz
ODM2MjAwMCwNCisgICAgMHgzODM2NDAwMCwNCisgICAgMHgzODM2NjAwMCwNCisgICAgMHgzODM2
ODAwMCwNCisgICAgMHgzODM2YTAwMCwNCisgICAgMHgzODM2YzAwMCwNCisgICAgMHgzODM2ZTAw
MCwNCisgICAgMHgzODM3MDAwMCwNCisgICAgMHgzODM3MjAwMCwNCisgICAgMHgzODM3NDAwMCwN
CisgICAgMHgzODM3NjAwMCwNCisgICAgMHgzODM3ODAwMCwNCisgICAgMHgzODM3YTAwMCwNCisg
ICAgMHgzODM3YzAwMCwNCisgICAgMHgzODM3ZTAwMCwNCisgICAgMHgzODM4MDAwMCwNCisgICAg
MHgzODM4MjAwMCwNCisgICAgMHgzODM4NDAwMCwNCisgICAgMHgzODM4NjAwMCwNCisgICAgMHgz
ODM4ODAwMCwNCisgICAgMHgzODM4YTAwMCwNCisgICAgMHgzODM4YzAwMCwNCisgICAgMHgzODM4
ZTAwMCwNCisgICAgMHgzODM5MDAwMCwNCisgICAgMHgzODM5MjAwMCwNCisgICAgMHgzODM5NDAw
MCwNCisgICAgMHgzODM5NjAwMCwNCisgICAgMHgzODM5ODAwMCwNCisgICAgMHgzODM5YTAwMCwN
CisgICAgMHgzODM5YzAwMCwNCisgICAgMHgzODM5ZTAwMCwNCisgICAgMHgzODNhMDAwMCwNCisg
ICAgMHgzODNhMjAwMCwNCisgICAgMHgzODNhNDAwMCwNCisgICAgMHgzODNhNjAwMCwNCisgICAg
MHgzODNhODAwMCwNCisgICAgMHgzODNhYTAwMCwNCisgICAgMHgzODNhYzAwMCwNCisgICAgMHgz
ODNhZTAwMCwNCisgICAgMHgzODNiMDAwMCwNCisgICAgMHgzODNiMjAwMCwNCisgICAgMHgzODNi
NDAwMCwNCisgICAgMHgzODNiNjAwMCwNCisgICAgMHgzODNiODAwMCwNCisgICAgMHgzODNiYTAw
MCwNCisgICAgMHgzODNiYzAwMCwNCisgICAgMHgzODNiZTAwMCwNCisgICAgMHgzODNjMDAwMCwN
CisgICAgMHgzODNjMjAwMCwNCisgICAgMHgzODNjNDAwMCwNCisgICAgMHgzODNjNjAwMCwNCisg
ICAgMHgzODNjODAwMCwNCisgICAgMHgzODNjYTAwMCwNCisgICAgMHgzODNjYzAwMCwNCisgICAg
MHgzODNjZTAwMCwNCisgICAgMHgzODNkMDAwMCwNCisgICAgMHgzODNkMjAwMCwNCisgICAgMHgz
ODNkNDAwMCwNCisgICAgMHgzODNkNjAwMCwNCisgICAgMHgzODNkODAwMCwNCisgICAgMHgzODNk
YTAwMCwNCisgICAgMHgzODNkYzAwMCwNCisgICAgMHgzODNkZTAwMCwNCisgICAgMHgzODNlMDAw
MCwNCisgICAgMHgzODNlMjAwMCwNCisgICAgMHgzODNlNDAwMCwNCisgICAgMHgzODNlNjAwMCwN
CisgICAgMHgzODNlODAwMCwNCisgICAgMHgzODNlYTAwMCwNCisgICAgMHgzODNlYzAwMCwNCisg
ICAgMHgzODNlZTAwMCwNCisgICAgMHgzODNmMDAwMCwNCisgICAgMHgzODNmMjAwMCwNCisgICAg
MHgzODNmNDAwMCwNCisgICAgMHgzODNmNjAwMCwNCisgICAgMHgzODNmODAwMCwNCisgICAgMHgz
ODNmYTAwMCwNCisgICAgMHgzODNmYzAwMCwNCisgICAgMHgzODNmZTAwMCwNCisgICAgMHgzODQw
MDAwMCwNCisgICAgMHgzODQwMjAwMCwNCisgICAgMHgzODQwNDAwMCwNCisgICAgMHgzODQwNjAw
MCwNCisgICAgMHgzODQwODAwMCwNCisgICAgMHgzODQwYTAwMCwNCisgICAgMHgzODQwYzAwMCwN
CisgICAgMHgzODQwZTAwMCwNCisgICAgMHgzODQxMDAwMCwNCisgICAgMHgzODQxMjAwMCwNCisg
ICAgMHgzODQxNDAwMCwNCisgICAgMHgzODQxNjAwMCwNCisgICAgMHgzODQxODAwMCwNCisgICAg
MHgzODQxYTAwMCwNCisgICAgMHgzODQxYzAwMCwNCisgICAgMHgzODQxZTAwMCwNCisgICAgMHgz
ODQyMDAwMCwNCisgICAgMHgzODQyMjAwMCwNCisgICAgMHgzODQyNDAwMCwNCisgICAgMHgzODQy
NjAwMCwNCisgICAgMHgzODQyODAwMCwNCisgICAgMHgzODQyYTAwMCwNCisgICAgMHgzODQyYzAw
MCwNCisgICAgMHgzODQyZTAwMCwNCisgICAgMHgzODQzMDAwMCwNCisgICAgMHgzODQzMjAwMCwN
CisgICAgMHgzODQzNDAwMCwNCisgICAgMHgzODQzNjAwMCwNCisgICAgMHgzODQzODAwMCwNCisg
ICAgMHgzODQzYTAwMCwNCisgICAgMHgzODQzYzAwMCwNCisgICAgMHgzODQzZTAwMCwNCisgICAg
MHgzODQ0MDAwMCwNCisgICAgMHgzODQ0MjAwMCwNCisgICAgMHgzODQ0NDAwMCwNCisgICAgMHgz
ODQ0NjAwMCwNCisgICAgMHgzODQ0ODAwMCwNCisgICAgMHgzODQ0YTAwMCwNCisgICAgMHgzODQ0
YzAwMCwNCisgICAgMHgzODQ0ZTAwMCwNCisgICAgMHgzODQ1MDAwMCwNCisgICAgMHgzODQ1MjAw
MCwNCisgICAgMHgzODQ1NDAwMCwNCisgICAgMHgzODQ1NjAwMCwNCisgICAgMHgzODQ1ODAwMCwN
CisgICAgMHgzODQ1YTAwMCwNCisgICAgMHgzODQ1YzAwMCwNCisgICAgMHgzODQ1ZTAwMCwNCisg
ICAgMHgzODQ2MDAwMCwNCisgICAgMHgzODQ2MjAwMCwNCisgICAgMHgzODQ2NDAwMCwNCisgICAg
MHgzODQ2NjAwMCwNCisgICAgMHgzODQ2ODAwMCwNCisgICAgMHgzODQ2YTAwMCwNCisgICAgMHgz
ODQ2YzAwMCwNCisgICAgMHgzODQ2ZTAwMCwNCisgICAgMHgzODQ3MDAwMCwNCisgICAgMHgzODQ3
MjAwMCwNCisgICAgMHgzODQ3NDAwMCwNCisgICAgMHgzODQ3NjAwMCwNCisgICAgMHgzODQ3ODAw
MCwNCisgICAgMHgzODQ3YTAwMCwNCisgICAgMHgzODQ3YzAwMCwNCisgICAgMHgzODQ3ZTAwMCwN
CisgICAgMHgzODQ4MDAwMCwNCisgICAgMHgzODQ4MjAwMCwNCisgICAgMHgzODQ4NDAwMCwNCisg
ICAgMHgzODQ4NjAwMCwNCisgICAgMHgzODQ4ODAwMCwNCisgICAgMHgzODQ4YTAwMCwNCisgICAg
MHgzODQ4YzAwMCwNCisgICAgMHgzODQ4ZTAwMCwNCisgICAgMHgzODQ5MDAwMCwNCisgICAgMHgz
ODQ5MjAwMCwNCisgICAgMHgzODQ5NDAwMCwNCisgICAgMHgzODQ5NjAwMCwNCisgICAgMHgzODQ5
ODAwMCwNCisgICAgMHgzODQ5YTAwMCwNCisgICAgMHgzODQ5YzAwMCwNCisgICAgMHgzODQ5ZTAw
MCwNCisgICAgMHgzODRhMDAwMCwNCisgICAgMHgzODRhMjAwMCwNCisgICAgMHgzODRhNDAwMCwN
CisgICAgMHgzODRhNjAwMCwNCisgICAgMHgzODRhODAwMCwNCisgICAgMHgzODRhYTAwMCwNCisg
ICAgMHgzODRhYzAwMCwNCisgICAgMHgzODRhZTAwMCwNCisgICAgMHgzODRiMDAwMCwNCisgICAg
MHgzODRiMjAwMCwNCisgICAgMHgzODRiNDAwMCwNCisgICAgMHgzODRiNjAwMCwNCisgICAgMHgz
ODRiODAwMCwNCisgICAgMHgzODRiYTAwMCwNCisgICAgMHgzODRiYzAwMCwNCisgICAgMHgzODRi
ZTAwMCwNCisgICAgMHgzODRjMDAwMCwNCisgICAgMHgzODRjMjAwMCwNCisgICAgMHgzODRjNDAw
MCwNCisgICAgMHgzODRjNjAwMCwNCisgICAgMHgzODRjODAwMCwNCisgICAgMHgzODRjYTAwMCwN
CisgICAgMHgzODRjYzAwMCwNCisgICAgMHgzODRjZTAwMCwNCisgICAgMHgzODRkMDAwMCwNCisg
ICAgMHgzODRkMjAwMCwNCisgICAgMHgzODRkNDAwMCwNCisgICAgMHgzODRkNjAwMCwNCisgICAg
MHgzODRkODAwMCwNCisgICAgMHgzODRkYTAwMCwNCisgICAgMHgzODRkYzAwMCwNCisgICAgMHgz
ODRkZTAwMCwNCisgICAgMHgzODRlMDAwMCwNCisgICAgMHgzODRlMjAwMCwNCisgICAgMHgzODRl
NDAwMCwNCisgICAgMHgzODRlNjAwMCwNCisgICAgMHgzODRlODAwMCwNCisgICAgMHgzODRlYTAw
MCwNCisgICAgMHgzODRlYzAwMCwNCisgICAgMHgzODRlZTAwMCwNCisgICAgMHgzODRmMDAwMCwN
CisgICAgMHgzODRmMjAwMCwNCisgICAgMHgzODRmNDAwMCwNCisgICAgMHgzODRmNjAwMCwNCisg
ICAgMHgzODRmODAwMCwNCisgICAgMHgzODRmYTAwMCwNCisgICAgMHgzODRmYzAwMCwNCisgICAg
MHgzODRmZTAwMCwNCisgICAgMHgzODUwMDAwMCwNCisgICAgMHgzODUwMjAwMCwNCisgICAgMHgz
ODUwNDAwMCwNCisgICAgMHgzODUwNjAwMCwNCisgICAgMHgzODUwODAwMCwNCisgICAgMHgzODUw
YTAwMCwNCisgICAgMHgzODUwYzAwMCwNCisgICAgMHgzODUwZTAwMCwNCisgICAgMHgzODUxMDAw
MCwNCisgICAgMHgzODUxMjAwMCwNCisgICAgMHgzODUxNDAwMCwNCisgICAgMHgzODUxNjAwMCwN
CisgICAgMHgzODUxODAwMCwNCisgICAgMHgzODUxYTAwMCwNCisgICAgMHgzODUxYzAwMCwNCisg
ICAgMHgzODUxZTAwMCwNCisgICAgMHgzODUyMDAwMCwNCisgICAgMHgzODUyMjAwMCwNCisgICAg
MHgzODUyNDAwMCwNCisgICAgMHgzODUyNjAwMCwNCisgICAgMHgzODUyODAwMCwNCisgICAgMHgz
ODUyYTAwMCwNCisgICAgMHgzODUyYzAwMCwNCisgICAgMHgzODUyZTAwMCwNCisgICAgMHgzODUz
MDAwMCwNCisgICAgMHgzODUzMjAwMCwNCisgICAgMHgzODUzNDAwMCwNCisgICAgMHgzODUzNjAw
MCwNCisgICAgMHgzODUzODAwMCwNCisgICAgMHgzODUzYTAwMCwNCisgICAgMHgzODUzYzAwMCwN
CisgICAgMHgzODUzZTAwMCwNCisgICAgMHgzODU0MDAwMCwNCisgICAgMHgzODU0MjAwMCwNCisg
ICAgMHgzODU0NDAwMCwNCisgICAgMHgzODU0NjAwMCwNCisgICAgMHgzODU0ODAwMCwNCisgICAg
MHgzODU0YTAwMCwNCisgICAgMHgzODU0YzAwMCwNCisgICAgMHgzODU0ZTAwMCwNCisgICAgMHgz
ODU1MDAwMCwNCisgICAgMHgzODU1MjAwMCwNCisgICAgMHgzODU1NDAwMCwNCisgICAgMHgzODU1
NjAwMCwNCisgICAgMHgzODU1ODAwMCwNCisgICAgMHgzODU1YTAwMCwNCisgICAgMHgzODU1YzAw
MCwNCisgICAgMHgzODU1ZTAwMCwNCisgICAgMHgzODU2MDAwMCwNCisgICAgMHgzODU2MjAwMCwN
CisgICAgMHgzODU2NDAwMCwNCisgICAgMHgzODU2NjAwMCwNCisgICAgMHgzODU2ODAwMCwNCisg
ICAgMHgzODU2YTAwMCwNCisgICAgMHgzODU2YzAwMCwNCisgICAgMHgzODU2ZTAwMCwNCisgICAg
MHgzODU3MDAwMCwNCisgICAgMHgzODU3MjAwMCwNCisgICAgMHgzODU3NDAwMCwNCisgICAgMHgz
ODU3NjAwMCwNCisgICAgMHgzODU3ODAwMCwNCisgICAgMHgzODU3YTAwMCwNCisgICAgMHgzODU3
YzAwMCwNCisgICAgMHgzODU3ZTAwMCwNCisgICAgMHgzODU4MDAwMCwNCisgICAgMHgzODU4MjAw
MCwNCisgICAgMHgzODU4NDAwMCwNCisgICAgMHgzODU4NjAwMCwNCisgICAgMHgzODU4ODAwMCwN
CisgICAgMHgzODU4YTAwMCwNCisgICAgMHgzODU4YzAwMCwNCisgICAgMHgzODU4ZTAwMCwNCisg
ICAgMHgzODU5MDAwMCwNCisgICAgMHgzODU5MjAwMCwNCisgICAgMHgzODU5NDAwMCwNCisgICAg
MHgzODU5NjAwMCwNCisgICAgMHgzODU5ODAwMCwNCisgICAgMHgzODU5YTAwMCwNCisgICAgMHgz
ODU5YzAwMCwNCisgICAgMHgzODU5ZTAwMCwNCisgICAgMHgzODVhMDAwMCwNCisgICAgMHgzODVh
MjAwMCwNCisgICAgMHgzODVhNDAwMCwNCisgICAgMHgzODVhNjAwMCwNCisgICAgMHgzODVhODAw
MCwNCisgICAgMHgzODVhYTAwMCwNCisgICAgMHgzODVhYzAwMCwNCisgICAgMHgzODVhZTAwMCwN
CisgICAgMHgzODViMDAwMCwNCisgICAgMHgzODViMjAwMCwNCisgICAgMHgzODViNDAwMCwNCisg
ICAgMHgzODViNjAwMCwNCisgICAgMHgzODViODAwMCwNCisgICAgMHgzODViYTAwMCwNCisgICAg
MHgzODViYzAwMCwNCisgICAgMHgzODViZTAwMCwNCisgICAgMHgzODVjMDAwMCwNCisgICAgMHgz
ODVjMjAwMCwNCisgICAgMHgzODVjNDAwMCwNCisgICAgMHgzODVjNjAwMCwNCisgICAgMHgzODVj
ODAwMCwNCisgICAgMHgzODVjYTAwMCwNCisgICAgMHgzODVjYzAwMCwNCisgICAgMHgzODVjZTAw
MCwNCisgICAgMHgzODVkMDAwMCwNCisgICAgMHgzODVkMjAwMCwNCisgICAgMHgzODVkNDAwMCwN
CisgICAgMHgzODVkNjAwMCwNCisgICAgMHgzODVkODAwMCwNCisgICAgMHgzODVkYTAwMCwNCisg
ICAgMHgzODVkYzAwMCwNCisgICAgMHgzODVkZTAwMCwNCisgICAgMHgzODVlMDAwMCwNCisgICAg
MHgzODVlMjAwMCwNCisgICAgMHgzODVlNDAwMCwNCisgICAgMHgzODVlNjAwMCwNCisgICAgMHgz
ODVlODAwMCwNCisgICAgMHgzODVlYTAwMCwNCisgICAgMHgzODVlYzAwMCwNCisgICAgMHgzODVl
ZTAwMCwNCisgICAgMHgzODVmMDAwMCwNCisgICAgMHgzODVmMjAwMCwNCisgICAgMHgzODVmNDAw
MCwNCisgICAgMHgzODVmNjAwMCwNCisgICAgMHgzODVmODAwMCwNCisgICAgMHgzODVmYTAwMCwN
CisgICAgMHgzODVmYzAwMCwNCisgICAgMHgzODVmZTAwMCwNCisgICAgMHgzODYwMDAwMCwNCisg
ICAgMHgzODYwMjAwMCwNCisgICAgMHgzODYwNDAwMCwNCisgICAgMHgzODYwNjAwMCwNCisgICAg
MHgzODYwODAwMCwNCisgICAgMHgzODYwYTAwMCwNCisgICAgMHgzODYwYzAwMCwNCisgICAgMHgz
ODYwZTAwMCwNCisgICAgMHgzODYxMDAwMCwNCisgICAgMHgzODYxMjAwMCwNCisgICAgMHgzODYx
NDAwMCwNCisgICAgMHgzODYxNjAwMCwNCisgICAgMHgzODYxODAwMCwNCisgICAgMHgzODYxYTAw
MCwNCisgICAgMHgzODYxYzAwMCwNCisgICAgMHgzODYxZTAwMCwNCisgICAgMHgzODYyMDAwMCwN
CisgICAgMHgzODYyMjAwMCwNCisgICAgMHgzODYyNDAwMCwNCisgICAgMHgzODYyNjAwMCwNCisg
ICAgMHgzODYyODAwMCwNCisgICAgMHgzODYyYTAwMCwNCisgICAgMHgzODYyYzAwMCwNCisgICAg
MHgzODYyZTAwMCwNCisgICAgMHgzODYzMDAwMCwNCisgICAgMHgzODYzMjAwMCwNCisgICAgMHgz
ODYzNDAwMCwNCisgICAgMHgzODYzNjAwMCwNCisgICAgMHgzODYzODAwMCwNCisgICAgMHgzODYz
YTAwMCwNCisgICAgMHgzODYzYzAwMCwNCisgICAgMHgzODYzZTAwMCwNCisgICAgMHgzODY0MDAw
MCwNCisgICAgMHgzODY0MjAwMCwNCisgICAgMHgzODY0NDAwMCwNCisgICAgMHgzODY0NjAwMCwN
CisgICAgMHgzODY0ODAwMCwNCisgICAgMHgzODY0YTAwMCwNCisgICAgMHgzODY0YzAwMCwNCisg
ICAgMHgzODY0ZTAwMCwNCisgICAgMHgzODY1MDAwMCwNCisgICAgMHgzODY1MjAwMCwNCisgICAg
MHgzODY1NDAwMCwNCisgICAgMHgzODY1NjAwMCwNCisgICAgMHgzODY1ODAwMCwNCisgICAgMHgz
ODY1YTAwMCwNCisgICAgMHgzODY1YzAwMCwNCisgICAgMHgzODY1ZTAwMCwNCisgICAgMHgzODY2
MDAwMCwNCisgICAgMHgzODY2MjAwMCwNCisgICAgMHgzODY2NDAwMCwNCisgICAgMHgzODY2NjAw
MCwNCisgICAgMHgzODY2ODAwMCwNCisgICAgMHgzODY2YTAwMCwNCisgICAgMHgzODY2YzAwMCwN
CisgICAgMHgzODY2ZTAwMCwNCisgICAgMHgzODY3MDAwMCwNCisgICAgMHgzODY3MjAwMCwNCisg
ICAgMHgzODY3NDAwMCwNCisgICAgMHgzODY3NjAwMCwNCisgICAgMHgzODY3ODAwMCwNCisgICAg
MHgzODY3YTAwMCwNCisgICAgMHgzODY3YzAwMCwNCisgICAgMHgzODY3ZTAwMCwNCisgICAgMHgz
ODY4MDAwMCwNCisgICAgMHgzODY4MjAwMCwNCisgICAgMHgzODY4NDAwMCwNCisgICAgMHgzODY4
NjAwMCwNCisgICAgMHgzODY4ODAwMCwNCisgICAgMHgzODY4YTAwMCwNCisgICAgMHgzODY4YzAw
MCwNCisgICAgMHgzODY4ZTAwMCwNCisgICAgMHgzODY5MDAwMCwNCisgICAgMHgzODY5MjAwMCwN
CisgICAgMHgzODY5NDAwMCwNCisgICAgMHgzODY5NjAwMCwNCisgICAgMHgzODY5ODAwMCwNCisg
ICAgMHgzODY5YTAwMCwNCisgICAgMHgzODY5YzAwMCwNCisgICAgMHgzODY5ZTAwMCwNCisgICAg
MHgzODZhMDAwMCwNCisgICAgMHgzODZhMjAwMCwNCisgICAgMHgzODZhNDAwMCwNCisgICAgMHgz
ODZhNjAwMCwNCisgICAgMHgzODZhODAwMCwNCisgICAgMHgzODZhYTAwMCwNCisgICAgMHgzODZh
YzAwMCwNCisgICAgMHgzODZhZTAwMCwNCisgICAgMHgzODZiMDAwMCwNCisgICAgMHgzODZiMjAw
MCwNCisgICAgMHgzODZiNDAwMCwNCisgICAgMHgzODZiNjAwMCwNCisgICAgMHgzODZiODAwMCwN
CisgICAgMHgzODZiYTAwMCwNCisgICAgMHgzODZiYzAwMCwNCisgICAgMHgzODZiZTAwMCwNCisg
ICAgMHgzODZjMDAwMCwNCisgICAgMHgzODZjMjAwMCwNCisgICAgMHgzODZjNDAwMCwNCisgICAg
MHgzODZjNjAwMCwNCisgICAgMHgzODZjODAwMCwNCisgICAgMHgzODZjYTAwMCwNCisgICAgMHgz
ODZjYzAwMCwNCisgICAgMHgzODZjZTAwMCwNCisgICAgMHgzODZkMDAwMCwNCisgICAgMHgzODZk
MjAwMCwNCisgICAgMHgzODZkNDAwMCwNCisgICAgMHgzODZkNjAwMCwNCisgICAgMHgzODZkODAw
MCwNCisgICAgMHgzODZkYTAwMCwNCisgICAgMHgzODZkYzAwMCwNCisgICAgMHgzODZkZTAwMCwN
CisgICAgMHgzODZlMDAwMCwNCisgICAgMHgzODZlMjAwMCwNCisgICAgMHgzODZlNDAwMCwNCisg
ICAgMHgzODZlNjAwMCwNCisgICAgMHgzODZlODAwMCwNCisgICAgMHgzODZlYTAwMCwNCisgICAg
MHgzODZlYzAwMCwNCisgICAgMHgzODZlZTAwMCwNCisgICAgMHgzODZmMDAwMCwNCisgICAgMHgz
ODZmMjAwMCwNCisgICAgMHgzODZmNDAwMCwNCisgICAgMHgzODZmNjAwMCwNCisgICAgMHgzODZm
ODAwMCwNCisgICAgMHgzODZmYTAwMCwNCisgICAgMHgzODZmYzAwMCwNCisgICAgMHgzODZmZTAw
MCwNCisgICAgMHgzODcwMDAwMCwNCisgICAgMHgzODcwMjAwMCwNCisgICAgMHgzODcwNDAwMCwN
CisgICAgMHgzODcwNjAwMCwNCisgICAgMHgzODcwODAwMCwNCisgICAgMHgzODcwYTAwMCwNCisg
ICAgMHgzODcwYzAwMCwNCisgICAgMHgzODcwZTAwMCwNCisgICAgMHgzODcxMDAwMCwNCisgICAg
MHgzODcxMjAwMCwNCisgICAgMHgzODcxNDAwMCwNCisgICAgMHgzODcxNjAwMCwNCisgICAgMHgz
ODcxODAwMCwNCisgICAgMHgzODcxYTAwMCwNCisgICAgMHgzODcxYzAwMCwNCisgICAgMHgzODcx
ZTAwMCwNCisgICAgMHgzODcyMDAwMCwNCisgICAgMHgzODcyMjAwMCwNCisgICAgMHgzODcyNDAw
MCwNCisgICAgMHgzODcyNjAwMCwNCisgICAgMHgzODcyODAwMCwNCisgICAgMHgzODcyYTAwMCwN
CisgICAgMHgzODcyYzAwMCwNCisgICAgMHgzODcyZTAwMCwNCisgICAgMHgzODczMDAwMCwNCisg
ICAgMHgzODczMjAwMCwNCisgICAgMHgzODczNDAwMCwNCisgICAgMHgzODczNjAwMCwNCisgICAg
MHgzODczODAwMCwNCisgICAgMHgzODczYTAwMCwNCisgICAgMHgzODczYzAwMCwNCisgICAgMHgz
ODczZTAwMCwNCisgICAgMHgzODc0MDAwMCwNCisgICAgMHgzODc0MjAwMCwNCisgICAgMHgzODc0
NDAwMCwNCisgICAgMHgzODc0NjAwMCwNCisgICAgMHgzODc0ODAwMCwNCisgICAgMHgzODc0YTAw
MCwNCisgICAgMHgzODc0YzAwMCwNCisgICAgMHgzODc0ZTAwMCwNCisgICAgMHgzODc1MDAwMCwN
CisgICAgMHgzODc1MjAwMCwNCisgICAgMHgzODc1NDAwMCwNCisgICAgMHgzODc1NjAwMCwNCisg
ICAgMHgzODc1ODAwMCwNCisgICAgMHgzODc1YTAwMCwNCisgICAgMHgzODc1YzAwMCwNCisgICAg
MHgzODc1ZTAwMCwNCisgICAgMHgzODc2MDAwMCwNCisgICAgMHgzODc2MjAwMCwNCisgICAgMHgz
ODc2NDAwMCwNCisgICAgMHgzODc2NjAwMCwNCisgICAgMHgzODc2ODAwMCwNCisgICAgMHgzODc2
YTAwMCwNCisgICAgMHgzODc2YzAwMCwNCisgICAgMHgzODc2ZTAwMCwNCisgICAgMHgzODc3MDAw
MCwNCisgICAgMHgzODc3MjAwMCwNCisgICAgMHgzODc3NDAwMCwNCisgICAgMHgzODc3NjAwMCwN
CisgICAgMHgzODc3ODAwMCwNCisgICAgMHgzODc3YTAwMCwNCisgICAgMHgzODc3YzAwMCwNCisg
ICAgMHgzODc3ZTAwMCwNCisgICAgMHgzODc4MDAwMCwNCisgICAgMHgzODc4MjAwMCwNCisgICAg
MHgzODc4NDAwMCwNCisgICAgMHgzODc4NjAwMCwNCisgICAgMHgzODc4ODAwMCwNCisgICAgMHgz
ODc4YTAwMCwNCisgICAgMHgzODc4YzAwMCwNCisgICAgMHgzODc4ZTAwMCwNCisgICAgMHgzODc5
MDAwMCwNCisgICAgMHgzODc5MjAwMCwNCisgICAgMHgzODc5NDAwMCwNCisgICAgMHgzODc5NjAw
MCwNCisgICAgMHgzODc5ODAwMCwNCisgICAgMHgzODc5YTAwMCwNCisgICAgMHgzODc5YzAwMCwN
CisgICAgMHgzODc5ZTAwMCwNCisgICAgMHgzODdhMDAwMCwNCisgICAgMHgzODdhMjAwMCwNCisg
ICAgMHgzODdhNDAwMCwNCisgICAgMHgzODdhNjAwMCwNCisgICAgMHgzODdhODAwMCwNCisgICAg
MHgzODdhYTAwMCwNCisgICAgMHgzODdhYzAwMCwNCisgICAgMHgzODdhZTAwMCwNCisgICAgMHgz
ODdiMDAwMCwNCisgICAgMHgzODdiMjAwMCwNCisgICAgMHgzODdiNDAwMCwNCisgICAgMHgzODdi
NjAwMCwNCisgICAgMHgzODdiODAwMCwNCisgICAgMHgzODdiYTAwMCwNCisgICAgMHgzODdiYzAw
MCwNCisgICAgMHgzODdiZTAwMCwNCisgICAgMHgzODdjMDAwMCwNCisgICAgMHgzODdjMjAwMCwN
CisgICAgMHgzODdjNDAwMCwNCisgICAgMHgzODdjNjAwMCwNCisgICAgMHgzODdjODAwMCwNCisg
ICAgMHgzODdjYTAwMCwNCisgICAgMHgzODdjYzAwMCwNCisgICAgMHgzODdjZTAwMCwNCisgICAg
MHgzODdkMDAwMCwNCisgICAgMHgzODdkMjAwMCwNCisgICAgMHgzODdkNDAwMCwNCisgICAgMHgz
ODdkNjAwMCwNCisgICAgMHgzODdkODAwMCwNCisgICAgMHgzODdkYTAwMCwNCisgICAgMHgzODdk
YzAwMCwNCisgICAgMHgzODdkZTAwMCwNCisgICAgMHgzODdlMDAwMCwNCisgICAgMHgzODdlMjAw
MCwNCisgICAgMHgzODdlNDAwMCwNCisgICAgMHgzODdlNjAwMCwNCisgICAgMHgzODdlODAwMCwN
CisgICAgMHgzODdlYTAwMCwNCisgICAgMHgzODdlYzAwMCwNCisgICAgMHgzODdlZTAwMCwNCisg
ICAgMHgzODdmMDAwMCwNCisgICAgMHgzODdmMjAwMCwNCisgICAgMHgzODdmNDAwMCwNCisgICAg
MHgzODdmNjAwMCwNCisgICAgMHgzODdmODAwMCwNCisgICAgMHgzODdmYTAwMCwNCisgICAgMHgz
ODdmYzAwMCwNCisgICAgMHgzODdmZTAwMCwNCit9Ow0KKw0KK2NvbnN0IHN0YXRpYyB1bnNpZ25l
ZCBnX2V4cG9uZW50WzY0XSA9IHsNCisgICAgMHgwMDAwMDAwMCwNCisgICAgMHgwMDgwMDAwMCwN
CisgICAgMHgwMTAwMDAwMCwNCisgICAgMHgwMTgwMDAwMCwNCisgICAgMHgwMjAwMDAwMCwNCisg
ICAgMHgwMjgwMDAwMCwNCisgICAgMHgwMzAwMDAwMCwNCisgICAgMHgwMzgwMDAwMCwNCisgICAg
MHgwNDAwMDAwMCwNCisgICAgMHgwNDgwMDAwMCwNCisgICAgMHgwNTAwMDAwMCwNCisgICAgMHgw
NTgwMDAwMCwNCisgICAgMHgwNjAwMDAwMCwNCisgICAgMHgwNjgwMDAwMCwNCisgICAgMHgwNzAw
MDAwMCwNCisgICAgMHgwNzgwMDAwMCwNCisgICAgMHgwODAwMDAwMCwNCisgICAgMHgwODgwMDAw
MCwNCisgICAgMHgwOTAwMDAwMCwNCisgICAgMHgwOTgwMDAwMCwNCisgICAgMHgwYTAwMDAwMCwN
CisgICAgMHgwYTgwMDAwMCwNCisgICAgMHgwYjAwMDAwMCwNCisgICAgMHgwYjgwMDAwMCwNCisg
ICAgMHgwYzAwMDAwMCwNCisgICAgMHgwYzgwMDAwMCwNCisgICAgMHgwZDAwMDAwMCwNCisgICAg
MHgwZDgwMDAwMCwNCisgICAgMHgwZTAwMDAwMCwNCisgICAgMHgwZTgwMDAwMCwNCisgICAgMHgw
ZjAwMDAwMCwNCisgICAgMHg0NzgwMDAwMCwNCisgICAgMHg4MDAwMDAwMCwNCisgICAgMHg4MDgw
MDAwMCwNCisgICAgMHg4MTAwMDAwMCwNCisgICAgMHg4MTgwMDAwMCwNCisgICAgMHg4MjAwMDAw
MCwNCisgICAgMHg4MjgwMDAwMCwNCisgICAgMHg4MzAwMDAwMCwNCisgICAgMHg4MzgwMDAwMCwN
CisgICAgMHg4NDAwMDAwMCwNCisgICAgMHg4NDgwMDAwMCwNCisgICAgMHg4NTAwMDAwMCwNCisg
ICAgMHg4NTgwMDAwMCwNCisgICAgMHg4NjAwMDAwMCwNCisgICAgMHg4NjgwMDAwMCwNCisgICAg
MHg4NzAwMDAwMCwNCisgICAgMHg4NzgwMDAwMCwNCisgICAgMHg4ODAwMDAwMCwNCisgICAgMHg4
ODgwMDAwMCwNCisgICAgMHg4OTAwMDAwMCwNCisgICAgMHg4OTgwMDAwMCwNCisgICAgMHg4YTAw
MDAwMCwNCisgICAgMHg4YTgwMDAwMCwNCisgICAgMHg4YjAwMDAwMCwNCisgICAgMHg4YjgwMDAw
MCwNCisgICAgMHg4YzAwMDAwMCwNCisgICAgMHg4YzgwMDAwMCwNCisgICAgMHg4ZDAwMDAwMCwN
CisgICAgMHg4ZDgwMDAwMCwNCisgICAgMHg4ZTAwMDAwMCwNCisgICAgMHg4ZTgwMDAwMCwNCisg
ICAgMHg4ZjAwMDAwMCwNCisgICAgMHhjNzgwMDAwMCwNCit9Ow0KKw0KK2NvbnN0IHN0YXRpYyB1
bnNpZ25lZCBnX29mZnNldFs2NF0gPSB7DQorICAgIDB4MDAwMDAwMDAsDQorICAgIDB4MDAwMDA0
MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAs
DQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQor
ICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAg
IDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4
MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAw
MDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0
MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAs
DQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQor
ICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAg
IDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDAwMDAsDQorICAgIDB4
MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAw
MDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0
MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAs
DQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQor
ICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAg
IDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4
MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAw
MDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0
MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAs
DQorICAgIDB4MDAwMDA0MDAsDQorICAgIDB4MDAwMDA0MDAsDQorfTsNCisNCitmbG9hdCBmbG9h
dDE2VG9GbG9hdDMyKHVuc2lnbmVkIHNob3J0IGgpDQorew0KKyAgICB1bnNpZ25lZCBpMzIgPSBn
X21hbnRpc3NhW2dfb2Zmc2V0W2ggPj4gMTBdICsgKGggJiAweDNmZildICsgZ19leHBvbmVudFto
ID4+IDEwXTsNCisgICAgcmV0dXJuICooZmxvYXQqKSAmaTMyOw0KK30NCit9DQorDQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GbG9h
dDE2VG9GbG9hdDMyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCww
ICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmxvYXQxNlRvRmxvYXQzMi5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Zsb2F0MTZUb0Zs
b2F0MzIucHkJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0Zsb2F0MTZUb0Zsb2F0MzIucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBA
QAorIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorIworCisjIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY29udmVy
dHMgMTYtYml0IHByZWNpc2lvbiBmbG9hdGluZworIyBwb2ludCBudW1iZXJzIHRvIDMyLWJpdC4K
KyMgSXQgaXMgYmFzZWQgb24gZnRwOi8vZnRwLmZveC10b29sa2l0Lm9yZy9wdWIvZmFzdGhhbGZm
bG9hdGNvbnZlcnNpb24ucGRmLgorCitkZWYgY29udmVydE1hbnRpc3NhKGkpOgorICAgIGlmIGkg
PT0gMDoKKyAgICAgICAgcmV0dXJuIDAKKyAgICBlbGlmIGkgPCAxMDI0OgorICAgICAgICBtID0g
aSA8PCAxMworICAgICAgICBlID0gMAorICAgICAgICB3aGlsZSBub3QgKG0gJiAweDAwODAwMDAw
KToKKyAgICAgICAgICAgIGUgLT0gMHgwMDgwMDAwMAorICAgICAgICAgICAgbSA9IG0gPDwgMQor
ICAgICAgICBtICY9IH4weDAwODAwMDAwCisgICAgICAgIGUgKz0gMHgzODgwMDAwMAorICAgICAg
ICByZXR1cm4gbSB8IGUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gMHgzODAwMDAwMCArICgo
aSAtIDEwMjQpIDw8IDEzKQorCitkZWYgY29udmVydEV4cG9uZW50KGkpOgorICAgIGlmIGkgPT0g
MDoKKyAgICAgICAgcmV0dXJuIDAKKyAgICBlbGlmIGkgaW4gcmFuZ2UoMSwgMzEpOgorICAgICAg
ICByZXR1cm4gaSA8PCAyMworICAgIGVsaWYgaSA9PSAzMToKKyAgICAgICAgcmV0dXJuIDB4NDc4
MDAwMDAKKyAgICBlbGlmIGkgPT0gMzI6CisgICAgICAgIHJldHVybiAweDgwMDAwMDAwCisgICAg
ZWxpZiBpIGluIHJhbmdlKDMzLCA2Myk6CisgICAgICAgIHJldHVybiAweDgwMDAwMDAwICsgKChp
IC0gMzIpIDw8IDIzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAweEM3ODAwMDAwCisKK2Rl
ZiBjb252ZXJ0T2Zmc2V0KGkpOgorICAgIGlmIGkgPT0gMCBvciBpID09IDMyOgorICAgICAgICBy
ZXR1cm4gMAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAxMDI0CisKK3ByaW50ICIiIi8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuCisKK25h
bWVzcGFjZSBnbAoreworIiIiCisKK3ByaW50ICJjb25zdCBzdGF0aWMgdW5zaWduZWQgZ19tYW50
aXNzYVsyMDQ4XSA9IHsiCitmb3IgaSBpbiByYW5nZSgwLCAyMDQ4KToKKyAgICBwcmludCAiICAg
ICUjMDEweCwiICUgY29udmVydE1hbnRpc3NhKGkpCitwcmludCAifTtcbiIKKworcHJpbnQgImNv
bnN0IHN0YXRpYyB1bnNpZ25lZCBnX2V4cG9uZW50WzY0XSA9IHsiCitmb3IgaSBpbiByYW5nZSgw
LCA2NCk6CisgICAgcHJpbnQgIiAgICAlIzAxMHgsIiAlIGNvbnZlcnRFeHBvbmVudChpKQorcHJp
bnQgIn07XG4iCisKK3ByaW50ICJjb25zdCBzdGF0aWMgdW5zaWduZWQgZ19vZmZzZXRbNjRdID0g
eyIKK2ZvciBpIGluIHJhbmdlKDAsIDY0KToKKyAgICBwcmludCAiICAgICUjMDEweCwiICUgY29u
dmVydE9mZnNldChpKQorcHJpbnQgIn07XG4iCisKK3ByaW50ICIiImZsb2F0IGZsb2F0MTZUb0Zs
b2F0MzIodW5zaWduZWQgc2hvcnQgaCkKK3sKKyAgICB1bnNpZ25lZCBpMzIgPSBnX21hbnRpc3Nh
W2dfb2Zmc2V0W2ggPj4gMTBdICsgKGggJiAweDNmZildICsgZ19leHBvbmVudFtoID4+IDEwXTsK
KyAgICByZXR1cm4gKihmbG9hdCopICZpMzI7Cit9Cit9CisiIiIKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmxvYXQxNlRvRmxvYXQz
Mi5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MDkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIEZyYW1lYnVmZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkZyYW1lYnVmZmVyIGNsYXNz
LiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCisvLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0
aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNS4KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21h
aW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL1RleHR1cmUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKK25h
bWVzcGFjZSBnbAoreworCitGcmFtZWJ1ZmZlcjo6RnJhbWVidWZmZXIoKQoreworICAgIG1Db2xv
cmJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwor
ICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Cit9CisKK0ZyYW1lYnVmZmVyOjp+RnJh
bWVidWZmZXIoKQoreworICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgIG1E
ZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5z
ZXQoTlVMTCk7CisgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworfQorCitS
ZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUs
IEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworICAgIFJlbmRlcmJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKKworICAgIGlm
ICh0eXBlID09IEdMX05PTkUpCisgICAgeworICAgICAgICBidWZmZXIgPSBOVUxMOworICAgIH0K
KyAgICBlbHNlIGlmICh0eXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICB7CisgICAgICAgIGJ1
ZmZlciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOworICAgIH0KKyAgICBlbHNl
IGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldCh0eXBlKSkKKyAgICB7CisgICAgICAgIGJ1ZmZl
ciA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKS0+Z2V0UmVuZGVyYnVmZmVyKHR5cGUpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBidWZmZXI7Cit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVy
KEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpCit7CisgICAgbUNvbG9yYnVmZmVyVHlw
ZSA9IChjb2xvcmJ1ZmZlciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOworICAgIG1Db2xvcmJ1ZmZl
clBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBjb2xvcmJ1ZmZlcikpOworfQor
Cit2b2lkIEZyYW1lYnVmZmVyOjpzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRl
cHRoYnVmZmVyKQoreworICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhidWZmZXIgIT0gMCkg
PyB0eXBlIDogR0xfTk9ORTsKKyAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChsb29rdXBSZW5k
ZXJidWZmZXIodHlwZSwgZGVwdGhidWZmZXIpKTsKK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0
U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIpCit7CisgICAg
bVN0ZW5jaWxidWZmZXJUeXBlID0gKHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9O
RTsKKyAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBl
LCBzdGVuY2lsYnVmZmVyKSk7Cit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFRleHR1cmUo
R0x1aW50IHRleHR1cmUpCit7CisgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0
ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQorICAg
IHsKKyAgICAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1Db2xvcmJ1
ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgIH0KKworICAgIGlmIChtRGVwdGhidWZmZXJQb2lu
dGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZm
ZXJUeXBlKSkKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAg
ICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICB9CisKKyAgICBpZiAobVN0
ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRh
cmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgIHsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXJU
eXBlID0gR0xfTk9ORTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsK
KyAgICB9Cit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQg
cmVuZGVyYnVmZmVyKQoreworICAgIGlmIChtQ29sb3JidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVu
ZGVyYnVmZmVyICYmIG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIHsK
KyAgICAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1Db2xvcmJ1ZmZl
clBvaW50ZXIuc2V0KE5VTEwpOworICAgIH0KKworICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVy
LmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVG
RkVSKQorICAgIHsKKyAgICAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAg
IG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgIH0KKworICAgIGlmIChtU3RlbmNp
bGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBl
ID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9
IEdMX05PTkU7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAg
fQorfQorCit1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgp
Cit7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIu
Z2V0KCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gY29s
b3JidWZmZXItPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvLyBJ
bmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkg
dGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0
UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9y
YnVmZmVyUG9pbnRlci5nZXQoKTsKKworICAgIGlmIChjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgfQorCisgICAg
cmV0dXJuIE5VTEw7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3Vy
ZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIFJlbmRlcmJ1ZmZl
ciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICAK
KyAgICBpZiAoIWRlcHRoc3RlbmNpbGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGRlcHRoc3RlbmNp
bGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICB9CisKKyAgICBpZiAo
ZGVwdGhzdGVuY2lsYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlcHRoc3RlbmNpbGJ1
ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisK
K3Vuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwoKQoreworICAg
IFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwor
CisgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVy
LT5nZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50
IEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCkKK3sKKyAgICBSZW5kZXJidWZm
ZXIgKnN0ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisKKyAgICBp
ZiAoc3RlbmNpbGJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyLT5n
ZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUmVuZGVyYnVmZmVyICpG
cmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIoKQoreworICAgIHJldHVybiBtQ29sb3JidWZmZXJQ
b2ludGVyLmdldCgpOworfQorCitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1
ZmZlcigpCit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Cit9CisKK1Jl
bmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXIoKQoreworICAgIHJldHVy
biBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Cit9CisKK1JlbmRlcmJ1ZmZlciAqRnJhbWVi
dWZmZXI6OmdldE51bGxDb2xvcmJ1ZmZlcigpCit7CisgICAgUmVuZGVyYnVmZmVyICpudWxsYnVm
ZmVyICA9IG1OdWxsQ29sb3JidWZmZXJQb2ludGVyLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAq
ZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOworCisgICAgaWYgKCFkZXB0aGJ1ZmZlcikK
KyAgICB7CisgICAgICAgIEVSUigiVW5leHBlY3RlZCBudWxsIGRlcHRoYnVmZmVyIGZvciBkZXB0
aC1vbmx5IEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgR0xzaXpl
aSB3aWR0aCAgPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9
IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKworICAgIGlmICghbnVsbGJ1ZmZlciB8fAorICAg
ICAgICB3aWR0aCAhPSBudWxsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBudWxsYnVm
ZmVyLT5nZXRIZWlnaHQoKSkKKyAgICB7CisgICAgICAgIG51bGxidWZmZXIgPSBuZXcgUmVuZGVy
YnVmZmVyKDAsIG5ldyBDb2xvcmJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBHTF9OT05FLCAwKSk7Cisg
ICAgICAgIG1OdWxsQ29sb3JidWZmZXJQb2ludGVyLnNldChudWxsYnVmZmVyKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbnVsbGJ1ZmZlcjsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xv
cmJ1ZmZlclR5cGUoKQoreworICAgIHJldHVybiBtQ29sb3JidWZmZXJUeXBlOworfQorCitHTGVu
dW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyVHlwZSgpCit7CisgICAgcmV0dXJuIG1EZXB0
aGJ1ZmZlclR5cGU7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclR5
cGUoKQoreworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclR5cGU7Cit9CisKK0dMdWludCBGcmFt
ZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJIYW5kbGUoKQoreworICAgIHJldHVybiBtQ29sb3JidWZm
ZXJQb2ludGVyLmlkKCk7Cit9CisKK0dMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJI
YW5kbGUoKQoreworICAgIHJldHVybiBtRGVwdGhidWZmZXJQb2ludGVyLmlkKCk7Cit9CisKK0dM
dWludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpCit7CisgICAgcmV0dXJu
IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5pZCgpOworfQorCitib29sIEZyYW1lYnVmZmVyOjpoYXNT
dGVuY2lsKCkKK3sKKyAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAg
eworICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXJPYmplY3QgPSBnZXRTdGVuY2ls
YnVmZmVyKCk7CisKKyAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXJPYmplY3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsU2l6ZSgp
ID4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworR0xlbnVt
IEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQoreworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBoZWlnaHQg
PSAwOworICAgIGludCBzYW1wbGVzID0gLTE7CisgICAgYm9vbCBtaXNzaW5nQXR0YWNobWVudCA9
IHRydWU7CisKKyAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIHsKKyAg
ICAgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7CisKKyAg
ICAgICAgaWYgKCFjb2xvcmJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGNvbG9yYnVmZmVyLT5nZXRIZWln
aHQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Db2xvcmJ1
ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IWdsOjpJc0NvbG9yUmVuZGVyYWJsZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJUeXBlKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBjb2xvcmJ1ZmZlci0+Z2V0
SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFj
dEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisKKyAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQo
Zm9ybWF0KSB8fAorICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9BTFBIQSB8fAorICAgICAg
ICAgICAgICAgIGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UgfHwKKyAgICAgICAgICAgICAgICBmb3Jt
YXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKChnbDo6SXNGbG9hdDMyRm9ybWF0KGludGVybmFsZm9ybWF0KSAmJiAhY29u
dGV4dC0+c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkpIHx8CisgICAgICAgICAg
ICAgICAgKGdsOjpJc0Zsb2F0MTZGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYmICFjb250ZXh0LT5z
dXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGludGVybmFsZm9ybWF0
KSB8fCBnbDo6SXNTdGVuY2lsVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgd2lkdGgg
PSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXIt
PmdldEhlaWdodCgpOworICAgICAgICBzYW1wbGVzID0gY29sb3JidWZmZXItPmdldFNhbXBsZXMo
KTsKKyAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBSZW5k
ZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKKyAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxi
dWZmZXIgPSBOVUxMOworCisgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAg
ICB7CisgICAgICAgIGRlcHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKKworICAgICAgICBp
ZiAoIWRlcHRoYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRl
cHRoYnVmZmVyLT5nZXRXaWR0aCgpID09IDAgfHwgZGVwdGhidWZmZXItPmdldEhlaWdodCgpID09
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlw
ZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6Oklz
RGVwdGhSZW5kZXJhYmxlKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5h
bEZvcm1hdCgpOworCisgICAgICAgICAgICAvLyBkZXB0aCB0ZXh0dXJlIGF0dGFjaG1lbnRzIHJl
cXVpcmUgT0VTL0FOR0xFX2RlcHRoX3RleHR1cmUKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+
c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFnbDo6SXNEZXB0aFRleHR1cmUoaW50ZXJuYWxmb3JtYXQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkKKyAgICAgICAgeworICAgICAgICAgICAg
d2lkdGggPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGhlaWdodCA9IGRl
cHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIHNhbXBsZXMgPSBkZXB0aGJ1ZmZl
ci0+Z2V0U2FtcGxlcygpOworICAgICAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBkZXB0aGJ1ZmZlci0+Z2V0V2lk
dGgoKSB8fCBoZWlnaHQgIT0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gZGVwdGhidWZmZXItPmdldFNh
bXBsZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTVVMVElTQU1QTEVfQU5HTEU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
bVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBzdGVuY2lsYnVm
ZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOworCisgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyLT5nZXRX
aWR0aCgpID09IDAgfHwgc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVO
REVSQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5k
ZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoSXNJbnRl
cm5hbFRleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXJUeXBlKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZv
cm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0YWNobWVudHMgY29t
ZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBPRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxUZXh0dXJlKGludGVybmFsZm9ybWF0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGhlaWdodCA9
IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgc2FtcGxlcyA9IHN0ZW5j
aWxidWZmZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJ
TUVOU0lPTlM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBzdGVuY2ls
YnVmZmVyLT5nZXRTYW1wbGVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0FOR0xFOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gaWYgd2UgaGF2ZSBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCB0
aGV5IG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0CisgICAgLy8gc2luY2Ugd2Ugb25seSBz
dXBwb3J0IHBhY2tlZF9kZXB0aF9zdGVuY2lsIGFuZCBub3Qgc2VwYXJhdGUgZGVwdGggYW5kIHN0
ZW5jaWwKKyAgICBpZiAoZGVwdGhidWZmZXIgJiYgc3RlbmNpbGJ1ZmZlciAmJiAoZGVwdGhidWZm
ZXIgIT0gc3RlbmNpbGJ1ZmZlcikpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgLy8gd2UgbmVlZCB0byBoYXZlIGF0IGxlYXN0
IG9uZSBhdHRhY2htZW50IHRvIGJlIGNvbXBsZXRlCisgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lO
R19BVFRBQ0hNRU5UOworICAgIH0KKworICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RTsKK30KKworRGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIoQ29sb3JidWZm
ZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbCkKK3sKKyAg
ICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChuZXcgUmVuZGVyYnVmZmVyKDAsIGNvbG9yYnVmZmVy
KSk7CisKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciA9IG5ldyBS
ZW5kZXJidWZmZXIoMCwgZGVwdGhTdGVuY2lsKTsKKyAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNl
dChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOworICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5z
ZXQoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyKTsKKworICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBH
TF9SRU5ERVJCVUZGRVI7CisgICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aFN0ZW5jaWxSZW5k
ZXJidWZmZXItPmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9O
RTsKKyAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLT5n
ZXRTdGVuY2lsU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORTsKK30KKwor
aW50IEZyYW1lYnVmZmVyOjpnZXRTYW1wbGVzKCkKK3sKKyAgICBpZiAoY29tcGxldGVuZXNzKCkg
PT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0Q29s
b3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMZW51bSBEZWZhdWx0RnJhbWVidWZmZXI6OmNvbXBs
ZXRlbmVzcygpCit7CisgICAgLy8gVGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgc2hvdWxkIGFsd2F5
cyBiZSBjb21wbGV0ZQorICAgIEFTU0VSVChGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgPT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpOworCisgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRnJhbWVidWZmZXIuaDogRGVmaW5lcyB0aGUgZ2w6
OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCisvLyBvYmplY3Rz
IGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQu
NCBwYWdlIDEwNS4KKworI2lmbmRlZiBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KKyNkZWZpbmUg
TElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisKK25hbWVzcGFj
ZSBnbAoreworY2xhc3MgUmVuZGVyYnVmZmVyOworY2xhc3MgQ29sb3JidWZmZXI7CitjbGFzcyBE
ZXB0aGJ1ZmZlcjsKK2NsYXNzIFN0ZW5jaWxidWZmZXI7CitjbGFzcyBEZXB0aFN0ZW5jaWxidWZm
ZXI7CisKK2NsYXNzIEZyYW1lYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBGcmFtZWJ1ZmZlcigp
OworCisgICAgdmlydHVhbCB+RnJhbWVidWZmZXIoKTsKKworICAgIHZvaWQgc2V0Q29sb3JidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7CisgICAgdm9pZCBzZXREZXB0aGJ1
ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKKyAgICB2b2lkIHNldFN0ZW5j
aWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKKworICAgIHZvaWQg
ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBkZXRhY2hSZW5kZXJidWZm
ZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVu
ZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwor
CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIHVuc2lnbmVk
IGludCBnZXREZXB0aGJ1ZmZlclNlcmlhbCgpOworICAgIHVuc2lnbmVkIGludCBnZXRTdGVuY2ls
YnVmZmVyU2VyaWFsKCk7CisKKyAgICBSZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKCk7Cisg
ICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0
U3RlbmNpbGJ1ZmZlcigpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVmZmVyKCk7
CisKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKCk7CisgICAgR0xlbnVtIGdldERlcHRo
YnVmZmVyVHlwZSgpOworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpOworCisgICAg
R0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxlKCk7CisgICAgR0x1aW50IGdldERlcHRoYnVmZmVy
SGFuZGxlKCk7CisgICAgR0x1aW50IGdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKworICAgIGJv
b2wgaGFzU3RlbmNpbCgpOworICAgIGludCBnZXRTYW1wbGVzKCk7CisKKyAgICB2aXJ0dWFsIEdM
ZW51bSBjb21wbGV0ZW5lc3MoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgR0xlbnVtIG1Db2xvcmJ1
ZmZlclR5cGU7CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJQ
b2ludGVyOworCisgICAgR0xlbnVtIG1EZXB0aGJ1ZmZlclR5cGU7CisgICAgQmluZGluZ1BvaW50
ZXI8UmVuZGVyYnVmZmVyPiBtRGVwdGhidWZmZXJQb2ludGVyOworCisgICAgR0xlbnVtIG1TdGVu
Y2lsYnVmZmVyVHlwZTsKKyAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2ls
YnVmZmVyUG9pbnRlcjsKKworICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51bGxD
b2xvcmJ1ZmZlclBvaW50ZXI7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oRnJhbWVidWZmZXIpOworCisgICAgUmVuZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0OworfTsKKworY2xhc3MgRGVmYXVs
dEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBEZWZh
dWx0RnJhbWVidWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZm
ZXIgKmRlcHRoU3RlbmNpbCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5lc3MoKTsK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZWZhdWx0RnJhbWVi
dWZmZXIpOworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8K
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvRnJhbWVidWZmZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCww
ICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9j
YXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0hhbmRsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSGFuZGxlQWxsb2NhdG9yLmNwcDogSW1wbGVtZW50
cyB0aGUgZ2w6OkhhbmRsZUFsbG9jYXRvciBjbGFzcywgd2hpY2ggaXMgdXNlZAorLy8gdG8gYWxs
b2NhdGUgR0wgaGFuZGxlcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3Iu
aCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisKK25hbWVzcGFjZSBnbAoreworCitI
YW5kbGVBbGxvY2F0b3I6OkhhbmRsZUFsbG9jYXRvcigpIDogbUJhc2VWYWx1ZSgxKSwgbU5leHRW
YWx1ZSgxKQoreworfQorCitIYW5kbGVBbGxvY2F0b3I6On5IYW5kbGVBbGxvY2F0b3IoKQorewor
fQorCit2b2lkIEhhbmRsZUFsbG9jYXRvcjo6c2V0QmFzZUhhbmRsZShHTHVpbnQgdmFsdWUpCit7
CisgICAgQVNTRVJUKG1CYXNlVmFsdWUgPT0gbU5leHRWYWx1ZSk7CisgICAgbUJhc2VWYWx1ZSA9
IHZhbHVlOworICAgIG1OZXh0VmFsdWUgPSB2YWx1ZTsKK30KKworR0x1aW50IEhhbmRsZUFsbG9j
YXRvcjo6YWxsb2NhdGUoKQoreworICAgIGlmIChtRnJlZVZhbHVlcy5zaXplKCkpCisgICAgewor
ICAgICAgICBHTHVpbnQgaGFuZGxlID0gbUZyZWVWYWx1ZXMuYmFjaygpOworICAgICAgICBtRnJl
ZVZhbHVlcy5wb3BfYmFjaygpOworICAgICAgICByZXR1cm4gaGFuZGxlOworICAgIH0KKyAgICBy
ZXR1cm4gbU5leHRWYWx1ZSsrOworfQorCit2b2lkIEhhbmRsZUFsbG9jYXRvcjo6cmVsZWFzZShH
THVpbnQgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgPT0gbU5leHRWYWx1ZSAtIDEpCisgICAg
eworICAgICAgICAvLyBEb24ndCBkcm9wIGJlbG93IGJhc2UgdmFsdWUKKyAgICAgICAgaWYobU5l
eHRWYWx1ZSA+IG1CYXNlVmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1OZXh0VmFsdWUt
LTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBPbmx5IGZy
ZWUgaGFuZGxlcyB0aGF0IHdlIG93biAtIGRvbid0IGRyb3AgYmVsb3cgdGhlIGJhc2UgdmFsdWUK
KyAgICAgICAgaWYgKGhhbmRsZSA+PSBtQmFzZVZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBtRnJlZVZhbHVlcy5wdXNoX2JhY2soaGFuZGxlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
fQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9IYW5kbGVBbGxvY2F0b3IuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxl
CiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRs
ZUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBIYW5kbGVBbGxvY2F0b3IuaDogRGVmaW5lcyB0
aGUgZ2w6OkhhbmRsZUFsbG9jYXRvciBjbGFzcywgd2hpY2ggaXMgdXNlZCB0bworLy8gYWxsb2Nh
dGUgR0wgaGFuZGxlcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfSEFORExFQUxMT0NBVE9SX0hfCisj
ZGVmaW5lIExJQkdMRVNWMl9IQU5ETEVBTExPQ0FUT1JfSF8KKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRl
ICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgSGFuZGxl
QWxsb2NhdG9yCit7CisgIHB1YmxpYzoKKyAgICBIYW5kbGVBbGxvY2F0b3IoKTsKKyAgICB2aXJ0
dWFsIH5IYW5kbGVBbGxvY2F0b3IoKTsKKworICAgIHZvaWQgc2V0QmFzZUhhbmRsZShHTHVpbnQg
dmFsdWUpOworCisgICAgR0x1aW50IGFsbG9jYXRlKCk7CisgICAgdm9pZCByZWxlYXNlKEdMdWlu
dCBoYW5kbGUpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEhh
bmRsZUFsbG9jYXRvcik7CisKKyAgICBHTHVpbnQgbUJhc2VWYWx1ZTsKKyAgICBHTHVpbnQgbU5l
eHRWYWx1ZTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPEdMdWludD4gSGFuZGxlTGlzdDsKKyAg
ICBIYW5kbGVMaXN0IG1GcmVlVmFsdWVzOworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVT
VjJfSEFORExFQUxMT0NBVE9SX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9J
bmRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
SW5kZXhEYXRhTWFuYWdlci5jcHA6IERlZmluZXMgdGhlIEluZGV4RGF0YU1hbmFnZXIsIGEgY2xh
c3MgdGhhdAorLy8gcnVucyB0aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MgZm9yIGluZGV4
IGJ1ZmZlcnMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5oIgorCisj
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21h
aW4uaCIKKworbmFtZXNwYWNlIGdsCit7Cit1bnNpZ25lZCBpbnQgSW5kZXhCdWZmZXI6Om1DdXJy
ZW50U2VyaWFsID0gMTsKKworSW5kZXhEYXRhTWFuYWdlcjo6SW5kZXhEYXRhTWFuYWdlcihDb250
ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpIDogbURldmljZShkZXZpY2Up
Cit7CisgICAgbVN0cmVhbWluZ0J1ZmZlclNob3J0ID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVy
KG1EZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDE2KTsKKwor
ICAgIGlmIChjb250ZXh0LT5zdXBwb3J0czMyYml0SW5kaWNlcygpKQorICAgIHsKKyAgICAgICAg
bVN0cmVhbWluZ0J1ZmZlckludCA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJ
TklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgzMik7CisKKyAgICAgICAgaWYg
KCFtU3RyZWFtaW5nQnVmZmVySW50KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEb24ndCBs
ZWF2ZSBpdCBpbiBhIGhhbGYtaW5pdGlhbGl6ZWQgc3RhdGUKKyAgICAgICAgICAgIGRlbGV0ZSBt
U3RyZWFtaW5nQnVmZmVyU2hvcnQ7CisgICAgICAgICAgICBtU3RyZWFtaW5nQnVmZmVyU2hvcnQg
PSBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1TdHJl
YW1pbmdCdWZmZXJJbnQgPSBOVUxMOworICAgIH0KKworICAgIGlmICghbVN0cmVhbWluZ0J1ZmZl
clNob3J0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gYWxsb2NhdGUgdGhlIHN0cmVh
bWluZyBpbmRleCBidWZmZXIocykuIik7CisgICAgfQorCisgICAgbUNvdW50aW5nQnVmZmVyID0g
TlVMTDsKK30KKworSW5kZXhEYXRhTWFuYWdlcjo6fkluZGV4RGF0YU1hbmFnZXIoKQoreworICAg
IGRlbGV0ZSBtU3RyZWFtaW5nQnVmZmVyU2hvcnQ7CisgICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZm
ZXJJbnQ7CisgICAgZGVsZXRlIG1Db3VudGluZ0J1ZmZlcjsKK30KKwordm9pZCBjb252ZXJ0SW5k
aWNlcyhHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQsIEdMc2l6ZWkgY291bnQsIHZvaWQg
Km91dHB1dCkKK3sKKyAgICBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIHsKKyAg
ICAgICAgY29uc3QgR0x1Ynl0ZSAqaW4gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5w
dXQpOworICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGljX2Nhc3Q8R0x1c2hvcnQqPihvdXRw
dXQpOworCisgICAgICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dFtpXSA9IGluW2ldOworICAgICAgICB9CisgICAgfQorICAg
IGVsc2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQorICAgIHsKKyAgICAgICAgbWVtY3B5
KG91dHB1dCwgaW5wdXQsIGNvdW50ICogc2l6ZW9mKEdMdWludCkpOworICAgIH0KKyAgICBlbHNl
IGlmICh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG91
dHB1dCwgaW5wdXQsIGNvdW50ICogc2l6ZW9mKEdMdXNob3J0KSk7CisgICAgfQorICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIEluZGV4VHlwZT4KK3ZvaWQgY29t
cHV0ZVJhbmdlKGNvbnN0IEluZGV4VHlwZSAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0x1aW50
ICptaW5JbmRleCwgR0x1aW50ICptYXhJbmRleCkKK3sKKyAgICAqbWluSW5kZXggPSBpbmRpY2Vz
WzBdOworICAgICptYXhJbmRleCA9IGluZGljZXNbMF07CisKKyAgICBmb3IgKEdMc2l6ZWkgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCptaW5JbmRleCA+IGluZGlj
ZXNbaV0pICptaW5JbmRleCA9IGluZGljZXNbaV07CisgICAgICAgIGlmICgqbWF4SW5kZXggPCBp
bmRpY2VzW2ldKSAqbWF4SW5kZXggPSBpbmRpY2VzW2ldOworICAgIH0KK30KKwordm9pZCBjb21w
dXRlUmFuZ2UoR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3Vu
dCwgR0x1aW50ICptaW5JbmRleCwgR0x1aW50ICptYXhJbmRleCkKK3sKKyAgICBpZiAodHlwZSA9
PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIHsKKyAgICAgICAgY29tcHV0ZVJhbmdlKHN0YXRpY19j
YXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKSwgY291bnQsIG1pbkluZGV4LCBtYXhJbmRleCk7
CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQorICAgIHsKKyAg
ICAgICAgY29tcHV0ZVJhbmdlKHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpLCBj
b3VudCwgbWluSW5kZXgsIG1heEluZGV4KTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBH
TF9VTlNJR05FRF9TSE9SVCkKKyAgICB7CisgICAgICAgIGNvbXB1dGVSYW5nZShzdGF0aWNfY2Fz
dDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpLCBjb3VudCwgbWluSW5kZXgsIG1heEluZGV4KTsK
KyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworfQorCitHTGVudW0gSW5kZXhEYXRhTWFu
YWdlcjo6cHJlcGFyZUluZGV4RGF0YShHTGVudW0gdHlwZSwgR0xzaXplaSBjb3VudCwgQnVmZmVy
ICpidWZmZXIsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgVHJhbnNsYXRlZEluZGV4RGF0YSAqdHJh
bnNsYXRlZCkKK3sKKyAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXJTaG9ydCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOworICAgIH0KKworICAgIEQzREZPUk1BVCBmb3Jt
YXQgPSAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpID8gRDNERk1UX0lOREVYMzIgOiBEM0RGTVRf
SU5ERVgxNjsKKyAgICBpbnRwdHJfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90
PihpbmRpY2VzKTsKKyAgICBib29sIGFsaWduZWRPZmZzZXQgPSBmYWxzZTsKKworICAgIGlmIChi
dWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIGFsaWduZWRPZmZzZXQgPSAob2Zmc2V0
ICUgc2l6ZW9mKEdMdWJ5dGUpID09IDApOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVDogYWxpZ25lZE9mZnNldCA9IChvZmZzZXQgJSBzaXplb2YoR0x1c2hvcnQpID09
IDApOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICBhbGlnbmVkT2Zm
c2V0ID0gKG9mZnNldCAlIHNpemVvZihHTHVpbnQpID09IDApOyAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGFsaWduZWRPZmZzZXQgPSBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh0eXBlU2l6ZSh0eXBlKSAqIGNvdW50ICsgb2Zmc2V0ID4gc3RhdGlj
X2Nhc3Q8c3RkOjpzaXplX3Q+KGJ1ZmZlci0+c2l6ZSgpKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgICAgICB9CisKKyAgICAgICAgaW5k
aWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihidWZmZXItPmRhdGEoKSkgKyBvZmZz
ZXQ7CisgICAgfQorCisgICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIgKnN0cmVhbWluZ0J1ZmZlciA9
ICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCkgPyBtU3RyZWFtaW5nQnVmZmVySW50IDogbVN0cmVh
bWluZ0J1ZmZlclNob3J0OworCisgICAgU3RhdGljSW5kZXhCdWZmZXIgKnN0YXRpY0J1ZmZlciA9
IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RhdGljSW5kZXhCdWZmZXIoKSA6IE5VTEw7CisgICAgSW5k
ZXhCdWZmZXIgKmluZGV4QnVmZmVyID0gc3RyZWFtaW5nQnVmZmVyOworICAgIFVJTlQgc3RyZWFt
T2Zmc2V0ID0gMDsKKworICAgIGlmIChzdGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5sb29r
dXBUeXBlKHR5cGUpICYmIGFsaWduZWRPZmZzZXQpCisgICAgeworICAgICAgICBpbmRleEJ1ZmZl
ciA9IHN0YXRpY0J1ZmZlcjsKKyAgICAgICAgc3RyZWFtT2Zmc2V0ID0gc3RhdGljQnVmZmVyLT5s
b29rdXBSYW5nZShvZmZzZXQsIGNvdW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xh
dGVkLT5tYXhJbmRleCk7CisKKyAgICAgICAgaWYgKHN0cmVhbU9mZnNldCA9PSAtMSkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIHR5cGVTaXplKHR5cGUp
KSAqIGluZGV4U2l6ZShmb3JtYXQpOworICAgICAgICAgICAgY29tcHV0ZVJhbmdlKHR5cGUsIGlu
ZGljZXMsIGNvdW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRl
eCk7CisgICAgICAgICAgICBzdGF0aWNCdWZmZXItPmFkZFJhbmdlKG9mZnNldCwgY291bnQsIHRy
YW5zbGF0ZWQtPm1pbkluZGV4LCB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgY29udmVydENv
dW50ID0gY291bnQ7CisKKyAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+c2l6ZSgpID09IDAgJiYgYWxpZ25lZE9mZnNldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZl
cjsKKyAgICAgICAgICAgICAgICBjb252ZXJ0Q291bnQgPSBidWZmZXItPnNpemUoKSAvIHR5cGVT
aXplKHR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJ1ZmZlci0+aW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKKyAgICAg
ICAgICAgICAgICBzdGF0aWNCdWZmZXIgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdm9pZCAqb3V0cHV0ID0gTlVMTDsKKyAgICAgICAgCisgICAgICAgIGlmIChp
bmRleEJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXhCdWZmZXItPnJlc2VydmVT
cGFjZShjb252ZXJ0Q291bnQgKiBpbmRleFNpemUoZm9ybWF0KSwgdHlwZSk7CisgICAgICAgICAg
ICBvdXRwdXQgPSBpbmRleEJ1ZmZlci0+bWFwKGluZGV4U2l6ZShmb3JtYXQpICogY29udmVydENv
dW50LCAmc3RyZWFtT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG91
dHB1dCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAg
aW5kZXggYnVmZmVyLiIpOworICAgICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Cisg
ICAgICAgIH0KKworICAgICAgICBjb252ZXJ0SW5kaWNlcyh0eXBlLCBzdGF0aWNCdWZmZXIgPyBi
dWZmZXItPmRhdGEoKSA6IGluZGljZXMsIGNvbnZlcnRDb3VudCwgb3V0cHV0KTsKKyAgICAgICAg
aW5kZXhCdWZmZXItPnVubWFwKCk7CisKKyAgICAgICAgY29tcHV0ZVJhbmdlKHR5cGUsIGluZGlj
ZXMsIGNvdW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7
CisKKyAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgc3Ry
ZWFtT2Zmc2V0ID0gKG9mZnNldCAvIHR5cGVTaXplKHR5cGUpKSAqIGluZGV4U2l6ZShmb3JtYXQp
OworICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5hZGRSYW5nZShvZmZzZXQsIGNvdW50LCB0cmFu
c2xhdGVkLT5taW5JbmRleCwgdHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0cmVhbU9mZnNldCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB0cmFuc2xhdGVkLT5pbmRleEJ1ZmZlciA9IGluZGV4QnVm
ZmVyLT5nZXRCdWZmZXIoKTsKKyAgICB0cmFuc2xhdGVkLT5zZXJpYWwgPSBpbmRleEJ1ZmZlci0+
Z2V0U2VyaWFsKCk7CisgICAgdHJhbnNsYXRlZC0+c3RhcnRJbmRleCA9IHN0cmVhbU9mZnNldCAv
IGluZGV4U2l6ZShmb3JtYXQpOworCisgICAgaWYgKGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGJ1
ZmZlci0+cHJvbW90ZVN0YXRpY1VzYWdlKGNvdW50ICogdHlwZVNpemUodHlwZSkpOworICAgIH0K
KworICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30KKworc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFu
YWdlcjo6aW5kZXhTaXplKEQzREZPUk1BVCBmb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChm
b3JtYXQgPT0gRDNERk1UX0lOREVYMzIpID8gc2l6ZW9mKHVuc2lnbmVkIGludCkgOiBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpOworfQorCitzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjp0eXBl
U2l6ZShHTGVudW0gdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIHNpemVvZihHTHVzaG9ydCk7CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6ICByZXR1cm4gc2l6ZW9mKEdMdWJ5dGUpOworICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIHNpemVvZihHTHVzaG9ydCk7CisgICAgfQorfQor
CitTdGF0aWNJbmRleEJ1ZmZlciAqSW5kZXhEYXRhTWFuYWdlcjo6Z2V0Q291bnRpbmdJbmRpY2Vz
KEdMc2l6ZWkgY291bnQpCit7CisgICAgaWYgKGNvdW50IDw9IDY1NTM2KSAgIC8vIDE2LWJpdCBp
bmRpY2VzCisgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSBj
b3VudCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisKKyAgICAgICAgaWYgKCFtQ291bnRpbmdC
dWZmZXIgfHwgbUNvdW50aW5nQnVmZmVyLT5zaXplKCkgPCBzcGFjZU5lZWRlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgZGVsZXRlIG1Db3VudGluZ0J1ZmZlcjsKKyAgICAgICAgICAgIG1Db3Vu
dGluZ0J1ZmZlciA9IG5ldyBTdGF0aWNJbmRleEJ1ZmZlcihtRGV2aWNlKTsKKyAgICAgICAgICAg
IG1Db3VudGluZ0J1ZmZlci0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9T
SE9SVCk7CisKKyAgICAgICAgICAgIFVJTlQgb2Zmc2V0OworICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgKmRhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1Db3VudGluZ0J1ZmZl
ci0+bWFwKHNwYWNlTmVlZGVkLCAmb2Zmc2V0KSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYg
KGRhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkYXRh
W2ldID0gaTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtQ291bnRpbmdC
dWZmZXItPnVubWFwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZSBpZiAobVN0cmVhbWluZ0J1ZmZlckludCkgICAvLyAzMi1iaXQgaW5kaWNlcyBzdXBwb3J0ZWQK
KyAgICB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IGNvdW50ICog
c2l6ZW9mKHVuc2lnbmVkIGludCk7CisKKyAgICAgICAgaWYgKCFtQ291bnRpbmdCdWZmZXIgfHwg
bUNvdW50aW5nQnVmZmVyLT5zaXplKCkgPCBzcGFjZU5lZWRlZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZGVsZXRlIG1Db3VudGluZ0J1ZmZlcjsKKyAgICAgICAgICAgIG1Db3VudGluZ0J1ZmZl
ciA9IG5ldyBTdGF0aWNJbmRleEJ1ZmZlcihtRGV2aWNlKTsKKyAgICAgICAgICAgIG1Db3VudGlu
Z0J1ZmZlci0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9JTlQpOworCisg
ICAgICAgICAgICBVSU5UIG9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludCo+KG1Db3VudGluZ0J1ZmZlci0+bWFwKHNwYWNlTmVl
ZGVkLCAmb2Zmc2V0KSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKGRhdGEpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbUNvdW50aW5n
QnVmZmVyLT51bm1hcCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgcmV0dXJuIE5VTEw7CisgICAgCisgICAgcmV0dXJuIG1Db3VudGluZ0J1ZmZlcjsKK30KKwor
SW5kZXhCdWZmZXI6OkluZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVUlOVCBz
aXplLCBEM0RGT1JNQVQgZm9ybWF0KSA6IG1EZXZpY2UoZGV2aWNlKSwgbUJ1ZmZlclNpemUoc2l6
ZSksIG1JbmRleEJ1ZmZlcihOVUxMKQoreworICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAg
ICAgIEQzRFBPT0wgcG9vbCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9E
WU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZUluZGV4QnVmZmVyKHNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FH
RV9XUklURU9OTFksIGZvcm1hdCwgcG9vbCwgJm1JbmRleEJ1ZmZlciwgTlVMTCk7CisgICAgICAg
IG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYW4g
aW5kZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICB9CisgICAgfQorfQor
CitJbmRleEJ1ZmZlcjo6fkluZGV4QnVmZmVyKCkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQor
ICAgIHsKKyAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgfQorfQorCitJRGly
ZWN0M0RJbmRleEJ1ZmZlcjkgKkluZGV4QnVmZmVyOjpnZXRCdWZmZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtSW5kZXhCdWZmZXI7Cit9CisKK3Vuc2lnbmVkIGludCBJbmRleEJ1ZmZlcjo6Z2V0
U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNlcmlhbDsKK30KKwordW5zaWduZWQgaW50
IEluZGV4QnVmZmVyOjppc3N1ZVNlcmlhbCgpCit7CisgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFs
Kys7Cit9CisKK3ZvaWQgSW5kZXhCdWZmZXI6OnVubWFwKCkKK3sKKyAgICBpZiAobUluZGV4QnVm
ZmVyKQorICAgIHsKKyAgICAgICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKKyAgICB9Cit9CisK
K1N0cmVhbWluZ0luZGV4QnVmZmVyOjpTdHJlYW1pbmdJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UsIFVJTlQgaW5pdGlhbFNpemUsIEQzREZPUk1BVCBmb3JtYXQpIDogSW5kZXhC
dWZmZXIoZGV2aWNlLCBpbml0aWFsU2l6ZSwgZm9ybWF0KQoreworICAgIG1Xcml0ZVBvc2l0aW9u
ID0gMDsKK30KKworU3RyZWFtaW5nSW5kZXhCdWZmZXI6On5TdHJlYW1pbmdJbmRleEJ1ZmZlcigp
Cit7Cit9CisKK3ZvaWQgKlN0cmVhbWluZ0luZGV4QnVmZmVyOjptYXAoVUlOVCByZXF1aXJlZFNw
YWNlLCBVSU5UICpvZmZzZXQpCit7CisgICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKKworICAgIGlm
IChtSW5kZXhCdWZmZXIpCisgICAgeworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1JbmRleEJ1
ZmZlci0+TG9jayhtV3JpdGVQb3NpdGlvbiwgcmVxdWlyZWRTcGFjZSwgJm1hcFB0ciwgRDNETE9D
S19OT09WRVJXUklURSk7CisgICAgIAorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiIExvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4Iiwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAg
Km9mZnNldCA9IG1Xcml0ZVBvc2l0aW9uOworICAgICAgICBtV3JpdGVQb3NpdGlvbiArPSByZXF1
aXJlZFNwYWNlOworICAgIH0KKworICAgIHJldHVybiBtYXBQdHI7Cit9CisKK3ZvaWQgU3RyZWFt
aW5nSW5kZXhCdWZmZXI6OnJlc2VydmVTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2UsIEdMZW51bSB0
eXBlKQoreworICAgIGlmIChyZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpCisgICAgeworICAg
ICAgICBpZiAobUluZGV4QnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBtSW5kZXhCdWZm
ZXItPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7CisgICAgICAg
IH0KKworICAgICAgICBtQnVmZmVyU2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3BhY2UsIDIgKiBt
QnVmZmVyU2l6ZSk7CisKKyAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRC
dWZmZXJQb29sKEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpOworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUluZGV4QnVmZmVyKG1CdWZmZXJTaXpl
LCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZLCB0eXBlID09IEdMX1VOU0lH
TkVEX0lOVCA/IEQzREZNVF9JTkRFWDMyIDogRDNERk1UX0lOREVYMTYsIHBvb2wsICZtSW5kZXhC
dWZmZXIsIE5VTEwpOworICAgICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKKyAgICAKKyAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIk91
dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgbUJ1
ZmZlclNpemUpOworICAgICAgICB9CisKKyAgICAgICAgbVdyaXRlUG9zaXRpb24gPSAwOworICAg
IH0KKyAgICBlbHNlIGlmIChtV3JpdGVQb3NpdGlvbiArIHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVy
U2l6ZSkgICAvLyBSZWN5Y2xlCisgICAgeworICAgICAgICB2b2lkICpkdW1teTsKKyAgICAgICAg
bUluZGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKKyAgICAg
ICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKKworICAgICAgICBtV3JpdGVQb3NpdGlvbiA9IDA7
CisgICAgfQorfQorCitTdGF0aWNJbmRleEJ1ZmZlcjo6U3RhdGljSW5kZXhCdWZmZXIoSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlKSA6IEluZGV4QnVmZmVyKGRldmljZSwgMCwgRDNERk1UX1VOS05P
V04pCit7CisgICAgbUNhY2hlVHlwZSA9IEdMX05PTkU7Cit9CisKK1N0YXRpY0luZGV4QnVmZmVy
Ojp+U3RhdGljSW5kZXhCdWZmZXIoKQoreworfQorCit2b2lkICpTdGF0aWNJbmRleEJ1ZmZlcjo6
bWFwKFVJTlQgcmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KQoreworICAgIHZvaWQgKm1hcFB0
ciA9IE5VTEw7CisKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtSW5kZXhCdWZmZXItPkxvY2soMCwgcmVxdWlyZWRTcGFjZSwgJm1hcFB0ciwg
MCk7CisgICAgIAorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiIExvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgKm9mZnNldCA9IDA7
CisgICAgfQorCisgICAgcmV0dXJuIG1hcFB0cjsKK30KKwordm9pZCBTdGF0aWNJbmRleEJ1ZmZl
cjo6cmVzZXJ2ZVNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpCit7CisgICAg
aWYgKCFtSW5kZXhCdWZmZXIgJiYgbUJ1ZmZlclNpemUgPT0gMCkKKyAgICB7CisgICAgICAgIEQz
RFBPT0wgcG9vbCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9XUklURU9O
TFkpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUluZGV4QnVmZmVy
KHJlcXVpcmVkU3BhY2UsIEQzRFVTQUdFX1dSSVRFT05MWSwgdHlwZSA9PSBHTF9VTlNJR05FRF9J
TlQgPyBEM0RGTVRfSU5ERVgzMiA6IEQzREZNVF9JTkRFWDE2LCBwb29sLCAmbUluZGV4QnVmZmVy
LCBOVUxMKTsKKyAgICAgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7CisgICAgCisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJPdXQgb2Yg
bWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIG1CdWZmZXJT
aXplKTsKKyAgICAgICAgfQorCisgICAgICAgIG1CdWZmZXJTaXplID0gcmVxdWlyZWRTcGFjZTsK
KyAgICAgICAgbUNhY2hlVHlwZSA9IHR5cGU7CisgICAgfQorICAgIGVsc2UgaWYgKG1JbmRleEJ1
ZmZlciAmJiBtQnVmZmVyU2l6ZSA+PSByZXF1aXJlZFNwYWNlICYmIG1DYWNoZVR5cGUgPT0gdHlw
ZSkKKyAgICB7CisgICAgICAgIC8vIEFscmVhZHkgYWxsb2NhdGVkCisgICAgfQorICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsgICAvLyBTdGF0aWMgaW5kZXggYnVmZmVycyBjYW4ndCBiZSByZXNpemVk
Cit9CisKK2Jvb2wgU3RhdGljSW5kZXhCdWZmZXI6Omxvb2t1cFR5cGUoR0xlbnVtIHR5cGUpCit7
CisgICAgcmV0dXJuIG1DYWNoZVR5cGUgPT0gdHlwZTsKK30KKworVUlOVCBTdGF0aWNJbmRleEJ1
ZmZlcjo6bG9va3VwUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5UICpt
aW5JbmRleCwgVUlOVCAqbWF4SW5kZXgpCit7CisgICAgSW5kZXhSYW5nZSByYW5nZSA9IHtvZmZz
ZXQsIGNvdW50fTsKKworICAgIHN0ZDo6bWFwPEluZGV4UmFuZ2UsIEluZGV4UmVzdWx0Pjo6aXRl
cmF0b3IgcmVzID0gbUNhY2hlLmZpbmQocmFuZ2UpOworICAgIAorICAgIGlmIChyZXMgPT0gbUNh
Y2hlLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgICptaW5J
bmRleCA9IHJlcy0+c2Vjb25kLm1pbkluZGV4OworICAgICptYXhJbmRleCA9IHJlcy0+c2Vjb25k
Lm1heEluZGV4OworICAgIHJldHVybiByZXMtPnNlY29uZC5zdHJlYW1PZmZzZXQ7Cit9CisKK3Zv
aWQgU3RhdGljSW5kZXhCdWZmZXI6OmFkZFJhbmdlKGludHB0cl90IG9mZnNldCwgR0xzaXplaSBj
b3VudCwgVUlOVCBtaW5JbmRleCwgVUlOVCBtYXhJbmRleCwgVUlOVCBzdHJlYW1PZmZzZXQpCit7
CisgICAgSW5kZXhSYW5nZSBpbmRleFJhbmdlID0ge29mZnNldCwgY291bnR9OworICAgIEluZGV4
UmVzdWx0IGluZGV4UmVzdWx0ID0ge21pbkluZGV4LCBtYXhJbmRleCwgc3RyZWFtT2Zmc2V0fTsK
KyAgICBtQ2FjaGVbaW5kZXhSYW5nZV0gPSBpbmRleFJlc3VsdDsKK30KKworfQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERh
dGFNYW5hZ2VyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsx
ICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdl
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9JbmRleERhdGFNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIEluZGV4RGF0YU1hbmFnZXIuaDogRGVmaW5lcyB0aGUgSW5k
ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0CisvLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRp
b24gcHJvY2VzcyBmb3IgaW5kZXggYnVmZmVycy4KKworI2lmbmRlZiBMSUJHTEVTVjJfSU5ERVhE
QVRBTUFOQUdFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfSU5ERVhEQVRBTUFOQUdFUl9IXworCisj
aW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FM
TAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQu
aCIKKworbmFtZXNwYWNlCit7CisgICAgZW51bSB7IElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUg
PSA0MDk2ICogc2l6ZW9mKEdMdWludCkgfTsKK30KKworbmFtZXNwYWNlIGdsCit7CisKK3N0cnVj
dCBUcmFuc2xhdGVkSW5kZXhEYXRhCit7CisgICAgVUlOVCBtaW5JbmRleDsKKyAgICBVSU5UIG1h
eEluZGV4OworICAgIFVJTlQgc3RhcnRJbmRleDsKKworICAgIElEaXJlY3QzREluZGV4QnVmZmVy
OSAqaW5kZXhCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IHNlcmlhbDsKK307CisKK2NsYXNzIElu
ZGV4QnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UsIFVJTlQgc2l6ZSwgRDNERk9STUFUIGZvcm1hdCk7CisgICAgdmlydHVhbCB+SW5k
ZXhCdWZmZXIoKTsKKworICAgIFVJTlQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXpl
OyB9CisgICAgdmlydHVhbCB2b2lkICptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZz
ZXQpID0gMDsKKyAgICB2b2lkIHVubWFwKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc2VydmVTcGFj
ZShVSU5UIHJlcXVpcmVkU3BhY2UsIEdMZW51bSB0eXBlKSA9IDA7CisKKyAgICBJRGlyZWN0M0RJ
bmRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBnZXRTZXJp
YWwoKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAgSURpcmVjdDNERGV2aWNlOSAqY29uc3Qg
bURldmljZTsKKworICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqbUluZGV4QnVmZmVyOworICAg
IFVJTlQgbUJ1ZmZlclNpemU7CisKKyAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKKyAgICBzdGF0
aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGludCBt
Q3VycmVudFNlcmlhbDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihJbmRleEJ1ZmZlcik7Cit9OworCitjbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlciA6IHB1Ymxp
YyBJbmRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIGluaXRpYWxTaXplLCBEM0RGT1JNQVQgZm9ybWF0
KTsKKyAgICB+U3RyZWFtaW5nSW5kZXhCdWZmZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFw
KFVJTlQgcmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXJ2ZVNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpOworCisgIHByaXZhdGU6
CisgICAgVUlOVCBtV3JpdGVQb3NpdGlvbjsKK307CisKK2NsYXNzIFN0YXRpY0luZGV4QnVmZmVy
IDogcHVibGljIEluZGV4QnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBTdGF0aWNJ
bmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOworICAgIH5TdGF0aWNJbmRleEJ1
ZmZlcigpOworCisgICAgdmlydHVhbCB2b2lkICptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5U
ICpvZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNw
YWNlLCBHTGVudW0gdHlwZSk7CisKKyAgICBib29sIGxvb2t1cFR5cGUoR0xlbnVtIHR5cGUpOwor
ICAgIFVJTlQgbG9va3VwUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5U
ICptaW5JbmRleCwgVUlOVCAqbWF4SW5kZXgpOyAgIC8vIFJldHVybnMgdGhlIG9mZnNldCBpbnRv
IHRoZSBpbmRleCBidWZmZXIsIG9yIC0xIGlmIG5vdCBmb3VuZAorICAgIHZvaWQgYWRkUmFuZ2Uo
aW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5UIG1pbkluZGV4LCBVSU5UIG1heElu
ZGV4LCBVSU5UIHN0cmVhbU9mZnNldCk7CisKKyAgcHJpdmF0ZToKKyAgICBHTGVudW0gbUNhY2hl
VHlwZTsKKyAgICAKKyAgICBzdHJ1Y3QgSW5kZXhSYW5nZQorICAgIHsKKyAgICAgICAgaW50cHRy
X3Qgb2Zmc2V0OworICAgICAgICBHTHNpemVpIGNvdW50OworCisgICAgICAgIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IEluZGV4UmFuZ2UmIHJocykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG9mZnNldCAhPSByaHMub2Zmc2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBvZmZzZXQgPCByaHMub2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGNvdW50ICE9IHJocy5jb3VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY291bnQgPCByaHMuY291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3RydWN0IEluZGV4UmVzdWx0Cisg
ICAgeworICAgICAgICBVSU5UIG1pbkluZGV4OworICAgICAgICBVSU5UIG1heEluZGV4OworICAg
ICAgICBVSU5UIHN0cmVhbU9mZnNldDsKKyAgICB9OworCisgICAgc3RkOjptYXA8SW5kZXhSYW5n
ZSwgSW5kZXhSZXN1bHQ+IG1DYWNoZTsKK307CisKK2NsYXNzIEluZGV4RGF0YU1hbmFnZXIKK3sK
KyAgcHVibGljOgorICAgIEluZGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVj
dDNERGV2aWNlOSAqZXZpY2UpOworICAgIHZpcnR1YWwgfkluZGV4RGF0YU1hbmFnZXIoKTsKKwor
ICAgIEdMZW51bSBwcmVwYXJlSW5kZXhEYXRhKEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50LCBC
dWZmZXIgKmFycmF5RWxlbWVudEJ1ZmZlciwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBUcmFuc2xh
dGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKTsKKyAgICBTdGF0aWNJbmRleEJ1ZmZlciAqZ2V0Q291
bnRpbmdJbmRpY2VzKEdMc2l6ZWkgY291bnQpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKEluZGV4RGF0YU1hbmFnZXIpOworCisgICAgc3RkOjpzaXplX3QgdHlw
ZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0OworICAgIHN0ZDo6c2l6ZV90IGluZGV4U2l6ZShEM0RG
T1JNQVQgZm9ybWF0KSBjb25zdDsKKworICAgIElEaXJlY3QzRERldmljZTkgKmNvbnN0IG1EZXZp
Y2U7CisKKyAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqbVN0cmVhbWluZ0J1ZmZlclNob3J0Owor
ICAgIFN0cmVhbWluZ0luZGV4QnVmZmVyICptU3RyZWFtaW5nQnVmZmVySW50OworICAgIFN0YXRp
Y0luZGV4QnVmZmVyICptQ291bnRpbmdCdWZmZXI7Cit9OworCit9CisKKyNlbmRpZiAgIC8vIExJ
QkdMRVNWMl9JTkRFWERBVEFNQU5BR0VSX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uY3BwOiBJbXBsZW1l
bnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMK
Ky8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDIuMTAuMyBwYWdlIDI4LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9T
aGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlIDxz
dHJpbmc+CisKK25hbWVzcGFjZSBnbAoreworY29uc3QgY2hhciAqIGNvbnN0IGdfZmFrZXBhdGgg
PSAiQzpcXGZha2VwYXRoIjsKKworQXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJpbmRpbmdz
KCkKK3sKK30KKworQXR0cmlidXRlQmluZGluZ3M6On5BdHRyaWJ1dGVCaW5kaW5ncygpCit7Cit9
CisKK0luZm9Mb2c6OkluZm9Mb2coKSA6IG1JbmZvTG9nKE5VTEwpCit7Cit9CisKK0luZm9Mb2c6
On5JbmZvTG9nKCkKK3sKKyAgICBkZWxldGVbXSBtSW5mb0xvZzsKK30KKworCitpbnQgSW5mb0xv
Zzo6Z2V0TGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1JbmZvTG9nKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgcmV0dXJuIHN0cmxl
bihtSW5mb0xvZykgKyAxOworICAgIH0KK30KKwordm9pZCBJbmZvTG9nOjpnZXRMb2coR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCit7CisgICAgaW50IGlu
ZGV4ID0gMDsKKworICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7CisgICAgICAgIGlmIChtSW5m
b0xvZykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0g
MSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBt
SW5mb0xvZywgaW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAn
XDAnOworICAgIH0KKworICAgIGlmIChsZW5ndGgpCisgICAgeworICAgICAgICAqbGVuZ3RoID0g
aW5kZXg7CisgICAgfQorfQorCisvLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBw
cm9ncmFtIGluZm8gbG9nLgorLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2UgZmls
ZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCisvLyBtZXNzYWdlcywgc28g
bGV0cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0
aGUgbG9nLgordm9pZCBJbmZvTG9nOjphcHBlbmRTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2Fn
ZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CisKKyAgICBzaXplX3QgZm91bmQ7
CisgICAgZG8KKyAgICB7CisgICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZ19mYWtlcGF0aCk7Cisg
ICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgeworICAgICAg
ICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZ19mYWtlcGF0aCkpOworICAgICAgICB9Cisg
ICAgfQorICAgIHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisKKyAgICBhcHBl
bmQoIiVzXG4iLCBtc2cuY19zdHIoKSk7Cit9CisKK3ZvaWQgSW5mb0xvZzo6YXBwZW5kKGNvbnN0
IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIGlmICghZm9ybWF0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNoYXIgaW5mb1sxMDI0XTsKKworICAgIHZhX2xpc3QgdmFy
YXJnOworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyAgICB2c25wcmludGYoaW5mbywg
c2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgdmFfZW5kKHZhcmFyZyk7CisKKyAg
ICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKKworICAgIGlmICghbUluZm9Mb2cp
CisgICAgeworICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAxXTsKKyAg
ICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7CisgICAgICAgIGNoYXIg
Km5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAxXTsKKyAgICAgICAg
c3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOworICAgICAgICBzdHJjcHkobmV3TG9nICsgbG9nTGVu
Z3RoLCBpbmZvKTsKKworICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKKyAgICAgICAgbUluZm9M
b2cgPSBuZXdMb2c7CisgICAgfQorfQorCit2b2lkIEluZm9Mb2c6OnJlc2V0KCkKK3sKKyAgICBp
ZiAobUluZm9Mb2cpCisgICAgeworICAgICAgICBkZWxldGUgW10gbUluZm9Mb2c7CisgICAgICAg
IG1JbmZvTG9nID0gTlVMTDsKKyAgICB9Cit9CisKK1Byb2dyYW06OlByb2dyYW0oUmVzb3VyY2VN
YW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJjZU1hbmFnZXIobWFuYWdl
ciksIG1IYW5kbGUoaGFuZGxlKQoreworICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAg
bVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbVByb2dyYW1CaW5hcnkuc2V0KE5VTEwpOworICAg
IG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtTGlua2VkID0gZmFsc2U7CisgICAgbVJlZkNv
dW50ID0gMDsKK30KKworUHJvZ3JhbTo6flByb2dyYW0oKQoreworICAgIHVubGluayh0cnVlKTsK
KworICAgIGlmIChtVmVydGV4U2hhZGVyICE9IE5VTEwpCisgICAgeworICAgICAgICBtVmVydGV4
U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBO
VUxMKQorICAgIHsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgfQor
fQorCitib29sIFByb2dyYW06OmF0dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBp
ZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAg
IGlmIChtVmVydGV4U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICBtVmVydGV4U2hhZGVyID0gKFZlcnRleFNoYWRlciopc2hh
ZGVyOworICAgICAgICBtVmVydGV4U2hhZGVyLT5hZGRSZWYoKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAg
ICAgaWYgKG1GcmFnbWVudFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hh
ZGVyKilzaGFkZXI7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+YWRkUmVmKCk7CisgICAgfQor
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW06OmRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBpZiAoc2hhZGVyLT5n
ZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4
U2hhZGVyICE9IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICBt
VmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBl
KCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgaWYgKG1GcmFnbWVudFNo
YWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICBt
RnJhZ21lbnRTaGFkZXIgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0Nv
dW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAobUZy
YWdtZW50U2hhZGVyID8gMSA6IDApOworfQorCit2b2lkIEF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5k
QXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAg
IGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2ldLmVyYXNlKG5hbWUpOworICAgICAgICB9CisKKyAgICAg
ICAgbUF0dHJpYnV0ZUJpbmRpbmdbaW5kZXhdLmluc2VydChuYW1lKTsKKyAgICB9Cit9CisKK3Zv
aWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hh
ciAqbmFtZSkKK3sKKyAgICBtQXR0cmlidXRlQmluZGluZ3MuYmluZEF0dHJpYnV0ZUxvY2F0aW9u
KGluZGV4LCBuYW1lKTsKK30KKworLy8gTGlua3MgdGhlIEhMU0wgY29kZSBvZiB0aGUgdmVydGV4
IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFyeWluZ3MsCisvLyBjb21w
aWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUgYXR0cmlidXRlIG1hcHBp
bmdzLCBhbmQgY29sbGVjdGluZworLy8gYSBsaXN0IG9mIHVuaWZvcm1zCitib29sIFByb2dyYW06
OmxpbmsoKQoreworICAgIHVubGluayhmYWxzZSk7CisKKyAgICBtSW5mb0xvZy5yZXNldCgpOwor
CisgICAgbVByb2dyYW1CaW5hcnkuc2V0KG5ldyBQcm9ncmFtQmluYXJ5KCkpOworICAgIG1MaW5r
ZWQgPSBtUHJvZ3JhbUJpbmFyeS0+bGluayhtSW5mb0xvZywgbUF0dHJpYnV0ZUJpbmRpbmdzLCBt
RnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhTaGFkZXIpOworCisgICAgcmV0dXJuIG1MaW5rZWQ7Cit9
CisKK2ludCBBdHRyaWJ1dGVCaW5kaW5nczo6Z2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSkgY29uc3QKK3sKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0
aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYg
KG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5k
aW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxvY2F0
aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisvLyBSZXR1cm5z
IHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtp
bmcsIG9yIGF0IGRlc3RydWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kp
Cit7CisgICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKKyAgICB7
CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1G
cmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0g
TlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQorICAgICAgICB7
CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtVmVy
dGV4U2hhZGVyID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Qcm9ncmFtQmluYXJ5
LnNldChOVUxMKTsKKyAgICBtTGlua2VkID0gZmFsc2U7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6aXNM
aW5rZWQoKQoreworICAgIHJldHVybiBtTGlua2VkOworfQorCitQcm9ncmFtQmluYXJ5KiBQcm9n
cmFtOjpnZXRQcm9ncmFtQmluYXJ5KCkKK3sKKyAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkuZ2V0
KCk7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0UHJvZ3JhbUJpbmFyeShjb25zdCB2b2lkICpiaW5h
cnksIEdMc2l6ZWkgbGVuZ3RoKQoreworICAgIHVubGluayhmYWxzZSk7CisKKyAgICBtSW5mb0xv
Zy5yZXNldCgpOworCisgICAgbVByb2dyYW1CaW5hcnkuc2V0KG5ldyBQcm9ncmFtQmluYXJ5KCkp
OworICAgIG1MaW5rZWQgPSBtUHJvZ3JhbUJpbmFyeS0+bG9hZChtSW5mb0xvZywgYmluYXJ5LCBs
ZW5ndGgpOworICAgIGlmICghbUxpbmtlZCkKKyAgICB7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5
LnNldChOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gbUxpbmtlZDsKK30KKwordm9pZCBQcm9n
cmFtOjpyZWxlYXNlKCkKK3sKKyAgICBtUmVmQ291bnQtLTsKKworICAgIGlmIChtUmVmQ291bnQg
PT0gMCAmJiBtRGVsZXRlU3RhdHVzKQorICAgIHsKKyAgICAgICAgbVJlc291cmNlTWFuYWdlci0+
ZGVsZXRlUHJvZ3JhbShtSGFuZGxlKTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6YWRkUmVm
KCkKK3sKKyAgICBtUmVmQ291bnQrKzsKK30KKwordW5zaWduZWQgaW50IFByb2dyYW06OmdldFJl
ZkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlZkNvdW50OworfQorCitHTGludCBQcm9n
cmFtOjpnZXRQcm9ncmFtQmluYXJ5TGVuZ3RoKCkgY29uc3QKK3sKKyAgICBQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gbVByb2dyYW1CaW5hcnkuZ2V0KCk7CisgICAgaWYgKHByb2dyYW1C
aW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0TGVuZ3RoKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
aW50IFByb2dyYW06OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtSW5m
b0xvZy5nZXRMZW5ndGgoKTsKK30KKwordm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQoreworICAgIHJldHVybiBt
SW5mb0xvZy5nZXRMb2coYnVmU2l6ZSwgbGVuZ3RoLCBpbmZvTG9nKTsKK30KKwordm9pZCBQcm9n
cmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQs
IEdMdWludCAqc2hhZGVycykKK3sKKyAgICBpbnQgdG90YWwgPSAwOworCisgICAgaWYgKG1WZXJ0
ZXhTaGFkZXIpCisgICAgeworICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKKyAgICAgICAg
eworICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtVmVydGV4U2hhZGVyLT5nZXRIYW5kbGUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRvdGFsKys7CisgICAgfQorCisgICAgaWYgKG1GcmFn
bWVudFNoYWRlcikKKyAgICB7CisgICAgICAgIGlmICh0b3RhbCA8IG1heENvdW50KQorICAgICAg
ICB7CisgICAgICAgICAgICBzaGFkZXJzW3RvdGFsXSA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SGFu
ZGxlKCk7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbCsrOworICAgIH0KKworICAgIGlmIChj
b3VudCkKKyAgICB7CisgICAgICAgICpjb3VudCA9IHRvdGFsOworICAgIH0KK30KKwordm9pZCBQ
cm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1l
KQoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5
KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAgICBwcm9ncmFtQmluYXJ5
LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwg
bmFtZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGgg
PSAwOworICAgICAgICB9CisKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOworICAgICAgICAqc2l6
ZSA9IDE7CisgICAgfQorfQorCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3Vu
dCgpCit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9n
cmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMaW50IFByb2dyYW06OmdldEFj
dGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7
CisgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5n
dGgoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
fQorCit2b2lkIFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVp
IGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xj
aGFyICpuYW1lKQoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9n
cmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1
cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3Ro
LCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYg
KGJ1ZnNpemUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICps
ZW5ndGggPSAwOworICAgICAgICB9CisKKyAgICAgICAgKnNpemUgPSAwOworICAgICAgICAqdHlw
ZSA9IEdMX05PTkU7CisgICAgfQorfQorCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3Jt
Q291bnQoKQoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFt
QmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4g
cHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0
QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7
CisgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3Ro
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
Kwordm9pZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQoreworICAgIG1EZWxldGVTdGF0dXMg
PSB0cnVlOworfQorCitib29sIFByb2dyYW06OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbURlbGV0ZVN0YXR1czsKK30KKwordm9pZCBQcm9ncmFtOjp2YWxpZGF0
ZSgpCit7CisgICAgbUluZm9Mb2cucmVzZXQoKTsKKworICAgIFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKGlzTGlua2VkKCkgJiYgcHJv
Z3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnZhbGlkYXRlKG1JbmZv
TG9nKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUluZm9Mb2cuYXBwZW5kKCJQ
cm9ncmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2VkLiIpOworICAgIH0KK30KKwor
Ym9vbCBQcm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IG1Qcm9ncmFtQmluYXJ5LmdldCgpOworICAgIGlmIChwcm9ncmFtQmlu
YXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmlzVmFsaWRhdGVkKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBQcm9ncmFtLmg6IERlZmluZXMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdM
IHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCisKKyNpZm5kZWYgTElCR0xFU1YyX1BS
T0dSQU1fSF8KKyNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fSF8KKworI2luY2x1ZGUgPHN0cmlu
Zz4KKyNpbmNsdWRlIDxzZXQ+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBSZXNv
dXJjZU1hbmFnZXI7CitjbGFzcyBGcmFnbWVudFNoYWRlcjsKK2NsYXNzIFZlcnRleFNoYWRlcjsK
KworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBnX2Zha2VwYXRoOworCitjbGFzcyBBdHRyaWJ1
dGVCaW5kaW5ncworeworICBwdWJsaWM6CisgICAgQXR0cmlidXRlQmluZGluZ3MoKTsKKyAgICB+
QXR0cmlidXRlQmluZGluZ3MoKTsKKworICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdM
dWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldEF0dHJpYnV0ZUJpbmRp
bmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgc3Rk
OjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhfQVRUUklCU107
Cit9OworCitjbGFzcyBJbmZvTG9nCit7CisgIHB1YmxpYzoKKyAgICBJbmZvTG9nKCk7CisgICAg
fkluZm9Mb2coKTsKKworICAgIGludCBnZXRMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldExv
ZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CisKKyAg
ICB2b2lkIGFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKTsKKyAgICB2b2lkIGFw
cGVuZChjb25zdCBjaGFyICppbmZvLCAuLi4pOworICAgIHZvaWQgcmVzZXQoKTsKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5mb0xvZyk7CisgICAgY2hhciAqbUlu
Zm9Mb2c7Cit9OworCitjbGFzcyBQcm9ncmFtCit7CisgIHB1YmxpYzoKKyAgICBQcm9ncmFtKFJl
c291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7CisKKyAgICB+UHJvZ3JhbSgp
OworCisgICAgYm9vbCBhdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpOworICAgIGJvb2wgZGV0
YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKKyAgICBpbnQgZ2V0QXR0YWNoZWRTaGFkZXJzQ291
bnQoKSBjb25zdDsKKworICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRl
eCwgY29uc3QgY2hhciAqbmFtZSk7CisKKyAgICBib29sIGxpbmsoKTsKKyAgICBib29sIGlzTGlu
a2VkKCk7CisgICAgYm9vbCBzZXRQcm9ncmFtQmluYXJ5KGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xz
aXplaSBsZW5ndGgpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnkoKTsKKwor
ICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmZvTG9nKEdM
c2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAgICB2b2lk
IGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1
aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRl
eCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0g
KnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQo
KTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKworICAgIHZvaWQg
Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAgIEdM
aW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1N
YXhMZW5ndGgoKTsKKworICAgIHZvaWQgYWRkUmVmKCk7CisgICAgdm9pZCByZWxlYXNlKCk7Cisg
ICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CisgICAgdm9pZCBmbGFnRm9yRGVs
ZXRpb24oKTsKKyAgICBib29sIGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CisKKyAgICB2
b2lkIHZhbGlkYXRlKCk7CisgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OworCisgICAgR0xp
bnQgZ2V0UHJvZ3JhbUJpbmFyeUxlbmd0aCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOworCisgICAgdm9pZCB1bmxpbmsoYm9vbCBk
ZXN0cm95ID0gZmFsc2UpOworCisgICAgRnJhZ21lbnRTaGFkZXIgKm1GcmFnbWVudFNoYWRlcjsK
KyAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7CisKKyAgICBBdHRyaWJ1dGVCaW5kaW5n
cyBtQXR0cmlidXRlQmluZGluZ3M7CisKKyAgICBCaW5kaW5nUG9pbnRlcjxQcm9ncmFtQmluYXJ5
PiBtUHJvZ3JhbUJpbmFyeTsKKyAgICBib29sIG1MaW5rZWQ7CisgICAgYm9vbCBtRGVsZXRlU3Rh
dHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgZGVsZXRl
ZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKKworICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7CisK
KyAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7CisgICAgY29uc3QgR0x1aW50
IG1IYW5kbGU7CisKKyAgICBJbmZvTG9nIG1JbmZvTG9nOworfTsKK30KKworI2VuZGlmICAgLy8g
TElCR0xFU1YyX1BST0dSQU1fSF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
eGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmlu
YXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1Byb2dyYW1CaW5hcnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI4MTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uY3BwOiBJbXBs
ZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVj
dHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDIuMTAuMyBwYWdlIDI4LgorCisjaW5jbHVkZSAibGliR0xFU3YyL0JpbmFyeVN0cmVhbS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNv
bW1vbi92ZXJzaW9uLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisK
KyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTCkKKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNE
Q09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCisjZW5kaWYKKworbmFtZXNwYWNlIGdsCit7Citz
dGQ6OnN0cmluZyBzdHIoaW50IGkpCit7CisgICAgY2hhciBidWZmZXJbMjBdOworICAgIHNucHJp
bnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOworICAgIHJldHVybiBidWZmZXI7
Cit9CisKK1VuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZf
bmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKKyAgICA6IHR5cGUodHlwZSksIF9uYW1lKF9u
YW1lKSwgbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBhcnJh
eVNpemUoYXJyYXlTaXplKQoreworICAgIGludCBieXRlcyA9IFVuaWZvcm1JbnRlcm5hbFNpemUo
dHlwZSkgKiBhcnJheVNpemU7CisgICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsK
KyAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgIGRpcnR5ID0gdHJ1ZTsKK30KKworVW5p
Zm9ybTo6flVuaWZvcm0oKQoreworICAgIGRlbGV0ZVtdIGRhdGE7Cit9CisKK2Jvb2wgVW5pZm9y
bTo6aXNBcnJheSgpCit7CisgICAgc2l6ZV90IGRvdCA9IF9uYW1lLmZpbmRfbGFzdF9vZignLicp
OworICAgIGlmIChkb3QgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIGRvdCA9IC0xOworCisgICAgcmV0
dXJuIF9uYW1lLmNvbXBhcmUoZG90ICsgMSwgZG90ICsgNCwgImFyXyIpID09IDA7Cit9CisKK1Vu
aWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwg
dW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCkgCisgICAgOiBuYW1lKFBy
b2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGVsZW1lbnQoZWxlbWVudCks
IGluZGV4KGluZGV4KQoreworfQorCit1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6bUN1cnJl
bnRTZXJpYWwgPSAxOworCitQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KCkgOiBSZWZDb3Vu
dE9iamVjdCgwKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQoreworICAgIG1EZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKKyAgICBtQ29uc3Rh
bnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKworICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisgICAg
eworICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9CisKKyAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4Kysp
CisgICAgeworICAgICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAg
fQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUU19WVEY7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNWU1tpbmRl
eF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2Ug
PSAwOworICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworCisgICAgbUR4RGVwdGhSYW5n
ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOworICAgIG1EeENvb3Jk
TG9jYXRpb24gPSAtMTsKKyAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSAtMTsKKyAgICBt
RHhGcm9udENDV0xvY2F0aW9uID0gLTE7CisgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0g
LTE7Cit9CisKK1Byb2dyYW1CaW5hcnk6On5Qcm9ncmFtQmluYXJ5KCkKK3sKKyAgICBpZiAobVBp
eGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2Uo
KTsKKyAgICB9CisKKyAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBt
VmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGRlbGV0ZSBtQ29uc3Rh
bnRUYWJsZVBTOworICAgIGRlbGV0ZSBtQ29uc3RhbnRUYWJsZVZTOworCisgICAgd2hpbGUgKCFt
VW5pZm9ybXMuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygp
OworICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2VyaWFs
OworfQorCit1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6aXNzdWVTZXJpYWwoKQoreworICAg
IHJldHVybiBtQ3VycmVudFNlcmlhbCsrOworfQorCitJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlBy
b2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVBpeGVsRXhlY3V0
YWJsZTsKK30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVy
dGV4U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK0dMdWlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKQor
eworICAgIGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7CisgICAgQVNTRVJU
KGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlMpOworICAgIAorICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07Cit9
CisKKy8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVz
ZWQuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9Q
SVhFTDoKKyAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7CisgICAgICBjYXNl
IFNBTVBMRVJfVkVSVEVYOgorICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7
CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6dXNlc1BvaW50U2l6ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1Vc2VzUG9pbnRTaXplOworfQorCisvLyBSZXR1cm5zIHRoZSBpbmRl
eCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBjb3JyZXNwb25kaW5nIHRvIGEgRGly
ZWN0M0QgOSBzYW1wbGVyCisvLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQg
MC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRTYW1w
bGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQor
eworICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOworCisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBs
ZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisK
KyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7
CisgICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXpl
b2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOworCisgICAgICAgIGlmICht
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIGlmIChsb2dpY2FsVGV4dHVyZVVuaXQgPj0gMCAmJiBs
b2dpY2FsVGV4dHVyZVVuaXQgPCAoR0xpbnQpZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0
dXJlVW5pdDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKKy8vIFJldHVybnMgdGhlIHRl
eHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIgdHlwZSBhbmQKKy8vIGlu
ZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hh
ZGVyKS4KK1RleHR1cmVUeXBlIFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJUZXh0dXJlVHlwZShT
YW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQoreworICAgIHN3aXRj
aCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIEFTU0VS
VChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1sw
XSkpOworICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwor
ICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKKyAg
ICAgIGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBz
aXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOworICAgICAgICBBU1NF
UlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICByZXR1cm4gbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIFRFWFRVUkVfMkQ7Cit9CisKK0dMaW50IFBy
b2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKQoreworICAg
IHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworCisgICAgLy8gU3RyaXAgYW55IHRyYWlsaW5n
IGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0CisgICAgc2l6ZV90IG9w
ZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOworICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmlu
ZF9sYXN0X29mKCddJyk7CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xv
c2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCisgICAgeworICAgICAgICBzdWJzY3JpcHQgPSBhdG9p
KG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKKyAgICAgICAgbmFtZS5lcmFzZShvcGVu
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwg
bnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCisgICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGxvY2F0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0
YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKKyAgICAgICAgICAg
IHRhcmdldFsyXSA9IDA7CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAg
dGFyZ2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09
IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdM
ZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwor
ICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7
CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Cisg
ICAgICAgICAgICB2ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOworCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09
IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
KyAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07CisgICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0
OworICAgICAgICAgICAgdiArPSAzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7CisKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojpz
ZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9m
KEdMZmxvYXQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQg
KiA0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRXaWR0
aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgordm9pZCB0
cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBp
bnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY1dpZHRoKTsKKyAgICBpbnQg
Y29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjSGVpZ2h0KTsKKworICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCisgICAgeworICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Cisg
ICAgICAgIH0KKyAgICB9CisgICAgLy8gY2xlYXIgdW5maWxsZWQgcmlnaHQgc2lkZQorICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgZm9yIChp
bnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgfQorICAg
IH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCisgICAgZm9yIChpbnQgeSA9IHNyY0hl
aWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRb
eSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorfQorCitib29s
IFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9B
VF9NQVQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDg7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsK
KyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7
CisgICAgICAgIHRhcmdldCArPSA4OworICAgICAgICB2YWx1ZSArPSA0OworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgz
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQor
eworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4
LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0
LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gMTI7CisgICAgICAg
IHZhbHVlICs9IDk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFU
NCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xm
bG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+
KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gMTY7CisgICAgICAgIHZhbHVlICs9
IDE2OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfU0FNUExFUl9DVUJFKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCks
CisgICAgICAgICAgICAgICB2LCBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBl
bHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFM
U0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xpbnQpICogMiwKKyAgICAgICAgICAgICAgIHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291
bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAyOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDMsCisgICAgICAgICAg
ICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltp
XSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Cit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNw
eSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IHNpemVvZihHTGludCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGludCkg
KiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVk
IHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisg
ICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZv
cm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6
ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwz
LDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTYpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5h
bENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50
VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0g
KGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywg
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBp
bnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAorICAgICAgICAgICAgICAgICAgICAgICBj
b3VudCAqIHNpemVvZihHTGZsb2F0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGZs
b2F0KWludFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAvLyBzaXpl
ZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAor
ICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlm
b3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBpZiAoKmJ1ZlNp
emUgPCByZXF1aXJlZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICB7CisgICAgICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAg
eworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdM
ZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogMTIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0OgorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsNCw0
LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQg
PSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29t
cG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAo
VW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IChHTGludClib29sUGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAq
ZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWZs
b2F0UGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xpbnQpLAor
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCit7CisgICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
bmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCisgICAgeworICAgICAgICBt
VW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7CisgICAgfQorfQorCisvLyBBcHBsaWVzIGFs
bCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3Qz
RCA5IGRldmljZQordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1zKCkKK3sKKyAgICBm
b3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4o
KSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7CisgICAgICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7CisKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRp
cnR5KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOworICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZv
cm0tPmRhdGE7CisgICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlV
bmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIDIsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
T09MX1ZFQzM6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBi
KTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlm
b3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUM0OgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAg
YXBwbHlVbmlmb3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXpl
LCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBw
bHlVbmlmb3JtNGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCitJRDNEMTBCbG9iICpQ
cm9ncmFtQmluYXJ5Ojpjb21waWxlVG9CaW5hcnkoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hh
ciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgRDNEQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50
VGFibGUpCit7CisgICAgaWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBTX09LOworICAgIFVJTlQgZmxhZ3MgPSAwOwor
ICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7CisgICAgaWYgKHBlcmZBY3RpdmUoKSkKKyAgICB7
CisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7CisjaWZkZWYgTkRFQlVHCisgICAg
ICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworI2Vsc2UKKyAg
ICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisg
ICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBz
b3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6
OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxl
KHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUo
KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMOworICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKKyAgICB9
CisKKyAgICAvLyBTb21ldGltZXMgRDNEQ29tcGlsZSB3aWxsIGZhaWwgd2l0aCB0aGUgZGVmYXVs
dCBjb21waWxhdGlvbiBmbGFncyBmb3IgY29tcGxpY2F0ZWQgc2hhZGVycyB3aGVuIGl0IHdvdWxk
IG90aGVyd2lzZSBwYXNzIHdpdGggYWx0ZXJuYXRpdmUgb3B0aW9ucy4KKyAgICAvLyBUcnkgdGhl
IGRlZmF1bHQgZmxhZ3MgZmlyc3QgYW5kIGlmIGNvbXBpbGF0aW9uIGZhaWxzLCB0cnkgc29tZSBh
bHRlcm5hdGl2ZXMuIAorICAgIGNvbnN0IHN0YXRpYyBVSU5UIGV4dHJhRmxhZ3NbXSA9CisgICAg
eworICAgICAgICAwLAorICAgICAgICBEM0RDT01QSUxFX0FWT0lEX0ZMT1dfQ09OVFJPTCwKKyAg
ICAgICAgRDNEQ09NUElMRV9QUkVGRVJfRkxPV19DT05UUk9MCisgICAgfTsKKworICAgIGNvbnN0
IHN0YXRpYyBjaGFyICogY29uc3QgZXh0cmFGbGFnTmFtZXNbXSA9CisgICAgeworICAgICAgICAi
ZGVmYXVsdCIsCisgICAgICAgICJhdm9pZCBmbG93IGNvbnRyb2wiLAorICAgICAgICAicHJlZmVy
IGZsb3cgY29udHJvbCIKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2Yo
ZXh0cmFGbGFncykgLyBzaXplb2YoVUlOVCk7ICsraSkKKyAgICB7CisgICAgICAgIElEM0QxMEJs
b2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgICAgIElEM0QxMEJsb2IgKmJpbmFyeSA9IE5V
TEw7CisgICAgICAgIHJlc3VsdCA9IGdldERpc3BsYXkoKS0+Y29tcGlsZVNoYWRlclNvdXJjZSho
bHNsLCBnX2Zha2VwYXRoLCBwcm9maWxlLCBmbGFncyB8IGV4dHJhRmxhZ3NbaV0sICZiaW5hcnks
ICZlcnJvck1lc3NhZ2UpOworICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2Fn
ZS0+R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0
aXplZChtZXNzYWdlKTsKKyAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAg
ICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOworCisgICAgICAgICAgICBlcnJvck1lc3NhZ2Ut
PlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEQzRENvbnN0YW50VGFibGUgKnRhYmxlID0gbmV3IEQzRENvbnN0YW50VGFibGUoYmluYXJ5LT5H
ZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgICAg
IGlmICh0YWJsZS0+ZXJyb3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWxl
dGUgdGFibGU7CisgICAgICAgICAgICAgICAgYmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpjb25zdGFu
dFRhYmxlID0gdGFibGU7CisgICAgCisgICAgICAgICAgICByZXR1cm4gYmluYXJ5OworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
KElEM0QxMEJsb2IqKSBOVUxMKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIldhcm5pbmc6IEQzRCBzaGFkZXIgY29tcGlsYXRpb24gZmFpbGVkIHdpdGggIik7
CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChleHRyYUZsYWdOYW1lc1tpXSk7CisgICAgICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiIGZsYWdzLiIpOworICAgICAgICAgICAgaWYgKGkgKyAxIDwg
c2l6ZW9mKGV4dHJhRmxhZ05hbWVzKSAvIHNpemVvZihjaGFyKikpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBSZXRyeWluZyB3aXRoICIpOworICAgICAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2kgKyAxXSk7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIi5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGludG8g
Z2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVu
R0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3
IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVy
cywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3Mo
SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIpCit7CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRl
eHQoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhp
bXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZh
cnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAg
aW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsK
KyAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0g
MyB8fCBtID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9
IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFi
bGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPmNvbCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
OyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47
IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2
YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChh
dmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wg
PSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0g
Jip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOworCisg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVt
bl0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNwYWNl
W2NvbHVtbl0gPj0gbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBy
ID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tp
bmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47
CisKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNz
KQorICAgICAgICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sg
dmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVz
ZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lzdGVycyA9IDA7CisKKyAgICBmb3IgKGludCByID0g
MDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgeworICAgICAgICBpZiAocGFja2lu
Z1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVsz
XSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXJzKys7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gcmVnaXN0ZXJzOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtW
YXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0
cmluZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhT
aGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwgdmVy
dGV4SExTTC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCisgICAgZm9yIChW
YXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgZnJhZ1ZhciAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBmcmFn
VmFyKyspCisgICAgeworICAgICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKKyAgICAgICAgZnJhZ1Zh
ci0+Y29sID0gLTE7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdnR4
VmFyID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IHZlcnRleFNo
YWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKKyAgICB7CisgICAgICAgIHZ0eFZhci0+
cmVnID0gLTE7CisgICAgICAgIHZ0eFZhci0+Y29sID0gLTE7CisgICAgfQorCisgICAgLy8gTWFw
IHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQorICAgIGNvbnN0IFZhcnlpbmcgKnBh
Y2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OworICAgIGludCByZWdp
c3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2luZywgZnJhZ21lbnRTaGFkZXIpOwor
CisgICAgaWYgKHJlZ2lzdGVycyA8IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwor
ICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgYm9vbCBzbTMg
PSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOworICAgIGNvbnN0IGludCBtYXhWYXJ5
aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAg
aWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBmcmFnbWVudFNoYWRlci0+bVVz
ZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyBy
ZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZCIpOworCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9
IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKKyAgICB7CisgICAgICAgIGJvb2wgbWF0Y2hl
ZCA9IGZhbHNlOworCisgICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9
IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFkZXIt
Pm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChv
dXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5w
dXQtPnNpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9m
IHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7CisgICAgICAgICAgICAgICAgb3V0cHV0
LT5jb2wgPSBpbnB1dC0+Y29sOworCisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIW1hdGNoZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJG
cmFnbWVudCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlu
cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBtVXNlc1BvaW50U2l6ZSA9IHZlcnRleFNoYWRlci0+bVVzZXNQb2lu
dFNpemU7CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKG1Vc2VzUG9pbnRTaXpl
ICYmIHNtMykgPyAiQ09MT1IiIDogIlRFWENPT1JEIjsKKworICAgIHZlcnRleEhMU0wgKz0gInN0
cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IHNl
bWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJp
YnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZl
cnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4NCAi
OyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1l
KSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKworICAgICAg
ICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAg
ICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIK
KyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgorICAgICAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQ
T1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQor
ICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBh
Y2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworCisgICAgICAgIHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIo
cikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOworICAgIH0KKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50
aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFk
ZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7CisgICAgfQorCisgICAgdmVydGV4
SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0g
dmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hh
ZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICB2ZXJ0
ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAi
ID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4g
MSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAgICAgICAgdmVydGV4SExTTCArPSAidHJh
bnNwb3NlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsg
ZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKKyAgICB9CisKKyAg
ICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtc
biIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBWU19P
VVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0
aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24u
dztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gLShn
bF9Qb3NpdGlvbi55ICsgZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xfUG9zaXRpb24udyk7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlv
bi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBv
dXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworCisgICAgaWYgKHZlcnRl
eFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAgdmVydGV4SExT
TCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBnbF9Qb2ludFNpemU7XG4iOworICAgIH0K
KworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xu
IjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gdmVy
dGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSB2ZXJ0ZXhTaGFkZXItPm1W
YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJl
ZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlp
bmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9
IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqOworICAgICAgICAg
ICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOworCisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3Rl
ciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFj
a2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJl
Z2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5nKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInki
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRl
eEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IHZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0
cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhM
U0wgKz0gIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4
ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOwor
ICAgIAorICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5
aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+
PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmct
PnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZh
cmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Cisg
ICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDog
IiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1h
bnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgICAgIGlmIChzbTMpIHsKKyAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAm
JiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRD
b29yZCA6IFRFWENPT1JEMDtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5t
VXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQg
dkZhY2UgOiBWRkFDRTtcbiI7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRc
biIKKyAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIjsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVz
ZXNGcmFnRGVwdGgpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9E
ZXB0aCA6IERFUFRIO1xuIjsKKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBT
X0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9
ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOworICAgICAg
ICAKKyAgICAgICAgaWYgKHNtMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9
ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkg
KyAwLjU7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBj
ZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9G
cmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9GcmFnQ29v
cmQueSAqIHJodykgKiBkeF9Db29yZC55ICsgZHhfQ29vcmQudztcbiI7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0
LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0K
KworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7
CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueCA9IGlucHV0LmdsX1Bv
aW50Q29vcmQueDtcbiI7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQu
eSA9IDEuMCAtIGlucHV0LmdsX1BvaW50Q29vcmQueTtcbiI7CisgICAgfQorCisgICAgaWYgKGZy
YWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udEND
VyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAg
ICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcg
Pj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5n
LT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBW
YXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50
IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwor
ICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIo
aSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFZhcmlhYmxlQ29sdW1uQ291bnQodmFy
eWluZy0+dHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54O1xuIjsgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHBpeGVsSExTTCArPSAiID0gaW5wdXQu
diIgKyBuICsgIi54eTtcbiI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eXo7XG4iOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDQ6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsg
IjtcbiI7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7
XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIFBTX09V
VFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xvclsw
XSA9IGdsX0NvbG9yWzBdO1xuIjsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
RGVwdGgpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGgg
PSBnbF9EZXB0aDtcbiI7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4i
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bG9hZChJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCB2b2lkICpiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKQoreworICAg
IEJpbmFyeUlucHV0U3RyZWFtIHN0cmVhbShiaW5hcnksIGxlbmd0aCk7CisKKyAgICBpbnQgZm9y
bWF0ID0gMDsKKyAgICBzdHJlYW0ucmVhZCgmZm9ybWF0KTsKKyAgICBpZiAoZm9ybWF0ICE9IEdM
X1BST0dSQU1fQklOQVJZX0FOR0xFKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIklu
dmFsaWQgcHJvZ3JhbSBiaW5hcnkgZm9ybWF0LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaW50IHZlcnNpb24gPSAwOworICAgIHN0cmVhbS5yZWFkKCZ2ZXJzaW9uKTsK
KyAgICBpZiAodmVyc2lvbiAhPSBWRVJTSU9OX0RXT1JEKQorICAgIHsKKyAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkludmFsaWQgcHJvZ3JhbSBiaW5hcnkgdmVyc2lvbi4iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyArK2kpCisgICAgeworICAgICAgICBzdHJlYW0ucmVhZCgmbUxpbmtlZEF0dHJpYnV0
ZVtpXS50eXBlKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICAgICAgc3RyZWFtLnJl
YWQoJm5hbWUpOworICAgICAgICBtTGlua2VkQXR0cmlidXRlW2ldLm5hbWUgPSBuYW1lOworICAg
ICAgICBzdHJlYW0ucmVhZCgmbVNlbWFudGljSW5kZXhbaV0pOworICAgIH0KKworICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICsraSkKKyAg
ICB7CisgICAgICAgIHN0cmVhbS5yZWFkKCZtU2FtcGxlcnNQU1tpXS5hY3RpdmUpOworICAgICAg
ICBzdHJlYW0ucmVhZCgmbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0KTsKKyAgICAg
ICAgCisgICAgICAgIGludCB0ZXh0dXJlVHlwZTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJnRleHR1
cmVUeXBlKTsKKyAgICAgICAgbVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGUgPSAoVGV4dHVyZVR5
cGUpIHRleHR1cmVUeXBlOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgKytpKQorICAgIHsKKyAgICAg
ICAgc3RyZWFtLnJlYWQoJm1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSk7CisgICAgICAgIHN0cmVhbS5y
ZWFkKCZtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQpOworICAgICAgICAKKyAgICAg
ICAgaW50IHRleHR1cmVUeXBlOworICAgICAgICBzdHJlYW0ucmVhZCgmdGV4dHVyZVR5cGUpOwor
ICAgICAgICBtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZSA9IChUZXh0dXJlVHlwZSkgdGV4dHVy
ZVR5cGU7CisgICAgfQorCisgICAgc3RyZWFtLnJlYWQoJm1Vc2VkVmVydGV4U2FtcGxlclJhbmdl
KTsKKyAgICBzdHJlYW0ucmVhZCgmbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7CisgICAgc3RyZWFt
LnJlYWQoJm1Vc2VzUG9pbnRTaXplKTsKKworICAgIHNpemVfdCBzaXplOworICAgIHN0cmVhbS5y
ZWFkKCZzaXplKTsKKyAgICBpZiAoc3RyZWFtLmVycm9yKCkpCisgICAgeworICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIG1Vbmlmb3Jtcy5yZXNpemUoc2l6ZSk7CisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgeworICAgICAgICBHTGVudW0gdHlw
ZTsKKyAgICAgICAgc3RkOjpzdHJpbmcgX25hbWU7CisgICAgICAgIHVuc2lnbmVkIGludCBhcnJh
eVNpemU7CisKKyAgICAgICAgc3RyZWFtLnJlYWQoJnR5cGUpOworICAgICAgICBzdHJlYW0ucmVh
ZCgmX25hbWUpOworICAgICAgICBzdHJlYW0ucmVhZCgmYXJyYXlTaXplKTsKKworICAgICAgICBt
VW5pZm9ybXNbaV0gPSBuZXcgVW5pZm9ybSh0eXBlLCBfbmFtZSwgYXJyYXlTaXplKTsKKyAgICAg
ICAgCisgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnBzLmZsb2F0NEluZGV4KTsK
KyAgICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+cHMuc2FtcGxlckluZGV4KTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+cHMuYm9vbEluZGV4KTsKKyAgICAgICAg
c3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+cHMucmVnaXN0ZXJDb3VudCk7CisKKyAgICAgICAg
c3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+dnMuZmxvYXQ0SW5kZXgpOworICAgICAgICBzdHJl
YW0ucmVhZCgmbVVuaWZvcm1zW2ldLT52cy5zYW1wbGVySW5kZXgpOworICAgICAgICBzdHJlYW0u
cmVhZCgmbVVuaWZvcm1zW2ldLT52cy5ib29sSW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgm
bVVuaWZvcm1zW2ldLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICBzdHJlYW0ucmVh
ZCgmc2l6ZSk7CisgICAgaWYgKHN0cmVhbS5lcnJvcigpKQorICAgIHsKKyAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkludmFsaWQgcHJvZ3JhbSBiaW5hcnkuIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBtVW5pZm9ybUluZGV4LnJlc2l6ZShzaXplKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICB7CisgICAgICAgIHN0cmVhbS5y
ZWFkKCZtVW5pZm9ybUluZGV4W2ldLm5hbWUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbVVuaWZv
cm1JbmRleFtpXS5lbGVtZW50KTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3JtSW5kZXhb
aV0uaW5kZXgpOworICAgIH0KKworICAgIHN0cmVhbS5yZWFkKCZtRHhEZXB0aFJhbmdlTG9jYXRp
b24pOworICAgIHN0cmVhbS5yZWFkKCZtRHhEZXB0aExvY2F0aW9uKTsKKyAgICBzdHJlYW0ucmVh
ZCgmbUR4Q29vcmRMb2NhdGlvbik7CisgICAgc3RyZWFtLnJlYWQoJm1EeEhhbGZQaXhlbFNpemVM
b2NhdGlvbik7CisgICAgc3RyZWFtLnJlYWQoJm1EeEZyb250Q0NXTG9jYXRpb24pOworICAgIHN0
cmVhbS5yZWFkKCZtRHhQb2ludHNPckxpbmVzTG9jYXRpb24pOworCisgICAgdW5zaWduZWQgaW50
IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICBzdHJlYW0ucmVhZCgmcGl4ZWxTaGFkZXJTaXplKTsKKwor
ICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJTaXplOworICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0
ZXhTaGFkZXJTaXplKTsKKworICAgIGNvbnN0IGNoYXIgKnB0ciA9IChjb25zdCBjaGFyKikgYmlu
YXJ5ICsgc3RyZWFtLm9mZnNldCgpOworCisgICAgY29uc3QgRDNEQ0FQUzkgKmJpbmFyeUlkZW50
aWZpZXIgPSAoY29uc3QgRDNEQ0FQUzkqKSBwdHI7CisgICAgcHRyICs9IHNpemVvZihHVUlEKTsK
KworICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmN1cnJlbnRJZGVudGlmaWVyID0gZ2V0RGlz
cGxheSgpLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOworICAgIGlmIChtZW1jbXAoJmN1cnJlbnRJ
ZGVudGlmaWVyLT5EZXZpY2VJZGVudGlmaWVyLCBiaW5hcnlJZGVudGlmaWVyLCBzaXplb2YoR1VJ
RCkpICE9IDApCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFt
IGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGNo
YXIgKnBpeGVsU2hhZGVyRnVuY3Rpb24gPSBwdHI7CisgICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6
ZTsKKworICAgIGNvbnN0IGNoYXIgKnZlcnRleFNoYWRlckZ1bmN0aW9uID0gcHRyOworICAgIHB0
ciArPSB2ZXJ0ZXhTaGFkZXJTaXplOworCisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IGdldERpc3Bs
YXkoKS0+Y3JlYXRlUGl4ZWxTaGFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHBp
eGVsU2hhZGVyRnVuY3Rpb24pLCBwaXhlbFNoYWRlclNpemUpOworICAgIGlmICghbVBpeGVsRXhl
Y3V0YWJsZSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgY3JlYXRl
IHBpeGVsIHNoYWRlci4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1W
ZXJ0ZXhFeGVjdXRhYmxlID0gZ2V0RGlzcGxheSgpLT5jcmVhdGVWZXJ0ZXhTaGFkZXIocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZlcnRleFNoYWRlckZ1bmN0aW9uKSwgdmVydGV4U2hh
ZGVyU2l6ZSk7CisgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgY3JlYXRlIHZlcnRleCBzaGFkZXIuIik7CisgICAgICAg
IG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9
IE5VTEw7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZT
aXplLCBHTHNpemVpICpsZW5ndGgpCit7CisgICAgQmluYXJ5T3V0cHV0U3RyZWFtIHN0cmVhbTsK
KworICAgIHN0cmVhbS53cml0ZShHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRSk7CisgICAgc3RyZWFt
LndyaXRlKFZFUlNJT05fRFdPUkQpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7ICsraSkKKyAgICB7CisgICAgICAgIHN0cmVhbS53cml0ZSht
TGlua2VkQXR0cmlidXRlW2ldLnR5cGUpOworICAgICAgICBzdHJlYW0ud3JpdGUobUxpbmtlZEF0
dHJpYnV0ZVtpXS5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKG1TZW1hbnRpY0luZGV4W2ld
KTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTOyArK2kpCisgICAgeworICAgICAgICBzdHJlYW0ud3JpdGUobVNhbXBsZXJz
UFNbaV0uYWN0aXZlKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKG1TYW1wbGVyc1BTW2ldLmxvZ2lj
YWxUZXh0dXJlVW5pdCk7CisgICAgICAgIHN0cmVhbS53cml0ZSgoaW50KSBtU2FtcGxlcnNQU1tp
XS50ZXh0dXJlVHlwZSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyArK2kpCisgICAgeworICAgICAg
ICBzdHJlYW0ud3JpdGUobVNhbXBsZXJzVlNbaV0uYWN0aXZlKTsKKyAgICAgICAgc3RyZWFtLndy
aXRlKG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdCk7CisgICAgICAgIHN0cmVhbS53
cml0ZSgoaW50KSBtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZSk7CisgICAgfQorCisgICAgc3Ry
ZWFtLndyaXRlKG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsKKyAgICBzdHJlYW0ud3JpdGUobVVz
ZWRQaXhlbFNhbXBsZXJSYW5nZSk7CisgICAgc3RyZWFtLndyaXRlKG1Vc2VzUG9pbnRTaXplKTsK
KworICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IG1Vbmlmb3Jtcy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIHN0
cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnR5cGUpOworICAgICAgICBzdHJlYW0ud3JpdGUobVVu
aWZvcm1zW2ldLT5fbmFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPmFy
cmF5U2l6ZSk7CisKKyAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+cHMuZmxvYXQ0
SW5kZXgpOworICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wcy5zYW1wbGVySW5k
ZXgpOworICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wcy5ib29sSW5kZXgpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wcy5yZWdpc3RlckNvdW50KTsKKwor
ICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT52cy5mbG9hdDRJbmRleCk7CisgICAg
ICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnZzLnNhbXBsZXJJbmRleCk7CisgICAgICAg
IHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnZzLmJvb2xJbmRleCk7CisgICAgICAgIHN0cmVh
bS53cml0ZShtVW5pZm9ybXNbaV0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKworICAgIHN0
cmVhbS53cml0ZShtVW5pZm9ybUluZGV4LnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBtVW5pZm9ybUluZGV4LnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAgc3Ry
ZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0ubmFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSht
VW5pZm9ybUluZGV4W2ldLmVsZW1lbnQpOworICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1J
bmRleFtpXS5pbmRleCk7CisgICAgfQorCisgICAgc3RyZWFtLndyaXRlKG1EeERlcHRoUmFuZ2VM
b2NhdGlvbik7CisgICAgc3RyZWFtLndyaXRlKG1EeERlcHRoTG9jYXRpb24pOworICAgIHN0cmVh
bS53cml0ZShtRHhDb29yZExvY2F0aW9uKTsKKyAgICBzdHJlYW0ud3JpdGUobUR4SGFsZlBpeGVs
U2l6ZUxvY2F0aW9uKTsKKyAgICBzdHJlYW0ud3JpdGUobUR4RnJvbnRDQ1dMb2NhdGlvbik7Cisg
ICAgc3RyZWFtLndyaXRlKG1EeFBvaW50c09yTGluZXNMb2NhdGlvbik7CisKKyAgICBVSU5UIHBp
eGVsU2hhZGVyU2l6ZTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1QaXhlbEV4ZWN1dGFibGUtPkdl
dEZ1bmN0aW9uKE5VTEwsICZwaXhlbFNoYWRlclNpemUpOworICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisgICAgc3RyZWFtLndyaXRlKHBpeGVsU2hhZGVyU2l6ZSk7CisKKyAgICBVSU5U
IHZlcnRleFNoYWRlclNpemU7CisgICAgcmVzdWx0ID0gbVZlcnRleEV4ZWN1dGFibGUtPkdldEZ1
bmN0aW9uKE5VTEwsICZ2ZXJ0ZXhTaGFkZXJTaXplKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhTaGFkZXJTaXplKTsKKworICAgIEQzREFE
QVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBnZXREaXNwbGF5KCktPmdldEFkYXB0ZXJJ
ZGVudGlmaWVyKCk7CisKKyAgICBHTHNpemVpIHN0cmVhbUxlbmd0aCA9IHN0cmVhbS5sZW5ndGgo
KTsKKyAgICBjb25zdCB2b2lkICpzdHJlYW1EYXRhID0gc3RyZWFtLmRhdGEoKTsKKworICAgIEdM
c2l6ZWkgdG90YWxMZW5ndGggPSBzdHJlYW1MZW5ndGggKyBzaXplb2YoR1VJRCkgKyBwaXhlbFNo
YWRlclNpemUgKyB2ZXJ0ZXhTaGFkZXJTaXplOworICAgIGlmICh0b3RhbExlbmd0aCA+IGJ1ZlNp
emUpCisgICAgeworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAq
bGVuZ3RoID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoYmluYXJ5KQorICAgIHsKKyAgICAgICAgY2hhciAqcHRyID0gKGNoYXIqKSBiaW5h
cnk7CisKKyAgICAgICAgbWVtY3B5KHB0ciwgc3RyZWFtRGF0YSwgc3RyZWFtTGVuZ3RoKTsKKyAg
ICAgICAgcHRyICs9IHN0cmVhbUxlbmd0aDsKKworICAgICAgICBtZW1jcHkocHRyLCAmaWRlbnRp
Zmllci0+RGV2aWNlSWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKTsKKyAgICAgICAgcHRyICs9IHNp
emVvZihHVUlEKTsKKworICAgICAgICByZXN1bHQgPSBtUGl4ZWxFeGVjdXRhYmxlLT5HZXRGdW5j
dGlvbihwdHIsICZwaXhlbFNoYWRlclNpemUpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgICAgICBwdHIgKz0gcGl4ZWxTaGFkZXJTaXplOworCisgICAgICAgIHJlc3Vs
dCA9IG1WZXJ0ZXhFeGVjdXRhYmxlLT5HZXRGdW5jdGlvbihwdHIsICZ2ZXJ0ZXhTaGFkZXJTaXpl
KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgcHRyICs9IHZl
cnRleFNoYWRlclNpemU7CisKKyAgICAgICAgQVNTRVJUKHB0ciAtIHRvdGFsTGVuZ3RoID09IGJp
bmFyeSk7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCkKKyAgICB7CisgICAgICAgICpsZW5ndGgg
PSB0b3RhbExlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xpbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0TGVuZ3RoKCkKK3sKKyAgICBHTGludCBsZW5ndGg7CisgICAgaWYgKHNh
dmUoTlVMTCwgSU5UX01BWCwgJmxlbmd0aCkpCisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3Ro
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1
dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNo
YWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgaWYgKCFmcmFnbWVudFNo
YWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hh
ZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgc3RkOjpzdHJpbmcgcGl4ZWxITFNMID0gZnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsK
KyAgICBzdGQ6OnN0cmluZyB2ZXJ0ZXhITFNMID0gdmVydGV4U2hhZGVyLT5nZXRITFNMKCk7CisK
KyAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCBwaXhlbEhMU0wsIHZlcnRleEhMU0wsIGZy
YWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29u
c3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkg
PyAidnNfM18wIiA6ICJ2c18yXzAiOworICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNv
bnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOworCisg
ICAgSUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHZl
cnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlVlMpOworICAg
IElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHBpeGVs
SExTTC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKKworICAgIGlm
ICh2ZXJ0ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkpCisgICAgeworICAgICAgICBtVmVydGV4RXhl
Y3V0YWJsZSA9IGdldERpc3BsYXkoKS0+Y3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4
QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIHZlcnRleEJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgp
KTsKKyAgICAgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBnZXREaXNwbGF5KCktPmNyZWF0ZVBpeGVsU2hhZGVy
KChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgcGl4ZWxCaW5hcnktPkdl
dEJ1ZmZlclNpemUoKSk7CisgICAgICAgIGlmICghbVBpeGVsRXhlY3V0YWJsZSkKKyAgICAgICAg
eworICAgICAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICB2ZXJ0ZXhCaW5hcnkt
PlJlbGVhc2UoKTsKKyAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgdmVy
dGV4QmluYXJ5ID0gTlVMTDsKKyAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOworCisgICAgICAg
IGlmICghbGlua0F0dHJpYnV0ZXMoaW5mb0xvZywgYXR0cmlidXRlQmluZGluZ3MsIGZyYWdtZW50
U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9G
UkFHTUVOVF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWxpbmtVbmlmb3Jtcyhp
bmZvTG9nLCBHTF9WRVJURVhfU0hBREVSLCBtQ29uc3RhbnRUYWJsZVZTKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gdGhlc2Ug
dW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFu
ZCBkeF8KKyAgICAgICAgLy8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2Vp
dmUgYWRkaXRpb25hbCBkZWNvcmF0aW9uCisgICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9
IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGhSYW5nZSIpOworICAgICAgICBtRHhEZXB0aExv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOworICAgICAgICBtRHhDb29y
ZExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOworICAgICAgICBtRHhI
YWxmUGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNp
emUiKTsKKyAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigi
ZHhfRnJvbnRDQ1ciKTsKKyAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7CisKKyAgICAgICAgY29udGV4dC0+bWFy
a0R4VW5pZm9ybXNEaXJ0eSgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdM
IGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCiti
b29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0
IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZy
YWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBo
YXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9y
IGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRl
ICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsK
KyAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAv
LyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8g
dGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7CisKKyAgICAgICAg
ICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworCisgICAg
ICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3RpdmUgYXR0cmlidXRl
ICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUu
Y19zdHIoKSwgbG9jYXRpb24pOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxv
Y2F0aW9uICsgaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBM
aW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAgIGZv
ciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
ZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmli
dXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0
aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChh
dHRyaWJ1dGUtPnR5cGUpOworICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2Nh
dGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMp
OworCisgICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5k
ZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwg
YXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAgIC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlua2Vk
QXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFk
ZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFt
ZSk7CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2Vk
QXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAgICAgZm9yIChpbnQg
ciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW1hbnRpY0lu
ZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZv
TG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBEM0RDb25zdGFudFRhYmxlICpjb25zdGFudFRh
YmxlKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGNvbnN0YW50SW5kZXggPSAwOyBjb25zdGFu
dEluZGV4IDwgY29uc3RhbnRUYWJsZS0+Y29uc3RhbnRzKCk7IGNvbnN0YW50SW5kZXgrKykKKyAg
ICB7CisgICAgICAgIGNvbnN0IEQzRENvbnN0YW50ICpjb25zdGFudCA9IGNvbnN0YW50VGFibGUt
PmdldENvbnN0YW50KGNvbnN0YW50SW5kZXgpOworCisgICAgICAgIGlmICghZGVmaW5lVW5pZm9y
bShpbmZvTG9nLCBzaGFkZXIsIGNvbnN0YW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8v
IEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJpbmFyeSBz
aGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKKy8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNm
dWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVm
aW5lVW5pZm9ybShJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RDb25z
dGFudCAqY29uc3RhbnQsIHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgaWYgKGNvbnN0YW50LT5y
ZWdpc3RlclNldCA9PSBEM0RDb25zdGFudDo6UlNfU0FNUExFUikKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnQtPnJlZ2lzdGVyQ291bnQ7IGkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRDNEQ29uc3RhbnQgKnBzQ29uc3RhbnQgPSBt
Q29uc3RhbnRUYWJsZVBTLT5nZXRDb25zdGFudEJ5TmFtZShjb25zdGFudC0+bmFtZS5jX3N0cigp
KTsKKyAgICAgICAgICAgIGNvbnN0IEQzRENvbnN0YW50ICp2c0NvbnN0YW50ID0gbUNvbnN0YW50
VGFibGVWUy0+Z2V0Q29uc3RhbnRCeU5hbWUoY29uc3RhbnQtPm5hbWUuY19zdHIoKSk7CisKKyAg
ICAgICAgICAgIGlmIChwc0NvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBwc0NvbnN0YW50LT5yZWdpc3RlckluZGV4ICsg
aTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVy
c1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudC0+dHlwZSA9PSBE
M0RDb25zdGFudDo6UFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsK
KyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQgPSAwOworICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdl
ID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJQaXhlbCBzaGFkZXIgc2FtcGxl
ciBjb3VudCBleGNlZWRzIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAodnNDb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc2FtcGxlckluZGV4ID0gdnNDb25zdGFudC0+cmVnaXN0ZXJJbmRleCArIGk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVy
dGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25z
dGFudC0+dHlwZSA9PSBEM0RDb25zdGFudDo6UFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJF
IDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOworICAgICAgICAgICAgICAgICAgICBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkVmVydGV4
U2FtcGxlclJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlZl
cnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFn
ZVVuaXRzKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoKGNv
bnN0YW50LT50eXBlQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBEM0RDb25zdGFudDo6Q0xBU1Nf
U1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUlu
ZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50LT5lbGVtZW50czsgYXJyYXlJbmRleCsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0g
MDsgZmllbGQgPCBjb25zdGFudC0+c3RydWN0TWVtYmVyc1thcnJheUluZGV4XS5zaXplKCk7IGZp
ZWxkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBEM0RD
b25zdGFudCAqZmllbGRDb25zdGFudCA9IGNvbnN0YW50LT5zdHJ1Y3RNZW1iZXJzW2FycmF5SW5k
ZXhdW2ZpZWxkXTsKKworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRl
eCA9IChjb25zdGFudC0+ZWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAi
XSIpIDogIiI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGluZm9M
b2csIHNoYWRlciwgZmllbGRDb25zdGFudCwgbmFtZSArIGNvbnN0YW50LT5uYW1lICsgc3RydWN0
SW5kZXggKyAiLiIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICBjYXNlIEQzRENvbnN0YW50OjpDTEFTU19TQ0FMQVI6CisgICAgICBjYXNlIEQzRENv
bnN0YW50OjpDTEFTU19WRUNUT1I6CisgICAgICBjYXNlIEQzRENvbnN0YW50OjpDTEFTU19NQVRS
SVhfQ09MVU1OUzoKKyAgICAgIGNhc2UgRDNEQ29uc3RhbnQ6OkNMQVNTX09CSkVDVDoKKyAgICAg
ICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudCwgbmFtZSArIGNvbnN0YW50
LT5uYW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5p
Zm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RDb25zdGFudCAqY29uc3RhbnQsIGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9y
bShjb25zdGFudCwgX25hbWUpOworCisgICAgaWYoIXVuaWZvcm0pCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCisg
ICAgR0xpbnQgbG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7Cisg
ICAgR0xlbnVtIHR5cGUgPSB1bmlmb3JtLT50eXBlOworCisgICAgaWYgKGxvY2F0aW9uID49IDAp
CisgICAgeworICAgICAgICBkZWxldGUgdW5pZm9ybTsKKyAgICAgICAgdW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgfQorCisgICAgaWYgKHNo
YWRlciA9PSBHTF9GUkFHTUVOVF9TSEFERVIpIHVuaWZvcm0tPnBzLnNldChjb25zdGFudCk7Cisg
ICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKSAgIHVuaWZvcm0tPnZzLnNldChjb25z
dGFudCk7CisKKyAgICBpZiAobG9jYXRpb24gPj0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB1
bmlmb3JtLT50eXBlID09IHR5cGU7CisgICAgfQorCisgICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1
bmlmb3JtKTsKKyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUo
KSAtIDE7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5
U2l6ZTsgKytpKQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9y
bUxvY2F0aW9uKF9uYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworVW5pZm9ybSAqUHJvZ3JhbUJpbmFyeTo6Y3JlYXRlVW5pZm9ybShjb25zdCBE
M0RDb25zdGFudCAqY29uc3RhbnQsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBp
ZiAoY29uc3RhbnQtPnJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50LT50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBEM0RDb25zdGFudDo6UFRfU0FNUExFUjJEOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFu
dC0+Y29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50LT5lbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRENvbnN0YW50OjpQVF9TQU1QTEVSQ1VC
RToKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnQtPmNvbHVtbnMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VC
RSwgX25hbWUsIGNvbnN0YW50LT5lbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEQzRENvbnN0YW50OjpQVF9CT09MOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFu
dC0+Y29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfQk9PTCwgX25hbWUsIGNvbnN0YW50LT5lbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUsIGNv
bnN0YW50LT5lbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50LT5lbGVtZW50cyk7CisgICAgICAgICAg
ICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgX25hbWUsIGNvbnN0
YW50LT5lbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRENvbnN0
YW50OjpQVF9JTlQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50LT5jb2x1bW5zKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9J
TlQsIF9uYW1lLCBjb25zdGFudC0+ZWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMiwgX25hbWUsIGNvbnN0YW50LT5lbGVtZW50cyk7
CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBf
bmFtZSwgY29uc3RhbnQtPmVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudC0+ZWxlbWVudHMpOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RDb25zdGFudDo6UFRfRkxPQVQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50LT5jb2x1bW5zKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgX25hbWUsIGNvbnN0
YW50LT5lbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFudC0+ZWxlbWVudHMpOworICAgICAgICAgICAg
ICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMzLCBfbmFtZSwgY29uc3Rh
bnQtPmVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVRfVkVDNCwgX25hbWUsIGNvbnN0YW50LT5lbGVtZW50cyk7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChjb25zdGFudC0+cm93cyA9PSBjb25zdGFudC0+Y29s
dW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFu
dC0+dHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNEQ29uc3RhbnQ6OlBUX0ZMT0FU
OgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudC0+cm93cykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwgX25h
bWUsIGNvbnN0YW50LT5lbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIF9uYW1lLCBjb25zdGFudC0+ZWxlbWVudHMpOworICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFt
ZSwgY29uc3RhbnQtPmVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNo
IE91dHB1dEhMU0w6OmRlY29yYXRlCitzdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0
ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21w
YXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkK
KyAgICB7CisgICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gbmFtZTsKK30KKworc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZv
cm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBf
bmFtZTsKKyAgICAKKyAgICAvLyBSZW1vdmUgYW55IHN0cnVjdHVyZSBmaWVsZCBkZWNvcmF0aW9u
CisgICAgc2l6ZV90IHBvcyA9IDA7CisgICAgd2hpbGUgKChwb3MgPSBuYW1lLmZpbmQoIi5fIiwg
cG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgeworICAgICAgICBuYW1lLnJlcGxhY2Uo
cG9zLCAyLCAiLiIpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBkZWNvcmF0
aW9uCisgICAgaWYgKG5hbWVbMF0gPT0gJ18nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWUu
c3Vic3RyKDEpOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImFyXyIp
ID09IDApCisgICAgeworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMyk7CisgICAgfQorICAg
IAorICAgIHJldHVybiBuYW1lOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNv
bnN0IEdMYm9vbGVhbiAqdikKK3sKKyAgICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTICogNF07CisgICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JPT0xfQ09OU1RBTlRT
XTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwIHx8IHRhcmdl
dFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApCisgICAgeworICAgICAgICBBU1NFUlQoY291
bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IDQ7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaiA8IHdpZHRo
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsg
al0gPSAodltpICogd2lkdGggKyBqXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAwLjBmOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgg
Pj0gMCkKKyAgICB7CisgICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMuYm9v
bEluZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsKKyAgICAg
ICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCA/IHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOworICAgICAgICBpbnQgY29weUNvdW50ID0g
c3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOworICAg
ICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBz
LmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwor
ICAgIH0KKyAgICAgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAw
KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEIodGFyZ2V0
VW5pZm9ybS0+cHMuYm9vbEluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50KTsKKyAgICB9CisgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0
NEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9y
bS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dnMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4LCBib29sVmVjdG9y
LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0
IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
CisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisg
ICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5p
Zm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RB
TlRTKTsKKyAgICBWZWN0b3I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9y
W2ldID0gVmVjdG9yNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7CisgICAgfQorCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4Owor
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5k
ZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJ
bmRleCA+PSAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIGlmICh0
YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXggPj0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5k
ZXg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmly
c3RJbmRleCArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURikKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1
cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5p
Zm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBm
bG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojph
cHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNU
QU5UUyk7CisgICAgVmVjdG9yNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3Rv
cltpXSA9IFZlY3RvcjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKKworICAgICAg
ICB2ICs9IDI7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNv
dW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOworICAgIFZlY3RvcjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2
ZWN0b3JbaV0gPSBWZWN0b3I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0s
IDApOworCisgICAgICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBhcHBseVVuaWZvcm1uaXYodGFy
Z2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgVmVjdG9yNCB2ZWN0b3JbRDNEOV9NQVhfRkxP
QVRfQ09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICB7CisgICAgICAgIHZlY3RvcltpXSA9IFZlY3RvcjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFd
LCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9CisK
KyAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uaXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgVmVjdG9yNCAqdmVj
dG9yKQoreworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApOworICAg
ICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5m
bG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRl
eCA+PSAwKTsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5
Ojppc1ZhbGlkYXRlZCgpIGNvbnN0IAoreworICAgIHJldHVybiBtVmFsaWRhdGVkOworfQorCit2
b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6
ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBH
TGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKKyAg
ICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXR0
cmlidXRlOworICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRl
W2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYWN0aXZl
QXR0cmlidXRlKys7CisgICAgfQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAg
ICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUu
Y19zdHIoKTsKKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAg
ICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAg
ICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFu
Y2UKKworICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisK
K0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBp
bnQgY291bnQgPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1
dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgp
KQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRy
aWJ1dGVNYXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgZm9yIChp
bnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklC
UzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0
ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBt
YXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4
XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVu
aWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xp
bnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIC8vIFNraXAgb3Zl
ciBpbnRlcm5hbCB1bmlmb3JtcworICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3JtID0gMDsK
KyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKKyAgICBmb3IgKHVuaWZvcm0gPSAwOyB1bmlmb3Jt
IDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlm
b3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3RpdmVV
bmlmb3JtID09IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKKyAgICB9CisKKyAgICBBU1NFUlQodW5pZm9y
bSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdl
dEFjdGl2ZVVuaWZvcm1Db3VudCgpCisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAg
ICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7CisKKyAg
ICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBzdHJpbmcgKz0gIlswXSI7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KG5h
bWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0g
PSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICps
ZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1V
bmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXplOworCisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5p
Zm9ybV0tPnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1D
b3VudCgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlm
b3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUlu
ZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAg
IHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwg
MywgImR4XyIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6
OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOwor
CisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlm
b3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlm
b3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUu
Y29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGxl
bmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgpICsgMSk7
CisgICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXkoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50aW5nIGlu
ICJbMF0iLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgo
bGVuZ3RoLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heExl
bmd0aDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9n
KQoreworICAgIGFwcGx5VW5pZm9ybXMoKTsKKyAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnMoJmlu
Zm9Mb2cpKQorICAgIHsKKyAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKQoreworICAg
IC8vIGlmIGFueSB0d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVy
ZW50IHR5cGVzLCBidXQgcmVmZXIgdG8gdGhlIHNhbWUKKyAgICAvLyB0ZXh0dXJlIGltYWdlIHVu
aXQsIGFuZCB0aGlzIGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFt
IHdpbGwgZmFpbCwgYW5kCisgICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwg
aXNzdWUgdGhlIElOVkFMSURfT1BFUkFUSU9OIGVycm9yLgorCisgICAgY29uc3QgdW5zaWduZWQg
aW50IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0KCktPmdldE1heGlt
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7CisgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVVu
aXRUeXBlW01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
X1ZURjsgKytpKQorICAgIHsKKyAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ldID0gVEVYVFVSRV9V
TktOT1dOOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRQ
aXhlbFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ld
LmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2Ft
cGxlcnNQU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2Vl
ZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHR1
cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0
VHlwZVt1bml0XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
bmZvTG9nKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bmZvTG9nLT5hcHBlbmQoIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRo
ZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0
dXJlVHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7
CisgICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmZvTG9n
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5k
KCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9V
TktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNWU1tp
XS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVycyBvZiBj
b25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVk
KS4iLCB1bml0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBl
W3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhEZXB0
aFJhbmdlTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2Nh
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50
IFByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1EeENvb3JkTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24o
KSBjb25zdAoreworICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOworfQorCitHTGludCBQ
cm9ncmFtQmluYXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKK30KKworUHJvZ3JhbUJpbmFyeTo6U2Ft
cGxlcjo6U2FtcGxlcigpIDogYWN0aXZlKGZhbHNlKSwgbG9naWNhbFRleHR1cmVVbml0KDApLCB0
ZXh0dXJlVHlwZShURVhUVVJFXzJEKQoreworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIzNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJv
Z3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9n
cmFtIG9iamVjdHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFN
X0JJTkFSWV9IXworI2RlZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKworI2RlZmlu
ZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wy
ZXh0Lmg+CisKKyNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNp
bmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9EM0RDb25zdGFudFRhYmxlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21h
dGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorCituYW1lc3BhY2UgZ2wK
K3sKK2NsYXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworCisvLyBIZWxw
ZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQorc3RydWN0IFVu
aWZvcm0KK3sKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25h
bWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOworCisgICAgflVuaWZvcm0oKTsKKworICAgIGJv
b2wgaXNBcnJheSgpOworCisgICAgY29uc3QgR0xlbnVtIHR5cGU7CisgICAgY29uc3Qgc3RkOjpz
dHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBu
YW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCisgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5
U2l6ZTsKKworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgYm9vbCBkaXJ0eTsKKworICAg
IHN0cnVjdCBSZWdpc3RlckluZm8KKyAgICB7CisgICAgICAgIFJlZ2lzdGVySW5mbygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZsb2F0NEluZGV4ID0gLTE7CisgICAgICAgICAgICBzYW1wbGVy
SW5kZXggPSAtMTsKKyAgICAgICAgICAgIGJvb2xJbmRleCA9IC0xOworICAgICAgICAgICAgcmVn
aXN0ZXJDb3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldChjb25zdCBEM0RD
b25zdGFudCAqY29uc3RhbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaChjb25zdGFu
dC0+cmVnaXN0ZXJTZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNEQ29u
c3RhbnQ6OlJTX0JPT0w6ICAgIGJvb2xJbmRleCA9IGNvbnN0YW50LT5yZWdpc3RlckluZGV4OyAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RDb25zdGFudDo6UlNfRkxPQVQ0OiAgZmxv
YXQ0SW5kZXggPSBjb25zdGFudC0+cmVnaXN0ZXJJbmRleDsgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEQzRENvbnN0YW50OjpSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBjb25zdGFudC0+
cmVnaXN0ZXJJbmRleDsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyZWdp
c3RlckNvdW50ID09IDAgfHwgcmVnaXN0ZXJDb3VudCA9PSAoaW50KWNvbnN0YW50LT5yZWdpc3Rl
ckNvdW50KTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBjb25zdGFudC0+cmVnaXN0ZXJD
b3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBmbG9hdDRJbmRleDsKKyAgICAgICAgaW50
IHNhbXBsZXJJbmRleDsKKyAgICAgICAgaW50IGJvb2xJbmRleDsKKworICAgICAgICBpbnQgcmVn
aXN0ZXJDb3VudDsKKyAgICB9OworCisgICAgUmVnaXN0ZXJJbmZvIHBzOworICAgIFJlZ2lzdGVy
SW5mbyB2czsKK307CisKKy8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGluZyB1bmlmb3Jtcy9l
bGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCitzdHJ1Y3QgVW5pZm9ybUxvY2F0
aW9uCit7CisgICAgVW5pZm9ybUxvY2F0aW9uKCkKKyAgICB7CisgICAgfQorCisgICAgVW5pZm9y
bUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQs
IHVuc2lnbmVkIGludCBpbmRleCk7CisKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2ln
bmVkIGludCBlbGVtZW50OworICAgIHVuc2lnbmVkIGludCBpbmRleDsKK307CisKKy8vIFRoaXMg
aXMgdGhlIHJlc3VsdCBvZiBsaW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQg
d291bGQgYmUgcGFzc2VkIHRvIFByb2dyYW1CaW5hcnkuCitjbGFzcyBQcm9ncmFtQmluYXJ5IDog
cHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBQcm9ncmFtQmluYXJ5KCk7
CisgICAgflByb2dyYW1CaW5hcnkoKTsKKworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0
UGl4ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFk
ZXIoKTsKKworICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1l
KTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOworCisgICAg
R0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCk7CisgICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBs
ZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIEdMaW50IGdldFVz
ZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7CisgICAgYm9vbCB1c2VzUG9pbnRTaXpl
KCkgY29uc3Q7CisKKyAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFt
ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9y
bTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVu
aWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZv
cm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAg
ICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKworICAgIGJvb2wgZ2V0
VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJh
bXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZT
aXplLCBHTGludCAqcGFyYW1zKTsKKworICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9u
KCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xp
bnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxT
aXplTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBj
b25zdDsKKyAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OworCisg
ICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7CisgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisK
KyAgICBib29sIGxvYWQoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNp
emVpIGxlbmd0aCk7CisgICAgYm9vbCBzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZTaXpl
LCBHTHNpemVpICpsZW5ndGgpOworICAgIEdMaW50IGdldExlbmd0aCgpOworCisgICAgYm9vbCBs
aW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVC
aW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZl
cnRleFNoYWRlcik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3Vu
dCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycyk7CisKKyAgICB2b2lkIGdldEFjdGl2
ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdl
dEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlTWF4
TGVuZ3RoKCk7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwg
R0xjaGFyICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICBH
TGludCBnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisKKyAgICB2b2lkIHZhbGlkYXRlKElu
Zm9Mb2cgJmluZm9Mb2cpOworICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZv
TG9nKTsKKyAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBpbnQg
Z2V0U2VyaWFsKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRy
aWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2Nv
cmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpz
dHJpbmcgJl9uYW1lKTsgICAvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlCisKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbUJpbmFyeSk7CisKKyAgICBJ
RDNEMTBCbG9iICpjb21waWxlVG9CaW5hcnkoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAq
aGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgRDNEQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFi
bGUpOworCisgICAgaW50IHBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5
aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7CisgICAg
Ym9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgc3RkOjpzdHJpbmcmIHBpeGVsSExT
TCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
ciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworCisgICAgYm9vbCBsaW5rQXR0cmlidXRl
cyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmlu
ZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0
ZXhTaGFkZXIpOworCisgICAgYm9vbCBsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgR0xl
bnVtIHNoYWRlciwgRDNEQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7CisgICAgYm9vbCBk
ZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRENv
bnN0YW50ICpjb25zdGFudCwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBib29sIGRlZmlu
ZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEQ29uc3RhbnQgKmNvbnN0YW50LCBjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgVW5pZm9ybSAqY3JlYXRlVW5pZm9ybSggY29uc3Qg
RDNEQ29uc3RhbnQgKmNvbnN0YW50LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9v
bCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAq
dik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAg
ICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQg
YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IFZlY3RvcjQgKnZlY3Rvcik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4g
KnYpOworCisgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKKworICAgIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5
ICptVmVydGV4RXhlY3V0YWJsZTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZHVyaW5n
IGxpbmtpbmcuCisgICAgRDNEQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBE
M0RDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVZTOworCisgICAgQXR0cmlidXRlIG1MaW5r
ZWRBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBpbnQgbVNlbWFudGljSW5kZXhb
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIHN0cnVjdCBTYW1wbGVyCisgICAgeworICAgICAg
ICBTYW1wbGVyKCk7CisKKyAgICAgICAgYm9vbCBhY3RpdmU7CisgICAgICAgIEdMaW50IGxvZ2lj
YWxUZXh0dXJlVW5pdDsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgfTsK
KworICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAg
IFNhbXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07
CisgICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOworICAgIEdMdWludCBtVXNlZFBp
eGVsU2FtcGxlclJhbmdlOworICAgIGJvb2wgbVVzZXNQb2ludFNpemU7CisKKyAgICB0eXBlZGVm
IHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBVbmlmb3JtQXJyYXk7CisgICAgVW5pZm9ybUFycmF5IG1V
bmlmb3JtczsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9y
bUluZGV4OworICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworCisgICAgR0xpbnQgbUR4
RGVwdGhSYW5nZUxvY2F0aW9uOworICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247CisgICAgR0xp
bnQgbUR4Q29vcmRMb2NhdGlvbjsKKyAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247
CisgICAgR0xpbnQgbUR4RnJvbnRDQ1dMb2NhdGlvbjsKKyAgICBHTGludCBtRHhQb2ludHNPckxp
bmVzTG9jYXRpb247CisKKyAgICBib29sIG1WYWxpZGF0ZWQ7CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgbVNlcmlhbDsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsK
KyAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50U2VyaWFsOworfTsKK30KKworI2VuZGlm
ICAgLy8gTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUXVlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUXVlcnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBRdWVyeS5jcHA6IEltcGxlbWVudHMgdGhlIGds
OjpRdWVyeSBjbGFzcworCisjaW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5LmgiCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworUXVlcnk6OlF1ZXJ5KEdM
dWludCBpZCwgR0xlbnVtIHR5cGUpIDogUmVmQ291bnRPYmplY3QoaWQpCit7IAorICAgIG1RdWVy
eSA9IE5VTEw7CisgICAgbVN0YXR1cyA9IEdMX0ZBTFNFOworICAgIG1SZXN1bHQgPSBHTF9GQUxT
RTsKKyAgICBtVHlwZSA9IHR5cGU7Cit9CisKK1F1ZXJ5Ojp+UXVlcnkoKQoreworICAgIGlmICht
UXVlcnkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOworICAgICAg
ICBtUXVlcnkgPSBOVUxMOworICAgIH0KK30KKwordm9pZCBRdWVyeTo6YmVnaW4oKQoreworICAg
IGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChGQUlMRUQoZ2V0RGV2aWNl
KCktPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NMVVNJT04sICZtUXVlcnkpKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VF
X0JFR0lOKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworfQorCit2b2lkIFF1ZXJ5
OjplbmQoKQoreworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1
bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKyAgICAKKyAgICBtU3RhdHVzID0gR0xfRkFMU0U7CisgICAgbVJlc3VsdCA9IEdM
X0ZBTFNFOworfQorCitHTHVpbnQgUXVlcnk6OmdldFJlc3VsdCgpCit7CisgICAgaWYgKG1RdWVy
eSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCF0ZXN0UXVlcnkoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgU2xlZXAoMCk7CisgICAgICAgICAgICAvLyBleHBsaWNpdGx5IGNoZWNr
IGZvciBkZXZpY2UgbG9zcworICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0
dXJuIFNfRkFMU0UgZXZlbiBpZiB0aGUgZGV2aWNlIGlzIGxvc3QKKyAgICAgICAgICAgIC8vIGlu
c3RlYWQgb2YgRDNERVJSX0RFVklDRUxPU1QgbGlrZSB0aGV5IHNob3VsZAorICAgICAgICAgICAg
aWYgKGdsOjpnZXREaXNwbGF5KCktPnRlc3REZXZpY2VMb3N0KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZ2w6OmdldERpc3BsYXkoKS0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoR0x1aW50KW1SZXN1bHQ7Cit9
CisKK0dMYm9vbGVhbiBRdWVyeTo6aXNSZXN1bHRBdmFpbGFibGUoKQoreworICAgIGlmIChtUXVl
cnkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRlc3RRdWVyeSgpOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gbVN0YXR1czsKK30KKworR0xlbnVtIFF1ZXJ5OjpnZXRUeXBlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVR5cGU7Cit9CisKK0dMYm9vbGVhbiBRdWVyeTo6dGVzdFF1ZXJ5KCkKK3sK
KyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQorICAgIHsKKyAg
ICAgICAgRFdPUkQgbnVtUGl4ZWxzID0gMDsKKworICAgICAgICBIUkVTVUxUIGhyZXMgPSBtUXVl
cnktPkdldERhdGEoJm51bVBpeGVscywgc2l6ZW9mKERXT1JEKSwgRDNER0VUREFUQV9GTFVTSCk7
CisgICAgICAgIGlmIChocmVzID09IFNfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGF0
dXMgPSBHTF9UUlVFOworCisgICAgICAgICAgICBzd2l0Y2ggKG1UeXBlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6CisgICAg
ICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxT
RTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGNoZWNrRGV2aWNlTG9zdChocmVzKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gbVN0YXR1czsKKyAgICB9CisKKyAgICByZXR1cm4gR0xf
VFJVRTsgLy8gcHJldmVudCBibG9ja2luZyB3aGVuIHF1ZXJ5IGlzIG51bGwKK30KK30KClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVl
cnkuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUXVlcnkuaDogRGVmaW5lcyB0aGUgZ2w6
OlF1ZXJ5IGNsYXNzCisKKyNpZm5kZWYgTElCR0xFU1YyX1FVRVJZX0hfCisjZGVmaW5lIExJQkdM
RVNWMl9RVUVSWV9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgor
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y2xhc3MgUXVlcnkgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVibGljOgorICAgIFF1
ZXJ5KEdMdWludCBpZCwgR0xlbnVtIHR5cGUpOworICAgIHZpcnR1YWwgflF1ZXJ5KCk7CisKKyAg
ICB2b2lkIGJlZ2luKCk7CisgICAgdm9pZCBlbmQoKTsKKyAgICBHTHVpbnQgZ2V0UmVzdWx0KCk7
CisgICAgR0xib29sZWFuIGlzUmVzdWx0QXZhaWxhYmxlKCk7CisKKyAgICBHTGVudW0gZ2V0VHlw
ZSgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1
ZXJ5KTsKKworICAgIEdMYm9vbGVhbiB0ZXN0UXVlcnkoKTsKKworICAgIElEaXJlY3QzRFF1ZXJ5
OSogbVF1ZXJ5OworICAgIEdMZW51bSBtVHlwZTsKKyAgICBHTGJvb2xlYW4gbVN0YXR1czsKKyAg
ICBHTGludCBtUmVzdWx0OworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfUVVFUllf
SF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUXVlcnkuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsx
ICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUkVBRE1FCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUkVBRE1FCShyZXZpc2lvbiAxNTI4MjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JFQURNRQkod29ya2luZyBj
b3B5KQpAQCAtMSArMCwwIEBACi1UaGlzIGRpcmVjdG9yeSdzIGNvbnRlbnRzIGFyZSBub3Qgc3lu
Y2VkIGZyb20gdGhlIEFOR0xFIHByb2plY3QgYmVjYXVzZSBubyBwbGF0Zm9ybSBpbiBXZWJLaXQg
bmVlZHMgdGhlbSB5ZXQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3NyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyYnVmZmVyLmNwcDogdGhlIGdsOjpSZW5kZXJidWZm
ZXIgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMKKy8vIENvbG9yYnVmZmVyLCBEZXB0aGJ1
ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJidWZmZXIKKy8vIG9i
amVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gNC40LjMgcGFnZSAxMDguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgi
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0
dXJlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wK
K3sKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjptQ3VycmVudFNlcmlhbCA9IDE7
CisKK1JlbmRlcmJ1ZmZlckludGVyZmFjZTo6UmVuZGVyYnVmZmVySW50ZXJmYWNlKCkKK3sKK30K
KworLy8gVGhlIGRlZmF1bHQgY2FzZSBmb3IgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBSZW5kZXJi
dWZmZXJJbnRlcmZhY2UgaXMgbm90IHRvCisvLyBuZWVkIHRvIGRvIGFueXRoaW5nIHVwb24gdGhl
IHJlZmVyZW5jZSBjb3VudCB0byB0aGUgcGFyZW50IFJlbmRlcmJ1ZmZlciBpbmNyZW1lbnRpbmcK
Ky8vIG9yIGRlY3JlbWVudGluZy4gCit2b2lkIFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6YWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKK30KKwordm9pZCBSZW5kZXJidWZm
ZXJJbnRlcmZhY2U6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQorewor
fQorCitHTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRSZWRTaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZHgyZXM6OkdldFJlZFNpemUoZ2V0RDNERm9ybWF0KCkpOworfQorCitHTHVp
bnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRHcmVlblNpemUoKSBjb25zdAoreworICAgIHJl
dHVybiBkeDJlczo6R2V0R3JlZW5TaXplKGdldEQzREZvcm1hdCgpKTsKK30KKworR0x1aW50IFJl
bmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0Qmx1ZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBk
eDJlczo6R2V0Qmx1ZVNpemUoZ2V0RDNERm9ybWF0KCkpOworfQorCitHTHVpbnQgUmVuZGVyYnVm
ZmVySW50ZXJmYWNlOjpnZXRBbHBoYVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBkeDJlczo6
R2V0QWxwaGFTaXplKGdldEQzREZvcm1hdCgpKTsKK30KKworR0x1aW50IFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZTo6Z2V0RGVwdGhTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZHgyZXM6OkdldERl
cHRoU2l6ZShnZXREM0RGb3JtYXQoKSk7Cit9CisKK0dMdWludCBSZW5kZXJidWZmZXJJbnRlcmZh
Y2U6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZHgyZXM6OkdldFN0ZW5j
aWxTaXplKGdldEQzREZvcm1hdCgpKTsKK30KKworLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZTJE
IEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVy
YnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFy
Z2V0KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZTJELnNldCh0ZXh0dXJlKTsKK30KKworUmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCkKK3sKKyAgICBtVGV4dHVy
ZTJELnNldChOVUxMKTsKK30KKworLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBv
d24gcmVmZXJlbmNlIGNvdW50IGZvciByZWZlcmVuY2VzIHZpYQorLy8gUmVuZGVyYnVmZmVycyBh
Y3RpbmcgYXMgcHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJl
bmNlLgordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUyRC0+YWRkUHJveHlSZWYocHJveHkpOwor
fQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUyRC0+cmVsZWFzZVByb3h5KHByb3h5KTsK
K30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBtVGV4dHVy
ZTJELT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhT
dGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RGVwdGhTdGVuY2lsKG1UYXJn
ZXQpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgoKSBjb25z
dAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRXaWR0aCgwKTsKK30KKworR0xzaXplaSBS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5n
ZXRJbnRlcm5hbEZvcm1hdCgwKTsKK30KKworRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RDNE
Rm9ybWF0KDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxl
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQt
PmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKK30KKworLy8vLy8gUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXAgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJl
Q3ViZU1hcC5zZXQodGV4dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjp+
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKQoreworICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQo
TlVMTCk7Cit9CisKKy8vIFRleHR1cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJlZmVy
ZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNlcyB2aWEKKy8vIFJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFz
IHByb3hpZXMuIEhlcmUsIHdlIG5vdGlmeSB0aGUgdGV4dHVyZSBvZiBhIHJlZmVyZW5jZS4KK3Zv
aWQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmVDdWJlTWFwLT5hZGRQcm94eVJlZihwcm94eSk7
Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KQoreworICAgIG1UZXh0dXJlQ3ViZU1hcC0+cmVsZWFzZVBy
b3h5KHByb3h5KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJm
YWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCit7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworfQor
CisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gTlVMTDsK
K30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoKSBjb25z
dAoreworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCwgMCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7Cit9CisKK0dMZW51
bSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAor
eworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1
cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAw
KTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2FtcGxlcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmVD
dWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7Cit9CisKKy8vLy8vLyBSZW5k
ZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKK1JlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVm
ZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3Vu
dE9iamVjdChpZCkKK3sKKyAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CisgICAgbUluc3Rh
bmNlID0gaW5zdGFuY2U7Cit9CisKK1JlbmRlcmJ1ZmZlcjo6flJlbmRlcmJ1ZmZlcigpCit7Cisg
ICAgZGVsZXRlIG1JbnN0YW5jZTsKK30KKworLy8gVGhlIFJlbmRlcmJ1ZmZlckludGVyZmFjZSBj
b250YWluZWQgaW4gdGhpcyBSZW5kZXJidWZmZXIgbWF5IG5lZWQgdG8gbWFpbnRhaW4KKy8vIGl0
cyBvd24gcmVmZXJlbmNlIGNvdW50LCBzbyB3ZSBwYXNzIGl0IG9uIGhlcmUuCit2b2lkIFJlbmRl
cmJ1ZmZlcjo6YWRkUmVmKCkgY29uc3QKK3sKKyAgICBtSW5zdGFuY2UtPmFkZFByb3h5UmVmKHRo
aXMpOworCisgICAgUmVmQ291bnRPYmplY3Q6OmFkZFJlZigpOworfQorCit2b2lkIFJlbmRlcmJ1
ZmZlcjo6cmVsZWFzZSgpIGNvbnN0Cit7CisgICAgbUluc3RhbmNlLT5yZWxlYXNlUHJveHkodGhp
cyk7CisKKyAgICBSZWZDb3VudE9iamVjdDo6cmVsZWFzZSgpOworfQorCisvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVy
bmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldFJlbmRlclRh
cmdldCgpCit7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Cit9CisK
Ky8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXREZXB0aFN0
ZW5jaWwoKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXI6OmdldFdpZHRoKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRXaWR0aCgpOworfQorCitHTHNpemVpIFJlbmRlcmJ1
ZmZlcjo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRIZWln
aHQoKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dAoreworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEludGVybmFsRm9ybWF0KCk7Cit9CisKK0Qz
REZPUk1BVCBSZW5kZXJidWZmZXI6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1JbnN0YW5jZS0+Z2V0RDNERm9ybWF0KCk7Cit9CisKK0dMdWludCBSZW5kZXJidWZmZXI6Omdl
dFJlZFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlZFNpemUoKTsK
K30KKworR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXRHcmVlblNpemUoKTsKK30KKworR0x1aW50IFJlbmRlcmJ1ZmZl
cjo6Z2V0Qmx1ZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEJsdWVT
aXplKCk7Cit9CisKK0dMdWludCBSZW5kZXJidWZmZXI6OmdldEFscGhhU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0QWxwaGFTaXplKCk7Cit9CisKK0dMdWludCBSZW5k
ZXJidWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+
Z2V0RGVwdGhTaXplKCk7Cit9CisKK0dMdWludCBSZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRTdGVuY2lsU2l6ZSgpOworfQor
CitHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1JbnN0YW5jZS0+Z2V0U2FtcGxlcygpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVy
OjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFNlcmlhbCgp
OworfQorCit2b2lkIFJlbmRlcmJ1ZmZlcjo6c2V0U3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdl
ICpuZXdTdG9yYWdlKQoreworICAgIEFTU0VSVChuZXdTdG9yYWdlICE9IE5VTEwpOworCisgICAg
ZGVsZXRlIG1JbnN0YW5jZTsKKyAgICBtSW5zdGFuY2UgPSBuZXdTdG9yYWdlOworfQorCitSZW5k
ZXJidWZmZXJTdG9yYWdlOjpSZW5kZXJidWZmZXJTdG9yYWdlKCkgOiBtU2VyaWFsKGlzc3VlU2Vy
aWFsKCkpCit7CisgICAgbVdpZHRoID0gMDsKKyAgICBtSGVpZ2h0ID0gMDsKKyAgICBtSW50ZXJu
YWxGb3JtYXQgPSBHTF9SR0JBNDsKKyAgICBtRDNERm9ybWF0ID0gRDNERk1UX0E4UjhHOEI4Owor
ICAgIG1TYW1wbGVzID0gMDsKK30KKworUmVuZGVyYnVmZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZl
clN0b3JhZ2UoKQoreworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisv
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1
cmZhY2U5ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJl
dHVybiBOVUxMOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZh
Y2U5ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVy
biBOVUxMOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFdpZHRoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVdpZHRoOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9CisKK0dMZW51
bSBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1JbnRlcm5hbEZvcm1hdDsKK30KKworRDNERk9STUFUIFJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EM0RGb3JtYXQ7Cit9CisK
K0dMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1TYW1wbGVzOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6
Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNlcmlhbDsKK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkKK3sKKyAgICByZXR1cm4gbUN1
cnJlbnRTZXJpYWwrKzsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlz
c3VlQ3ViZVNlcmlhbHMoKQoreworICAgIHVuc2lnbmVkIGludCBmaXJzdFNlcmlhbCA9IG1DdXJy
ZW50U2VyaWFsOworICAgIG1DdXJyZW50U2VyaWFsICs9IDY7CisgICAgcmV0dXJuIGZpcnN0U2Vy
aWFsOworfQorCitDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJl
bmRlclRhcmdldCkgOiBtUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkKK3sKKyAgICBpZiAocmVu
ZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKworICAg
ICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIHJlbmRlclRhcmdldC0+
R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0aW9uLldp
ZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0OworICAgICAgICBtSW50
ZXJuYWxGb3JtYXQgPSBkeDJlczo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKKyAgICAgICAgbUQzREZvcm1hdCA9IGRlc2NyaXB0aW9uLkZvcm1hdDsKKyAgICAg
ICAgbVNhbXBsZXMgPSBkeDJlczo6R2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoZGVzY3Jp
cHRpb24uTXVsdGlTYW1wbGVUeXBlKTsKKyAgICB9Cit9CisKK0NvbG9yYnVmZmVyOjpDb2xvcmJ1
ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxl
cykgOiBtUmVuZGVyVGFyZ2V0KE5VTEwpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7CisKKyAgICBEM0RGT1JNQVQgcmVxdWVzdGVkRm9ybWF0ID0gZXMyZHg6
OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKKyAgICBpbnQgc3VwcG9ydGVkU2Ft
cGxlcyA9IGdldENvbnRleHQoKS0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVxdWVzdGVk
Rm9ybWF0LCBzYW1wbGVzKTsKKworICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0xKQorICAg
IHsKKyAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKKyAgICB7CisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdo
dCwgcmVxdWVzdGVkRm9ybWF0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlczJkeDo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3Vw
cG9ydGVkU2FtcGxlcyksIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisKKyAgICAg
ICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhl
aWdodCA9IGhlaWdodDsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7CisgICAgbUQzREZv
cm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7
Cit9CisKK0NvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQoreworICAgIGlmIChtUmVuZGVyVGFy
Z2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KK30K
KworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVs
ZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqQ29sb3JidWZm
ZXI6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgewor
ICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVJl
bmRlclRhcmdldDsKK30KKworRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIo
SURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBtRGVwdGhTdGVuY2lsKGRlcHRoU3Rl
bmNpbCkKK3sKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVu
Y2lsLT5BZGRSZWYoKTsKKworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Cisg
ICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIG1X
aWR0aCA9IGRlc2NyaXB0aW9uLldpZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24u
SGVpZ2h0OworICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkeDJlczo6Q29udmVydERlcHRoU3Rl
bmNpbEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgICAgICBtU2FtcGxlcyA9IGR4MmVz
OjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5
cGUpOyAKKyAgICAgICAgbUQzREZvcm1hdCA9IGRlc2NyaXB0aW9uLkZvcm1hdDsKKyAgICB9Cit9
CisKK0RlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVwdGhTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50
IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOworCisgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgCisgICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBnZXRDb250ZXh0KCktPmdldE5lYXJlc3RTdXBwb3J0ZWRT
YW1wbGVzKEQzREZNVF9EMjRTOCwgc2FtcGxlcyk7CisKKyAgICBpZiAoc3VwcG9ydGVkU2FtcGxl
cyA9PSAtMSkKKyAgICB7CisgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisg
ICAgeworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2ls
U3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBEM0RGTVRfRDI0UzgsIGVzMmR4OjpHZXRNdWx0aXNhbXBs
ZVR5cGVGcm9tU2FtcGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtRGVwdGhT
dGVuY2lsLCAwKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICBtV2lk
dGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1JbnRlcm5hbEZvcm1hdCA9
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOworICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfRDI0Uzg7
CisgICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOworfQorCitEZXB0aFN0ZW5jaWxidWZm
ZXI6On5EZXB0aFN0ZW5jaWxidWZmZXIoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAg
IHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KK30KKworLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqRGVwdGhTdGVuY2lsYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAg
ICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1EZXB0
aFN0ZW5jaWw7Cit9CisKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNl
OSAqZGVwdGhTdGVuY2lsKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpCit7Cisg
ICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdM
X0RFUFRIX0NPTVBPTkVOVDE2OyAgIC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBh
cmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxp
ZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAg
ICB9Cit9CisKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQs
IEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2Ft
cGxlcykKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1JbnRlcm5h
bEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OyAgIC8vIElmIHRoZSByZW5kZXJidWZmZXIg
cGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25l
IG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2UKKyAgICB9Cit9CisKK0RlcHRoYnVmZmVyOjp+RGVwdGhidWZmZXIoKQoreworfQor
CitTdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0
ZW5jaWwpIDogRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCkKK3sKKyAgICBpZiAoZGVw
dGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfU1RFTkNJTF9J
TkRFWDg7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0
aGUgY2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBm
b3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorICAgIH0KK30KKworU3RlbmNpbGJ1
ZmZlcjo6U3RlbmNpbGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxl
cykgOiBEZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykKK3sKKyAgICBp
ZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX1NU
RU5DSUxfSU5ERVg4OyAgIC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVl
cmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJi
dWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICB9Cit9CisKK1N0
ZW5jaWxidWZmZXI6On5TdGVuY2lsYnVmZmVyKCkKK3sKK30KKworfQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
UmVuZGVyYnVmZmVyLmg6IERlZmluZXMgdGhlIHdyYXBwZXIgY2xhc3MgZ2w6OlJlbmRlcmJ1ZmZl
ciwgYXMgd2VsbCBhcyB0aGUKKy8vIGNsYXNzIGhpZXJhcmNoeSB1c2VkIHRvIHN0b3JlIGl0cyBj
b250ZW50czogUmVuZGVyYnVmZmVyU3RvcmFnZSwgQ29sb3JidWZmZXIsCisvLyBEZXB0aFN0ZW5j
aWxidWZmZXIsIERlcHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdMIHJl
bmRlcmJ1ZmZlcgorLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdM
IEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQuMyBwYWdlIDEwOC4KKworI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSQlVGRkVSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJfSF8KKworI2Rl
ZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNkOS5o
PgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vUmVm
Q291bnRPYmplY3QuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBUZXh0dXJlMkQ7CitjbGFz
cyBUZXh0dXJlQ3ViZU1hcDsKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsKK2NsYXNzIENvbG9yYnVmZmVy
OworY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOworCitjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZh
Y2UKK3sKKyAgcHVibGljOgorICAgIFJlbmRlcmJ1ZmZlckludGVyZmFjZSgpOworCisgICAgdmly
dHVhbCB+UmVuZGVyYnVmZmVySW50ZXJmYWNlKCkge307CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
UHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKworICAgIHZpcnR1YWwgSURp
cmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpID0gMDsKKyAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0V2lkdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdCA9IDA7CisKKyAgICBHTHVpbnQg
Z2V0UmVkU2l6ZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRHcmVlblNpemUoKSBjb25zdDsKKyAg
ICBHTHVpbnQgZ2V0Qmx1ZVNpemUoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCkg
Y29uc3Q7CisgICAgR0x1aW50IGdldERlcHRoU2l6ZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRT
dGVuY2lsU2l6ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFs
KCkgY29uc3QgPSAwOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFJlbmRlcmJ1ZmZlckludGVyZmFjZSk7Cit9OworCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJl
MkQgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKwor
ICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOworCisgICAgdm9pZCBhZGRQcm94
eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7
CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxG
b3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTJEKTsKKworICAgIEJpbmRp
bmdQb2ludGVyIDxUZXh0dXJlMkQ+IG1UZXh0dXJlMkQ7CisgICAgR0xlbnVtIG1UYXJnZXQ7Cit9
OworCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJidWZm
ZXJJbnRlcmZhY2UKK3sKKyAgcHVibGljOgorICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKworICAgIHZpcnR1YWwg
flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCk7CisKKyAgICB2b2lkIGFkZFByb3h5UmVmKGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRh
cmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAg
IHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBn
ZXRIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgp
IGNvbnN0OworICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAg
IHZpcnR1YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CisKKyAgICBCaW5kaW5n
UG9pbnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKKyAgICBHTGVudW0gbVRh
cmdldDsKK307CisKKy8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0b3JhZ2Ug
aXMgY3JlYXRlZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKy8vIGlzIGNhbGxlZC4g
VGhlIHNwZWNpZmljIGNvbmNyZXRlIHR5cGUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBpbnRlcm5h
bCBmb3JtYXQgaXMKKy8vIGNvbG91ciBkZXB0aCwgc3RlbmNpbCBvciBwYWNrZWQgZGVwdGgvc3Rl
bmNpbC4KK2NsYXNzIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50
ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICBSZW5kZXJidWZmZXJTdG9yYWdlKCk7CisKKyAgICB2
aXJ0dWFsIH5SZW5kZXJidWZmZXJTdG9yYWdlKCkgPSAwOworCisgICAgdmlydHVhbCBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzREZP
Uk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxl
cygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7
CisKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CisgICAgc3RhdGljIHVu
c2lnbmVkIGludCBpc3N1ZUN1YmVTZXJpYWxzKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIEdMc2l6
ZWkgbVdpZHRoOworICAgIEdMc2l6ZWkgbUhlaWdodDsKKyAgICBHTGVudW0gbUludGVybmFsRm9y
bWF0OworICAgIEQzREZPUk1BVCBtRDNERm9ybWF0OworICAgIEdMc2l6ZWkgbVNhbXBsZXM7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyU3Rv
cmFnZSk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKKworICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7Cit9OworCisvLyBSZW5kZXJidWZmZXIgaW1wbGVt
ZW50cyB0aGUgR0wgcmVuZGVyYnVmZmVyIG9iamVjdC4KKy8vIEl0J3Mgb25seSBhIHByb3h5IGZv
ciBhIFJlbmRlcmJ1ZmZlckludGVyZmFjZSBpbnN0YW5jZTsgdGhlIGludGVybmFsIG9iamVjdAor
Ly8gY2FuIGNoYW5nZSB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMgY2FsbGVkLgor
Y2xhc3MgUmVuZGVyYnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoK
KyAgICBSZW5kZXJidWZmZXIoR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKnN0b3Jh
Z2UpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyKCk7CisKKyAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgZnJvbSBSZWZDb3VudE9iamVjdCBhcmUgb3ZlcmxvYWRlZCBoZXJlIGJlY2F1c2UKKyAg
ICAvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biBjb3VudCBvZiByZWZlcmVu
Y2VzIHRvIHRoZW0gdmlhCisgICAgLy8gUmVuZGVyYnVmZmVycy9SZW5kZXJidWZmZXJUZXh0dXJl
cy4gVGhlc2UgZnVuY3Rpb25zIGludm9rZSB0aG9zZQorICAgIC8vIHJlZmVyZW5jZSBjb3VudGlu
ZyBmdW5jdGlvbnMgb24gdGhlIFJlbmRlcmJ1ZmZlckludGVyZmFjZS4KKyAgICB2b2lkIGFkZFJl
ZigpIGNvbnN0OworICAgIHZvaWQgcmVsZWFzZSgpIGNvbnN0OworCisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0
aFN0ZW5jaWwoKTsKKworICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICBHTHNpemVp
IGdldEhlaWdodCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
OworICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0UmVk
U2l6ZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRHcmVlblNpemUoKSBjb25zdDsKKyAgICBHTHVp
bnQgZ2V0Qmx1ZVNpemUoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCkgY29uc3Q7
CisgICAgR0x1aW50IGdldERlcHRoU2l6ZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRTdGVuY2ls
U2l6ZSgpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdW5z
aWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRTdG9yYWdlKFJlbmRl
cmJ1ZmZlclN0b3JhZ2UgKm5ld1N0b3JhZ2UpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlcik7CisKKyAgICBSZW5kZXJidWZmZXJJbnRlcmZh
Y2UgKm1JbnN0YW5jZTsKK307CisKK2NsYXNzIENvbG9yYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1
ZmZlclN0b3JhZ2UKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IENvbG9yYnVmZmVyKElEaXJl
Y3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpOworICAgIENvbG9yYnVmZmVyKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOworCisg
ICAgdmlydHVhbCB+Q29sb3JidWZmZXIoKTsKKworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldFJlbmRlclRhcmdldCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKENvbG9yYnVmZmVyKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUmVuZGVy
VGFyZ2V0OworfTsKKworY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1
ZmZlclN0b3JhZ2UKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IERlcHRoU3RlbmNpbGJ1ZmZl
cihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKKyAgICBEZXB0aFN0ZW5jaWxidWZm
ZXIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7CisKKyAg
ICB+RGVwdGhTdGVuY2lsYnVmZmVyKCk7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5
ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm1EZXB0aFN0ZW5jaWw7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oRGVwdGhTdGVuY2lsYnVmZmVyKTsKK307CisKK2NsYXNzIERlcHRoYnVmZmVyIDogcHVi
bGljIERlcHRoU3RlbmNpbGJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRGVwdGhi
dWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7CisgICAgRGVwdGhidWZmZXIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7CisKKyAgICB2
aXJ0dWFsIH5EZXB0aGJ1ZmZlcigpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKERlcHRoYnVmZmVyKTsKK307CisKK2NsYXNzIFN0ZW5jaWxidWZmZXIgOiBwdWJs
aWMgRGVwdGhTdGVuY2lsYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBTdGVuY2ls
YnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOworICAgIFN0ZW5jaWxidWZm
ZXIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7CisKKyAg
ICB2aXJ0dWFsIH5TdGVuY2lsYnVmZmVyKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oU3RlbmNpbGJ1ZmZlcik7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJH
TEVTVjJfUkVOREVSQlVGRkVSX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMyMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVzb3Vy
Y2VNYW5hZ2VyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlJlc291cmNlTWFuYWdlciBjbGFzcywg
d2hpY2ggdHJhY2tzIGFuZCAKKy8vIHJldHJpZXZlcyBvYmplY3RzIHdoaWNoIG1heSBiZSBzaGFy
ZWQgYnkgbXVsdGlwbGUgQ29udGV4dHMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VN
YW5hZ2VyLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJl
LmgiCisKK25hbWVzcGFjZSBnbAoreworUmVzb3VyY2VNYW5hZ2VyOjpSZXNvdXJjZU1hbmFnZXIo
KQoreworICAgIG1SZWZDb3VudCA9IDE7Cit9CisKK1Jlc291cmNlTWFuYWdlcjo6flJlc291cmNl
TWFuYWdlcigpCit7CisgICAgd2hpbGUgKCFtQnVmZmVyTWFwLmVtcHR5KCkpCisgICAgeworICAg
ICAgICBkZWxldGVCdWZmZXIobUJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisg
ICAgd2hpbGUgKCFtUHJvZ3JhbU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlUHJv
Z3JhbShtUHJvZ3JhbU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFt
U2hhZGVyTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVTaGFkZXIobVNoYWRlck1h
cC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtUmVuZGVyYnVmZmVyTWFw
LmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVSZW5kZXJidWZmZXIobVJlbmRlcmJ1ZmZl
ck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtVGV4dHVyZU1hcC5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1hcC5iZWdpbigp
LT5maXJzdCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTWFuYWdlcjo6YWRkUmVmKCkKK3sK
KyAgICBtUmVmQ291bnQrKzsKK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6OnJlbGVhc2UoKQor
eworICAgIGlmICgtLW1SZWZDb3VudCA9PSAwKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7
CisgICAgfQorfQorCisvLyBSZXR1cm5zIGFuIHVudXNlZCBidWZmZXIgbmFtZQorR0x1aW50IFJl
c291cmNlTWFuYWdlcjo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbUJ1
ZmZlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbUJ1ZmZlck1hcFtoYW5kbGVd
ID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2Vk
IHNoYWRlci9wcm9ncmFtIG5hbWUKK0dMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVNoYWRl
cihHTGVudW0gdHlwZSkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVByb2dyYW1TaGFkZXJIYW5k
bGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKKworICAgIGlmICh0eXBlID09IEdMX1ZFUlRFWF9TSEFE
RVIpCisgICAgeworICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4U2hhZGVy
KHRoaXMsIGhhbmRsZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfRlJBR01FTlRf
U0hBREVSKQorICAgIHsKKyAgICAgICAgbVNoYWRlck1hcFtoYW5kbGVdID0gbmV3IEZyYWdtZW50
U2hhZGVyKHRoaXMsIGhhbmRsZSk7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKwor
ICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIHByb2dyYW0vc2hh
ZGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVByb2dyYW0oKQoreworICAg
IEdMdWludCBoYW5kbGUgPSBtUHJvZ3JhbVNoYWRlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgp
OworCisgICAgbVByb2dyYW1NYXBbaGFuZGxlXSA9IG5ldyBQcm9ncmFtKHRoaXMsIGhhbmRsZSk7
CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIGFuIHVudXNlZCB0ZXh0dXJl
IG5hbWUKK0dMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIEdM
dWludCBoYW5kbGUgPSBtVGV4dHVyZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAg
bVRleHR1cmVNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisv
LyBSZXR1cm5zIGFuIHVudXNlZCByZW5kZXJidWZmZXIgbmFtZQorR0x1aW50IFJlc291cmNlTWFu
YWdlcjo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVJlbmRl
cmJ1ZmZlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbVJlbmRlcmJ1ZmZlck1h
cFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VNYW5hZ2VyOjpkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBCdWZmZXJNYXA6
Oml0ZXJhdG9yIGJ1ZmZlck9iamVjdCA9IG1CdWZmZXJNYXAuZmluZChidWZmZXIpOworCisgICAg
aWYgKGJ1ZmZlck9iamVjdCAhPSBtQnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgbUJ1
ZmZlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGJ1ZmZlck9iamVjdC0+Zmlyc3QpOworICAgICAg
ICBpZiAoYnVmZmVyT2JqZWN0LT5zZWNvbmQpIGJ1ZmZlck9iamVjdC0+c2Vjb25kLT5yZWxlYXNl
KCk7CisgICAgICAgIG1CdWZmZXJNYXAuZXJhc2UoYnVmZmVyT2JqZWN0KTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKK3sKKyAg
ICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNoYWRlck9iamVjdCA9IG1TaGFkZXJNYXAuZmluZChzaGFk
ZXIpOworCisgICAgaWYgKHNoYWRlck9iamVjdCAhPSBtU2hhZGVyTWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgaWYgKHNoYWRlck9iamVjdC0+c2Vjb25kLT5nZXRSZWZDb3VudCgpID09IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yLnJlbGVh
c2Uoc2hhZGVyT2JqZWN0LT5maXJzdCk7CisgICAgICAgICAgICBkZWxldGUgc2hhZGVyT2JqZWN0
LT5zZWNvbmQ7CisgICAgICAgICAgICBtU2hhZGVyTWFwLmVyYXNlKHNoYWRlck9iamVjdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzaGFkZXJPYmpl
Y3QtPnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAg
IFByb2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW1PYmplY3QgPSBtUHJvZ3JhbU1hcC5maW5kKHBy
b2dyYW0pOworCisgICAgaWYgKHByb2dyYW1PYmplY3QgIT0gbVByb2dyYW1NYXAuZW5kKCkpCisg
ICAgeworICAgICAgICBpZiAocHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5nZXRSZWZDb3VudCgpID09
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UocHJvZ3JhbU9iamVjdC0+Zmlyc3QpOworICAgICAgICAgICAgZGVsZXRlIHByb2dy
YW1PYmplY3QtPnNlY29uZDsKKyAgICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHByb2dyYW1P
YmplY3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeyAKKyAgICAgICAgICAg
IHByb2dyYW1PYmplY3QtPnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0
dXJlKQoreworICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmVPYmplY3QgPSBtVGV4dHVy
ZU1hcC5maW5kKHRleHR1cmUpOworCisgICAgaWYgKHRleHR1cmVPYmplY3QgIT0gbVRleHR1cmVN
YXAuZW5kKCkpCisgICAgeworICAgICAgICBtVGV4dHVyZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNl
KHRleHR1cmVPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPnNlY29u
ZCkgdGV4dHVyZU9iamVjdC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1UZXh0dXJlTWFw
LmVyYXNlKHRleHR1cmVPYmplY3QpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIFJlbmRlcmJ1
ZmZlck1hcDo6aXRlcmF0b3IgcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVJlbmRlcmJ1ZmZlck1hcC5m
aW5kKHJlbmRlcmJ1ZmZlcik7CisKKyAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0ICE9IG1SZW5k
ZXJidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBtUmVuZGVyYnVmZmVySGFuZGxlQWxs
b2NhdG9yLnJlbGVhc2UocmVuZGVyYnVmZmVyT2JqZWN0LT5maXJzdCk7CisgICAgICAgIGlmIChy
ZW5kZXJidWZmZXJPYmplY3QtPnNlY29uZCkgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZWNvbmQtPnJl
bGVhc2UoKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlck1hcC5lcmFzZShyZW5kZXJidWZmZXJPYmpl
Y3QpOworICAgIH0KK30KKworQnVmZmVyICpSZXNvdXJjZU1hbmFnZXI6OmdldEJ1ZmZlcih1bnNp
Z25lZCBpbnQgaGFuZGxlKQoreworICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyID0gbUJ1
ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoYnVmZmVyID09IG1CdWZmZXJNYXAuZW5k
KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+c2Vjb25kOworICAgIH0KK30KKworU2hhZGVyICpSZXNv
dXJjZU1hbmFnZXI6OmdldFNoYWRlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIFNoYWRl
ck1hcDo6aXRlcmF0b3Igc2hhZGVyID0gbVNoYWRlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBp
ZiAoc2hhZGVyID09IG1TaGFkZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNoYWRlci0+c2Vjb25k
OworICAgIH0KK30KKworVGV4dHVyZSAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRUZXh0dXJlKHVuc2ln
bmVkIGludCBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSA9PSAwKSByZXR1cm4gTlVMTDsKKwor
ICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmUgPSBtVGV4dHVyZU1hcC5maW5kKGhhbmRs
ZSk7CisKKyAgICBpZiAodGV4dHVyZSA9PSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4g
dGV4dHVyZS0+c2Vjb25kOworICAgIH0KK30KKworUHJvZ3JhbSAqUmVzb3VyY2VNYW5hZ2VyOjpn
ZXRQcm9ncmFtKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgUHJvZ3JhbU1hcDo6aXRlcmF0
b3IgcHJvZ3JhbSA9IG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChwcm9ncmFt
ID09IG1Qcm9ncmFtTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9ncmFtLT5zZWNvbmQ7CisgICAg
fQorfQorCitSZW5kZXJidWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0UmVuZGVyYnVmZmVyKHVu
c2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5k
ZXJidWZmZXIgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChyZW5k
ZXJidWZmZXIgPT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gcmVuZGVyYnVm
ZmVyLT5zZWNvbmQ7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTWFuYWdlcjo6c2V0UmVuZGVy
YnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQoreworICAgIG1SZW5k
ZXJidWZmZXJNYXBbaGFuZGxlXSA9IGJ1ZmZlcjsKK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6
OmNoZWNrQnVmZmVyQWxsb2NhdGlvbih1bnNpZ25lZCBpbnQgYnVmZmVyKQoreworICAgIGlmIChi
dWZmZXIgIT0gMCAmJiAhZ2V0QnVmZmVyKGJ1ZmZlcikpCisgICAgeworICAgICAgICBCdWZmZXIg
KmJ1ZmZlck9iamVjdCA9IG5ldyBCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgbUJ1ZmZlck1hcFti
dWZmZXJdID0gYnVmZmVyT2JqZWN0OworICAgICAgICBidWZmZXJPYmplY3QtPmFkZFJlZigpOwor
ICAgIH0KK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrVGV4dHVyZUFsbG9jYXRpb24o
R0x1aW50IHRleHR1cmUsIFRleHR1cmVUeXBlIHR5cGUpCit7CisgICAgaWYgKCFnZXRUZXh0dXJl
KHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkKKyAgICB7CisgICAgICAgIFRleHR1cmUgKnRleHR1
cmVPYmplY3Q7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gVEVYVFVSRV8yRCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlMkQodGV4dHVyZSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBURVhUVVJFX0NVQkUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4dHVyZUN1YmVNYXAodGV4dHVyZSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbVRleHR1
cmVNYXBbdGV4dHVyZV0gPSB0ZXh0dXJlT2JqZWN0OworICAgICAgICB0ZXh0dXJlT2JqZWN0LT5h
ZGRSZWYoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja1JlbmRlcmJ1
ZmZlckFsbG9jYXRpb24oR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAocmVuZGVyYnVm
ZmVyICE9IDAgJiYgIWdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKQorICAgIHsKKyAgICAg
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBuZXcgUmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlciwgbmV3IENvbG9yYnVmZmVyKDAsIDAsIEdMX1JHQkE0LCAwKSk7CisgICAgICAg
IG1SZW5kZXJidWZmZXJNYXBbcmVuZGVyYnVmZmVyXSA9IHJlbmRlcmJ1ZmZlck9iamVjdDsKKyAg
ICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5hZGRSZWYoKTsKKyAgICB9Cit9CisKK30KClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVz
b3VyY2VNYW5hZ2VyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCww
ICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFn
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUmVzb3VyY2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTYgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlc291cmNlTWFuYWdlci5oIDogRGVmaW5lcyB0aGUgUmVz
b3VyY2VNYW5hZ2VyIGNsYXNzLCB3aGljaCB0cmFja3Mgb2JqZWN0cworLy8gc2hhcmVkIGJ5IG11
bHRpcGxlIEdMIGNvbnRleHRzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJf
SF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFU09VUkNFTUFOQUdFUl9IXworCisjZGVmaW5lIEdMX0FQ
SUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2lmZGVmIF9NU0NfVkVSCisjaW5jbHVk
ZSA8aGFzaF9tYXA+CisjZWxzZQorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjZW5kaWYKKwor
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0hhbmRs
ZUFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFNo
YWRlcjsKK2NsYXNzIFByb2dyYW07CitjbGFzcyBUZXh0dXJlOworY2xhc3MgUmVuZGVyYnVmZmVy
OworCitlbnVtIFRleHR1cmVUeXBlCit7CisgICAgVEVYVFVSRV8yRCwKKyAgICBURVhUVVJFX0NV
QkUsCisKKyAgICBURVhUVVJFX1RZUEVfQ09VTlQsCisgICAgVEVYVFVSRV9VTktOT1dOCit9Owor
CitlbnVtIFNhbXBsZXJUeXBlCit7CisgICAgU0FNUExFUl9QSVhFTCwKKyAgICBTQU1QTEVSX1ZF
UlRFWAorfTsKKworY2xhc3MgUmVzb3VyY2VNYW5hZ2VyCit7CisgIHB1YmxpYzoKKyAgICBSZXNv
dXJjZU1hbmFnZXIoKTsKKyAgICB+UmVzb3VyY2VNYW5hZ2VyKCk7CisKKyAgICB2b2lkIGFkZFJl
ZigpOworICAgIHZvaWQgcmVsZWFzZSgpOworCisgICAgR0x1aW50IGNyZWF0ZUJ1ZmZlcigpOwor
ICAgIEdMdWludCBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOworICAgIEdMdWludCBjcmVhdGVQ
cm9ncmFtKCk7CisgICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBHTHVpbnQgY3JlYXRl
UmVuZGVyYnVmZmVyKCk7CisKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsK
KyAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKKyAgICB2b2lkIGRlbGV0ZVBy
b2dyYW0oR0x1aW50IHByb2dyYW0pOworICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4
dHVyZSk7CisgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7
CisKKyAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBTaGFkZXIgKmdl
dFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBo
YW5kbGUpOworICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7CisgICAgUmVu
ZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgCisgICAgdm9p
ZCBzZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZm
ZXIpOworCisgICAgdm9pZCBjaGVja0J1ZmZlckFsbG9jYXRpb24odW5zaWduZWQgaW50IGJ1ZmZl
cik7CisgICAgdm9pZCBjaGVja1RleHR1cmVBbGxvY2F0aW9uKEdMdWludCB0ZXh0dXJlLCBUZXh0
dXJlVHlwZSB0eXBlKTsKKyAgICB2b2lkIGNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVp
bnQgcmVuZGVyYnVmZmVyKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihSZXNvdXJjZU1hbmFnZXIpOworCisgICAgc3RkOjpzaXplX3QgbVJlZkNvdW50OworCisj
aWZuZGVmIEhBU0hfTUFQCisjIGlmZGVmIF9NU0NfVkVSCisjICBkZWZpbmUgSEFTSF9NQVAgc3Rk
ZXh0OjpoYXNoX21hcAorIyBlbHNlCisjICBkZWZpbmUgSEFTSF9NQVAgc3RkOjp1bm9yZGVyZWRf
bWFwCisjIGVuZGlmCisjZW5kaWYKKworICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBCdWZm
ZXIqPiBCdWZmZXJNYXA7CisgICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7CisgICAgSGFuZGxlQWxs
b2NhdG9yIG1CdWZmZXJIYW5kbGVBbGxvY2F0b3I7CisKKyAgICB0eXBlZGVmIEhBU0hfTUFQPEdM
dWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOworICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOworCisg
ICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOworICAgIFBy
b2dyYW1NYXAgbVByb2dyYW1NYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1Qcm9ncmFtU2hhZGVy
SGFuZGxlQWxsb2NhdG9yOworCisgICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIFRleHR1cmUq
PiBUZXh0dXJlTWFwOworICAgIFRleHR1cmVNYXAgbVRleHR1cmVNYXA7CisgICAgSGFuZGxlQWxs
b2NhdG9yIG1UZXh0dXJlSGFuZGxlQWxsb2NhdG9yOworCisgICAgdHlwZWRlZiBIQVNIX01BUDxH
THVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1hcDsKKyAgICBSZW5kZXJidWZmZXJN
YXAgbVJlbmRlcmJ1ZmZlck1hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3IgbVJlbmRlcmJ1ZmZlckhh
bmRsZUFsbG9jYXRvcjsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRVNPVVJDRU1B
TkFHRVJfSF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTg4IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBTaGFkZXIuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6U2hhZGVyIGNsYXNz
IGFuZCBpdHMgIGRlcml2ZWQgY2xhc3NlcworLy8gVmVydGV4U2hhZGVyIGFuZCBGcmFnbWVudFNo
YWRlci4gSW1wbGVtZW50cyBHTCBzaGFkZXIgb2JqZWN0cyBhbmQgcmVsYXRlZAorLy8gZnVuY3Rp
b25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMCBwYWdlIDI0IGFuZCBzZWN0
aW9uIDMuOCBwYWdlIDg0LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorCisjaW5j
bHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisK
K25hbWVzcGFjZSBnbAorewordm9pZCAqU2hhZGVyOjptRnJhZ21lbnRDb21waWxlciA9IE5VTEw7
Cit2b2lkICpTaGFkZXI6Om1WZXJ0ZXhDb21waWxlciA9IE5VTEw7CisKK1NoYWRlcjo6U2hhZGVy
KFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtSGFuZGxlKGhhbmRs
ZSksIG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlcikKK3sKKyAgICBtU291cmNlID0gTlVMTDsKKyAg
ICBtSGxzbCA9IE5VTEw7CisgICAgbUluZm9Mb2cgPSBOVUxMOworCisgICAgdW5jb21waWxlKCk7
CisgICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7CisKKyAgICBtUmVmQ291bnQgPSAwOworICAgIG1E
ZWxldGVTdGF0dXMgPSBmYWxzZTsKK30KKworU2hhZGVyOjp+U2hhZGVyKCkKK3sKKyAgICBkZWxl
dGVbXSBtU291cmNlOworICAgIGRlbGV0ZVtdIG1IbHNsOworICAgIGRlbGV0ZVtdIG1JbmZvTG9n
OworfQorCitHTHVpbnQgU2hhZGVyOjpnZXRIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBt
SGFuZGxlOworfQorCit2b2lkIFNoYWRlcjo6c2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0
IGNoYXIgKipzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpCit7CisgICAgZGVsZXRlW10gbVNv
dXJjZTsKKyAgICBpbnQgdG90YWxMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3RoW2ldOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdG90YWxMZW5ndGgg
Kz0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Tb3Vy
Y2UgPSBuZXcgY2hhclt0b3RhbExlbmd0aCArIDFdOworICAgIGNoYXIgKmNvZGUgPSBtU291cmNl
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAg
aW50IHN0cmluZ0xlbmd0aDsKKworICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBsZW5ndGhbaV07CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmdMZW5ndGgg
PSAoaW50KXN0cmxlbihzdHJpbmdbaV0pOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweShj
b2RlLCBzdHJpbmdbaV0sIHN0cmluZ0xlbmd0aCk7CisgICAgICAgIGNvZGUgKz0gc3RyaW5nTGVu
Z3RoOworICAgIH0KKworICAgIG1Tb3VyY2VbdG90YWxMZW5ndGhdID0gJ1wwJzsKK30KKworaW50
IFNoYWRlcjo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtSW5mb0xvZykK
KyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
IHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhZGVyOjpn
ZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9n
KQoreworICAgIGludCBpbmRleCA9IDA7CisKKyAgICBpZiAoYnVmU2l6ZSA+IDApCisgICAgewor
ICAgICAgICBpZiAobUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3Rk
OjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAgICAgICAgICBt
ZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGlu
Zm9Mb2dbaW5kZXhdID0gJ1wwJzsKKyAgICB9CisKKyAgICBpZiAobGVuZ3RoKQorICAgIHsKKyAg
ICAgICAgKmxlbmd0aCA9IGluZGV4OworICAgIH0KK30KKworaW50IFNoYWRlcjo6Z2V0U291cmNl
TGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1Tb3VyY2UpCisgICAgeworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1cm4gc3RybGVuKG1Tb3Vy
Y2UpICsgMTsKKyAgICB9Cit9CisKK2ludCBTaGFkZXI6OmdldFRyYW5zbGF0ZWRTb3VyY2VMZW5n
dGgoKSBjb25zdAoreworICAgIGlmICghbUhsc2wpCisgICAgeworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1cm4gc3RybGVuKG1IbHNsKSArIDE7
CisgICAgfQorfQorCit2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsIEdM
c2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpCit7CisgICAgaW50
IGluZGV4ID0gMDsKKworICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7CisgICAgICAgIGlmIChz
b3VyY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAt
IDEsIChpbnQpc3RybGVuKHNvdXJjZSkpOworICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291
cmNlLCBpbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsK
KyAgICB9CisKKyAgICBpZiAobGVuZ3RoKQorICAgIHsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4
OworICAgIH0KK30KKwordm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQoreworICAgIGdldFNvdXJjZUltcGwobVNvdXJj
ZSwgYnVmU2l6ZSwgbGVuZ3RoLCBidWZmZXIpOworfQorCit2b2lkIFNoYWRlcjo6Z2V0VHJhbnNs
YXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVy
KQoreworICAgIGdldFNvdXJjZUltcGwobUhsc2wsIGJ1ZlNpemUsIGxlbmd0aCwgYnVmZmVyKTsK
K30KKworYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKQoreworICAgIHJldHVybiBtSGxzbCAhPSBO
VUxMOworfQorCitjb25zdCBjaGFyICpTaGFkZXI6OmdldEhMU0woKQoreworICAgIHJldHVybiBt
SGxzbDsKK30KKwordm9pZCBTaGFkZXI6OmFkZFJlZigpCit7CisgICAgbVJlZkNvdW50Kys7Cit9
CisKK3ZvaWQgU2hhZGVyOjpyZWxlYXNlKCkKK3sKKyAgICBtUmVmQ291bnQtLTsKKworICAgIGlm
IChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQorICAgIHsKKyAgICAgICAgbVJlc291
cmNlTWFuYWdlci0+ZGVsZXRlU2hhZGVyKG1IYW5kbGUpOworICAgIH0KK30KKwordW5zaWduZWQg
aW50IFNoYWRlcjo6Z2V0UmVmQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtUmVmQ291bnQ7
Cit9CisKK2Jvb2wgU2hhZGVyOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1EZWxldGVTdGF0dXM7Cit9CisKK3ZvaWQgU2hhZGVyOjpmbGFnRm9yRGVsZXRpb24o
KQoreworICAgIG1EZWxldGVTdGF0dXMgPSB0cnVlOworfQorCisvLyBQZXJmb3JtIGEgb25lLXRp
bWUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNoYWRlciBjb21waWxlciAob3IgYWZ0ZXIgYmVpbmcg
ZGVzdHJ1Y3RlZCBieSByZWxlYXNlQ29tcGlsZXIpCit2b2lkIFNoYWRlcjo6aW5pdGlhbGl6ZUNv
bXBpbGVyKCkKK3sKKyAgICBpZiAoIW1GcmFnbWVudENvbXBpbGVyKQorICAgIHsKKyAgICAgICAg
aW50IHJlc3VsdCA9IFNoSW5pdGlhbGl6ZSgpOworCisgICAgICAgIGlmIChyZXN1bHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyByZXNvdXJjZXM7CisgICAgICAg
ICAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZyZXNvdXJjZXMpOworICAgICAgICAgICAgQ29u
dGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKworICAgICAgICAgICAgcmVzb3VyY2VzLk1h
eFZlcnRleEF0dHJpYnMgPSBNQVhfVkVSVEVYX0FUVFJJQlM7CisgICAgICAgICAgICByZXNvdXJj
ZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzsK
KyAgICAgICAgICAgIHJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1h
eGltdW1WYXJ5aW5nVmVjdG9ycygpOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzID0gY29udGV4dC0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKCk7CisgICAgICAgICAgICByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cyA9IGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7CisgICAg
ICAgICAgICByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUzsKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
ID0gY29udGV4dC0+Z2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsKKyAgICAgICAg
ICAgIHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IE1BWF9EUkFXX0JVRkZFUlM7CisgICAgICAg
ICAgICByZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gY29udGV4dC0+c3VwcG9y
dHNEZXJpdmF0aXZlSW5zdHJ1Y3Rpb25zKCkgPyAxIDogMDsKKyAgICAgICAgICAgIC8vIHJlc291
cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0gZ2V0RGlzcGxheSgpLT5pc0QzZDlFeERldmlj
ZSgpID8gMSA6IDA7IC8vIFRPRE86IGNvbW1lbnRlZCBvdXQgdW50aWwgdGhlIGV4dGVuc2lvbiBp
cyBhY3R1YWxseSBzdXBwb3J0ZWQuCisgICAgICAgICAgICByZXNvdXJjZXMuRnJhZ21lbnRQcmVj
aXNpb25IaWdoID0gMTsgICAvLyBTaGFkZXIgTW9kZWwgMisgYWx3YXlzIHN1cHBvcnRzIEZQMjQg
KHMxNmU3KSB3aGljaCBjb3JyZXNwb25kcyB0byBoaWdocAorICAgICAgICAgICAgcmVzb3VyY2Vz
LkVYVF9mcmFnX2RlcHRoID0gMTsgLy8gU2hhZGVyIE1vZGVsIDIrIGFsd2F5cyBzdXBwb3J0cyBl
eHBsaWNpdCBkZXB0aCBvdXRwdXQKKworICAgICAgICAgICAgbUZyYWdtZW50Q29tcGlsZXIgPSBT
aENvbnN0cnVjdENvbXBpbGVyKFNIX0ZSQUdNRU5UX1NIQURFUiwgU0hfR0xFUzJfU1BFQywgU0hf
SExTTF9PVVRQVVQsICZyZXNvdXJjZXMpOworICAgICAgICAgICAgbVZlcnRleENvbXBpbGVyID0g
U2hDb25zdHJ1Y3RDb21waWxlcihTSF9WRVJURVhfU0hBREVSLCBTSF9HTEVTMl9TUEVDLCBTSF9I
TFNMX09VVFBVVCwgJnJlc291cmNlcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU2hh
ZGVyOjpyZWxlYXNlQ29tcGlsZXIoKQoreworICAgIFNoRGVzdHJ1Y3QobUZyYWdtZW50Q29tcGls
ZXIpOworICAgIFNoRGVzdHJ1Y3QobVZlcnRleENvbXBpbGVyKTsKKworICAgIG1GcmFnbWVudENv
bXBpbGVyID0gTlVMTDsKKyAgICBtVmVydGV4Q29tcGlsZXIgPSBOVUxMOworCisgICAgU2hGaW5h
bGl6ZSgpOworfQorCit2b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncygpCit7CisgICAgaWYgKG1I
bHNsKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIv
LyBWYXJ5aW5ncyIpICsgMTI7CisKKyAgICAgICAgd2hpbGUodHJ1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY2hhciB2YXJ5aW5nVHlwZVsyNTZdOworICAgICAgICAgICAgY2hhciB2YXJ5aW5n
TmFtZVsyNTZdOworCisgICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0
YXRpYyAlMjU1cyAlMjU1cyIsIHZhcnlpbmdUeXBlLCB2YXJ5aW5nTmFtZSk7CisKKyAgICAgICAg
ICAgIGlmIChtYXRjaGVzICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoYXIgKmFycmF5ID0gc3Ryc3RyKHZh
cnlpbmdOYW1lLCAiWyIpOworICAgICAgICAgICAgaW50IHNpemUgPSAxOworCisgICAgICAgICAg
ICBpZiAoYXJyYXkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2l6ZSA9IGF0b2ko
YXJyYXkgKyAxKTsKKyAgICAgICAgICAgICAgICAqYXJyYXkgPSAnXDAnOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKFZhcnlpbmcocGFyc2VUeXBlKHZh
cnlpbmdUeXBlKSwgdmFyeWluZ05hbWUsIHNpemUsIGFycmF5ICE9IE5VTEwpKTsKKworICAgICAg
ICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOworICAgICAgICB9CisKKyAgICAg
ICAgbVVzZXNGcmFnQ29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfQ09PUkQiKSAh
PSBOVUxMOworICAgICAgICBtVXNlc0Zyb250RmFjaW5nID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNF
U19GUk9OVF9GQUNJTkciKSAhPSBOVUxMOworICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHN0cnN0
cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfU0laRSIpICE9IE5VTEw7CisgICAgICAgIG1Vc2VzUG9p
bnRDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfQ09PUkQiKSAhPSBOVUxMOwor
ICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19ERVBU
SCIpICE9IE5VTEw7CisgICAgfQorfQorCisvLyBpbml0aWFsaXplL2NsZWFuIHVwIHByZXZpb3Vz
IHN0YXRlCit2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKK3sKKyAgICAvLyBzZXQgYnkgY29tcGls
ZVRvSExTTAorICAgIGRlbGV0ZVtdIG1IbHNsOworICAgIG1IbHNsID0gTlVMTDsKKyAgICBkZWxl
dGVbXSBtSW5mb0xvZzsKKyAgICBtSW5mb0xvZyA9IE5VTEw7CisKKyAgICAvLyBzZXQgYnkgcGFy
c2VWYXJ5aW5ncworICAgIG1WYXJ5aW5ncy5jbGVhcigpOworCisgICAgbVVzZXNGcmFnQ29vcmQg
PSBmYWxzZTsKKyAgICBtVXNlc0Zyb250RmFjaW5nID0gZmFsc2U7CisgICAgbVVzZXNQb2ludFNp
emUgPSBmYWxzZTsKKyAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKKyAgICBtVXNlc0ZyYWdE
ZXB0aCA9IGZhbHNlOworfQorCit2b2lkIFNoYWRlcjo6Y29tcGlsZVRvSExTTCh2b2lkICpjb21w
aWxlcikKK3sKKyAgICAvLyBlbnN1cmUgd2UgZG9uJ3QgcGFzcyBhIE5VTEwgc291cmNlIHRvIHRo
ZSBjb21waWxlcgorICAgIGNvbnN0IGNoYXIgKnNvdXJjZSA9ICJcMCI7CisgICAgaWYgKG1Tb3Vy
Y2UpCisgICAgeworICAgICAgICBzb3VyY2UgPSBtU291cmNlOworICAgIH0KKworICAgIC8vIGVu
c3VyZSB0aGUgY29tcGlsZXIgaXMgbG9hZGVkCisgICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7CisK
KyAgICBpbnQgY29tcGlsZU9wdGlvbnMgPSBTSF9PQkpFQ1RfQ09ERTsKKyAgICBzdGQ6OnN0cmlu
ZyBzb3VyY2VQYXRoOworICAgIGlmIChwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBzb3Vy
Y2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19z
dHIoKSwgc291cmNlLCBzdHJsZW4oc291cmNlKSk7CisgICAgICAgIGNvbXBpbGVPcHRpb25zIHw9
IFNIX0xJTkVfRElSRUNUSVZFUzsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0OworICAgIGlmIChz
b3VyY2VQYXRoLmVtcHR5KCkpCisgICAgeworICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29t
cGlsZXIsICZzb3VyY2UsIDEsIGNvbXBpbGVPcHRpb25zKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1syXSA9CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHNvdXJjZVBhdGguY19zdHIoKSwKKyAgICAgICAgICAgIHNvdXJjZQorICAgICAg
ICB9OworCisgICAgICAgIHJlc3VsdCA9IFNoQ29tcGlsZShjb21waWxlciwgc291cmNlU3RyaW5n
cywgMiwgY29tcGlsZU9wdGlvbnMgfCBTSF9TT1VSQ0VfUEFUSCk7CisgICAgfQorCisgICAgaWYg
KHJlc3VsdCkKKyAgICB7CisgICAgICAgIHNpemVfdCBvYmpDb2RlTGVuID0gMDsKKyAgICAgICAg
U2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZvYmpDb2RlTGVuKTsK
KyAgICAgICAgbUhsc2wgPSBuZXcgY2hhcltvYmpDb2RlTGVuXTsKKyAgICAgICAgU2hHZXRPYmpl
Y3RDb2RlKGNvbXBpbGVyLCBtSGxzbCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHNpemVfdCBpbmZvTG9nTGVuID0gMDsKKyAgICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9J
TkZPX0xPR19MRU5HVEgsICZpbmZvTG9nTGVuKTsKKyAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hh
cltpbmZvTG9nTGVuXTsKKyAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBtSW5mb0xvZyk7
CisKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZyk7CisgICAgfQorfQorCitHTGVudW0g
U2hhZGVyOjpwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpCit7CisgICAgaWYgKHR5
cGUgPT0gImZsb2F0IikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQyIikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9G
TE9BVF9WRUMyOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDMiKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzM7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUg
PT0gImZsb2F0NCIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDNDsKKyAgICB9
CisgICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQyeDIiKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX01BVDI7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0M3gzIikK
KyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQzOworICAgIH0KKyAgICBlbHNlIGlm
ICh0eXBlID09ICJmbG9hdDR4NCIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFU
NDsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIEdMX05PTkU7
Cit9CisKKy8vIHRydWUgaWYgdmFyeWluZyB4IGhhcyBhIGhpZ2hlciBwcmlvcml0eSBpbiBwYWNr
aW5nIHRoYW4geQorYm9vbCBTaGFkZXI6OmNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngs
IGNvbnN0IFZhcnlpbmcgJnkpCit7CisgICAgaWYoeC50eXBlID09IHkudHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB4LnNpemUgPiB5LnNpemU7CisgICAgfQorCisgICAgc3dpdGNoICh4LnR5
cGUpCisgICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gdHJ1ZTsKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUM0OiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0
cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7CisgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Cisg
ICAgICAgIHN3aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVy
biBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiB0cnVlOworICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOworICAgICAg
ICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMzoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMjogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0
dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICAg
IHN3aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzM6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJl
dHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZXJ0ZXhTaGFk
ZXI6OlZlcnRleFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUp
IDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKK3sKK30KKworVmVydGV4U2hhZGVyOjp+VmVydGV4
U2hhZGVyKCkKK3sKK30KKworR0xlbnVtIFZlcnRleFNoYWRlcjo6Z2V0VHlwZSgpCit7CisgICAg
cmV0dXJuIEdMX1ZFUlRFWF9TSEFERVI7Cit9CisKK3ZvaWQgVmVydGV4U2hhZGVyOjp1bmNvbXBp
bGUoKQoreworICAgIFNoYWRlcjo6dW5jb21waWxlKCk7CisKKyAgICAvLyBzZXQgYnkgUGFyc2VB
dHRyaWJ1dGVzCisgICAgbUF0dHJpYnV0ZXMuY2xlYXIoKTsKK30KKwordm9pZCBWZXJ0ZXhTaGFk
ZXI6OmNvbXBpbGUoKQoreworICAgIHVuY29tcGlsZSgpOworCisgICAgY29tcGlsZVRvSExTTCht
VmVydGV4Q29tcGlsZXIpOworICAgIHBhcnNlQXR0cmlidXRlcygpOworICAgIHBhcnNlVmFyeWlu
Z3MoKTsKK30KKworaW50IFZlcnRleFNoYWRlcjo6Z2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6
OnN0cmluZyAmYXR0cmlidXRlTmFtZSkKK3sKKyAgICBpZiAoIWF0dHJpYnV0ZU5hbWUuZW1wdHko
KSkKKyAgICB7CisgICAgICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKyAgICAgICAgZm9yIChB
dHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbUF0dHJpYnV0ZXMuYmVnaW4oKTsg
YXR0cmlidXRlICE9IG1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSA9PSBhdHRyaWJ1dGVOYW1lKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpY0luZGV4OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0
cmlidXRlLT50eXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwor
dm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygpCit7CisgICAgY29uc3QgY2hhciAq
aGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoaGxzbCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNo
YXIgKmlucHV0ID0gc3Ryc3RyKGhsc2wsICIvLyBBdHRyaWJ1dGVzIikgKyAxNDsKKworICAgICAg
ICB3aGlsZSh0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyIGF0dHJpYnV0ZVR5cGVb
MjU2XTsKKyAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlTmFtZVsyNTZdOworCisgICAgICAgICAg
ICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyBfJTI1NXMiLCBhdHRy
aWJ1dGVUeXBlLCBhdHRyaWJ1dGVOYW1lKTsKKworICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0g
MikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbUF0dHJpYnV0ZXMucHVzaF9iYWNrKEF0dHJpYnV0ZShwYXJzZVR5cGUo
YXR0cmlidXRlVHlwZSksIGF0dHJpYnV0ZU5hbWUpKTsKKworICAgICAgICAgICAgaW5wdXQgPSBz
dHJzdHIoaW5wdXQsICI7IikgKyAyOworICAgICAgICB9CisgICAgfQorfQorCitGcmFnbWVudFNo
YWRlcjo6RnJhZ21lbnRTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFu
ZGxlKSA6IFNoYWRlcihtYW5hZ2VyLCBoYW5kbGUpCit7Cit9CisKK0ZyYWdtZW50U2hhZGVyOjp+
RnJhZ21lbnRTaGFkZXIoKQoreworfQorCitHTGVudW0gRnJhZ21lbnRTaGFkZXI6OmdldFR5cGUo
KQoreworICAgIHJldHVybiBHTF9GUkFHTUVOVF9TSEFERVI7Cit9CisKK3ZvaWQgRnJhZ21lbnRT
aGFkZXI6OmNvbXBpbGUoKQoreworICAgIHVuY29tcGlsZSgpOworCisgICAgY29tcGlsZVRvSExT
TChtRnJhZ21lbnRDb21waWxlcik7CisgICAgcGFyc2VWYXJ5aW5ncygpOworICAgIG1WYXJ5aW5n
cy5zb3J0KGNvbXBhcmVWYXJ5aW5nKTsKK30KK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9TaGFkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvU2hhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjcgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIFNoYWRlci5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBnbDo6
U2hhZGVyIGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAorLy8gY2xhc3NlcyBWZXJ0ZXhT
aGFkZXIgYW5kIEZyYWdtZW50U2hhZGVyLiBJbXBsZW1lbnRzIEdMIHNoYWRlciBvYmplY3RzIGFu
ZAorLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAy
LjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24KKy8vIDMuOCBwYWdlIDg0LgorCisjaWZuZGVmIExJQkdM
RVNWMl9TSEFERVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1NIQURFUl9IXworCisjZGVmaW5lIEdM
X0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5j
bHVkZSA8bGlzdD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVz
b3VyY2VNYW5hZ2VyLmgiCisKK25hbWVzcGFjZSBnbAoreworc3RydWN0IFZhcnlpbmcKK3sKKyAg
ICBWYXJ5aW5nKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgaW50IHNpemUs
IGJvb2wgYXJyYXkpCisgICAgICAgIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKSwgc2l6ZShzaXpl
KSwgYXJyYXkoYXJyYXkpLCByZWcoLTEpLCBjb2woLTEpCisgICAgeworICAgIH0KKworICAgIEdM
ZW51bSB0eXBlOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgaW50IHNpemU7ICAgLy8gTnVt
YmVyIG9mICd0eXBlJyBlbGVtZW50cworICAgIGJvb2wgYXJyYXk7CisKKyAgICBpbnQgcmVnOyAg
ICAvLyBGaXJzdCB2YXJ5aW5nIHJlZ2lzdGVyLCBhc3NpZ25lZCBkdXJpbmcgbGluaworICAgIGlu
dCBjb2w7ICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQsIGFzc2lnbmVkIGR1cmluZyBsaW5r
Cit9OworCit0eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKKworY2xhc3Mg
U2hhZGVyCit7CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CisKKyAgcHVibGljOgor
ICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOworCisg
ICAgdmlydHVhbCB+U2hhZGVyKCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgPSAw
OworICAgIEdMdWludCBnZXRIYW5kbGUoKSBjb25zdDsKKworICAgIHZvaWQgZGVsZXRlU291cmNl
KCk7CisgICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmlu
ZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CisgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25z
dDsKKyAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmluZm9Mb2cpOworICAgIGludCBnZXRTb3VyY2VMZW5ndGgoKSBjb25zdDsKKyAgICB2
b2lkIGdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVm
ZmVyKTsKKyAgICBpbnQgZ2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgpIGNvbnN0OworICAgIHZv
aWQgZ2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqYnVmZmVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKKyAgICBib29sIGlzQ29tcGlsZWQoKTsKKyAgICBjb25z
dCBjaGFyICpnZXRITFNMKCk7CisKKyAgICB2b2lkIGFkZFJlZigpOworICAgIHZvaWQgcmVsZWFz
ZSgpOworICAgIHVuc2lnbmVkIGludCBnZXRSZWZDb3VudCgpIGNvbnN0OworICAgIGJvb2wgaXNG
bGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKKyAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOwor
CisgICAgc3RhdGljIHZvaWQgcmVsZWFzZUNvbXBpbGVyKCk7CisKKyAgcHJvdGVjdGVkOgorICAg
IHZvaWQgcGFyc2VWYXJ5aW5ncygpOworCisgICAgdm9pZCBjb21waWxlVG9ITFNMKHZvaWQgKmNv
bXBpbGVyKTsKKworICAgIHZvaWQgZ2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOworCisgICAgc3RhdGljIEdM
ZW51bSBwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpOworICAgIHN0YXRpYyBib29s
IGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOworCisg
ICAgVmFyeWluZ0xpc3QgbVZhcnlpbmdzOworCisgICAgYm9vbCBtVXNlc0ZyYWdDb29yZDsKKyAg
ICBib29sIG1Vc2VzRnJvbnRGYWNpbmc7CisgICAgYm9vbCBtVXNlc1BvaW50U2l6ZTsKKyAgICBi
b29sIG1Vc2VzUG9pbnRDb29yZDsKKyAgICBib29sIG1Vc2VzRnJhZ0RlcHRoOworCisgICAgc3Rh
dGljIHZvaWQgKm1GcmFnbWVudENvbXBpbGVyOworICAgIHN0YXRpYyB2b2lkICptVmVydGV4Q29t
cGlsZXI7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2hhZGVy
KTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7CisKKyAgICBjb25zdCBHTHVpbnQg
bUhhbmRsZTsKKyAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OyAgICAgLy8gTnVtYmVyIG9mIHBy
b2dyYW0gb2JqZWN0cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bworICAgIGJvb2wgbURlbGV0
ZVN0YXR1czsgICAgICAgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4g
YmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKKworICAgIGNoYXIgKm1Tb3VyY2U7Cisg
ICAgY2hhciAqbUhsc2w7CisgICAgY2hhciAqbUluZm9Mb2c7CisKKyAgICBSZXNvdXJjZU1hbmFn
ZXIgKm1SZXNvdXJjZU1hbmFnZXI7Cit9OworCitzdHJ1Y3QgQXR0cmlidXRlCit7CisgICAgQXR0
cmlidXRlKCkgOiB0eXBlKEdMX05PTkUpLCBuYW1lKCIiKQorICAgIHsKKyAgICB9CisKKyAgICBB
dHRyaWJ1dGUoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSA6IHR5cGUodHlw
ZSksIG5hbWUobmFtZSkKKyAgICB7CisgICAgfQorCisgICAgR0xlbnVtIHR5cGU7CisgICAgc3Rk
OjpzdHJpbmcgbmFtZTsKK307CisKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRy
aWJ1dGVBcnJheTsKKworY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgoreworICAg
IGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OworCisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhTaGFk
ZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKKworICAgIH5WZXJ0
ZXhTaGFkZXIoKTsKKworICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY29tcGlsZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKKyAgICBpbnQg
Z2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSk7CisKKyAg
cHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4U2hhZGVyKTsKKwor
ICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGVzKCk7CisKKyAgICBBdHRyaWJ1dGVBcnJheSBtQXR0cmli
dXRlczsKK307CisKK2NsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRlcgoreworICBw
dWJsaWM6CisgICAgRnJhZ21lbnRTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVp
bnQgaGFuZGxlKTsKKworICAgIH5GcmFnbWVudFNoYWRlcigpOworCisgICAgdmlydHVhbCBHTGVu
dW0gZ2V0VHlwZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCk7CisKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhZ21lbnRTaGFkZXIpOworfTsKK30KKwor
I2VuZGlmICAgLy8gTElCR0xFU1YyX1NIQURFUl9IXwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MTA3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0dXJlLmNwcDogSW1wbGVtZW50cyB0
aGUgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMKKy8vIFRleHR1cmUy
RCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZCBy
ZWxhdGVkCisvLyBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcg
cGFnZSA2My4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkVH
TC9EaXNwbGF5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZl
ci5oIgorCituYW1lc3BhY2UgZ2wKK3sKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6bUN1
cnJlbnRUZXh0dXJlU2VyaWFsID0gMTsKKworc3RhdGljIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVy
ZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50
ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgY2FzZSBHTF9ERVBUSDI0
X1NURU5DSUw4X09FUzoKKyAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRaOworICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQxOworICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgorICAgICAgICByZXR1cm4g
RDNERk1UX0RYVDM7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU6CisgICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9F
WFQ6CisgICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VY
VDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBMzJGX0VYVDoKKyAgICAgICAgcmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOwor
ICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAg
ICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhU
OgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgorICAgICAgICByZXR1cm4g
RDNERk1UX0ExNkIxNkcxNlIxNkY7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgorICAg
ICAgICBpZiAoZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTDg7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKKyAgICAgICAgaWYg
KGdldENvbnRleHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThMODsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAg
ICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKKyAgICB9CisKKyAgICByZXR1cm4gRDNERk1U
X0E4UjhHOEI4OworfQorCitzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQz
REZPUk1BVCBmb3JtYXQpCit7CisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBzd2l0Y2goZm9ybWF0KQorICAgIHsK
KyAgICAgIGNhc2UgRDNERk1UX0w4OgorICAgICAgY2FzZSBEM0RGTVRfQThMODoKKyAgICAgIGNh
c2UgRDNERk1UX0RYVDE6CisgICAgICBjYXNlIEQzREZNVF9EWFQzOgorICAgICAgY2FzZSBEM0RG
TVRfRFhUNToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4
Qjg6CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX0ExNkIx
NkcxNlIxNkY6CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVV
c2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUpCit7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSAwOworCisgICAgaWYgKGQzZGZtdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJ
TDsKKyAgICB9CisgICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKElzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKSkpCisgICAgeworICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQ7CisgICAgfQorICAgIHJldHVybiBkM2R1c2FnZTsKK30KKworc3RhdGljIHZvaWQgTWFr
ZVZhbGlkU2l6ZShib29sIGlzSW1hZ2UsIGJvb2wgaXNDb21wcmVzc2VkLCBHTHNpemVpICpyZXF1
ZXN0V2lkdGgsIEdMc2l6ZWkgKnJlcXVlc3RIZWlnaHQsIGludCAqbGV2ZWxPZmZzZXQpCit7Cisg
ICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOworCisgICAgaWYgKGlzQ29tcHJlc3NlZCkKKyAgICB7
CisgICAgICAgIC8vIERvbid0IGV4cGFuZCB0aGUgc2l6ZSBvZiBmdWxsIHRleHR1cmVzIHRoYXQg
YXJlIGF0IGxlYXN0IDR4NAorICAgICAgICAvLyBhbHJlYWR5LgorICAgICAgICBpZiAoaXNJbWFn
ZSB8fCAqcmVxdWVzdFdpZHRoIDwgNCB8fCAqcmVxdWVzdEhlaWdodCA8IDQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHdoaWxlICgqcmVxdWVzdFdpZHRoICUgNCAhPSAwIHx8ICpyZXF1ZXN0SGVp
Z2h0ICUgNCAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpyZXF1ZXN0V2lk
dGggPDw9IDE7CisgICAgICAgICAgICAgICAgKnJlcXVlc3RIZWlnaHQgPDw9IDE7CisgICAgICAg
ICAgICAgICAgdXBzYW1wbGVDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgICpsZXZlbE9mZnNldCA9IHVwc2FtcGxlQ291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIENv
cHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJm
YWNlOSAqc291cmNlKQoreworICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2sgPSB7MH07Cisg
ICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07CisgICAgCisgICAgc291cmNlLT5Mb2Nr
UmVjdCgmc291cmNlTG9jaywgTlVMTCwgMCk7CisgICAgZGVzdC0+TG9ja1JlY3QoJmRlc3RMb2Nr
LCBOVUxMLCAwKTsKKyAgICAKKyAgICBpZiAoc291cmNlTG9jay5wQml0cyAmJiBkZXN0TG9jay5w
Qml0cykKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgICAgICBzb3Vy
Y2UtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgIGludCByb3dzID0gZHg6OklzQ29tcHJlc3Nl
ZEZvcm1hdChkZXNjLkZvcm1hdCkgPyBkZXNjLkhlaWdodCAvIDQgOiBkZXNjLkhlaWdodDsKKyAg
ICAgICAgaW50IGJ5dGVzID0gZHg6OkNvbXB1dGVSb3dTaXplKGRlc2MuRm9ybWF0LCBkZXNjLldp
ZHRoKTsKKyAgICAgICAgQVNTRVJUKGJ5dGVzIDw9IHNvdXJjZUxvY2suUGl0Y2ggJiYgYnl0ZXMg
PD0gZGVzdExvY2suUGl0Y2gpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCByb3dzOyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSgoY2hhciopZGVzdExvY2sucEJpdHMg
KyBkZXN0TG9jay5QaXRjaCAqIGksIChjaGFyKilzb3VyY2VMb2NrLnBCaXRzICsgc291cmNlTG9j
ay5QaXRjaCAqIGksIGJ5dGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNvdXJjZS0+VW5sb2Nr
UmVjdCgpOworICAgICAgICBkZXN0LT5VbmxvY2tSZWN0KCk7CisgICAgfQorICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKK30KKworSW1hZ2U6OkltYWdlKCkKK3sKKyAgICBtV2lkdGggPSAwOyAKKyAg
ICBtSGVpZ2h0ID0gMDsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBHTF9OT05FOworCisgICAgbVN1
cmZhY2UgPSBOVUxMOworCisgICAgbURpcnR5ID0gZmFsc2U7CisKKyAgICBtRDNEUG9vbCA9IEQz
RFBPT0xfU1lTVEVNTUVNOworICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKK30KKwor
SW1hZ2U6On5JbWFnZSgpCit7CisgICAgaWYgKG1TdXJmYWNlKQorICAgIHsKKyAgICAgICAgbVN1
cmZhY2UtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK2Jvb2wgSW1hZ2U6OnJlZGVmaW5lKEdMaW50
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3Jj
ZVJlbGVhc2UpCit7CisgICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fAorICAgICAgICBtSGVpZ2h0
ICE9IGhlaWdodCB8fAorICAgICAgICBtSW50ZXJuYWxGb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQg
fHwKKyAgICAgICAgZm9yY2VSZWxlYXNlKQorICAgIHsKKyAgICAgICAgbVdpZHRoID0gd2lkdGg7
CisgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGlu
dGVybmFsZm9ybWF0OworICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2ls
bCBiZSB1c2VkCisgICAgICAgIG1EM0RGb3JtYXQgPSBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9y
bWF0KGludGVybmFsZm9ybWF0KTsKKworICAgICAgICBpZiAobVN1cmZhY2UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtU3VyZmFjZSA9
IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQoreworICAgIGlm
KG1TdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIElEaXJlY3Qz
RFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3
U3VyZmFjZSA9IE5VTEw7CisgICAgY29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZ
U1RFTU1FTTsKKyAgICBjb25zdCBEM0RGT1JNQVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7
CisgICAgQVNTRVJUKGQzZEZvcm1hdCAhPSBEM0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZl
ciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVyZXMKKworICAgIGlmIChtV2lkdGggIT0gMCAmJiBt
SGVpZ2h0ICE9IDApCisgICAgeworICAgICAgICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKKyAgICAg
ICAgR0xzaXplaSByZXF1ZXN0V2lkdGggPSBtV2lkdGg7CisgICAgICAgIEdMc2l6ZWkgcmVxdWVz
dEhlaWdodCA9IG1IZWlnaHQ7CisgICAgICAgIE1ha2VWYWxpZFNpemUodHJ1ZSwgSXNDb21wcmVz
c2VkKG1JbnRlcm5hbEZvcm1hdCksICZyZXF1ZXN0V2lkdGgsICZyZXF1ZXN0SGVpZ2h0LCAmbGV2
ZWxUb0ZldGNoKTsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVh
dGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwg
MCwgZDNkRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvb2xUb1VzZSwgJm5ld1RleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAg
ICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZhY2UgZmFpbGVkLiIpOworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAg
bmV3VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwgJm5ld1N1cmZhY2UpOwor
ICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgbVN1cmZhY2UgPSBu
ZXdTdXJmYWNlOworICAgIG1EaXJ0eSA9IGZhbHNlOworICAgIG1EM0RQb29sID0gcG9vbFRvVXNl
OworfQorCitIUkVTVUxUIEltYWdlOjpsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBj
b25zdCBSRUNUICpyZWN0KQoreworICAgIGNyZWF0ZVN1cmZhY2UoKTsKKworICAgIEhSRVNVTFQg
cmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOworCisgICAgaWYgKG1TdXJmYWNlKQorICAgIHsK
KyAgICAgICAgcmVzdWx0ID0gbVN1cmZhY2UtPkxvY2tSZWN0KGxvY2tlZFJlY3QsIHJlY3QsIDAp
OworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIG1EaXJ0eSA9
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbWFnZTo6dW5s
b2NrKCkKK3sKKyAgICBpZiAobVN1cmZhY2UpCisgICAgeworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgfQorfQorCitib29sIEltYWdlOjppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25z
dAoreyAgICAKKyAgICByZXR1cm4gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShnZXREM0RGb3Jt
YXQoKSk7Cit9CisKK0QzREZPUk1BVCBJbWFnZTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK3sKKyAg
ICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVk
ZWZpbmVkIGZpcnN0CisgICAgLy8gd2hpY2ggd291bGQgYmUgYSBidWcgYnkgdGhlIGNhbGxlcgor
ICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKTsKKworICAgIHJldHVybiBt
RDNERm9ybWF0OworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqSW1hZ2U6OmdldFN1cmZhY2UoKQor
eworICAgIGNyZWF0ZVN1cmZhY2UoKTsKKworICAgIHJldHVybiBtU3VyZmFjZTsKK30KKwordm9p
ZCBJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpCit7
CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7
CisgICAgQVNTRVJUKGRlc2MuUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOworCisgICAgaWYgKChH
THNpemVpKWRlc2MuV2lkdGggPT0gbVdpZHRoICYmIChHTHNpemVpKWRlc2MuSGVpZ2h0ID09IG1I
ZWlnaHQpCisgICAgeworICAgICAgICBpZiAobVN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmZhY2UsIG1TdXJmYWNlKTsKKyAgICAgICAgICAg
IG1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKworICAgICAgICBtU3VyZmFjZSA9IHN1
cmZhY2U7CisgICAgICAgIG1EM0RQb29sID0gZGVzYy5Qb29sOworICAgIH0KK30KKwordm9pZCBJ
bWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
eworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgpOwor
CisgICAgaWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkK
KyAgICB7CisgICAgICAgIFJFQ1QgcmVjdDsKKyAgICAgICAgcmVjdC5sZWZ0ID0geG9mZnNldDsK
KyAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0OworICAgICAgICByZWN0LnJpZ2h0ID0geG9mZnNl
dCArIHdpZHRoOworICAgICAgICByZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7CisKKyAg
ICAgICAgUE9JTlQgcG9pbnQgPSB7cmVjdC5sZWZ0LCByZWN0LnRvcH07CisKKyAgICAgICAgaWYg
KG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCkKKyAgICAgICAgeworICAgICAgICAgICAgRDNE
U1VSRkFDRV9ERVNDIGRlc2M7CisgICAgICAgICAgICBzb3VyY2VTdXJmYWNlLT5HZXREZXNjKCZk
ZXNjKTsKKworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmYgPSAwOworICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5T
dXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9TWVNU
RU1NRU0sICZzdXJmLCBOVUxMKTsKKworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvcHlMb2NrYWJsZVN1cmZhY2VzKHN1
cmYsIHNvdXJjZVN1cmZhY2UpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdldERldmljZSgp
LT5VcGRhdGVTdXJmYWNlKHN1cmYsICZyZWN0LCBkZXN0U3VyZmFjZSwgJnBvaW50KTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICAgICAgICAgIHN1
cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZVN1cmZhY2U6IHNvdXJjZSBtdXN0IGJlIFNZ
U1RFTU1FTSwgZGVzdCBtdXN0IGJlIERFRkFVTFQgcG9vbHMKKyAgICAgICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2Uoc291cmNlU3VyZmFjZSwgJnJlY3Qs
IGRlc3RTdXJmYWNlLCAmcG9pbnQpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3Rhbmds
ZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMg
c3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0CisvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwg
cmVjdGFuZ2xlLgordm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQoreworICAgIFJFQ1Qg
bG9ja1JlY3QgPQorICAgIHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgeG9m
ZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKKworICAgIEQzRExPQ0tFRF9S
RUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0
KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisKKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIG1JbnRl
cm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKKworICAgIHN3aXRjaCAobUludGVybmFsRm9y
bWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKKyAgICAgICAgaWYgKHN1cHBv
cnRzU1NFMigpKQorICAgICAgICB7CisgICAgICAgICAgICBsb2FkQWxwaGFEYXRhU1NFMih3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbG9hZEFs
cGhhRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U4X0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZURhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3Jt
YXQoKSA9PSBEM0RGTVRfTDgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUxQSEEz
MkZfRVhUOgorICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VG
bG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VY
VDoKKyAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZUhh
bGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5D
RThfQUxQSEE4X0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQz
REZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
MTZGX0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICAgIGxvYWRSR0JV
Qnl0ZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAg
ICAgICAgbG9hZFJHQjU2NURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1JHQkE4X09FUzoKKyAgICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQorICAgICAgICB7CisgICAg
ICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgICBsb2Fk
UkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0I1X0Ex
OgorICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9CR1JBOF9FWFQ6CisgICAgICAgIGxvYWRCR1JBRGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBi
cmVhazsKKyAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90
IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAorICAgICAgY2FzZSBHTF9S
R0IzMkZfRVhUOgorICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgorICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6CisgICAg
ICAgIGxvYWRSR0JBRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9SR0JBMTZGX0VYVDoKKyAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAg
ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCisgICAgfQorCisgICAg
dW5sb2NrKCk7Cit9CisKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKKyAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsKKyAgICAKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CisgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gMDsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOworICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlW3hdOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEltYWdlOjps
b2FkQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCBm
bG9hdCAqc291cmNlID0gTlVMTDsKKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2gpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7CisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMV0gPSAwOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKKyAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsK
KyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7CisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0g
MDsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
LCBib29sIG5hdGl2ZSkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2Ug
PSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoOworCisgICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZv
cm1hdAorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3hdOworICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKKyAg
ICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07CisgICAgICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlICAgLy8gTDggZGVzdGluYXRpb24gZm9ybWF0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKK3sKKyAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKKyAgICBmbG9hdCAqZGVz
dCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsK
KyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAg
ICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOworICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsK
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IDEuMGY7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2U6
OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKKyAgICB1bnNp
Z25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0
cHV0UGl0Y2gpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsg
Ly8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVw
cmVzZW50YXRpb24gb2YgMQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29u
c3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2ln
bmVkIGNoYXIgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOworICAgICAgICAK
KyAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBd
OworICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07CisgICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KGRlc3Qs
IHNvdXJjZSwgd2lkdGggKiAyKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0Cit7CisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CisgICAgZmxvYXQgKmRlc3Qg
PSBOVUxMOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7Cisg
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIq
eCswXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07CisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0ICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKKwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKKyAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CisgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNv
dXJjZVsyKngrMF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBd
OworICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOworICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDJdOworICAgICAgICAgICAgZGVz
dFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07CisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IDB4RkY7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKKworICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsK
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAo
KHJnYmEgJiAweDA3RTApID4+IDkpOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChy
Z2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOworICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJ
bWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25z
dCBmbG9hdCAqc291cmNlID0gTlVMTDsKKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7CisKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyAr
IDBdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07Cisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IDEuMGY7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sK
KyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBz
aG9ydCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOworICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07CisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKKyAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9
IDA6IDE2Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQorICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7
CisgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGlu
dCAqZGVzdCA9IE5VTEw7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAg
ICB7CisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOworCisg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0W3hd
ID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKKworICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOworICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChyZ2JhICYgMHgwMEYwKSA+PiA0KTsKKyAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJn
YmEgJiAweDBGMDApID4+IDgpOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2Jh
ICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4gMTIpOworICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAw
RikgPj4gMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1
MURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
KnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CisKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsK
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOworICAgICAgICAgICAgZGVz
dFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkg
Pj4gMyk7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3QzApID4+
IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKKyAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAwOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEltYWdlOjpsb2FkUkdCQUZsb2F0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Cisg
ICAgZmxvYXQgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxv
YXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKKyAgICAgICAg
bWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7CisgICAgfQorfQorCit2b2lkIEltYWdl
Ojpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBOVUxMOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAg
ICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOworICAgICAgICBtZW1jcHkoZGVz
dCwgc291cmNlLCB3aWR0aCAqIDgpOworICAgIH0KK30KKwordm9pZCBJbWFnZTo6bG9hZEJHUkFE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNl
ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKKworICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2UgPSBzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7CisgICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaDsKKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7CisgICAgfQor
fQorCit2b2lkIEltYWdlOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpIHsKKyAgICBBU1NFUlQoeG9mZnNldCAl
IDQgPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworCisgICAgUkVDVCBsb2Nr
UmVjdCA9IHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgeG9mZnNldCArIHdp
ZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKKworICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tl
ZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKKyAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
R0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwg
bUludGVybmFsRm9ybWF0KTsKKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJl
c3NlZFBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQpOworICAgIGludCByb3dzID0gaW5wdXRT
aXplIC8gaW5wdXRQaXRjaDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKKyAg
ICB7CisgICAgICAgIG1lbWNweSgodm9pZCopKChCWVRFKilsb2NrZWQucEJpdHMgKyBpICogbG9j
a2VkLlBpdGNoKSwgKHZvaWQqKSgoQllURSopaW5wdXQgKyBpICogaW5wdXRQaXRjaCksIGlucHV0
UGl0Y2gpOworICAgIH0KKworICAgIHVubG9jaygpOworfQorCisvLyBUaGlzIGltcGxlbWVudHMg
Z2xDb3B5VGV4W1N1Yl1JbWFnZTJEIGZvciBub24tcmVuZGVyYWJsZSBpbnRlcm5hbCB0ZXh0dXJl
IGZvcm1hdHMgYW5kIGluY29tcGxldGUgdGV4dHVyZXMKK3ZvaWQgSW1hZ2U6OmNvcHkoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpCit7CisgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnJlbmRlclRhcmdldERhdGEgPSBOVUxMOworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
cmlwdGlvbjsKKyAgICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKyAgICAK
KyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNl
KGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQsIGRlc2NyaXB0aW9uLkZvcm1h
dCwgRDNEUE9PTF9TWVNURU1NRU0sICZyZW5kZXJUYXJnZXREYXRhLCBOVUxMKTsKKworICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBt
YXRjaGluZyBkZXN0aW5hdGlvbiBzdXJmYWNlLiIpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2aWNlLT5HZXRSZW5kZXJU
YXJnZXREYXRhKHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0RGF0YSk7CisKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkdldFJlbmRlclRhcmdldERhdGEgdW5l
eHBlY3RlZGx5IGZhaWxlZC4iKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgp
OworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAg
UkVDVCBzb3VyY2VSZWN0ID0ge3gsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodH07CisgICAgUkVD
VCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQg
KyBoZWlnaHR9OworCisgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9IHswfTsKKyAgICBy
ZXN1bHQgPSByZW5kZXJUYXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgJnNvdXJjZVJl
Y3QsIDApOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZh
bGlkKS4iKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgRDNETE9DS0VEX1JF
Q1QgZGVzdExvY2sgPSB7MH07CisgICAgcmVzdWx0ID0gbG9jaygmZGVzdExvY2ssICZkZXN0UmVj
dCk7CisgICAgCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJl
IGludmFsaWQpLiIpOworICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7Cisg
ICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChkZXN0TG9jay5wQml0cyAmJiBz
b3VyY2VMb2NrLnBCaXRzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0g
KHVuc2lnbmVkIGNoYXIqKXNvdXJjZUxvY2sucEJpdHM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSAodW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7CisKKyAgICAgICAgc3dpdGNo
IChkZXNjcmlwdGlvbi5Gb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzREZNVF9Y
OFI4RzhCODoKKyAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgICAgIHN3
aXRjaChnZXREM0RGb3JtYXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAg
ICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIDQgKiB3aWR0
aCk7CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Cisg
ICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9M
ODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFt4XSA9IHNvdXJjZVt4ICogNCArIDJdOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAgICAgICAg
ICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgorICAg
ICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3gg
KiAyICsgMF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICBzd2l0Y2goZ2V0
RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2UpW3hdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAocmdiICYgMHhGODAw
KSA+PiA4OworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBncmVlbiA9IChy
Z2IgJiAweDA3RTApID4+IDM7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IGJsdWUgPSAocmdiICYgMHgwMDFGKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDYpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFt4ICsgM10gPSAweEZGOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAg
ICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgICAg
ICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBy
ZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0W3hdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAg
ICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9y
bWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4
OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCBhcmdiID0gKCh1bnNpZ25lZCBzaG9ydCopc291cmNlKVt4XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gKGFyZ2IgJiAweDdDMDApID4+
IDc7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVuID0gKGFyZ2Ig
JiAweDAzRTApID4+IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJs
dWUgPSAoYXJnYiAmIDB4MDAxRikgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rb
eCArIDBdID0gYmx1ZSB8IChibHVlID4+IDUpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFt4ICsgMV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeCArIDNdID0gMHhGRjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAg
ICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAg
ICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IGFyZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2UpW3hdOworICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAoYXJnYiAmIDB4N0MwMCkgPj4gNzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ3JlZW4gPSAoYXJnYiAmIDB4MDNFMCkg
Pj4gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmx1ZSA9IChhcmdi
ICYgMHgwMDFGKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBh
bHBoYSA9IChzaWduZWQgc2hvcnQpYXJnYiA+PiAxNTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeCArIDBdID0gYmx1ZSB8IChibHVlID4+IDUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFt4ICsgMV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKKyAgICAgICAgICAg
ICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgorICAgICAg
ICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbeF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
QThMODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IChzaWduZWQgY2hh
cilzb3VyY2VbeCAqIDIgKyAxXSA+PiA3OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAgICAgICAgICAg
ICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHVubG9jaygpOworICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsK
KworICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKKworICAgIG1EaXJ0eSA9IHRydWU7
Cit9CisKK25hbWVzcGFjZQoreworc3RydWN0IEw4Cit7CisgICAgdW5zaWduZWQgY2hhciBMOwor
CisgICAgc3RhdGljIHZvaWQgYXZlcmFnZShMOCAqZHN0LCBjb25zdCBMOCAqc3JjMSwgY29uc3Qg
TDggKnNyYzIpCisgICAgeworICAgICAgICBkc3QtPkwgPSAoKHNyYzEtPkwgXiBzcmMyLT5MKSA+
PiAxKSArIChzcmMxLT5MICYgc3JjMi0+TCk7CisgICAgfQorfTsKKworc3RydWN0IEE4TDgKK3sK
KyAgICB1bnNpZ25lZCBjaGFyIEw7CisgICAgdW5zaWduZWQgY2hhciBBOworCisgICAgc3RhdGlj
IHZvaWQgYXZlcmFnZShBOEw4ICpkc3QsIGNvbnN0IEE4TDggKnNyYzEsIGNvbnN0IEE4TDggKnNy
YzIpCisgICAgeworICAgICAgICAqKHVuc2lnbmVkIHNob3J0Kilkc3QgPSAoKCgqKHVuc2lnbmVk
IHNob3J0KilzcmMxIF4gKih1bnNpZ25lZCBzaG9ydCopc3JjMikgJiAweEZFRkUpID4+IDEpICsg
KCoodW5zaWduZWQgc2hvcnQqKXNyYzEgJiAqKHVuc2lnbmVkIHNob3J0KilzcmMyKTsKKyAgICB9
Cit9OworCitzdHJ1Y3QgQThSOEc4QjgKK3sKKyAgICB1bnNpZ25lZCBjaGFyIEI7CisgICAgdW5z
aWduZWQgY2hhciBHOworICAgIHVuc2lnbmVkIGNoYXIgUjsKKyAgICB1bnNpZ25lZCBjaGFyIEE7
CisKKyAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKEE4UjhHOEI4ICpkc3QsIGNvbnN0IEE4UjhHOEI4
ICpzcmMxLCBjb25zdCBBOFI4RzhCOCAqc3JjMikKKyAgICB7CisgICAgICAgICoodW5zaWduZWQg
aW50Kilkc3QgPSAoKCgqKHVuc2lnbmVkIGludCopc3JjMSBeICoodW5zaWduZWQgaW50KilzcmMy
KSAmIDB4RkVGRUZFRkUpID4+IDEpICsgKCoodW5zaWduZWQgaW50KilzcmMxICYgKih1bnNpZ25l
ZCBpbnQqKXNyYzIpOworICAgIH0KK307CisKK3N0cnVjdCBBMTZCMTZHMTZSMTZGCit7CisgICAg
dW5zaWduZWQgc2hvcnQgUjsKKyAgICB1bnNpZ25lZCBzaG9ydCBHOworICAgIHVuc2lnbmVkIHNo
b3J0IEI7CisgICAgdW5zaWduZWQgc2hvcnQgQTsKKworICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2Uo
QTE2QjE2RzE2UjE2RiAqZHN0LCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMxLCBjb25zdCBBMTZC
MTZHMTZSMTZGICpzcmMyKQorICAgIHsKKyAgICAgICAgZHN0LT5SID0gZmxvYXQzMlRvRmxvYXQx
NigoZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5SKSArIGZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+Uikp
ICogMC41Zik7CisgICAgICAgIGRzdC0+RyA9IGZsb2F0MzJUb0Zsb2F0MTYoKGZsb2F0MTZUb0Zs
b2F0MzIoc3JjMS0+RykgKyBmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAuNWYpOworICAg
ICAgICBkc3QtPkIgPSBmbG9hdDMyVG9GbG9hdDE2KChmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPkIp
ICsgZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5CKSkgKiAwLjVmKTsKKyAgICAgICAgZHN0LT5BID0g
ZmxvYXQzMlRvRmxvYXQxNigoZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5BKSArIGZsb2F0MTZUb0Zs
b2F0MzIoc3JjMi0+QSkpICogMC41Zik7CisgICAgfQorfTsKKworc3RydWN0IEEzMkIzMkczMlIz
MkYKK3sKKyAgICBmbG9hdCBSOworICAgIGZsb2F0IEc7CisgICAgZmxvYXQgQjsKKyAgICBmbG9h
dCBBOworCisgICAgc3RhdGljIHZvaWQgYXZlcmFnZShBMzJCMzJHMzJSMzJGICpkc3QsIGNvbnN0
IEEzMkIzMkczMlIzMkYgKnNyYzEsIGNvbnN0IEEzMkIzMkczMlIzMkYgKnNyYzIpCisgICAgewor
ICAgICAgICBkc3QtPlIgPSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKKyAgICAgICAgZHN0
LT5HID0gKHNyYzEtPkcgKyBzcmMyLT5HKSAqIDAuNWY7CisgICAgICAgIGRzdC0+QiA9IChzcmMx
LT5CICsgc3JjMi0+QikgKiAwLjVmOworICAgICAgICBkc3QtPkEgPSAoc3JjMS0+QSArIHNyYzIt
PkEpICogMC41ZjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgR2Vu
ZXJhdGVNaXAodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVp
Z2h0LAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBp
bnQgc291cmNlUGl0Y2gsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRh
LCBpbnQgZGVzdFBpdGNoKQoreworICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4
KDFVLCBzb3VyY2VXaWR0aCA+PiAxKTsKKyAgICB1bnNpZ25lZCBpbnQgbWlwSGVpZ2h0ID0gc3Rk
OjptYXgoMVUsIHNvdXJjZUhlaWdodCA+PiAxKTsKKworICAgIGlmIChzb3VyY2VIZWlnaHQgPT0g
MSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzb3VyY2VXaWR0aCAhPSAxKTsKKworICAgICAgICBj
b25zdCBUICpzcmMgPSAoY29uc3QgVCopc291cmNlRGF0YTsKKyAgICAgICAgVCAqZHN0ID0gKFQq
KWRlc3REYXRhOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgbWlwV2lk
dGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgVDo6YXZlcmFnZSgmZHN0W3hdLCAmc3Jj
W3ggKiAyXSwgJnNyY1t4ICogMiArIDFdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlm
IChzb3VyY2VXaWR0aCA9PSAxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNvdXJjZUhlaWdodCAh
PSAxKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8IG1pcEhlaWdodDsg
eSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpzcmMwID0gKGNvbnN0IFQqKShz
b3VyY2VEYXRhICsgeSAqIDIgKiBzb3VyY2VQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpz
cmMxID0gKGNvbnN0IFQqKShzb3VyY2VEYXRhICsgeSAqIDIgKiBzb3VyY2VQaXRjaCArIHNvdXJj
ZVBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IChUKikoZGVzdERhdGEgKyB5ICogZGVzdFBp
dGNoKTsKKworICAgICAgICAgICAgVDo6YXZlcmFnZShkc3QsIHNyYzAsIHNyYzEpOworICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHkg
PSAwOyB5IDwgbWlwSGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFQg
KnNyYzAgPSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICogMiAqIHNvdXJjZVBpdGNoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICogMiAq
IHNvdXJjZVBpdGNoICsgc291cmNlUGl0Y2gpOworICAgICAgICAgICAgVCAqZHN0ID0gKFQqKShk
ZXN0RGF0YSArIHkgKiBkZXN0UGl0Y2gpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgVCB0bXAwOworICAgICAgICAgICAgICAgIFQgdG1wMTsKKworICAgICAgICAgICAgICAgIFQ6
OmF2ZXJhZ2UoJnRtcDAsICZzcmMwW3ggKiAyXSwgJnNyYzBbeCAqIDIgKyAxXSk7CisgICAgICAg
ICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgJnNyYzFbeCAqIDJdLCAmc3JjMVt4ICogMiArIDFd
KTsKKyAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZkc3RbeF0sICZ0bXAwLCAmdG1wMSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR2VuZXJhdGVNaXAoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3Vy
ZmFjZSkKK3sKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzdERlc2M7CisgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXN0U3VyZmFjZS0+R2V0RGVzYygmZGVzdERlc2MpOworICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICBEM0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKKyAgICByZXN1
bHQgPSBzb3VyY2VTdXJmYWNlLT5HZXREZXNjKCZzb3VyY2VEZXNjKTsKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworCisgICAgQVNTRVJUKHNvdXJjZURlc2MuRm9ybWF0ID09IGRlc3RE
ZXNjLkZvcm1hdCk7CisgICAgQVNTRVJUKHNvdXJjZURlc2MuV2lkdGggPT0gMSB8fCBzb3VyY2VE
ZXNjLldpZHRoIC8gMiA9PSBkZXN0RGVzYy5XaWR0aCk7CisgICAgQVNTRVJUKHNvdXJjZURlc2Mu
SGVpZ2h0ID09IDEgfHwgc291cmNlRGVzYy5IZWlnaHQgLyAyID09IGRlc3REZXNjLkhlaWdodCk7
CisKKyAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQgPSB7MH07CisgICAgcmVzdWx0ID0g
c291cmNlU3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tlZCwgTlVMTCwgRDNETE9DS19SRUFE
T05MWSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIEQzRExPQ0tFRF9S
RUNUIGRlc3RMb2NrZWQgPSB7MH07CisgICAgcmVzdWx0ID0gZGVzdFN1cmZhY2UtPkxvY2tSZWN0
KCZkZXN0TG9ja2VkLCBOVUxMLCAwKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KHNvdXJjZUxvY2tlZC5wQml0cyk7CisgICAgdW5zaWduZWQg
Y2hhciAqZGVzdERhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TG9j
a2VkLnBCaXRzKTsKKworICAgIGlmIChzb3VyY2VEYXRhICYmIGRlc3REYXRhKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChzb3VyY2VEZXNjLkZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgRDNERk1UX0w4OgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8TDg+KHNvdXJjZURlc2MuV2lk
dGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRl
c3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgRDNERk1UX0E4TDg6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxBOEw4Pihzb3VyY2VE
ZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBp
dGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4
RzhCODoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4UjhHOEI4Pihzb3VyY2VEZXNjLldpZHRo
LCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0
RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2QjE2
RzE2UjE2Rj4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEs
IHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAg
ICAgICAgIEdlbmVyYXRlTWlwPEEzMkIzMkczMlIzMkY+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJj
ZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBk
ZXN0TG9ja2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBkZXN0U3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICBzb3VyY2VT
dXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgfQorfQorfQorCitUZXh0dXJlU3RvcmFnZTo6VGV4
dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpCisgICAgOiBtTG9kT2Zmc2V0KDApLAorICAgICAgbUQz
RFVzYWdlKHVzYWdlKSwKKyAgICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBv
b2wodXNhZ2UpKSwKKyAgICAgIG1UZXh0dXJlU2VyaWFsKGlzc3VlVGV4dHVyZVNlcmlhbCgpKQor
eworfQorCitUZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkKK3sKK30KKworYm9vbCBU
ZXh0dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiAobUQz
RFVzYWdlICYgKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkp
ICE9IDA7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOworfQorCitEM0RQT09MIFRl
eHR1cmVTdG9yYWdlOjpnZXRQb29sKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUQzRFBvb2w7Cit9
CisKK0RXT1JEIFRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1EM0RVc2FnZTsKK30KKwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjpnZXRUZXh0dXJl
U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmVTZXJpYWw7Cit9CisKK3Vuc2ln
bmVkIGludCBUZXh0dXJlU3RvcmFnZTo6aXNzdWVUZXh0dXJlU2VyaWFsKCkKK3sKKyAgICByZXR1
cm4gbUN1cnJlbnRUZXh0dXJlU2VyaWFsKys7Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTo6Z2V0
TG9kT2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUxvZE9mZnNldDsKK30KKworVGV4dHVy
ZTo6VGV4dHVyZShHTHVpbnQgaWQpIDogUmVmQ291bnRPYmplY3QoaWQpCit7CisgICAgbU1pbkZp
bHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsKKyAgICBtTWFnRmlsdGVyID0gR0xfTElO
RUFSOworICAgIG1XcmFwUyA9IEdMX1JFUEVBVDsKKyAgICBtV3JhcFQgPSBHTF9SRVBFQVQ7Cisg
ICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7CisgICAgbVVzYWdlID0gR0xfTk9ORTsKKyAgICBt
TWF4QW5pc290cm9weSA9IDEuMGY7CisgICAgCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKwor
ICAgIG1JbW11dGFibGUgPSBmYWxzZTsKK30KKworVGV4dHVyZTo6flRleHR1cmUoKQoreworfQor
CisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxp
ZCBlbnVtIHBhcmFtZXRlcikKK2Jvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdMZW51bSBmaWx0
ZXIpCit7CisgICAgc3dpdGNoIChmaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNU
OgorICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05F
QVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKKyAgICAgIGNhc2Ug
R0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJ
TkVBUjoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1NaW5GaWx0ZXIgIT0gZmlsdGVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1NaW5GaWx0ZXIgPSBmaWx0ZXI7CisgICAg
ICAgICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwg
ZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6
OnNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKQoreworICAgIHN3aXRjaCAoZmlsdGVyKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBmaWx0ZXIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbU1hZ0ZpbHRlciA9IGZpbHRlcjsKKyAgICAgICAgICAgICAgICBt
RGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVw
ZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51
bSB3cmFwKQoreworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JFUEVB
VDoKKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKKyAgICAgIGNhc2UgR0xfTUlSUk9SRURf
UkVQRUFUOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbVdyYXBTID0gd3JhcDsKKyAgICAgICAgICAgICAg
ICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRl
IHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6OnNldFdyYXBUKEdM
ZW51bSB3cmFwKQoreworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JF
UEVBVDoKKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKKyAgICAgIGNhc2UgR0xfTUlSUk9S
RURfUkVQRUFUOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVdyYXBUICE9IHdyYXApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVdyYXBUID0gd3JhcDsKKyAgICAgICAgICAg
ICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBtYXggYW5p
c290cm9weSB1cGRhdGUgKHZhbGlkIGFuaXNvdHJvcHkgdmFsdWUpCitib29sIFRleHR1cmU6OnNl
dE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRN
YXhBbmlzb3Ryb3B5KQoreworICAgIHRleHR1cmVNYXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4
dHVyZU1heEFuaXNvdHJvcHksIGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKKyAgICBpZiAodGV4dHVy
ZU1heEFuaXNvdHJvcHkgPCAxLjBmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAobU1heEFuaXNvdHJvcHkgIT0gdGV4dHVyZU1heEFuaXNvdHJvcHkpCisgICAg
eworICAgICAgICBtTWF4QW5pc290cm9weSA9IHRleHR1cmVNYXhBbmlzb3Ryb3B5OworICAgICAg
ICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQg
ZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3sK
KyAgICBzd2l0Y2ggKHVzYWdlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgIGNh
c2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRToKKyAgICAgICAgbVVzYWdlID0gdXNh
Z2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIFRleHR1cmU6OmdldE1pbkZpbHRlcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1NaW5GaWx0ZXI7Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRNYWdG
aWx0ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtTWFnRmlsdGVyOworfQorCitHTGVudW0gVGV4
dHVyZTo6Z2V0V3JhcFMoKSBjb25zdAoreworICAgIHJldHVybiBtV3JhcFM7Cit9CisKK0dMZW51
bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1XcmFwVDsKK30KKwor
ZmxvYXQgVGV4dHVyZTo6Z2V0TWF4QW5pc290cm9weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1N
YXhBbmlzb3Ryb3B5OworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdAorewor
ICAgIHJldHVybiBtVXNhZ2U7Cit9CisKK2Jvb2wgVGV4dHVyZTo6aXNNaXBtYXBGaWx0ZXJlZCgp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtTWluRmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
TkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVB
Ul9NSVBNQVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgor
ICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCit7CisgICAgaWYgKHBpeGVscyAhPSBO
VUxMKQorICAgIHsKKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0
aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICAg
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0Q29t
cHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdl
ICppbWFnZSkKK3sKKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpCisgICAgeworICAgICAgICBpbWFn
ZS0+bG9hZENvbXByZXNzZWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0
SGVpZ2h0KCksIHBpeGVscyk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgfQor
fQorCitib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFn
ZSkKK3sKKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpCisgICAgeworICAgICAgICBpbWFnZS0+bG9h
ZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMpOworICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmlt
YWdlKQoreworICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGltYWdlLT5s
b2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgcGl4ZWxz
KTsKKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlOjpnZXRUZXh0dXJlKCkKK3sK
KyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYg
KGdldFN0b3JhZ2UoZmFsc2UpID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9CisKKyAgICB1cGRhdGVUZXh0dXJlKCk7CisKKyAgICByZXR1cm4gZ2V0QmFzZVRleHR1
cmUoKTsKK30KKworYm9vbCBUZXh0dXJlOjpoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdAorewor
ICAgIHJldHVybiBtRGlydHlQYXJhbWV0ZXJzOworfQorCitib29sIFRleHR1cmU6Omhhc0RpcnR5
SW1hZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURpcnR5SW1hZ2VzOworfQorCit2b2lkIFRl
eHR1cmU6OnJlc2V0RGlydHkoKQoreworICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSBmYWxzZTsKKyAg
ICBtRGlydHlJbWFnZXMgPSBmYWxzZTsKK30KKwordW5zaWduZWQgaW50IFRleHR1cmU6OmdldFRl
eHR1cmVTZXJpYWwoKQoreworICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3RvcmFn
ZShmYWxzZSk7CisgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFs
KCkgOiAwOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UgKnRleHR1cmUgPSBnZXRTdG9y
YWdlKHRydWUpOworICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0
U2VyaWFsKHRhcmdldCkgOiAwOworfQorCitib29sIFRleHR1cmU6OmlzSW1tdXRhYmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbUltbXV0YWJsZTsKK30KKworaW50IFRleHR1cmU6OmdldExvZE9m
ZnNldCgpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UgKnRleHR1cmUgPSBnZXRTdG9yYWdlKGZhbHNl
KTsKKyAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldExvZE9mZnNldCgpIDogMDsKK30K
KworR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25MZXZlbHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpIGNvbnN0Cit7CisgICAgaWYgKChpc1BvdzIod2lkdGgpICYmIGlzUG93MihoZWlnaHQp
KSB8fCBnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIDA7ICAgLy8gTWF4aW11bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgd2l0aG91dCBHTF9PRVNfdGV4
dHVyZV9ucG90IGRvZXMgbm90IHBlcm1pdCBOUE9UIG1pcG1hcHMuCisgICAgICAgIHJldHVybiAx
OworICAgIH0KK30KKworR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXpl
KSBjb25zdAoreworICAgIHJldHVybiBjcmVhdGlvbkxldmVscyhzaXplLCBzaXplKTsKK30KKwor
aW50IFRleHR1cmU6OmxldmVsQ291bnQoKQoreworICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgp
ID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgpIC0gZ2V0TG9kT2Zmc2V0KCkgOiAw
OworfQorCitCbGl0ICpUZXh0dXJlOjpnZXRCbGl0dGVyKCkKK3sKKyAgICBDb250ZXh0ICpjb250
ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIHJldHVybiBjb250ZXh0LT5nZXRCbGl0dGVyKCk7Cit9
CisKK2Jvb2wgVGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZyb21NYW5hZ2VkKQoreworICAg
IGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlk7CisKKyAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQorICAgICAg
ICB7CisgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICAgICAgICAgIHNvdXJj
ZS0+R2V0RGVzYygmZGVzYyk7CisKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJm
ID0gMDsKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVPZmZzY3JlZW5Q
bGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LCBEM0RQT09M
X1NZU1RFTU1FTSwgJnN1cmYsIE5VTEwpOworCisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29weUxvY2thYmxlU3VyZmFj
ZXMoc3VyZiwgc291cmNlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXREZXZpY2UoKS0+
VXBkYXRlU3VyZmFjZShzdXJmLCBOVUxMLCBkZXN0LCBOVUxMKTsKKyAgICAgICAgICAgICAgICBz
dXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5
KCk7CisgICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXRE
ZXZpY2UoKTsKKworICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBE
M0RURVhGX05PTkUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitUZXh0dXJl
U3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4
dHVyZSkgOiBUZXh0dXJlU3RvcmFnZShEM0RVU0FHRV9SRU5ERVJUQVJHRVQpLCBtUmVuZGVyVGFy
Z2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCit7CisgICAgbVRl
eHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKK30KKworVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0
b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQorICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtUmVuZGVyVGFy
Z2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCit7CisgICAgbVRl
eHR1cmUgPSBOVUxMOworICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0
aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAg
Ly8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRp
b24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAgeworICAgICAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICAgICAgTWFrZVZhbGlkU2l6
ZShmYWxzZSwgZHg6OklzQ29tcHJlc3NlZEZvcm1hdChmb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQs
ICZtTG9kT2Zmc2V0KTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRl
eHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6IDAsIGdl
dFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9yYWdlMkQoKQoreworICAgIGlmICht
VGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgfQorfQor
CisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3Rv
cmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsLCBib29sIGRpcnR5KQoreworICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKworICAgIGlmIChtVGV4dHVyZSkKKyAg
ICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChs
ZXZlbCArIG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAvLyBXaXRoIG1hbmFnZWQgdGV4dHVyZXMgdGhlIGRyaXZlciBu
ZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVzIHRvIHRoZSBsb3dlciBtaXBtYXAgbGV2ZWxz
CisgICAgICAgIGlmIChsZXZlbCAhPSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQorICAgICAg
ICB7CisgICAgICAgICAgICBtVGV4dHVyZS0+QWRkRGlydHlSZWN0KE5VTEwpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK0lEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTsKK30KKwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlMkQ6OmdldFJlbmRl
clRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVy
VGFyZ2V0U2VyaWFsOworfQorCitUZXh0dXJlMkQ6OlRleHR1cmUyRChHTHVpbnQgaWQpIDogVGV4
dHVyZShpZCkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisgICAgbVN1cmZhY2UgPSBOVUxM
OworICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKKyAgICBtUHJveHlSZWZzID0gMDsKK30K
KworVGV4dHVyZTJEOjp+VGV4dHVyZTJEKCkKK3sKKyAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5V
TEw7CisKKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwor
ICAgIAorICAgIGlmIChtU3VyZmFjZSkKKyAgICB7CisgICAgICAgIG1TdXJmYWNlLT5zZXRCb3Vu
ZFRleHR1cmUoTlVMTCk7CisgICAgICAgIG1TdXJmYWNlID0gTlVMTDsKKyAgICB9Cit9CisKKy8v
IFdlIG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZl
cnMgYWN0aW5nIGFzIAorLy8gcHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRv
IG5vdCBhdHRlbXB0IHRvIHVzZSBhIHBvaW50ZXIgCisvLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94
eSB3aGljaCBoYXMgYmVlbiBkZWxldGVkLgordm9pZCBUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVByb3h5UmVmcysrOworfQorCit2b2lk
IFRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7Cisg
ICAgaWYgKG1Qcm94eVJlZnMgPiAwKQorICAgICAgICBtUHJveHlSZWZzLS07CisKKyAgICBpZiAo
bVByb3h5UmVmcyA9PSAwKQorICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Cit9CisK
K0dMZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdMX1RF
WFRVUkVfMkQ7Cit9CisKK0dMc2l6ZWkgVGV4dHVyZTJEOjpnZXRXaWR0aChHTGludCBsZXZlbCkg
Y29uc3QKK3sKKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFMpCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKTsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybiAwOworfQorCitHTHNpemVpIFRleHR1cmUyRDo6Z2V0SGVpZ2h0
KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRI
ZWlnaHQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitHTGVudW0gVGV4dHVy
ZTJEOjpnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVtsZXZlbF0uZ2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBHTF9OT05FOworfQorCitEM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQo
R0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEQz
REZvcm1hdCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOworfQor
Cit2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIHJlbGVhc2VU
ZXhJbWFnZSgpOworCisgICAgYm9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtsZXZlbF0ucmVk
ZWZpbmUoaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZhbHNlKTsKKworICAgIGlmICht
VGV4U3RvcmFnZSAmJiByZWRlZmluZWQpCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkQ6OnNl
dEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKQoreworICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gQ29udmVydFNpemVkSW50ZXJu
YWxGb3JtYXQoZm9ybWF0LCB0eXBlKTsKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7Cit9CisKK3ZvaWQgVGV4dHVy
ZTJEOjpiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIHJlbGVhc2VU
ZXhJbWFnZSgpOworCisgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQ7CisKKyAgICBzd2l0Y2goc3Vy
ZmFjZS0+Z2V0Rm9ybWF0KCkpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Cisg
ICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCQThfT0VTOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX1JH
QjhfT0VTOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOSU1QTEVN
RU5URUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1JbWFnZUFycmF5WzBdLnJl
ZGVmaW5lKGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBzdXJmYWNlLT5nZXRI
ZWlnaHQoKSwgdHJ1ZSk7CisKKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7CisgICAgbVRleFN0b3Jh
Z2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChzdXJmYWNlLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCkp
OworCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICBtU3VyZmFjZSA9IHN1cmZhY2U7Cisg
ICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZSh0aGlzKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6
OnJlbGVhc2VUZXhJbWFnZSgpCit7CisgICAgaWYgKG1TdXJmYWNlKQorICAgIHsKKyAgICAgICAg
bVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsKKyAgICAgICAgbVN1cmZhY2UgPSBOVUxM
OworCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVs
ZXRlIG1UZXhTdG9yYWdlOworICAgICAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworICAgICAg
ICB9CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0u
cmVkZWZpbmUoR0xfUkdCQThfT0VTLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0
IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0
aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdl
KGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwordm9pZCBUZXh0
dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEFTU0VSVChtSW1hZ2VB
cnJheVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOworCisgICAgaWYgKGxldmVsIDwgbGV2
ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RMZXZlbCA9
IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpOworCisgICAgICAgIGlm
IChkZXN0TGV2ZWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1h
Z2VBcnJheVtsZXZlbF07CisgICAgICAgICAgICBpbWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgICAgICBkZXN0
TGV2ZWwtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlKEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QobGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KK30KKwordm9pZCBU
ZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgaWYgKFRl
eHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICB7
CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJl
bmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBpZiAoIXJlbmRl
clRhcmdldCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5k
ZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorCisgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBDb252ZXJ0U2l6ZWRJbnRlcm5hbEZv
cm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUpOworICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgIAorICAgIGlmICghbUltYWdlQXJy
YXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsK
KyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0ubWFya0NsZWFuKCk7CisK
KyAgICAgICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENv
dW50KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAg
ICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0g
eCArIHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICAgICAg
c291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworICAgICAgICAgICAgCisgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwo
bGV2ZWwsIHRydWUpOworCisgICAgICAgICAgICBpZiAoZGVzdCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0
LCBmb3JtYXQsIDAsIDAsIGRlc3QpOworICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJlbmRlclRhcmdldC0+UmVs
ZWFzZSgpOworfQorCit2b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkK
K3sKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRo
KCkgfHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICB9CisK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJU
YXJnZXQoKTsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xl
dmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFpc1NhbXBsZXJD
b21wbGV0ZSgpKSkKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5jb3B5KHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7CisgICAgICAg
IG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlm
ICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdXBkYXRlVGV4dHVyZSgpOworCisgICAgICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAg
ICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3Qucmln
aHQgPSB4ICsgd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7CisgICAgICAg
ICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisKKyAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCwg
dHJ1ZSk7CisKKyAgICAgICAgICAgIGlmIChkZXN0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VB
cnJheVswXS5nZXRJbnRlcm5hbEZvcm1hdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7CisgICAgICAgICAgICAgICAgZGVzdC0+
UmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmVuZGVy
VGFyZ2V0LT5SZWxlYXNlKCk7Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkg
bGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQoreworICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9y
bWF0KGludGVybmFsZm9ybWF0KTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2Fn
ZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOworCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAg
IG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVz
YWdlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIGZvciAo
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgeworICAgICAgICBt
SW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IHRydWUpOworICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOworICAgICAg
ICBoZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gMSk7CisgICAgfQorCisgICAgZm9yIChp
bnQgbGV2ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5l
KEdMX05PTkUsIDAsIDAsIHRydWUpOworICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZS0+aXNN
YW5hZ2VkKCkpCisgICAgeworICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworCisg
ICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3Jh
Z2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgZmFsc2UpOworICAgICAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOworICAgICAgICB9CisgICAgfQor
fQorCisvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODUuCitib29sIFRleHR1cmUyRDo6aXNT
YW1wbGVyQ29tcGxldGUoKSBjb25zdAoreworICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJh
eVswXS5nZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0
SGVpZ2h0KCk7CisKKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG1pcG1hcHBpbmcgPSBpc01p
cG1hcEZpbHRlcmVkKCk7CisKKyAgICBpZiAoKElzRmxvYXQzMkZvcm1hdChnZXRJbnRlcm5hbEZv
cm1hdCgwKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkp
IHx8CisgICAgICAgIChJc0Zsb2F0MTZGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFn
ZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKKyAgICB7CisgICAg
ICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVB
UkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBi
b29sIG5wb3RTdXBwb3J0ID0gZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUo
KTsKKworICAgIGlmICghbnBvdFN1cHBvcnQpCisgICAgeworICAgICAgICBpZiAoKGdldFdyYXBT
KCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdpZHRoKSkgfHwKKyAgICAgICAgICAg
IChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKG1pcG1hcHBpbmcpCisgICAgeworICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoIWlzUG93Mih3aWR0aCkgfHwgIWlzUG93MihoZWlnaHQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNNaXBtYXBDb21wbGV0ZSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUgKG1pcG1hcCkgY29t
cGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KK2Jv
b2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNJbW11
dGFibGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEdMc2l6
ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0
ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7CisKKyAgICBpZiAod2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
bnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOworCisgICAgZm9yIChpbnQgbGV2
ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFy
cmF5W2xldmVsXS5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdLmdldEludGVy
bmFsRm9ybWF0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKSAhPSBzdGQ6
Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVp
Z2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7
CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworfQor
Citib29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1
cm4gSXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKK30KKworSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0QmFzZVRleHR1cmUoKSA6IE5V
TEw7Cit9CisKKy8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJv
bSB0aGUgdGV4dHVyZSBpbWFnZXMKK3ZvaWQgVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkKK3sK
KyAgICBkZWxldGUgbVRleFN0b3JhZ2U7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAg
R0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7CisgICAgR0xzaXplaSBo
ZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKKworICAgIGlmICghKHdpZHRoID4g
MCAmJiBoZWlnaHQgPiAwKSkKKyAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0ZW1wdCB0byBj
cmVhdGUgZDNkIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCisKKyAgICBHTGludCBsZXZl
bHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKKyAgICBEM0RGT1JNQVQgZDNkZm10
ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBH
ZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKKworICAgIG1UZXhTdG9yYWdl
ID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAKKyAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQorICAgIHsK
KyAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKworICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2
ZWwobGV2ZWwsIGZhbHNlKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5h
Z2VkU3VyZmFjZShzdXJmYWNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1EaXJ0eUltYWdl
cyA9IHRydWU7Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKK3sKKyAgICBi
b29sIG1pcG1hcHBpbmcgPSAoaXNNaXBtYXBGaWx0ZXJlZCgpICYmIGlzTWlwbWFwQ29tcGxldGUo
KSk7CisKKyAgICBpbnQgbGV2ZWxzID0gKG1pcG1hcHBpbmcgPyBsZXZlbENvdW50KCkgOiAxKTsK
KworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAg
eworICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbbGV2ZWxdOworCisgICAgICAg
IGlmIChpbWFnZS0+aXNEaXJ0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb21taXRSZWN0
KGxldmVsLCAwLCAwLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKSwgbUltYWdlQXJyYXlb
bGV2ZWxdLmdldEhlaWdodCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJl
MkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UyRCAqbmV3
VGV4U3RvcmFnZSA9IE5VTEw7CisKKyAgICBpZiAobUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSAh
PSAwICYmIG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpICE9IDApCisgICAgeworICAgICAgICBH
THNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKKyAgICAgICAgR0xzaXpl
aSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKKyAgICAgICAgR0xpbnQgbGV2
ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7CisgICAgICAgIEQzREZPUk1BVCBk
M2RmbXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRFdPUkQgZDNk
dXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0FOR0xFLCB0cnVlKTsKKworICAgICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9y
YWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgICAg
ICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGxl
dmVscyA9IGxldmVsQ291bnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2
ZWxzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbmV3VGV4U3RvcmFnZS0+Z2V0
U3VyZmFjZUxldmVsKGksIHRydWUpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb3B5VG9SZW5k
ZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpKQorICAgICAg
ICAgICAgICAgIHsgICAKKyAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsK
KyAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAg
ICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdlID0g
bmV3VGV4U3RvcmFnZTsKKworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Cit9CisKK3ZvaWQgVGV4
dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGlmICghZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c05vblBvd2VyMlRleHR1cmUoKSkKKyAgICB7CisgICAgICAgIGlmICghaXNQb3cyKG1JbWFn
ZUFycmF5WzBdLmdldFdpZHRoKCkpIHx8ICFpc1BvdzIobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0
KCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEg
dGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1h
cCBsZXZlbHMuCisgICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1JbWFnZUFycmF5
WzBdLmdldFdpZHRoKCksIG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgIHsKKyAgICAgICAgcmVkZWZpbmVJ
bWFnZShpLCBtSW1hZ2VBcnJheVswXS5nZXRJbnRlcm5hbEZvcm1hdCgpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpID4+IGksIDEp
LAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldEhl
aWdodCgpID4+IGksIDEpKTsKKyAgICB9CisKKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSAtIDEsIGZhbHNl
KTsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5n
ZXRTdXJmYWNlTGV2ZWwoaSwgdHJ1ZSk7CisKKyAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxM
ICYmIGxvd2VyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2V0Qmxp
dHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBp
ZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgbUltYWdl
QXJyYXlbaV0ubWFya0NsZWFuKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHZW5lcmF0ZU1pcChtSW1hZ2VBcnJh
eVtpXS5nZXRTdXJmYWNlKCksIG1JbWFnZUFycmF5W2kgLSAxXS5nZXRTdXJmYWNlKCkpOworCisg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFy
Z2V0KQoreworICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwp
OworICAgIH0KKworICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQorICAgIHsKKyAg
ICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1D
b2xvcmJ1ZmZlclByb3h5OworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2Uu
CisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3Qz
RFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQorewor
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisKKyAgICAvLyBlbnN1cmUgdGhl
IHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkg
PT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0
ZVRleHR1cmUoKTsKKyAgICAKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0
dXJlCisgICAgaWYgKGlzRGVwdGgoMCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCwgZmFsc2UpOwor
fQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJl
MkQ6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KQoreworICAgIEFTU0VSVCh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCk7CisKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVy
ZSBpcyBjcmVhdGVkCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVRleHR1cmUoKTsKKworICAg
IC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNE
ZXB0aCgwKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwLCBmYWxzZSk7Cit9CisKK1RleHR1cmVTdG9y
YWdlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCit7CisgICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJU
YXJnZXQoKSkpCisgICAgeworICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZTsKK30KKworVGV4dHVyZVN0b3JhZ2VDdWJl
TWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwg
RFdPUkQgdXNhZ2UsIGludCBzaXplKQorICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtRmly
c3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFs
cygpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3Qg
cG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUK
KyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBj
cmVhdGlvbgorICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsKKyAg
ICAgICAgTWFrZVZhbGlkU2l6ZShmYWxzZSwgZHg6OklzQ29tcHJlc3NlZEZvcm1hdChmb3JtYXQp
LCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9m
ZnNldCA6IDAsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwp
OworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSk7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VD
dWJlTWFwKCkKK3sKKyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+
UmVsZWFzZSgpOworICAgIH0KK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNl
LgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0
M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRDdWJlTWFwU3VyZmFjZShHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBib29sIGRpcnR5KQoreworICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAg
ICAgIEQzRENVQkVNQVBfRkFDRVMgZmFjZSA9IGVzMmR4OjpDb252ZXJ0Q3ViZUZhY2UoZmFjZVRh
cmdldCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldEN1YmVNYXBTdXJm
YWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZhY2UpOworICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIC8vIFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0
aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1p
cG1hcCBsZXZlbHMKKyAgICAgICAgaWYgKGxldmVsICE9IDAgJiYgaXNNYW5hZ2VkKCkgJiYgZGly
dHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5BZGREaXJ0eVJlY3QoZmFjZSwg
TlVMTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3VyZmFjZTsKK30KKworSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEJhc2VUZXh0dXJl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0
dXJlU3RvcmFnZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBj
b25zdAoreworICAgIHJldHVybiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgKyBUZXh0dXJlQ3Vi
ZU1hcDo6ZmFjZUluZGV4KHRhcmdldCk7Cit9CisKK1RleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3Vi
ZU1hcChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgeworICAgICAgICBtRmFjZVBy
b3hpZXNbaV0gPSBOVUxMOworICAgICAgICBtRmFjZVByb3h5UmVmc1tpXSA9IDA7CisgICAgfQor
fQorCitUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKCkKK3sKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7
CisgICAgfQorCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdlID0gTlVM
TDsKK30KKworLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8g
cmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCisvLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNv
IHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hpbGUgCisvLyBwcm94eSByZWZlcmVu
Y2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sCisv
LyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIgTlVMTCwgc28gdGhhdCBhIG5ldyBhdHRlbXB0IGF0
IHJlZmVyZW5jaW5nCisvLyB3aWxsIGNhdXNlIHJlY3JlYXRpb24uCit2b2lkIFRleHR1cmVDdWJl
TWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1GYWNlUHJveGllc1tp
XSA9PSBwcm94eSkKKyAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldKys7CisgICAgfQorfQor
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICAg
IGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtRmFjZVByb3h5UmVmc1tpXSA+IDApCisgICAgICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNb
aV0tLTsKKworICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDApCisgICAgICAg
ICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KK30KKwor
R0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiBH
TF9URVhUVVJFX0NVQkVfTUFQOworfQorCitHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0
aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBpZiAobGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHJldHVybiBtSW1hZ2VB
cnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gMDsKK30KKworR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAoreworICAgIGlmIChsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gMDsKK30KKworR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1h
dChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBpZiAobGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHJldHVybiBtSW1hZ2VB
cnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEludGVybmFsRm9ybWF0KCk7CisgICAg
ZWxzZQorICAgICAgICByZXR1cm4gR0xfTk9ORTsKK30KKworRDNERk9STUFUIFRleHR1cmVDdWJl
TWFwOjpnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Cit7Cisg
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXREM0RGb3Jt
YXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKK30KKwordm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDAsIGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsK
K30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdl
KDEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NZKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAg
IHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZ
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KQoreworICAgIHNldEltYWdlKDMsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0
SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3Vi
ZU1hcDo6c2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDUsIGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgLy8gY29tcHJlc3NlZCBmb3Jt
YXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBq
dXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdl
KGZhY2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBU
ZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJh
eVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNv
bW1pdFJlY3QoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBBU1NFUlQobUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsKKworICAgIGlmIChsZXZl
bCA8IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
TGV2ZWwgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwsIHRydWUpOworICAgICAgICBBU1NFUlQoZGVzdExl
dmVsICE9IE5VTEwpOworCisgICAgICAgIGlmIChkZXN0TGV2ZWwgIT0gTlVMTCkKKyAgICAgICAg
eworICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsK
KyAgICAgICAgICAgIGltYWdlLT51cGRhdGVTdXJmYWNlKGRlc3RMZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgp
OworICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQorICAgIHsK
KyAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c3ViSW1hZ2VDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBp
ZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdKSkKKyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRh
cmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9
CisKKy8vIFRlc3RzIGZvciBjdWJlIG1hcCBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODYuCitib29sIFRleHR1cmVDdWJlTWFwOjpp
c1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaW50IHNpemUgPSBtSW1hZ2VBcnJheVsw
XVswXS5nZXRXaWR0aCgpOworCisgICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJl
ZCgpOworCisgICAgaWYgKChnbDo6RXh0cmFjdFR5cGUoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQo
KS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8CisgICAgICAgIChnbDo6RXh0cmFj
dFR5cGUoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAw
KSA9PSBHTF9IQUxGX0ZMT0FUX09FUykgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyKCkpKQorICAgIHsKKyAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVB
UkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVB
UkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaXNQb3cyKHNpemUpICYmICFnZXRDb250
ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQorICAgIHsKKyAgICAgICAgaWYgKGdl
dFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RP
X0VER0UgfHwgbWlwbWFwcGluZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtaXBtYXBwaW5nKQorICAgIHsKKyAgICAg
ICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCFp
c01pcG1hcEN1YmVDb21wbGV0ZSgpKSAgIC8vIEFsc28gdGVzdHMgZm9yIGlzQ3ViZUNvbXBsZXRl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFRlc3RzIGZvciBjdWJlIHRleHR1cmUgY29t
cGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KK2Jv
b2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBpZiAobUlt
YWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLmdldEhl
aWdodCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgZmFjZSA9IDE7IGZh
Y2UgPCA2OyBmYWNlKyspCisgICAgeworICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0u
Z2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpIHx8CisgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdl
dEhlaWdodCgpIHx8CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRJbnRlcm5h
bEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEludGVybmFsRm9ybWF0KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21w
bGV0ZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzSW1tdXRhYmxlKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR0xzaXplaSBzaXplID0gbUltYWdl
QXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKKworICAgIGludCBxID0gbG9nMihzaXplKTsKKworICAg
IGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgIHsKKyAgICAgICAgZm9y
IChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldEludGVybmFsRm9ybWF0KCkgIT0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCBz
aXplID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxG
b3JtYXQodGFyZ2V0LCBsZXZlbCkpOworfQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1
cmVDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXhTdG9y
YWdlID8gbVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOworfQorCisvLyBDb25z
dHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1h
Z2VzLCBvciByZXR1cm5zIGFuIGV4aXN0aW5nIG9uZQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y3Jl
YXRlVGV4dHVyZSgpCit7CisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdl
ID0gTlVMTDsKKworICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRo
KCk7CisKKyAgICBpZiAoIShzaXplID4gMCkpCisgICAgICAgIHJldHVybjsgLy8gZG8gbm90IGF0
dGVtcHQgdG8gY3JlYXRlIGQzZCB0ZXh0dXJlcyBmb3Igbm9uZXhpc3RhbnQgZGF0YQorCisgICAg
R0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSk7CisgICAgRDNERk9STUFUIGQzZGZt
dCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVzYWdl
ID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CisKKyAgICBtVGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdl
LCBzaXplKTsKKworICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCisgICAgeworICAg
ICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworCisgICAgICAgIGZvciAoaW50IGZhY2Ug
PSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldEN1
YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVs
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1h
bmFnZWRTdXJmYWNlKHN1cmZhY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6dXBk
YXRlVGV4dHVyZSgpCit7CisgICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJlZCgp
ICYmIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCk7CisKKyAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykKKyAgICB7CisgICAgICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGluZyA/
IGxldmVsQ291bnQoKSA6IDEpOworCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBsZXZlbHM7IGxldmVsKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEltYWdlICppbWFnZSA9
ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07CisKKyAgICAgICAgICAgIGlmIChpbWFnZS0+aXNE
aXJ0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbW1pdFJlY3QoZmFjZSwg
bGV2ZWwsIDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKQoreworICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCAqbmV3
VGV4U3RvcmFnZSA9IE5VTEw7CisKKyAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgo
KSAhPSAwKQorICAgIHsKKyAgICAgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0u
Z2V0V2lkdGgoKTsKKyAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSk7
CisgICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3Jt
YXQoKTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKKworICAgICAgICBuZXdUZXhT
dG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNh
Z2UsIHNpemUpOworCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQorICAgICAgICB7
CisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgICAgICAgICAgZm9y
IChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UgPSBtVGV4U3RvcmFnZS0+
Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSwg
ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG5l
d1RleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCArIGYsIGksIHRydWUpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVu
ZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3Rv
cmFnZTsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNv
dXJjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0
b3JhZ2U7CisKKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworfQorCit2b2lkIFRleHR1cmVDdWJl
TWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBHTGludCBpbnRlcm5hbGZvcm1h
dCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7CisgICAgcmVkZWZp
bmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CisKKyAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFn
ZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKTsKK30KKwordW5zaWduZWQgaW50IFRleHR1cmVDdWJl
TWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2UpCit7CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09
IDEpOworICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAtIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAyKTsKKyAgICBNRVRBX0FTU0VSVChHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggPT0gMyk7CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
IC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOworICAgIE1FVEFfQVNTRVJU
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCA9PSA1KTsKKworICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBm
YWNlLCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQoreworICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlbZmFjZV1b
bGV2ZWxdLnJlZGVmaW5lKGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmYWxzZSk7CisK
KyAgICBpZiAobVRleFN0b3JhZ2UgJiYgcmVkZWZpbmVkKQorICAgIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Cisg
ICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OworICAgIH0KK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsK
KworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8g
cmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFj
ZUluZGV4KHRhcmdldCk7CisgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBnbDo6Q29udmVydFNp
emVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFKTsKKyAgICByZWRlZmlu
ZUltYWdlKGZhY2VpbmRleCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
KworICAgIGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9y
bWF0KCkpCisgICAgeworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5
KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7CisgICAgICAgIG1EaXJ0
eUltYWdlcyA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICghbVRl
eFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0ubWFya0NsZWFuKCk7CisKKyAg
ICAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7CisKKyAgICAgICAgaWYgKHdpZHRoID4gMCAm
JiBsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgUkVDVCBzb3Vy
Y2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNv
dXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9
IHk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisKKyAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBT
dXJmYWNlKHRhcmdldCwgbGV2ZWwsIHRydWUpOworCisgICAgICAgICAgICBpZiAoZGVzdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFy
Z2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOworICAgICAgICAgICAgICAgIGRl
c3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
bmRlclRhcmdldC0+UmVsZWFzZSgpOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3Vi
SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBG
cmFtZWJ1ZmZlciAqc291cmNlKQoreworICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2Zh
Y2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0V2lkdGgoKTsKKworICAgIGlmICh4b2Zmc2V0ICsg
d2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgIH0KKworICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpOworCisgICAg
aWYgKCFyZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2
ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgo
dGFyZ2V0KTsKKworICAgIGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5k
ZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkp
CisgICAgeworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7CisgICAgICAgIG1EaXJ0eUltYWdl
cyA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICghbVRleFN0b3Jh
Z2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdXBkYXRlVGV4dHVyZSgpOworCisgICAgICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291
cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lk
dGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7CisgICAgICAgICAgICBzb3VyY2VS
ZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwsIHRy
dWUpOworCisgICAgICAgICAgICBpZiAoZGVzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBnbDo6RXh0
cmFjdEZvcm1hdChtSW1hZ2VBcnJheVswXVswXS5nZXRJbnRlcm5hbEZvcm1hdCgpKSwgeG9mZnNl
dCwgeW9mZnNldCwgZGVzdCk7CisgICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNl
KCk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQoreworICAgIEQzREZPUk1BVCBkM2Rm
bXQgPSBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICBE
V09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwor
CisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVT
dG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOworICAgIG1JbW11
dGFibGUgPSB0cnVlOworCisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsg
bGV2ZWwrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFj
ZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVk
ZWZpbmUoaW50ZXJuYWxmb3JtYXQsIHNpemUsIHNpemUsIHRydWUpOworICAgICAgICAgICAgc2l6
ZSA9IHN0ZDo6bWF4KDEsIHNpemUgPj4gMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdLnJlZGVmaW5lKEdMX05PTkUsIDAsIDAsIHRydWUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICB7CisgICAgICAgIGludCBsZXZl
bHMgPSBsZXZlbENvdW50KCk7CisKKyAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2
OyBmYWNlKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2Uo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwsIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uo
c3VyZmFjZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCit7CisgICAgaWYgKCFpc0N1YmVDb21wbGV0
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICB9CisKKyAgICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJl
KCkpCisgICAgeworICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0
aCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAx
IHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBt
YXAgbGV2ZWxzLgorICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVswXS5n
ZXRXaWR0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAg
ICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS5n
ZXRJbnRlcm5hbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
Om1heChtSW1hZ2VBcnJheVtmXVswXS5nZXRXaWR0aCgpID4+IGksIDEpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS5nZXRXaWR0aCgp
ID4+IGksIDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSAmJiBt
VGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBT
dXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkgLSAxLCBmYWxzZSk7
CisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2Ut
PmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGks
IHRydWUpOworCisgICAgICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0g
TlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIo
KS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAg
ICAgICBtSW1hZ2VBcnJheVtmXVtpXS5tYXJrQ2xlYW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBm
ID0gMDsgZiA8IDY7IGYrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChtSW1hZ2VBcnJheVtmXVtpXS5nZXRTdXJmYWNlKCkgPT0gTlVMTCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBHZW5lcmF0ZU1pcChtSW1hZ2VB
cnJheVtmXVtpXS5nZXRTdXJmYWNlKCksIG1JbWFnZUFycmF5W2ZdW2kgLSAxXS5nZXRTdXJmYWNl
KCkpOworCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVy
ZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQoreworICAgIGlmICghSXND
dWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVMTCk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFyZ2V0KTsKKworICAgIGlmIChtRmFj
ZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1GYWNlUHJveGllc1tmYWNl
XSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KHRoaXMsIHRhcmdldCkpOworICAgIH0KKworICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07
Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1
cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBBU1NFUlQo
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKKworICAgIC8vIGVuc3VyZSB0aGUgdW5k
ZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBO
VUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlVGV4
dHVyZSgpOworICAgIAorICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2Uo
dGFyZ2V0LCAwLCBmYWxzZSk7Cit9CisKK1RleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6
Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3sKKyAgICBpZiAoIW1UZXhTdG9yYWdlIHx8
IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkKKyAgICB7
CisgICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnZl
cnRUb1JlbmRlclRhcmdldCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgY3JlYXRlVGV4dHVyZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG1UZXhTdG9yYWdlOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9UZXh0dXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1RleHR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzNCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gVGV4dHVyZS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBnbDo6
VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVy
ZTJEIGFuZCBUZXh0dXJlQ3ViZU1hcC4gSW1wbGVtZW50cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5k
CisvLyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMu
NyBwYWdlIDYzLgorCisjaWZuZGVmIExJQkdMRVNWMl9URVhUVVJFX0hfCisjZGVmaW5lIExJQkdM
RVNWMl9URVhUVVJFX0hfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNkZWZpbmUgR0xfQVBJQ0FM
TAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRp
bGl0aWVzLmgiCisKK25hbWVzcGFjZSBlZ2wKK3sKK2NsYXNzIFN1cmZhY2U7Cit9CisKK25hbWVz
cGFjZSBnbAoreworY2xhc3MgQmxpdDsKK2NsYXNzIEZyYW1lYnVmZmVyOworCitlbnVtCit7Cisg
ICAgLy8gVGhlc2UgYXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBv
cnQKKyAgICAvLyBUaGUgYWN0dWFsIEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhlIGRldmljZSBj
YXBzCisgICAgLy8gYW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRleHQKKyAgICBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsCisgICAgSU1QTEVNRU5UQVRJ
T05fTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAorCisgICAgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0la
RQorfTsKKworY2xhc3MgSW1hZ2UKK3sKKyAgcHVibGljOgorICAgIEltYWdlKCk7CisgICAgfklt
YWdlKCk7CisKKyAgICBib29sIHJlZGVmaW5lKEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworICAgIHZvaWQgbWFy
a0RpcnR5KCkge21EaXJ0eSA9IHRydWU7fQorICAgIHZvaWQgbWFya0NsZWFuKCkge21EaXJ0eSA9
IGZhbHNlO30KKworICAgIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7CisgICAgRDNE
Rk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworCisgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNv
bnN0IHtyZXR1cm4gbVdpZHRoO30KKyAgICBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0IHtyZXR1
cm4gbUhlaWdodDt9CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Qge3JldHVy
biBtSW50ZXJuYWxGb3JtYXQ7fQorICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1
cmZhY2UgJiYgbURpcnR5O30KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwor
CisgICAgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7
CisgICAgdm9pZCB1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisK
KyAgICB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7CisKKyAgICB2b2lkIGxvYWRBbHBoYURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKKyAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
KyAgICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OworICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkg
Y29uc3Q7CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7CisgICAgdm9pZCBsb2FkTHVtaW5hbmNl
QWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBs
b2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKKyAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owor
ICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRS
R0JGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRh
U1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OworICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2
b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2
b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRDb21wcmVzc2Vk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7
CisKKyAgICB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5
ICpyZW5kZXJUYXJnZXQpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKEltYWdlKTsKKworICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOworCisgICAgSFJFU1VMVCBs
b2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKKyAgICB2
b2lkIHVubG9jaygpOworCisgICAgR0xzaXplaSBtV2lkdGg7CisgICAgR0xzaXplaSBtSGVpZ2h0
OworICAgIEdMaW50IG1JbnRlcm5hbEZvcm1hdDsKKworICAgIGJvb2wgbURpcnR5OworCisgICAg
RDNEUE9PTCBtRDNEUG9vbDsgICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBE
M0RQT09MX01BTkFHRUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuCisgICAgRDNERk9S
TUFUIG1EM0RGb3JtYXQ7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7Cit9Owor
CitjbGFzcyBUZXh0dXJlU3RvcmFnZQoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVGV4dHVy
ZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpOworCisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UoKTsK
KworICAgIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKKyAgICBib29sIGlzTWFuYWdlZCgp
IGNvbnN0OworICAgIEQzRFBPT0wgZ2V0UG9vbCgpIGNvbnN0OworICAgIERXT1JEIGdldFVzYWdl
KCkgY29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdl
dCkgY29uc3QgPSAwOworICAgIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKworICBwcm90ZWN0
ZWQ6CisgICAgaW50IG1Mb2RPZmZzZXQ7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UpOworCisgICAgY29uc3QgRFdPUkQgbUQzRFVzYWdl
OworICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBvb2w7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bVRleHR1cmVTZXJpYWw7CisgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVRleHR1cmVTZXJp
YWwoKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRUZXh0dXJlU2VyaWFsOwor
fTsKKworY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAoreworICBwdWJsaWM6
CisgICAgZXhwbGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOworCisgICAgdmlydHVhbCB+VGV4dHVy
ZSgpOworCisgICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpID0gMDsKKworICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0
ID0gMDsKKworICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOworICAgIGJvb2wg
c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpOworICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdy
YXApOworICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOworICAgIGJvb2wgc2V0TWF4QW5p
c290cm9weShmbG9hdCB0ZXh0dXJlTWF4QW5pc290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNv
dHJvcHkpOworICAgIGJvb2wgc2V0VXNhZ2UoR0xlbnVtIHVzYWdlKTsKKworICAgIEdMZW51bSBn
ZXRNaW5GaWx0ZXIoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29uc3Q7Cisg
ICAgR0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7
CisgICAgZmxvYXQgZ2V0TWF4QW5pc290cm9weSgpIGNvbnN0OworICAgIEdMZW51bSBnZXRVc2Fn
ZSgpIGNvbnN0OworICAgIGJvb2wgaXNNaXBtYXBGaWx0ZXJlZCgpIGNvbnN0OworCisgICAgdmly
dHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QgPSAwOworCisgICAgSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7CisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdl
dFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXBzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAq
c291cmNlKSA9IDA7CisKKyAgICBib29sIGhhc0RpcnR5UGFyYW1ldGVycygpIGNvbnN0OworICAg
IGJvb2wgaGFzRGlydHlJbWFnZXMoKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0RGlydHkoKTsKKyAg
ICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpOworICAgIHVuc2lnbmVkIGludCBnZXRS
ZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCk7CisKKyAgICBib29sIGlzSW1tdXRhYmxl
KCkgY29uc3Q7CisgICAgaW50IGdldExvZE9mZnNldCgpOworCisgICAgc3RhdGljIGNvbnN0IEdM
dWludCBJTkNPTVBMRVRFX1RFWFRVUkVfSUQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAv
LyBFdmVyeSB0ZXh0dXJlIHRha2VzIGFuIGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBp
cyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBpcyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291
cmNlIG1hbmFnZXIuCisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7CisgICAgYm9v
bCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOworICAgIHZvaWQgc2V0
Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIElt
YWdlICppbWFnZSk7CisgICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7
CisKKyAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkgY29uc3Q7CisgICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsK
KworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCkgPSAwOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJl
bmRlclRhcmdldChHTGVudW0gdGFyZ2V0KSA9IDA7CisKKyAgICBpbnQgbGV2ZWxDb3VudCgpOwor
CisgICAgc3RhdGljIEJsaXQgKmdldEJsaXR0ZXIoKTsKKyAgICBzdGF0aWMgYm9vbCBjb3B5VG9S
ZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpz
b3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpOworCisgICAgR0xlbnVtIG1NaW5GaWx0ZXI7CisgICAg
R0xlbnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBHTGVudW0gbVdyYXBU
OworICAgIGZsb2F0IG1NYXhBbmlzb3Ryb3B5OworICAgIGJvb2wgbURpcnR5UGFyYW1ldGVyczsK
KyAgICBHTGVudW0gbVVzYWdlOworCisgICAgYm9vbCBtRGlydHlJbWFnZXM7CisKKyAgICBib29s
IG1JbW11dGFibGU7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZSk7CisKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wg
cmVuZGVyVGFyZ2V0KSA9IDA7Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTJEIDogcHVibGlj
IFRleHR1cmVTdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFn
ZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSk7CisgICAgVGV4dHVyZVN0b3Jh
Z2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKKworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMkQoKTsKKworICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsLCBib29sIGRpcnR5
KTsKKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRh
cmdldCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZVN0b3JhZ2UyRCk7CisKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7Cisg
ICAgY29uc3QgdW5zaWduZWQgaW50IG1SZW5kZXJUYXJnZXRTZXJpYWw7Cit9OworCitjbGFzcyBU
ZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVGV4
dHVyZTJEKEdMdWludCBpZCk7CisKKyAgICB+VGV4dHVyZTJEKCk7CisKKyAgICB2b2lkIGFkZFBy
b3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworICAgIHZvaWQgcmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworCisgICAgdmlydHVhbCBHTGVudW0gZ2V0VGFy
Z2V0KCkgY29uc3Q7CisKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsK
KyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdl
dEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBEM0RGT1JNQVQgZ2V0RDNE
Rm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGludCBs
ZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKKworICAg
IHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1l
YnVmZmVyICpzb3VyY2UpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291
cmNlKTsKKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmlydHVhbCBib29s
IGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGJpbmRUZXhJbWFn
ZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlVGV4SW1h
Z2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKKworICAgIHZpcnR1
YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCk7CisKKyAgcHJv
dGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQ7CisgICAgdmly
dHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwor
ICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFy
Z2V0KTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJl
MkQpOworCisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJl
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVu
ZGVyVGFyZ2V0KTsKKworICAgIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OworCisgICAg
dm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgY29tbWl0UmVjdChHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworCisgICAgSW1hZ2UgbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTXTsKKworICAgIFRleHR1cmVTdG9yYWdlMkQgKm1UZXhTdG9yYWdlOworICAg
IGVnbDo6U3VyZmFjZSAqbVN1cmZhY2U7CisKKyAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJl
ZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLAor
ICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwg
bWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKKyAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwg
dGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcK
KyAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2UgdGhl
IHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKKyAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8g
emVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuCisg
ICAgUmVuZGVyYnVmZmVyICptQ29sb3JidWZmZXJQcm94eTsKKyAgICB1bnNpZ25lZCBpbnQgbVBy
b3h5UmVmczsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0
dXJlU3RvcmFnZQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBs
ZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSk7CisKKyAgICB2
aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUN1YmVNYXAoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBib29sIGRp
cnR5KTsKKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVt
IHRhcmdldCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKTsKKworICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAq
bVRleHR1cmU7CisgICAgY29uc3QgdW5zaWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdldFNlcmlh
bDsKK307CisKK2NsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKK3sKKyAgcHVi
bGljOgorICAgIGV4cGxpY2l0IFRleHR1cmVDdWJlTWFwKEdMdWludCBpZCk7CisKKyAgICB+VGV4
dHVyZUN1YmVNYXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKKyAgICAKKyAgICBH
THNpemVpIGdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBH
THNpemVpIGdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
R0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25z
dDsKKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
KSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZU5l
Z1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWShHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Cisg
ICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKworICAgIHZv
aWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMpOworCisgICAgdm9pZCBzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNz
ZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFnZShHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOworICAg
IHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2b2lkIHN0b3Jh
Z2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworCisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIg
KmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNs
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3Vy
ZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKKworICBwcml2YXRlOgorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CisKKyAgICB2aXJ0dWFs
IElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJl
KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgIHZpcnR1
YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworCisgICAg
Ym9vbCBpc0N1YmVDb21wbGV0ZSgpIGNvbnN0OworICAgIGJvb2wgaXNNaXBtYXBDdWJlQ29tcGxl
dGUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZv
aWQgY29tbWl0UmVjdChpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQg
cmVkZWZpbmVJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIEltYWdlIG1JbWFn
ZUFycmF5WzZdW0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBUZXh0
dXJlU3RvcmFnZUN1YmVNYXAgKm1UZXhTdG9yYWdlOworCisgICAgLy8gQSBzcGVjaWZpYyBpbnRl
cm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJl
bmNlcywKKyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94
eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCisgICAgLy8gYmFjayB0byB0aGlzIHRl
eHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBi
aW5kaW5nCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNh
dXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCisgICAgLy8gdGhlIGNvdW50IGRy
b3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVm
ZmVyLgorICAgIFJlbmRlcmJ1ZmZlciAqbUZhY2VQcm94aWVzWzZdOworICAgIHVuc2lnbmVkIGlu
dCAqbUZhY2VQcm94eVJlZnNbNl07Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfVEVY
VFVSRV9IXwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9UZXh0dXJlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmVTU0UyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmVTU0Uy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvVGV4dHVyZVNTRTIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBUZXh0dXJlU1NFMi5jcHA6IEltcGxlbWVudHMgU1NFMi1iYXNl
ZCBmdW5jdGlvbnMgb2YgZ2w6OkltYWdlIGNsYXNzLiBJdCdzCisvLyBpbiBhIHNlcGFyYXRlZCBm
aWxlIGZvciBHQ0MsIHdoaWNoIGNhbiBlbmFibGUgU1NFIHVzYWdlIG9ubHkgcGVyLWZpbGUsCisv
LyBub3QgZm9yIGNvZGUgYmxvY2tzIHRoYXQgdXNlIFNTRTIgZXhwbGljaXRseS4KKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCisKKyNpbmNsdWRlIDxpbnRyaW4uaD4KKworbmFtZXNw
YWNlIGdsCit7CisKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVM
TDsKKyAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOworICAgIF9fbTEyOGkgYnJNYXNrID0g
X21tX3NldDFfZXBpMzIoMHgwMGZmMDBmZik7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaCk7CisgICAgICAgIGludCB4ID0gMDsKKworICAgICAgICAvLyBNYWtlIG91dHB1dCB3
cml0ZXMgYWxpZ25lZAorICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KCZkZXN0W3hdKSAmIDE1KSAhPSAwKSAmJiB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAg
eworICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07CisgICAgICAgICAg
ICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZm
MDBmZjAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoOyB4ICsgMyA8IHdpZHRoOyB4ICs9
IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2Fk
dV9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7Cisg
ICAgICAgICAgICAvLyBNYXNrIG91dCBnIGFuZCBhLCB3aGljaCBkb24ndCBjaGFuZ2UKKyAgICAg
ICAgICAgIF9fbTEyOGkgZ2FDb21wb25lbnRzID0gX21tX2FuZG5vdF9zaTEyOChick1hc2ssIHNv
dXJjZURhdGEpOworICAgICAgICAgICAgLy8gTWFzayBvdXQgYiBhbmQgcgorICAgICAgICAgICAg
X19tMTI4aSBickNvbXBvbmVudHMgPSBfbW1fYW5kX3NpMTI4KHNvdXJjZURhdGEsIGJyTWFzayk7
CisgICAgICAgICAgICAvLyBTd2FwIGIgYW5kIHIKKyAgICAgICAgICAgIF9fbTEyOGkgYnJTd2Fw
cGVkID0gX21tX3NodWZmbGVoaV9lcGkxNihfbW1fc2h1ZmZsZWxvX2VwaTE2KGJyQ29tcG9uZW50
cywgX01NX1NIVUZGTEUoMiwgMywgMCwgMSkpLCBfTU1fU0hVRkZMRSgyLCAzLCAwLCAxKSk7Cisg
ICAgICAgICAgICBfX20xMjhpIHJlc3VsdCA9IF9tbV9vcl9zaTEyOChnYUNvbXBvbmVudHMsIGJy
U3dhcHBlZCk7CisgICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxf
X20xMjhpKj4oJmRlc3RbeF0pLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGVy
Zm9ybSBsZWZ0b3ZlciB3cml0ZXMKKyAgICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsKKyAgICAg
ICAgICAgIGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAm
IDB4ZmYwMGZmMDApOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEltYWdlOjpsb2FkQWxw
aGFEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOworICAg
IF9fbTEyOGkgemVyb1dpZGUgPSBfbW1fc2V0emVyb19zaTEyOCgpOworCisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOworCisgICAgICAgIGludCB4
OworICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZAorICAgICAgICBmb3IgKHgg
PSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZkZXN0W3hdKSAmIDB4RikgIT0gMCAm
JiB4IDwgd2lkdGgpOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKDsgeCArIDcgPCB3aWR0aDsgeCArPSA4KQorICAgICAgICB7CisgICAgICAgICAg
ICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZGxfZXBpNjQocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOworICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBl
YWNoIGJ5dGUgdG8gMTZiaXQsIG1ha2UgdGhlIGxvd2VyIGJ5dGUgdG8gemVybworICAgICAgICAg
ICAgc291cmNlRGF0YSA9IF9tbV91bnBhY2tsb19lcGk4KHplcm9XaWRlLCBzb3VyY2VEYXRhKTsK
KyAgICAgICAgICAgIC8vIEludGVybGVhdmUgZWFjaCAxNmJpdCB0byAzMmJpdCwgbWFrZSB0aGUg
bG93ZXIgMTZiaXQgdG8gemVybworICAgICAgICAgICAgX19tMTI4aSBsbyA9IF9tbV91bnBhY2ts
b19lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7CisgICAgICAgICAgICBfX20xMjhpIGhpID0g
X21tX3VucGFja2hpX2VwaTE2KHplcm9XaWRlLCBzb3VyY2VEYXRhKTsKKworICAgICAgICAgICAg
X21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgbG8p
OworICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+
KCZkZXN0W3ggKyA0XSksIGhpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZSB0aGUg
cmVtYWluZGVyCisgICAgICAgIGZvciAoOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgZGVzdFt4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc291cmNlW3hdKSA8
PCAyNDsKKyAgICAgICAgfQorICAgIH0KK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlU1NFMi5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1h
bmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzgzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBWZXJ0ZXhEYXRhTWFuYWdlci5oOiBEZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFu
YWdlciwgYSBjbGFzcyB0aGF0CisvLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vz
cy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorCisjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvdmVydGV4Y29udmVyc2lvbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5h
Z2VyLmgiCisKK25hbWVzcGFjZQoreworICAgIGVudW0geyBJTklUSUFMX1NUUkVBTV9CVUZGRVJf
U0laRSA9IDEwMjQqMTAyNCB9OworICAgIC8vIFRoaXMgaGFzIHRvIGJlIGF0IGxlYXN0IDRrIG9y
IGVsc2UgaXQgZmFpbHMgb24gQVRJIGNhcmRzLgorICAgIGVudW0geyBDT05TVEFOVF9WRVJURVhf
QlVGRkVSX1NJWkUgPSA0MDk2IH07Cit9CisKK25hbWVzcGFjZSBnbAorewordW5zaWduZWQgaW50
IFZlcnRleEJ1ZmZlcjo6bUN1cnJlbnRTZXJpYWwgPSAxOworCitpbnQgZWxlbWVudHNJbkJ1ZmZl
cihjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgaW50IHNpemUpCit7CisgICAgaW50
IHN0cmlkZSA9IGF0dHJpYnV0ZS5zdHJpZGUoKTsKKyAgICByZXR1cm4gKHNpemUgLSBhdHRyaWJ1
dGUubU9mZnNldCAlIHN0cmlkZSArIChzdHJpZGUgLSBhdHRyaWJ1dGUudHlwZVNpemUoKSkpIC8g
c3RyaWRlOworfQorCitWZXJ0ZXhEYXRhTWFuYWdlcjo6VmVydGV4RGF0YU1hbmFnZXIoQ29udGV4
dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKSA6IG1Db250ZXh0KGNvbnRleHQp
LCBtRGV2aWNlKGRldmljZSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhf
QVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgbURpcnR5Q3VycmVudFZhbHVlW2ldID0gdHJ1
ZTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXSA9IE5VTEw7CisgICAgICAgIG1DdXJy
ZW50VmFsdWVPZmZzZXRzW2ldID0gMDsKKyAgICB9CisKKyAgICBjb25zdCBEM0RDQVBTOSAmY2Fw
cyA9IGNvbnRleHQtPmdldERldmljZUNhcHMoKTsKKyAgICBjaGVja1ZlcnRleENhcHMoY2Fwcy5E
ZWNsVHlwZXMpOworCisgICAgbVN0cmVhbWluZ0J1ZmZlciA9IG5ldyBTdHJlYW1pbmdWZXJ0ZXhC
dWZmZXIobURldmljZSwgSU5JVElBTF9TVFJFQU1fQlVGRkVSX1NJWkUpOworCisgICAgaWYgKCFt
U3RyZWFtaW5nQnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gYWxsb2NhdGUg
dGhlIHN0cmVhbWluZyB2ZXJ0ZXggYnVmZmVyLiIpOworICAgIH0KK30KKworVmVydGV4RGF0YU1h
bmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdlcigpCit7CisgICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZm
ZXI7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgZGVsZXRlIG1DdXJyZW50VmFsdWVCdWZmZXJbaV07CisgICAgfQorfQor
CitzdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6d3JpdGVBdHRyaWJ1dGVEYXRhKEFycmF5
VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBj
b25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBpbnN0YW5jZXMpCit7Cisg
ICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJ1dGUubUJvdW5kQnVmZmVyLmdldCgpOworCisgICAg
aW50IGlucHV0U3RyaWRlID0gYXR0cmlidXRlLnN0cmlkZSgpOworICAgIGludCBlbGVtZW50U2l6
ZSA9IGF0dHJpYnV0ZS50eXBlU2l6ZSgpOworICAgIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmY29u
dmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYnV0ZSk7CisgICAgc3RkOjpzaXplX3Qgc3Ry
ZWFtT2Zmc2V0ID0gMDsKKworICAgIHZvaWQgKm91dHB1dCA9IE5VTEw7CisgICAgCisgICAgaWYg
KHZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIG91dHB1dCA9IHZlcnRleEJ1ZmZlci0+bWFw
KGF0dHJpYnV0ZSwgc3BhY2VSZXF1aXJlZChhdHRyaWJ1dGUsIGNvdW50LCBpbnN0YW5jZXMpLCAm
c3RyZWFtT2Zmc2V0KTsKKyAgICB9CisKKyAgICBpZiAob3V0cHV0ID09IE5VTEwpCisgICAgewor
ICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0
dXJuIC0xOworICAgIH0KKworICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKKworICAgIGlm
IChidWZmZXIpCisgICAgeworICAgICAgICBpbnQgb2Zmc2V0ID0gYXR0cmlidXRlLm1PZmZzZXQ7
CisKKyAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyLT5kYXRh
KCkpICsgb2Zmc2V0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnB1dCA9IHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWJ1dGUubVBvaW50ZXIpOworICAgIH0KKworICAg
IGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWJ1dGUubURpdmlzb3IgPT0gMCkKKyAgICB7Cisg
ICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7CisgICAgfQorCisgICAgaWYgKGNv
bnZlcnRlci5pZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9PSBlbGVtZW50U2l6ZSkKKyAgICB7Cisg
ICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29udmVydGVyLmNvbnZlcnRBcnJheShpbnB1dCwg
aW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOworICAgIH0KKworICAgIHZlcnRleEJ1ZmZlci0+
dW5tYXAoKTsKKworICAgIHJldHVybiBzdHJlYW1PZmZzZXQ7Cit9CisKK0dMZW51bSBWZXJ0ZXhE
YXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQs
IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQsIEdMc2l6ZWkgaW5zdGFuY2VzKQorewor
ICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9PVVRf
T0ZfTUVNT1JZOworICAgIH0KKworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRy
aWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKKyAgICBQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisK
KyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgdHJhbnNsYXRl
ZFthdHRyaWJ1dGVJbmRleF0uYWN0aXZlID0gKHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5k
ZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgdGhl
IHJlcXVpcmVkIHN0b3JhZ2Ugc2l6ZSBwZXIgdXNlZCBidWZmZXIsIGFuZCBpbnZhbGlkYXRlIHN0
YXRpYyBidWZmZXJzIHRoYXQgZG9uJ3QgY29udGFpbiBtYXRjaGluZyBhdHRyaWJ1dGVzCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAg
ICAgIGlmICh0cmFuc2xhdGVkW2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ldLm1BcnJheUVuYWJsZWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91
bmRCdWZmZXIuZ2V0KCk7CisgICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKnN0YXRpY0J1
ZmZlciA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkgOiBOVUxMOwor
CisgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChzdGF0aWNCdWZmZXItPnNpemUoKSA9PSAwKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBlbGVtZW50c0luQnVmZmVyKGF0
dHJpYnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljQnVm
ZmVyLT5hZGRSZXF1aXJlZFNwYWNlKHNwYWNlUmVxdWlyZWQoYXR0cmlic1tpXSwgdG90YWxDb3Vu
dCwgMCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0
aWNCdWZmZXItPmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldKSA9PSAtMSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc3RhdGljIGJ1ZmZlciBkb2Vzbid0
IGhhdmUgbWF0Y2hpbmcgYXR0cmlidXRlcywgc28gZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzdHJl
YW1pbmcgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgc3BhY2Ugb2YgYWxs
IHByZXZpb3VzIGF0dHJpYnV0ZXMgYmVsb25naW5nIHRvIHRoZSBpbnZhbGlkYXRlZCBzdGF0aWMg
YnVmZmVyIHRvIHRoZSBzdHJlYW1pbmcgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHByZXZpb3VzID0gMDsgcHJldmlvdXMgPCBpOyBwcmV2aW91cysrKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRlZFtwcmV2aW91
c10uYWN0aXZlICYmIGF0dHJpYnNbcHJldmlvdXNdLm1BcnJheUVuYWJsZWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyICpwcmV2
aW91c0J1ZmZlciA9IGF0dHJpYnNbcHJldmlvdXNdLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKnByZXZpb3VzU3RhdGlj
QnVmZmVyID0gcHJldmlvdXNCdWZmZXIgPyBwcmV2aW91c0J1ZmZlci0+Z2V0U3RhdGljVmVydGV4
QnVmZmVyKCkgOiBOVUxMOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRp
Y0J1ZmZlciA9PSBwcmV2aW91c1N0YXRpY0J1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1pbmdCdWZmZXIt
PmFkZFJlcXVpcmVkU3BhY2Uoc3BhY2VSZXF1aXJlZChhdHRyaWJzW3ByZXZpb3VzXSwgY291bnQs
IGluc3RhbmNlcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIG1TdHJlYW1pbmdCdWZmZXItPmFkZFJlcXVpcmVkU3BhY2Uoc3BhY2VSZXF1aXJlZChhdHRy
aWJzW2ldLCBjb3VudCwgaW5zdGFuY2VzKSk7CisKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVy
LT5pbnZhbGlkYXRlU3RhdGljRGF0YSgpOworICAgICAgICAgICAgICAgIH0gICAgCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bVN0cmVhbWluZ0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFjZVJlcXVpcmVkKGF0dHJpYnNb
aV0sIGNvdW50LCBpbnN0YW5jZXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFJlc2VydmUgdGhlIHJlcXVpcmVkIHNwYWNlIHBlciB1c2VkIGJ1ZmZlcgorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAg
ICAgICBpZiAodHJhbnNsYXRlZFtpXS5hY3RpdmUgJiYgYXR0cmlic1tpXS5tQXJyYXlFbmFibGVk
KQorICAgICAgICB7CisgICAgICAgICAgICBCdWZmZXIgKmJ1ZmZlciA9IGF0dHJpYnNbaV0ubUJv
dW5kQnVmZmVyLmdldCgpOworICAgICAgICAgICAgQXJyYXlWZXJ0ZXhCdWZmZXIgKnN0YXRpY0J1
ZmZlciA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkgOiBOVUxMOwor
ICAgICAgICAgICAgQXJyYXlWZXJ0ZXhCdWZmZXIgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZl
ciA/IHN0YXRpY0J1ZmZlciA6IG1TdHJlYW1pbmdCdWZmZXI7CisKKyAgICAgICAgICAgIGlmICh2
ZXJ0ZXhCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmVydGV4QnVmZmVy
LT5yZXNlcnZlUmVxdWlyZWRTcGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLy8gUGVyZm9ybSB0aGUgdmVydGV4IGRhdGEgdHJhbnNsYXRpb25zCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAg
IGlmICh0cmFuc2xhdGVkW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGF0
dHJpYnNbaV0ubUFycmF5RW5hYmxlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBC
dWZmZXIgKmJ1ZmZlciA9IGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyLmdldCgpOworCisgICAgICAg
ICAgICAgICAgaWYgKCFidWZmZXIgJiYgYXR0cmlic1tpXS5tUG9pbnRlciA9PSBOVUxMKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhcHBsaWNh
dGlvbiBlcnJvciB0aGF0IHdvdWxkIG5vcm1hbGx5IHJlc3VsdCBpbiBhIGNyYXNoLCBidXQgd2Ug
Y2F0Y2ggaXQgYW5kIHJldHVybiBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICBFUlIoIkFu
IGVuYWJsZWQgdmVydGV4IGFycmF5IGhhcyBubyBidWZmZXIgYW5kIG5vIHBvaW50ZXIuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmNvbnZl
cnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWJzW2ldKTsKKworICAgICAgICAgICAgICAgIFN0
YXRpY1ZlcnRleEJ1ZmZlciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0
aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CisgICAgICAgICAgICAgICAgQXJyYXlWZXJ0ZXhCdWZm
ZXIgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19j
YXN0PEFycmF5VmVydGV4QnVmZmVyKj4obVN0cmVhbWluZ0J1ZmZlcik7CisKKyAgICAgICAgICAg
ICAgICBzdGQ6OnNpemVfdCBzdHJlYW1PZmZzZXQgPSAtMTsKKworICAgICAgICAgICAgICAgIGlm
IChzdGF0aWNCdWZmZXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBz
dHJlYW1PZmZzZXQgPSBzdGF0aWNCdWZmZXItPmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldKTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtT2Zmc2V0ID09IC0xKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBlbnRp
cmUgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IGVsZW1l
bnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBhdHRyaWJzW2ldLm1PZmZzZXQgLyBhdHRyaWJzW2ld
LnN0cmlkZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSB3cml0
ZUF0dHJpYnV0ZURhdGEoc3RhdGljQnVmZmVyLCAtc3RhcnRJbmRleCwgdG90YWxDb3VudCwgYXR0
cmlic1tpXSwgMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RyZWFtT2Zmc2V0ICE9IC0xKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgKz0gKGF0dHJpYnNbaV0ubU9mZnNldCAvIGF0
dHJpYnNbaV0uc3RyaWRlKCkpICogY29udmVydGVyLm91dHB1dEVsZW1lbnRTaXplOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmlic1tpXS5tRGl2
aXNvciA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmVhbU9mZnNldCArPSBzdGFydCAqIGNvbnZlcnRlci5vdXRwdXRFbGVtZW50
U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSB3cml0ZUF0dHJpYnV0ZURhdGEo
bVN0cmVhbWluZ0J1ZmZlciwgc3RhcnQsIGNvdW50LCBhdHRyaWJzW2ldLCBpbnN0YW5jZXMpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgPT0g
LTEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VU
X09GX01FTU9SWTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0cmFuc2xh
dGVkW2ldLnZlcnRleEJ1ZmZlciA9IHZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7CisgICAgICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS5zZXJpYWwgPSB2ZXJ0ZXhCdWZmZXItPmdldFNlcmlhbCgp
OworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uZGl2aXNvciA9IGF0dHJpYnNbaV0ubURp
dmlzb3I7CisKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnR5cGUgPSBjb252ZXJ0ZXIu
ZDNkRGVjbFR5cGU7CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zdHJpZGUgPSBjb252
ZXJ0ZXIub3V0cHV0RWxlbWVudFNpemU7CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5v
ZmZzZXQgPSBzdHJlYW1PZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtQ3VycmVudFZhbHVlQnVmZmVyW2ld
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1
ZmZlcltpXSA9IG5ldyBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXIobURldmljZSwgQ09OU1RBTlRfVkVS
VEVYX0JVRkZFUl9TSVpFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBT
dHJlYW1pbmdWZXJ0ZXhCdWZmZXIgKmJ1ZmZlciA9IG1DdXJyZW50VmFsdWVCdWZmZXJbaV07CisK
KyAgICAgICAgICAgICAgICBpZiAobURpcnR5Q3VycmVudFZhbHVlW2ldKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHJlcXVpcmVkU3BhY2UgPSA0ICog
c2l6ZW9mKGZsb2F0KTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5hZGRSZXF1aXJlZFNw
YWNlKHJlcXVpcmVkU3BhY2UpOworICAgICAgICAgICAgICAgICAgICBidWZmZXItPnJlc2VydmVS
ZXF1aXJlZFNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpkYXRhID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQqPihidWZmZXItPm1hcChWZXJ0ZXhBdHRyaWJ1dGUoKSwgcmVxdWlyZWRTcGFj
ZSwgJm1DdXJyZW50VmFsdWVPZmZzZXRzW2ldKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChk
YXRhKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
WzBdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YVsxXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFbMl0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMl07CisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhWzNdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT51bm1hcCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbURpcnR5Q3VycmVudFZhbHVlW2ldID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ld
LnZlcnRleEJ1ZmZlciA9IG1DdXJyZW50VmFsdWVCdWZmZXJbaV0tPmdldEJ1ZmZlcigpOworICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc2VyaWFsID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltp
XS0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0g
MDsKKworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udHlwZSA9IEQzRERFQ0xUWVBFX0ZM
T0FUNDsKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IDA7CisgICAgICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBtQ3VycmVudFZhbHVlT2Zmc2V0c1tpXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAodHJhbnNsYXRl
ZFtpXS5hY3RpdmUgJiYgYXR0cmlic1tpXS5tQXJyYXlFbmFibGVkKQorICAgICAgICB7CisgICAg
ICAgICAgICBCdWZmZXIgKmJ1ZmZlciA9IGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyLmdldCgpOwor
CisgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJ1ZmZlci0+cHJvbW90ZVN0YXRpY1VzYWdlKGNvdW50ICogYXR0cmlic1tpXS50eXBlU2l6ZSgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBHTF9OT19F
UlJPUjsKK30KKworc3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OnNwYWNlUmVxdWlyZWQo
Y29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IGNvdW50LCBHTHNpemVp
IGluc3RhbmNlcykgY29uc3QKK3sKKyAgICBzaXplX3QgZWxlbWVudFNpemUgPSBmb3JtYXRDb252
ZXJ0ZXIoYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKKworICAgIGlmIChpbnN0YW5jZXMgPT0g
MCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbGVtZW50
U2l6ZSAqIGNvdW50OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZWxl
bWVudFNpemUgKiAoKGluc3RhbmNlcyArIGF0dHJpYi5tRGl2aXNvciAtIDEpIC8gYXR0cmliLm1E
aXZpc29yKTsKKyAgICB9Cit9CisKKy8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0
dHJpYiB0eXBlIHRvIEQzRCBkZWNsIHR5cGU6CisvLworLy8gQllURSAgICAgICAgICAgICAgICAg
U0hPUlQgKENhc3QpCisvLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAo
Y2FuJ3QgYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQorLy8gVU5TSUdORURf
QllURSAgICAgICAgVUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCisvLyBVTlNJR05F
RF9CWVRFLW5vcm0gICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8v
IFNIT1JUICAgICAgICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKKy8vIFNIT1JULW5vcm0gICAg
ICAgICAgIFNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gVU5T
SUdORURfU0hPUlQgICAgICAgRkxPQVQgKENhc3QpCisvLyBVTlNJR05FRF9TSE9SVC1ub3JtICBV
U0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBGSVhFRCAobm90
IGluIFdlYkdMKSBGTE9BVCAoRml4ZWRUb0Zsb2F0KQorLy8gRkxPQVQgICAgICAgICAgICAgICAg
RkxPQVQgKElkZW50aXR5KQorCisvLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdM
ZW51bSkgdG8gdGhlIEMgdHlwZWRlZi4gCit0ZW1wbGF0ZSA8R0xlbnVtIEdMVHlwZT4gc3RydWN0
IEdMVG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfQllURT4g
eyB0eXBlZGVmIEdMYnl0ZSB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxH
TF9VTlNJR05FRF9CWVRFPiB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyB9OwordGVtcGxhdGUgPD4g
c3RydWN0IEdMVG9DVHlwZTxHTF9TSE9SVD4geyB0eXBlZGVmIEdMc2hvcnQgdHlwZTsgfTsKK3Rl
bXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBH
THVzaG9ydCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4g
eyB0eXBlZGVmIEdMdWludCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxH
TF9GTE9BVD4geyB0eXBlZGVmIEdMZmxvYXQgdHlwZTsgfTsKKworLy8gVGhpcyBkaWZmZXJzIGZy
b20gRDNEREVDTFRZUEUgaW4gdGhhdCBpdCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNpb24gaXMg
YXBwbGllZCBsYXN0LikKK2VudW0gRDNEVmVydGV4VHlwZQoreworICAgIEQzRFZUX0ZMT0FULAor
ICAgIEQzRFZUX1NIT1JULAorICAgIEQzRFZUX1NIT1JUX05PUk0sCisgICAgRDNEVlRfVUJZVEUs
CisgICAgRDNEVlRfVUJZVEVfTk9STSwKKyAgICBEM0RWVF9VU0hPUlRfTk9STQorfTsKKworLy8g
RDNEVG9DVHlwZSBtYXBzIGZyb20gRDNEIHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5
cGUpIHRvIHRoZSBjb3JyZXNwb25kaW5nIEMgdHlwZS4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQg
RDNEVHlwZT4gc3RydWN0IEQzRFRvQ1R5cGUgeyB9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNE
VG9DVHlwZTxEM0RWVF9GTE9BVD4geyB0eXBlZGVmIGZsb2F0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVk
ZWYgc2hvcnQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VC
WVRFPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0
IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEVfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlw
ZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7
IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdHlwZTsgfTsKKworLy8gRW5jb2RlIHRoZSB0eXBlL3Np
emUgY29tYmluYXRpb25zIHRoYXQgRDNEIHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBl
eHBhbmRzIHRvIGEgd2lkZW5lciB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZmlu
YWwgc2l6ZS4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgdHlwZSwgaW50IHNpemU+CitzdHJ1Y3Qg
V2lkZW5SdWxlCit7Cit9OworCit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8
RDNEVlRfRkxPQVQsIHNpemU+ICAgICAgICAgIDogZ2w6Ok5vV2lkZW48c2l6ZT4geyB9OwordGVt
cGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXplPiAgICAg
ICAgICA6IGdsOjpXaWRlblRvRXZlbjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0
cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9F
dmVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RW
VF9VQllURSwgc2l6ZT4gICAgICAgICAgOiBnbDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwordGVt
cGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+
ICAgICA6IGdsOjpXaWRlblRvRm91cjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0
cnVjdCBXaWRlblJ1bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+ICAgIDogZ2w6OldpZGVuVG9F
dmVuPHNpemU+IHsgfTsKKworLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5
OjpEZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0Qg
dmVydGV4IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCBk
M2R0eXBlLCBpbnQgc2l6ZT4KK3N0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3MKK3sKK307CisKK3RlbXBs
YXRlIDx1bnNpZ25lZCBpbnQgX2NhcGZsYWcsIHVuc2lnbmVkIGludCBfZGVjbGZsYWc+CitzdHJ1
Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVyCit7CisgICAgZW51bSB7IGNhcGZsYWcgPSBfY2FwZmxh
ZyB9OworICAgIGVudW0geyBkZWNsZmxhZyA9IF9kZWNsZmxhZyB9OworfTsKKwordGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjww
LCBEM0RERUNMVFlQRV9GTE9BVDI+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfRkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xU
WVBFX0ZMT0FUMz4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9GTE9BVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQ0
PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCAy
PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDI+IHsgfTsKK3Rl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDQ+IDogVmVydGV4
VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9OwordGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVfU0hPUlQyTj4geyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCA0PiA6
IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0TiwgRDNEREVDTFRZUEVfU0hP
UlQ0Tj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllU
RSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNCwgRDNEREVDTFRZ
UEVfVUJZVEU0PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZU
X1VCWVRFX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTRO
LCBEM0RERUNMVFlQRV9VQllURTROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0RE
VENBUFNfVVNIT1JUMk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBFX1VTSE9SVDROPiB7IH07
CisKKworLy8gVmVydGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYgbm9ybWFsaXplZCBmbGFn
IHRvIHByZWZlcnJlZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBlcyAoYXMgRDNEVmVydGV4
VHlwZSBlbnVtcykuCit0ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9vbCBub3JtYWxpemVkPgor
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nCit7Cit9OworCit0ZW1wbGF0ZSA8RDNEVmVydGV4VHlw
ZSBQcmVmZXJyZWQsIEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJyZWQ+CitzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmdCYXNlCit7CisgICAgZW51bSB7IHByZWZlcnJlZCA9IFByZWZlcnJl
ZCB9OworICAgIGVudW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Cit9OworCit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAg
ICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9y
bWFsaXplCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURf
QllURSwgZmFsc2U+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
VUJZVEUsIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5LCBDYXN0Cit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgdHJ1ZT4g
ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEVfTk9STSwg
RDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICAg
ICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
TWFwcGluZzxHTF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5
cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8g
Q2FzdCwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xf
VU5TSUdORURfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jh
c2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKK3RlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgdHJ1ZT4g
ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VU0hPUlRfTk9STSwg
RDNEVlRfRkxPQVQ+IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8Ym9vbCBu
b3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQsIG5vcm1hbGl6ZWQ+
ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpeGVkVG9GbG9hdAordGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZGVudGl0eQorCisKKy8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBhbmQgYSBEM0QgdHlw
ZSwgQ29udmVyc2lvblJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lvbiBydWxlIChDYXN0
LCBOb3JtYWxpemUsIElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgorLy8gVGhlIGNvbnZlcnNpb24g
cnVsZXMgdGhlbXNlbHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJzaW9uLmguCisKKy8v
IEFsbW9zdCBhbGwgY2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVkaW5nIHRob3NlIHRo
YXQgYXJlIGFjdHVhbGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93cyBpdCdzIGFuIGlk
ZW50aXR5IG1hcHBpbmcpLgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxp
emVkLCB1bnNpZ25lZCBpbnQgdG9UeXBlPgorc3RydWN0IENvbnZlcnNpb25SdWxlIDogZ2w6OkNh
c3Q8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwgdHlwZW5hbWUgRDNEVG9DVHlw
ZTx0b1R5cGU+Ojp0eXBlPgoreworfTsKKworLy8gQWxsIGNvbnZlcnNpb25zIGZyb20gbm9ybWFs
aXplZCB0eXBlcyB0byBmbG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KK3RlbXBsYXRl
IDxHTGVudW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwg
RDNEVlRfRkxPQVQ+IDogZ2w6Ok5vcm1hbGl6ZTx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+
Ojp0eXBlPiB7IH07CisKKy8vIFVzZSBhIGZ1bGwgc3BlY2lhbGlzYXRpb24gZm9yIHRoaXMgc28g
dGhhdCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9mIHRoZSBnZW5lcmljIG5vcm1h
bGl6ZS10by1mbG9hdCBydWxlcy4KK3RlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxH
TF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+
IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2Us
IEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07CisKKy8vIEEg
Mi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNh
dXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQorLy8gd2hl
dGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5v
cm1hbGl6ZWQ+CitzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMgoreworfTsKKwordGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIHRydWU+
ICA6IGdsOjpOb3JtYWxpemVkRGVmYXVsdFZhbHVlczxUPiB7IH07Cit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgZmFsc2U+IDogZ2w6OlNpbXBs
ZURlZmF1bHRWYWx1ZXM8VD4geyB9OworCisvLyBXb3JrIG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBy
dWxlIGZvciBhIEQzRCB0eXBlIChleHByZXNzZWQgYXMgdGhlIEMgdHlwZSkgYW5kIAordGVtcGxh
dGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4KK3N0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVz
IDogRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBub3JtYWxpemVkPgoreworfTsKKwordGVt
cGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXM8ZmxvYXQs
IG5vcm1hbGl6ZWQ+IDogZ2w6OlNpbXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKKworLy8g
UG9saWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRv
IHVzZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNpb24uCisvLyBUaGUgZmFsbGJh
Y2sgY29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11
c3Qgc3VwcG9ydC4KK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51
bSB7IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
VXNlRmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07CisKKy8vIENvbnZl
cnRlciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXpl
IGFuZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCisvLyBpdCBwcm92
aWRlcyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0
ZXIsIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKKy8vIGFuZCB0aGUg
RDNEREVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBk
ZWNsZmxhZy4KK3RlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50
IHNpemUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KK3N0cnVjdCBD
b252ZXJ0ZXIKKyAgICA6IGdsOjpWZXJ0ZXhEYXRhQ29udmVydGVyPHR5cGVuYW1lIEdMVG9DVHlw
ZTxmcm9tVHlwZT46OnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRlblJ1
bGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVk
PiA+Ojp0eXBlLCBzaXplPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNp
b25SdWxlPGZyb21UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFs
aXplZD4gPjo6dHlwZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmVy
dGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVN
YXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXplZCA+
ID4KK3sKK3ByaXZhdGU6CisgICAgZW51bSB7IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwgVmVy
dGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUgfTsKKyAgICBlbnVt
IHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9OworCitw
dWJsaWM6CisgICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNk
c2l6ZT46OmNhcGZsYWcgfTsKKyAgICBlbnVtIHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8
ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Cit9OworCisvLyBJbml0aWFsaXNlIGEgVHJh
bnNsYXRpb25JbmZvCisjZGVmaW5lIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIHByZWZl
cnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVm
ZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENv
bnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpmaW5hbFNpemUsICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJl
ZmVycmVkPjo6ZGVjbGZsYWcpICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBcCisgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENvbnZl
cnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+OjpjYXBmbGFnLCBcCisgICAgICAg
IFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZCksICAgICAgICBcCisg
ICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZUZhbGxiYWNrKSAgICAgICAg
ICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRSh0eXBlKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZ
UEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0
KSB9LCBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRy
dWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMiksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAzKSwgVFJBTlNMQVRJT05f
Rk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0sICAgICBcCisgICAgfQorCisjZGVm
aW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKHR5cGUpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAy
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCisgICAgICAgIHsg
VFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZ
UEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCisgICAgfQorCitjb25zdCBWZXJ0ZXhEYXRhTWFuYWdl
cjo6VHJhbnNsYXRpb25EZXNjcmlwdGlvbiBWZXJ0ZXhEYXRhTWFuYWdlcjo6bVBvc3NpYmxlVHJh
bnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XSA9IC8vIFtHTCB0eXBl
cyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplLTFdCit7Cisg
ICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0JZVEUpLAorICAgIFRSQU5TTEFUSU9OU19GT1Jf
VFlQRShHTF9VTlNJR05FRF9CWVRFKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfU0hP
UlQpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9TSE9SVCksCisgICAg
VFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xfRklYRUQpLAorICAgIFRSQU5TTEFUSU9O
U19GT1JfVFlQRV9OT19OT1JNKEdMX0ZMT0FUKQorfTsKKwordm9pZCBWZXJ0ZXhEYXRhTWFuYWdl
cjo6Y2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcykKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTOyBpKyspCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDI7IGorKykKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCA0OyBrKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtr
XS5jYXBzRmxhZyA9PSAwIHx8IChkZWNsVHlwZXMgJiBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1b
al1ba10uY2Fwc0ZsYWcpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBtQXR0cmlidXRlVHlwZXNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1b
al1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUF0dHJp
YnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmZhbGxi
YWNrQ29udmVyc2lvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKKy8vIFRoaXMgaXMgdXNlZCB0byBpbmRleCBtQXR0cmlidXRlVHlwZXMg
YW5kIG1Qb3NzaWJsZVRyYW5zbGF0aW9ucy4KK3Vuc2lnbmVkIGludCBWZXJ0ZXhEYXRhTWFuYWdl
cjo6dHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOiByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfU0hPUlQ6IHJldHVybiAyOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0ZJWEVEOiBy
ZXR1cm4gNDsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1OworCisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gNTsKKyAgICB9Cit9CisKK1ZlcnRleEJ1ZmZlcjo6VmVy
dGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdP
UkQgdXNhZ2VGbGFncykgOiBtRGV2aWNlKGRldmljZSksIG1WZXJ0ZXhCdWZmZXIoTlVMTCkKK3sK
KyAgICBpZiAoc2l6ZSA+IDApCisgICAgeworICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXREaXNw
bGF5KCktPmdldEJ1ZmZlclBvb2wodXNhZ2VGbGFncyk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZSwgdXNhZ2VGbGFncywgMCwgcG9vbCwg
Jm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOworICAgICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNp
emUgJWx1LiIsIHNpemUpOworICAgICAgICB9CisgICAgfQorfQorCitWZXJ0ZXhCdWZmZXI6On5W
ZXJ0ZXhCdWZmZXIoKQoreworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAg
bVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOworICAgIH0KK30KKwordm9pZCBWZXJ0ZXhCdWZmZXI6
OnVubWFwKCkKK3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1WZXJ0
ZXhCdWZmZXItPlVubG9jaygpOworICAgIH0KK30KKworSURpcmVjdDNEVmVydGV4QnVmZmVyOSAq
VmVydGV4QnVmZmVyOjpnZXRCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtVmVydGV4QnVm
ZmVyOworfQorCit1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOjpnZXRTZXJpYWwoKSBjb25zdAor
eworICAgIHJldHVybiBtU2VyaWFsOworfQorCit1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOjpp
c3N1ZVNlcmlhbCgpCit7CisgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Cit9CisKK0FycmF5
VmVydGV4QnVmZmVyOjpBcnJheVZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Us
IHN0ZDo6c2l6ZV90IHNpemUsIERXT1JEIHVzYWdlRmxhZ3MpIDogVmVydGV4QnVmZmVyKGRldmlj
ZSwgc2l6ZSwgdXNhZ2VGbGFncykKK3sKKyAgICBtQnVmZmVyU2l6ZSA9IHNpemU7CisgICAgbVdy
aXRlUG9zaXRpb24gPSAwOworICAgIG1SZXF1aXJlZFNwYWNlID0gMDsKK30KKworQXJyYXlWZXJ0
ZXhCdWZmZXI6On5BcnJheVZlcnRleEJ1ZmZlcigpCit7Cit9CisKK3ZvaWQgQXJyYXlWZXJ0ZXhC
dWZmZXI6OmFkZFJlcXVpcmVkU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlKQoreworICAgIG1SZXF1
aXJlZFNwYWNlICs9IHJlcXVpcmVkU3BhY2U7Cit9CisKK1N0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6
U3RyZWFtaW5nVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXpl
X3QgaW5pdGlhbFNpemUpIDogQXJyYXlWZXJ0ZXhCdWZmZXIoZGV2aWNlLCBpbml0aWFsU2l6ZSwg
RDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSkKK3sKK30KKworU3RyZWFtaW5n
VmVydGV4QnVmZmVyOjp+U3RyZWFtaW5nVmVydGV4QnVmZmVyKCkKK3sKK30KKwordm9pZCAqU3Ry
ZWFtaW5nVmVydGV4QnVmZmVyOjptYXAoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUs
IHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpvZmZzZXQpCit7CisgICAg
dm9pZCAqbWFwUHRyID0gTlVMTDsKKworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAgIHsKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5Mb2NrKG1Xcml0ZVBvc2l0aW9u
LCByZXF1aXJlZFNwYWNlLCAmbWFwUHRyLCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJS
KCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgICpvZmZzZXQgPSBtV3JpdGVQb3NpdGlv
bjsKKyAgICAgICAgbVdyaXRlUG9zaXRpb24gKz0gcmVxdWlyZWRTcGFjZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbWFwUHRyOworfQorCit2b2lkIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6cmVzZXJ2
ZVJlcXVpcmVkU3BhY2UoKQoreworICAgIGlmIChtUmVxdWlyZWRTcGFjZSA+IG1CdWZmZXJTaXpl
KQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIg
PSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbUJ1ZmZlclNpemUgPSBzdGQ6Om1heChtUmVx
dWlyZWRTcGFjZSwgMyAqIG1CdWZmZXJTaXplIC8gMik7ICAgLy8gMS41IHggbUJ1ZmZlclNpemUg
aXMgYXJiaXRyYXJ5IGFuZCBzaG91bGQgYmUgY2hlY2tlZCB0byBzZWUgd2UgZG9uJ3QgaGF2ZSB0
b28gbWFueSByZWFsbG9jYXRpb25zLgorCisgICAgICAgIEQzRFBPT0wgcG9vbCA9IGdldERpc3Bs
YXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZ
KTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIo
bUJ1ZmZlclNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIDAsIHBv
b2wsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKKyAgICAgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFs
KCk7CisgICAgCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNp
emUgJWx1LiIsIG1CdWZmZXJTaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIG1Xcml0ZVBvc2l0
aW9uID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAobVdyaXRlUG9zaXRpb24gKyBtUmVxdWlyZWRT
cGFjZSA+IG1CdWZmZXJTaXplKSAgIC8vIFJlY3ljbGUKKyAgICB7CisgICAgICAgIGlmIChtVmVy
dGV4QnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICB2b2lkICpkdW1teTsKKyAgICAgICAg
ICAgIG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOwor
ICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7CisgICAgICAgIH0KKworICAgICAg
ICBtV3JpdGVQb3NpdGlvbiA9IDA7CisgICAgfQorCisgICAgbVJlcXVpcmVkU3BhY2UgPSAwOwor
fQorCitTdGF0aWNWZXJ0ZXhCdWZmZXI6OlN0YXRpY1ZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UpIDogQXJyYXlWZXJ0ZXhCdWZmZXIoZGV2aWNlLCAwLCBEM0RVU0FHRV9XUklU
RU9OTFkpCit7Cit9CisKK1N0YXRpY1ZlcnRleEJ1ZmZlcjo6flN0YXRpY1ZlcnRleEJ1ZmZlcigp
Cit7Cit9CisKK3ZvaWQgKlN0YXRpY1ZlcnRleEJ1ZmZlcjo6bWFwKGNvbnN0IFZlcnRleEF0dHJp
YnV0ZSAmYXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAq
c3RyZWFtT2Zmc2V0KQoreworICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7CisKKyAgICBpZiAobVZl
cnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZl
ci0+TG9jayhtV3JpdGVQb3NpdGlvbiwgcmVxdWlyZWRTcGFjZSwgJm1hcFB0ciwgMCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpbnQgYXR0cmlidXRlT2Zmc2V0
ID0gYXR0cmlidXRlLm1PZmZzZXQgJSBhdHRyaWJ1dGUuc3RyaWRlKCk7CisgICAgICAgIFZlcnRl
eEVsZW1lbnQgZWxlbWVudCA9IHthdHRyaWJ1dGUubVR5cGUsIGF0dHJpYnV0ZS5tU2l6ZSwgYXR0
cmlidXRlLnN0cmlkZSgpLCBhdHRyaWJ1dGUubU5vcm1hbGl6ZWQsIGF0dHJpYnV0ZU9mZnNldCwg
bVdyaXRlUG9zaXRpb259OworICAgICAgICBtQ2FjaGUucHVzaF9iYWNrKGVsZW1lbnQpOworCisg
ICAgICAgICpzdHJlYW1PZmZzZXQgPSBtV3JpdGVQb3NpdGlvbjsKKyAgICAgICAgbVdyaXRlUG9z
aXRpb24gKz0gcmVxdWlyZWRTcGFjZTsKKyAgICB9CisKKyAgICByZXR1cm4gbWFwUHRyOworfQor
Cit2b2lkIFN0YXRpY1ZlcnRleEJ1ZmZlcjo6cmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKQoreworICAg
IGlmICghbVZlcnRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAg
RDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVTQUdFX1dSSVRF
T05MWSk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4QnVm
ZmVyKG1SZXF1aXJlZFNwYWNlLCBEM0RVU0FHRV9XUklURU9OTFksIDAsIHBvb2wsICZtVmVydGV4
QnVmZmVyLCBOVUxMKTsKKyAgICAgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7CisKKyAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIk91dCBv
ZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgbVJlcXVp
cmVkU3BhY2UpOworICAgICAgICB9CisKKyAgICAgICAgbUJ1ZmZlclNpemUgPSBtUmVxdWlyZWRT
cGFjZTsKKyAgICB9CisgICAgZWxzZSBpZiAobVZlcnRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA+
PSBtUmVxdWlyZWRTcGFjZSkKKyAgICB7CisgICAgICAgIC8vIEFscmVhZHkgYWxsb2NhdGVkCisg
ICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsgICAvLyBTdGF0aWMgdmVydGV4IGJ1ZmZlcnMg
Y2FuJ3QgYmUgcmVzaXplZAorCisgICAgbVJlcXVpcmVkU3BhY2UgPSAwOworfQorCitzdGQ6OnNp
emVfdCBTdGF0aWNWZXJ0ZXhCdWZmZXI6Omxvb2t1cEF0dHJpYnV0ZShjb25zdCBWZXJ0ZXhBdHRy
aWJ1dGUgJmF0dHJpYnV0ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50ID0gMDsg
ZWxlbWVudCA8IG1DYWNoZS5zaXplKCk7IGVsZW1lbnQrKykKKyAgICB7CisgICAgICAgIGlmICht
Q2FjaGVbZWxlbWVudF0udHlwZSA9PSBhdHRyaWJ1dGUubVR5cGUgJiYKKyAgICAgICAgICAgIG1D
YWNoZVtlbGVtZW50XS5zaXplID09IGF0dHJpYnV0ZS5tU2l6ZSAmJgorICAgICAgICAgICAgbUNh
Y2hlW2VsZW1lbnRdLnN0cmlkZSA9PSBhdHRyaWJ1dGUuc3RyaWRlKCkgJiYKKyAgICAgICAgICAg
IG1DYWNoZVtlbGVtZW50XS5ub3JtYWxpemVkID09IGF0dHJpYnV0ZS5tTm9ybWFsaXplZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1DYWNoZVtlbGVtZW50XS5hdHRyaWJ1dGVPZmZzZXQg
PT0gYXR0cmlidXRlLm1PZmZzZXQgJSBhdHRyaWJ1dGUuc3RyaWRlKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1DYWNoZVtlbGVtZW50XS5zdHJlYW1PZmZzZXQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Nv
bnN0IFZlcnRleERhdGFNYW5hZ2VyOjpGb3JtYXRDb252ZXJ0ZXIgJlZlcnRleERhdGFNYW5hZ2Vy
Ojpmb3JtYXRDb252ZXJ0ZXIoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1BdHRyaWJ1dGVUeXBlc1t0eXBlSW5kZXgoYXR0cmlidXRlLm1UeXBl
KV1bYXR0cmlidXRlLm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKK30KK30KClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VmVydGV4RGF0YU1hbmFnZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMj
IC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4
RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVmVydGV4RGF0YU1hbmFnZXIuaDogRGVm
aW5lcyB0aGUgVmVydGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAorLy8gcnVucyB0aGUgQnVm
ZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX1ZFUlRFWERBVEFN
QU5BR0VSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhEQVRBTUFOQUdFUl9IXworCisjaW5j
bHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAor
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIK
KworbmFtZXNwYWNlIGdsCit7CisKK3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlCit7CisgICAg
Ym9vbCBhY3RpdmU7CisKKyAgICBEM0RERUNMVFlQRSB0eXBlOworICAgIFVJTlQgb2Zmc2V0Owor
ICAgIFVJTlQgc3RyaWRlOyAgIC8vIDAgbWVhbnMgbm90IHRvIGFkdmFuY2UgdGhlIHJlYWQgcG9p
bnRlciBhdCBhbGwKKworICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKnZlcnRleEJ1ZmZlcjsK
KyAgICB1bnNpZ25lZCBpbnQgc2VyaWFsOworICAgIHVuc2lnbmVkIGludCBkaXZpc29yOworfTsK
KworY2xhc3MgVmVydGV4QnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhCdWZmZXIoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdz
KTsKKyAgICB2aXJ0dWFsIH5WZXJ0ZXhCdWZmZXIoKTsKKworICAgIHZvaWQgdW5tYXAoKTsKKwor
ICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OworICAgIHVuc2ln
bmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAgSURpcmVjdDNE
RGV2aWNlOSAqY29uc3QgbURldmljZTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICptVmVy
dGV4QnVmZmVyOworCisgICAgdW5zaWduZWQgaW50IG1TZXJpYWw7CisgICAgc3RhdGljIHVuc2ln
bmVkIGludCBpc3N1ZVNlcmlhbCgpOworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRT
ZXJpYWw7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4
QnVmZmVyKTsKK307CisKK2NsYXNzIEFycmF5VmVydGV4QnVmZmVyIDogcHVibGljIFZlcnRleEJ1
ZmZlcgoreworICBwdWJsaWM6CisgICAgQXJyYXlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKTsKKyAgICB+QXJy
YXlWZXJ0ZXhCdWZmZXIoKTsKKworICAgIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtQnVmZmVyU2l6ZTsgfQorICAgIHZpcnR1YWwgdm9pZCAqbWFwKGNvbnN0IFZlcnRleEF0dHJp
YnV0ZSAmYXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAq
c3RyZWFtT2Zmc2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2VydmVSZXF1aXJlZFNwYWNl
KCkgPSAwOworICAgIHZvaWQgYWRkUmVxdWlyZWRTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2UpOwor
CisgIHByb3RlY3RlZDoKKyAgICBzdGQ6OnNpemVfdCBtQnVmZmVyU2l6ZTsKKyAgICBzdGQ6OnNp
emVfdCBtV3JpdGVQb3NpdGlvbjsKKyAgICBzdGQ6OnNpemVfdCBtUmVxdWlyZWRTcGFjZTsKK307
CisKK2NsYXNzIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlciA6IHB1YmxpYyBBcnJheVZlcnRleEJ1ZmZl
cgoreworICBwdWJsaWM6CisgICAgU3RyZWFtaW5nVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSwgc3RkOjpzaXplX3QgaW5pdGlhbFNpemUpOworICAgIH5TdHJlYW1pbmdWZXJ0
ZXhCdWZmZXIoKTsKKworICAgIHZvaWQgKm1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YnV0ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKnN0cmVhbU9mZnNl
dCk7CisgICAgdm9pZCByZXNlcnZlUmVxdWlyZWRTcGFjZSgpOworfTsKKworY2xhc3MgU3RhdGlj
VmVydGV4QnVmZmVyIDogcHVibGljIEFycmF5VmVydGV4QnVmZmVyCit7CisgIHB1YmxpYzoKKyAg
ICBleHBsaWNpdCBTdGF0aWNWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKTsK
KyAgICB+U3RhdGljVmVydGV4QnVmZmVyKCk7CisKKyAgICB2b2lkICptYXAoY29uc3QgVmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6
ZV90ICpzdHJlYW1PZmZzZXQpOworICAgIHZvaWQgcmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKKwor
ICAgIHN0ZDo6c2l6ZV90IGxvb2t1cEF0dHJpYnV0ZShjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYnV0ZSk7ICAgLy8gUmV0dXJucyB0aGUgb2Zmc2V0IGludG8gdGhlIHZlcnRleCBidWZmZXIs
IG9yIC0xIGlmIG5vdCBmb3VuZAorCisgIHByaXZhdGU6CisgICAgc3RydWN0IFZlcnRleEVsZW1l
bnQKKyAgICB7CisgICAgICAgIEdMZW51bSB0eXBlOworICAgICAgICBHTGludCBzaXplOworICAg
ICAgICBHTHNpemVpIHN0cmlkZTsKKyAgICAgICAgYm9vbCBub3JtYWxpemVkOworICAgICAgICBp
bnQgYXR0cmlidXRlT2Zmc2V0OworCisgICAgICAgIHN0ZDo6c2l6ZV90IHN0cmVhbU9mZnNldDsK
KyAgICB9OworCisgICAgc3RkOjp2ZWN0b3I8VmVydGV4RWxlbWVudD4gbUNhY2hlOworfTsKKwor
Y2xhc3MgVmVydGV4RGF0YU1hbmFnZXIKK3sKKyAgcHVibGljOgorICAgIFZlcnRleERhdGFNYW5h
Z2VyKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkgKmJhY2tlbmQpOworICAgIHZp
cnR1YWwgflZlcnRleERhdGFNYW5hZ2VyKCk7CisKKyAgICB2b2lkIGRpcnR5Q3VycmVudFZhbHVl
KGludCBpbmRleCkgeyBtRGlydHlDdXJyZW50VmFsdWVbaW5kZXhdID0gdHJ1ZTsgfQorCisgICAg
R0xlbnVtIHByZXBhcmVWZXJ0ZXhEYXRhKEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFu
c2xhdGVkQXR0cmlidXRlICpvdXRBdHRyaWJzLCBHTHNpemVpIGluc3RhbmNlcyk7CisKKyAgcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4RGF0YU1hbmFnZXIpOwor
CisgICAgc3RkOjpzaXplX3Qgc3BhY2VSZXF1aXJlZChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSBjb25zdDsKKyAgICBz
dGQ6OnNpemVfdCB3cml0ZUF0dHJpYnV0ZURhdGEoQXJyYXlWZXJ0ZXhCdWZmZXIgKnZlcnRleEJ1
ZmZlciwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
YXR0cmlidXRlLCBHTHNpemVpIGluc3RhbmNlcyk7CisKKyAgICBDb250ZXh0ICpjb25zdCBtQ29u
dGV4dDsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpjb25zdCBtRGV2aWNlOworCisgICAgU3RyZWFt
aW5nVmVydGV4QnVmZmVyICptU3RyZWFtaW5nQnVmZmVyOworCisgICAgYm9vbCBtRGlydHlDdXJy
ZW50VmFsdWVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXIg
Km1DdXJyZW50VmFsdWVCdWZmZXJbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBzdGQ6OnNpemVf
dCBtQ3VycmVudFZhbHVlT2Zmc2V0c1tNQVhfVkVSVEVYX0FUVFJJQlNdOworCisgICAgLy8gQXR0
cmlidXRlIGZvcm1hdCBjb252ZXJzaW9uCisgICAgc3RydWN0IEZvcm1hdENvbnZlcnRlcgorICAg
IHsKKyAgICAgICAgYm9vbCBpZGVudGl0eTsKKyAgICAgICAgc3RkOjpzaXplX3Qgb3V0cHV0RWxl
bWVudFNpemU7CisgICAgICAgIHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNvbnN0IHZvaWQgKmluLCBz
dGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk7CisgICAgICAgIEQz
RERFQ0xUWVBFIGQzZERlY2xUeXBlOworICAgIH07CisKKyAgICBlbnVtIHsgTlVNX0dMX1ZFUlRF
WF9BVFRSSUJfVFlQRVMgPSA2IH07CisKKyAgICBGb3JtYXRDb252ZXJ0ZXIgbUF0dHJpYnV0ZVR5
cGVzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgICAvLyBbR0wgdHlwZXMgYXMg
ZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCisKKyAgICBz
dHJ1Y3QgVHJhbnNsYXRpb25EZXNjcmlwdGlvbgorICAgIHsKKyAgICAgICAgRFdPUkQgY2Fwc0Zs
YWc7CisgICAgICAgIEZvcm1hdENvbnZlcnRlciBwcmVmZXJyZWRDb252ZXJzaW9uOworICAgICAg
ICBGb3JtYXRDb252ZXJ0ZXIgZmFsbGJhY2tDb252ZXJzaW9uOworICAgIH07CisKKyAgICAvLyBU
aGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgorICAgIHN0YXRp
YyBjb25zdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1f
R0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVk
IGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KKworICAgIHZvaWQgY2hlY2tW
ZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcyk7CisKKyAgICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4
KEdMZW51bSB0eXBlKSBjb25zdDsKKyAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmZvcm1hdENv
bnZlcnRlcihjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkgY29uc3Q7Cit9OworCit9
CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhEQVRBTUFOQUdFUl9IXwoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhE
YXRhTWFuYWdlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEg
IyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwMDIgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIGxpYkdMRVN2Mi5jcHA6IEltcGxlbWVudHMgdGhlIGV4cG9ydGVkIE9wZW5HTCBFUyAy
LjAgZnVuY3Rpb25zLgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKyNp
bmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJj
b21tb24vdmVyc2lvbi5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJi
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1RleHR1cmUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIKKworYm9vbCB2YWxp
ZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZ2w6OmdldENvbnRleHQoKSAm
JiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChsZXZlbCA9PSAwKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGdsOjppc1BvdzIod2lkdGgp
ICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUg
YXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgorYm9vbCBjaGVja1Rl
eHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQoreworICAgIC8vIHZh
bGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQor
ICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgIGNh
c2UgR0xfQkdSQV9FWFQ6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQSEE6
CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
OgorICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfT0VTOgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBpbnZhbGlk
IDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5VTQorICAgIC8vIGludmFsaWQgPGZvcm1hdD4rPHR5
cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2gg
KGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICBj
YXNlIEdMX0JHUkFfRVhUOgorICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNhc2Ug
R0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xf
SEFMRl9GTE9BVF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNh
c2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgc3dpdGNoIChmb3Jt
YXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsK
KyAgICB9Cit9CisKK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGJvb2wgY29tcHJlc3Nl
ZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAg
IGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICB9
CisKKyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBHTGVudW0gaW50
ZXJuYWxmb3JtYXQgPSBnbDo6Q29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBl
KTsKKyAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9y
bWF0KGxldmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29tcHJl
c3NlZCkKKyAgICB7CisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4
dHVyZS0+Z2V0V2lkdGgoMCkpIHx8CisgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhl
aWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aChsZXZlbCkg
fHwKKyAgICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodChsZXZlbCkp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJh
bXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChjb21wcmVz
c2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKwor
ICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUpOwor
ICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQo
dGFyZ2V0LCBsZXZlbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNv
bXByZXNzZWQpCisgICAgeworICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9
IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgMCkpIHx8CisgICAgICAgICAgICAoaGVpZ2h0ICUg
NCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCAwKSkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFs
c2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1
cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8CisgICAgICAgIHlvZmZzZXQgKyBoZWlnaHQg
PiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCisvLyBjaGVjayBmb3IgY29tYmluYXRpb25zIG9mIGZvcm1hdCBhbmQgdHlwZSB0
aGF0IGFyZSB2YWxpZCBmb3IgUmVhZFBpeGVscworYm9vbCB2YWxpZFJlYWRGb3JtYXRUeXBlKEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsK
KyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgIHN3aXRjaCAodHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitleHRlcm4gIkMiCit7CisKK3ZvaWQgX19zdGRj
YWxsIGdsQWN0aXZlVGV4dHVyZShHTGVudW0gdGV4dHVyZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSB0ZXh0dXJlID0gMHglWCkiLCB0ZXh0dXJlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRleHR1cmUgPCBHTF9U
RVhUVVJFMCB8fCB0ZXh0dXJlID4gR0xfVEVYVFVSRTAgKyBjb250ZXh0LT5nZXRNYXhpbXVtQ29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY29udGV4dC0+c2V0QWN0aXZlU2FtcGxlcih0ZXh0dXJlIC0gR0xfVEVYVFVSRTAp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQXR0YWNoU2hhZGVyKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKQor
eworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IHNoYWRlciA9ICVkKSIs
IHByb2dyYW0sIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0g
Y29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNo
YWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRQcm9ncmFtKHNo
YWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmF0dGFjaFNoYWRlcihzaGFkZXJP
YmplY3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCZWdpblF1ZXJ5RVhU
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQg
PSAweCVYLCBHTHVpbnQgJWQpIiwgdGFyZ2V0LCBpZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9BTllfU0FN
UExFU19QQVNTRURfRVhUOiAKKyAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9D
T05TRVJWQVRJVkVfRVhUOgorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OiAKKyAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJlZ2luUXVlcnkodGFy
Z2V0LCBpZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIEdM
dWludCBpbmRleCwgY29uc3QgR0xjaGFyKiBuYW1lKQoreworICAgIEVWRU5UKCIoR0x1aW50IHBy
b2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9IDB4JTAu
OHApIiwgcHJvZ3JhbSwgaW5kZXgsIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dy
YW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdHJuY21wKG5hbWUsICJn
bF8iLCAzKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBy
b2dyYW1PYmplY3QtPmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xCaW5kQnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBidWZmZXIpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgYnVm
ZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRB
cnJheUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5iaW5kRWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEZyYW1lYnVmZmVy
KEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgZnJhbWVidWZmZXIgPSAlZCkiLCB0YXJnZXQsIGZyYW1l
YnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFN
RUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQg
IT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJB
TUVCVUZGRVJfQU5HTEUgfHwgdGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRSZWFkRnJhbWVidWZmZXIoZnJhbWVidWZm
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgfHwgdGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVS
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmREcmF3RnJhbWVi
dWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZFJlbmRlcmJ1
ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCByZW5kZXJidWZmZXIgPSAlZCkiLCB0YXJnZXQs
IHJlbmRlcmJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXQgIT0g
R0xfUkVOREVSQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVy
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEJpbmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIEdMdWludCB0ZXh0dXJlKQor
eworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCB0ZXh0dXJlID0gJWQp
IiwgdGFyZ2V0LCB0ZXh0dXJlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmVPYmplY3Qg
PSBjb250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOworCisgICAgICAgICAgICBpZiAodGV4dHVy
ZU9iamVjdCAmJiB0ZXh0dXJlT2JqZWN0LT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQgJiYgdGV4dHVy
ZSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUyRCh0ZXh0dXJlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UDoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVNYXAodGV4dHVyZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsQmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1w
ZiBibHVlLCBHTGNsYW1wZiBhbHBoYSkKK3sKKyAgICBFVkVOVCgiKEdMY2xhbXBmIHJlZCA9ICVm
LCBHTGNsYW1wZiBncmVlbiA9ICVmLCBHTGNsYW1wZiBibHVlID0gJWYsIEdMY2xhbXBmIGFscGhh
ID0gJWYpIiwKKyAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldEJsZW5kQ29sb3IoZ2w6OmNsYW1wMDEocmVkKSwgZ2w6OmNsYW1wMDEoZ3JlZW4p
LCBnbDo6Y2xhbXAwMShibHVlKSwgZ2w6OmNsYW1wMDEoYWxwaGEpKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJsZW5k
RXF1YXRpb24oR0xlbnVtIG1vZGUpCit7CisgICAgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9k
ZSwgbW9kZSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKEdM
ZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1v
ZGVSR0IgPSAweCVYLCBHTGVudW0gbW9kZUFscGhhID0gMHglWCkiLCBtb2RlUkdCLCBtb2RlQWxw
aGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKG1vZGVSR0IpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgorICAgICAgICAgIGNhc2UgR0xfRlVOQ19T
VUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAobW9kZUFs
cGhhKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GVU5DX0FERDoKKyAgICAgICAgICBj
YXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6CisgICAgICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VC
VFJBQ1Q6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZEVx
dWF0aW9uKG1vZGVSR0IsIG1vZGVBbHBoYSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmMoR0xlbnVtIHNm
YWN0b3IsIEdMZW51bSBkZmFjdG9yKQoreworICAgIGdsQmxlbmRGdW5jU2VwYXJhdGUoc2ZhY3Rv
ciwgZGZhY3Rvciwgc2ZhY3RvciwgZGZhY3Rvcik7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxl
bmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0Fs
cGhhLCBHTGVudW0gZHN0QWxwaGEpCit7CisgICAgRVZFTlQoIihHTGVudW0gc3JjUkdCID0gMHgl
WCwgR0xlbnVtIGRzdFJHQiA9IDB4JVgsIEdMZW51bSBzcmNBbHBoYSA9IDB4JVgsIEdMZW51bSBk
c3RBbHBoYSA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzcmNSR0IpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9PTkU6Cisg
ICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNf
U1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2Ug
R0xfT05FX01JTlVTX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKKyAg
ICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9E
U1RfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgorICAgICAg
ICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNf
Q09OU1RBTlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKKyAgICAg
ICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdM
X1NSQ19BTFBIQV9TQVRVUkFURToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN3aXRjaCAoZHN0UkdCKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBH
TF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0NP
TE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKKyAgICAgICAgICBj
YXNlIEdMX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6
CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlO
VVNfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgorICAgICAgICAgIGNh
c2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NP
TE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgorICAgICAg
ICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNf
Q09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzd2l0Y2ggKHNyY0FscGhhKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9a
RVJPOgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0NPTE9S
OgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNl
IEdMX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6Cisg
ICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNf
U1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2Ug
R0xfT05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9S
OgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAg
IGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09O
U1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGRzdEFs
cGhhKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2Ug
R0xfT05FOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xf
T05FX01JTlVTX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKKyAgICAg
ICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9TUkNf
QUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOgorICAgICAgICAg
IGNhc2UgR0xfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBI
QToKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xf
T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQ
SEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGNvbnN0YW50Q29s
b3JVc2VkID0gKHNyY1JHQiA9PSBHTF9DT05TVEFOVF9DT0xPUiB8fCBzcmNSR0IgPT0gR0xfT05F
X01JTlVTX0NPTlNUQU5UX0NPTE9SIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZHN0UkdCID09IEdMX0NPTlNUQU5UX0NPTE9SIHx8IGRzdFJHQiA9PSBHTF9PTkVfTUlOVVNf
Q09OU1RBTlRfQ09MT1IpOworCisgICAgICAgIGJvb2wgY29uc3RhbnRBbHBoYVVzZWQgPSAoc3Jj
UkdCID09IEdMX0NPTlNUQU5UX0FMUEhBIHx8IHNyY1JHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSR0IgPT0g
R0xfQ09OU1RBTlRfQUxQSEEgfHwgZHN0UkdCID09IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBI
QSk7CisKKyAgICAgICAgaWYgKGNvbnN0YW50Q29sb3JVc2VkICYmIGNvbnN0YW50QWxwaGFVc2Vk
KQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlNpbXVsdGFuZW91cyB1c2Ugb2YgR0xfQ09O
U1RBTlRfQUxQSEEvR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIGFuZCBHTF9DT05TVEFOVF9D
T0xPUi9HTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgaW52YWxpZCB1bmRlciBXZWJHTCIpOwor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldEJsZW5kRmFjdG9ycyhzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBjb25z
dCBHTHZvaWQqIGRhdGEsIEdMZW51bSB1c2FnZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJn
ZXQgPSAweCVYLCBHTHNpemVpcHRyIHNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHgl
MC44cCwgR0xlbnVtIHVzYWdlID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIHNpemUsIGRhdGEs
IHVzYWdlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHNpemUgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBzd2l0Y2ggKHVzYWdlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBH
TF9TVFJFQU1fRFJBVzoKKyAgICAgICAgICBjYXNlIEdMX1NUQVRJQ19EUkFXOgorICAgICAgICAg
IGNhc2UgR0xfRFlOQU1JQ19EUkFXOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6
OkJ1ZmZlciAqYnVmZmVyOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAg
ICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgYnVmZmVyLT5idWZmZXJEYXRhKGRhdGEsIHNpemUsIHVzYWdlKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJ1
ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNp
emUsIGNvbnN0IEdMdm9pZCogZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBzaXplID0gJWQsIGNvbnN0IEdM
dm9pZCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIG9mZnNldCwgc2l6ZSwg
ZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDwgMCB8fCBvZmZzZXQg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7CisKKyAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FS
UkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1
ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0VM
RU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHNpemVfdClzaXplICsgb2Zmc2V0
ID4gYnVmZmVyLT5zaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi
dWZmZXItPmJ1ZmZlclN1YkRhdGEoZGF0YSwgc2l6ZSwgb2Zmc2V0KTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGVudW0gX19zdGRjYWxsIGdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KQoreworICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZF
Ul9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgMCk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyKEdMYml0ZmllbGQgbWFzaykKK3sKKyAg
ICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9ICVYKSIsIG1hc2spOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0
LT5jbGVhcihtYXNrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1w
ZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpCit7CisgICAgRVZFTlQoIihH
TGNsYW1wZiByZWQgPSAlZiwgR0xjbGFtcGYgZ3JlZW4gPSAlZiwgR0xjbGFtcGYgYmx1ZSA9ICVm
LCBHTGNsYW1wZiBhbHBoYSA9ICVmKSIsCisgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRDbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbENsZWFyRGVwdGhmKEdMY2xhbXBmIGRlcHRoKQoreworICAgIEVWRU5U
KCIoR0xjbGFtcGYgZGVwdGggPSAlZikiLCBkZXB0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENs
ZWFyRGVwdGgoZGVwdGgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJTdGVuY2lsKEdMaW50IHMpCit7CisgICAg
RVZFTlQoIihHTGludCBzID0gJWQpIiwgcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENsZWFyU3Rl
bmNpbChzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbENvbG9yTWFzayhHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3Jl
ZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEpCit7CisgICAgRVZFTlQoIihHTGJv
b2xlYW4gcmVkID0gJWQsIEdMYm9vbGVhbiBncmVlbiA9ICVkLCBHTGJvb2xlYW4gYmx1ZSA9ICVk
LCBHTGJvb2xlYW4gYWxwaGEgPSAlZCkiLAorICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGV4dC0+c2V0Q29sb3JNYXNrKHJlZCA9PSBHTF9UUlVFLCBncmVl
biA9PSBHTF9UUlVFLCBibHVlID09IEdMX1RSVUUsIGFscGhhID09IEdMX1RSVUUpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsQ29tcGlsZVNoYWRlcihHTHVpbnQgc2hhZGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50IHNo
YWRlciA9ICVkKSIsIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9
IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBpZiAoIXNoYWRlck9i
amVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UHJv
Z3JhbShzaGFkZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5jb21waWxlKCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQg
PSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBH
THNpemVpIHdpZHRoID0gJWQsICIgCisgICAgICAgICAgIkdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdM
aW50IGJvcmRlciA9ICVkLCBHTHNpemVpIGltYWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRh
dGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkgfHwg
Ym9yZGVyICE9IDAgfHwgaW1hZ2VTaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNo
IChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDFfRVhUOgorICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRToKKyAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Ym9yZGVyICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2
ZWwoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAg
ICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5z
aW9uKCkgPj4gbGV2ZWwpIHx8CisgICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0
LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1o6CisgICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAod2lkdGgg
PiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8
CisgICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRl
eHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhp
cyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8g
aW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBm
YWlsZWQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKKyAgICAgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3
aXRjaCBmYWlsZWQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11
dGFibGUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1
YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRD
b21wcmVzc2VkSW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCog
ZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9
ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAg
ICJHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMZW51bSBmb3JtYXQg
PSAweCVYLCAiCisgICAgICAgICAgIkdMc2l6ZWkgaW1hZ2VTaXplID0gJWQsIGNvbnN0IEdMdm9p
ZCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdl
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8
ICF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkgfHwgaW1hZ2VTaXplIDwgMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CisgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgZGF0YSA9PSBO
VUxMKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250
ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0RYVDFUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBh
cyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwg
aXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6CisgICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMg
Y2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aW1hZ2VTaXplICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9y
bWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh4b2Zmc2V0ICUg
NCAhPSAwIHx8IHlvZmZzZXQgJSA0ICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gd2Ugd2FpdCB0byBjaGVj
ayB0aGUgb2Zmc2V0cyB1bnRpbCB0aGlzIHBvaW50LCBiZWNhdXNlIHRoZSBtdWx0aXBsZS1vZi1m
b3VyIHJlc3RyaWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZG9lcyBub3QgZXhpc3QgdW5sZXNzIERYVCB0ZXh0dXJlcyBhcmUgc3Vw
cG9ydGVkLgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RF
WFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgIGlmICh2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9m
ZnNldCwgbGV2ZWwsIGZvcm1hdCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRh
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
IChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJh
bXNDdWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2
ZWwsIGZvcm1hdCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQ29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcikKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQg
PSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCAi
CisgICAgICAgICAgIkdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0g
JWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMaW50IGJvcmRlciA9ICVkKSIsCisgICAgICAgICAg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRl
cik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICghdmFsaWRJbWFnZVNpemUobGV2ZWws
IHdpZHRoLCBoZWlnaHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYm9yZGVyICE9IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgaWYg
KHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwp
IHx8CisgICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4
dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Cisg
ICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0
TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8CisgICAgICAgICAgICAg
ICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24o
KSA+PiBsZXZlbCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVm
ZmVyKCk7CisKKyAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRs
ZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFNhbXBsZXMoKSAh
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpSZW5kZXJi
dWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOworICAgICAgICAg
ICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OworCisgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gdGFibGUgMy45CisgICAgICAg
ICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9BTFBIQThfRVhUICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQkE0ICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9
IEdMX1JHQjVfQTEgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0g
R0xfUkdCQThfT0VTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAg
ICAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCNTY1ICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX1JHQjhfT0VTICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX1JHQkE0ICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQjVfQTEgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCQThfT0VTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgorICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICAgICAgaWYgKGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9y
YnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQorICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM6CisgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNE
ZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAg
ICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRl
eHR1cmUtPmNvcHlJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGZyYW1lYnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGds
OjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKKworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUt
PmlzSW1tdXRhYmxlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1Yklt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
eworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdM
aW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAgICAgICAgIkdMaW50
IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0
ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKCFnbDo6SXNJ
bnRlcm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGV2
ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworCisgICAgICAgICAgICBpZiAo
ZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXIoKTsKKyAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1ZmZlckZvcm1h
dCA9IHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJl
ICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gR0xf
UkdCQTsKKworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+
Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdM
X05PTkUsIEdMX05PTkUsIHRleDJkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3Vi
SW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZv
cm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KHRleDJkLT5nZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkp
OworICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXgyZDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAgICAgIGlmICghdmFs
aWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlv
ZmZzZXQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIEdMX05PTkUsIHRleGN1YmUpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5
IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQodGV4Y3Vi
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOworICAgICAgICAgICAgICAgIHRl
eHR1cmUgPSB0ZXhjdWJlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gdGFibGUgMy45Cisg
ICAgICAgICAgICBzd2l0Y2ggKHRleHR1cmVGb3JtYXQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX0FMUEhBOF9FWFQgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQTQgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3Jt
YXQgIT0gR0xfUkdCNV9BMSAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBOF9PRVMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0I1NjUgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCOF9PRVMgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCNV9BMSAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZv
cm1hdCAhPSBHTF9SR0JBOF9PRVMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEE6CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgICAgICBp
ZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKKyAgICAgICAgICAgICAgICAgICAg
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgorICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgICAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJ
bWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmcmFtZWJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCitHTHVpbnQgX19zdGRjYWxsIGdsQ3JlYXRlUHJvZ3JhbSh2b2lkKQoreworICAg
IEVWRU5UKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1
cm4gMDsKK30KKworR0x1aW50IF9fc3RkY2FsbCBnbENyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSB0eXBlID0gMHglWCkiLCB0eXBlKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZSQUdNRU5U
X1NIQURFUjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfU0hBREVSOgorICAgICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVTaGFkZXIodHlwZSk7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwg
MCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDAp
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEN1bGxGYWNl
KEdMZW51bSBtb2RlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKG1vZGUpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAg
ICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldEN1bGxNb2RlKG1vZGUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUJ1
ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGJ1ZmZlcnMpCit7CisgICAgRVZFTlQoIihH
THNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBidWZmZXJzID0gMHglMC44cCkiLCBuLCBidWZm
ZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5kZWxldGVCdWZmZXIoYnVmZmVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxl
dGVGZW5jZXNOVihHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZmVuY2VzKQoreworICAgIEVWRU5U
KCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogZmVuY2VzID0gMHglMC44cCkiLCBuLCBm
ZW5jZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZUZlbmNlKGZlbmNlc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycykKK3sK
KyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycyA9
IDB4JTAuOHApIiwgbiwgZnJhbWVidWZmZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJzW2ldICE9IDApCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFt
ZWJ1ZmZlcnNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bERlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICVkKSIsIHByb2dyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAocHJv
Z3JhbSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPmdldFByb2dyYW0ocHJvZ3JhbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRl
UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXNFWFQoR0xzaXplaSBuLCBj
b25zdCBHTHVpbnQgKmlkcykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBH
THVpbnQgKmlkcyA9IDB4JTAuOHApIiwgbiwgaWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVRdWVyeShpZHNbaV0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdM
dWludCogcmVuZGVyYnVmZmVycykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25z
dCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIHJlbmRlcmJ1ZmZlcnMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0
ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bERlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50IHNoYWRl
ciA9ICVkKSIsIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXIg
PT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5n
ZXRTaGFkZXIoc2hhZGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihjb250
ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVTaGFkZXIo
c2hhZGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVRleHR1cmVzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50
KiB0ZXh0dXJlcykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQq
IHRleHR1cmVzID0gMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVzW2ldICE9IDApCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKHRleHR1
cmVzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZXB0
aEZ1bmMoR0xlbnVtIGZ1bmMpCit7CisgICAgRVZFTlQoIihHTGVudW0gZnVuYyA9IDB4JVgpIiwg
ZnVuYyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZnVuYykKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgR0xfTkVWRVI6CisgICAgICAgICAgY2FzZSBHTF9BTFdBWVM6Cisg
ICAgICAgICAgY2FzZSBHTF9MRVNTOgorICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgorICAgICAg
ICAgIGNhc2UgR0xfRVFVQUw6CisgICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgorICAgICAgICAg
IGNhc2UgR0xfR0VRVUFMOgorICAgICAgICAgIGNhc2UgR0xfTk9URVFVQUw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aEZ1bmMoZnVuYyk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xEZXB0aE1hc2soR0xib29sZWFuIGZsYWcpCit7CisgICAgRVZFTlQoIihHTGJvb2xlYW4gZmxh
ZyA9ICVkKSIsIGZsYWcpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aE1hc2soZmxhZyAhPSBH
TF9GQUxTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aFJhbmdlZihHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYg
ekZhcikKK3sKKyAgICBFVkVOVCgiKEdMY2xhbXBmIHpOZWFyID0gJWYsIEdMY2xhbXBmIHpGYXIg
PSAlZikiLCB6TmVhciwgekZhcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoUmFuZ2Uoek5l
YXIsIHpGYXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsRGV0YWNoU2hhZGVyKEdMdWludCBwcm9ncmFtLCBHTHVpbnQg
c2hhZGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IHNoYWRl
ciA9ICVkKSIsIHByb2dyYW0sIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dy
YW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgZ2w6
OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJCeVByb2dyYW1IYW5kbGU7CisgICAg
ICAgICAgICAgICAgc2hhZGVyQnlQcm9ncmFtSGFuZGxlID0gY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pOworICAgICAgICAgICAgICAgIGlmICghc2hhZGVyQnlQcm9ncmFtSGFuZGxlKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1CeVNoYWRlckhhbmRsZSA9IGNvbnRleHQtPmdldFByb2dyYW0o
c2hhZGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW1CeVNoYWRlckhhbmRsZSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+ZGV0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERpc2FibGUoR0xlbnVtIGNhcCkKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSBjYXAgPSAweCVYKSIsIGNhcCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
Y2FwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0Q3VsbEZhY2UoZmFsc2UpOyAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250
ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0RmlsbChmYWxzZSk7ICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFs
cGhhVG9Db3ZlcmFnZShmYWxzZSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRTogICAgICAgICAgY29udGV4dC0+c2V0U2FtcGxlQ292ZXJhZ2UoZmFsc2UpOyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRTY2lzc29yVGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFN0ZW5jaWxUZXN0KGZhbHNlKTsgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhUZXN0KGZhbHNl
KTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZChmYWxzZSk7ICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnNldERpdGhlcihmYWxzZSk7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdM
dWludCBpbmRleCkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkKSIsIGluZGV4KTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4LCBmYWxz
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xEcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xpbnQgZmlyc3Qg
PSAlZCwgR0xzaXplaSBjb3VudCA9ICVkKSIsIG1vZGUsIGZpcnN0LCBjb3VudCk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgZmlyc3QgPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0
LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgMCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QXJyYXlz
SW5zdGFuY2VkQU5HTEUoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIHByaW1jb3VudCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xp
bnQgZmlyc3QgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTHNpemVpIHByaW1jb3VudCA9ICVk
KSIsIG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGNvdW50IDwgMCB8fCBmaXJzdCA8IDAgfHwgcHJpbWNvdW50IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHByaW1jb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsRHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzKQoreworICAgIEVWRU5UKCIoR0xlbnVt
IG1vZGUgPSAweCVYLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgY29u
c3QgR0x2b2lkKiBpbmRpY2VzID0gMHglMC44cCkiLAorICAgICAgICAgIG1vZGUsIGNvdW50LCB0
eXBlLCBpbmRpY2VzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgor
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOyAgICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgY29u
dGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCAwKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50
LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBjb3VudCA9ICVkLCBH
TGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4JTAuOHAsIEdMc2l6
ZWkgcHJpbWNvdW50ID0gJWQpIiwKKyAgICAgICAgICBtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNl
cywgcHJpbWNvdW50KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCB8
fCBwcmltY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJpbWNvdW50ID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
ICAgIAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBp
bmRpY2VzLCBwcmltY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRW5hYmxlKEdMZW51
bSBjYXApCit7CisgICAgRVZFTlQoIihHTGVudW0gY2FwID0gMHglWCkiLCBjYXApOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVUxM
X0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDog
ICAgICBjb250ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0
U2FtcGxlQWxwaGFUb0NvdmVyYWdlKHRydWUpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKHRy
dWUpOyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRTY2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4
dC0+c2V0U3RlbmNpbFRlc3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdCh0
cnVlKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0RGl0aGVyKHRydWUpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdM
dWludCBpbmRleCkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkKSIsIGluZGV4KTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4LCB0cnVl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEVuZFF1ZXJ5RVhUKEdMZW51bSB0YXJnZXQpCit7CisgICAgRVZFTlQoIkdM
ZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExF
U19QQVNTRURfRVhUOiAKKyAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05T
RVJWQVRJVkVfRVhUOgorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAK
KyAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0
LT5lbmRRdWVyeSh0YXJnZXQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRmluaXNoRmVuY2VOVihHTHVpbnQgZmVuY2Up
Cit7CisgICAgRVZFTlQoIihHTHVpbnQgZmVuY2UgPSAlZCkiLCBmZW5jZSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpGZW5jZSogZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisKKyAgICAg
ICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZlbmNlT2JqZWN0LT5maW5pc2hGZW5jZSgpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRmlu
aXNoKHZvaWQpCit7CisgICAgRVZFTlQoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bmModHJ1
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xGbHVzaCh2b2lkKQoreworICAgIEVWRU5UKCIoKSIpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBj
b250ZXh0LT5zeW5jKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0
LCBHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCA9
IDB4JVgsICIKKyAgICAgICAgICAiR0x1aW50IHJlbmRlcmJ1ZmZlciA9ICVkKSIsIHRhcmdldCwg
YXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBpZiAoKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQg
IT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJV
RkZFUl9BTkdMRSkKKyAgICAgICAgICAgIHx8IChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR0xfUkVO
REVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7
CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRS
ZWFkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0g
Y29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgZnJhbWVidWZm
ZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCAoZnJhbWVidWZmZXJIYW5k
bGUgPT0gMCAmJiByZW5kZXJidWZmZXIgIT0gMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOgorICAgICAgICAgICAgICAgIGZyYW1l
YnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNI
TUVOVDoKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCByZW5kZXJidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICBmcmFt
ZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNo
bWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHgl
WCwgR0xlbnVtIHRleHRhcmdldCA9IDB4JVgsICIKKyAgICAgICAgICAiR0x1aW50IHRleHR1cmUg
PSAlZCwgR0xpbnQgbGV2ZWwgPSAlZCkiLCB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAodGFyZ2V0ICE9
IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYm
IHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAg
IHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQ09MT1Jf
QVRUQUNITUVOVDA6CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHRleHR1cmUgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0
ZXh0YXJnZXQgPSBHTF9OT05FOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXggPSBjb250ZXh0LT5n
ZXRUZXh0dXJlKHRleHR1cmUpOworCisgICAgICAgICAgICAgICAgaWYgKHRleCA9PSBOVUxMKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKHRleHRhcmdldCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gc3RhdGljX2Nhc3Q8
Z2w6OlRleHR1cmUyRCAqPih0ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJk
LT5pc0NvbXByZXNzZWQoMCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0g
c3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKHRleHRhcmdldCwgbGV2ZWwpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAobGV2ZWwgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBOVUxMOworICAgICAgICAgICAgR0x1aW50IGZyYW1lYnVmZmVySGFuZGxlID0gMDsKKyAgICAg
ICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFt
ZWJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+
Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRs
ZSA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCB8fCAhZnJhbWVidWZmZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChhdHRhY2ht
ZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1F
TlQwOiAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICBmcmFtZWJ1
ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6IGZyYW1lYnVmZmVyLT5zZXRTdGVu
Y2lsYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7IGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsRnJvbnRGYWNlKEdMZW51bSBtb2RlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUg
PSAweCVYKSIsIG1vZGUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKG1vZGUp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0NXOgorICAgICAgICAgIGNhc2UgR0xfQ0NX
OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZyb250
RmFjZShtb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5CdWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBi
dWZmZXJzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogYnVmZmVycyA9
IDB4JTAuOHApIiwgbiwgYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChu
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0
ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNEZXB0
aCgwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3Nl
ZChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4
Y3ViZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
R2VuRmVuY2VzTlYoR0xzaXplaSBuLCBHTHVpbnQqIGZlbmNlcykKK3sKKyAgICBFVkVOVCgiKEdM
c2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGZlbmNlcyA9IDB4JTAuOHApIiwgbiwgZmVuY2VzKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmZW5jZXNbaV0gPSBjb250
ZXh0LT5jcmVhdGVGZW5jZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuRnJhbWVidWZm
ZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCit7CisgICAgRVZFTlQoIihHTHNp
emVpIG4gPSAlZCwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGZyYW1lYnVm
ZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVi
dWZmZXJzW2ldID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEdlblF1ZXJpZXNFWFQoR0xzaXplaSBuLCBHTHVpbnQqIGlkcykKK3sKKyAgICBF
VkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwgbiwgaWRzKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZHNbaV0gPSBjb250
ZXh0LT5jcmVhdGVRdWVyeSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuUmVuZGVyYnVm
ZmVycyhHTHNpemVpIG4sIEdMdWludCogcmVuZGVyYnVmZmVycykKK3sKKyAgICBFVkVOVCgiKEdM
c2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIHJlbmRl
cmJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
bmRlcmJ1ZmZlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdlblRleHR1cmVzKEdMc2l6ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcykK
K3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHRleHR1cmVzID0gIDB4JTAu
OHApIiwgbiwgdGV4dHVyZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHRleHR1cmVzW2ldID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlQXR0cmliKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5k
ZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVt
ICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVk
LCBHTHVpbnQgaW5kZXggPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkgKmxlbmd0
aCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiR0xpbnQgKnNpemUgPSAweCUwLjhwLCBHTGVudW0g
KnR5cGUgPSAlMC44cCwgR0xjaGFyICpuYW1lID0gJTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFt
LCBpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVpbnQpcHJv
Z3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZShpbmRl
eCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2
ZVVuaWZvcm0oR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBH
THNpemVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSkK
K3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBpbmRleCA9ICVkLCBH
THNpemVpIGJ1ZnNpemUgPSAlZCwgIgorICAgICAgICAgICJHTHNpemVpKiBsZW5ndGggPSAweCUw
LjhwLCBHTGludCogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdMY2hh
ciogbmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmc2l6ZSwg
bGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KGJ1ZnNpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dy
YW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVpbnQpcHJvZ3JhbU9iamVjdC0+Z2V0QWN0
aXZlVW5pZm9ybUNvdW50KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBw
cm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNp
emUsIHR5cGUsIG5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QXR0YWNoZWRTaGFkZXJzKEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBjb3VudCwgR0x1aW50KiBzaGFkZXJzKQor
eworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xzaXplaSBtYXhjb3VudCA9ICVk
LCBHTHNpemVpKiBjb3VudCA9IDB4JTAuOHAsIEdMdWludCogc2hhZGVycyA9IDB4JTAuOHApIiwK
KyAgICAgICAgICBwcm9ncmFtLCBtYXhjb3VudCwgY291bnQsIHNoYWRlcnMpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBpZiAobWF4Y291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3Qt
PmdldEF0dGFjaGVkU2hhZGVycyhtYXhjb3VudCwgY291bnQsIHNoYWRlcnMpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK2ludCBfX3N0ZGNhbGwgZ2xH
ZXRBdHRyaWJMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gJXMp
IiwgcHJvZ3JhbSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkgfHwgIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCAtMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFt
QmluYXJ5LT5nZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgLTEpOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xHZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiogcGFyYW1zKQor
eworICAgIEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xib29sZWFuKiBwYXJhbXMgPSAw
eCUwLjhwKSIsICBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Qm9v
bGVhbnYocG5hbWUsIHBhcmFtcykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdM
ZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMg
PSAwOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZv
KHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBh
cmFtcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRo
YXQgdGhlIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0
dXJuCisKKyAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0g
TlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1Q
YXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwg
ZmxvYXRQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChmbG9hdFBhcmFtc1tpXSA9PSAwLjBmKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RS
VUU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWxldGUg
W10gZmxvYXRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGlu
dFBhcmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOworCisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRQYXJhbXNbaV0g
PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
dGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOworCisg
ICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+
Z2V0QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBidWZmZXIgPSBj
b250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMgdGhhdCAiMCIgaXMgYm91bmQg
dG8gdGhlIHJlcXVlc3RlZCBidWZmZXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZG
RVJfVVNBR0U6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+dXNhZ2UoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJfU0laRToK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5zaXplKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK0dMZW51bSBfX3N0ZGNhbGwgZ2xHZXRFcnJvcih2b2lkKQoreworICAg
IEVWRU5UKCIoKSIpOworCisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gY29udGV4dC0+
Z2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsR2V0RmVuY2Vpdk5WKEdMdWludCBmZW5jZSwgR0xlbnVtIHBuYW1lLCBHTGlu
dCAqcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGZlbmNlID0gJWQsIEdMZW51bSBwbmFt
ZSA9IDB4JVgsIEdMaW50ICpwYXJhbXMgPSAweCUwLjhwKSIsIGZlbmNlLCBwbmFtZSwgcGFyYW1z
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZl
bmNlKGZlbmNlKTsKKworICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmVuY2VPYmplY3QtPmdldEZlbmNl
aXYocG5hbWUsIHBhcmFtcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZs
b2F0KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0
KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShjb250
ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcykpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBu
dW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJh
bWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAg
aWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlz
IGtub3duIHRoYXQgdGhlIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhhdCB0aGVyZSBhcmUgbm8gcGFy
YW1ldGVycyB0byByZXR1cm4uCisKKyAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBH
TF9CT09MKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFu
ICpib29sUGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9IG5l
dyBHTGJvb2xlYW5bbnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5n
ZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xf
RkFMU0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMC4wZjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAxLjBmOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAg
ICAgICAgICAgIGludFBhcmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChHTGZsb2F0KWludFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xp
bnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0g
YXR0YWNobWVudCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAw
eCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgcGFyYW1zKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJB
V19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdM
RSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJB
TUVCVUZGRVJfQU5HTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoY29udGV4
dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldERyYXdGcmFt
ZWJ1ZmZlckhhbmRsZSgpID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1l
YnVmZmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50
VHlwZTsKKyAgICAgICAgICAgIEdMdWludCBhdHRhY2htZW50SGFuZGxlOworICAgICAgICAgICAg
c3dpdGNoIChhdHRhY2htZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0NPTE9SX0FUVEFDSE1FTlQwOiAgICAKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICBhdHRh
Y2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxlKCk7IAorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1F
TlQ6ICAgICAKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0g
ZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAgIAorICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJU
eXBlKCk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBHTGVudW0gYXR0YWNobWVudE9iamVjdFR5cGU7ICAgLy8gVHlw
ZSBjYXRlZ29yeQorICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRUeXBlID09IEdMX05PTkUgfHwg
YXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gYXR0YWNobWVudFR5cGU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQo
YXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF0dGFjaG1l
bnRPYmplY3RUeXBlID0gR0xfVEVYVFVSRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChw
bmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2ht
ZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgICAg
IGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgfHwgYXR0YWNobWVu
dE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50
T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IDA7IC8vIEZyYW1lYnVmZmVyVGV4dHVyZTJEIHdpbGwgbm90IGFs
bG93IGxldmVsIHRvIGJlIHNldCB0byBhbnl0aGluZyBlbHNlIGluIEdMIEVTIDIuMAorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgICAg
ICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJn
ZXQoYXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudFR5cGU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKworR0xlbnVtIF9fc3RkY2FsbCBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQodm9pZCkK
K3sKKyAgICBFVkVOVCgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Z2V0UmVzZXRTdGF0dXMoKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1P
Ulk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEludGVnZXJ2KEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdM
aW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShj
b250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgcGFyYW1zKSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVy
eVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8g
aXQgaXMga25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0
ZXJzIHRvIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9P
TCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xi
b29sZWFuW251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9v
bGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNF
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDA7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBbXSBib29sUGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOworICAgICAgICAgICAgICAg
ICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107CisKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsr
aSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBu
YW1lID09IEdMX0RFUFRIX1JBTkdFIHx8IHBuYW1lID09IEdMX0NPTE9SX0NMRUFSX1ZBTFVFIHx8
IHBuYW1lID09IEdMX0RFUFRIX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0JMRU5EX0NPTE9S
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChHTGludCkoKChHTGZsb2F0KSgweEZGRkZGRkZGKSAqIGZsb2F0UGFyYW1z
W2ldIC0gMS4wZikgLyAyLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoR0xpbnQpKGZsb2F0UGFyYW1zW2ldID4gMC4wZiA/IGZsb29yKGZsb2F0UGFyYW1zW2ld
ICsgMC41KSA6IGNlaWwoZmxvYXRQYXJhbXNbaV0gLSAwLjUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50
IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBwcm9ncmFtID0gJWQsIEdMZW51bSBwbmFtZSA9ICVkLCBHTGludCogcGFyYW1zID0gMHgl
MC44cCkiLCBwcm9ncmFtLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0RF
TEVURV9TVEFUVVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlz
RmxhZ2dlZEZvckRlbGV0aW9uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICBjYXNlIEdMX0xJTktfU1RBVFVTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9n
cmFtT2JqZWN0LT5pc0xpbmtlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9WQUxJREFURV9TVEFUVVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHByb2dyYW1PYmplY3QtPmlzVmFsaWRhdGVkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0lORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0SW5mb0xvZ0xlbmd0aCgpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BVFRBQ0hFRF9TSEFERVJTOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBdHRhY2hlZFNoYWRlcnND
b3VudCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9B
Q1RJVkVfQVRUUklCVVRFUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVj
dC0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIOgorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVNYXhM
ZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xf
QUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QUk9HUkFN
X0JJTkFSWV9MRU5HVEhfT0VTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2Jq
ZWN0LT5nZXRQcm9ncmFtQmluYXJ5TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUluZm9Mb2co
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIq
IGluZm9sb2cpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHNpemVpIGJ1
ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBpbmZvbG9nID0g
MHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBwcm9ncmFtT2JqZWN0LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xv
Zyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeWl2RVhUKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
R0xpbnQgKnBhcmFtcykKK3sKKyAgICBFVkVOVCgiR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51
bSBwbmFtZSA9IDB4JVgsIEdMaW50ICpwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUs
IHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFy
Z2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUKEdMdWludCBpZCwgR0xlbnVtIHBu
YW1lLCBHTHVpbnQgKnBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICVkLCBHTGVu
dW0gcG5hbWUgPSAweCVYLCBHTHVpbnQgKnBhcmFtcyA9IDB4JTAuOHApIiwgaWQsIHBuYW1lLCBw
YXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgorICAgICAgICAgIGNhc2Ug
R0xfUVVFUllfUkVTVUxUX0FWQUlMQUJMRV9FWFQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgIH0KKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OlF1ZXJ5ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwg
R0xfTk9ORSk7CisKKyAgICAgICAgICAgIGlmICghcXVlcnlPYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHF1
ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09IGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHN3aXRjaChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgorICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1
ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVDoKKyAgICAgICAgICAgICAg
ICBwYXJhbXNbMF0gPSBxdWVyeU9iamVjdC0+aXNSZXN1bHRBdmFpbGFibGUoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlQoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdM
aW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpy
ZW5kZXJidWZmZXIgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXIoY29udGV4dC0+Z2V0UmVuZGVy
YnVmZmVySGFuZGxlKCkpOworCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9XSURUSDogICAgICAgICAg
ICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFdpZHRoKCk7ICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9IRUlHSFQ6ICAgICAgICAgICpwYXJhbXMg
PSByZW5kZXJidWZmZXItPmdldEhlaWdodCgpOyAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6ICpwYXJhbXMgPSByZW5kZXJi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1JFTkRFUkJVRkZFUl9SRURfU0laRTogICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdl
dFJlZFNpemUoKTsgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUl9HUkVFTl9TSVpFOiAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEdyZWVuU2l6
ZSgpOyAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CTFVF
X1NJWkU6ICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEJsdWVTaXplKCk7ICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOiAg
ICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEFscGhhU2l6ZSgpOyAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOiAgICAgICpwYXJh
bXMgPSByZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpOyAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6ICAgICpwYXJhbXMgPSByZW5k
ZXJidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FOR0xFOgorICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFNhbXBsZXMoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyaXYoR0x1aW50IHNoYWRlciwgR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVk
LCBHTGVudW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2hhZGVyLCBw
bmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4
dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TSEFERVJfVFlQRToKKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUElMRV9TVEFU
VVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+aXNDb21waWxlZCgp
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHNoYWRlck9iamVjdC0+Z2V0SW5mb0xvZ0xlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5nZXRTb3VyY2VMZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNMQVRFRF9TSEFE
RVJfU09VUkNFX0xFTkdUSF9BTkdMRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVy
T2JqZWN0LT5nZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVySW5m
b0xvZyhHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xj
aGFyKiBpbmZvbG9nKQoreworICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVp
IGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBpbmZvbG9n
ID0gMHglMC44cCkiLAorICAgICAgICAgIHNoYWRlciwgYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9n
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6U2hh
ZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAg
ICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzaGFkZXJPYmplY3QtPmdldEluZm9Mb2coYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xl
bnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbikKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSBzaGFkZXJ0eXBlID0gMHglWCwgR0xlbnVtIHByZWNpc2lvbnR5cGUg
PSAweCVYLCBHTGludCogcmFuZ2UgPSAweCUwLjhwLCBHTGludCogcHJlY2lzaW9uID0gMHglMC44
cCkiLAorICAgICAgICAgIHNoYWRlcnR5cGUsIHByZWNpc2lvbnR5cGUsIHJhbmdlLCBwcmVjaXNp
b24pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKHNoYWRlcnR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6CisgICAgICAgICAgY2FzZSBH
TF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0K
KworICAgICAgICBzd2l0Y2ggKHByZWNpc2lvbnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX0xPV19GTE9BVDoKKyAgICAgICAgICBjYXNlIEdMX01FRElVTV9GTE9BVDoKKyAgICAg
ICAgICBjYXNlIEdMX0hJR0hfRkxPQVQ6CisgICAgICAgICAgICAvLyBBc3N1bWUgSUVFRSA3NTQg
cHJlY2lzaW9uCisgICAgICAgICAgICByYW5nZVswXSA9IDEyNzsKKyAgICAgICAgICAgIHJhbmdl
WzFdID0gMTI3OworICAgICAgICAgICAgKnByZWNpc2lvbiA9IDIzOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBHTF9MT1dfSU5UOgorICAgICAgICAgIGNhc2UgR0xfTUVESVVN
X0lOVDoKKyAgICAgICAgICBjYXNlIEdMX0hJR0hfSU5UOgorICAgICAgICAgICAgLy8gU29tZSAo
bW9zdCkgaGFyZHdhcmUgb25seSBzdXBwb3J0cyBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBv
aW50IG51bWJlcnMsCisgICAgICAgICAgICAvLyB3aGljaCBjYW4gYWNjdXJhdGVseSByZXByZXNl
bnQgaW50ZWdlcnMgdXAgdG8gKy8tMTY3NzcyMTYKKyAgICAgICAgICAgIHJhbmdlWzBdID0gMjQ7
CisgICAgICAgICAgICByYW5nZVsxXSA9IDI0OworICAgICAgICAgICAgKnByZWNpc2lvbiA9IDA7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJTb3VyY2UoR0x1
aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291
cmNlKQoreworICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUg
PSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBzb3VyY2UgPSAweCUwLjhw
KSIsCisgICAgICAgICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVy
T2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmICgh
c2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNo
YWRlck9iamVjdC0+Z2V0U291cmNlKGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3VyY2UpCit7CisgICAgRVZFTlQoIihH
THVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGgg
PSAweCUwLjhwLCBHTGNoYXIqIHNvdXJjZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzaGFkZXIs
IGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KGJ1ZnNpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRT
aGFkZXIoc2hhZGVyKTsKKworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5nZXRUcmFuc2xh
dGVkU291cmNlKGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitjb25zdCBHTHVieXRlKiBfX3N0ZGNhbGwgZ2xH
ZXRTdHJpbmcoR0xlbnVtIG5hbWUpCit7CisgICAgRVZFTlQoIihHTGVudW0gbmFtZSA9IDB4JVgp
IiwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgc3dpdGNoIChuYW1lKQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSBHTF9WRU5ET1I6CisgICAgICAgICAgICByZXR1cm4gKEdM
dWJ5dGUqKSJHb29nbGUgSW5jLiI7CisgICAgICAgICAgY2FzZSBHTF9SRU5ERVJFUjoKKyAgICAg
ICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0
UmVuZGVyZXJTdHJpbmcoKSA6ICJBTkdMRSIpOworICAgICAgICAgIGNhc2UgR0xfVkVSU0lPTjoK
KyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICIgVkVS
U0lPTl9TVFJJTkcgIikiOworICAgICAgICAgIGNhc2UgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJT
SU9OOgorICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMS4w
MCAoQU5HTEUgIiBWRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgY2FzZSBHTF9FWFRFTlNJ
T05TOgorICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkgPyBj
b250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoKSA6ICIiKTsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgKEdMdWJ5dGUqKU5VTEwp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoR0x1Ynl0ZSopTlVMTCk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4
JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRl
eHR1cmU7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAgdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklM
VEVSOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYWdG
aWx0ZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9GSUxURVI6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRl
eHR1cmUtPmdldE1pbkZpbHRlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwVCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6Cisg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KSh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgp
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRVc2FnZSgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOgorICAg
ICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9w
eSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhBbmlzb3Ryb3B5KCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRU
ZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMp
Cit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0
dXJlLT5nZXRNYWdGaWx0ZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSB0ZXh0dXJlLT5nZXRXcmFwUygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0
ZXh0dXJlLT5nZXRXcmFwVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FH
RV9BTkdMRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0VXNhZ2UoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01B
WF9BTklTT1RST1BZX0VYVDoKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
VGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMaW50KXRleHR1cmUtPmdldE1heEFuaXNv
dHJvcHkoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtZnZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgi
KEdMdWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgYnVmU2l6
ZSA9ICVkLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwg
bG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChidWZTaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFw
cm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVj
dC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWZ2KEdMdWludCBwcm9ncmFtLCBHTGlu
dCBsb2NhdGlvbiwgR0xmbG9hdCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dy
YW0gPSAlZCwgR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCki
LCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBOVUxMLCBwYXJh
bXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9ybWl2RVhU
KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXplLCBHTGludCog
cGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRp
b24gPSAlZCwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIs
IAorICAgICAgICAgIHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoYnVmU2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUs
IHBhcmFtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1p
dihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50KiBwYXJhbXMpCit7CisgICAg
RVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHByb2dyYW0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsK
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xp
bmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxv
Y2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworaW50IF9fc3RkY2FsbCBn
bEdldFVuaWZvcm1Mb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQor
eworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0g
MHglMC44cCkiLCBwcm9ncmFtLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoc3Ryc3RyKG5hbWUsICJnbF8iKSA9PSBuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QtPmlzTGlua2VkKCkgfHwgIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3Jt
TG9jYXRpb24obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIC0xKTsK
KyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4
QXR0cmliZnYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZs
b2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIGluZGV4LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9
IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAgICAgc3dp
dGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX0VOQUJMRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0
KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX1NJWkU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRl
Lm1TaXplOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZF
UlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xm
bG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVR5cGU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJ
WkVEOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5v
cm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1
ZmZlci5pZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDQ7ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IGF0dHJpYlN0YXRlLm1DdXJyZW50VmFsdWVbaV07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfRElWSVNPUl9BTkdMRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxv
YXQpYXR0cmliU3RhdGUubURpdmlzb3I7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliaXYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5h
bWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xl
bnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1l
LCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgp
OworCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFM
U0UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfU0laRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3Rh
dGUubVNpemU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0
dHJpYlN0YXRlLm1TdHJpZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBhdHRyaWJTdGF0ZS5tVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9G
QUxTRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gYXR0cmliU3RhdGUubUJvdW5kQnVmZmVyLmlkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgY3VycmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJl
bnRWYWx1ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJy
ZW50VmFsdWUgPiAwLjBmID8gZmxvb3IoY3VycmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJl
bnRWYWx1ZSAtIDAuNWYpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpYXR0cmliU3RhdGUubURpdmlz
b3I7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVy
dGV4QXR0cmliUG9pbnRlcnYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBv
aW50ZXIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0g
MHglWCwgR0x2b2lkKiogcG9pbnRlciA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwb2ludGVy
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocG5hbWUgIT0gR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9QT0lOVEVSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcG9p
bnRlciA9IGNvbnN0X2Nhc3Q8R0x2b2lkKj4oY29udGV4dC0+Z2V0VmVydGV4QXR0cmliUG9pbnRl
cihpbmRleCkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsSGludChHTGVudW0gdGFyZ2V0LCBHTGVudW0gbW9kZSkKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gbW9kZSA9IDB4JVgpIiwg
dGFyZ2V0LCBtb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtb2RlKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GQVNURVNUOgorICAgICAgICAgIGNhc2UgR0xf
TklDRVNUOgorICAgICAgICAgIGNhc2UgR0xfRE9OVF9DQVJFOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOyAKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDoKKyAgICAgICAgICAgIGlm
IChjb250ZXh0KSBjb250ZXh0LT5zZXRHZW5lcmF0ZU1pcG1hcEhpbnQobW9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZF
X0hJTlRfT0VTOgorICAgICAgICAgICAgaWYgKGNvbnRleHQpIGNvbnRleHQtPnNldEZyYWdtZW50
U2hhZGVyRGVyaXZhdGl2ZUhpbnQobW9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFu
IF9fc3RkY2FsbCBnbElzQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgYnVmZmVyID0gJWQpIiwgYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCAmJiBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIg
KmJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldEJ1ZmZlcihidWZmZXIpOworCisgICAgICAgICAg
ICBpZiAoYnVmZmVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJv
b2xlYW4gX19zdGRjYWxsIGdsSXNFbmFibGVkKEdMZW51bSBjYXApCit7CisgICAgRVZFTlQoIihH
TGVudW0gY2FwID0gMHglWCkiLCBjYXApOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIHJl
dHVybiBjb250ZXh0LT5pc0N1bGxGYWNlRW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdM
X1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzUG9seWdvbk9mZnNl
dEZpbGxFbmFibGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NP
VkVSQUdFOiByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7
CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICByZXR1cm4g
Y29udGV4dC0+aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1NjaXNzb3JUZXN0
RW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAg
ICAgcmV0dXJuIGNvbnRleHQtPmlzU3RlbmNpbFRlc3RFbmFibGVkKCk7CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNEZXB0
aFRlc3RFbmFibGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29udGV4dC0+aXNCbGVuZEVuYWJsZWQoKTsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RpdGhl
ckVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0ZlbmNlTlYoR0x1aW50IGZlbmNl
KQoreworICAgIEVWRU5UKCIoR0x1aW50IGZlbmNlID0gJWQpIiwgZmVuY2UpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBn
bDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworCisgICAg
ICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiBmZW5jZU9iamVjdC0+aXNGZW5jZSgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitH
TGJvb2xlYW4gX19zdGRjYWxsIGdsSXNGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCit7
CisgICAgRVZFTlQoIihHTHVpbnQgZnJhbWVidWZmZXIgPSAlZCkiLCBmcmFtZWJ1ZmZlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQgJiYgZnJhbWVidWZmZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3Qg
PSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlm
IChmcmFtZWJ1ZmZlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xi
b29sZWFuIF9fc3RkY2FsbCBnbElzUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBFVkVO
VCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQgJiYgcHJvZ3JhbSkKKyAgICAgICAgeworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9G
QUxTRTsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnlFWFQoR0x1aW50IGlkKQor
eworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJWQpIiwgaWQpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBm
YWxzZSwgR0xfTk9ORSk7CisKKyAgICAgICAgICAgIGlmIChxdWVyeU9iamVjdCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAg
IHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUmVuZGVyYnVm
ZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcmVuZGVyYnVm
ZmVyID0gJWQpIiwgcmVuZGVyYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCAmJiByZW5kZXJidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpS
ZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
cihyZW5kZXJidWZmZXIpOworCisgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNT
aGFkZXIoR0x1aW50IHNoYWRlcikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCki
LCBzaGFkZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0ICYmIHNo
YWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0g
Y29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmIChzaGFkZXJPYmpl
Y3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsK
KyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwg
Z2xJc1RleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgdGV4dHVy
ZSA9ICVkKSIsIHRleHR1cmUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0ICYmIHRleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0
dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKworICAgICAgICAgICAg
aWYgKHRleHR1cmVPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsTGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpCit7CisgICAgRVZFTlQoIihHTGZs
b2F0IHdpZHRoID0gJWYpIiwgd2lkdGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
d2lkdGggPD0gMC4wZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0TGluZVdpZHRoKHdpZHRoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bExpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dy
YW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmxpbmtQcm9ncmFtKHByb2dyYW0p
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsUGl4ZWxTdG9yZWkoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50IHBhcmFtID0gJWQpIiwgcG5hbWUs
IHBhcmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICAgICAgICAgIGlmIChwYXJh
bSAhPSAxICYmIHBhcmFtICE9IDIgJiYgcGFyYW0gIT0gNCAmJiBwYXJhbSAhPSA4KQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFVucGFja0FsaWdubWVudChwYXJhbSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgICAgICAgICBpZiAocGFy
YW0gIT0gMSAmJiBwYXJhbSAhPSAyICYmIHBhcmFtICE9IDQgJiYgcGFyYW0gIT0gOCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRQYWNrQWxpZ25tZW50KHBhcmFtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0UGFja1JldmVyc2VSb3dPcmRlcihwYXJhbSAhPSAwKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsUG9seWdvbk9mZnNldChHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cykKK3sKKyAgICBF
VkVOVCgiKEdMZmxvYXQgZmFjdG9yID0gJWYsIEdMZmxvYXQgdW5pdHMgPSAlZikiLCBmYWN0b3Is
IHVuaXRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldFBhcmFtcyhmYWN0b3Is
IHVuaXRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFJlYWRuUGl4ZWxzRVhUKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSBidWZTaXplLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHZvaWQgKmRhdGEpCit7CisgICAgRVZFTlQoIihHTGlu
dCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdo
dCA9ICVkLCAiCisgICAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9
IDB4JVgsIEdMc2l6ZWkgYnVmU2l6ZSA9IDB4JWQsIEdMdm9pZCAqZGF0YSA9IDB4JTAuOHApIiwK
KyAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIGRh
dGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8
IDAgfHwgYnVmU2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdMZW51bSBjdXJyZW50Rm9ybWF0LCBjdXJyZW50VHlwZTsK
KyAgICAKKyAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBl
IGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMgY3VycmVudGx5IGJvdW5kLAor
ICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBiYWNrIGlmIHRoYXQncyB0aGUg
Y2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwgYmUgcmVnaXN0ZXJlZAorICAgICAgICAg
ICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCisgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVudEZvcm1hdCwgJmN1cnJlbnRUeXBlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmICghKGN1cnJlbnRGb3Jt
YXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3JtYXRU
eXBlKGZvcm1hdCwgdHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
ICZidWZTaXplLCBkYXRhKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxzKQoreworICAgIEVW
RU5UKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xz
aXplaSBoZWlnaHQgPSAlZCwgIgorICAgICAgICAgICJHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xl
bnVtIHR5cGUgPSAweCVYLCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsICBwaXhlbHMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZW51bSBjdXJy
ZW50Rm9ybWF0LCBjdXJyZW50VHlwZTsKKyAgICAKKyAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4g
Z2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlIGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1l
bnQgaXMgY3VycmVudGx5IGJvdW5kLAorICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8g
cmVhZCBiYWNrIGlmIHRoYXQncyB0aGUgY2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwg
YmUgcmVnaXN0ZXJlZAorICAgICAgICAgICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCisg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVu
dEZvcm1hdCwgJmN1cnJlbnRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIGlmICghKGN1cnJlbnRGb3JtYXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5
cGUpICYmICF2YWxpZFJlYWRGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIE5VTEwsIHBpeGVscyk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xSZWxlYXNl
U2hhZGVyQ29tcGlsZXIodm9pZCkKK3sKKyAgICBFVkVOVCgiKCkiKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OlNoYWRlcjo6cmVsZWFzZUNvbXBpbGVyKCk7CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlQU5HTEUoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkgc2FtcGxlcyA9ICVkLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVp
Z2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0YXJnZXQp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUjoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5k
ZXJhYmxlKGludGVybmFsZm9ybWF0KSAmJiAhZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGludGVybmFs
Zm9ybWF0KSAmJiAhZ2w6OklzU3RlbmNpbFJlbmRlcmFibGUoaW50ZXJuYWxmb3JtYXQpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1wbGVzIDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHdpZHRoID4gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lv
bigpIHx8IAorICAgICAgICAgICAgICAgIGhlaWdodCA+IGNvbnRleHQtPmdldE1heGltdW1SZW5k
ZXJidWZmZXJEaW1lbnNpb24oKSB8fAorICAgICAgICAgICAgICAgIHNhbXBsZXMgPiBjb250ZXh0
LT5nZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBHTHVpbnQgaGFuZGxlID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCk7
CisgICAgICAgICAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5zZXRSZW5kZXJidWZmZXJTdG9yYWdlKG5ldyBnbDo6RGVwdGhidWZmZXIod2lkdGgs
IGhlaWdodCwgc2FtcGxlcykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1JHQkE0OgorICAgICAgICAgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfUkdCNTY1OgorICAgICAgICAgICAgICBjYXNlIEdMX1JHQjhfT0VTOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE4X09FUzoKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRSZW5kZXJidWZmZXJTdG9yYWdlKG5ldyBnbDo6Q29sb3JidWZmZXIod2lkdGgsIGhlaWdo
dCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5zZXRSZW5kZXJidWZmZXJTdG9yYWdlKG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcih3aWR0aCwg
aGVpZ2h0LCBzYW1wbGVzKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwg
aGVpZ2h0LCBzYW1wbGVzKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Cit7CisgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSh0YXJnZXQsIDAs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xT
YW1wbGVDb3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCkKK3sKKyAgICBF
VkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1
ZSwgaW52ZXJ0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoZ2w6
OmNsYW1wMDEodmFsdWUpLCBpbnZlcnQgPT0gR0xfVFJVRSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTZXRGZW5jZU5W
KEdMdWludCBmZW5jZSwgR0xlbnVtIGNvbmRpdGlvbikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBm
ZW5jZSA9ICVkLCBHTGVudW0gY29uZGl0aW9uID0gMHglWCkiLCBmZW5jZSwgY29uZGl0aW9uKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbiAhPSBHTF9BTExfQ09NUExF
VEVEX05WKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5j
ZSk7CisKKyAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZlbmNlT2JqZWN0LT5zZXRGZW5jZShjb25kaXRp
b24pOyAgICAKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFNjaXNzb3IoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkg
PSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JQYXJhbXMoeCwgeSwgd2lkdGgsIGhl
aWdodCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJCaW5hcnkoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHNo
YWRlcnMsIEdMZW51bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVp
IGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIHNo
YWRlcnMgPSAweCUwLjhwLCBHTGVudW0gYmluYXJ5Zm9ybWF0ID0gMHglWCwgIgorICAgICAgICAg
ICJjb25zdCBHTHZvaWQqIGJpbmFyeSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0gJWQpIiwK
KyAgICAgICAgICBuLCBzaGFkZXJzLCBiaW5hcnlmb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgLy8gTm8gYmluYXJ5IHNoYWRlciBmb3JtYXRzIGFyZSBz
dXBwb3J0ZWQuCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNoYWRlclNv
dXJjZShHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJpbmcs
IGNvbnN0IEdMaW50KiBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xjaGFyKiogc3RyaW5nID0gMHglMC44cCwgY29u
c3QgR0xpbnQqIGxlbmd0aCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzaGFkZXIsIGNvdW50LCBz
dHJpbmcsIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIp
OworCisgICAgICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hh
ZGVyT2JqZWN0LT5zZXRTb3VyY2UoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0
ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKQoreworICAgIGds
U3RlbmNpbEZ1bmNTZXBhcmF0ZShHTF9GUk9OVF9BTkRfQkFDSywgZnVuYywgcmVmLCBtYXNrKTsK
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBH
TGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzaykKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSBmYWNlID0gMHglWCwgR0xlbnVtIGZ1bmMgPSAweCVYLCBHTGludCByZWYgPSAlZCwgR0x1aW50
IG1hc2sgPSAlZCkiLCBmYWNlLCBmdW5jLCByZWYsIG1hc2spOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBzd2l0Y2ggKGZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZST05U
OgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9C
QUNLOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dp
dGNoIChmdW5jKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9ORVZFUjoKKyAgICAgICAg
ICBjYXNlIEdMX0FMV0FZUzoKKyAgICAgICAgICBjYXNlIEdMX0xFU1M6CisgICAgICAgICAgY2Fz
ZSBHTF9MRVFVQUw6CisgICAgICAgICAgY2FzZSBHTF9FUVVBTDoKKyAgICAgICAgICBjYXNlIEdM
X0dFUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0dSRUFURVI6CisgICAgICAgICAgY2FzZSBHTF9O
T1RFUVVBTDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZS
T05UIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFBhcmFtcyhmdW5jLCByZWYsIG1hc2spOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0g
R0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0U3RlbmNpbEJhY2tQYXJhbXMoZnVuYywgcmVmLCBtYXNrKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFN0ZW5jaWxNYXNrKEdMdWludCBtYXNrKQoreworICAgIGdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZShHTF9GUk9OVF9BTkRfQkFDSywgbWFzayk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
U3RlbmNpbE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spCit7CisgICAgRVZF
TlQoIihHTGVudW0gZmFjZSA9IDB4JVgsIEdMdWludCBtYXNrID0gJWQpIiwgZmFjZSwgbWFzayk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZmFjZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfRlJPTlQ6CisgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAg
IGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxXcml0ZW1hc2sobWFz
ayk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0JBQ0sgfHwg
ZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRTdGVuY2lsQmFja1dyaXRlbWFzayhtYXNrKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFN0ZW5jaWxPcChHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBh
c3MpCit7CisgICAgZ2xTdGVuY2lsT3BTZXBhcmF0ZShHTF9GUk9OVF9BTkRfQkFDSywgZmFpbCwg
emZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsT3BTZXBhcmF0ZShH
TGVudW0gZmFjZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIGZhY2UgPSAweCVYLCBHTGVudW0gZmFpbCA9IDB4JVgsIEdMZW51
bSB6ZmFpbCA9IDB4JVgsIEdMZW51bSB6cGFzID0gMHglWHMpIiwKKyAgICAgICAgICBmYWNlLCBm
YWlsLCB6ZmFpbCwgenBhc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZh
Y2UpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgIGNhc2Ug
R0xfQkFDSzoKKyAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChmYWlsKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfS0VFUDoKKyAg
ICAgICAgICBjYXNlIEdMX1JFUExBQ0U6CisgICAgICAgICAgY2FzZSBHTF9JTkNSOgorICAgICAg
ICAgIGNhc2UgR0xfREVDUjoKKyAgICAgICAgICBjYXNlIEdMX0lOVkVSVDoKKyAgICAgICAgICBj
YXNlIEdMX0lOQ1JfV1JBUDoKKyAgICAgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoemZhaWwpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9LRUVQ
OgorICAgICAgICAgIGNhc2UgR0xfUkVQTEFDRToKKyAgICAgICAgICBjYXNlIEdMX0lOQ1I6Cisg
ICAgICAgICAgY2FzZSBHTF9ERUNSOgorICAgICAgICAgIGNhc2UgR0xfSU5WRVJUOgorICAgICAg
ICAgIGNhc2UgR0xfSU5DUl9XUkFQOgorICAgICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh6cGFz
cykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNlIEdM
X0tFRVA6CisgICAgICAgICAgY2FzZSBHTF9SRVBMQUNFOgorICAgICAgICAgIGNhc2UgR0xfSU5D
UjoKKyAgICAgICAgICBjYXNlIEdMX0RFQ1I6CisgICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6Cisg
ICAgICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6CisgICAgICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBm
YWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0ZW5jaWxPcGVyYXRpb25zKGZhaWwsIHpmYWlsLCB6cGFzcyk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0JBQ0sgfHwgZmFjZSA9PSBH
TF9GUk9OVF9BTkRfQkFDSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitH
TGJvb2xlYW4gX19zdGRjYWxsIGdsVGVzdEZlbmNlTlYoR0x1aW50IGZlbmNlKQoreworICAgIEVW
RU5UKCIoR0x1aW50IGZlbmNlID0gJWQpIiwgZmVuY2UpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RmVuY2UgKmZl
bmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworCisgICAgICAgICAgICBpZiAo
ZmVuY2VPYmplY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gZmVuY2VPYmplY3QtPnRlc3RGZW5jZSgpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gR0xfVFJVRTsKK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSAl
ZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCAiCisgICAgICAgICAg
IkdMaW50IGJvcmRlciA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAw
eCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9ICAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoIXZhbGlkSW1hZ2VT
aXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGludGVy
bmFsZm9ybWF0ICE9IEdMaW50KGZvcm1hdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICAvLyB2
YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCisg
ICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoK
KyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAg
ICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
IH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5hdGlvbnMK
KyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAg
ICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZB
TElEX09QRVJBVElPTgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FU
X09FUzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBH
TF9SR0JBOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzVfNV8xOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICBj
YXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIEdMX0JHUkFfRVhUOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8v
IGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93Cisg
ICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CisgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgorICAgICAgICAgICAgYnJlYWs7
IAorICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChib3JkZXIgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0
TWF4aW11bVRleHR1cmVMZXZlbCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4
aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKKyAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgICAgICBpZiAod2lkdGgg
IT0gaGVpZ2h0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNp
b24oKSA+PiBsZXZlbCkgfHwKKyAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQt
PmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgorICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBv
cnRzIGxvYWRpbmcgZGVwdGggZGF0YSBhbmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAg
ICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAg
aWYgKHBpeGVscyAhPSBOVUxMIHx8IGxldmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodHlw
ZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRV
bnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdl
UG9zWChsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRJbWFnZVBvc1kobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+
Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4
ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0SW1hZ2VQb3NaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNv
bnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50
KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJmKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
R0xmbG9hdCBwYXJhbSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVu
dW0gcG5hbWUgPSAweCVYLCBHTGludCBwYXJhbSA9ICVmKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFt
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisKKyAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVA6CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFw
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
LT5zZXRXcmFwUygoR0xlbnVtKXBhcmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X1dSQVBfVDoKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBUKChHTGVudW0p
cGFyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6CisgICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUtPnNldFVzYWdlKChHTGVudW0pcGFyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfTUFYX0FOSVNPVFJPUFlfRVhUOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWF4QW5pc290cm9weSgo
ZmxvYXQpcGFyYW0sIGNvbnRleHQtPmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcmZ2KEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW1zKQoreworICAgIGdsVGV4
UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCAoR0xmbG9hdCkqcGFyYW1zKTsKK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0pCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgor
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9TOgorICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0
V3JhcFMoKEdMZW51bSlwYXJhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1Q6CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVtKXBhcmFt
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6CisgICAgICAgICAg
ICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlwYXJhbSkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5z
ZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01B
WF9BTklTT1RST1BZX0VYVDoKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
VGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0
KXBhcmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50KiBwYXJhbXMpCit7CisgICAgZ2xUZXhQYXJhbWV0
ZXJpKHRhcmdldCwgcG5hbWUsICpwYXJhbXMpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFN0
b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBFVkVOVCgiKEdM
ZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwK
KyAgICAgICAgICAgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJE
ICYmIHRhcmdldCAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh3aWR0aCA8IDEgfHwgaGVpZ2h0IDwgMSB8fCBsZXZlbHMgPCAxKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVAgJiYgd2lkdGggIT0gaGVpZ2h0
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9IGdsOjps
b2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKSArIDEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAg
ICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAg
ICAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7CisKKyAg
ICAgICAgaWYgKGZvcm1hdCA9PSBHTF9OT05FIHx8IHR5cGUgPT0gR0xfTk9ORSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJE
OgorICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
RGltZW5zaW9uKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0
TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhp
bXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSB8fAorICAgICAgICAgICAgICAgICAgICBoZWlnaHQg
PiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSAmJiAhY29u
dGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKCFnbDo6aXNQb3cyKHdpZHRoKSB8fCAhZ2w6OmlzUG93MihoZWlnaHQpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKKyAgICAgICAgICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKKyAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
UkdCQTMyRl9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFMzJGX0VYVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhU
OgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMo
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0IxNkZfRVhUOgorICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgorICAgICAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09F
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xf
VEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVsIHRl
eHR1cmVzCisgICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9
PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3RvcmFnZShsZXZlbHMs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwg
dGV4dHVyZS0+aWQoKSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit7
CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xp
bnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXpl
aSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwg
R0xlbnVtIHR5cGUgPSAweCVYLCAiCisgICAgICAgICAgImNvbnN0IEdMdm9pZCogcGl4ZWxzID0g
MHglMC44cCkiLAorICAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8
fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZDo6
bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6
bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBl
ciBmdW5jdGlvbgorICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZl
bCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBH
TF9GTE9BVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfSEFMRl9G
TE9BVF9PRVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzRGVwdGhUZXh0dXJl
KGZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhf
dGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEsIGJ1dCBBTkdMRV9kZXB0aF90ZXh0
dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwg
aGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09
IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAg
IGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHR5cGUsIHRleHR1cmUpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgIGlm
ICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNl
dCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0eXBlLCB0ZXh0dXJlKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
Y29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3Jt
MWYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCkKK3sKKyAgICBnbFVuaWZvcm0xZnYobG9jYXRp
b24sIDEsICZ4KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIEVWRU5UKCIoR0xp
bnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0g
MHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNv
dW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpKEdM
aW50IGxvY2F0aW9uLCBHTGludCB4KQoreworICAgIGdsVW5pZm9ybTFpdihsb2NhdGlvbiwgMSwg
JngpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRp
b24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwg
bG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZihHTGludCBsb2NhdGlv
biwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpCit7CisgICAgR0xmbG9hdCB4eVsyXSA9IHt4LCB5fTsK
KworICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCogdikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdM
c2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24s
IGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpKEdMaW50IGxvY2F0aW9u
LCBHTGludCB4LCBHTGludCB5KQoreworICAgIEdMaW50IHh5WzRdID0ge3gsIHl9OworCisgICAg
Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4eSk7Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQqIHYpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50
ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTNmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQg
eSwgR0xmbG9hdCB6KQoreworICAgIEdMZmxvYXQgeHl6WzNdID0ge3gsIHksIHp9OworCisgICAg
Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5eik7Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCogdikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50
LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdl
dEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xpbnQgeikKK3sKKyAgICBHTGludCB4eXpbM10gPSB7eCwgeSwgen07CisKKyAgICBn
bFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIChHTGludCopJnh5eik7Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQqIHYpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50
ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTRmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQg
eSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7CisgICAgR0xmbG9hdCB4eXp3WzRdID0ge3gsIHks
IHosIHd9OworCisgICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5encp
OworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlv
biA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIs
IGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3Vu
dCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGkoR0xpbnQgbG9jYXRp
b24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpCit7CisgICAgR0xpbnQgeHl6
d1s0XSA9IHt4LCB5LCB6LCB3fTsKKworICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgMSwgKEdM
aW50KikmeHl6dyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit7CisgICAgRVZFTlQoIihHTGlu
dCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHgl
MC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50
LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBH
THNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9h
dCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0
cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJmdihs
b2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGlu
dCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2Ug
PSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRp
b24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7
CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIs
CisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0Up
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBj
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVl
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQg
cHJvZ3JhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW0g
IT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hh
ZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVj
dC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
b250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0pOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmFsaWRhdGVQcm9ncmFtKEdM
dWludCBwcm9ncmFtKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9n
cmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFt
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRlKCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWIxZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBp
bmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZikiLCBpbmRleCwgeCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0
IHZhbHNbNF0gPSB7IHgsIDAsIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRl
eEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGlu
ZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXgg
PSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCAwLCAwLCAxIH07CisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliMmYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSkKK3sKKyAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0g
JWYpIiwgaW5kZXgsIHgsIHkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXgg
Pj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCAw
LCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCog
dmFsdWVzKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZh
bHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07CisgICAgICAgICAgICBjb250
ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmli
M2YoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KQoreworICAg
IEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAl
ZiwgR0xmbG9hdCB6ID0gJWYpIiwgaW5kZXgsIHgsIHksIHopOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2
YWxzWzRdID0geyB4LCB5LCB6LCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhB
dHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2Z2KEdMdWludCBpbmRl
eCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0g
JWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNb
Ml0sIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFs
cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xm
bG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRl
eCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmLCBH
TGZsb2F0IHcgPSAlZikiLCBpbmRleCwgeCwgeSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZh
bHNbNF0gPSB7IHgsIHksIHosIHcgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0
dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZGV4
LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAl
ZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFsdWVzKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQor
eworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMdWludCBkaXZpc29yID0gJWQpIiwg
aW5kZXgsIGRpdmlzb3IpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliRGl2aXNv
cihpbmRleCwgZGl2aXNvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBp
bmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNp
emVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5k
ZXggPSAlZCwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAg
ICAiR0xib29sZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3Qg
R0x2b2lkKiBwdHIgPSAweCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgcHRyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGlu
ZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh0eXBlKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9GSVhFRDoKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHN0cmlkZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4
LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCAobm9ybWFsaXplZCA9PSBH
TF9UUlVFKSwgc3RyaWRlLCBwdHIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGludCB4
ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9
ICVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZpZXdwb3J0UGFyYW1z
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUoR0xp
bnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRz
dFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIp
Cit7CisgICAgRVZFTlQoIihHTGludCBzcmNYMCA9ICVkLCBHTGludCBzcmNZMCA9ICVkLCBHTGlu
dCBzcmNYMSA9ICVkLCBHTGludCBzcmNZMSA9ICVkLCAiCisgICAgICAgICAgIkdMaW50IGRzdFgw
ID0gJWQsIEdMaW50IGRzdFkwID0gJWQsIEdMaW50IGRzdFgxID0gJWQsIEdMaW50IGRzdFkxID0g
JWQsICIKKyAgICAgICAgICAiR0xiaXRmaWVsZCBtYXNrID0gMHglWCwgR0xlbnVtIGZpbHRlciA9
IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNYMSwgZHN0WDAsIGRz
dFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9ORUFSRVNU
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCht
YXNrICYgfihHTF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUIHwgR0xf
REVQVEhfQlVGRkVSX0JJVCkpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcmNYMSAt
IHNyY1gwICE9IGRzdFgxIC0gZHN0WDAgfHwgc3JjWTEgLSBzcmNZMCAhPSBkc3RZMSAtIGRzdFkw
KQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlNjYWxpbmcgYW5kIGZsaXBwaW5nIGluIEJs
aXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIp
OworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSA9PSBjb250ZXh0LT5nZXREcmF3
RnJhbWVidWZmZXJIYW5kbGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIo
IkJsaXRzIHdpdGggdGhlIHNhbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciBh
cmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiIpOworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNvbnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNyY1gx
LCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2spOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4
SW1hZ2UzRE9FUyhHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAw
eCVYLCAiCisgICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAl
ZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgIgorICAgICAgICAgICJH
TGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCV4LCBjb25zdCBHTHZvaWQqIHBp
eGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQ
cm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtICpi
aW5hcnlGb3JtYXQsIHZvaWQgKmJpbmFyeSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFt
ID0gMHglWCwgYnVmU2l6ZSA9ICVkLCBsZW5ndGggPSAweCUwLjhwLCBiaW5hcnlGb3JtYXQgPSAw
eCUwLjhwLCBiaW5hcnkgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYnVmU2l6ZSwg
bGVuZ3RoLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zYXZlKGJpbmFyeSwgYnVmU2l6ZSwgbGVuZ3Ro
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqYmluYXJ5Rm9ybWF0
ID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtQmluYXJ5T0VTKEdM
dWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKQoreworICAgIEVW
RU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBiaW5hcnlGb3JtYXQgPSAweCV4LCBiaW5hcnkg
PSAweCUwLjhwLCBsZW5ndGggPSAlZCkiLAorICAgICAgICAgIHByb2dyYW0sIGJpbmFyeUZvcm1h
dCwgYmluYXJ5LCBsZW5ndGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYmluYXJ5Rm9ybWF0ICE9IEdMX1BST0dS
QU1fQklOQVJZX0FOR0xFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRQcm9ncmFtQmluYXJ5KHByb2dyYW0sIGJpbmFy
eSwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCitfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBn
bEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQoreworICAgIHN0cnVjdCBFeHRl
bnNpb24KKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgIF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgYWRkcmVzczsKKyAgICB9OworCisgICAg
c3RhdGljIGNvbnN0IEV4dGVuc2lvbiBnbEV4dGVuc2lvbnNbXSA9CisgICAgeworICAgICAgICB7
ImdsVGV4SW1hZ2UzRE9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKWdsVGV4SW1hZ2UzRE9FU30sCisgICAgICAgIHsiZ2xCbGl0RnJhbWVidWZmZXJBTkdMRSIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsQmxpdEZyYW1lYnVm
ZmVyQU5HTEV9LAorICAgICAgICB7ImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5H
TEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFfSwKKyAgICAgICAgeyJnbERlbGV0ZUZlbmNlc05W
IiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEZWxldGVGZW5j
ZXNOVn0sCisgICAgICAgIHsiZ2xHZW5GZW5jZXNOViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKWdsR2VuRmVuY2VzTlZ9LAorICAgICAgICB7ImdsSXNGZW5jZU5W
IiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xJc0ZlbmNlTlZ9
LAorICAgICAgICB7ImdsVGVzdEZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbFRlc3RGZW5jZU5WfSwKKyAgICAgICAgeyJnbEdldEZlbmNlaXZOViIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0RmVuY2Vpdk5W
fSwKKyAgICAgICAgeyJnbEZpbmlzaEZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbEZpbmlzaEZlbmNlTlZ9LAorICAgICAgICB7ImdsU2V0RmVuY2VO
ViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsU2V0RmVuY2VO
Vn0sCisgICAgICAgIHsiZ2xHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUiLCAoX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRX0sCisgICAgICAgIHsiZ2xUZXhTdG9yYWdlMkRFWFQiLCAoX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFRleFN0b3JhZ2UyREVYVH0sCisgICAgICAg
IHsiZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUfSwKKyAgICAgICAg
eyJnbFJlYWRuUGl4ZWxzRVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUpZ2xSZWFkblBpeGVsc0VYVH0sCisgICAgICAgIHsiZ2xHZXRuVW5pZm9ybWZ2RVhUIiwg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRuVW5pZm9ybWZ2
RVhUfSwKKyAgICAgICAgeyJnbEdldG5Vbmlmb3JtaXZFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldG5Vbmlmb3JtaXZFWFR9LAorICAgICAgICB7Imds
R2VuUXVlcmllc0VYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBl
KWdsR2VuUXVlcmllc0VYVH0sCisgICAgICAgIHsiZ2xEZWxldGVRdWVyaWVzRVhUIiwgKF9fZWds
TXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEZWxldGVRdWVyaWVzRVhUfSwK
KyAgICAgICAgeyJnbElzUXVlcnlFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbElzUXVlcnlFWFR9LAorICAgICAgICB7ImdsQmVnaW5RdWVyeUVYVCIsIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsQmVnaW5RdWVyeUVYVH0s
CisgICAgICAgIHsiZ2xFbmRRdWVyeUVYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlKWdsRW5kUXVlcnlFWFR9LAorICAgICAgICB7ImdsR2V0UXVlcnlpdkVYVCIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UXVlcnlpdkVY
VH0sCisgICAgICAgIHsiZ2xHZXRRdWVyeU9iamVjdHVpdkVYVCIsIChfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UXVlcnlPYmplY3R1aXZFWFR9LAorICAgICAg
ICB7ImdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEV9LAorICAgICAgICB7
ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAorICAgICAgICB7Imds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKKyAgICAgICAgeyJn
bEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAorICAgICAgICB7ImdsUHJvZ3JhbUJpbmFy
eU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJvZ3Jh
bUJpbmFyeU9FU30sICAgIH07CisKKyAgICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBzaXplb2Yo
Z2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKKyAgICB7CisgICAgICAg
IGlmIChzdHJjbXAocHJvY25hbWUsIGdsRXh0ZW5zaW9uc1tleHRdLm5hbWUpID09IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbEV4dGVuc2lvbnNbZXh0XS5hZGRyZXNzOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8vIE5vbi1wdWJsaWMgZnVuY3Rpb25zIHVzZWQgYnkg
RUdMCisKK2Jvb2wgX19zdGRjYWxsIGdsQmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFj
ZSkKK3sKKyAgICBFVkVOVCgiKGVnbDo6U3VyZmFjZSogc3VyZmFjZSA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBzdXJmYWNlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZU9iamVjdCA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICBpZiAodGV4dHVyZU9iamVj
dC0+aXNJbW11dGFibGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmVPYmplY3QtPmJpbmRUZXhJbWFn
ZShzdXJmYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIwor
KgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVm
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgyIEBACitMSUJSQVJZIGxpYkdMRVN2MgorRVhQ
T1JUUworICAgIGdsQWN0aXZlVGV4dHVyZSAgICAgICAgICAgICAgICAgQDEKKyAgICBnbEF0dGFj
aFNoYWRlciAgICAgICAgICAgICAgICAgIEAyCisgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24gICAg
ICAgICAgICBAMworICAgIGdsQmluZEJ1ZmZlciAgICAgICAgICAgICAgICAgICAgQDQKKyAgICBn
bEJpbmRGcmFtZWJ1ZmZlciAgICAgICAgICAgICAgIEA1CisgICAgZ2xCaW5kUmVuZGVyYnVmZmVy
ICAgICAgICAgICAgICBANgorICAgIGdsQmluZFRleHR1cmUgICAgICAgICAgICAgICAgICAgQDcK
KyAgICBnbEJsZW5kQ29sb3IgICAgICAgICAgICAgICAgICAgIEA4CisgICAgZ2xCbGVuZEVxdWF0
aW9uICAgICAgICAgICAgICAgICBAOQorICAgIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlICAgICAg
ICAgQDEwCisgICAgZ2xCbGVuZEZ1bmMgICAgICAgICAgICAgICAgICAgICBAMTEKKyAgICBnbEJs
ZW5kRnVuY1NlcGFyYXRlICAgICAgICAgICAgIEAxMgorICAgIGdsQnVmZmVyRGF0YSAgICAgICAg
ICAgICAgICAgICAgQDEzCisgICAgZ2xCdWZmZXJTdWJEYXRhICAgICAgICAgICAgICAgICBAMTQK
KyAgICBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMgICAgICAgIEAxNQorICAgIGdsQ2xlYXIgICAg
ICAgICAgICAgICAgICAgICAgICAgQDE2CisgICAgZ2xDbGVhckNvbG9yICAgICAgICAgICAgICAg
ICAgICBAMTcKKyAgICBnbENsZWFyRGVwdGhmICAgICAgICAgICAgICAgICAgIEAxOAorICAgIGds
Q2xlYXJTdGVuY2lsICAgICAgICAgICAgICAgICAgQDE5CisgICAgZ2xDb2xvck1hc2sgICAgICAg
ICAgICAgICAgICAgICBAMjAKKyAgICBnbENvbXBpbGVTaGFkZXIgICAgICAgICAgICAgICAgIEAy
MQorICAgIGdsQ29tcHJlc3NlZFRleEltYWdlMkQgICAgICAgICAgQDIyCisgICAgZ2xDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCAgICAgICBAMjMKKyAgICBnbENvcHlUZXhJbWFnZTJEICAgICAgICAg
ICAgICAgIEAyNAorICAgIGdsQ29weVRleFN1YkltYWdlMkQgICAgICAgICAgICAgQDI1CisgICAg
Z2xDcmVhdGVQcm9ncmFtICAgICAgICAgICAgICAgICBAMjYKKyAgICBnbENyZWF0ZVNoYWRlciAg
ICAgICAgICAgICAgICAgIEAyNworICAgIGdsQ3VsbEZhY2UgICAgICAgICAgICAgICAgICAgICAg
QDI4CisgICAgZ2xEZWxldGVCdWZmZXJzICAgICAgICAgICAgICAgICBAMjkKKyAgICBnbERlbGV0
ZUZyYW1lYnVmZmVycyAgICAgICAgICAgIEAzMAorICAgIGdsRGVsZXRlUHJvZ3JhbSAgICAgICAg
ICAgICAgICAgQDMyCisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzICAgICAgICAgICBAMzMKKyAg
ICBnbERlbGV0ZVNoYWRlciAgICAgICAgICAgICAgICAgIEAzNAorICAgIGdsRGVsZXRlVGV4dHVy
ZXMgICAgICAgICAgICAgICAgQDMxCisgICAgZ2xEZXB0aEZ1bmMgICAgICAgICAgICAgICAgICAg
ICBAMzYKKyAgICBnbERlcHRoTWFzayAgICAgICAgICAgICAgICAgICAgIEAzNworICAgIGdsRGVw
dGhSYW5nZWYgICAgICAgICAgICAgICAgICAgQDM4CisgICAgZ2xEZXRhY2hTaGFkZXIgICAgICAg
ICAgICAgICAgICBAMzUKKyAgICBnbERpc2FibGUgICAgICAgICAgICAgICAgICAgICAgIEAzOQor
ICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ICAgICAgQDQwCisgICAgZ2xEcmF3QXJyYXlz
ICAgICAgICAgICAgICAgICAgICBANDEKKyAgICBnbERyYXdFbGVtZW50cyAgICAgICAgICAgICAg
ICAgIEA0MgorICAgIGdsRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgQDQzCisgICAgZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgICBANDQKKyAgICBnbEZpbmlzaCAgICAgICAgICAg
ICAgICAgICAgICAgIEA0NQorICAgIGdsRmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAgQDQ2
CisgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciAgICAgICBANDcKKyAgICBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEICAgICAgICAgIEA0OAorICAgIGdsRnJvbnRGYWNlICAgICAgICAgICAgICAg
ICAgICAgQDQ5CisgICAgZ2xHZW5CdWZmZXJzICAgICAgICAgICAgICAgICAgICBANTAKKyAgICBn
bEdlbkZyYW1lYnVmZmVycyAgICAgICAgICAgICAgIEA1MgorICAgIGdsR2VuUmVuZGVyYnVmZmVy
cyAgICAgICAgICAgICAgQDUzCisgICAgZ2xHZW5UZXh0dXJlcyAgICAgICAgICAgICAgICAgICBA
NTQKKyAgICBnbEdlbmVyYXRlTWlwbWFwICAgICAgICAgICAgICAgIEA1MQorICAgIGdsR2V0QWN0
aXZlQXR0cmliICAgICAgICAgICAgICAgQDU1CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtICAgICAg
ICAgICAgICBANTYKKyAgICBnbEdldEF0dGFjaGVkU2hhZGVycyAgICAgICAgICAgIEA1NworICAg
IGdsR2V0QXR0cmliTG9jYXRpb24gICAgICAgICAgICAgQDU4CisgICAgZ2xHZXRCb29sZWFudiAg
ICAgICAgICAgICAgICAgICBANTkKKyAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcml2ICAgICAgICAg
IEA2MAorICAgIGdsR2V0RXJyb3IgICAgICAgICAgICAgICAgICAgICAgQDYxCisgICAgZ2xHZXRG
bG9hdHYgICAgICAgICAgICAgICAgICAgICBANjIKKyAgICBnbEdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2ICAgQDYzCisgICAgZ2xHZXRJbnRlZ2VydiAgICAgICAgICAgICAgICAg
ICBANjQKKyAgICBnbEdldFByb2dyYW1JbmZvTG9nICAgICAgICAgICAgIEA2NgorICAgIGdsR2V0
UHJvZ3JhbWl2ICAgICAgICAgICAgICAgICAgQDY1CisgICAgZ2xHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdiAgICBANjcKKyAgICBnbEdldFNoYWRlckluZm9Mb2cgICAgICAgICAgICAgIEA2OQor
ICAgIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0ICAgICAgQDcwCisgICAgZ2xHZXRTaGFkZXJT
b3VyY2UgICAgICAgICAgICAgICBANzEKKyAgICBnbEdldFNoYWRlcml2ICAgICAgICAgICAgICAg
ICAgIEA2OAorICAgIGdsR2V0U3RyaW5nICAgICAgICAgICAgICAgICAgICAgQDcyCisgICAgZ2xH
ZXRUZXhQYXJhbWV0ZXJmdiAgICAgICAgICAgICBANzMKKyAgICBnbEdldFRleFBhcmFtZXRlcml2
ICAgICAgICAgICAgIEA3NAorICAgIGdsR2V0VW5pZm9ybUxvY2F0aW9uICAgICAgICAgICAgQDc3
CisgICAgZ2xHZXRVbmlmb3JtZnYgICAgICAgICAgICAgICAgICBANzUKKyAgICBnbEdldFVuaWZv
cm1pdiAgICAgICAgICAgICAgICAgIEA3NgorICAgIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYg
ICAgICAgQDgwCisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJmdiAgICAgICAgICAgICBANzgKKyAgICBn
bEdldFZlcnRleEF0dHJpYml2ICAgICAgICAgICAgIEA3OQorICAgIGdsSGludCAgICAgICAgICAg
ICAgICAgICAgICAgICAgQDgxCisgICAgZ2xJc0J1ZmZlciAgICAgICAgICAgICAgICAgICAgICBA
ODIKKyAgICBnbElzRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIEA4MworICAgIGdsSXNGcmFt
ZWJ1ZmZlciAgICAgICAgICAgICAgICAgQDg0CisgICAgZ2xJc1Byb2dyYW0gICAgICAgICAgICAg
ICAgICAgICBAODUKKyAgICBnbElzUmVuZGVyYnVmZmVyICAgICAgICAgICAgICAgIEA4NgorICAg
IGdsSXNTaGFkZXIgICAgICAgICAgICAgICAgICAgICAgQDg3CisgICAgZ2xJc1RleHR1cmUgICAg
ICAgICAgICAgICAgICAgICBAODgKKyAgICBnbExpbmVXaWR0aCAgICAgICAgICAgICAgICAgICAg
IEA4OQorICAgIGdsTGlua1Byb2dyYW0gICAgICAgICAgICAgICAgICAgQDkwCisgICAgZ2xQaXhl
bFN0b3JlaSAgICAgICAgICAgICAgICAgICBAOTEKKyAgICBnbFBvbHlnb25PZmZzZXQgICAgICAg
ICAgICAgICAgIEA5MgorICAgIGdsUmVhZFBpeGVscyAgICAgICAgICAgICAgICAgICAgQDkzCisg
ICAgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIgICAgICAgICBAOTQKKyAgICBnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2UgICAgICAgICAgIEA5NQorICAgIGdsU2FtcGxlQ292ZXJhZ2UgICAgICAgICAgICAg
ICAgQDk2CisgICAgZ2xTY2lzc29yICAgICAgICAgICAgICAgICAgICAgICBAOTcKKyAgICBnbFNo
YWRlckJpbmFyeSAgICAgICAgICAgICAgICAgIEA5OAorICAgIGdsU2hhZGVyU291cmNlICAgICAg
ICAgICAgICAgICAgQDk5CisgICAgZ2xTdGVuY2lsRnVuYyAgICAgICAgICAgICAgICAgICBAMTAw
CisgICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlICAgICAgICAgICBAMTAxCisgICAgZ2xTdGVuY2ls
TWFzayAgICAgICAgICAgICAgICAgICBAMTAyCisgICAgZ2xTdGVuY2lsTWFza1NlcGFyYXRlICAg
ICAgICAgICBAMTAzCisgICAgZ2xTdGVuY2lsT3AgICAgICAgICAgICAgICAgICAgICBAMTA0Cisg
ICAgZ2xTdGVuY2lsT3BTZXBhcmF0ZSAgICAgICAgICAgICBAMTA1CisgICAgZ2xUZXhJbWFnZTJE
ICAgICAgICAgICAgICAgICAgICBAMTA2CisgICAgZ2xUZXhQYXJhbWV0ZXJmICAgICAgICAgICAg
ICAgICBAMTA3CisgICAgZ2xUZXhQYXJhbWV0ZXJmdiAgICAgICAgICAgICAgICBAMTA4CisgICAg
Z2xUZXhQYXJhbWV0ZXJpICAgICAgICAgICAgICAgICBAMTA5CisgICAgZ2xUZXhQYXJhbWV0ZXJp
diAgICAgICAgICAgICAgICBAMTEwCisgICAgZ2xUZXhTdWJJbWFnZTJEICAgICAgICAgICAgICAg
ICBAMTExCisgICAgZ2xVbmlmb3JtMWYgICAgICAgICAgICAgICAgICAgICBAMTEyCisgICAgZ2xV
bmlmb3JtMWZ2ICAgICAgICAgICAgICAgICAgICBAMTEzCisgICAgZ2xVbmlmb3JtMWkgICAgICAg
ICAgICAgICAgICAgICBAMTE0CisgICAgZ2xVbmlmb3JtMWl2ICAgICAgICAgICAgICAgICAgICBA
MTE1CisgICAgZ2xVbmlmb3JtMmYgICAgICAgICAgICAgICAgICAgICBAMTE2CisgICAgZ2xVbmlm
b3JtMmZ2ICAgICAgICAgICAgICAgICAgICBAMTE3CisgICAgZ2xVbmlmb3JtMmkgICAgICAgICAg
ICAgICAgICAgICBAMTE4CisgICAgZ2xVbmlmb3JtMml2ICAgICAgICAgICAgICAgICAgICBAMTE5
CisgICAgZ2xVbmlmb3JtM2YgICAgICAgICAgICAgICAgICAgICBAMTIwCisgICAgZ2xVbmlmb3Jt
M2Z2ICAgICAgICAgICAgICAgICAgICBAMTIxCisgICAgZ2xVbmlmb3JtM2kgICAgICAgICAgICAg
ICAgICAgICBAMTIyCisgICAgZ2xVbmlmb3JtM2l2ICAgICAgICAgICAgICAgICAgICBAMTIzCisg
ICAgZ2xVbmlmb3JtNGYgICAgICAgICAgICAgICAgICAgICBAMTI0CisgICAgZ2xVbmlmb3JtNGZ2
ICAgICAgICAgICAgICAgICAgICBAMTI1CisgICAgZ2xVbmlmb3JtNGkgICAgICAgICAgICAgICAg
ICAgICBAMTI2CisgICAgZ2xVbmlmb3JtNGl2ICAgICAgICAgICAgICAgICAgICBAMTI3CisgICAg
Z2xVbmlmb3JtTWF0cml4MmZ2ICAgICAgICAgICAgICBAMTI4CisgICAgZ2xVbmlmb3JtTWF0cml4
M2Z2ICAgICAgICAgICAgICBAMTI5CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2ICAgICAgICAgICAg
ICBAMTMwCisgICAgZ2xVc2VQcm9ncmFtICAgICAgICAgICAgICAgICAgICBAMTMxCisgICAgZ2xW
YWxpZGF0ZVByb2dyYW0gICAgICAgICAgICAgICBAMTMyCisgICAgZ2xWZXJ0ZXhBdHRyaWIxZiAg
ICAgICAgICAgICAgICBAMTMzCisgICAgZ2xWZXJ0ZXhBdHRyaWIxZnYgICAgICAgICAgICAgICBA
MTM0CisgICAgZ2xWZXJ0ZXhBdHRyaWIyZiAgICAgICAgICAgICAgICBAMTM1CisgICAgZ2xWZXJ0
ZXhBdHRyaWIyZnYgICAgICAgICAgICAgICBAMTM2CisgICAgZ2xWZXJ0ZXhBdHRyaWIzZiAgICAg
ICAgICAgICAgICBAMTM3CisgICAgZ2xWZXJ0ZXhBdHRyaWIzZnYgICAgICAgICAgICAgICBAMTM4
CisgICAgZ2xWZXJ0ZXhBdHRyaWI0ZiAgICAgICAgICAgICAgICBAMTM5CisgICAgZ2xWZXJ0ZXhB
dHRyaWI0ZnYgICAgICAgICAgICAgICBAMTQwCisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyICAg
ICAgICAgICBAMTQxCisgICAgZ2xWaWV3cG9ydCAgICAgICAgICAgICAgICAgICAgICBAMTQyCisK
KyAgICA7IEV4dGVuc2lvbnMKKyAgICBnbFRleEltYWdlM0RPRVMgICAgICAgICAgICAgICAgIEAx
NDMKKyAgICBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFICAgICAgICAgIEAxNDkKKyAgICBnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFIEAxNTAKKyAgICBnbERlbGV0ZUZlbmNlc05W
ICAgICAgICAgICAgICAgIEAxNTEKKyAgICBnbEZpbmlzaEZlbmNlTlYgICAgICAgICAgICAgICAg
IEAxNTIKKyAgICBnbEdlbkZlbmNlc05WICAgICAgICAgICAgICAgICAgIEAxNTMKKyAgICBnbEdl
dEZlbmNlaXZOViAgICAgICAgICAgICAgICAgIEAxNTQKKyAgICBnbElzRmVuY2VOViAgICAgICAg
ICAgICAgICAgICAgIEAxNTUKKyAgICBnbFNldEZlbmNlTlYgICAgICAgICAgICAgICAgICAgIEAx
NTYKKyAgICBnbFRlc3RGZW5jZU5WICAgICAgICAgICAgICAgICAgIEAxNTcKKyAgICBnbEdldFRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSBAMTU5CisgICAgZ2xUZXhTdG9yYWdlMkRFWFQgICAg
ICAgICAgICAgICBAMTYwCisgICAgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUICAgICBAMTYx
CisgICAgZ2xSZWFkblBpeGVsc0VYVCAgICAgICAgICAgICAgICBAMTYyCisgICAgZ2xHZXRuVW5p
Zm9ybWZ2RVhUICAgICAgICAgICAgICBAMTYzCisgICAgZ2xHZXRuVW5pZm9ybWl2RVhUICAgICAg
ICAgICAgICBAMTY0CisgICAgZ2xHZW5RdWVyaWVzRVhUICAgICAgICAgICAgICAgICBAMTY1Cisg
ICAgZ2xEZWxldGVRdWVyaWVzRVhUICAgICAgICAgICAgICBAMTY2CisgICAgZ2xJc1F1ZXJ5RVhU
ICAgICAgICAgICAgICAgICAgICBAMTY3CisgICAgZ2xCZWdpblF1ZXJ5RVhUICAgICAgICAgICAg
ICAgICBAMTY4CisgICAgZ2xFbmRRdWVyeUVYVCAgICAgICAgICAgICAgICAgICBAMTY5CisgICAg
Z2xHZXRRdWVyeWl2RVhUICAgICAgICAgICAgICAgICBAMTcwCisgICAgZ2xHZXRRdWVyeU9iamVj
dHVpdkVYVCAgICAgICAgICBAMTcxCisgICAgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUgICAg
ICBAMTcyCisgICAgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUgICAgICBAMTczCisgICAgZ2xE
cmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSAgICBAMTc0CisgICAgZ2xQcm9ncmFtQmluYXJ5T0VT
ICAgICAgICAgICAgICBAMTc1CisgICAgZ2xHZXRQcm9ncmFtQmluYXJ5T0VTICAgICAgICAgICBA
MTc2CisKKyAgICA7IEVHTCBkZXBlbmRlbmNpZXMKKyAgICBnbENyZWF0ZUNvbnRleHQgICAgICAg
ICAgICAgICAgIEAxNDQgTk9OQU1FCisgICAgZ2xEZXN0cm95Q29udGV4dCAgICAgICAgICAgICAg
ICBAMTQ1IE5PTkFNRQorICAgIGdsTWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICAgQDE0NiBO
T05BTUUKKyAgICBnbEdldEN1cnJlbnRDb250ZXh0ICAgICAgICAgICAgIEAxNDcgTk9OQU1FCisg
ICAgZ2xHZXRQcm9jQWRkcmVzcyAgICAgICAgICAgICAgICBAMTQ4IE5PTkFNRQorICAgIGdsQmlu
ZFRleEltYWdlICAgICAgICAgICAgICAgICAgQDE1OCBOT05BTUUKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDIgQEAKKy8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCBy
ZXNvdXJjZSBzY3JpcHQuCisvLworI2luY2x1ZGUgInJlc291cmNlLmgiCisKKyNkZWZpbmUgQVBT
VFVESU9fUkVBRE9OTFlfU1lNQk9MUworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZW5l
cmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KKy8vCisjaW5jbHVkZSA8d2lu
ZG93cy5oPgorI2luY2x1ZGUgIi4uL2NvbW1vbi92ZXJzaW9uLmgiCisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisjdW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCisKKyNpZiAhZGVmaW5lZChBRlhf
UkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkKKyNpZmRlZiBfV0lOMzIKK0xB
TkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VTCisjcHJhZ21hIGNvZGVfcGFn
ZSgxMjUyKQorI2VuZGlmIC8vX1dJTjMyCisKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRFWFRJTkNMVURFCisvLworCisxIFRFWFRJTkNMVURF
IAorQkVHSU4KKyAgICAicmVzb3VyY2UuaFwwIgorRU5ECisKKzIgVEVYVElOQ0xVREUgCitCRUdJ
TgorICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIgorICAgICIjaW5jbHVkZSAiIi4uL2Nv
bW1vbi92ZXJzaW9uLmgiIlwwIgorRU5ECisKKzMgVEVYVElOQ0xVREUgCitCRUdJTgorICAgICJc
clxuIgorICAgICJcMCIKK0VORAorCisjZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAorCisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVmVyc2lvbgorLy8KKworVlNfVkVSU0lPTl9J
TkZPIFZFUlNJT05JTkZPCisgRklMRVZFUlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9O
LEJVSUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04KKyBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJT
SU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTgorIEZJTEVGTEFH
U01BU0sgMHgxN0wKKyNpZmRlZiBfREVCVUcKKyBGSUxFRkxBR1MgMHgxTAorI2Vsc2UKKyBGSUxF
RkxBR1MgMHgwTAorI2VuZGlmCisgRklMRU9TIDB4NEwKKyBGSUxFVFlQRSAweDJMCisgRklMRVNV
QlRZUEUgMHgwTAorQkVHSU4KKyAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgICAgQkVHSU4K
KyAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIgorICAgICAgICBCRUdJTgorICAgICAgICAgICAgVkFM
VUUgIkZpbGVEZXNjcmlwdGlvbiIsICJBTkdMRSBsaWJHTEVTdjIgRHluYW1pYyBMaW5rIExpYnJh
cnkiCisgICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORworICAg
ICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJHTEVTdjIiCisgICAgICAgICAgICBW
QUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIgor
ICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliR0xFU3YyLmRsbCIKKyAg
ICAgICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORworICAgICAgICAg
ICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGli
cmFyeSIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5H
CisgICAgICAgIEVORAorICAgIEVORAorICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgICBCRUdJ
TgorICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMAorICAgIEVORAorRU5E
CisKKyNlbmRpZiAgICAvLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKKworCisjaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLworLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCisv
LworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lO
Vk9LRUQKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLnJjCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMj
IC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
bWFpbi5jcHA6IERMTCBlbnRyeSBwb2ludCBhbmQgbWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwg
ZGF0YS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAibGli
RUdML1N1cmZhY2UuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorCitz
dGF0aWMgRFdPUkQgY3VycmVudFRMUyA9IFRMU19PVVRfT0ZfSU5ERVhFUzsKKworZXh0ZXJuICJD
IiBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBM
UFZPSUQgcmVzZXJ2ZWQpCit7CisgICAgc3dpdGNoIChyZWFzb24pCisgICAgeworICAgICAgY2Fz
ZSBETExfUFJPQ0VTU19BVFRBQ0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJlbnRUTFMg
PSBUbHNBbGxvYygpOworCisgICAgICAgICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09G
X0lOREVYRVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5p
dGlhbGl6ZSBpbmRleAorICAgICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2w6OkN1cnJlbnQgKmN1cnJlbnQgPSAoZ2w6OkN1cnJlbnQqKUxvY2FsQWxs
b2MoTFBUUiwgc2l6ZW9mKGdsOjpDdXJyZW50KSk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMs
IGN1cnJlbnQpOworCisgICAgICAgICAgICAgICAgY3VycmVudC0+Y29udGV4dCA9IE5VTEw7Cisg
ICAgICAgICAgICAgICAgY3VycmVudC0+ZGlzcGxheSA9IE5VTEw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgor
ICAgICAgICB7CisgICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVu
dFRMUyk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50
VExTKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJV
RTsKK30KKworbmFtZXNwYWNlIGdsCit7Cit2b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRl
eHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAg
IEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisK
KyAgICBjdXJyZW50LT5jb250ZXh0ID0gY29udGV4dDsKKyAgICBjdXJyZW50LT5kaXNwbGF5ID0g
ZGlzcGxheTsKKworICAgIGlmIChjb250ZXh0ICYmIGRpc3BsYXkgJiYgc3VyZmFjZSkKKyAgICB7
CisgICAgICAgIGNvbnRleHQtPm1ha2VDdXJyZW50KGRpc3BsYXksIHN1cmZhY2UpOworICAgIH0K
K30KKworQ29udGV4dCAqZ2V0Q29udGV4dCgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChD
dXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5j
b250ZXh0OworfQorCitDb250ZXh0ICpnZXROb25Mb3N0Q29udGV4dCgpCit7CisgICAgQ29udGV4
dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICAKKyAgICBpZiAoY29udGV4dCkKKyAgICB7
CisgICAgICAgIGlmIChjb250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Y29udGV4dDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworZWdsOjpE
aXNwbGF5ICpnZXREaXNwbGF5KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQq
KVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmRpc3BsYXk7
Cit9CisKK0lEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpCit7CisgICAgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworCisgICAgcmV0dXJuIGRpc3BsYXktPmdldERldmlj
ZSgpOworfQorCitib29sIGNoZWNrRGV2aWNlTG9zdChIUkVTVUxUIGVycm9yQ29kZSkKK3sKKyAg
ICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOworCisgICAgaWYgKGlzRGV2aWNlTG9zdEVy
cm9yKGVycm9yQ29kZSkpCisgICAgeworICAgICAgICBkaXNwbGF5ID0gZ2w6OmdldERpc3BsYXko
KTsKKyAgICAgICAgZGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorfQorCisvLyBSZWNvcmRzIGFuIGVy
cm9yIGNvZGUKK3ZvaWQgZXJyb3IoR0xlbnVtIGVycm9yQ29kZSkKK3sKKyAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsR2V0Q3VycmVudENvbnRleHQoKTsKKworICAgIGlmIChjb250ZXh0KQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChlcnJvckNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX0lOVkFMSURfRU5VTToKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRF
bnVtKCk7CisgICAgICAgICAgICBUUkFDRSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBl
bnVtXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9W
QUxVRToKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRWYWx1ZSgpOworICAgICAg
ICAgICAgVFJBQ0UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgdmFsdWVcbiIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRPcGVyYXRpb24oKTsKKyAgICAgICAgICAg
IFRSQUNFKCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIG9wZXJhdGlvblxuIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX09VVF9PRl9NRU1PUlk6CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvcmRPdXRPZk1lbW9yeSgpOworICAgICAgICAgICAgVFJBQ0UoIlx0
ISBFcnJvciBnZW5lcmF0ZWQ6IG91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOworICAg
ICAgICAgICAgVFJBQ0UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgZnJhbWVidWZmZXIg
b3BlcmF0aW9uXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9tYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9tYWluLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL21haW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBtYWluLmg6IE1hbmFnZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEu
CisKKyNpZm5kZWYgTElCR0xFU1YyX01BSU5fSF8KKyNkZWZpbmUgTElCR0xFU1YyX01BSU5fSF8K
KworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8
R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJs
aWJFR0wvRGlzcGxheS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFt
ZXNwYWNlIGdsCit7CitzdHJ1Y3QgQ3VycmVudAoreworICAgIENvbnRleHQgKmNvbnRleHQ7Cisg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5OworfTsKKwordm9pZCBtYWtlQ3VycmVudChDb250ZXh0
ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7
CisKK0NvbnRleHQgKmdldENvbnRleHQoKTsKK0NvbnRleHQgKmdldE5vbkxvc3RDb250ZXh0KCk7
CitlZ2w6OkRpc3BsYXkgKmdldERpc3BsYXkoKTsKKworSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2
aWNlKCk7CisKK2Jvb2wgY2hlY2tEZXZpY2VMb3N0KEhSRVNVTFQgZXJyb3JDb2RlKTsKK30KKwor
dm9pZCBlcnJvcihHTGVudW0gZXJyb3JDb2RlKTsKKwordGVtcGxhdGU8Y2xhc3MgVD4KK2NvbnN0
IFQgJmVycm9yKEdMZW51bSBlcnJvckNvZGUsIGNvbnN0IFQgJnJldHVyblZhbHVlKQoreworICAg
IGVycm9yKGVycm9yQ29kZSk7CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKKyNlbmRp
ZiAgIC8vIExJQkdMRVNWMl9NQUlOX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21h
dGh1dGlsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL21hdGh1dGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIG1hdGh1dGlsLmg6IE1hdGggYW5kIGJpdCBtYW5pcHVsYXRpb24g
ZnVuY3Rpb25zLgorCisjaWZuZGVmIExJQkdMRVNWMl9NQVRIVVRJTF9IXworI2RlZmluZSBMSUJH
TEVTVjJfTUFUSFVUSUxfSF8KKworI2luY2x1ZGUgPGludHJpbi5oPgorI2luY2x1ZGUgPG1hdGgu
aD4KKworI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW0uaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1
Y3QgVmVjdG9yNAoreworICAgIFZlY3RvcjQoKSB7fQorICAgIFZlY3RvcjQoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeiwgZmxvYXQgdykgOiB4KHgpLCB5KHkpLCB6KHopLCB3KHcpIHt9CisKKyAg
ICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisgICAgZmxvYXQgejsKKyAgICBmbG9hdCB3OworfTsK
KworaW5saW5lIGJvb2wgaXNQb3cyKGludCB4KQoreworICAgIHJldHVybiAoeCAmICh4IC0gMSkp
ID09IDAgJiYgKHggIT0gMCk7Cit9CisKK2lubGluZSBpbnQgbG9nMihpbnQgeCkKK3sKKyAgICBp
bnQgciA9IDA7CisgICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOworICAgIHJldHVybiByOwor
fQorCitpbmxpbmUgdW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQoreworICAg
IGlmICh4ICE9IDApIHgtLTsKKyAgICB4IHw9IHggPj4gMTsKKyAgICB4IHw9IHggPj4gMjsKKyAg
ICB4IHw9IHggPj4gNDsKKyAgICB4IHw9IHggPj4gODsKKyAgICB4IHw9IHggPj4gMTY7CisgICAg
eCsrOworCisgICAgcmV0dXJuIHg7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IE1JTiwgdHlwZW5hbWUgTUFYPgoraW5saW5lIFQgY2xhbXAoVCB4LCBNSU4gbWluLCBNQVggbWF4
KQoreworICAgIHJldHVybiB4IDwgbWluID8gbWluIDogKHggPiBtYXggPyBtYXggOiB4KTsKK30K
KworaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxvYXQgeCkKK3sKKyAgICByZXR1cm4gY2xhbXAoeCwg
MC4wZiwgMS4wZik7Cit9CisKK3RlbXBsYXRlPGNvbnN0IGludCBuPgoraW5saW5lIHVuc2lnbmVk
IGludCB1bm9ybShmbG9hdCB4KQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXggPSAweEZG
RkZGRkZGID4+ICgzMiAtIG4pOworCisgICAgaWYgKHggPiAxKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1heDsKKyAgICB9CisgICAgZWxzZSBpZiAoeCA8IDApCisgICAgeworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBp
bnQpKG1heCAqIHggKyAwLjVmKTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIHN1cHBvcnRzU1NF
MigpCit7CisgICAgc3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzID0gZmFsc2U7CisKKyAgICBpZiAoY2hlY2tlZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdXBwb3J0czsKKyAgICB9CisKKyAgICBpbnQgaW5mb1s0XTsKKyAgICBfX2NwdWlkKGlu
Zm8sIDApOworICAgIAorICAgIGlmIChpbmZvWzBdID49IDEpCisgICAgeworICAgICAgICBfX2Nw
dWlkKGluZm8sIDEpOworCisgICAgICAgIHN1cHBvcnRzID0gKGluZm9bM10gPj4gMjYpICYgMTsK
KyAgICB9CisKKyAgICBjaGVja2VkID0gdHJ1ZTsKKworICAgIHJldHVybiBzdXBwb3J0czsKK30K
KworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0MTYoZmxvYXQgZnAzMikKK3sK
KyAgICB1bnNpZ25lZCBpbnQgZnAzMmkgPSAodW5zaWduZWQgaW50JilmcDMyOworICAgIHVuc2ln
bmVkIGludCBzaWduID0gKGZwMzJpICYgMHg4MDAwMDAwMCkgPj4gMTY7CisgICAgdW5zaWduZWQg
aW50IGFicyA9IGZwMzJpICYgMHg3RkZGRkZGRjsKKworICAgIGlmKGFicyA+IDB4NDdGRkVGRkYp
ICAgLy8gSW5maW5pdHkKKyAgICB7CisgICAgICAgIHJldHVybiBzaWduIHwgMHg3RkZGOworICAg
IH0KKyAgICBlbHNlIGlmKGFicyA8IDB4Mzg4MDAwMDApICAgLy8gRGVub3JtYWwKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBtYW50aXNzYSA9IChhYnMgJiAweDAwN0ZGRkZGKSB8IDB4MDA4
MDAwMDA7ICAgCisgICAgICAgIGludCBlID0gMTEzIC0gKGFicyA+PiAyMyk7CisKKyAgICAgICAg
aWYoZSA8IDI0KQorICAgICAgICB7CisgICAgICAgICAgICBhYnMgPSBtYW50aXNzYSA+PiBlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYWJzID0gMDsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyArIDB4MDAwMDBGRkYgKyAo
KGFicyA+PiAxMykgJiAxKSkgPj4gMTM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBzaWduIHwgKGFicyArIDB4QzgwMDAwMDAgKyAweDAwMDAwRkZGICsgKChhYnMgPj4g
MTMpICYgMSkpID4+IDEzOworICAgIH0KK30KKworZmxvYXQgZmxvYXQxNlRvRmxvYXQzMih1bnNp
Z25lZCBzaG9ydCBoKTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFUSFVUSUxfSF8K
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbWF0aHV0aWwuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsx
ICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorLy97e05PX0RFUEVOREVOQ0lFU319CisvLyBN
aWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgorLy8gVXNlZCBieSBs
aWJHTEVTdjIucmMKKworLy8gTmV4dCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMKKy8v
IAorI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKKyNpZm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lN
Qk9MUworI2RlZmluZSBfQVBTX05FWFRfUkVTT1VSQ0VfVkFMVUUgICAgICAgIDEwMQorI2RlZmlu
ZSBfQVBTX05FWFRfQ09NTUFORF9WQUxVRSAgICAgICAgIDQwMDAxCisjZGVmaW5lIF9BUFNfTkVY
VF9DT05UUk9MX1ZBTFVFICAgICAgICAgMTAwMQorI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFM
VUUgICAgICAgICAgIDEwMQorI2VuZGlmCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVzb3VyY2UuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMjE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGlsaXRpZXMuY3BwOiBD
b252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2luY2x1
ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRl
IDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tbW9u
L3N5c3RlbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworCisvLyBUaGlzIGlzIGhvdyBt
dWNoIGRhdGEgdGhlIGFwcGxpY2F0aW9uIGV4cGVjdHMgZm9yIGEgdW5pZm9ybQoraW50IFVuaWZv
cm1FeHRlcm5hbENvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdM
X1NBTVBMRVJfQ1VCRToKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfQk9PTF9W
RUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoK
KyAgICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgICAgICByZXR1
cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0
OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAg
ICAgICAgICByZXR1cm4gNDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgICBy
ZXR1cm4gOTsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgICByZXR1cm4gMTY7
CisgICAgICBkZWZhdWx0OgorICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAg
cmV0dXJuIDA7Cit9CisKKy8vIFRoaXMgaXMgaG93IG11Y2ggZGF0YSB3ZSBhY3R1YWxseSBzdG9y
ZSBmb3IgYSB1bmlmb3JtCitpbnQgVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQoR0xlbnVt
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9PTDoK
KyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX0JP
T0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICAgICAgcmV0dXJuIDI7Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICAg
ICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6
CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAg
ICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICAgIHJl
dHVybiA4OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgIHJldHVybiAxMjsK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgICByZXR1cm4gMTY7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK0dMZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2godHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0JP
T0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZF
QzQ6CisgICAgICAgICAgcmV0dXJuIEdMX0JPT0w7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICAgIHJl
dHVybiBHTF9GTE9BVDsKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVS
XzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9WRUMy
OgorICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAg
ICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9ORTsKK30KKworc2l6ZV90IFVuaWZvcm1D
b21wb25lbnRTaXplKEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfQk9PTDogIHJldHVybiBzaXplb2YoR0xpbnQpOworICAgICAgY2FzZSBHTF9G
TE9BVDogcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKKyAgICAgIGNhc2UgR0xfSU5UOiAgIHJldHVy
biBzaXplb2YoR0xpbnQpOworICAgICAgZGVmYXVsdDogICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xl
bnVtIHR5cGUpCit7CisgICAgcmV0dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZvcm1Db21w
b25lbnRUeXBlKHR5cGUpKSAqIFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHR5cGUpOwor
fQorCitzaXplX3QgVW5pZm9ybUV4dGVybmFsU2l6ZShHTGVudW0gdHlwZSkKK3sKKyAgICByZXR1
cm4gVW5pZm9ybUNvbXBvbmVudFNpemUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpICogVW5p
Zm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodHlwZSk7Cit9CisKK2ludCBWYXJpYWJsZVJvd0Nv
dW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNl
IEdMX05PTkU6CisgICAgICAgIHJldHVybiAwOworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAg
Y2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9CT09MX1ZF
QzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgor
ICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAg
IGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4g
MTsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0OgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBWYXJpYWJsZUNvbHVt
bkNvdW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBj
YXNlIEdMX05PTkU6CisgICAgICAgIHJldHVybiAwOworICAgICAgY2FzZSBHTF9CT09MOgorICAg
ICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICByZXR1cm4gMTsK
KyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAg
ICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAg
cmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
CisgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBBbGxvY2F0ZUZp
cnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpiaXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNp
emUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSkKK3sKKyAgICBBU1NFUlQoYWxsb2NhdGlvblNpemUg
PD0gYml0c1NpemUpOworCisgICAgdW5zaWduZWQgaW50IG1hc2sgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIGludD46Om1heCgpID4+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
IGludD46OmRpZ2l0cyAtIGFsbG9jYXRpb25TaXplKTsKKworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgYml0c1NpemUgLSBhbGxvY2F0aW9uU2l6ZSArIDE7IGkrKykKKyAgICB7Cisg
ICAgICAgIGlmICgoKmJpdHMgJiBtYXNrKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAq
Yml0cyB8PSBtYXNrOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKworICAgICAg
ICBtYXNrIDw8PSAxOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworR0xzaXplaSBDb21w
dXRlUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMaW50IGFsaWdu
bWVudCkKK3sKKyAgICBBU1NFUlQoYWxpZ25tZW50ID4gMCAmJiBpc1BvdzIoYWxpZ25tZW50KSk7
CisKKyAgICBHTHNpemVpIHJhd1BpdGNoID0gQ29tcHV0ZVBpeGVsU2l6ZShpbnRlcm5hbGZvcm1h
dCkgKiB3aWR0aDsKKyAgICByZXR1cm4gKHJhd1BpdGNoICsgYWxpZ25tZW50IC0gMSkgJiB+KGFs
aWdubWVudCAtIDEpOworfQorCitHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkUGl0Y2goR0xzaXpl
aSB3aWR0aCwgR0xlbnVtIGludGVybmFsZm9ybWF0KQoreworICAgIHJldHVybiBDb21wdXRlQ29t
cHJlc3NlZFNpemUod2lkdGgsIDEsIGludGVybmFsZm9ybWF0KTsKK30KKworR0xzaXplaSBDb21w
dXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgICAgIHJldHVybiA4ICogKCh3aWR0
aCArIDMpIC8gNCkgKiAoKGhlaWdodCArIDMpIC8gNCk7CisgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDVfQU5HTEU6CisgICAgICAgIHJldHVybiAxNiAqICgod2lkdGggKyAzKSAvIDQpICog
KChoZWlnaHQgKyAzKSAvIDQpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorfQorCitib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0KQoreworICAgIGlmKGZv
cm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8CisgICAgICAgZm9ybWF0
ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIHx8CisgICAgICAgZm9ybWF0ID09
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUgfHwKKyAgICAgICBmb3JtYXQgPT0g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpCit7CisgICAgaWYg
KGZvcm1hdCA9PSBHTF9ERVBUSF9DT01QT05FTlQgfHwKKyAgICAgICAgZm9ybWF0ID09IEdMX0RF
UFRIX1NURU5DSUxfT0VTIHx8CisgICAgICAgIGZvcm1hdCA9PSBHTF9ERVBUSF9DT01QT05FTlQx
NiB8fAorICAgICAgICBmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTIHx8CisgICAg
ICAgIGZvcm1hdCA9PSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUykKKyAgICB7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJc1N0ZW5j
aWxUZXh0dXJlKEdMZW51bSBmb3JtYXQpCit7CisgICAgaWYgKGZvcm1hdCA9PSBHTF9ERVBUSF9T
VEVOQ0lMX09FUyB8fAorICAgICAgICBmb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKy8vIFJldHVybnMgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiBhIHNpbmdsZSB0ZXhlbCBp
biBhbiBJbWFnZQoraW50IENvbXB1dGVQaXhlbFNpemUoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCit7
CisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FMUEhB
OF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIp
OworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDogICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNpemVvZih1bnNpZ25lZCBjaGFyKTsKKyAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzaXplb2YoZmxvYXQpOworICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0UzMkZfRVhUOiAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemVvZihmbG9hdCk7CisgICAg
ICBjYXNlIEdMX0FMUEhBMTZGX0VYVDogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAg
ICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U4X0FMUEhBOF9FWFQ6ICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBj
aGFyKSAqIDI7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6ICAgICAgICAg
ICByZXR1cm4gc2l6ZW9mKGZsb2F0KSAqIDI7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QTE2Rl9FWFQ6ICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDI7Cisg
ICAgICBjYXNlIEdMX1JHQjhfT0VTOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2l6
ZW9mKHVuc2lnbmVkIGNoYXIpICogMzsKKyAgICAgIGNhc2UgR0xfUkdCNTY1OiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAgY2Fz
ZSBHTF9SR0IzMkZfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemVvZihmbG9h
dCkgKiAzOworICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOiAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiAzOworICAgICAgY2FzZSBHTF9SR0JBOF9P
RVM6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAq
IDQ7CisgICAgICBjYXNlIEdMX1JHQkE0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGNhc2UgR0xfUkdCNV9BMTogICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAg
Y2FzZSBHTF9SR0JBMzJGX0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemVvZihm
bG9hdCkgKiA0OworICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDogICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA0OworICAgICAgY2FzZSBHTF9CR1JB
OF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFy
KSAqIDQ7CisgICAgICBjYXNlIEdMX0JHUkE0X0FOR0xFWDogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGNhc2UgR0xfQkdSNV9BMV9BTkdM
RVg6ICAgICAgICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7CisgICAgcmV0dXJu
ICh0YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYmIHRhcmdldCA8PSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opOworfQorCitib29sIElzSW50ZXJuYWxUZXh0
dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7CisgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKK30KKworR0xpbnQgQ29u
dmVydFNpemVkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCit7Cisg
ICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAg
c3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OiAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
ICAgICAgIHJldHVybiBHTF9BTFBIQTMyRl9FWFQ7CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZM
T0FUX09FUzogICByZXR1cm4gR0xfQUxQSEExNkZfRVhUOworICAgICAgICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgcmV0dXJuIEdMX0xVTUlO
QU5DRThfRVhUOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgcmV0dXJuIEdM
X0xVTUlOQU5DRTMyRl9FWFQ7CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzogICBy
ZXR1cm4gR0xfTFVNSU5BTkNFMTZGX0VYVDsKKyAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHJldHVybiBHTF9MVU1JTkFO
Q0U4X0FMUEhBOF9FWFQ7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgICByZXR1
cm4gR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDsKKyAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxP
QVRfT0VTOiAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOworICAgICAgICAgIGRl
ZmF1bHQ6ICAgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgICAgICAgICByZXR1
cm4gR0xfUkdCOF9PRVM7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTog
ICAgIHJldHVybiBHTF9SR0I1NjU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOworICAgICAgICAgIGNhc2UgR0xfSEFMRl9G
TE9BVF9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfUkdCMTZGX0VYVDsKKyAgICAgICAgICBkZWZh
dWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICBzd2l0Y2ggKHR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgICAgICAg
ICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzQ6ICAgcmV0dXJuIEdMX1JHQkE0OworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNV81XzVfMTogICByZXR1cm4gR0xfUkdCNV9BMTsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOworICAgICAgICAg
IGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfUkdCQTE2Rl9FWFQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg
ICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0JHUkE4X0VYVDsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRf
UkVWX0VYVDogICByZXR1cm4gR0xfQkdSQTRfQU5HTEVYOworICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOiAgIHJldHVybiBHTF9CR1I1X0ExX0FOR0xFWDsK
KyAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgorICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFOgorICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgor
ICAgICAgICByZXR1cm4gZm9ybWF0OworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Cisg
ICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6ICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM7CisgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOiAgICByZXR1cm4gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
R0xfTk9ORTsKK30KKworR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0
KQoreworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9S
R0I1NjU6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOworICAgICAgY2Fz
ZSBHTF9SR0JBNDogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsKKyAg
ICAgIGNhc2UgR0xfUkdCNV9BMTogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JH
QkE7CisgICAgICBjYXNlIEdMX1JHQjhfT0VTOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9SR0I7CisgICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHTF9SR0JBOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6ICAg
ICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFX0FMUEhBOworICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0U4X0VYVDogICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOworICAgICAgY2Fz
ZSBHTF9BTFBIQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQUxQSEE7Cisg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6ICAgIHJldHVybiBHTF9D
T01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOworICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDogICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQ7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6IHJldHVy
biBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOworICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOiByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9BTkdMRTsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6ICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX1JHQkE7CisgICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6ICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I7CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDog
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9BTFBIQTsKKyAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFMzJGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRTsKKyAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5D
RV9BTFBIQTsKKyAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6ICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdMX1JHQkE7CisgICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6ICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9SR0I7CisgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9BTFBIQTsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZG
X0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRTsKKyAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRV9BTFBI
QTsKKyAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0JHUkFfRVhUOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjogICAgICAgICAg
ICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOworICAgICAg
Y2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xfREVQVEhf
U1RFTkNJTF9PRVM7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9OT05FOyAgIC8vIFVuc3VwcG9ydGVkCisgICAgfQorfQorCitHTGVudW0g
RXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0I1NjU6ICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgICBjYXNlIEdMX1JH
QkE0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80OworICAgICAgY2FzZSBHTF9SR0I1X0ExOiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMTsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBj
YXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05F
RF9CWVRFOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6ICAgICAgICAgICBy
ZXR1cm4gR0xfVU5TSUdORURfQllURTsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6ICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0FM
UEhBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwor
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOiAgICByZXR1cm4gR0xf
VU5TSUdORURfQllURTsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQ6ICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDNfQU5HTEU6IHJldHVybiBHTF9VTlNJR05FRF9CWVRFOworICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOiByZXR1cm4gR0xfVU5TSUdORURf
QllURTsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6ICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZMT0FUOworICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOiAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJG
X0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0VfQUxQSEEzMkZfRVhUOiAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgICBjYXNl
IEdMX1JHQkExNkZfRVhUOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FU
X09FUzsKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0hBTEZfRkxPQVRfT0VTOworICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6ICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7CisgICAgICBjYXNlIEdMX0xV
TUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsK
KyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdM
X0hBTEZfRkxPQVRfT0VTOworICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UMTY6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUOworICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdO
RURfSU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICBy
ZXR1cm4gR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOworICAgICAgZGVmYXVsdDogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAor
ICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQp
Cit7CisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JH
QkE0OgorICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAg
ICBjYXNlIEdMX1JHQjhfT0VTOgorICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9JTkRFWDg6CisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTklNUExFTUVO
VEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElzRGVwdGhSZW5k
ZXJhYmxlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGludGVybmFsZm9y
bWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICBjYXNl
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9JTkRFWDg6CisgICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgY2FzZSBH
TF9SR0I1X0ExOgorICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICBjYXNlIEdMX1JHQjhfT0VT
OgorICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3Jt
YXQpCit7CisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfSU5ERVg4OgorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgY2FzZSBHTF9S
R0I1X0ExOgorICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICBjYXNlIEdMX1JHQjhfT0VTOgor
ICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTklNUExF
TUVOVEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElzRmxvYXQz
MkZvcm1hdChHTGludCBpbnRlcm5hbGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGludGVybmFsZm9y
bWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6CisgICAgICBjYXNlIEdMX1JH
QjMyRl9FWFQ6CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitib29sIElzRmxvYXQxNkZvcm1hdChHTGludCBpbnRlcm5hbGZvcm1hdCkK
K3sKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdC
QTE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX0FMUEhB
MTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9CisKK25hbWVzcGFjZSBl
czJkeAoreworCitEM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29u
KQoreworICAgIEQzRENNUEZVTkMgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7CisgICAgc3dpdGNo
IChjb21wYXJpc29uKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVWRVI6ICAgIGQzZENvbXAgPSBE
M0RDTVBfTkVWRVI7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUxXQVlTOiAgIGQzZENv
bXAgPSBEM0RDTVBfQUxXQVlTOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTEVTUzogICAg
IGQzZENvbXAgPSBEM0RDTVBfTEVTUzsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTEVR
VUFMOiAgIGQzZENvbXAgPSBEM0RDTVBfTEVTU0VRVUFMOyAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfRVFVQUw6ICAgIGQzZENvbXAgPSBEM0RDTVBfRVFVQUw7ICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfR1JFQVRFUjogIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUjsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfR0VRVUFMOiAgIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUkVRVUFMOyBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTk9URVFVQUw6IGQzZENvbXAgPSBEM0RDTVBfTk9URVFVQUw7
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAg
cmV0dXJuIGQzZENvbXA7Cit9CisKK0QzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29s
b3IpCit7CisgICAgcmV0dXJuIEQzRENPTE9SX1JHQkEoZ2w6OnVub3JtPDg+KGNvbG9yLnJlZCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmdyZWVuKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYmx1ZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmFscGhhKSk7Cit9CisKK0QzREJM
RU5EIENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKQoreworICAgIEQzREJMRU5EIGQzZEJs
ZW5kID0gRDNEQkxFTkRfWkVSTzsKKworICAgIHN3aXRjaCAoYmxlbmQpCisgICAgeworICAgICAg
Y2FzZSBHTF9aRVJPOiAgICAgICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfWkVS
TzsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAgICAgICAg
ICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfT05FOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9TUkNfQ09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQ09M
T1I7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOiAgICAg
IGQzZEJsZW5kID0gRDNEQkxFTkRfSU5WU1JDQ09MT1I7ICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9EU1RfQ09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVENPTE9S
OyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOiAgICAgIGQz
ZEJsZW5kID0gRDNEQkxFTkRfSU5WREVTVENPTE9SOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9T
UkNfQUxQSEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEE7ICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOiAgICAgIGQzZEJs
ZW5kID0gRDNEQkxFTkRfSU5WU1JDQUxQSEE7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9EU1Rf
QUxQSEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVEFMUEhBOyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOiAgICAgIGQzZEJsZW5k
ID0gRDNEQkxFTkRfSU5WREVTVEFMUEhBOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT05TVEFO
VF9DT0xPUjogICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6IGQzZEJsZW5kID0g
RDNEQkxFTkRfSU5WQkxFTkRGQUNUT1I7IGJyZWFrOworICAgICAgY2FzZSBHTF9DT05TVEFOVF9B
TFBIQTogICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6IGQzZEJsZW5kID0gRDNE
QkxFTkRfSU5WQkxFTkRGQUNUT1I7IGJyZWFrOworICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FU
VVJBVEU6ICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEFTQVQ7ICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkQmxl
bmQ7Cit9CisKK0QzREJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5kT3ApCit7Cisg
ICAgRDNEQkxFTkRPUCBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7CisKKyAgICBzd2l0Y2gg
KGJsZW5kT3ApCisgICAgeworICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQz
ZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
RlVOQ19TVUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRP
cCA9IEQzREJMRU5ET1BfUkVWU1VCVFJBQ1Q7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkQmxlbmRPcDsKK30KKworRDNEU1RFTkNJ
TE9QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCkKK3sKKyAgICBEM0RTVEVOQ0lM
T1AgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7CisKKyAgICBzd2l0Y2ggKHN0ZW5j
aWxPcCkKKyAgICB7CisgICAgICBjYXNlIEdMX1pFUk86ICAgICAgZDNkU3RlbmNpbE9wID0gRDNE
U1RFTkNJTE9QX1pFUk87ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9LRUVQOiAgICAgIGQzZFN0
ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVQ
TEFDRTogICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfUkVQTEFDRTsgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0lOQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1JTQVQ7
IGJyZWFrOworICAgICAgY2FzZSBHTF9ERUNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5D
SUxPUF9ERUNSU0FUOyBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5WRVJUOiAgICBkM2RTdGVuY2ls
T3AgPSBEM0RTVEVOQ0lMT1BfSU5WRVJUOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOQ1JfV1JB
UDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1I7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9ERUNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9ERUNSOyAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQz
ZFN0ZW5jaWxPcDsKK30KKworRDNEVEVYVFVSRUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdM
ZW51bSB3cmFwKQoreworICAgIEQzRFRFWFRVUkVBRERSRVNTIGQzZFdyYXAgPSBEM0RUQUREUkVT
U19XUkFQOworCisgICAgc3dpdGNoICh3cmFwKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkVQRUFU
OiAgICAgICAgICAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19XUkFQOyAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9DTEFNUF9UT19FREdFOiAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX0NMQU1QOyAg
YnJlYWs7CisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogICBkM2RXcmFwID0gRDNEVEFE
RFJFU1NfTUlSUk9SOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
fQorCisgICAgcmV0dXJuIGQzZFdyYXA7Cit9CisKK0QzRENVTEwgQ29udmVydEN1bGxNb2RlKEdM
ZW51bSBjdWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSkKK3sKKyAgICBEM0RDVUxMIGN1bGwgPSBE
M0RDVUxMX0NDVzsKKyAgICBzd2l0Y2ggKGN1bGxGYWNlKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
RlJPTlQ6CisgICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ1cg
OiBEM0RDVUxMX0NDVyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CQUNLOgorICAg
ICAgICBjdWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RDVUxMX0NDVyA6IEQzRENVTExf
Q1cpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6CisgICAg
ICAgIGN1bGwgPSBEM0RDVUxMX05PTkU7IC8vIGN1bGxpbmcgd2lsbCBiZSBoYW5kbGVkIGR1cmlu
ZyBkcmF3CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gY3VsbDsKK30KKworRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3Vi
ZUZhY2UoR0xlbnVtIGN1YmVGYWNlKQoreworICAgIEQzRENVQkVNQVBfRkFDRVMgZmFjZSA9IEQz
RENVQkVNQVBfRkFDRV9QT1NJVElWRV9YOworCisgICAgc3dpdGNoIChjdWJlRmFjZSkKKyAgICB7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgZmFj
ZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9YOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICBmYWNlID0gRDNEQ1VC
RU1BUF9GQUNFX05FR0FUSVZFX1g7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0Vf
UE9TSVRJVkVfWTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9Z
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgorICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1o7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAg
ICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBmYWNlOwor
fQorCitEV09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJs
dWUsIGJvb2wgYWxwaGEpCit7CisgICAgcmV0dXJuIChyZWQgICA/IEQzRENPTE9SV1JJVEVFTkFC
TEVfUkVEICAgOiAwKSB8CisgICAgICAgICAgIChncmVlbiA/IEQzRENPTE9SV1JJVEVFTkFCTEVf
R1JFRU4gOiAwKSB8CisgICAgICAgICAgIChibHVlICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxV
RSAgOiAwKSB8CisgICAgICAgICAgIChhbHBoYSA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEg
OiAwKTsKK30KKworRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVudW0g
bWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQoreworICAgIGlmIChtYXhBbmlzb3Ryb3B5
ID4gMS4wZikKKyAgICB7CisgICAgICAgIHJldHVybiBEM0RURVhGX0FOSVNPVFJPUElDOworICAg
IH0KKworICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZfUE9J
TlQ7CisgICAgc3dpdGNoIChtYWdGaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNU
OiBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJ
TkVBUjogIGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZfTElORUFSOyBicmVhazsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZE1hZ0ZpbHRlcjsKK30K
Kwordm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxU
RVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0ZXIs
IGZsb2F0IG1heEFuaXNvdHJvcHkpCit7CisgICAgc3dpdGNoIChtaW5GaWx0ZXIpCisgICAgewor
ICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9Q
T0lOVDsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRF
WEZfTElORUFSOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKKyAgICAgICAg
KmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBE
M0RURVhGX1BPSU5UOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1B
UF9ORUFSRVNUOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAg
ICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgorICAgICAgICAqZDNkTWluRmlsdGVyID0g
RDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTElORUFSOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6CisgICAg
ICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRl
ciA9IEQzRFRFWEZfTElORUFSOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlwRmlsdGVy
ID0gRDNEVEVYRl9OT05FOworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlm
IChtYXhBbmlzb3Ryb3B5ID4gMS4wZikKKyAgICB7CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBE
M0RURVhGX0FOSVNPVFJPUElDOworICAgIH0KK30KKworYm9vbCBDb252ZXJ0UHJpbWl0aXZlVHlw
ZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZUEUgKmQzZFByaW1pdGl2ZVR5cGUsIGludCAq
ZDNkUHJpbWl0aXZlQ291bnQpCit7CisgICAgc3dpdGNoIChwcmltaXRpdmVUeXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfUE9JTlRTOgorICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBU
X1BPSU5UTElTVDsKKyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50Owor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORVM6CisgICAgICAgICpkM2RQcmltaXRp
dmVUeXBlID0gRDNEUFRfTElORUxJU1Q7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVs
ZW1lbnRDb3VudCAvIDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6
CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOworICAgICAgICAq
ZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQgLSAxOyAgIC8vIEQzRCBkb2Vzbid0IHN1
cHBvcnQgbGluZSBsb29wcywgc28gd2UgZHJhdyB0aGUgbGFzdCBsaW5lIHNlcGFyYXRlbHkKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6CisgICAgICAgICpkM2RQcmlt
aXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQg
PSBlbGVtZW50Q291bnQgLSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJJQU5H
TEVTOgorICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFTElTVDsKKyAg
ICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC8gMzsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgorICAgICAgICAqZDNkUHJpbWl0aXZl
VHlwZSA9IEQzRFBUX1RSSUFOR0xFU1RSSVA7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9
IGVsZW1lbnRDb3VudCAtIDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9UUklBTkdM
RV9GQU46CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVGQU47Cisg
ICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3VudCAtIDI7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitEM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChH
TGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKKyAgICAgIGNhc2Ug
R0xfUkdCQTQ6CisgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICBjYXNlIEdMX1JHQkE4X09F
UzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgICAgY2FzZSBHTF9SR0I1
NjU6ICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7CisgICAgICBjYXNlIEdMX1JH
QjhfT0VTOiAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4OworICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6ICAgICAg
IAorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogcmV0dXJuIEQzREZNVF9EMjRT
ODsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVybiBEM0RGTVRfQThS
OEc4Qjg7CisgICAgfQorfQorCitEM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlw
ZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcykKK3sKKyAgICBpZiAoc2FtcGxlcyA8PSAxKQor
ICAgICAgICByZXR1cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKKyAgICBlbHNlCisgICAgICAgIHJl
dHVybiAoRDNETVVMVElTQU1QTEVfVFlQRSlzYW1wbGVzOworfQorCit9CisKK25hbWVzcGFjZSBk
eDJlcworeworCit1bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxG
b3JtYXQpCit7CisgICAgaWYgKHN0ZW5jaWxGb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgewor
ICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgc3dpdGNoKHN0ZW5jaWxGb3JtYXQpCisgICAg
eworICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgorICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6Cisg
ICAgICAgIHJldHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgICBjYXNlIEQzREZNVF9EMTVTMToKKyAgICAgICAgcmV0dXJuIDE7CisgICAg
ICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6CisgICAgICBjYXNlIEQzREZNVF9EMzI6CisgICAg
ICBjYXNlIEQzREZNVF9EMjRYODoKKyAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6Cisg
ICAgICBjYXNlIEQzREZNVF9EMTY6CisgICAgICAgIHJldHVybiAwOworICAgIC8vY2FzZSBEM0RG
TVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8gRGlyZWN0WCA5RXggb25seQorICAgIC8v
Y2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDg7ICAgLy8gRGlyZWN0WCA5RXggb25s
eQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25l
ZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKK3sKKyAgICBzd2l0Y2gg
KGNvbG9yRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Cisg
ICAgICAgIHJldHVybiAxNjsKKyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6CisgICAg
ICAgIHJldHVybiAzMjsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAgICBy
ZXR1cm4gMjsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICByZXR1cm4gODsK
KyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
dW5zaWduZWQgaW50IEdldFJlZFNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3
aXRjaCAoY29sb3JGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2
RjoKKyAgICAgICAgcmV0dXJuIDE2OworICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoK
KyAgICAgICAgcmV0dXJuIDMyOworICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAg
ICAgIHJldHVybiAxMDsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6CisgICAgICAgIHJldHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfQTFS
NUc1QjU6CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgIHJldHVybiA1OworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQg
R2V0R3JlZW5TaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGNvbG9y
Rm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6CisgICAgICAg
IHJldHVybiAxNjsKKyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgIHJl
dHVybiAzMjsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAgICByZXR1cm4g
MTA7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhH
OEI4OgorICAgICAgICByZXR1cm4gODsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAg
ICAgICByZXR1cm4gNTsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgcmV0dXJu
IDY7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2ln
bmVkIGludCBHZXRCbHVlU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCit7CisgICAgc3dpdGNo
IChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgor
ICAgICAgICByZXR1cm4gMTY7CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAg
ICAgICByZXR1cm4gMzI7CisgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAg
cmV0dXJuIDEwOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICBjYXNlIEQzREZN
VF9YOFI4RzhCODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVC
NToKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBHZXRE
ZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KQoreworICAgIGlmIChkZXB0aEZvcm1hdCA9
PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiAyNDsKKyAgICB9CisgICAgc3dp
dGNoIChkZXB0aEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6
ICByZXR1cm4gMTY7CisgICAgICBjYXNlIEQzREZNVF9EMzI6ICAgICAgICAgICByZXR1cm4gMzI7
CisgICAgICBjYXNlIEQzREZNVF9EMTVTMTogICAgICAgICByZXR1cm4gMTU7CisgICAgICBjYXNl
IEQzREZNVF9EMjRTODogICAgICAgICByZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZNVF9EMjRY
ODogICAgICAgICByZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OiAgICAgICBy
ZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAgICByZXR1cm4gMTY7Cisg
ICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOiByZXR1cm4gMzI7CisgICAgICBjYXNlIEQz
REZNVF9EMjRGUzg6ICAgICAgICByZXR1cm4gMjQ7CisgICAgLy9jYXNlIEQzREZNVF9EMzJfTE9D
S0FCTEU6ICByZXR1cm4gMzI7ICAgLy8gRDNEOUV4IG9ubHkKKyAgICAvL2Nhc2UgRDNERk1UX1M4
X0xPQ0tBQkxFOiAgIHJldHVybiAwOyAgICAvLyBEM0Q5RXggb25seQorICAgICAgZGVmYXVsdDog
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHNpemVpIEdldFNhbXBs
ZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKK3sKKyAgICBp
ZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gdHlwZTsKK30KKworYm9vbCBJc0Zvcm1hdENoYW5u
ZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChkM2Rmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfTDg6CisgICAgICAg
IHJldHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRSk7CisgICAgICBjYXNlIEQzREZNVF9BOEw4
OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpOworICAgICAg
Y2FzZSBEM0RGTVRfRFhUMToKKyAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQgfHwgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQpOworICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKKyAgICAgICAgcmV0dXJuIChmb3Jt
YXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSk7CisgICAgICBjYXNlIEQz
REZNVF9EWFQ1OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQ1X0FOR0xFKTsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgY2Fz
ZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6
CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEgfHwgZm9ybWF0ID09IEdMX0JHUkFf
RVhUKTsKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICByZXR1cm4gKGZvcm1h
dCA9PSBHTF9SR0IpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKGQzZGZvcm1hdCA9PSBE
M0RGTVRfSU5UWiAmJiBnbDo6SXNEZXB0aFRleHR1cmUoZm9ybWF0KSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIENvbnZl
cnRSZWFkQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSAqZm9ybWF0LCBH
TGVudW0gKnR5cGUpCit7CisgICAgc3dpdGNoIChkM2Rmb3JtYXQpCisgICAgeworICAgICAgY2Fz
ZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgICp0eXBlID0gR0xfVU5TSUdORURfQllURTsKKyAg
ICAgICAgKmZvcm1hdCA9IEdMX0JHUkFfRVhUOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgorICAgICAgICAqdHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAg
ICAgICpmb3JtYXQgPSBHTF9SR0I7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRf
UjVHNkI1OgorICAgICAgICAqdHlwZSA9IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OworICAgICAg
ICAqZm9ybWF0ID0gR0xfUkdCOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0Ex
NkIxNkcxNlIxNkY6CisgICAgICAgICp0eXBlID0gR0xfSEFMRl9GTE9BVF9PRVM7CisgICAgICAg
ICpmb3JtYXQgPSBHTF9SR0JBOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0Ez
MkIzMkczMlIzMkY6CisgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CisgICAgICAgICpmb3JtYXQg
PSBHTF9SR0JBOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0Ogor
ICAgICAgICAqdHlwZSA9IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDsKKyAgICAg
ICAgKmZvcm1hdCA9IEdMX0JHUkFfRVhUOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNE
Rk1UX0ExUjVHNUI1OgorICAgICAgICAqdHlwZSA9IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVf
UkVWX0VYVDsKKyAgICAgICAgKmZvcm1hdCA9IEdMX0JHUkFfRVhUOworICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKKyAgICAgICAgKmZvcm1h
dCA9IEdMX05PTkU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0dMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0
KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0E0UjRH
NEI0OiByZXR1cm4gR0xfUkdCQTQ7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJu
IEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdC
NV9BMTsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xfUkdCNTY1OworICAg
ICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX1JHQkE0
OworfQorCitHTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0
KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1
cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgfQorICAgIHN3aXRjaCAoZm9ybWF0KQor
ICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg4Ogor
ICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisgICAgICBjYXNlIEQzREZNVF9E
MjRTODoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7Cit9CisKK30KKworbmFtZXNwYWNlIGR4Cit7CisKK2Jvb2wgSXND
b21wcmVzc2VkRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQoreworICAgIHN3aXRjaChz
dXJmYWNlRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDE6CisgICAgICBjYXNl
IEQzREZNVF9EWFQyOgorICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKKyAgICAgIGNhc2UgRDNERk1U
X0RYVDQ6CisgICAgICBjYXNlIEQzREZNVF9EWFQ1OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3NpemVfdCBD
b21wdXRlUm93U2l6ZShEM0RGT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpCit7Cisg
ICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiA0ICog
d2lkdGg7CisgICAgfQorICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNE
Rk1UX0w4OgorICAgICAgICAgIHJldHVybiAxICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9B
OEw4OgorICAgICAgICAgIHJldHVybiAyICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9YOFI4
RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICByZXR1cm4gNCAqIHdp
ZHRoOworICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgICAgcmV0dXJuIDgg
KiB3aWR0aDsKKyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgIHJldHVy
biAxNiAqIHdpZHRoOworICAgICAgY2FzZSBEM0RGTVRfRFhUMToKKyAgICAgICAgcmV0dXJuIDgg
KiAoKHdpZHRoICsgMykgLyA0KTsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDM6CisgICAgICBjYXNl
IEQzREZNVF9EWFQ1OgorICAgICAgICByZXR1cm4gMTYgKiAoKHdpZHRoICsgMykgLyA0KTsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKworfQorCitzdGQ6OnN0cmluZyBnZXRUZW1wUGF0aCgpCit7CisgICAgY2hhciBw
YXRoW01BWF9QQVRIXTsKKyAgICBEV09SRCBwYXRoTGVuID0gR2V0VGVtcFBhdGhBKHNpemVvZihw
YXRoKSAvIHNpemVvZihwYXRoWzBdKSwgcGF0aCk7CisgICAgaWYgKHBhdGhMZW4gPT0gMCkKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygp
OworICAgIH0KKworICAgIFVJTlQgdW5pcXVlID0gR2V0VGVtcEZpbGVOYW1lQShwYXRoLCAic2gi
LCAwLCBwYXRoKTsKKyAgICBpZiAodW5pcXVlID09IDApCisgICAgeworICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHBhdGg7Cit9CisKK3ZvaWQgd3JpdGVGaWxlKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0
IHZvaWQqIGNvbnRlbnQsIHNpemVfdCBzaXplKQoreworICAgIEZJTEUqIGZpbGUgPSBmb3Blbihw
YXRoLCAidyIpOworICAgIGlmICghZmlsZSkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmd3JpdGUoY29udGVudCwgc2l6ZW9mKGNo
YXIpLCBzaXplLCBmaWxlKTsKKyAgICBmY2xvc2UoZmlsZSk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGlsaXRpZXMuaDog
Q29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMuCisKKyNpZm5k
ZWYgTElCR0xFU1YyX1VUSUxJVElFU19ICisjZGVmaW5lIExJQkdMRVNWMl9VVElMSVRJRVNfSAor
CisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxH
TEVTMi9nbDJleHQuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisK
K2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdJ
JywnTicsJ1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfTlVMTCA9ICgoRDNERk9S
TUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKworbmFtZXNwYWNlIGdsCit7CisK
K3N0cnVjdCBDb2xvcjsKKworaW50IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KEdMZW51
bSB0eXBlKTsKK2ludCBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudChHTGVudW0gdHlwZSk7
CitHTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZv
cm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNpemUo
R0xlbnVtIHR5cGUpOworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOworaW50IFZh
cmlhYmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOworCitpbnQgQWxsb2NhdGVGaXJzdEZyZWVC
aXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNp
Z25lZCBpbnQgYml0c1NpemUpOworCitpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGludCBpbnRlcm5h
bGZvcm1hdCk7CitHTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0xpbnQgYWxpZ25tZW50KTsKK0dMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQ
aXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKK0dMc2l6ZWkgQ29tcHV0ZUNvbXBy
ZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsK
K2Jvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpOworYm9vbCBJc0RlcHRoVGV4dHVyZShH
TGVudW0gZm9ybWF0KTsKK2Jvb2wgSXNTdGVuY2lsVGV4dHVyZShHTGVudW0gZm9ybWF0KTsKK2Jv
b2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKK2Jvb2wgSXNJbnRlcm5h
bFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7CitHTGludCBDb252ZXJ0U2l6ZWRJbnRlcm5h
bEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7CitHTGVudW0gRXh0cmFjdEZvcm1h
dChHTGVudW0gaW50ZXJuYWxmb3JtYXQpOworR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRl
cm5hbGZvcm1hdCk7CisKK2Jvb2wgSXNDb2xvclJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9y
bWF0KTsKK2Jvb2wgSXNEZXB0aFJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKK2Jv
b2wgSXNTdGVuY2lsUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOworCitib29sIElz
RmxvYXQzMkZvcm1hdChHTGludCBpbnRlcm5hbGZvcm1hdCk7Citib29sIElzRmxvYXQxNkZvcm1h
dChHTGludCBpbnRlcm5hbGZvcm1hdCk7Cit9CisKK25hbWVzcGFjZSBlczJkeAoreworCitEM0RD
TVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsKK0QzRENPTE9SIENv
bnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpOworRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhH
TGVudW0gYmxlbmQpOworRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCk7
CitEM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsKK0QzRFRF
WFRVUkVBRERSRVNTIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCk7CitEM0RDVUxMIENv
bnZlcnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpOworRDNEQ1VC
RU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xlbnVtIGN1YmVGYWNlKTsKK0RXT1JEIENvbnZl
cnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7
CitEM0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIs
IGZsb2F0IG1heEFuaXNvdHJvcHkpOwordm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5G
aWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxU
RVJUWVBFICpkM2RNaXBGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOworYm9vbCBDb252ZXJ0
UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZUEUgKmQzZFByaW1pdGl2
ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpOworRDNERk9STUFUIENvbnZlcnRSZW5kZXJi
dWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7CitEM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRp
c2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7CisKK30KKworbmFtZXNwYWNl
IGR4MmVzCit7CisKK0dMdWludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsK
K0dMdWludCBHZXRSZWRTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7CitHTHVpbnQgR2V0R3Jl
ZW5TaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7CitHTHVpbnQgR2V0Qmx1ZVNpemUoRDNERk9S
TUFUIGNvbG9yRm9ybWF0KTsKK0dMdWludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9y
bWF0KTsKK0dMdWludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7CisK
K0dMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQ
RSB0eXBlKTsKKworYm9vbCBJc0Zvcm1hdENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rm
b3JtYXQsIEdMZW51bSBmb3JtYXQpOworYm9vbCBDb252ZXJ0UmVhZEJ1ZmZlckZvcm1hdChEM0RG
T1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gKmZvcm1hdCwgR0xlbnVtICp0eXBlKTsKK0dMZW51bSBD
b252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKK0dMZW51bSBDb252ZXJ0
RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOworCit9CisKK25hbWVzcGFjZSBk
eAoreworYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7CitzaXplX3Qg
Q29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHdpZHRoKTsKK30K
Kworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKTsKK3ZvaWQgd3JpdGVGaWxlKGNvbnN0IGNoYXIq
IHBhdGgsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworaW5saW5lIGJvb2wgaXNE
ZXZpY2VMb3N0RXJyb3IoSFJFU1VMVCBlcnJvckNvZGUpCit7CisgICAgc3dpdGNoIChlcnJvckNv
ZGUpCisgICAgeworICAgICAgY2FzZSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUjoKKyAgICAg
IGNhc2UgRDNERVJSX0RFVklDRUxPU1Q6CisgICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgor
ICAgICAgY2FzZSBEM0RFUlJfREVWSUNFUkVNT1ZFRDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisjZW5kaWYg
IC8vIExJQkdMRVNWMl9VVElMSVRJRVNfSAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdmVy
dGV4Y29udmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi92ZXJ0ZXhjb252ZXJzaW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMDggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHZlcnRleGNv
bnZlcnNpb24uaDogQSBsaWJyYXJ5IG9mIHZlcnRleCBjb252ZXJzaW9uIGNsYXNzZXMgdGhhdCBj
YW4gYmUgdXNlZCB0byBidWlsZAorLy8gdGhlIEZvcm1hdENvbnZlcnRlciBvYmplY3RzIHVzZWQg
YnkgdGhlIGJ1ZmZlciBjb252ZXJzaW9uIHN5c3RlbS4KKworI2lmbmRlZiBMSUJHTEVTVjJfVkVS
VEVYQ09OVkVSU0lPTl9IXworI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwor
CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvQ29udGV4dC5oIiAvLyBEZWZpbmVzIEluZGV4CisKK25hbWVzcGFjZSBnbAoreworCisv
LyBDb252ZXJzaW9uIHR5cGVzOgorLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUg
aWYgdGhpcyBpcyBhbiBpZGVudGl0eSB0cmFuc2Zvcm0sIGZhbHNlIG90aGVyd2lzZQorLy8gc3Rh
dGljIFUgY29udmVydChUKTogY29udmVydCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0
IHR5cGUgdG8gdGhlIG91dHB1dCB0eXBlCisvLyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUg
dHlwZSBwcm9kdWNlZCBieSB0aGlzIGNvbnZlcnNpb24KKwordGVtcGxhdGUgPGNsYXNzIFQ+Citz
dHJ1Y3QgSWRlbnRpdHkKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7
CisKKyAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNz
IEZyb21ULCBjbGFzcyBUb1Q+CitzdHJ1Y3QgQ2FzdAoreworICAgIHN0YXRpYyBjb25zdCBib29s
IGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBlZGVmIFRvVCBPdXRwdXRUeXBlOworCisgICAg
c3RhdGljIFRvVCBjb252ZXJ0KEZyb21UIHgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VG9UPih4KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBD
YXN0PFQsIFQ+Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOworCisg
ICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7CisKKyAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4KTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBOb3JtYWxpemUKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBpZGVudGl0eSA9IGZhbHNlOworCisgICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOworCisg
ICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoVCB4KQorICAgIHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6
Om51bWVyaWNfbGltaXRzPFQ+IE5MOworICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHgpOworCisgICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1l
CisgICAgICAgICAgICAvLyBzdGF0aWMgY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0
IHRoZSBmaXJzdCB0aW1lIHdlIGdldCBoZXJlLCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3Rh
dGljIGd1YXJkIGFuZCBhbGwgdGhhdC4KKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3Ig
PSAxLjBmLygyKnN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpKzEpOworICAgICAgICAgICAg
cmV0dXJuICgyKmYrMSkqZGl2aXNvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmL05MOjptYXgoKTsKKyAgICAgICAgfQorICAgIH0KK307
CisKK3RlbXBsYXRlIDxjbGFzcyBGcm9tVHlwZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgorc3Ry
dWN0IEZpeGVkVG9GbG9hdAoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFs
c2U7CisKKyAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7CisKKyAgICBzdGF0aWMgZmxvYXQg
Y29udmVydChGcm9tVHlwZSB4KQorICAgIHsKKyAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9
IDEuMGYgLyBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNj
YWxlQml0cyk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29y
OworICAgIH0KK307CisKKy8vIFdpZGVuIHR5cGVzOgorLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGludCBpbml0aWFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9u
CisvLyBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21w
b25lbnRzIGFmdGVyIGNvbnZlcnNpb24KKworLy8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBz
aXplLgordGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3QgTm9XaWRlbgoreworICAgIHN0
YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOworICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTjsKK307CisKKy8vIFNIT1JULCBub3JtLVNIT1JU
LCBub3JtLVVOU0lHTkVEX1NIT1JUIGFyZSBzdXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQg
Y29tcG9uZW50cwordGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3QgV2lkZW5Ub0V2ZW4K
K3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKKyAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE4rKE4mMSk7Cit9OworCit0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBXaWRlblRvRm91cgoreworICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnNpemVfdCBmaW5hbFdpZHRoID0gNDsKK307CisKKy8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAx
IHRoYXQgYXJlIGp1c3QgdGhhdC4KK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IFNpbXBsZURl
ZmF1bHRWYWx1ZXMKK3sKKyAgICBzdGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oMCk7IH0KKyAgICBzdGF0aWMgVCBvbmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsg
fQorfTsKKworLy8gQnV0IG5vcm1hbGlzZWQgdHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEs
MV0gc28gMS4wIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBtYXggdmFsdWUuCit0ZW1wbGF0ZSA8Y2xh
c3MgVD4KK3N0cnVjdCBOb3JtYWxpemVkRGVmYXVsdFZhbHVlcworeworICAgIHN0YXRpYyBUIHpl
cm8oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9Cit9OworCisvLyBDb252ZXJ0
ZXI6CisvLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlk
ZW50aXR5IHRyYW5zZm9ybSAod2l0aCBubyB3aWRlbmluZykKKy8vIHN0YXRpYyBjb25zdCBzdGQ6
OnNpemVfdCBmaW5hbFNpemU6IG51bWJlciBvZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAorLy8g
c3RhdGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJp
ZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGlj
ZXMuIElucHV0IG1heSBiZSBzdHJpZGVkLCBidXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgor
Cit0ZW1wbGF0ZSA8Y2xhc3MgSW5ULCBjbGFzcyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwg
Y2xhc3MgRGVmYXVsdFZhbHVlUnVsZSA9IFNpbXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+CitzdHJ1
Y3QgVmVydGV4RGF0YUNvbnZlcnRlcgoreworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVy
OjpPdXRwdXRUeXBlIE91dHB1dFR5cGU7CisgICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOworCisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGgg
PT0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoKSAmJiBDb252ZXJ0ZXI6OmlkZW50aXR5OworICAgIHN0
YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGgg
KiBzaXplb2YoT3V0cHV0VHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29u
c3QgSW5wdXRUeXBlICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRw
dXRUeXBlICpvdXQpCisgICAgeworICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwg
bjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBv
aW50ZXJBZGRCeXRlcyhpbiwgaSAqIHN0cmlkZSk7CisKKyAgICAgICAgICAgIGNvcHlDb21wb25l
bnQob3V0LCBlaW4sIDAsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6
Onplcm8oKSkpOworICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGlj
X2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7CisgICAgICAgICAg
ICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAyLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZh
dWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKKyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBl
aW4sIDMsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7
CisKKyAgICAgICAgICAgIG91dCArPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGg7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0
ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnRBcnJheShzdGF0aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiks
IHN0cmlkZSwgbiwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZSo+KG91dCkpOworICAgIH0KKworICBw
cml2YXRlOgorICAgIC8vIEFkdmFuY2UgdGhlIGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2Yg
Ynl0ZXMgKG5vdCBwb2ludGVkLXRvIGVsZW1lbnRzKS4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4K
KyAgICBzdGF0aWMgVCAqcG9pbnRlckFkZEJ5dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51
bUJ5dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZVB0cikgKyBudW1CeXRlcyk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgY29weUNvbXBvbmVudChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0
VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IGVsZW1lbnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFs
dWUpCisgICAgeworICAgICAgICBpZiAoV2lkZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGgg
PiBlbGVtZW50aW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0W2VsZW1l
bnRpbmRleF0gPSBDb252ZXJ0ZXI6OmNvbnZlcnQoaW5bZWxlbWVudGluZGV4XSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0W2VsZW1lbnRpbmRleF0gPSBkZWZhdWx0dmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJT
SU9OX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3ZlcnRleGNvbnZlcnNpb24uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvc2hhZGVycy9CbGl0LnBz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvc2hh
ZGVycy9CbGl0LnBzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9zaGFkZXJzL0JsaXQucHMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKK3NhbXBsZXIyRCB0ZXggOiBzMDsKKwordW5pZm9ybSBmbG9hdDQg
bW9kZSA6IGMwOworCisvLyBQYXNzdGhyb3VnaCBQaXhlbCBTaGFkZXIKKy8vIE91dHB1dHMgdGV4
dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KK2Zsb2F0NCBwYXNzdGhyb3VnaHBzKGZsb2F0
NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgoreworCXJldHVybiB0ZXgyRCh0ZXgsIHRl
eGNvb3JkLnh5KTsKK307CisKKy8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRlcgor
Ly8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgorLy8gRm9yIExBIG91dHB1dCAocGFz
cyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgorLy8gRm9yIEwgb3V0cHV0IChBID0gMSkgc2V0
IEMwLlggPSAwLCBDMC5ZID0gMS4KK2Zsb2F0NCBsdW1pbmFuY2VwcyhmbG9hdDQgdGV4Y29vcmQg
OiBURVhDT09SRDApIDogQ09MT1IKK3sKKwlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29y
ZC54eSk7CisJdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTsKKwlyZXR1cm4gdG1wLnh4
eHc7Cit9OworCisvLyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIKKy8vIE91dHB1
dHMgc2FtcGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9IDAgYW5kL29y
IEEgPSAxLgorLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhlcndpc2UgQzAu
WCA9IDEuCisvLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0gMSwgb3RoZXJ3
aXNlIEMwLlogPSAxLCBDMC5XID0gMC4KK2Zsb2F0NCBjb21wb25lbnRtYXNrcHMoZmxvYXQ0IHRl
eGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCit7CisJZmxvYXQ0IHRtcCA9IHRleDJEKHRleCwg
dGV4Y29vcmQueHkpOworCXRtcC54eXogPSB0bXAueHl6ICogbW9kZS54OworCXRtcC53ID0gdG1w
LncgKiBtb2RlLnogKyBtb2RlLnc7CisJcmV0dXJuIHRtcDsKK307CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3NoYWRlcnMvQmxpdC5w
cwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvc2hhZGVycy9CbGl0LnZzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvc2hhZGVycy9CbGl0LnZzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL0JsaXQudnMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK3N0cnVjdCBW
U19PVVRQVVQKK3sKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTjsKKyAgICBmbG9hdDQg
dGV4Y29vcmQgOiBURVhDT09SRDA7Cit9OworCit1bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXpl
IDogYzA7CisKKy8vIFN0YW5kYXJkIFZlcnRleCBTaGFkZXIKKy8vIElucHV0IDAgaXMgdGhlIGhv
bW9nZW5vdXMgcG9zaXRpb24uCisvLyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uIGFz
LWlzLgorLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDApIGluIHRoZSB1cHBlci1sZWZ0
IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwxKSBpbiB0aGUgYm90dG9tIHJpZ2h0LgorLy8g
QzAuWCBtdXN0IGJlIG5lZ2F0aXZlIGhhbGYtcGl4ZWwgd2lkdGgsIEMwLlkgbXVzdCBiZSBoYWxm
LXBpeGVsIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgorVlNfT1VUUFVUIHN0YW5kYXJkdnMoaW4g
ZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT04pCit7CisgICAgVlNfT1VUUFVUIE91dDsKKworICAg
IE91dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVsU2l6ZTsKKyAgICBPdXQudGV4Y29v
cmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgwLjUsIC0wLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUs
IDAuNSwgMCwgMCk7CisKKyAgICByZXR1cm4gT3V0OworfTsKKworLy8gRmxpcCBZIFZlcnRleCBT
aGFkZXIKKy8vIElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisvLyBPdXRwdXRz
IHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3
aXRoICgwLDEpIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSww
KSBpbiB0aGUgYm90dG9tIHJpZ2h0LgorLy8gQzAuWFkgbXVzdCBiZSB0aGUgaGFsZi1waXhlbCB3
aWR0aCBhbmQgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCitWU19PVVRQVVQgZmxpcHl2cyhpbiBm
bG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTikKK3sKKyAgICBWU19PVVRQVVQgT3V0OworCisgICAg
T3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplOworICAgIE91dC50ZXhjb29y
ZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAuNSwgMC41LCAxLjAsIDEuMCkgKyBmbG9hdDQoMC41LCAw
LjUsIDAsIDApOworCisgICAgcmV0dXJuIE91dDsKK307CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3NoYWRlcnMvQmxpdC52cwpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvc2hhZGVycy9jb21wb25lbnRtYXNrcHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3NoYWRlcnMvY29tcG9uZW50bWFza3BzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3No
YWRlcnMvY29tcG9uZW50bWFza3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAor
I2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21w
aWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8gICBmeGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBz
XzJfMCAvRmggY29tcG9uZW50bWFza3BzLmggQmxpdC5wcworLy8KKy8vCisvLyBQYXJhbWV0ZXJz
OgorLy8KKy8vICAgZmxvYXQ0IG1vZGU7CisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8v
IFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0t
LS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxCisvLyAgIHRl
eCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisgICAgZGNsIHQwLnh5Cisg
ICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG11bCByMS54eXosIHIwLCBj
MC54CisgICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncKKyAgICBtb3Ygb0MwLCByMQorCisv
LyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFy
aXRobWV0aWMpCisjZW5kaWYKKworY29uc3QgQllURSBnX3BzMjBfY29tcG9uZW50bWFza3BzW10g
PQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIAorICAgICA0MywgICAwLCAg
NjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTE5LCAgIDAsIAor
ICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAorICAgICAgMiwgICAwLCAgIDAsICAg
MCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAgIDEx
MiwgICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAs
IAorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICA5NiwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMDksIDExMSwgMTAwLCAxMDEsIAorICAg
ICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAgMCwg
ICA0LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwg
ICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAxLCAg
IDAsIAorICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgMTEyLCAxMTUsIAorICAgICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcsIAor
ICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIsICA0
MCwgIDgyLCAgNDEsIAorICAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAgICA4
MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEy
LCAxMDUsIAorICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MCwgIDU3
LCAgNDYsICA1NywgIDUzLCAgNTAsIAorICAgICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgIDAs
IAorICAgICAzMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsIAorICAgICAgMCwgMTI4LCAgIDAs
ICAgMCwgICAzLCAxNzYsIAorICAgICAzMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsIAorICAg
ICAgMCwgMTQ0LCAgIDAsICAgOCwgIDE1LCAxNjAsIAorICAgICA2NiwgICAwLCAgIDAsICAgMywg
ICAwLCAgIDAsIAorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxNzYsIAorICAgICAgMCwg
ICA4LCAyMjgsIDE2MCwgICA1LCAgIDAsIAorICAgICAgMCwgICAzLCAgIDEsICAgMCwgICA3LCAx
MjgsIAorICAgICAgMCwgICAwLCAyMjgsIDEyOCwgICAwLCAgIDAsIAorICAgICAgMCwgMTYwLCAg
IDQsICAgMCwgICAwLCAgIDQsIAorICAgICAgMSwgICAwLCAgIDgsIDEyOCwgICAwLCAgIDAsIAor
ICAgIDI1NSwgMTI4LCAgIDAsICAgMCwgMTcwLCAxNjAsIAorICAgICAgMCwgICAwLCAyNTUsIDE2
MCwgICAxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgOCwgIDE1LCAxMjgsIAorICAgICAg
MSwgICAwLCAyMjgsIDEyOCwgMjU1LCAyNTUsIAorICAgICAgMCwgICAwCit9OwoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9zaGFkZXJz
L2NvbXBvbmVudG1hc2twcy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0w
LDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL2ZsaXB5dnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3NoYWRlcnMvZmxp
cHl2cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9zaGFkZXJzL2ZsaXB5dnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisj
aWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBp
bGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLyAgIGZ4YyAvRSBmbGlweXZzIC9UIHZzXzJfMCAvRmgg
ZmxpcHl2cy5oIEJsaXQudnMKKy8vCisvLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0
NCBoYWxmUGl4ZWxTaXplOworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAg
ICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIGhh
bGZQaXhlbFNpemUgYzAgICAgICAgMQorLy8KKworICAgIHZzXzJfMAorICAgIGRlZiBjMSwgMC41
LCAxLCAwLCAwCisgICAgZGNsX3Bvc2l0aW9uIHYwCisgICAgYWRkIG9Qb3MsIHYwLCBjMAorICAg
IG1hZCBvVDAsIHYwLCBjMS54eHl5LCBjMS54eHp6CisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0
cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX3ZzMjBfZmxpcHl2c1td
ID0KK3sKKyAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgMzUsICAgMCwg
IDY3LCAgODQsICA2NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA4NywgICAwLCAK
KyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCAKKyAgICAgIDEsICAgMCwgICAwLCAg
IDAsICAyOCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAg
ODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAg
MCwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCAKKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1
LCAKKyAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwgMTIyLCAKKyAgICAxMDEsICAgMCwgMTcx
LCAxNzEsICAgMSwgICAwLCAKKyAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTE4LCAxMTUs
ICA5NSwgIDUwLCAKKyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCAKKyAgICAxMTQs
IDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwg
IDcyLCAKKyAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCAKKyAgICAgOTcsIDEwMCwg
MTAxLCAxMTQsICAzMiwgIDY3LCAKKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAK
KyAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAKKyAgICAgNDYsICA1NywgIDUzLCAg
NTAsICA0NiwgIDUxLCAKKyAgICAgNDksICA0OSwgIDQ5LCAgIDAsICA4MSwgICAwLCAKKyAgICAg
IDAsICAgNSwgICAxLCAgIDAsICAxNSwgMTYwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgNjMsICAg
MCwgICAwLCAKKyAgICAxMjgsICA2MywgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAzMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4
LCAKKyAgICAgIDAsICAgMCwgIDE1LCAxNDQsICAgMiwgICAwLCAKKyAgICAgIDAsICAgMywgICAw
LCAgIDAsICAxNSwgMTkyLCAKKyAgICAgIDAsICAgMCwgMjI4LCAxNDQsICAgMCwgICAwLCAKKyAg
ICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwgIDE1LCAyMjQs
ICAgMCwgICAwLCAKKyAgICAyMjgsIDE0NCwgICAxLCAgIDAsICA4MCwgMTYwLCAKKyAgICAgIDEs
ICAgMCwgMTYwLCAxNjAsIDI1NSwgMjU1LCAKKyAgICAgIDAsICAgMAorfTsKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvc2hhZGVycy9m
bGlweXZzLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIwor
KgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL2dl
bmVyYXRlX3NoYWRlcnMuYmF0CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQgQEAKK0BFQ0hPIE9GRg0KK1JFTQ0KK1JFTSBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCitS
RU0gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQ0KK1JFTSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KK1JFTQ0K
Kw0KK1BBVEggJVBBVEglOyVEWFNES19ESVIlXFV0aWxpdGllc1xiaW5ceDg2DQorDQorZnhjIC9F
IHN0YW5kYXJkdnMgL1QgdnNfMl8wIC9GaCBzdGFuZGFyZHZzLmggQmxpdC52cw0KK2Z4YyAvRSBm
bGlweXZzIC9UIHZzXzJfMCAvRmggZmxpcHl2cy5oIEJsaXQudnMNCitmeGMgL0UgcGFzc3Rocm91
Z2hwcyAvVCBwc18yXzAgL0ZoIHBhc3N0aHJvdWdocHMuaCBCbGl0LnBzDQorZnhjIC9FIGx1bWlu
YW5jZXBzIC9UIHBzXzJfMCAvRmggbHVtaW5hbmNlcHMuaCBCbGl0LnBzDQorZnhjIC9FIGNvbXBv
bmVudG1hc2twcyAvVCBwc18yXzAgL0ZoIGNvbXBvbmVudG1hc2twcy5oIEJsaXQucHMNCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3No
YWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFi
bGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3NoYWRlcnMvbHVtaW5hbmNl
cHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3NoYWRlcnMvbHVtaW5hbmNlcHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvc2hhZGVycy9sdW1pbmFuY2Vwcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODAgQEAKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vICAgZnhjIC9FIGx1
bWluYW5jZXBzIC9UIHBzXzJfMCAvRmggbHVtaW5hbmNlcHMuaCBCbGl0LnBzCisvLworLy8KKy8v
IFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9hdDQgbW9kZTsKKy8vICAgc2FtcGxlcjJEIHRleDsK
Ky8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUK
Ky8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbW9kZSAgICAgICAgIGMwICAgICAg
IDEKKy8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBk
Y2wgdDAueHkKKyAgICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbWFkIHIx
LncsIHIwLncsIGMwLngsIGMwLnkKKyAgICBtb3YgcjEueHl6LCByMC54CisgICAgbW92IG9DMCwg
cjEKKworLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVy
ZSwgMyBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBz
W10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIAorICAgICA0MywgICAw
LCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTE5LCAgIDAs
IAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAorICAgICAgMiwgICAwLCAgIDAs
ICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAg
IDExMiwgICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAgIDAsIAorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAzLCAg
IDAsIAorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICA5NiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMDksIDExMSwgMTAwLCAxMDEsIAor
ICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAg
MCwgICA0LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAg
MCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAx
LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgMTEyLCAxMTUsIAorICAgICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcs
IAorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIs
ICA0MCwgIDgyLCAgNDEsIAorICAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAg
ICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwg
MTEyLCAxMDUsIAorICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MCwg
IDU3LCAgNDYsICA1NywgIDUzLCAgNTAsIAorICAgICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAg
IDAsIAorICAgICAzMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsIAorICAgICAgMCwgMTI4LCAg
IDAsICAgMCwgICAzLCAxNzYsIAorICAgICAzMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsIAor
ICAgICAgMCwgMTQ0LCAgIDAsICAgOCwgIDE1LCAxNjAsIAorICAgICA2NiwgICAwLCAgIDAsICAg
MywgICAwLCAgIDAsIAorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxNzYsIAorICAgICAg
MCwgICA4LCAyMjgsIDE2MCwgICA0LCAgIDAsIAorICAgICAgMCwgICA0LCAgIDEsICAgMCwgICA4
LCAxMjgsIAorICAgICAgMCwgICAwLCAyNTUsIDEyOCwgICAwLCAgIDAsIAorICAgICAgMCwgMTYw
LCAgIDAsICAgMCwgIDg1LCAxNjAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAs
IAorICAgICAgNywgMTI4LCAgIDAsICAgMCwgICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAs
ICAgMiwgICAwLCAgIDgsIAorICAgICAxNSwgMTI4LCAgIDEsICAgMCwgMjI4LCAxMjgsIAorICAg
IDI1NSwgMjU1LCAgIDAsICAgMAorfTsKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvc2hhZGVycy9sdW1pbmFuY2Vwcy5oCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9zaGFkZXJzL3Bhc3N0aHJvdWdocHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3NoYWRlcnMvcGFzc3Rocm91Z2hwcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL3Bh
c3N0aHJvdWdocHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisjaWYgMAorLy8K
Ky8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjku
OTUyLjMxMTEKKy8vCisvLyAgIGZ4YyAvRSBwYXNzdGhyb3VnaHBzIC9UIHBzXzJfMCAvRmggcGFz
c3Rocm91Z2hwcy5oIEJsaXQucHMKKy8vCisvLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIHNh
bXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAg
ICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIHRleCAgICAg
ICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNs
XzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJv
eGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRp
YykKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfcHMyMF9wYXNzdGhyb3VnaHBzW10gPQoreworICAg
ICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIAorICAgICAzMiwgICAwLCAgNjcsICA4NCwg
IDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc1LCAgIDAsIAorICAgICAgMCwg
ICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAg
IDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAgICA2OCwgICAwLCAg
IDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIAorICAgIDExNiwgMTAxLCAxMjAsICAgMCwgICA0LCAgIDAsIAorICAgICAx
MiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIAorICAgICAgMCwgICAwLCAxMTIsIDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4
LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYs
IAorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYs
ICAzMiwgIDgzLCAxMDQsIAorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAg
IDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0Niwg
IDUwLCAgNTcsIAorICAgICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsIAorICAgICA0OSwg
IDQ5LCAgNDksICAgMCwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAx
MjgsIAorICAgICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAg
IDAsICAgMCwgICAwLCAxNDQsIAorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAor
ICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIAorICAgICAgMCwgICAwLCAyMjgsIDE3
NiwgICAwLCAgIDgsIAorICAgIDIyOCwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIAorICAgICAg
MCwgICA4LCAgMTUsIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgICAw
LCAgIDAKK307CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3NoYWRlcnMvcGFzc3Rocm91Z2hwcy5oCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9zaGFkZXJz
L3N0YW5kYXJkdnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3NoYWRlcnMvc3RhbmRhcmR2cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9zaGFkZXJzL3N0YW5kYXJkdnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNy
b3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLyAgIGZ4
YyAvRSBzdGFuZGFyZHZzIC9UIHZzXzJfMCAvRmggc3RhbmRhcmR2cy5oIEJsaXQudnMKKy8vCisv
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBoYWxmUGl4ZWxTaXplOworLy8KKy8v
CisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAgICAgICAgIFJlZyAgIFNpemUKKy8vICAg
LS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIGhhbGZQaXhlbFNpemUgYzAgICAgICAgMQor
Ly8KKworICAgIHZzXzJfMAorICAgIGRlZiBjMSwgMC41LCAtMC41LCAxLCAwCisgICAgZGNsX3Bv
c2l0aW9uIHYwCisgICAgYWRkIG9Qb3MsIHYwLCBjMAorICAgIG1hZCBvVDAsIHYwLCBjMS54eXp6
LCBjMS54eHd3CisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisj
ZW5kaWYKKworY29uc3QgQllURSBnX3ZzMjBfc3RhbmRhcmR2c1tdID0KK3sKKyAgICAgIDAsICAg
MiwgMjU0LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgMzUsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2
LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA4NywgICAwLCAKKyAgICAgIDAsICAgMCwgICAw
LCAgIDIsIDI1NCwgMjU1LCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKKyAg
ICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAgODAsICAgMCwgICAwLCAgIDAs
ICA0OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDEs
ICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1LCAKKyAgICAxMjAsIDEwMSwg
MTA4LCAgODMsIDEwNSwgMTIyLCAKKyAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCAK
KyAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCAKKyAgICAg
OTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCAKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEw
MiwgMTE2LCAKKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKKyAgICAgNzYsICA4
MywgIDc2LCAgMzIsICA4MywgMTA0LCAKKyAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3
LCAKKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKKyAgICAxMTQsICAzMiwgIDU3
LCAgNDYsICA1MCwgIDU3LCAKKyAgICAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAKKyAg
ICAgNDksICA0OSwgIDQ5LCAgIDAsICA4MSwgICAwLCAKKyAgICAgIDAsICAgNSwgICAxLCAgIDAs
ICAxNSwgMTYwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgNjMsICAgMCwgICAwLCAKKyAgICAgIDAs
IDE5MSwgICAwLCAgIDAsIDEyOCwgIDYzLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAzMSwg
ICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDAsICAgMCwg
IDE1LCAxNDQsICAgMiwgICAwLCAKKyAgICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTkyLCAK
KyAgICAgIDAsICAgMCwgMjI4LCAxNDQsICAgMCwgICAwLCAKKyAgICAyMjgsIDE2MCwgICA0LCAg
IDAsICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwgIDE1LCAyMjQsICAgMCwgICAwLCAKKyAgICAy
MjgsIDE0NCwgICAxLCAgIDAsIDE2NCwgMTYwLCAKKyAgICAgIDEsICAgMCwgMjQwLCAxNjAsIDI1
NSwgMjU1LCAKKyAgICAgIDAsICAgMAorfTsKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvc2hhZGVycy9zdGFuZGFyZHZzLmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML2xpYkVHTC52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi94bWwKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjeHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmN4cHJv
agkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGli
RUdMLnZjeHByb2oJKHdvcmtpbmcgY29weSkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjeHByb2oKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK2FwcGxpY2F0aW9u
L3htbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cgo3N3UvUEQ5NGJXd2dkbVZ5YzJs
dmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqeFFjbTlxWldOMElFUmxabUYx
CmJIUlVZWEpuWlhSelBTSkNkV2xzWkNJZ1ZHOXZiSE5XWlhKemFXOXVQU0kwTGpBaUlIaHRiRzV6
UFNKb2RIUndPaTh2YzJOb1pXMWgKY3k1dGFXTnliM052Wm5RdVkyOXRMMlJsZG1Wc2IzQmxjaTl0
YzJKMWFXeGtMekl3TURNaVBnMEtJQ0E4U1hSbGJVZHliM1Z3SUV4aApZbVZzUFNKUWNtOXFaV04w
UTI5dVptbG5kWEpoZEdsdmJuTWlQZzBLSUNBZ0lEeFFjbTlxWldOMFEyOXVabWxuZFhKaGRHbHZi
aUJKCmJtTnNkV1JsUFNKRVpXSjFaM3hYYVc0ek1pSStEUW9nSUNBZ0lDQThRMjl1Wm1sbmRYSmhk
R2x2Ymo1RVpXSjFaend2UTI5dVptbG4KZFhKaGRHbHZiajROQ2lBZ0lDQWdJRHhRYkdGMFptOXli
VDVYYVc0ek1qd3ZVR3hoZEdadmNtMCtEUW9nSUNBZ1BDOVFjbTlxWldOMApRMjl1Wm1sbmRYSmhk
R2x2Ymo0TkNpQWdJQ0E4VUhKdmFtVmpkRU52Ym1acFozVnlZWFJwYjI0Z1NXNWpiSFZrWlQwaVJH
VmlkV2Q4CmVEWTBJajROQ2lBZ0lDQWdJRHhEYjI1bWFXZDFjbUYwYVc5dVBrUmxZblZuUEM5RGIy
NW1hV2QxY21GMGFXOXVQZzBLSUNBZ0lDQWcKUEZCc1lYUm1iM0p0UG5nMk5Ed3ZVR3hoZEdadmNt
MCtEUW9nSUNBZ1BDOVFjbTlxWldOMFEyOXVabWxuZFhKaGRHbHZiajROQ2lBZwpJQ0E4VUhKdmFt
VmpkRU52Ym1acFozVnlZWFJwYjI0Z1NXNWpiSFZrWlQwaVVtVnNaV0Z6Wlh4WGFXNHpNaUkrRFFv
Z0lDQWdJQ0E4ClEyOXVabWxuZFhKaGRHbHZiajVTWld4bFlYTmxQQzlEYjI1bWFXZDFjbUYwYVc5
dVBnMEtJQ0FnSUNBZ1BGQnNZWFJtYjNKdFBsZHAKYmpNeVBDOVFiR0YwWm05eWJUNE5DaUFnSUNB
OEwxQnliMnBsWTNSRGIyNW1hV2QxY21GMGFXOXVQZzBLSUNBZ0lEeFFjbTlxWldOMApRMjl1Wm1s
bmRYSmhkR2x2YmlCSmJtTnNkV1JsUFNKU1pXeGxZWE5sZkhnMk5DSStEUW9nSUNBZ0lDQThRMjl1
Wm1sbmRYSmhkR2x2CmJqNVNaV3hsWVhObFBDOURiMjVtYVdkMWNtRjBhVzl1UGcwS0lDQWdJQ0Fn
UEZCc1lYUm1iM0p0UG5nMk5Ed3ZVR3hoZEdadmNtMCsKRFFvZ0lDQWdQQzlRY205cVpXTjBRMjl1
Wm1sbmRYSmhkR2x2Ymo0TkNpQWdQQzlKZEdWdFIzSnZkWEErRFFvZ0lEeFFjbTl3WlhKMAplVWR5
YjNWd0lFeGhZbVZzUFNKSGJHOWlZV3h6SWo0TkNpQWdJQ0E4VUhKdmFtVmpkRWQxYVdRK2UwVTNO
RFpHUTBFNUxUWTBRek10Ck5ETXpSUzA0TlVVNExUbEJOVUUyTjBGQ04wVkVObjA4TDFCeWIycGxZ
M1JIZFdsa1BnMEtJQ0FnSUR4U2IyOTBUbUZ0WlhOd1lXTmwKUG14cFlrVkhURHd2VW05dmRFNWhi
V1Z6Y0dGalpUNE5DaUFnSUNBOFMyVjVkMjl5WkQ1WGFXNHpNbEJ5YjJvOEwwdGxlWGR2Y21RKwpE
UW9nSUR3dlVISnZjR1Z5ZEhsSGNtOTFjRDROQ2lBZ1BFbHRjRzl5ZENCUWNtOXFaV04wUFNJa0tG
WkRWR0Z5WjJWMGMxQmhkR2dwClhFMXBZM0p2YzI5bWRDNURjSEF1UkdWbVlYVnNkQzV3Y205d2N5
SWdMejROQ2lBZ1BGQnliM0JsY25SNVIzSnZkWEFnUTI5dVpHbDAKYVc5dVBTSW5KQ2hEYjI1bWFX
ZDFjbUYwYVc5dUtYd2tLRkJzWVhSbWIzSnRLU2M5UFNkU1pXeGxZWE5sZkZkcGJqTXlKeUlnVEdG
aQpaV3c5SWtOdmJtWnBaM1Z5WVhScGIyNGlQZzBLSUNBZ0lEeERiMjVtYVdkMWNtRjBhVzl1Vkhs
d1pUNUVlVzVoYldsalRHbGljbUZ5CmVUd3ZRMjl1Wm1sbmRYSmhkR2x2YmxSNWNHVStEUW9nSUNB
Z1BFTm9ZWEpoWTNSbGNsTmxkRDVWYm1samIyUmxQQzlEYUdGeVlXTjAKWlhKVFpYUStEUW9nSUNB
Z1BGZG9iMnhsVUhKdlozSmhiVTl3ZEdsdGFYcGhkR2x2Ymo1MGNuVmxQQzlYYUc5c1pWQnliMmR5
WVcxUApjSFJwYldsNllYUnBiMjQrRFFvZ0lEd3ZVSEp2Y0dWeWRIbEhjbTkxY0Q0TkNpQWdQRkJ5
YjNCbGNuUjVSM0p2ZFhBZ1EyOXVaR2wwCmFXOXVQU0luSkNoRGIyNW1hV2QxY21GMGFXOXVLWHdr
S0ZCc1lYUm1iM0p0S1NjOVBTZEVaV0oxWjN4WGFXNHpNaWNpSUV4aFltVnMKUFNKRGIyNW1hV2Qx
Y21GMGFXOXVJajROQ2lBZ0lDQThRMjl1Wm1sbmRYSmhkR2x2YmxSNWNHVStSSGx1WVcxcFkweHBZ
bkpoY25rOApMME52Ym1acFozVnlZWFJwYjI1VWVYQmxQZzBLSUNBZ0lEeERhR0Z5WVdOMFpYSlRa
WFErVlc1cFkyOWtaVHd2UTJoaGNtRmpkR1Z5ClUyVjBQZzBLSUNBOEwxQnliM0JsY25SNVIzSnZk
WEErRFFvZ0lEeFFjbTl3WlhKMGVVZHliM1Z3SUVOdmJtUnBkR2x2YmowaUp5UW8KUTI5dVptbG5k
WEpoZEdsdmJpbDhKQ2hRYkdGMFptOXliU2tuUFQwblVtVnNaV0Z6Wlh4NE5qUW5JaUJNWVdKbGJE
MGlRMjl1Wm1sbgpkWEpoZEdsdmJpSStEUW9nSUNBZ1BFTnZibVpwWjNWeVlYUnBiMjVVZVhCbFBr
UjVibUZ0YVdOTWFXSnlZWEo1UEM5RGIyNW1hV2QxCmNtRjBhVzl1Vkhsd1pUNE5DaUFnSUNBOFEy
aGhjbUZqZEdWeVUyVjBQbFZ1YVdOdlpHVThMME5vWVhKaFkzUmxjbE5sZEQ0TkNpQWcKSUNBOFYy
aHZiR1ZRY205bmNtRnRUM0IwYVcxcGVtRjBhVzl1UG5SeWRXVThMMWRvYjJ4bFVISnZaM0poYlU5
d2RHbHRhWHBoZEdsdgpiajROQ2lBZ1BDOVFjbTl3WlhKMGVVZHliM1Z3UGcwS0lDQThVSEp2Y0dW
eWRIbEhjbTkxY0NCRGIyNWthWFJwYjI0OUlpY2tLRU52CmJtWnBaM1Z5WVhScGIyNHBmQ1FvVUd4
aGRHWnZjbTBwSnowOUowUmxZblZuZkhnMk5DY2lJRXhoWW1Wc1BTSkRiMjVtYVdkMWNtRjAKYVc5
dUlqNE5DaUFnSUNBOFEyOXVabWxuZFhKaGRHbHZibFI1Y0dVK1JIbHVZVzFwWTB4cFluSmhjbms4
TDBOdmJtWnBaM1Z5WVhScApiMjVVZVhCbFBnMEtJQ0FnSUR4RGFHRnlZV04wWlhKVFpYUStWVzVw
WTI5a1pUd3ZRMmhoY21GamRHVnlVMlYwUGcwS0lDQThMMUJ5CmIzQmxjblI1UjNKdmRYQStEUW9n
SUR4SmJYQnZjblFnVUhKdmFtVmpkRDBpSkNoV1ExUmhjbWRsZEhOUVlYUm9LVnhOYVdOeWIzTnYK
Wm5RdVEzQndMbkJ5YjNCeklpQXZQZzBLSUNBOFNXMXdiM0owUjNKdmRYQWdUR0ZpWld3OUlrVjRk
R1Z1YzJsdmJsTmxkSFJwYm1kegpJajROQ2lBZ1BDOUpiWEJ2Y25SSGNtOTFjRDROQ2lBZ1BFbHRj
Rzl5ZEVkeWIzVndJRU52Ym1ScGRHbHZiajBpSnlRb1EyOXVabWxuCmRYSmhkR2x2YmlsOEpDaFFi
R0YwWm05eWJTa25QVDBuVW1Wc1pXRnpaWHhYYVc0ek1pY2lJRXhoWW1Wc1BTSlFjbTl3WlhKMGVW
Tm8KWldWMGN5SStEUW9nSUNBZ1BFbHRjRzl5ZENCUWNtOXFaV04wUFNJa0tGVnpaWEpTYjI5MFJH
bHlLVnhOYVdOeWIzTnZablF1UTNCdwpMaVFvVUd4aGRHWnZjbTBwTG5WelpYSXVjSEp2Y0hNaUlF
TnZibVJwZEdsdmJqMGlaWGhwYzNSektDY2tLRlZ6WlhKU2IyOTBSR2x5CktWeE5hV055YjNOdlpu
UXVRM0J3TGlRb1VHeGhkR1p2Y20wcExuVnpaWEl1Y0hKdmNITW5LU0lnVEdGaVpXdzlJa3h2WTJG
c1FYQncKUkdGMFlWQnNZWFJtYjNKdElpQXZQZzBLSUNBOEwwbHRjRzl5ZEVkeWIzVndQZzBLSUNB
OFNXMXdiM0owUjNKdmRYQWdRMjl1WkdsMAphVzl1UFNJbkpDaERiMjVtYVdkMWNtRjBhVzl1S1h3
a0tGQnNZWFJtYjNKdEtTYzlQU2RFWldKMVozeFhhVzR6TWljaUlFeGhZbVZzClBTSlFjbTl3WlhK
MGVWTm9aV1YwY3lJK0RRb2dJQ0FnUEVsdGNHOXlkQ0JRY205cVpXTjBQU0lrS0ZWelpYSlNiMjkw
UkdseUtWeE4KYVdOeWIzTnZablF1UTNCd0xpUW9VR3hoZEdadmNtMHBMblZ6WlhJdWNISnZjSE1p
SUVOdmJtUnBkR2x2YmowaVpYaHBjM1J6S0NjawpLRlZ6WlhKU2IyOTBSR2x5S1Z4TmFXTnliM052
Wm5RdVEzQndMaVFvVUd4aGRHWnZjbTBwTG5WelpYSXVjSEp2Y0hNbktTSWdUR0ZpClpXdzlJa3h2
WTJGc1FYQndSR0YwWVZCc1lYUm1iM0p0SWlBdlBnMEtJQ0E4TDBsdGNHOXlkRWR5YjNWd1BnMEtJ
Q0E4U1cxd2IzSjAKUjNKdmRYQWdRMjl1WkdsMGFXOXVQU0luSkNoRGIyNW1hV2QxY21GMGFXOXVL
WHdrS0ZCc1lYUm1iM0p0S1NjOVBTZFNaV3hsWVhObApmSGcyTkNjaUlFeGhZbVZzUFNKUWNtOXda
WEowZVZOb1pXVjBjeUkrRFFvZ0lDQWdQRWx0Y0c5eWRDQlFjbTlxWldOMFBTSWtLRlZ6ClpYSlNi
MjkwUkdseUtWeE5hV055YjNOdlpuUXVRM0J3TGlRb1VHeGhkR1p2Y20wcExuVnpaWEl1Y0hKdmNI
TWlJRU52Ym1ScGRHbHYKYmowaVpYaHBjM1J6S0Nja0tGVnpaWEpTYjI5MFJHbHlLVnhOYVdOeWIz
TnZablF1UTNCd0xpUW9VR3hoZEdadmNtMHBMblZ6WlhJdQpjSEp2Y0hNbktTSWdUR0ZpWld3OUlr
eHZZMkZzUVhCd1JHRjBZVkJzWVhSbWIzSnRJaUF2UGcwS0lDQThMMGx0Y0c5eWRFZHliM1Z3ClBn
MEtJQ0E4U1cxd2IzSjBSM0p2ZFhBZ1EyOXVaR2wwYVc5dVBTSW5KQ2hEYjI1bWFXZDFjbUYwYVc5
dUtYd2tLRkJzWVhSbWIzSnQKS1NjOVBTZEVaV0oxWjN4NE5qUW5JaUJNWVdKbGJEMGlVSEp2Y0dW
eWRIbFRhR1ZsZEhNaVBnMEtJQ0FnSUR4SmJYQnZjblFnVUhKdgphbVZqZEQwaUpDaFZjMlZ5VW05
dmRFUnBjaWxjVFdsamNtOXpiMlowTGtOd2NDNGtLRkJzWVhSbWIzSnRLUzUxYzJWeUxuQnliM0J6
CklpQkRiMjVrYVhScGIyNDlJbVY0YVhOMGN5Z25KQ2hWYzJWeVVtOXZkRVJwY2lsY1RXbGpjbTl6
YjJaMExrTndjQzRrS0ZCc1lYUm0KYjNKdEtTNTFjMlZ5TG5CeWIzQnpKeWtpSUV4aFltVnNQU0pN
YjJOaGJFRndjRVJoZEdGUWJHRjBabTl5YlNJZ0x6NE5DaUFnUEM5SgpiWEJ2Y25SSGNtOTFjRDRO
Q2lBZ1BGQnliM0JsY25SNVIzSnZkWEFnVEdGaVpXdzlJbFZ6WlhKTllXTnliM01pSUM4K0RRb2dJ
RHhRCmNtOXdaWEowZVVkeWIzVndQZzBLSUNBZ0lEeGZVSEp2YW1WamRFWnBiR1ZXWlhKemFXOXVQ
akV3TGpBdU5EQXlNVGt1TVR3dlgxQnkKYjJwbFkzUkdhV3hsVm1WeWMybHZiajROQ2lBZ0lDQThU
M1YwUkdseUlFTnZibVJwZEdsdmJqMGlKeVFvUTI5dVptbG5kWEpoZEdsdgpiaWw4SkNoUWJHRjBa
bTl5YlNrblBUMG5SR1ZpZFdkOFYybHVNekluSWo0a0tGTnZiSFYwYVc5dVJHbHlLU1FvUTI5dVpt
bG5kWEpoCmRHbHZiaWxjUEM5UGRYUkVhWEkrRFFvZ0lDQWdQRWx1ZEVScGNpQkRiMjVrYVhScGIy
NDlJaWNrS0VOdmJtWnBaM1Z5WVhScGIyNHAKZkNRb1VHeGhkR1p2Y20wcEp6MDlKMFJsWW5WbmZG
ZHBiak15SnlJK0pDaERiMjVtYVdkMWNtRjBhVzl1S1Z3OEwwbHVkRVJwY2o0TgpDaUFnSUNBOFRH
bHVhMGx1WTNKbGJXVnVkR0ZzSUVOdmJtUnBkR2x2YmowaUp5UW9RMjl1Wm1sbmRYSmhkR2x2Ymls
OEpDaFFiR0YwClptOXliU2tuUFQwblJHVmlkV2Q4VjJsdU16SW5JajUwY25WbFBDOU1hVzVyU1c1
amNtVnRaVzUwWVd3K0RRb2dJQ0FnUEU5MWRFUnAKY2lCRGIyNWthWFJwYjI0OUlpY2tLRU52Ym1a
cFozVnlZWFJwYjI0cGZDUW9VR3hoZEdadmNtMHBKejA5SjFKbGJHVmhjMlY4VjJsdQpNekluSWo0
a0tGTnZiSFYwYVc5dVJHbHlLU1FvUTI5dVptbG5kWEpoZEdsdmJpbGNQQzlQZFhSRWFYSStEUW9n
SUNBZ1BFbHVkRVJwCmNpQkRiMjVrYVhScGIyNDlJaWNrS0VOdmJtWnBaM1Z5WVhScGIyNHBmQ1Fv
VUd4aGRHWnZjbTBwSnowOUoxSmxiR1ZoYzJWOFYybHUKTXpJbklqNGtLRU52Ym1acFozVnlZWFJw
YjI0cFhEd3ZTVzUwUkdseVBnMEtJQ0FnSUR4TWFXNXJTVzVqY21WdFpXNTBZV3dnUTI5dQpaR2ww
YVc5dVBTSW5KQ2hEYjI1bWFXZDFjbUYwYVc5dUtYd2tLRkJzWVhSbWIzSnRLU2M5UFNkU1pXeGxZ
WE5sZkZkcGJqTXlKeUkrClptRnNjMlU4TDB4cGJtdEpibU55WlcxbGJuUmhiRDROQ2lBZ0lDQThU
M1YwUkdseUlFTnZibVJwZEdsdmJqMGlKeVFvUTI5dVptbG4KZFhKaGRHbHZiaWw4SkNoUWJHRjBa
bTl5YlNrblBUMG5SR1ZpZFdkOGVEWTBKeUkrSkNoVGIyeDFkR2x2YmtScGNpa2tLRkJzWVhSbQpi
M0p0S1Z3a0tFTnZibVpwWjNWeVlYUnBiMjRwWER3dlQzVjBSR2x5UGcwS0lDQWdJRHhKYm5SRWFY
SWdRMjl1WkdsMGFXOXVQU0luCkpDaERiMjVtYVdkMWNtRjBhVzl1S1h3a0tGQnNZWFJtYjNKdEtT
YzlQU2RFWldKMVozeDROalFuSWo0a0tGQnNZWFJtYjNKdEtWd2sKS0VOdmJtWnBaM1Z5WVhScGIy
NHBYRHd2U1c1MFJHbHlQZzBLSUNBZ0lEeE1hVzVyU1c1amNtVnRaVzUwWVd3Z1EyOXVaR2wwYVc5
dQpQU0luSkNoRGIyNW1hV2QxY21GMGFXOXVLWHdrS0ZCc1lYUm1iM0p0S1NjOVBTZEVaV0oxWjN4
NE5qUW5JajUwY25WbFBDOU1hVzVyClNXNWpjbVZ0Wlc1MFlXdytEUW9nSUNBZ1BFOTFkRVJwY2lC
RGIyNWthWFJwYjI0OUlpY2tLRU52Ym1acFozVnlZWFJwYjI0cGZDUW8KVUd4aGRHWnZjbTBwSnow
OUoxSmxiR1ZoYzJWOGVEWTBKeUkrSkNoVGIyeDFkR2x2YmtScGNpa2tLRkJzWVhSbWIzSnRLVndr
S0VOdgpibVpwWjNWeVlYUnBiMjRwWER3dlQzVjBSR2x5UGcwS0lDQWdJRHhKYm5SRWFYSWdRMjl1
WkdsMGFXOXVQU0luSkNoRGIyNW1hV2QxCmNtRjBhVzl1S1h3a0tGQnNZWFJtYjNKdEtTYzlQU2RT
Wld4bFlYTmxmSGcyTkNjaVBpUW9VR3hoZEdadmNtMHBYQ1FvUTI5dVptbG4KZFhKaGRHbHZiaWxj
UEM5SmJuUkVhWEkrRFFvZ0lDQWdQRXhwYm10SmJtTnlaVzFsYm5SaGJDQkRiMjVrYVhScGIyNDlJ
aWNrS0VOdgpibVpwWjNWeVlYUnBiMjRwZkNRb1VHeGhkR1p2Y20wcEp6MDlKMUpsYkdWaGMyVjhl
RFkwSnlJK1ptRnNjMlU4TDB4cGJtdEpibU55ClpXMWxiblJoYkQ0TkNpQWdJQ0E4VEdsaWNtRnll
VkJoZEdnZ1EyOXVaR2wwYVc5dVBTSW5KQ2hEYjI1bWFXZDFjbUYwYVc5dUtYd2sKS0ZCc1lYUm1i
M0p0S1NjOVBTZFNaV3hsWVhObGZGZHBiak15SnlJK0pDaE1hV0p5WVhKNVVHRjBhQ2s4TDB4cFlu
SmhjbmxRWVhSbwpQZzBLSUNBZ0lEeE1hV0p5WVhKNVVHRjBhQ0JEYjI1a2FYUnBiMjQ5SWlja0tF
TnZibVpwWjNWeVlYUnBiMjRwZkNRb1VHeGhkR1p2CmNtMHBKejA5SjBSbFluVm5mRmRwYmpNeUp5
SStKQ2hNYVdKeVlYSjVVR0YwYUNrOEwweHBZbkpoY25sUVlYUm9QZzBLSUNBZ0lEeE0KYVdKeVlY
SjVVR0YwYUNCRGIyNWthWFJwYjI0OUlpY2tLRU52Ym1acFozVnlZWFJwYjI0cGZDUW9VR3hoZEda
dmNtMHBKejA5SjBSbApZblZuZkhnMk5DY2lQaVFvVEdsaWNtRnllVkJoZEdncFBDOU1hV0p5WVhK
NVVHRjBhRDROQ2lBZ0lDQThUR2xpY21GeWVWQmhkR2dnClEyOXVaR2wwYVc5dVBTSW5KQ2hEYjI1
bWFXZDFjbUYwYVc5dUtYd2tLRkJzWVhSbWIzSnRLU2M5UFNkU1pXeGxZWE5sZkhnMk5DY2kKUGlR
b1RHbGljbUZ5ZVZCaGRHZ3BQQzlNYVdKeVlYSjVVR0YwYUQ0TkNpQWdQQzlRY205d1pYSjBlVWR5
YjNWd1BnMEtJQ0E4U1hSbApiVVJsWm1sdWFYUnBiMjVIY205MWNDQkRiMjVrYVhScGIyNDlJaWNr
S0VOdmJtWnBaM1Z5WVhScGIyNHBmQ1FvVUd4aGRHWnZjbTBwCkp6MDlKMFJsWW5WbmZGZHBiak15
SnlJK0RRb2dJQ0FnUEVOc1EyOXRjR2xzWlQ0TkNpQWdJQ0FnSUR4UGNIUnBiV2w2WVhScGIyNCsK
UkdsellXSnNaV1E4TDA5d2RHbHRhWHBoZEdsdmJqNE5DaUFnSUNBZ0lEeEJaR1JwZEdsdmJtRnNT
VzVqYkhWa1pVUnBjbVZqZEc5eQphV1Z6UGlRb1VISnZhbVZqZEVScGNpa3ZMaTQ3SUNRb1VISnZh
bVZqZEVScGNpa3ZMaTR2TGk0dmFXNWpiSFZrWlRzbEtFRmtaR2wwCmFXOXVZV3hKYm1Oc2RXUmxS
R2x5WldOMGIzSnBaWE1wUEM5QlpHUnBkR2x2Ym1Gc1NXNWpiSFZrWlVScGNtVmpkRzl5YVdWelBn
MEsKSUNBZ0lDQWdQRkJ5WlhCeWIyTmxjM052Y2tSbFptbHVhWFJwYjI1elBsZEpUak15TzE5RVJV
SlZSenRmVjBsT1JFOVhVenRmVlZOUwpSRXhNTzB4SlFrVkhURjlGV0ZCUFVsUlRPMTlEVWxSZlUw
VkRWVkpGWDA1UFgwUkZVRkpGUTBGVVJUdE9UMDFKVGsxQldEc2xLRkJ5ClpYQnliMk5sYzNOdmNr
UmxabWx1YVhScGIyNXpLVHd2VUhKbGNISnZZMlZ6YzI5eVJHVm1hVzVwZEdsdmJuTStEUW9nSUNB
Z0lDQTgKVFdsdWFXMWhiRkpsWW5WcGJHUStkSEoxWlR3dlRXbHVhVzFoYkZKbFluVnBiR1ErRFFv
Z0lDQWdJQ0E4UW1GemFXTlNkVzUwYVcxbApRMmhsWTJ0elBrVnVZV0pzWlVaaGMzUkRhR1ZqYTNN
OEwwSmhjMmxqVW5WdWRHbHRaVU5vWldOcmN6NE5DaUFnSUNBZ0lEeFNkVzUwCmFXMWxUR2xpY21G
eWVUNU5kV3gwYVZSb2NtVmhaR1ZrUkdWaWRXYzhMMUoxYm5ScGJXVk1hV0p5WVhKNVBnMEtJQ0Fn
SUNBZ1BGQnkKWldOdmJYQnBiR1ZrU0dWaFpHVnlQZzBLSUNBZ0lDQWdQQzlRY21WamIyMXdhV3hs
WkVobFlXUmxjajROQ2lBZ0lDQWdJRHhYWVhKdQphVzVuVEdWMlpXdytUR1YyWld3MFBDOVhZWEp1
YVc1blRHVjJaV3crRFFvZ0lDQWdJQ0E4VkhKbFlYUlhZWEp1YVc1blFYTkZjbkp2CmNqNTBjblZs
UEM5VWNtVmhkRmRoY201cGJtZEJjMFZ5Y205eVBnMEtJQ0FnSUNBZ1BFUmxZblZuU1c1bWIzSnRZ
WFJwYjI1R2IzSnQKWVhRK1JXUnBkRUZ1WkVOdmJuUnBiblZsUEM5RVpXSjFaMGx1Wm05eWJXRjBh
Vzl1Um05eWJXRjBQZzBLSUNBZ0lDQWdQRVJwYzJGaQpiR1ZUY0dWamFXWnBZMWRoY201cGJtZHpQ
alF4TURBN05ERXlOenMwTVRnNU96UXlNems3TkRJME5EczBNalExT3pRMU1USTdORGN3Ck1qc2xL
RVJwYzJGaWJHVlRjR1ZqYVdacFkxZGhjbTVwYm1kektUd3ZSR2x6WVdKc1pWTndaV05wWm1salYy
RnlibWx1WjNNK0RRb2cKSUNBZ1BDOURiRU52YlhCcGJHVStEUW9nSUNBZ1BFeHBibXMrRFFvZ0lD
QWdJQ0E4UVdSa2FYUnBiMjVoYkVSbGNHVnVaR1Z1WTJsbApjejVrTTJRNUxteHBZanRrZUdkMWFX
UXViR2xpT3lVb1FXUmthWFJwYjI1aGJFUmxjR1Z1WkdWdVkybGxjeWs4TDBGa1pHbDBhVzl1CllX
eEVaWEJsYm1SbGJtTnBaWE0rRFFvZ0lDQWdJQ0E4VFc5a2RXeGxSR1ZtYVc1cGRHbHZia1pwYkdV
K2JHbGlSVWRNTG1SbFpqd3YKVFc5a2RXeGxSR1ZtYVc1cGRHbHZia1pwYkdVK0RRb2dJQ0FnSUNB
OFJHVnNZWGxNYjJGa1JFeE1jejRsS0VSbGJHRjVURzloWkVSTQpUSE1wUEM5RVpXeGhlVXh2WVdS
RVRFeHpQZzBLSUNBZ0lDQWdQRWRsYm1WeVlYUmxSR1ZpZFdkSmJtWnZjbTFoZEdsdmJqNTBjblZs
ClBDOUhaVzVsY21GMFpVUmxZblZuU1c1bWIzSnRZWFJwYjI0K0RRb2dJQ0FnSUNBOFUzVmlVM2x6
ZEdWdFBsZHBibVJ2ZDNNOEwxTjEKWWxONWMzUmxiVDROQ2lBZ0lDQWdJRHhFWVhSaFJYaGxZM1Yw
YVc5dVVISmxkbVZ1ZEdsdmJqNE5DaUFnSUNBZ0lEd3ZSR0YwWVVWNApaV04xZEdsdmJsQnlaWFps
Ym5ScGIyNCtEUW9nSUNBZ0lDQThWR0Z5WjJWMFRXRmphR2x1WlQ1TllXTm9hVzVsV0RnMlBDOVVZ
WEpuClpYUk5ZV05vYVc1bFBnMEtJQ0FnSUR3dlRHbHVhejROQ2lBZ0lDQThVRzl6ZEVKMWFXeGtS
WFpsYm5RK0RRb2dJQ0FnSUNBOFEyOXQKYldGdVpENGxOREJsWTJodklHOXVEUXB0YTJScGNpQWlK
Q2hRY205cVpXTjBSR2x5S1M0dVhDNHVYR3hwWWx3a0tFTnZibVpwWjNWeQpZWFJwYjI0cFhDSU5D
bU52Y0hrZ0lpUW9UM1YwUkdseUtXeHBZa1ZIVEM1a2JHd2lJQ0lrS0ZCeWIycGxZM1JFYVhJcExp
NWNMaTVjCmJHbGlYQ1FvUTI5dVptbG5kWEpoZEdsdmJpbGNJZzBLWTI5d2VTQWlKQ2hQZFhSRWFY
SXBiR2xpUlVkTUxteHBZaUlnSWlRb1VISnYKYW1WamRFUnBjaWt1TGx3dUxseHNhV0pjSkNoRGIy
NW1hV2QxY21GMGFXOXVLVndpRFFvbE5EQmxZMmh2SUc5bVpnMEtQQzlEYjIxdApZVzVrUGcwS0lD
QWdJRHd2VUc5emRFSjFhV3hrUlhabGJuUStEUW9nSUR3dlNYUmxiVVJsWm1sdWFYUnBiMjVIY205
MWNENE5DaUFnClBFbDBaVzFFWldacGJtbDBhVzl1UjNKdmRYQWdRMjl1WkdsMGFXOXVQU0luSkNo
RGIyNW1hV2QxY21GMGFXOXVLWHdrS0ZCc1lYUm0KYjNKdEtTYzlQU2RTWld4bFlYTmxmRmRwYmpN
eUp5SStEUW9nSUNBZ1BFTnNRMjl0Y0dsc1pUNE5DaUFnSUNBZ0lEeFBjSFJwYldsNgpZWFJwYjI0
K1RXRjRVM0JsWldROEwwOXdkR2x0YVhwaGRHbHZiajROQ2lBZ0lDQWdJRHhKYm14cGJtVkdkVzVq
ZEdsdmJrVjRjR0Z1CmMybHZiajVCYm5sVGRXbDBZV0pzWlR3dlNXNXNhVzVsUm5WdVkzUnBiMjVG
ZUhCaGJuTnBiMjQrRFFvZ0lDQWdJQ0E4UVdSa2FYUnAKYjI1aGJFbHVZMngxWkdWRWFYSmxZM1J2
Y21sbGN6NGtLRkJ5YjJwbFkzUkVhWElwTHk0dU95QWtLRkJ5YjJwbFkzUkVhWElwTHk0dQpMeTR1
TDJsdVkyeDFaR1U3SlNoQlpHUnBkR2x2Ym1Gc1NXNWpiSFZrWlVScGNtVmpkRzl5YVdWektUd3ZR
V1JrYVhScGIyNWhiRWx1ClkyeDFaR1ZFYVhKbFkzUnZjbWxsY3o0TkNpQWdJQ0FnSUR4UWNtVndj
bTlqWlhOemIzSkVaV1pwYm1sMGFXOXVjejVCVGtkTVJWOUUKU1ZOQlFreEZYMVJTUVVORk8xZEpU
ak15TzA1RVJVSlZSenRmVjBsT1JFOVhVenRmVlZOU1JFeE1PMHhKUWtWSFRGOUZXRkJQVWxSVApP
MTlEVWxSZlUwVkRWVkpGWDA1UFgwUkZVRkpGUTBGVVJUdE9UMDFKVGsxQldEdGZVMFZEVlZKRlgx
TkRURDB3T3lVb1VISmxjSEp2ClkyVnpjMjl5UkdWbWFXNXBkR2x2Ym5NcFBDOVFjbVZ3Y205alpY
TnpiM0pFWldacGJtbDBhVzl1Y3o0TkNpQWdJQ0FnSUR4U2RXNTAKYVcxbFRHbGljbUZ5ZVQ1TmRX
eDBhVlJvY21WaFpHVmtQQzlTZFc1MGFXMWxUR2xpY21GeWVUNE5DaUFnSUNBZ0lEeFFjbVZqYjIx
dwphV3hsWkVobFlXUmxjajROQ2lBZ0lDQWdJRHd2VUhKbFkyOXRjR2xzWldSSVpXRmtaWEkrRFFv
Z0lDQWdJQ0E4VjJGeWJtbHVaMHhsCmRtVnNQa3hsZG1Wc05Ed3ZWMkZ5Ym1sdVoweGxkbVZzUGcw
S0lDQWdJQ0FnUEZSeVpXRjBWMkZ5Ym1sdVowRnpSWEp5YjNJK2RISjEKWlR3dlZISmxZWFJYWVhK
dWFXNW5RWE5GY25KdmNqNE5DaUFnSUNBZ0lEeEVaV0oxWjBsdVptOXliV0YwYVc5dVJtOXliV0Yw
UGxCeQpiMmR5WVcxRVlYUmhZbUZ6WlR3dlJHVmlkV2RKYm1admNtMWhkR2x2YmtadmNtMWhkRDRO
Q2lBZ0lDQWdJRHhFYVhOaFlteGxVM0JsClkybG1hV05YWVhKdWFXNW5jejQwTVRBd096UXhNamM3
TkRFNE9UczBNak01T3pReU5EUTdOREkwTlRzME5URXlPelEzTURJN0pTaEUKYVhOaFlteGxVM0Js
WTJsbWFXTlhZWEp1YVc1bmN5azhMMFJwYzJGaWJHVlRjR1ZqYVdacFkxZGhjbTVwYm1kelBnMEtJ
Q0FnSUR3dgpRMnhEYjIxd2FXeGxQZzBLSUNBZ0lEeE1hVzVyUGcwS0lDQWdJQ0FnUEVGa1pHbDBh
Vzl1WVd4RVpYQmxibVJsYm1OcFpYTStaRE5rCk9TNXNhV0k3WkhobmRXbGtMbXhwWWpzbEtFRmta
R2wwYVc5dVlXeEVaWEJsYm1SbGJtTnBaWE1wUEM5QlpHUnBkR2x2Ym1Gc1JHVncKWlc1a1pXNWph
V1Z6UGcwS0lDQWdJQ0FnUEUxdlpIVnNaVVJsWm1sdWFYUnBiMjVHYVd4bFBteHBZa1ZIVEM1a1pX
WThMMDF2WkhWcwpaVVJsWm1sdWFYUnBiMjVHYVd4bFBnMEtJQ0FnSUNBZ1BFUmxiR0Y1VEc5aFpF
Uk1USE0rSlNoRVpXeGhlVXh2WVdSRVRFeHpLVHd2ClJHVnNZWGxNYjJGa1JFeE1jejROQ2lBZ0lD
QWdJRHhIWlc1bGNtRjBaVVJsWW5WblNXNW1iM0p0WVhScGIyNCtkSEoxWlR3dlIyVnUKWlhKaGRH
VkVaV0oxWjBsdVptOXliV0YwYVc5dVBnMEtJQ0FnSUNBZ1BGTjFZbE41YzNSbGJUNVhhVzVrYjNk
elBDOVRkV0pUZVhOMApaVzArRFFvZ0lDQWdJQ0E4VDNCMGFXMXBlbVZTWldabGNtVnVZMlZ6UG5S
eWRXVThMMDl3ZEdsdGFYcGxVbVZtWlhKbGJtTmxjejROCkNpQWdJQ0FnSUR4RmJtRmliR1ZEVDAx
RVFWUkdiMnhrYVc1blBuUnlkV1U4TDBWdVlXSnNaVU5QVFVSQlZFWnZiR1JwYm1jK0RRb2cKSUNB
Z0lDQThSR0YwWVVWNFpXTjFkR2x2YmxCeVpYWmxiblJwYjI0K0RRb2dJQ0FnSUNBOEwwUmhkR0ZG
ZUdWamRYUnBiMjVRY21WMgpaVzUwYVc5dVBnMEtJQ0FnSUNBZ1BGUmhjbWRsZEUxaFkyaHBibVUr
VFdGamFHbHVaVmc0Tmp3dlZHRnlaMlYwVFdGamFHbHVaVDROCkNpQWdJQ0E4TDB4cGJtcytEUW9n
SUNBZ1BGQnZjM1JDZFdsc1pFVjJaVzUwUGcwS0lDQWdJQ0FnUEVOdmJXMWhibVErSlRRd1pXTm8K
YnlCdmJnMEtiV3RrYVhJZ0lpUW9VSEp2YW1WamRFUnBjaWt1TGx3dUxseHNhV0pjSkNoRGIyNW1h
V2QxY21GMGFXOXVLVndpRFFwagpiM0I1SUNJa0tFOTFkRVJwY2lsc2FXSkZSMHd1Wkd4c0lpQWlK
Q2hRY205cVpXTjBSR2x5S1M0dVhDNHVYR3hwWWx3a0tFTnZibVpwClozVnlZWFJwYjI0cFhDSU5D
bU52Y0hrZ0lpUW9UM1YwUkdseUtXeHBZa1ZIVEM1c2FXSWlJQ0lrS0ZCeWIycGxZM1JFYVhJcExp
NWMKTGk1Y2JHbGlYQ1FvUTI5dVptbG5kWEpoZEdsdmJpbGNJZzBLSlRRd1pXTm9ieUJ2Wm1ZTkNq
d3ZRMjl0YldGdVpENE5DaUFnSUNBOApMMUJ2YzNSQ2RXbHNaRVYyWlc1MFBnMEtJQ0E4TDBsMFpX
MUVaV1pwYm1sMGFXOXVSM0p2ZFhBK0RRb2dJRHhKZEdWdFJHVm1hVzVwCmRHbHZia2R5YjNWd0lF
TnZibVJwZEdsdmJqMGlKeVFvUTI5dVptbG5kWEpoZEdsdmJpbDhKQ2hRYkdGMFptOXliU2tuUFQw
blJHVmkKZFdkOGVEWTBKeUkrRFFvZ0lDQWdQRTFwWkd3K0RRb2dJQ0FnSUNBOFZHRnlaMlYwUlc1
MmFYSnZibTFsYm5RK1dEWTBQQzlVWVhKbgpaWFJGYm5acGNtOXViV1Z1ZEQ0TkNpQWdJQ0E4TDAx
cFpHdytEUW9nSUNBZ1BFTnNRMjl0Y0dsc1pUNE5DaUFnSUNBZ0lEeFBjSFJwCmJXbDZZWFJwYjI0
K1JHbHpZV0pzWldROEwwOXdkR2x0YVhwaGRHbHZiajROQ2lBZ0lDQWdJRHhCWkdScGRHbHZibUZz
U1c1amJIVmsKWlVScGNtVmpkRzl5YVdWelBpUW9VSEp2YW1WamRFUnBjaWt2TGk0N0lDUW9VSEp2
YW1WamRFUnBjaWt2TGk0dkxpNHZhVzVqYkhWawpaVHNsS0VGa1pHbDBhVzl1WVd4SmJtTnNkV1Js
UkdseVpXTjBiM0pwWlhNcFBDOUJaR1JwZEdsdmJtRnNTVzVqYkhWa1pVUnBjbVZqCmRHOXlhV1Z6
UGcwS0lDQWdJQ0FnUEZCeVpYQnliMk5sYzNOdmNrUmxabWx1YVhScGIyNXpQbGRKVGpNeU8xOUVS
VUpWUnp0ZlYwbE8KUkU5WFV6dGZWVk5TUkV4TU8weEpRa1ZIVEY5RldGQlBVbFJUTzE5RFVsUmZV
MFZEVlZKRlgwNVBYMFJGVUZKRlEwRlVSVHRPVDAxSgpUazFCV0RzbEtGQnlaWEJ5YjJObGMzTnZj
a1JsWm1sdWFYUnBiMjV6S1R3dlVISmxjSEp2WTJWemMyOXlSR1ZtYVc1cGRHbHZibk0rCkRRb2dJ
Q0FnSUNBOFRXbHVhVzFoYkZKbFluVnBiR1ErZEhKMVpUd3ZUV2x1YVcxaGJGSmxZblZwYkdRK0RR
b2dJQ0FnSUNBOFFtRnoKYVdOU2RXNTBhVzFsUTJobFkydHpQa1Z1WVdKc1pVWmhjM1JEYUdWamEz
TThMMEpoYzJsalVuVnVkR2x0WlVOb1pXTnJjejROQ2lBZwpJQ0FnSUR4U2RXNTBhVzFsVEdsaWNt
RnllVDVOZFd4MGFWUm9jbVZoWkdWa1JHVmlkV2M4TDFKMWJuUnBiV1ZNYVdKeVlYSjVQZzBLCklD
QWdJQ0FnUEZCeVpXTnZiWEJwYkdWa1NHVmhaR1Z5UGcwS0lDQWdJQ0FnUEM5UWNtVmpiMjF3YVd4
bFpFaGxZV1JsY2o0TkNpQWcKSUNBZ0lEeFhZWEp1YVc1blRHVjJaV3crVEdWMlpXdzBQQzlYWVhK
dWFXNW5UR1YyWld3K0RRb2dJQ0FnSUNBOFJHbHpZV0pzWlZOdwpaV05wWm1salYyRnlibWx1WjNN
K05ERXdNRHMwTVRJM096UXhPRGs3TkRJek9UczBNalEwT3pReU5EVTdORFV4TWpzME56QXlPeVVv
ClJHbHpZV0pzWlZOd1pXTnBabWxqVjJGeWJtbHVaM01wUEM5RWFYTmhZbXhsVTNCbFkybG1hV05Y
WVhKdWFXNW5jejROQ2lBZ0lDQWcKSUR4RVpXSjFaMGx1Wm05eWJXRjBhVzl1Um05eWJXRjBQbEJ5
YjJkeVlXMUVZWFJoWW1GelpUd3ZSR1ZpZFdkSmJtWnZjbTFoZEdsdgpia1p2Y20xaGRENE5DaUFn
SUNBZ0lEeFVjbVZoZEZkaGNtNXBibWRCYzBWeWNtOXlQblJ5ZFdVOEwxUnlaV0YwVjJGeWJtbHVa
MEZ6ClJYSnliM0krRFFvZ0lDQWdQQzlEYkVOdmJYQnBiR1UrRFFvZ0lDQWdQRXhwYm1zK0RRb2dJ
Q0FnSUNBOFFXUmthWFJwYjI1aGJFUmwKY0dWdVpHVnVZMmxsY3o1a00yUTVMbXhwWWp0a2VHZDFh
V1F1YkdsaU95VW9RV1JrYVhScGIyNWhiRVJsY0dWdVpHVnVZMmxsY3lrOApMMEZrWkdsMGFXOXVZ
V3hFWlhCbGJtUmxibU5wWlhNK0RRb2dJQ0FnSUNBOFRXOWtkV3hsUkdWbWFXNXBkR2x2YmtacGJH
VStiR2xpClJVZE1MbVJsWmp3dlRXOWtkV3hsUkdWbWFXNXBkR2x2YmtacGJHVStEUW9nSUNBZ0lD
QThSR1ZzWVhsTWIyRmtSRXhNY3o0bEtFUmwKYkdGNVRHOWhaRVJNVEhNcFBDOUVaV3hoZVV4dllX
UkVURXh6UGcwS0lDQWdJQ0FnUEVkbGJtVnlZWFJsUkdWaWRXZEpibVp2Y20xaApkR2x2Ymo1MGNu
VmxQQzlIWlc1bGNtRjBaVVJsWW5WblNXNW1iM0p0WVhScGIyNCtEUW9nSUNBZ0lDQThVM1ZpVTNs
emRHVnRQbGRwCmJtUnZkM004TDFOMVlsTjVjM1JsYlQ0TkNpQWdJQ0FnSUR4RVlYUmhSWGhsWTNW
MGFXOXVVSEpsZG1WdWRHbHZiajROQ2lBZ0lDQWcKSUR3dlJHRjBZVVY0WldOMWRHbHZibEJ5Wlha
bGJuUnBiMjQrRFFvZ0lDQWdJQ0E4VkdGeVoyVjBUV0ZqYUdsdVpUNU5ZV05vYVc1bApXRFkwUEM5
VVlYSm5aWFJOWVdOb2FXNWxQZzBLSUNBZ0lEd3ZUR2x1YXo0TkNpQWdJQ0E4VUc5emRFSjFhV3hr
UlhabGJuUStEUW9nCklDQWdJQ0E4UTI5dGJXRnVaRDRsTkRCbFkyaHZJRzl1RFFwdGEyUnBjaUFp
SkNoUWNtOXFaV04wUkdseUtTNHVYQzR1WEd4cFlsd2sKS0VOdmJtWnBaM1Z5WVhScGIyNHBYQ0lO
Q21OdmNIa2dJaVFvVDNWMFJHbHlLV3hwWWtWSFRDNWtiR3dpSUNJa0tGQnliMnBsWTNSRQphWElw
TGk1Y0xpNWNiR2xpWENRb1EyOXVabWxuZFhKaGRHbHZiaWxjSWcwS1kyOXdlU0FpSkNoUGRYUkVh
WElwYkdsaVJVZE1MbXhwCllpSWdJaVFvVUhKdmFtVmpkRVJwY2lrdUxsd3VMbHhzYVdKY0pDaERi
MjVtYVdkMWNtRjBhVzl1S1Z3aURRb2xOREJsWTJodklHOW0KWmcwS1BDOURiMjF0WVc1a1BnMEtJ
Q0FnSUR3dlVHOXpkRUoxYVd4a1JYWmxiblErRFFvZ0lEd3ZTWFJsYlVSbFptbHVhWFJwYjI1SApj
bTkxY0Q0TkNpQWdQRWwwWlcxRVpXWnBibWwwYVc5dVIzSnZkWEFnUTI5dVpHbDBhVzl1UFNJbkpD
aERiMjVtYVdkMWNtRjBhVzl1CktYd2tLRkJzWVhSbWIzSnRLU2M5UFNkU1pXeGxZWE5sZkhnMk5D
Y2lQZzBLSUNBZ0lEeE5hV1JzUGcwS0lDQWdJQ0FnUEZSaGNtZGwKZEVWdWRtbHliMjV0Wlc1MFBs
ZzJORHd2VkdGeVoyVjBSVzUyYVhKdmJtMWxiblErRFFvZ0lDQWdQQzlOYVdSc1BnMEtJQ0FnSUR4
RApiRU52YlhCcGJHVStEUW9nSUNBZ0lDQThUM0IwYVcxcGVtRjBhVzl1UGsxaGVGTndaV1ZrUEM5
UGNIUnBiV2w2WVhScGIyNCtEUW9nCklDQWdJQ0E4U1c1c2FXNWxSblZ1WTNScGIyNUZlSEJoYm5O
cGIyNCtRVzU1VTNWcGRHRmliR1U4TDBsdWJHbHVaVVoxYm1OMGFXOXUKUlhod1lXNXphVzl1UGcw
S0lDQWdJQ0FnUEVGa1pHbDBhVzl1WVd4SmJtTnNkV1JsUkdseVpXTjBiM0pwWlhNK0pDaFFjbTlx
WldOMApSR2x5S1M4dUxqc2dKQ2hRY205cVpXTjBSR2x5S1M4dUxpOHVMaTlwYm1Oc2RXUmxPeVVv
UVdSa2FYUnBiMjVoYkVsdVkyeDFaR1ZFCmFYSmxZM1J2Y21sbGN5azhMMEZrWkdsMGFXOXVZV3hK
Ym1Oc2RXUmxSR2x5WldOMGIzSnBaWE0rRFFvZ0lDQWdJQ0E4VUhKbGNISnYKWTJWemMyOXlSR1Zt
YVc1cGRHbHZibk0rVjBsT016STdUa1JGUWxWSE8xOVhTVTVFVDFkVE8xOVZVMUpFVEV3N1RFbENS
VWRNWDBWWQpVRTlTVkZNN1gwTlNWRjlUUlVOVlVrVmZUazlmUkVWUVVrVkRRVlJGTzA1UFRVbE9U
VUZZTzE5VFJVTlZVa1ZmVTBOTVBUQTdKU2hRCmNtVndjbTlqWlhOemIzSkVaV1pwYm1sMGFXOXVj
eWs4TDFCeVpYQnliMk5sYzNOdmNrUmxabWx1YVhScGIyNXpQZzBLSUNBZ0lDQWcKUEZKMWJuUnBi
V1ZNYVdKeVlYSjVQazExYkhScFZHaHlaV0ZrWldROEwxSjFiblJwYldWTWFXSnlZWEo1UGcwS0lD
QWdJQ0FnUEZCeQpaV052YlhCcGJHVmtTR1ZoWkdWeVBnMEtJQ0FnSUNBZ1BDOVFjbVZqYjIxd2FX
eGxaRWhsWVdSbGNqNE5DaUFnSUNBZ0lEeFhZWEp1CmFXNW5UR1YyWld3K1RHVjJaV3cwUEM5WFlY
SnVhVzVuVEdWMlpXdytEUW9nSUNBZ0lDQThSR2x6WVdKc1pWTndaV05wWm1salYyRnkKYm1sdVoz
TStOREV3TURzME1USTNPelF4T0RrN05ESXpPVHMwTWpRME96UXlORFU3TkRVeE1qczBOekF5T3lV
b1JHbHpZV0pzWlZOdwpaV05wWm1salYyRnlibWx1WjNNcFBDOUVhWE5oWW14bFUzQmxZMmxtYVdO
WFlYSnVhVzVuY3o0TkNpQWdJQ0FnSUR4RVpXSjFaMGx1ClptOXliV0YwYVc5dVJtOXliV0YwUGxC
eWIyZHlZVzFFWVhSaFltRnpaVHd2UkdWaWRXZEpibVp2Y20xaGRHbHZia1p2Y20xaGRENE4KQ2lB
Z0lDQWdJRHhVY21WaGRGZGhjbTVwYm1kQmMwVnljbTl5UG5SeWRXVThMMVJ5WldGMFYyRnlibWx1
WjBGelJYSnliM0krRFFvZwpJQ0FnUEM5RGJFTnZiWEJwYkdVK0RRb2dJQ0FnUEV4cGJtcytEUW9n
SUNBZ0lDQThRV1JrYVhScGIyNWhiRVJsY0dWdVpHVnVZMmxsCmN6NWtNMlE1TG14cFlqdGtlR2Qx
YVdRdWJHbGlPeVVvUVdSa2FYUnBiMjVoYkVSbGNHVnVaR1Z1WTJsbGN5azhMMEZrWkdsMGFXOXUK
WVd4RVpYQmxibVJsYm1OcFpYTStEUW9nSUNBZ0lDQThUVzlrZFd4bFJHVm1hVzVwZEdsdmJrWnBi
R1UrYkdsaVJVZE1MbVJsWmp3dgpUVzlrZFd4bFJHVm1hVzVwZEdsdmJrWnBiR1UrRFFvZ0lDQWdJ
Q0E4UkdWc1lYbE1iMkZrUkV4TWN6NGxLRVJsYkdGNVRHOWhaRVJNClRITXBQQzlFWld4aGVVeHZZ
V1JFVEV4elBnMEtJQ0FnSUNBZ1BFZGxibVZ5WVhSbFJHVmlkV2RKYm1admNtMWhkR2x2Ymo1MGNu
VmwKUEM5SFpXNWxjbUYwWlVSbFluVm5TVzVtYjNKdFlYUnBiMjQrRFFvZ0lDQWdJQ0E4VTNWaVUz
bHpkR1Z0UGxkcGJtUnZkM004TDFOMQpZbE41YzNSbGJUNE5DaUFnSUNBZ0lEeFBjSFJwYldsNlpW
SmxabVZ5Wlc1alpYTStkSEoxWlR3dlQzQjBhVzFwZW1WU1pXWmxjbVZ1ClkyVnpQZzBLSUNBZ0lD
QWdQRVZ1WVdKc1pVTlBUVVJCVkVadmJHUnBibWMrZEhKMVpUd3ZSVzVoWW14bFEwOU5SRUZVUm05
c1pHbHUKWno0TkNpQWdJQ0FnSUR4RVlYUmhSWGhsWTNWMGFXOXVVSEpsZG1WdWRHbHZiajROQ2lB
Z0lDQWdJRHd2UkdGMFlVVjRaV04xZEdsdgpibEJ5WlhabGJuUnBiMjQrRFFvZ0lDQWdJQ0E4VkdG
eVoyVjBUV0ZqYUdsdVpUNU5ZV05vYVc1bFdEWTBQQzlVWVhKblpYUk5ZV05vCmFXNWxQZzBLSUNB
Z0lEd3ZUR2x1YXo0TkNpQWdJQ0E4VUc5emRFSjFhV3hrUlhabGJuUStEUW9nSUNBZ0lDQThRMjl0
YldGdVpENGwKTkRCbFkyaHZJRzl1RFFwdGEyUnBjaUFpSkNoUWNtOXFaV04wUkdseUtTNHVYQzR1
WEd4cFlsd2tLRU52Ym1acFozVnlZWFJwYjI0cApYQ0lOQ21OdmNIa2dJaVFvVDNWMFJHbHlLV3hw
WWtWSFRDNWtiR3dpSUNJa0tGQnliMnBsWTNSRWFYSXBMaTVjTGk1Y2JHbGlYQ1FvClEyOXVabWxu
ZFhKaGRHbHZiaWxjSWcwS1kyOXdlU0FpSkNoUGRYUkVhWElwYkdsaVJVZE1MbXhwWWlJZ0lpUW9V
SEp2YW1WamRFUnAKY2lrdUxsd3VMbHhzYVdKY0pDaERiMjVtYVdkMWNtRjBhVzl1S1Z3aURRb2xO
REJsWTJodklHOW1aZzBLUEM5RGIyMXRZVzVrUGcwSwpJQ0FnSUR3dlVHOXpkRUoxYVd4a1JYWmxi
blErRFFvZ0lEd3ZTWFJsYlVSbFptbHVhWFJwYjI1SGNtOTFjRDROQ2lBZ1BFbDBaVzFICmNtOTFj
RDROQ2lBZ0lDQThRMnhEYjIxd2FXeGxJRWx1WTJ4MVpHVTlJa052Ym1acFp5NWpjSEFpSUM4K0RR
b2dJQ0FnUEVOc1EyOXQKY0dsc1pTQkpibU5zZFdSbFBTSXVMbHhEYjIxdGIyNWNaR1ZpZFdjdVkz
QndJaUF2UGcwS0lDQWdJRHhEYkVOdmJYQnBiR1VnU1c1agpiSFZrWlQwaVJHbHpjR3hoZVM1amNI
QWlJQzgrRFFvZ0lDQWdQRU5zUTI5dGNHbHNaU0JKYm1Oc2RXUmxQU0pzYVdKRlIwd3VZM0J3Cklp
QXZQZzBLSUNBZ0lEeERiRU52YlhCcGJHVWdTVzVqYkhWa1pUMGliV0ZwYmk1amNIQWlJQzgrRFFv
Z0lDQWdQRU5zUTI5dGNHbHMKWlNCSmJtTnNkV1JsUFNKVGRYSm1ZV05sTG1Od2NDSWdMejROQ2lB
Z1BDOUpkR1Z0UjNKdmRYQStEUW9nSUR4SmRHVnRSM0p2ZFhBKwpEUW9nSUNBZ1BFTnNTVzVqYkhW
a1pTQkpibU5zZFdSbFBTSkRiMjVtYVdjdWFDSWdMejROQ2lBZ0lDQThRMnhKYm1Oc2RXUmxJRWx1
ClkyeDFaR1U5SWtScGMzQnNZWGt1YUNJZ0x6NE5DaUFnSUNBOFEyeEpibU5zZFdSbElFbHVZMngx
WkdVOUlpNHVYQzR1WEdsdVkyeDEKWkdWY1JVZE1YR1ZuYkM1b0lpQXZQZzBLSUNBZ0lEeERiRWx1
WTJ4MVpHVWdTVzVqYkhWa1pUMGlMaTVjTGk1Y2FXNWpiSFZrWlZ4RgpSMHhjWldkc1pYaDBMbWdp
SUM4K0RRb2dJQ0FnUEVOc1NXNWpiSFZrWlNCSmJtTnNkV1JsUFNJdUxsd3VMbHhwYm1Oc2RXUmxY
RVZIClRGeGxaMnh3YkdGMFptOXliUzVvSWlBdlBnMEtJQ0FnSUR4RGJFbHVZMngxWkdVZ1NXNWpi
SFZrWlQwaWJXRnBiaTVvSWlBdlBnMEsKSUNBZ0lEeERiRWx1WTJ4MVpHVWdTVzVqYkhWa1pUMGlj
bVZ6YjNWeVkyVXVhQ0lnTHo0TkNpQWdJQ0E4UTJ4SmJtTnNkV1JsSUVsdQpZMngxWkdVOUlsTjFj
bVpoWTJVdWFDSWdMejROQ2lBZ0lDQThRMnhKYm1Oc2RXUmxJRWx1WTJ4MVpHVTlJaTR1WEdOdmJX
MXZibHgyClpYSnphVzl1TG1naUlDOCtEUW9nSUR3dlNYUmxiVWR5YjNWd1BnMEtJQ0E4U1hSbGJV
ZHliM1Z3UGcwS0lDQWdJRHhPYjI1bElFbHUKWTJ4MVpHVTlJbXhwWWtWSFRDNWtaV1lpSUM4K0RR
b2dJRHd2U1hSbGJVZHliM1Z3UGcwS0lDQThTWFJsYlVkeWIzVndQZzBLSUNBZwpJRHhTWlhOdmRY
SmpaVU52YlhCcGJHVWdTVzVqYkhWa1pUMGliR2xpUlVkTUxuSmpJaUF2UGcwS0lDQThMMGwwWlcx
SGNtOTFjRDROCkNpQWdQRWwwWlcxSGNtOTFjRDROQ2lBZ0lDQThVSEp2YW1WamRGSmxabVZ5Wlc1
alpTQkpibU5zZFdSbFBTSXVMbHhzYVdKSFRFVlQKZGpKY2JHbGlSMHhGVTNZeUxuWmplSEJ5YjJv
aVBnMEtJQ0FnSUNBZ1BGQnliMnBsWTNRK2UySTFPRGN4WVRkaExUazJPR010TkRKbApNeTFoTXpO
aUxUazRNV1UyWmpRME9HVTNPSDA4TDFCeWIycGxZM1ErRFFvZ0lDQWdJQ0E4VW1WbVpYSmxibU5s
VDNWMGNIVjBRWE56ClpXMWliSGsrWm1Gc2MyVThMMUpsWm1WeVpXNWpaVTkxZEhCMWRFRnpjMlZ0
WW14NVBnMEtJQ0FnSUR3dlVISnZhbVZqZEZKbFptVnkKWlc1alpUNE5DaUFnUEM5SmRHVnRSM0p2
ZFhBK0RRb2dJRHhKYlhCdmNuUWdVSEp2YW1WamREMGlKQ2hXUTFSaGNtZGxkSE5RWVhSbwpLVnhO
YVdOeWIzTnZablF1UTNCd0xuUmhjbWRsZEhNaUlDOCtEUW9nSUR4SmJYQnZjblJIY205MWNDQk1Z
V0psYkQwaVJYaDBaVzV6CmFXOXVWR0Z5WjJWMGN5SStEUW9nSUR3dlNXMXdiM0owUjNKdmRYQStE
UW84TDFCeWIycGxZM1ErCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9saWJFR0wudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUg
bWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi94bWwK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjeHByb2ou
ZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L2xpYkVHTC52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
bGliRUdMLnZjeHByb2ouZmlsdGVycwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMj
IC0wLDAgKzEgIyMKK2FwcGxpY2F0aW9uL3htbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKCjc3dS9QRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpH
bHVaejBpZFhSbUxUZ2lQejROQ2p4UWNtOXFaV04wSUZSdmIyeHoKVm1WeWMybHZiajBpTkM0d0lp
QjRiV3h1Y3owaWFIUjBjRG92TDNOamFHVnRZWE11YldsamNtOXpiMlowTG1OdmJTOWtaWFpsYkc5
dwpaWEl2YlhOaWRXbHNaQzh5TURBeklqNE5DaUFnUEVsMFpXMUhjbTkxY0Q0TkNpQWdJQ0E4Um1s
c2RHVnlJRWx1WTJ4MVpHVTlJbE52CmRYSmpaU0JHYVd4bGN5SStEUW9nSUNBZ0lDQThWVzVwY1hW
bFNXUmxiblJwWm1sbGNqNTdORVpETnpNM1JqRXRRemRCTlMwME16YzIKTFVFd05qWXRNa0V6TWtR
M05USkJNa1pHZlR3dlZXNXBjWFZsU1dSbGJuUnBabWxsY2o0TkNpQWdJQ0FnSUR4RmVIUmxibk5w
YjI1egpQbU53Y0R0ak8yTmpPMk40ZUR0a1pXWTdiMlJzTzJsa2JEdG9jR283WW1GME8yRnpiVHRo
YzIxNFBDOUZlSFJsYm5OcGIyNXpQZzBLCklDQWdJRHd2Um1sc2RHVnlQZzBLSUNBZ0lEeEdhV3gw
WlhJZ1NXNWpiSFZrWlQwaVNHVmhaR1Z5SUVacGJHVnpJajROQ2lBZ0lDQWcKSUR4VmJtbHhkV1ZK
WkdWdWRHbG1hV1Z5UG5zNU16azVOVE00TUMwNE9VSkVMVFJpTURRdE9EaEZRaTAyTWpWR1FrVTFN
a1ZDUmtKOQpQQzlWYm1seGRXVkpaR1Z1ZEdsbWFXVnlQZzBLSUNBZ0lDQWdQRVY0ZEdWdWMybHZi
bk0rYUR0b2NIQTdhSGg0TzJodE8ybHViRHRwCmJtTTdlSE5rUEM5RmVIUmxibk5wYjI1elBnMEtJ
Q0FnSUR3dlJtbHNkR1Z5UGcwS0lDQThMMGwwWlcxSGNtOTFjRDROQ2lBZ1BFbDAKWlcxSGNtOTFj
RDROQ2lBZ0lDQThRMnhEYjIxd2FXeGxJRWx1WTJ4MVpHVTlJa052Ym1acFp5NWpjSEFpUGcwS0lD
QWdJQ0FnUEVacApiSFJsY2o1VGIzVnlZMlVnUm1sc1pYTThMMFpwYkhSbGNqNE5DaUFnSUNBOEww
TnNRMjl0Y0dsc1pUNE5DaUFnSUNBOFEyeERiMjF3CmFXeGxJRWx1WTJ4MVpHVTlJaTR1WEVOdmJX
MXZibHhrWldKMVp5NWpjSEFpUGcwS0lDQWdJQ0FnUEVacGJIUmxjajVUYjNWeVkyVWcKUm1sc1pY
TThMMFpwYkhSbGNqNE5DaUFnSUNBOEwwTnNRMjl0Y0dsc1pUNE5DaUFnSUNBOFEyeERiMjF3YVd4
bElFbHVZMngxWkdVOQpJa1JwYzNCc1lYa3VZM0J3SWo0TkNpQWdJQ0FnSUR4R2FXeDBaWEkrVTI5
MWNtTmxJRVpwYkdWelBDOUdhV3gwWlhJK0RRb2dJQ0FnClBDOURiRU52YlhCcGJHVStEUW9nSUNB
Z1BFTnNRMjl0Y0dsc1pTQkpibU5zZFdSbFBTSnNhV0pGUjB3dVkzQndJajROQ2lBZ0lDQWcKSUR4
R2FXeDBaWEkrVTI5MWNtTmxJRVpwYkdWelBDOUdhV3gwWlhJK0RRb2dJQ0FnUEM5RGJFTnZiWEJw
YkdVK0RRb2dJQ0FnUEVOcwpRMjl0Y0dsc1pTQkpibU5zZFdSbFBTSnRZV2x1TG1Od2NDSStEUW9n
SUNBZ0lDQThSbWxzZEdWeVBsTnZkWEpqWlNCR2FXeGxjend2ClJtbHNkR1Z5UGcwS0lDQWdJRHd2
UTJ4RGIyMXdhV3hsUGcwS0lDQWdJRHhEYkVOdmJYQnBiR1VnU1c1amJIVmtaVDBpVTNWeVptRmoK
WlM1amNIQWlQZzBLSUNBZ0lDQWdQRVpwYkhSbGNqNVRiM1Z5WTJVZ1JtbHNaWE04TDBacGJIUmxj
ajROQ2lBZ0lDQThMME5zUTI5dApjR2xzWlQ0TkNpQWdQQzlKZEdWdFIzSnZkWEErRFFvZ0lEeEpk
R1Z0UjNKdmRYQStEUW9nSUNBZ1BFTnNTVzVqYkhWa1pTQkpibU5zCmRXUmxQU0pEYjI1bWFXY3Vh
Q0krRFFvZ0lDQWdJQ0E4Um1sc2RHVnlQa2hsWVdSbGNpQkdhV3hsY3p3dlJtbHNkR1Z5UGcwS0lD
QWcKSUR3dlEyeEpibU5zZFdSbFBnMEtJQ0FnSUR4RGJFbHVZMngxWkdVZ1NXNWpiSFZrWlQwaVJH
bHpjR3hoZVM1b0lqNE5DaUFnSUNBZwpJRHhHYVd4MFpYSStTR1ZoWkdWeUlFWnBiR1Z6UEM5R2FX
eDBaWEkrRFFvZ0lDQWdQQzlEYkVsdVkyeDFaR1UrRFFvZ0lDQWdQRU5zClNXNWpiSFZrWlNCSmJt
TnNkV1JsUFNJdUxsd3VMbHhwYm1Oc2RXUmxYRVZIVEZ4bFoyd3VhQ0krRFFvZ0lDQWdJQ0E4Um1s
c2RHVnkKUGtobFlXUmxjaUJHYVd4bGN6d3ZSbWxzZEdWeVBnMEtJQ0FnSUR3dlEyeEpibU5zZFdS
bFBnMEtJQ0FnSUR4RGJFbHVZMngxWkdVZwpTVzVqYkhWa1pUMGlMaTVjTGk1Y2FXNWpiSFZrWlZ4
RlIweGNaV2RzWlhoMExtZ2lQZzBLSUNBZ0lDQWdQRVpwYkhSbGNqNUlaV0ZrClpYSWdSbWxzWlhN
OEwwWnBiSFJsY2o0TkNpQWdJQ0E4TDBOc1NXNWpiSFZrWlQ0TkNpQWdJQ0E4UTJ4SmJtTnNkV1Js
SUVsdVkyeDEKWkdVOUlpNHVYQzR1WEdsdVkyeDFaR1ZjUlVkTVhHVm5iSEJzWVhSbWIzSnRMbWdp
UGcwS0lDQWdJQ0FnUEVacGJIUmxjajVJWldGawpaWElnUm1sc1pYTThMMFpwYkhSbGNqNE5DaUFn
SUNBOEwwTnNTVzVqYkhWa1pUNE5DaUFnSUNBOFEyeEpibU5zZFdSbElFbHVZMngxClpHVTlJbTFo
YVc0dWFDSStEUW9nSUNBZ0lDQThSbWxzZEdWeVBraGxZV1JsY2lCR2FXeGxjend2Um1sc2RHVnlQ
ZzBLSUNBZ0lEd3YKUTJ4SmJtTnNkV1JsUGcwS0lDQWdJRHhEYkVsdVkyeDFaR1VnU1c1amJIVmta
VDBpY21WemIzVnlZMlV1YUNJK0RRb2dJQ0FnSUNBOApSbWxzZEdWeVBraGxZV1JsY2lCR2FXeGxj
end2Um1sc2RHVnlQZzBLSUNBZ0lEd3ZRMnhKYm1Oc2RXUmxQZzBLSUNBZ0lEeERiRWx1ClkyeDFa
R1VnU1c1amJIVmtaVDBpVTNWeVptRmpaUzVvSWo0TkNpQWdJQ0FnSUR4R2FXeDBaWEkrU0dWaFpH
VnlJRVpwYkdWelBDOUcKYVd4MFpYSStEUW9nSUNBZ1BDOURiRWx1WTJ4MVpHVStEUW9nSUNBZ1BF
TnNTVzVqYkhWa1pTQkpibU5zZFdSbFBTSXVMbHhqYjIxdApiMjVjZG1WeWMybHZiaTVvSWo0TkNp
QWdJQ0FnSUR4R2FXeDBaWEkrU0dWaFpHVnlJRVpwYkdWelBDOUdhV3gwWlhJK0RRb2dJQ0FnClBD
OURiRWx1WTJ4MVpHVStEUW9nSUR3dlNYUmxiVWR5YjNWd1BnMEtJQ0E4U1hSbGJVZHliM1Z3UGcw
S0lDQWdJRHhPYjI1bElFbHUKWTJ4MVpHVTlJbXhwWWtWSFRDNWtaV1lpUGcwS0lDQWdJQ0FnUEVa
cGJIUmxjajVUYjNWeVkyVWdSbWxzWlhNOEwwWnBiSFJsY2o0TgpDaUFnSUNBOEwwNXZibVUrRFFv
Z0lEd3ZTWFJsYlVkeWIzVndQZzBLSUNBOFNYUmxiVWR5YjNWd1BnMEtJQ0FnSUR4U1pYTnZkWEpq
ClpVTnZiWEJwYkdVZ1NXNWpiSFZrWlQwaWJHbGlSVWRNTG5KaklpQXZQZzBLSUNBOEwwbDBaVzFI
Y205MWNENE5Dand2VUhKdmFtVmoKZEQ0PQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxh
eTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0
aW9uL3htbApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL2xpYkdMRVN2Mi52Y3hwcm9qCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmN4cHJvagkod29ya2luZyBjb3B5
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIudmN4cHJvagpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQoj
IyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2
bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIworYXBwbGljYXRpb24veG1sClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKCjc3dS9QRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpH
bHVaejBpZFhSbUxUZ2lQejROQ2p4UWNtOXFaV04wSUVSbFptRjEKYkhSVVlYSm5aWFJ6UFNKQ2RX
bHNaQ0lnVkc5dmJITldaWEp6YVc5dVBTSTBMakFpSUhodGJHNXpQU0pvZEhSd09pOHZjMk5vWlcx
aApjeTV0YVdOeWIzTnZablF1WTI5dEwyUmxkbVZzYjNCbGNpOXRjMkoxYVd4a0x6SXdNRE1pUGcw
S0lDQThTWFJsYlVkeWIzVndJRXhoClltVnNQU0pRY205cVpXTjBRMjl1Wm1sbmRYSmhkR2x2Ym5N
aVBnMEtJQ0FnSUR4UWNtOXFaV04wUTI5dVptbG5kWEpoZEdsdmJpQkoKYm1Oc2RXUmxQU0pFWldK
MVozeFhhVzR6TWlJK0RRb2dJQ0FnSUNBOFEyOXVabWxuZFhKaGRHbHZiajVFWldKMVp6d3ZRMjl1
Wm1sbgpkWEpoZEdsdmJqNE5DaUFnSUNBZ0lEeFFiR0YwWm05eWJUNVhhVzR6TWp3dlVHeGhkR1p2
Y20wK0RRb2dJQ0FnUEM5UWNtOXFaV04wClEyOXVabWxuZFhKaGRHbHZiajROQ2lBZ0lDQThVSEp2
YW1WamRFTnZibVpwWjNWeVlYUnBiMjRnU1c1amJIVmtaVDBpUkdWaWRXZDgKZURZMElqNE5DaUFn
SUNBZ0lEeERiMjVtYVdkMWNtRjBhVzl1UGtSbFluVm5QQzlEYjI1bWFXZDFjbUYwYVc5dVBnMEtJ
Q0FnSUNBZwpQRkJzWVhSbWIzSnRQbmcyTkR3dlVHeGhkR1p2Y20wK0RRb2dJQ0FnUEM5UWNtOXFa
V04wUTI5dVptbG5kWEpoZEdsdmJqNE5DaUFnCklDQThVSEp2YW1WamRFTnZibVpwWjNWeVlYUnBi
MjRnU1c1amJIVmtaVDBpVW1Wc1pXRnpaWHhYYVc0ek1pSStEUW9nSUNBZ0lDQTgKUTI5dVptbG5k
WEpoZEdsdmJqNVNaV3hsWVhObFBDOURiMjVtYVdkMWNtRjBhVzl1UGcwS0lDQWdJQ0FnUEZCc1lY
Um1iM0p0UGxkcApiak15UEM5UWJHRjBabTl5YlQ0TkNpQWdJQ0E4TDFCeWIycGxZM1JEYjI1bWFX
ZDFjbUYwYVc5dVBnMEtJQ0FnSUR4UWNtOXFaV04wClEyOXVabWxuZFhKaGRHbHZiaUJKYm1Oc2RX
UmxQU0pTWld4bFlYTmxmSGcyTkNJK0RRb2dJQ0FnSUNBOFEyOXVabWxuZFhKaGRHbHYKYmo1U1pX
eGxZWE5sUEM5RGIyNW1hV2QxY21GMGFXOXVQZzBLSUNBZ0lDQWdQRkJzWVhSbWIzSnRQbmcyTkR3
dlVHeGhkR1p2Y20wKwpEUW9nSUNBZ1BDOVFjbTlxWldOMFEyOXVabWxuZFhKaGRHbHZiajROQ2lB
Z1BDOUpkR1Z0UjNKdmRYQStEUW9nSUR4UWNtOXdaWEowCmVVZHliM1Z3SUV4aFltVnNQU0pIYkc5
aVlXeHpJajROQ2lBZ0lDQThVSEp2YW1WamRFZDFhV1ErZTBJMU9EY3hRVGRCTFRrMk9FTXQKTkRK
Rk15MUJNek5DTFRrNE1VVTJSalEwT0VVM09IMDhMMUJ5YjJwbFkzUkhkV2xrUGcwS0lDQWdJRHhT
YjI5MFRtRnRaWE53WVdObApQbXhwWWtkTVJWTjJNand2VW05dmRFNWhiV1Z6Y0dGalpUNE5DaUFn
SUNBOFMyVjVkMjl5WkQ1WGFXNHpNbEJ5YjJvOEwwdGxlWGR2CmNtUStEUW9nSUR3dlVISnZjR1Z5
ZEhsSGNtOTFjRDROQ2lBZ1BFbHRjRzl5ZENCUWNtOXFaV04wUFNJa0tGWkRWR0Z5WjJWMGMxQmgK
ZEdncFhFMXBZM0p2YzI5bWRDNURjSEF1UkdWbVlYVnNkQzV3Y205d2N5SWdMejROQ2lBZ1BGQnli
M0JsY25SNVIzSnZkWEFnUTI5dQpaR2wwYVc5dVBTSW5KQ2hEYjI1bWFXZDFjbUYwYVc5dUtYd2tL
RkJzWVhSbWIzSnRLU2M5UFNkU1pXeGxZWE5sZkZkcGJqTXlKeUlnClRHRmlaV3c5SWtOdmJtWnBa
M1Z5WVhScGIyNGlQZzBLSUNBZ0lEeERiMjVtYVdkMWNtRjBhVzl1Vkhsd1pUNUVlVzVoYldsalRH
bGkKY21GeWVUd3ZRMjl1Wm1sbmRYSmhkR2x2YmxSNWNHVStEUW9nSUNBZ1BFTm9ZWEpoWTNSbGNs
TmxkRDVWYm1samIyUmxQQzlEYUdGeQpZV04wWlhKVFpYUStEUW9nSUNBZ1BGZG9iMnhsVUhKdloz
SmhiVTl3ZEdsdGFYcGhkR2x2Ymo1MGNuVmxQQzlYYUc5c1pWQnliMmR5CllXMVBjSFJwYldsNllY
UnBiMjQrRFFvZ0lEd3ZVSEp2Y0dWeWRIbEhjbTkxY0Q0TkNpQWdQRkJ5YjNCbGNuUjVSM0p2ZFhB
Z1EyOXUKWkdsMGFXOXVQU0luSkNoRGIyNW1hV2QxY21GMGFXOXVLWHdrS0ZCc1lYUm1iM0p0S1Nj
OVBTZEVaV0oxWjN4WGFXNHpNaWNpSUV4aApZbVZzUFNKRGIyNW1hV2QxY21GMGFXOXVJajROQ2lB
Z0lDQThRMjl1Wm1sbmRYSmhkR2x2YmxSNWNHVStSSGx1WVcxcFkweHBZbkpoCmNuazhMME52Ym1a
cFozVnlZWFJwYjI1VWVYQmxQZzBLSUNBZ0lEeERhR0Z5WVdOMFpYSlRaWFErVlc1cFkyOWtaVHd2
UTJoaGNtRmoKZEdWeVUyVjBQZzBLSUNBOEwxQnliM0JsY25SNVIzSnZkWEErRFFvZ0lEeFFjbTl3
WlhKMGVVZHliM1Z3SUVOdmJtUnBkR2x2YmowaQpKeVFvUTI5dVptbG5kWEpoZEdsdmJpbDhKQ2hR
YkdGMFptOXliU2tuUFQwblVtVnNaV0Z6Wlh4NE5qUW5JaUJNWVdKbGJEMGlRMjl1ClptbG5kWEpo
ZEdsdmJpSStEUW9nSUNBZ1BFTnZibVpwWjNWeVlYUnBiMjVVZVhCbFBrUjVibUZ0YVdOTWFXSnlZ
WEo1UEM5RGIyNW0KYVdkMWNtRjBhVzl1Vkhsd1pUNE5DaUFnSUNBOFEyaGhjbUZqZEdWeVUyVjBQ
bFZ1YVdOdlpHVThMME5vWVhKaFkzUmxjbE5sZEQ0TgpDaUFnSUNBOFYyaHZiR1ZRY205bmNtRnRU
M0IwYVcxcGVtRjBhVzl1UG5SeWRXVThMMWRvYjJ4bFVISnZaM0poYlU5d2RHbHRhWHBoCmRHbHZi
ajROQ2lBZ1BDOVFjbTl3WlhKMGVVZHliM1Z3UGcwS0lDQThVSEp2Y0dWeWRIbEhjbTkxY0NCRGIy
NWthWFJwYjI0OUlpY2sKS0VOdmJtWnBaM1Z5WVhScGIyNHBmQ1FvVUd4aGRHWnZjbTBwSnowOUow
UmxZblZuZkhnMk5DY2lJRXhoWW1Wc1BTSkRiMjVtYVdkMQpjbUYwYVc5dUlqNE5DaUFnSUNBOFEy
OXVabWxuZFhKaGRHbHZibFI1Y0dVK1JIbHVZVzFwWTB4cFluSmhjbms4TDBOdmJtWnBaM1Z5CllY
UnBiMjVVZVhCbFBnMEtJQ0FnSUR4RGFHRnlZV04wWlhKVFpYUStWVzVwWTI5a1pUd3ZRMmhoY21G
amRHVnlVMlYwUGcwS0lDQTgKTDFCeWIzQmxjblI1UjNKdmRYQStEUW9nSUR4SmJYQnZjblFnVUhK
dmFtVmpkRDBpSkNoV1ExUmhjbWRsZEhOUVlYUm9LVnhOYVdOeQpiM052Wm5RdVEzQndMbkJ5YjNC
eklpQXZQZzBLSUNBOFNXMXdiM0owUjNKdmRYQWdUR0ZpWld3OUlrVjRkR1Z1YzJsdmJsTmxkSFJw
CmJtZHpJajROQ2lBZ1BDOUpiWEJ2Y25SSGNtOTFjRDROQ2lBZ1BFbHRjRzl5ZEVkeWIzVndJRU52
Ym1ScGRHbHZiajBpSnlRb1EyOXUKWm1sbmRYSmhkR2x2YmlsOEpDaFFiR0YwWm05eWJTa25QVDBu
VW1Wc1pXRnpaWHhYYVc0ek1pY2lJRXhoWW1Wc1BTSlFjbTl3WlhKMAplVk5vWldWMGN5SStEUW9n
SUNBZ1BFbHRjRzl5ZENCUWNtOXFaV04wUFNJa0tGVnpaWEpTYjI5MFJHbHlLVnhOYVdOeWIzTnZa
blF1ClEzQndMaVFvVUd4aGRHWnZjbTBwTG5WelpYSXVjSEp2Y0hNaUlFTnZibVJwZEdsdmJqMGla
WGhwYzNSektDY2tLRlZ6WlhKU2IyOTAKUkdseUtWeE5hV055YjNOdlpuUXVRM0J3TGlRb1VHeGhk
R1p2Y20wcExuVnpaWEl1Y0hKdmNITW5LU0lnVEdGaVpXdzlJa3h2WTJGcwpRWEJ3UkdGMFlWQnNZ
WFJtYjNKdElpQXZQZzBLSUNBOEwwbHRjRzl5ZEVkeWIzVndQZzBLSUNBOFNXMXdiM0owUjNKdmRY
QWdRMjl1ClpHbDBhVzl1UFNJbkpDaERiMjVtYVdkMWNtRjBhVzl1S1h3a0tGQnNZWFJtYjNKdEtT
YzlQU2RFWldKMVozeFhhVzR6TWljaUlFeGgKWW1Wc1BTSlFjbTl3WlhKMGVWTm9aV1YwY3lJK0RR
b2dJQ0FnUEVsdGNHOXlkQ0JRY205cVpXTjBQU0lrS0ZWelpYSlNiMjkwUkdseQpLVnhOYVdOeWIz
TnZablF1UTNCd0xpUW9VR3hoZEdadmNtMHBMblZ6WlhJdWNISnZjSE1pSUVOdmJtUnBkR2x2Ymow
aVpYaHBjM1J6CktDY2tLRlZ6WlhKU2IyOTBSR2x5S1Z4TmFXTnliM052Wm5RdVEzQndMaVFvVUd4
aGRHWnZjbTBwTG5WelpYSXVjSEp2Y0hNbktTSWcKVEdGaVpXdzlJa3h2WTJGc1FYQndSR0YwWVZC
c1lYUm1iM0p0SWlBdlBnMEtJQ0E4TDBsdGNHOXlkRWR5YjNWd1BnMEtJQ0E4U1cxdwpiM0owUjNK
dmRYQWdRMjl1WkdsMGFXOXVQU0luSkNoRGIyNW1hV2QxY21GMGFXOXVLWHdrS0ZCc1lYUm1iM0p0
S1NjOVBTZFNaV3hsCllYTmxmSGcyTkNjaUlFeGhZbVZzUFNKUWNtOXdaWEowZVZOb1pXVjBjeUkr
RFFvZ0lDQWdQRWx0Y0c5eWRDQlFjbTlxWldOMFBTSWsKS0ZWelpYSlNiMjkwUkdseUtWeE5hV055
YjNOdlpuUXVRM0J3TGlRb1VHeGhkR1p2Y20wcExuVnpaWEl1Y0hKdmNITWlJRU52Ym1ScApkR2x2
YmowaVpYaHBjM1J6S0Nja0tGVnpaWEpTYjI5MFJHbHlLVnhOYVdOeWIzTnZablF1UTNCd0xpUW9V
R3hoZEdadmNtMHBMblZ6ClpYSXVjSEp2Y0hNbktTSWdUR0ZpWld3OUlreHZZMkZzUVhCd1JHRjBZ
VkJzWVhSbWIzSnRJaUF2UGcwS0lDQThMMGx0Y0c5eWRFZHkKYjNWd1BnMEtJQ0E4U1cxd2IzSjBS
M0p2ZFhBZ1EyOXVaR2wwYVc5dVBTSW5KQ2hEYjI1bWFXZDFjbUYwYVc5dUtYd2tLRkJzWVhSbQpi
M0p0S1NjOVBTZEVaV0oxWjN4NE5qUW5JaUJNWVdKbGJEMGlVSEp2Y0dWeWRIbFRhR1ZsZEhNaVBn
MEtJQ0FnSUR4SmJYQnZjblFnClVISnZhbVZqZEQwaUpDaFZjMlZ5VW05dmRFUnBjaWxjVFdsamNt
OXpiMlowTGtOd2NDNGtLRkJzWVhSbWIzSnRLUzUxYzJWeUxuQnkKYjNCeklpQkRiMjVrYVhScGIy
NDlJbVY0YVhOMGN5Z25KQ2hWYzJWeVVtOXZkRVJwY2lsY1RXbGpjbTl6YjJaMExrTndjQzRrS0ZC
cwpZWFJtYjNKdEtTNTFjMlZ5TG5CeWIzQnpKeWtpSUV4aFltVnNQU0pNYjJOaGJFRndjRVJoZEdG
UWJHRjBabTl5YlNJZ0x6NE5DaUFnClBDOUpiWEJ2Y25SSGNtOTFjRDROQ2lBZ1BGQnliM0JsY25S
NVIzSnZkWEFnVEdGaVpXdzlJbFZ6WlhKTllXTnliM01pSUM4K0RRb2cKSUR4UWNtOXdaWEowZVVk
eWIzVndQZzBLSUNBZ0lEeGZVSEp2YW1WamRFWnBiR1ZXWlhKemFXOXVQakV3TGpBdU5EQXlNVGt1
TVR3dgpYMUJ5YjJwbFkzUkdhV3hsVm1WeWMybHZiajROQ2lBZ0lDQThUM1YwUkdseUlFTnZibVJw
ZEdsdmJqMGlKeVFvUTI5dVptbG5kWEpoCmRHbHZiaWw4SkNoUWJHRjBabTl5YlNrblBUMG5SR1Zp
ZFdkOFYybHVNekluSWo0a0tGTnZiSFYwYVc5dVJHbHlLU1FvUTI5dVptbG4KZFhKaGRHbHZiaWxj
UEM5UGRYUkVhWEkrRFFvZ0lDQWdQRWx1ZEVScGNpQkRiMjVrYVhScGIyNDlJaWNrS0VOdmJtWnBa
M1Z5WVhScApiMjRwZkNRb1VHeGhkR1p2Y20wcEp6MDlKMFJsWW5WbmZGZHBiak15SnlJK0pDaERi
MjVtYVdkMWNtRjBhVzl1S1Z3OEwwbHVkRVJwCmNqNE5DaUFnSUNBOFRHbHVhMGx1WTNKbGJXVnVk
R0ZzSUVOdmJtUnBkR2x2YmowaUp5UW9RMjl1Wm1sbmRYSmhkR2x2YmlsOEpDaFEKYkdGMFptOXli
U2tuUFQwblJHVmlkV2Q4VjJsdU16SW5JajUwY25WbFBDOU1hVzVyU1c1amNtVnRaVzUwWVd3K0RR
b2dJQ0FnUEU5MQpkRVJwY2lCRGIyNWthWFJwYjI0OUlpY2tLRU52Ym1acFozVnlZWFJwYjI0cGZD
UW9VR3hoZEdadmNtMHBKejA5SjFKbGJHVmhjMlY4ClYybHVNekluSWo0a0tGTnZiSFYwYVc5dVJH
bHlLU1FvUTI5dVptbG5kWEpoZEdsdmJpbGNQQzlQZFhSRWFYSStEUW9nSUNBZ1BFbHUKZEVScGNp
QkRiMjVrYVhScGIyNDlJaWNrS0VOdmJtWnBaM1Z5WVhScGIyNHBmQ1FvVUd4aGRHWnZjbTBwSnow
OUoxSmxiR1ZoYzJWOApWMmx1TXpJbklqNGtLRU52Ym1acFozVnlZWFJwYjI0cFhEd3ZTVzUwUkds
eVBnMEtJQ0FnSUR4TWFXNXJTVzVqY21WdFpXNTBZV3dnClEyOXVaR2wwYVc5dVBTSW5KQ2hEYjI1
bWFXZDFjbUYwYVc5dUtYd2tLRkJzWVhSbWIzSnRLU2M5UFNkU1pXeGxZWE5sZkZkcGJqTXkKSnlJ
K1ptRnNjMlU4TDB4cGJtdEpibU55WlcxbGJuUmhiRDROQ2lBZ0lDQThUM1YwUkdseUlFTnZibVJw
ZEdsdmJqMGlKeVFvUTI5dQpabWxuZFhKaGRHbHZiaWw4SkNoUWJHRjBabTl5YlNrblBUMG5SR1Zp
ZFdkOGVEWTBKeUkrSkNoVGIyeDFkR2x2YmtScGNpa2tLRkJzCllYUm1iM0p0S1Z3a0tFTnZibVpw
WjNWeVlYUnBiMjRwWER3dlQzVjBSR2x5UGcwS0lDQWdJRHhKYm5SRWFYSWdRMjl1WkdsMGFXOXUK
UFNJbkpDaERiMjVtYVdkMWNtRjBhVzl1S1h3a0tGQnNZWFJtYjNKdEtTYzlQU2RFWldKMVozeDRO
alFuSWo0a0tGQnNZWFJtYjNKdApLVndrS0VOdmJtWnBaM1Z5WVhScGIyNHBYRHd2U1c1MFJHbHlQ
ZzBLSUNBZ0lEeE1hVzVyU1c1amNtVnRaVzUwWVd3Z1EyOXVaR2wwCmFXOXVQU0luSkNoRGIyNW1h
V2QxY21GMGFXOXVLWHdrS0ZCc1lYUm1iM0p0S1NjOVBTZEVaV0oxWjN4NE5qUW5JajUwY25WbFBD
OU0KYVc1clNXNWpjbVZ0Wlc1MFlXdytEUW9nSUNBZ1BFOTFkRVJwY2lCRGIyNWthWFJwYjI0OUlp
Y2tLRU52Ym1acFozVnlZWFJwYjI0cApmQ1FvVUd4aGRHWnZjbTBwSnowOUoxSmxiR1ZoYzJWOGVE
WTBKeUkrSkNoVGIyeDFkR2x2YmtScGNpa2tLRkJzWVhSbWIzSnRLVndrCktFTnZibVpwWjNWeVlY
UnBiMjRwWER3dlQzVjBSR2x5UGcwS0lDQWdJRHhKYm5SRWFYSWdRMjl1WkdsMGFXOXVQU0luSkNo
RGIyNW0KYVdkMWNtRjBhVzl1S1h3a0tGQnNZWFJtYjNKdEtTYzlQU2RTWld4bFlYTmxmSGcyTkNj
aVBpUW9VR3hoZEdadmNtMHBYQ1FvUTI5dQpabWxuZFhKaGRHbHZiaWxjUEM5SmJuUkVhWEkrRFFv
Z0lDQWdQRXhwYm10SmJtTnlaVzFsYm5SaGJDQkRiMjVrYVhScGIyNDlJaWNrCktFTnZibVpwWjNW
eVlYUnBiMjRwZkNRb1VHeGhkR1p2Y20wcEp6MDlKMUpsYkdWaGMyVjhlRFkwSnlJK1ptRnNjMlU4
TDB4cGJtdEoKYm1OeVpXMWxiblJoYkQ0TkNpQWdJQ0E4U1c1amJIVmtaVkJoZEdnZ1EyOXVaR2ww
YVc5dVBTSW5KQ2hEYjI1bWFXZDFjbUYwYVc5dQpLWHdrS0ZCc1lYUm1iM0p0S1NjOVBTZFNaV3hs
WVhObGZIZzJOQ2NpUGlRb1NXNWpiSFZrWlZCaGRHZ3BQQzlKYm1Oc2RXUmxVR0YwCmFENE5DaUFn
SUNBOFRHbGljbUZ5ZVZCaGRHZ2dRMjl1WkdsMGFXOXVQU0luSkNoRGIyNW1hV2QxY21GMGFXOXVL
WHdrS0ZCc1lYUm0KYjNKdEtTYzlQU2RTWld4bFlYTmxmSGcyTkNjaVBpUW9UR2xpY21GeWVWQmhk
R2dwUEM5TWFXSnlZWEo1VUdGMGFENE5DaUFnSUNBOApTVzVqYkhWa1pWQmhkR2dnUTI5dVpHbDBh
Vzl1UFNJbkpDaERiMjVtYVdkMWNtRjBhVzl1S1h3a0tGQnNZWFJtYjNKdEtTYzlQU2RFClpXSjFa
M3g0TmpRbklqNGtLRWx1WTJ4MVpHVlFZWFJvS1R3dlNXNWpiSFZrWlZCaGRHZytEUW9nSUNBZ1BF
eHBZbkpoY25sUVlYUm8KSUVOdmJtUnBkR2x2YmowaUp5UW9RMjl1Wm1sbmRYSmhkR2x2YmlsOEpD
aFFiR0YwWm05eWJTa25QVDBuUkdWaWRXZDhlRFkwSnlJKwpKQ2hNYVdKeVlYSjVVR0YwYUNrOEww
eHBZbkpoY25sUVlYUm9QZzBLSUNBZ0lEeEpibU5zZFdSbFVHRjBhQ0JEYjI1a2FYUnBiMjQ5Cklp
Y2tLRU52Ym1acFozVnlZWFJwYjI0cGZDUW9VR3hoZEdadmNtMHBKejA5SjBSbFluVm5mRmRwYmpN
eUp5SStKQ2hKYm1Oc2RXUmwKVUdGMGFDazhMMGx1WTJ4MVpHVlFZWFJvUGcwS0lDQWdJRHhKYm1O
c2RXUmxVR0YwYUNCRGIyNWthWFJwYjI0OUlpY2tLRU52Ym1acApaM1Z5WVhScGIyNHBmQ1FvVUd4
aGRHWnZjbTBwSnowOUoxSmxiR1ZoYzJWOFYybHVNekluSWo0a0tFbHVZMngxWkdWUVlYUm9LVHd2
ClNXNWpiSFZrWlZCaGRHZytEUW9nSUNBZ1BFeHBZbkpoY25sUVlYUm9JRU52Ym1ScGRHbHZiajBp
SnlRb1EyOXVabWxuZFhKaGRHbHYKYmlsOEpDaFFiR0YwWm05eWJTa25QVDBuUkdWaWRXZDhWMmx1
TXpJbklqNGtLRXhwWW5KaGNubFFZWFJvS1R3dlRHbGljbUZ5ZVZCaApkR2crRFFvZ0lDQWdQRXhw
WW5KaGNubFFZWFJvSUVOdmJtUnBkR2x2YmowaUp5UW9RMjl1Wm1sbmRYSmhkR2x2YmlsOEpDaFFi
R0YwClptOXliU2tuUFQwblVtVnNaV0Z6Wlh4WGFXNHpNaWNpUGlRb1RHbGljbUZ5ZVZCaGRHZ3BQ
QzlNYVdKeVlYSjVVR0YwYUQ0TkNpQWcKUEM5UWNtOXdaWEowZVVkeWIzVndQZzBLSUNBOFNYUmxi
VVJsWm1sdWFYUnBiMjVIY205MWNDQkRiMjVrYVhScGIyNDlJaWNrS0VOdgpibVpwWjNWeVlYUnBi
MjRwZkNRb1VHeGhkR1p2Y20wcEp6MDlKMFJsWW5WbmZGZHBiak15SnlJK0RRb2dJQ0FnUEVOc1Ey
OXRjR2xzClpUNE5DaUFnSUNBZ0lEeFBjSFJwYldsNllYUnBiMjQrUkdsellXSnNaV1E4TDA5d2RH
bHRhWHBoZEdsdmJqNE5DaUFnSUNBZ0lEeEIKWkdScGRHbHZibUZzU1c1amJIVmtaVVJwY21WamRH
OXlhV1Z6UGlRb1VISnZhbVZqZEVScGNpa3ZMaTQ3SUNRb1VISnZhbVZqZEVScApjaWt2TGk0dkxp
NHZhVzVqYkhWa1pUc2xLRUZrWkdsMGFXOXVZV3hKYm1Oc2RXUmxSR2x5WldOMGIzSnBaWE1wUEM5
QlpHUnBkR2x2CmJtRnNTVzVqYkhWa1pVUnBjbVZqZEc5eWFXVnpQZzBLSUNBZ0lDQWdQRkJ5WlhC
eWIyTmxjM052Y2tSbFptbHVhWFJwYjI1elBsZEoKVGpNeU8xOUVSVUpWUnp0ZlYwbE9SRTlYVXp0
ZlZWTlNSRXhNTzB4SlFrZE1SVk5XTWw5RldGQlBVbFJUTzE5RFVsUmZVMFZEVlZKRgpYMDVQWDBS
RlVGSkZRMEZVUlR0T1QwMUpUazFCV0RzbEtGQnlaWEJ5YjJObGMzTnZja1JsWm1sdWFYUnBiMjV6
S1R3dlVISmxjSEp2ClkyVnpjMjl5UkdWbWFXNXBkR2x2Ym5NK0RRb2dJQ0FnSUNBOFRXbHVhVzFo
YkZKbFluVnBiR1ErZEhKMVpUd3ZUV2x1YVcxaGJGSmwKWW5WcGJHUStEUW9nSUNBZ0lDQThRbUZ6
YVdOU2RXNTBhVzFsUTJobFkydHpQa1Z1WVdKc1pVWmhjM1JEYUdWamEzTThMMEpoYzJsagpVblZ1
ZEdsdFpVTm9aV05yY3o0TkNpQWdJQ0FnSUR4U2RXNTBhVzFsVEdsaWNtRnllVDVOZFd4MGFWUm9j
bVZoWkdWa1JHVmlkV2M4CkwxSjFiblJwYldWTWFXSnlZWEo1UGcwS0lDQWdJQ0FnUEZCeVpXTnZi
WEJwYkdWa1NHVmhaR1Z5UGcwS0lDQWdJQ0FnUEM5UWNtVmoKYjIxd2FXeGxaRWhsWVdSbGNqNE5D
aUFnSUNBZ0lEeFhZWEp1YVc1blRHVjJaV3crVEdWMlpXdzBQQzlYWVhKdWFXNW5UR1YyWld3KwpE
UW9nSUNBZ0lDQThWSEpsWVhSWFlYSnVhVzVuUVhORmNuSnZjajUwY25WbFBDOVVjbVZoZEZkaGNt
NXBibWRCYzBWeWNtOXlQZzBLCklDQWdJQ0FnUEVSbFluVm5TVzVtYjNKdFlYUnBiMjVHYjNKdFlY
UStSV1JwZEVGdVpFTnZiblJwYm5WbFBDOUVaV0oxWjBsdVptOXkKYldGMGFXOXVSbTl5YldGMFBn
MEtJQ0FnSUNBZ1BFUnBjMkZpYkdWVGNHVmphV1pwWTFkaGNtNXBibWR6UGpReE1EQTdOREV5Tnpz
MApNVGc1T3pReU16azdOREkwTkRzME1qUTFPelExTVRJN05EY3dNanNsS0VScGMyRmliR1ZUY0dW
amFXWnBZMWRoY201cGJtZHpLVHd2ClJHbHpZV0pzWlZOd1pXTnBabWxqVjJGeWJtbHVaM00rRFFv
Z0lDQWdQQzlEYkVOdmJYQnBiR1UrRFFvZ0lDQWdQRXhwYm1zK0RRb2cKSUNBZ0lDQThRV1JrYVhS
cGIyNWhiRVJsY0dWdVpHVnVZMmxsY3o1a00yUTVMbXhwWWpzbEtFRmtaR2wwYVc5dVlXeEVaWEJs
Ym1SbApibU5wWlhNcFBDOUJaR1JwZEdsdmJtRnNSR1Z3Wlc1a1pXNWphV1Z6UGcwS0lDQWdJQ0Fn
UEUxdlpIVnNaVVJsWm1sdWFYUnBiMjVHCmFXeGxQbXhwWWtkTVJWTjJNaTVrWldZOEwwMXZaSFZz
WlVSbFptbHVhWFJwYjI1R2FXeGxQZzBLSUNBZ0lDQWdQRWRsYm1WeVlYUmwKUkdWaWRXZEpibVp2
Y20xaGRHbHZiajUwY25WbFBDOUhaVzVsY21GMFpVUmxZblZuU1c1bWIzSnRZWFJwYjI0K0RRb2dJ
Q0FnSUNBOApVM1ZpVTNsemRHVnRQbGRwYm1SdmQzTThMMU4xWWxONWMzUmxiVDROQ2lBZ0lDQWdJ
RHhFWVhSaFJYaGxZM1YwYVc5dVVISmxkbVZ1CmRHbHZiajROQ2lBZ0lDQWdJRHd2UkdGMFlVVjRa
V04xZEdsdmJsQnlaWFpsYm5ScGIyNCtEUW9nSUNBZ0lDQThWR0Z5WjJWMFRXRmoKYUdsdVpUNU5Z
V05vYVc1bFdEZzJQQzlVWVhKblpYUk5ZV05vYVc1bFBnMEtJQ0FnSUR3dlRHbHVhejROQ2lBZ0lD
QThVRzl6ZEVKMQphV3hrUlhabGJuUStEUW9nSUNBZ0lDQThRMjl0YldGdVpENGxOREJsWTJodklH
OXVEUXB0YTJScGNpQWlKQ2hRY205cVpXTjBSR2x5CktTNHVYQzR1WEd4cFlsd2tLRU52Ym1acFoz
VnlZWFJwYjI0cFhDSU5DbU52Y0hrZ0lpUW9UM1YwUkdseUtXeHBZa2RNUlZOMk1pNWsKYkd3aUlD
SWtLRkJ5YjJwbFkzUkVhWElwTGk1Y0xpNWNiR2xpWENRb1EyOXVabWxuZFhKaGRHbHZiaWxjSWcw
S1kyOXdlU0FpSkNoUApkWFJFYVhJcGJHbGlSMHhGVTNZeUxteHBZaUlnSWlRb1VISnZhbVZqZEVS
cGNpa3VMbHd1TGx4c2FXSmNKQ2hEYjI1bWFXZDFjbUYwCmFXOXVLVndpRFFvbE5EQmxZMmh2SUc5
bVpnMEtQQzlEYjIxdFlXNWtQZzBLSUNBZ0lEd3ZVRzl6ZEVKMWFXeGtSWFpsYm5RK0RRb2cKSUR3
dlNYUmxiVVJsWm1sdWFYUnBiMjVIY205MWNENE5DaUFnUEVsMFpXMUVaV1pwYm1sMGFXOXVSM0p2
ZFhBZ1EyOXVaR2wwYVc5dQpQU0luSkNoRGIyNW1hV2QxY21GMGFXOXVLWHdrS0ZCc1lYUm1iM0p0
S1NjOVBTZFNaV3hsWVhObGZGZHBiak15SnlJK0RRb2dJQ0FnClBFTnNRMjl0Y0dsc1pUNE5DaUFn
SUNBZ0lEeFBjSFJwYldsNllYUnBiMjQrVFdGNFUzQmxaV1E4TDA5d2RHbHRhWHBoZEdsdmJqNE4K
Q2lBZ0lDQWdJRHhKYm14cGJtVkdkVzVqZEdsdmJrVjRjR0Z1YzJsdmJqNUJibmxUZFdsMFlXSnNa
VHd2U1c1c2FXNWxSblZ1WTNScApiMjVGZUhCaGJuTnBiMjQrRFFvZ0lDQWdJQ0E4UVdSa2FYUnBi
MjVoYkVsdVkyeDFaR1ZFYVhKbFkzUnZjbWxsY3o0a0tGQnliMnBsClkzUkVhWElwTHk0dU95QWtL
RkJ5YjJwbFkzUkVhWElwTHk0dUx5NHVMMmx1WTJ4MVpHVTdKU2hCWkdScGRHbHZibUZzU1c1amJI
VmsKWlVScGNtVmpkRzl5YVdWektUd3ZRV1JrYVhScGIyNWhiRWx1WTJ4MVpHVkVhWEpsWTNSdmNt
bGxjejROQ2lBZ0lDQWdJRHhRY21WdwpjbTlqWlhOemIzSkVaV1pwYm1sMGFXOXVjejVCVGtkTVJW
OUVTVk5CUWt4RlgxUlNRVU5GTzFkSlRqTXlPMDVFUlVKVlJ6dGZWMGxPClJFOVhVenRmVlZOU1JF
eE1PMHhKUWtkTVJWTldNbDlGV0ZCUFVsUlRPMTlEVWxSZlUwVkRWVkpGWDA1UFgwUkZVRkpGUTBG
VVJUdE8KVDAxSlRrMUJXRHRmVTBWRFZWSkZYMU5EVEQwd095VW9VSEpsY0hKdlkyVnpjMjl5UkdW
bWFXNXBkR2x2Ym5NcFBDOVFjbVZ3Y205agpaWE56YjNKRVpXWnBibWwwYVc5dWN6NE5DaUFnSUNB
Z0lEeFNkVzUwYVcxbFRHbGljbUZ5ZVQ1TmRXeDBhVlJvY21WaFpHVmtQQzlTCmRXNTBhVzFsVEds
aWNtRnllVDROQ2lBZ0lDQWdJRHhRY21WamIyMXdhV3hsWkVobFlXUmxjajROQ2lBZ0lDQWdJRHd2
VUhKbFkyOXQKY0dsc1pXUklaV0ZrWlhJK0RRb2dJQ0FnSUNBOFYyRnlibWx1WjB4bGRtVnNQa3hs
ZG1Wc05Ed3ZWMkZ5Ym1sdVoweGxkbVZzUGcwSwpJQ0FnSUNBZ1BGUnlaV0YwVjJGeWJtbHVaMEZ6
UlhKeWIzSStkSEoxWlR3dlZISmxZWFJYWVhKdWFXNW5RWE5GY25KdmNqNE5DaUFnCklDQWdJRHhF
WldKMVowbHVabTl5YldGMGFXOXVSbTl5YldGMFBsQnliMmR5WVcxRVlYUmhZbUZ6WlR3dlJHVmlk
V2RKYm1admNtMWgKZEdsdmJrWnZjbTFoZEQ0TkNpQWdJQ0FnSUR4RWFYTmhZbXhsVTNCbFkybG1h
V05YWVhKdWFXNW5jejQwTVRBd096UXhNamM3TkRFNApPVHMwTWpNNU96UXlORFE3TkRJME5UczBO
VEV5T3pRM01ESTdORGN4T0RzbEtFUnBjMkZpYkdWVGNHVmphV1pwWTFkaGNtNXBibWR6CktUd3ZS
R2x6WVdKc1pWTndaV05wWm1salYyRnlibWx1WjNNK0RRb2dJQ0FnUEM5RGJFTnZiWEJwYkdVK0RR
b2dJQ0FnUEV4cGJtcysKRFFvZ0lDQWdJQ0E4UVdSa2FYUnBiMjVoYkVSbGNHVnVaR1Z1WTJsbGN6
NWtNMlE1TG14cFlqc2xLRUZrWkdsMGFXOXVZV3hFWlhCbApibVJsYm1OcFpYTXBQQzlCWkdScGRH
bHZibUZzUkdWd1pXNWtaVzVqYVdWelBnMEtJQ0FnSUNBZ1BFbG5ibTl5WlVGc2JFUmxabUYxCmJI
Uk1hV0p5WVhKcFpYTStabUZzYzJVOEwwbG5ibTl5WlVGc2JFUmxabUYxYkhSTWFXSnlZWEpwWlhN
K0RRb2dJQ0FnSUNBOFRXOWsKZFd4bFJHVm1hVzVwZEdsdmJrWnBiR1UrYkdsaVIweEZVM1l5TG1S
bFpqd3ZUVzlrZFd4bFJHVm1hVzVwZEdsdmJrWnBiR1UrRFFvZwpJQ0FnSUNBOFIyVnVaWEpoZEdW
RVpXSjFaMGx1Wm05eWJXRjBhVzl1UG5SeWRXVThMMGRsYm1WeVlYUmxSR1ZpZFdkSmJtWnZjbTFo
CmRHbHZiajROQ2lBZ0lDQWdJRHhUZFdKVGVYTjBaVzArVjJsdVpHOTNjend2VTNWaVUzbHpkR1Z0
UGcwS0lDQWdJQ0FnUEU5d2RHbHQKYVhwbFVtVm1aWEpsYm1ObGN6NTBjblZsUEM5UGNIUnBiV2w2
WlZKbFptVnlaVzVqWlhNK0RRb2dJQ0FnSUNBOFJXNWhZbXhsUTA5TgpSRUZVUm05c1pHbHVaejUw
Y25WbFBDOUZibUZpYkdWRFQwMUVRVlJHYjJ4a2FXNW5QZzBLSUNBZ0lDQWdQRVJoZEdGRmVHVmpk
WFJwCmIyNVFjbVYyWlc1MGFXOXVQZzBLSUNBZ0lDQWdQQzlFWVhSaFJYaGxZM1YwYVc5dVVISmxk
bVZ1ZEdsdmJqNE5DaUFnSUNBZ0lEeFUKWVhKblpYUk5ZV05vYVc1bFBrMWhZMmhwYm1WWU9EWThM
MVJoY21kbGRFMWhZMmhwYm1VK0RRb2dJQ0FnUEM5TWFXNXJQZzBLSUNBZwpJRHhRYjNOMFFuVnBi
R1JGZG1WdWRENE5DaUFnSUNBZ0lEeERiMjF0WVc1a1BpVTBNR1ZqYUc4Z2IyNE5DbTFyWkdseUlD
SWtLRkJ5CmIycGxZM1JFYVhJcExpNWNMaTVjYkdsaVhDUW9RMjl1Wm1sbmRYSmhkR2x2YmlsY0ln
MEtZMjl3ZVNBaUpDaFBkWFJFYVhJcGJHbGkKUjB4RlUzWXlMbVJzYkNJZ0lpUW9VSEp2YW1WamRF
UnBjaWt1TGx3dUxseHNhV0pjSkNoRGIyNW1hV2QxY21GMGFXOXVLVndpRFFwagpiM0I1SUNJa0tF
OTFkRVJwY2lsc2FXSkhURVZUZGpJdWJHbGlJaUFpSkNoUWNtOXFaV04wUkdseUtTNHVYQzR1WEd4
cFlsd2tLRU52CmJtWnBaM1Z5WVhScGIyNHBYQ0lOQ2lVME1HVmphRzhnYjJabURRbzhMME52Ylcx
aGJtUStEUW9nSUNBZ1BDOVFiM04wUW5WcGJHUkYKZG1WdWRENE5DaUFnUEM5SmRHVnRSR1ZtYVc1
cGRHbHZia2R5YjNWd1BnMEtJQ0E4U1hSbGJVUmxabWx1YVhScGIyNUhjbTkxY0NCRApiMjVrYVhS
cGIyNDlJaWNrS0VOdmJtWnBaM1Z5WVhScGIyNHBmQ1FvVUd4aGRHWnZjbTBwSnowOUowUmxZblZu
ZkhnMk5DY2lQZzBLCklDQWdJRHhOYVdSc1BnMEtJQ0FnSUNBZ1BGUmhjbWRsZEVWdWRtbHliMjV0
Wlc1MFBsZzJORHd2VkdGeVoyVjBSVzUyYVhKdmJtMWwKYm5RK0RRb2dJQ0FnUEM5TmFXUnNQZzBL
SUNBZ0lEeERiRU52YlhCcGJHVStEUW9nSUNBZ0lDQThUM0IwYVcxcGVtRjBhVzl1UGtScApjMkZp
YkdWa1BDOVBjSFJwYldsNllYUnBiMjQrRFFvZ0lDQWdJQ0E4UVdSa2FYUnBiMjVoYkVsdVkyeDFa
R1ZFYVhKbFkzUnZjbWxsCmN6NGtLRkJ5YjJwbFkzUkVhWElwTHk0dU95QWtLRkJ5YjJwbFkzUkVh
WElwTHk0dUx5NHVMMmx1WTJ4MVpHVTdKU2hCWkdScGRHbHYKYm1Gc1NXNWpiSFZrWlVScGNtVmpk
Rzl5YVdWektUd3ZRV1JrYVhScGIyNWhiRWx1WTJ4MVpHVkVhWEpsWTNSdmNtbGxjejROQ2lBZwpJ
Q0FnSUR4UWNtVndjbTlqWlhOemIzSkVaV1pwYm1sMGFXOXVjejVYU1U0ek1qdGZSRVZDVlVjN1gx
ZEpUa1JQVjFNN1gxVlRVa1JNClREdE1TVUpIVEVWVFZqSmZSVmhRVDFKVVV6dGZRMUpVWDFORlEx
VlNSVjlPVDE5RVJWQlNSVU5CVkVVN1RrOU5TVTVOUVZnN0pTaFEKY21Wd2NtOWpaWE56YjNKRVpX
WnBibWwwYVc5dWN5azhMMUJ5WlhCeWIyTmxjM052Y2tSbFptbHVhWFJwYjI1elBnMEtJQ0FnSUNB
ZwpQRTFwYm1sdFlXeFNaV0oxYVd4a1BuUnlkV1U4TDAxcGJtbHRZV3hTWldKMWFXeGtQZzBLSUNB
Z0lDQWdQRUpoYzJsalVuVnVkR2x0ClpVTm9aV05yY3o1RmJtRmliR1ZHWVhOMFEyaGxZMnR6UEM5
Q1lYTnBZMUoxYm5ScGJXVkRhR1ZqYTNNK0RRb2dJQ0FnSUNBOFVuVnUKZEdsdFpVeHBZbkpoY25r
K1RYVnNkR2xVYUhKbFlXUmxaRVJsWW5WblBDOVNkVzUwYVcxbFRHbGljbUZ5ZVQ0TkNpQWdJQ0Fn
SUR4UQpjbVZqYjIxd2FXeGxaRWhsWVdSbGNqNE5DaUFnSUNBZ0lEd3ZVSEpsWTI5dGNHbHNaV1JJ
WldGa1pYSStEUW9nSUNBZ0lDQThWMkZ5CmJtbHVaMHhsZG1Wc1BreGxkbVZzTkR3dlYyRnlibWx1
WjB4bGRtVnNQZzBLSUNBZ0lDQWdQRVJwYzJGaWJHVlRjR1ZqYVdacFkxZGgKY201cGJtZHpQalF4
TURBN05ERXlOenMwTVRnNU96UXlNems3TkRJME5EczBNalExT3pRMU1USTdORGN3TWpzME56RTRP
eVVvUkdsegpZV0pzWlZOd1pXTnBabWxqVjJGeWJtbHVaM01wUEM5RWFYTmhZbXhsVTNCbFkybG1h
V05YWVhKdWFXNW5jejROQ2lBZ0lDQWdJRHhFClpXSjFaMGx1Wm05eWJXRjBhVzl1Um05eWJXRjBQ
bEJ5YjJkeVlXMUVZWFJoWW1GelpUd3ZSR1ZpZFdkSmJtWnZjbTFoZEdsdmJrWnYKY20xaGRENE5D
aUFnSUNBZ0lEeFVjbVZoZEZkaGNtNXBibWRCYzBWeWNtOXlQblJ5ZFdVOEwxUnlaV0YwVjJGeWJt
bHVaMEZ6UlhKeQpiM0krRFFvZ0lDQWdQQzlEYkVOdmJYQnBiR1UrRFFvZ0lDQWdQRXhwYm1zK0RR
b2dJQ0FnSUNBOFFXUmthWFJwYjI1aGJFUmxjR1Z1ClpHVnVZMmxsY3o1a00yUTVMbXhwWWpzbEtF
RmtaR2wwYVc5dVlXeEVaWEJsYm1SbGJtTnBaWE1wUEM5QlpHUnBkR2x2Ym1Gc1JHVncKWlc1a1pX
NWphV1Z6UGcwS0lDQWdJQ0FnUEUxdlpIVnNaVVJsWm1sdWFYUnBiMjVHYVd4bFBteHBZa2RNUlZO
Mk1pNWtaV1k4TDAxdgpaSFZzWlVSbFptbHVhWFJwYjI1R2FXeGxQZzBLSUNBZ0lDQWdQRWRsYm1W
eVlYUmxSR1ZpZFdkSmJtWnZjbTFoZEdsdmJqNTBjblZsClBDOUhaVzVsY21GMFpVUmxZblZuU1c1
bWIzSnRZWFJwYjI0K0RRb2dJQ0FnSUNBOFUzVmlVM2x6ZEdWdFBsZHBibVJ2ZDNNOEwxTjEKWWxO
NWMzUmxiVDROQ2lBZ0lDQWdJRHhFWVhSaFJYaGxZM1YwYVc5dVVISmxkbVZ1ZEdsdmJqNE5DaUFn
SUNBZ0lEd3ZSR0YwWVVWNApaV04xZEdsdmJsQnlaWFpsYm5ScGIyNCtEUW9nSUNBZ0lDQThWR0Z5
WjJWMFRXRmphR2x1WlQ1TllXTm9hVzVsV0RZMFBDOVVZWEpuClpYUk5ZV05vYVc1bFBnMEtJQ0Fn
SUR3dlRHbHVhejROQ2lBZ0lDQThVRzl6ZEVKMWFXeGtSWFpsYm5RK0RRb2dJQ0FnSUNBOFEyOXQK
YldGdVpENGxOREJsWTJodklHOXVEUXB0YTJScGNpQWlKQ2hRY205cVpXTjBSR2x5S1M0dVhDNHVY
R3hwWWx3a0tFTnZibVpwWjNWeQpZWFJwYjI0cFhDSU5DbU52Y0hrZ0lpUW9UM1YwUkdseUtXeHBZ
a2RNUlZOMk1pNWtiR3dpSUNJa0tGQnliMnBsWTNSRWFYSXBMaTVjCkxpNWNiR2xpWENRb1EyOXVa
bWxuZFhKaGRHbHZiaWxjSWcwS1kyOXdlU0FpSkNoUGRYUkVhWElwYkdsaVIweEZVM1l5TG14cFlp
SWcKSWlRb1VISnZhbVZqZEVScGNpa3VMbHd1TGx4c2FXSmNKQ2hEYjI1bWFXZDFjbUYwYVc5dUtW
d2lEUW9sTkRCbFkyaHZJRzltWmcwSwpQQzlEYjIxdFlXNWtQZzBLSUNBZ0lEd3ZVRzl6ZEVKMWFX
eGtSWFpsYm5RK0RRb2dJRHd2U1hSbGJVUmxabWx1YVhScGIyNUhjbTkxCmNENE5DaUFnUEVsMFpX
MUVaV1pwYm1sMGFXOXVSM0p2ZFhBZ1EyOXVaR2wwYVc5dVBTSW5KQ2hEYjI1bWFXZDFjbUYwYVc5
dUtYd2sKS0ZCc1lYUm1iM0p0S1NjOVBTZFNaV3hsWVhObGZIZzJOQ2NpUGcwS0lDQWdJRHhOYVdS
c1BnMEtJQ0FnSUNBZ1BGUmhjbWRsZEVWdQpkbWx5YjI1dFpXNTBQbGcyTkR3dlZHRnlaMlYwUlc1
MmFYSnZibTFsYm5RK0RRb2dJQ0FnUEM5TmFXUnNQZzBLSUNBZ0lEeERiRU52CmJYQnBiR1UrRFFv
Z0lDQWdJQ0E4VDNCMGFXMXBlbUYwYVc5dVBrMWhlRk53WldWa1BDOVBjSFJwYldsNllYUnBiMjQr
RFFvZ0lDQWcKSUNBOFNXNXNhVzVsUm5WdVkzUnBiMjVGZUhCaGJuTnBiMjQrUVc1NVUzVnBkR0Zp
YkdVOEwwbHViR2x1WlVaMWJtTjBhVzl1UlhodwpZVzV6YVc5dVBnMEtJQ0FnSUNBZ1BFRmtaR2ww
YVc5dVlXeEpibU5zZFdSbFJHbHlaV04wYjNKcFpYTStKQ2hRY205cVpXTjBSR2x5CktTOHVManNn
SkNoUWNtOXFaV04wUkdseUtTOHVMaTh1TGk5cGJtTnNkV1JsT3lVb1FXUmthWFJwYjI1aGJFbHVZ
MngxWkdWRWFYSmwKWTNSdmNtbGxjeWs4TDBGa1pHbDBhVzl1WVd4SmJtTnNkV1JsUkdseVpXTjBi
M0pwWlhNK0RRb2dJQ0FnSUNBOFVISmxjSEp2WTJWegpjMjl5UkdWbWFXNXBkR2x2Ym5NK1YwbE9N
ekk3VGtSRlFsVkhPMTlYU1U1RVQxZFRPMTlWVTFKRVRFdzdURWxDUjB4RlUxWXlYMFZZClVFOVNW
Rk03WDBOU1ZGOVRSVU5WVWtWZlRrOWZSRVZRVWtWRFFWUkZPMDVQVFVsT1RVRllPMTlUUlVOVlVr
VmZVME5NUFRBN0pTaFEKY21Wd2NtOWpaWE56YjNKRVpXWnBibWwwYVc5dWN5azhMMUJ5WlhCeWIy
TmxjM052Y2tSbFptbHVhWFJwYjI1elBnMEtJQ0FnSUNBZwpQRkoxYm5ScGJXVk1hV0p5WVhKNVBr
MTFiSFJwVkdoeVpXRmtaV1E4TDFKMWJuUnBiV1ZNYVdKeVlYSjVQZzBLSUNBZ0lDQWdQRkJ5ClpX
TnZiWEJwYkdWa1NHVmhaR1Z5UGcwS0lDQWdJQ0FnUEM5UWNtVmpiMjF3YVd4bFpFaGxZV1JsY2o0
TkNpQWdJQ0FnSUR4WFlYSnUKYVc1blRHVjJaV3crVEdWMlpXdzBQQzlYWVhKdWFXNW5UR1YyWld3
K0RRb2dJQ0FnSUNBOFJHbHpZV0pzWlZOd1pXTnBabWxqVjJGeQpibWx1WjNNK05ERXdNRHMwTVRJ
M096UXhPRGs3TkRJek9UczBNalEwT3pReU5EVTdORFV4TWpzME56QXlPelEzTVRnN0pTaEVhWE5o
CllteGxVM0JsWTJsbWFXTlhZWEp1YVc1bmN5azhMMFJwYzJGaWJHVlRjR1ZqYVdacFkxZGhjbTVw
Ym1kelBnMEtJQ0FnSUNBZ1BFUmwKWW5WblNXNW1iM0p0WVhScGIyNUdiM0p0WVhRK1VISnZaM0po
YlVSaGRHRmlZWE5sUEM5RVpXSjFaMGx1Wm05eWJXRjBhVzl1Um05eQpiV0YwUGcwS0lDQWdJQ0Fn
UEZSeVpXRjBWMkZ5Ym1sdVowRnpSWEp5YjNJK2RISjFaVHd2VkhKbFlYUlhZWEp1YVc1blFYTkZj
bkp2CmNqNE5DaUFnSUNBOEwwTnNRMjl0Y0dsc1pUNE5DaUFnSUNBOFRHbHVhejROQ2lBZ0lDQWdJ
RHhCWkdScGRHbHZibUZzUkdWd1pXNWsKWlc1amFXVnpQbVF6WkRrdWJHbGlPeVVvUVdSa2FYUnBi
MjVoYkVSbGNHVnVaR1Z1WTJsbGN5azhMMEZrWkdsMGFXOXVZV3hFWlhCbApibVJsYm1OcFpYTStE
UW9nSUNBZ0lDQThTV2R1YjNKbFFXeHNSR1ZtWVhWc2RFeHBZbkpoY21sbGN6NW1ZV3h6WlR3dlNX
ZHViM0psClFXeHNSR1ZtWVhWc2RFeHBZbkpoY21sbGN6NE5DaUFnSUNBZ0lEeE5iMlIxYkdWRVpX
WnBibWwwYVc5dVJtbHNaVDVzYVdKSFRFVlQKZGpJdVpHVm1QQzlOYjJSMWJHVkVaV1pwYm1sMGFX
OXVSbWxzWlQ0TkNpQWdJQ0FnSUR4SFpXNWxjbUYwWlVSbFluVm5TVzVtYjNKdApZWFJwYjI0K2RI
SjFaVHd2UjJWdVpYSmhkR1ZFWldKMVowbHVabTl5YldGMGFXOXVQZzBLSUNBZ0lDQWdQRk4xWWxO
NWMzUmxiVDVYCmFXNWtiM2R6UEM5VGRXSlRlWE4wWlcwK0RRb2dJQ0FnSUNBOFQzQjBhVzFwZW1W
U1pXWmxjbVZ1WTJWelBuUnlkV1U4TDA5d2RHbHQKYVhwbFVtVm1aWEpsYm1ObGN6NE5DaUFnSUNB
Z0lEeEZibUZpYkdWRFQwMUVRVlJHYjJ4a2FXNW5QblJ5ZFdVOEwwVnVZV0pzWlVOUApUVVJCVkVa
dmJHUnBibWMrRFFvZ0lDQWdJQ0E4UkdGMFlVVjRaV04xZEdsdmJsQnlaWFpsYm5ScGIyNCtEUW9n
SUNBZ0lDQThMMFJoCmRHRkZlR1ZqZFhScGIyNVFjbVYyWlc1MGFXOXVQZzBLSUNBZ0lDQWdQRlJo
Y21kbGRFMWhZMmhwYm1VK1RXRmphR2x1WlZnMk5Ed3YKVkdGeVoyVjBUV0ZqYUdsdVpUNE5DaUFn
SUNBOEwweHBibXMrRFFvZ0lDQWdQRkJ2YzNSQ2RXbHNaRVYyWlc1MFBnMEtJQ0FnSUNBZwpQRU52
YlcxaGJtUStKVFF3WldOb2J5QnZiZzBLYld0a2FYSWdJaVFvVUhKdmFtVmpkRVJwY2lrdUxsd3VM
bHhzYVdKY0pDaERiMjVtCmFXZDFjbUYwYVc5dUtWd2lEUXBqYjNCNUlDSWtLRTkxZEVScGNpbHNh
V0pIVEVWVGRqSXVaR3hzSWlBaUpDaFFjbTlxWldOMFJHbHkKS1M0dVhDNHVYR3hwWWx3a0tFTnZi
bVpwWjNWeVlYUnBiMjRwWENJTkNtTnZjSGtnSWlRb1QzVjBSR2x5S1d4cFlrZE1SVk4yTWk1cwph
V0lpSUNJa0tGQnliMnBsWTNSRWFYSXBMaTVjTGk1Y2JHbGlYQ1FvUTI5dVptbG5kWEpoZEdsdmJp
bGNJZzBLSlRRd1pXTm9ieUJ2ClptWU5Dand2UTI5dGJXRnVaRDROQ2lBZ0lDQThMMUJ2YzNSQ2RX
bHNaRVYyWlc1MFBnMEtJQ0E4TDBsMFpXMUVaV1pwYm1sMGFXOXUKUjNKdmRYQStEUW9nSUR4SmRH
VnRSM0p2ZFhBK0RRb2dJQ0FnUEVOc1EyOXRjR2xzWlNCSmJtTnNkV1JsUFNKQ2JHbDBMbU53Y0NJ
ZwpMejROQ2lBZ0lDQThRMnhEYjIxd2FXeGxJRWx1WTJ4MVpHVTlJa0oxWm1abGNpNWpjSEFpSUM4
K0RRb2dJQ0FnUEVOc1EyOXRjR2xzClpTQkpibU5zZFdSbFBTSkRiMjUwWlhoMExtTndjQ0lnTHo0
TkNpQWdJQ0E4UTJ4RGIyMXdhV3hsSUVsdVkyeDFaR1U5SWk0dVhHTnYKYlcxdmJseGtaV0oxWnk1
amNIQWlJQzgrRFFvZ0lDQWdQRU5zUTI5dGNHbHNaU0JKYm1Oc2RXUmxQU0pFTTBSRGIyNXpkR0Z1
ZEZSaApZbXhsTG1Od2NDSWdMejROQ2lBZ0lDQThRMnhEYjIxd2FXeGxJRWx1WTJ4MVpHVTlJa1ps
Ym1ObExtTndjQ0lnTHo0TkNpQWdJQ0E4ClEyeERiMjF3YVd4bElFbHVZMngxWkdVOUlrWnNiMkYw
TVRaVWIwWnNiMkYwTXpJdVkzQndJaUF2UGcwS0lDQWdJRHhEYkVOdmJYQnAKYkdVZ1NXNWpiSFZr
WlQwaVJuSmhiV1ZpZFdabVpYSXVZM0J3SWlBdlBnMEtJQ0FnSUR4RGJFTnZiWEJwYkdVZ1NXNWpi
SFZrWlQwaQpTR0Z1Wkd4bFFXeHNiMk5oZEc5eUxtTndjQ0lnTHo0TkNpQWdJQ0E4UTJ4RGIyMXdh
V3hsSUVsdVkyeDFaR1U5SWtsdVpHVjRSR0YwCllVMWhibUZuWlhJdVkzQndJaUF2UGcwS0lDQWdJ
RHhEYkVOdmJYQnBiR1VnU1c1amJIVmtaVDBpYkdsaVIweEZVM1l5TG1Od2NDSWcKTHo0TkNpQWdJ
Q0E4UTJ4RGIyMXdhV3hsSUVsdVkyeDFaR1U5SW0xaGFXNHVZM0J3SWlBdlBnMEtJQ0FnSUR4RGJF
TnZiWEJwYkdVZwpTVzVqYkhWa1pUMGlVSEp2WjNKaGJTNWpjSEFpSUM4K0RRb2dJQ0FnUEVOc1Ey
OXRjR2xzWlNCSmJtTnNkV1JsUFNKUWNtOW5jbUZ0ClFtbHVZWEo1TG1Od2NDSWdMejROQ2lBZ0lD
QThRMnhEYjIxd2FXeGxJRWx1WTJ4MVpHVTlJbEYxWlhKNUxtTndjQ0lnTHo0TkNpQWcKSUNBOFEy
eERiMjF3YVd4bElFbHVZMngxWkdVOUlpNHVYR052YlcxdmJseFNaV1pEYjNWdWRFOWlhbVZqZEM1
amNIQWlJQzgrRFFvZwpJQ0FnUEVOc1EyOXRjR2xzWlNCSmJtTnNkV1JsUFNKU1pXNWtaWEppZFda
bVpYSXVZM0J3SWlBdlBnMEtJQ0FnSUR4RGJFTnZiWEJwCmJHVWdTVzVqYkhWa1pUMGlVbVZ6YjNW
eVkyVk5ZVzVoWjJWeUxtTndjQ0lnTHo0TkNpQWdJQ0E4UTJ4RGIyMXdhV3hsSUVsdVkyeDEKWkdV
OUlsTm9ZV1JsY2k1amNIQWlJQzgrRFFvZ0lDQWdQRU5zUTI5dGNHbHNaU0JKYm1Oc2RXUmxQU0pV
WlhoMGRYSmxMbU53Y0NJZwpMejROQ2lBZ0lDQThRMnhEYjIxd2FXeGxJRWx1WTJ4MVpHVTlJbFJs
ZUhSMWNtVlRVMFV5TG1Od2NDSWdMejROQ2lBZ0lDQThRMnhECmIyMXdhV3hsSUVsdVkyeDFaR1U5
SW5WMGFXeHBkR2xsY3k1amNIQWlJQzgrRFFvZ0lDQWdQRU5zUTI5dGNHbHNaU0JKYm1Oc2RXUmwK
UFNKV1pYSjBaWGhFWVhSaFRXRnVZV2RsY2k1amNIQWlJQzgrRFFvZ0lEd3ZTWFJsYlVkeWIzVndQ
ZzBLSUNBOFNYUmxiVWR5YjNWdwpQZzBLSUNBZ0lEeERiRWx1WTJ4MVpHVWdTVzVqYkhWa1pUMGlR
bWx1WVhKNVUzUnlaV0Z0TG1naUlDOCtEUW9nSUNBZ1BFTnNTVzVqCmJIVmtaU0JKYm1Oc2RXUmxQ
U0pDYkdsMExtZ2lJQzgrRFFvZ0lDQWdQRU5zU1c1amJIVmtaU0JKYm1Oc2RXUmxQU0pDZFdabVpY
SXUKYUNJZ0x6NE5DaUFnSUNBOFEyeEpibU5zZFdSbElFbHVZMngxWkdVOUlrTnZiblJsZUhRdWFD
SWdMejROQ2lBZ0lDQThRMnhKYm1OcwpkV1JsSUVsdVkyeDFaR1U5SWtRelJFTnZibk4wWVc1MFZH
RmliR1V1YUNJZ0x6NE5DaUFnSUNBOFEyeEpibU5zZFdSbElFbHVZMngxClpHVTlJa1psYm1ObExt
Z2lJQzgrRFFvZ0lDQWdQRU5zU1c1amJIVmtaU0JKYm1Oc2RXUmxQU0pHY21GdFpXSjFabVpsY2k1
b0lpQXYKUGcwS0lDQWdJRHhEYkVsdVkyeDFaR1VnU1c1amJIVmtaVDBpTGk1Y0xpNWNhVzVqYkhW
a1pWeEhURVZUTWx4bmJESXVhQ0lnTHo0TgpDaUFnSUNBOFEyeEpibU5zZFdSbElFbHVZMngxWkdV
OUlpNHVYQzR1WEdsdVkyeDFaR1ZjUjB4RlV6SmNaMnd5WlhoMExtZ2lJQzgrCkRRb2dJQ0FnUEVO
c1NXNWpiSFZrWlNCSmJtTnNkV1JsUFNJdUxsd3VMbHhwYm1Oc2RXUmxYRWRNUlZNeVhHZHNNbkJz
WVhSbWIzSnQKTG1naUlDOCtEUW9nSUNBZ1BFTnNTVzVqYkhWa1pTQkpibU5zZFdSbFBTSklZVzVr
YkdWQmJHeHZZMkYwYjNJdWFDSWdMejROQ2lBZwpJQ0E4UTJ4SmJtTnNkV1JsSUVsdVkyeDFaR1U5
SWtsdVpHVjRSR0YwWVUxaGJtRm5aWEl1YUNJZ0x6NE5DaUFnSUNBOFEyeEpibU5zCmRXUmxJRWx1
WTJ4MVpHVTlJbTFoYVc0dWFDSWdMejROQ2lBZ0lDQThRMnhKYm1Oc2RXUmxJRWx1WTJ4MVpHVTlJ
bTFoZEdoMWRHbHMKTG1naUlDOCtEUW9nSUNBZ1BFTnNTVzVqYkhWa1pTQkpibU5zZFdSbFBTSlFj
bTluY21GdExtZ2lJQzgrRFFvZ0lDQWdQRU5zU1c1agpiSFZrWlNCSmJtTnNkV1JsUFNKUWNtOW5j
bUZ0UW1sdVlYSjVMbWdpSUM4K0RRb2dJQ0FnUEVOc1NXNWpiSFZrWlNCSmJtTnNkV1JsClBTSlJk
V1Z5ZVM1b0lpQXZQZzBLSUNBZ0lEeERiRWx1WTJ4MVpHVWdTVzVqYkhWa1pUMGlMaTVjWTI5dGJX
OXVYRkpsWmtOdmRXNTAKVDJKcVpXTjBMbWdpSUM4K0RRb2dJQ0FnUEVOc1NXNWpiSFZrWlNCSmJt
TnNkV1JsUFNKU1pXNWtaWEppZFdabVpYSXVhQ0lnTHo0TgpDaUFnSUNBOFEyeEpibU5zZFdSbElF
bHVZMngxWkdVOUluSmxjMjkxY21ObExtZ2lJQzgrRFFvZ0lDQWdQRU5zU1c1amJIVmtaU0JKCmJt
TnNkV1JsUFNKU1pYTnZkWEpqWlUxaGJtRm5aWEl1YUNJZ0x6NE5DaUFnSUNBOFEyeEpibU5zZFdS
bElFbHVZMngxWkdVOUlsTm8KWVdSbGNpNW9JaUF2UGcwS0lDQWdJRHhEYkVsdVkyeDFaR1VnU1c1
amJIVmtaVDBpVkdWNGRIVnlaUzVvSWlBdlBnMEtJQ0FnSUR4RApiRWx1WTJ4MVpHVWdTVzVqYkhW
a1pUMGlkWFJwYkdsMGFXVnpMbWdpSUM4K0RRb2dJQ0FnUEVOc1NXNWpiSFZrWlNCSmJtTnNkV1Js
ClBTSXVMbHhqYjIxdGIyNWNkbVZ5YzJsdmJpNW9JaUF2UGcwS0lDQWdJRHhEYkVsdVkyeDFaR1Vn
U1c1amJIVmtaVDBpZG1WeWRHVjQKWTI5dWRtVnljMmx2Ymk1b0lpQXZQZzBLSUNBZ0lEeERiRWx1
WTJ4MVpHVWdTVzVqYkhWa1pUMGlWbVZ5ZEdWNFJHRjBZVTFoYm1GbgpaWEl1YUNJZ0x6NE5DaUFn
UEM5SmRHVnRSM0p2ZFhBK0RRb2dJRHhKZEdWdFIzSnZkWEErRFFvZ0lDQWdQRTV2Ym1VZ1NXNWpi
SFZrClpUMGliR2xpUjB4RlUzWXlMbVJsWmlJZ0x6NE5DaUFnUEM5SmRHVnRSM0p2ZFhBK0RRb2dJ
RHhKZEdWdFIzSnZkWEErRFFvZ0lDQWcKUEZKbGMyOTFjbU5sUTI5dGNHbHNaU0JKYm1Oc2RXUmxQ
U0pzYVdKSFRFVlRkakl1Y21NaUlDOCtEUW9nSUR3dlNYUmxiVWR5YjNWdwpQZzBLSUNBOFNYUmxi
VWR5YjNWd1BnMEtJQ0FnSUR4UWNtOXFaV04wVW1WbVpYSmxibU5sSUVsdVkyeDFaR1U5SWk0dVhH
TnZiWEJwCmJHVnlYSFJ5WVc1emJHRjBiM0pmYUd4emJDNTJZM2h3Y205cUlqNE5DaUFnSUNBZ0lE
eFFjbTlxWldOMFBuczFOakl3WmpCbE5DMDIKWXpRekxUUTVZbU10WVRFM09DMWlPREEwWlRGaE1H
TXpZVGQ5UEM5UWNtOXFaV04wUGcwS0lDQWdJQ0FnUEZKbFptVnlaVzVqWlU5MQpkSEIxZEVGemMy
VnRZbXg1UG1aaGJITmxQQzlTWldabGNtVnVZMlZQZFhSd2RYUkJjM05sYldKc2VUNE5DaUFnSUNB
Z0lEeFFjbWwyCllYUmxQblJ5ZFdVOEwxQnlhWFpoZEdVK0RRb2dJQ0FnSUNBOFEyOXdlVXh2WTJG
c1UyRjBaV3hzYVhSbFFYTnpaVzFpYkdsbGN6NW0KWVd4elpUd3ZRMjl3ZVV4dlkyRnNVMkYwWld4
c2FYUmxRWE56WlcxaWJHbGxjejROQ2lBZ0lDQWdJRHhNYVc1clRHbGljbUZ5ZVVSbApjR1Z1WkdW
dVkybGxjejUwY25WbFBDOU1hVzVyVEdsaWNtRnllVVJsY0dWdVpHVnVZMmxsY3o0TkNpQWdJQ0Fn
SUR4VmMyVk1hV0p5CllYSjVSR1Z3Wlc1a1pXNWplVWx1Y0hWMGN6NTBjblZsUEM5VmMyVk1hV0p5
WVhKNVJHVndaVzVrWlc1amVVbHVjSFYwY3o0TkNpQWcKSUNBOEwxQnliMnBsWTNSU1pXWmxjbVZ1
WTJVK0RRb2dJRHd2U1hSbGJVZHliM1Z3UGcwS0lDQThTVzF3YjNKMElGQnliMnBsWTNROQpJaVFv
VmtOVVlYSm5aWFJ6VUdGMGFDbGNUV2xqY205emIyWjBMa053Y0M1MFlYSm5aWFJ6SWlBdlBnMEtJ
Q0E4U1cxd2IzSjBSM0p2CmRYQWdUR0ZpWld3OUlrVjRkR1Z1YzJsdmJsUmhjbWRsZEhNaVBnMEtJ
Q0E4TDBsdGNHOXlkRWR5YjNWd1BnMEtQQzlRY205cVpXTjAKUGc9PQoKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpz
dm46bWltZS10eXBlID0gYXBwbGljYXRpb24veG1sCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmN4cHJv
ai5maWx0ZXJzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9saWJHTEVTdjIudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi52Y3hwcm9qLmZpbHRlcnMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46
bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK2FwcGxpY2F0aW9uL3htbApcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5Cgo3N3UvUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1
WnowaWRYUm1MVGdpUHo0TkNqeFFjbTlxWldOMElGUnZiMnh6ClZtVnljMmx2YmowaU5DNHdJaUI0
Yld4dWN6MGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlrWlhabGJHOXcK
WlhJdmJYTmlkV2xzWkM4eU1EQXpJajROQ2lBZ1BFbDBaVzFIY205MWNENE5DaUFnSUNBOFJtbHNk
R1Z5SUVsdVkyeDFaR1U5SWxOdgpkWEpqWlNCR2FXeGxjeUkrRFFvZ0lDQWdJQ0E4Vlc1cGNYVmxT
V1JsYm5ScFptbGxjajU3TkVaRE56TTNSakV0UXpkQk5TMDBNemMyCkxVRXdOall0TWtFek1rUTNO
VEpCTWtaR2ZUd3ZWVzVwY1hWbFNXUmxiblJwWm1sbGNqNE5DaUFnSUNBZ0lEeEZlSFJsYm5OcGIy
NXoKUG1Od2NEdGpPMk5qTzJONGVEdGtaV1k3YjJSc08ybGtiRHRvY0dvN1ltRjBPMkZ6YlR0aGMy
MTRQQzlGZUhSbGJuTnBiMjV6UGcwSwpJQ0FnSUR3dlJtbHNkR1Z5UGcwS0lDQWdJRHhHYVd4MFpY
SWdTVzVqYkhWa1pUMGlTR1ZoWkdWeUlFWnBiR1Z6SWo0TkNpQWdJQ0FnCklEeFZibWx4ZFdWSlpH
VnVkR2xtYVdWeVBuczVNems1TlRNNE1DMDRPVUpFTFRSaU1EUXRPRGhGUWkwMk1qVkdRa1UxTWtW
Q1JrSjkKUEM5VmJtbHhkV1ZKWkdWdWRHbG1hV1Z5UGcwS0lDQWdJQ0FnUEVWNGRHVnVjMmx2Ym5N
K2FEdG9jSEE3YUhoNE8yaHRPMmx1YkR0cApibU03ZUhOa1BDOUZlSFJsYm5OcGIyNXpQZzBLSUNB
Z0lEd3ZSbWxzZEdWeVBnMEtJQ0E4TDBsMFpXMUhjbTkxY0Q0TkNpQWdQRWwwClpXMUhjbTkxY0Q0
TkNpQWdJQ0E4UTJ4RGIyMXdhV3hsSUVsdVkyeDFaR1U5SWtKc2FYUXVZM0J3SWo0TkNpQWdJQ0Fn
SUR4R2FXeDAKWlhJK1UyOTFjbU5sSUVacGJHVnpQQzlHYVd4MFpYSStEUW9nSUNBZ1BDOURiRU52
YlhCcGJHVStEUW9nSUNBZ1BFTnNRMjl0Y0dscwpaU0JKYm1Oc2RXUmxQU0pDZFdabVpYSXVZM0J3
SWo0TkNpQWdJQ0FnSUR4R2FXeDBaWEkrVTI5MWNtTmxJRVpwYkdWelBDOUdhV3gwClpYSStEUW9n
SUNBZ1BDOURiRU52YlhCcGJHVStEUW9nSUNBZ1BFTnNRMjl0Y0dsc1pTQkpibU5zZFdSbFBTSkRi
MjUwWlhoMExtTncKY0NJK0RRb2dJQ0FnSUNBOFJtbHNkR1Z5UGxOdmRYSmpaU0JHYVd4bGN6d3ZS
bWxzZEdWeVBnMEtJQ0FnSUR3dlEyeERiMjF3YVd4bApQZzBLSUNBZ0lEeERiRU52YlhCcGJHVWdT
VzVqYkhWa1pUMGlMaTVjWTI5dGJXOXVYR1JsWW5WbkxtTndjQ0krRFFvZ0lDQWdJQ0E4ClJtbHNk
R1Z5UGxOdmRYSmpaU0JHYVd4bGN6d3ZSbWxzZEdWeVBnMEtJQ0FnSUR3dlEyeERiMjF3YVd4bFBn
MEtJQ0FnSUR4RGJFTnYKYlhCcGJHVWdTVzVqYkhWa1pUMGlSRE5FUTI5dWMzUmhiblJVWVdKc1pT
NWpjSEFpUGcwS0lDQWdJQ0FnUEVacGJIUmxjajVUYjNWeQpZMlVnUm1sc1pYTThMMFpwYkhSbGNq
NE5DaUFnSUNBOEwwTnNRMjl0Y0dsc1pUNE5DaUFnSUNBOFEyeERiMjF3YVd4bElFbHVZMngxClpH
VTlJa1psYm1ObExtTndjQ0krRFFvZ0lDQWdJQ0E4Um1sc2RHVnlQbE52ZFhKalpTQkdhV3hsY3p3
dlJtbHNkR1Z5UGcwS0lDQWcKSUR3dlEyeERiMjF3YVd4bFBnMEtJQ0FnSUR4RGJFTnZiWEJwYkdV
Z1NXNWpiSFZrWlQwaVJteHZZWFF4TmxSdlJteHZZWFF6TWk1agpjSEFpUGcwS0lDQWdJQ0FnUEVa
cGJIUmxjajVUYjNWeVkyVWdSbWxzWlhNOEwwWnBiSFJsY2o0TkNpQWdJQ0E4TDBOc1EyOXRjR2xz
ClpUNE5DaUFnSUNBOFEyeERiMjF3YVd4bElFbHVZMngxWkdVOUlrWnlZVzFsWW5WbVptVnlMbU53
Y0NJK0RRb2dJQ0FnSUNBOFJtbHMKZEdWeVBsTnZkWEpqWlNCR2FXeGxjend2Um1sc2RHVnlQZzBL
SUNBZ0lEd3ZRMnhEYjIxd2FXeGxQZzBLSUNBZ0lEeERiRU52YlhCcApiR1VnU1c1amJIVmtaVDBp
U0dGdVpHeGxRV3hzYjJOaGRHOXlMbU53Y0NJK0RRb2dJQ0FnSUNBOFJtbHNkR1Z5UGxOdmRYSmpa
U0JHCmFXeGxjend2Um1sc2RHVnlQZzBLSUNBZ0lEd3ZRMnhEYjIxd2FXeGxQZzBLSUNBZ0lEeERi
RU52YlhCcGJHVWdTVzVqYkhWa1pUMGkKU1c1a1pYaEVZWFJoVFdGdVlXZGxjaTVqY0hBaVBnMEtJ
Q0FnSUNBZ1BFWnBiSFJsY2o1VGIzVnlZMlVnUm1sc1pYTThMMFpwYkhSbApjajROQ2lBZ0lDQThM
ME5zUTI5dGNHbHNaVDROQ2lBZ0lDQThRMnhEYjIxd2FXeGxJRWx1WTJ4MVpHVTlJbXhwWWtkTVJW
TjJNaTVqCmNIQWlQZzBLSUNBZ0lDQWdQRVpwYkhSbGNqNVRiM1Z5WTJVZ1JtbHNaWE04TDBacGJI
UmxjajROQ2lBZ0lDQThMME5zUTI5dGNHbHMKWlQ0TkNpQWdJQ0E4UTJ4RGIyMXdhV3hsSUVsdVky
eDFaR1U5SW0xaGFXNHVZM0J3SWo0TkNpQWdJQ0FnSUR4R2FXeDBaWEkrVTI5MQpjbU5sSUVacGJH
VnpQQzlHYVd4MFpYSStEUW9nSUNBZ1BDOURiRU52YlhCcGJHVStEUW9nSUNBZ1BFTnNRMjl0Y0ds
c1pTQkpibU5zCmRXUmxQU0pRY205bmNtRnRMbU53Y0NJK0RRb2dJQ0FnSUNBOFJtbHNkR1Z5UGxO
dmRYSmpaU0JHYVd4bGN6d3ZSbWxzZEdWeVBnMEsKSUNBZ0lEd3ZRMnhEYjIxd2FXeGxQZzBLSUNB
Z0lEeERiRU52YlhCcGJHVWdTVzVqYkhWa1pUMGlVSEp2WjNKaGJVSnBibUZ5ZVM1agpjSEFpUGcw
S0lDQWdJQ0FnUEVacGJIUmxjajVUYjNWeVkyVWdSbWxzWlhNOEwwWnBiSFJsY2o0TkNpQWdJQ0E4
TDBOc1EyOXRjR2xzClpUNE5DaUFnSUNBOFEyeERiMjF3YVd4bElFbHVZMngxWkdVOUlsRjFaWEo1
TG1Od2NDSStEUW9nSUNBZ0lDQThSbWxzZEdWeVBsTnYKZFhKalpTQkdhV3hsY3p3dlJtbHNkR1Z5
UGcwS0lDQWdJRHd2UTJ4RGIyMXdhV3hsUGcwS0lDQWdJRHhEYkVOdmJYQnBiR1VnU1c1agpiSFZr
WlQwaUxpNWNZMjl0Ylc5dVhGSmxaa052ZFc1MFQySnFaV04wTG1Od2NDSStEUW9nSUNBZ0lDQThS
bWxzZEdWeVBsTnZkWEpqClpTQkdhV3hsY3p3dlJtbHNkR1Z5UGcwS0lDQWdJRHd2UTJ4RGIyMXdh
V3hsUGcwS0lDQWdJRHhEYkVOdmJYQnBiR1VnU1c1amJIVmsKWlQwaVVtVnVaR1Z5WW5WbVptVnlM
bU53Y0NJK0RRb2dJQ0FnSUNBOFJtbHNkR1Z5UGxOdmRYSmpaU0JHYVd4bGN6d3ZSbWxzZEdWeQpQ
ZzBLSUNBZ0lEd3ZRMnhEYjIxd2FXeGxQZzBLSUNBZ0lEeERiRU52YlhCcGJHVWdTVzVqYkhWa1pU
MGlVbVZ6YjNWeVkyVk5ZVzVoCloyVnlMbU53Y0NJK0RRb2dJQ0FnSUNBOFJtbHNkR1Z5UGxOdmRY
SmpaU0JHYVd4bGN6d3ZSbWxzZEdWeVBnMEtJQ0FnSUR3dlEyeEQKYjIxd2FXeGxQZzBLSUNBZ0lE
eERiRU52YlhCcGJHVWdTVzVqYkhWa1pUMGlVMmhoWkdWeUxtTndjQ0krRFFvZ0lDQWdJQ0E4Um1s
cwpkR1Z5UGxOdmRYSmpaU0JHYVd4bGN6d3ZSbWxzZEdWeVBnMEtJQ0FnSUR3dlEyeERiMjF3YVd4
bFBnMEtJQ0FnSUR4RGJFTnZiWEJwCmJHVWdTVzVqYkhWa1pUMGlWR1Y0ZEhWeVpTNWpjSEFpUGcw
S0lDQWdJQ0FnUEVacGJIUmxjajVUYjNWeVkyVWdSbWxzWlhNOEwwWnAKYkhSbGNqNE5DaUFnSUNB
OEwwTnNRMjl0Y0dsc1pUNE5DaUFnSUNBOFEyeERiMjF3YVd4bElFbHVZMngxWkdVOUlsUmxlSFIx
Y21WVApVMFV5TG1Od2NDSStEUW9nSUNBZ0lDQThSbWxzZEdWeVBsTnZkWEpqWlNCR2FXeGxjend2
Um1sc2RHVnlQZzBLSUNBZ0lEd3ZRMnhECmIyMXdhV3hsUGcwS0lDQWdJRHhEYkVOdmJYQnBiR1Vn
U1c1amJIVmtaVDBpZFhScGJHbDBhV1Z6TG1Od2NDSStEUW9nSUNBZ0lDQTgKUm1sc2RHVnlQbE52
ZFhKalpTQkdhV3hsY3p3dlJtbHNkR1Z5UGcwS0lDQWdJRHd2UTJ4RGIyMXdhV3hsUGcwS0lDQWdJ
RHhEYkVOdgpiWEJwYkdVZ1NXNWpiSFZrWlQwaVZtVnlkR1Y0UkdGMFlVMWhibUZuWlhJdVkzQndJ
ajROQ2lBZ0lDQWdJRHhHYVd4MFpYSStVMjkxCmNtTmxJRVpwYkdWelBDOUdhV3gwWlhJK0RRb2dJ
Q0FnUEM5RGJFTnZiWEJwYkdVK0RRb2dJQ0FnUEVOc1EyOXRjR2xzWlNCSmJtTnMKZFdSbFBTSlNa
VzVrWlhKbGNpNWpjSEFpUGcwS0lDQWdJQ0FnUEVacGJIUmxjajVUYjNWeVkyVWdSbWxzWlhNOEww
WnBiSFJsY2o0TgpDaUFnSUNBOEwwTnNRMjl0Y0dsc1pUNE5DaUFnUEM5SmRHVnRSM0p2ZFhBK0RR
b2dJRHhKZEdWdFIzSnZkWEErRFFvZ0lDQWdQRU5zClNXNWpiSFZrWlNCSmJtTnNkV1JsUFNKQ2FX
NWhjbmxUZEhKbFlXMHVhQ0krRFFvZ0lDQWdJQ0E4Um1sc2RHVnlQa2hsWVdSbGNpQkcKYVd4bGN6
d3ZSbWxzZEdWeVBnMEtJQ0FnSUR3dlEyeEpibU5zZFdSbFBnMEtJQ0FnSUR4RGJFbHVZMngxWkdV
Z1NXNWpiSFZrWlQwaQpRbXhwZEM1b0lqNE5DaUFnSUNBZ0lEeEdhV3gwWlhJK1NHVmhaR1Z5SUVa
cGJHVnpQQzlHYVd4MFpYSStEUW9nSUNBZ1BDOURiRWx1ClkyeDFaR1UrRFFvZ0lDQWdQRU5zU1c1
amJIVmtaU0JKYm1Oc2RXUmxQU0pDZFdabVpYSXVhQ0krRFFvZ0lDQWdJQ0E4Um1sc2RHVnkKUGto
bFlXUmxjaUJHYVd4bGN6d3ZSbWxzZEdWeVBnMEtJQ0FnSUR3dlEyeEpibU5zZFdSbFBnMEtJQ0Fn
SUR4RGJFbHVZMngxWkdVZwpTVzVqYkhWa1pUMGlRMjl1ZEdWNGRDNW9JajROQ2lBZ0lDQWdJRHhH
YVd4MFpYSStTR1ZoWkdWeUlFWnBiR1Z6UEM5R2FXeDBaWEkrCkRRb2dJQ0FnUEM5RGJFbHVZMngx
WkdVK0RRb2dJQ0FnUEVOc1NXNWpiSFZrWlNCSmJtTnNkV1JsUFNKRU0wUkRiMjV6ZEdGdWRGUmgK
WW14bExtZ2lQZzBLSUNBZ0lDQWdQRVpwYkhSbGNqNUlaV0ZrWlhJZ1JtbHNaWE04TDBacGJIUmxj
ajROQ2lBZ0lDQThMME5zU1c1agpiSFZrWlQ0TkNpQWdJQ0E4UTJ4SmJtTnNkV1JsSUVsdVkyeDFa
R1U5SWtabGJtTmxMbWdpUGcwS0lDQWdJQ0FnUEVacGJIUmxjajVJClpXRmtaWElnUm1sc1pYTThM
MFpwYkhSbGNqNE5DaUFnSUNBOEwwTnNTVzVqYkhWa1pUNE5DaUFnSUNBOFEyeEpibU5zZFdSbElF
bHUKWTJ4MVpHVTlJa1p5WVcxbFluVm1abVZ5TG1naVBnMEtJQ0FnSUNBZ1BFWnBiSFJsY2o1SVpX
RmtaWElnUm1sc1pYTThMMFpwYkhSbApjajROQ2lBZ0lDQThMME5zU1c1amJIVmtaVDROQ2lBZ0lD
QThRMnhKYm1Oc2RXUmxJRWx1WTJ4MVpHVTlJaTR1WEM0dVhHbHVZMngxClpHVmNSMHhGVXpKY1oy
d3lMbWdpUGcwS0lDQWdJQ0FnUEVacGJIUmxjajVJWldGa1pYSWdSbWxzWlhNOEwwWnBiSFJsY2o0
TkNpQWcKSUNBOEwwTnNTVzVqYkhWa1pUNE5DaUFnSUNBOFEyeEpibU5zZFdSbElFbHVZMngxWkdV
OUlpNHVYQzR1WEdsdVkyeDFaR1ZjUjB4RgpVekpjWjJ3eVpYaDBMbWdpUGcwS0lDQWdJQ0FnUEVa
cGJIUmxjajVJWldGa1pYSWdSbWxzWlhNOEwwWnBiSFJsY2o0TkNpQWdJQ0E4CkwwTnNTVzVqYkhW
a1pUNE5DaUFnSUNBOFEyeEpibU5zZFdSbElFbHVZMngxWkdVOUlpNHVYQzR1WEdsdVkyeDFaR1Zj
UjB4RlV6SmMKWjJ3eWNHeGhkR1p2Y20wdWFDSStEUW9nSUNBZ0lDQThSbWxzZEdWeVBraGxZV1Js
Y2lCR2FXeGxjend2Um1sc2RHVnlQZzBLSUNBZwpJRHd2UTJ4SmJtTnNkV1JsUGcwS0lDQWdJRHhE
YkVsdVkyeDFaR1VnU1c1amJIVmtaVDBpU0dGdVpHeGxRV3hzYjJOaGRHOXlMbWdpClBnMEtJQ0Fn
SUNBZ1BFWnBiSFJsY2o1SVpXRmtaWElnUm1sc1pYTThMMFpwYkhSbGNqNE5DaUFnSUNBOEwwTnNT
VzVqYkhWa1pUNE4KQ2lBZ0lDQThRMnhKYm1Oc2RXUmxJRWx1WTJ4MVpHVTlJa2x1WkdWNFJHRjBZ
VTFoYm1GblpYSXVhQ0krRFFvZ0lDQWdJQ0E4Um1scwpkR1Z5UGtobFlXUmxjaUJHYVd4bGN6d3ZS
bWxzZEdWeVBnMEtJQ0FnSUR3dlEyeEpibU5zZFdSbFBnMEtJQ0FnSUR4RGJFbHVZMngxClpHVWdT
VzVqYkhWa1pUMGliV0ZwYmk1b0lqNE5DaUFnSUNBZ0lEeEdhV3gwWlhJK1NHVmhaR1Z5SUVacGJH
VnpQQzlHYVd4MFpYSSsKRFFvZ0lDQWdQQzlEYkVsdVkyeDFaR1UrRFFvZ0lDQWdQRU5zU1c1amJI
VmtaU0JKYm1Oc2RXUmxQU0p0WVhSb2RYUnBiQzVvSWo0TgpDaUFnSUNBZ0lEeEdhV3gwWlhJK1NH
VmhaR1Z5SUVacGJHVnpQQzlHYVd4MFpYSStEUW9nSUNBZ1BDOURiRWx1WTJ4MVpHVStEUW9nCklD
QWdQRU5zU1c1amJIVmtaU0JKYm1Oc2RXUmxQU0pRY205bmNtRnRMbWdpUGcwS0lDQWdJQ0FnUEVa
cGJIUmxjajVJWldGa1pYSWcKUm1sc1pYTThMMFpwYkhSbGNqNE5DaUFnSUNBOEwwTnNTVzVqYkhW
a1pUNE5DaUFnSUNBOFEyeEpibU5zZFdSbElFbHVZMngxWkdVOQpJbEJ5YjJkeVlXMUNhVzVoY25r
dWFDSStEUW9nSUNBZ0lDQThSbWxzZEdWeVBraGxZV1JsY2lCR2FXeGxjend2Um1sc2RHVnlQZzBL
CklDQWdJRHd2UTJ4SmJtTnNkV1JsUGcwS0lDQWdJRHhEYkVsdVkyeDFaR1VnU1c1amJIVmtaVDBp
VVhWbGNua3VhQ0krRFFvZ0lDQWcKSUNBOFJtbHNkR1Z5UGtobFlXUmxjaUJHYVd4bGN6d3ZSbWxz
ZEdWeVBnMEtJQ0FnSUR3dlEyeEpibU5zZFdSbFBnMEtJQ0FnSUR4RApiRWx1WTJ4MVpHVWdTVzVq
YkhWa1pUMGlMaTVjWTI5dGJXOXVYRkpsWmtOdmRXNTBUMkpxWldOMExtZ2lQZzBLSUNBZ0lDQWdQ
RVpwCmJIUmxjajVJWldGa1pYSWdSbWxzWlhNOEwwWnBiSFJsY2o0TkNpQWdJQ0E4TDBOc1NXNWpi
SFZrWlQ0TkNpQWdJQ0E4UTJ4SmJtTnMKZFdSbElFbHVZMngxWkdVOUlsSmxibVJsY21KMVptWmxj
aTVvSWo0TkNpQWdJQ0FnSUR4R2FXeDBaWEkrU0dWaFpHVnlJRVpwYkdWegpQQzlHYVd4MFpYSStE
UW9nSUNBZ1BDOURiRWx1WTJ4MVpHVStEUW9nSUNBZ1BFTnNTVzVqYkhWa1pTQkpibU5zZFdSbFBT
SnlaWE52CmRYSmpaUzVvSWo0TkNpQWdJQ0FnSUR4R2FXeDBaWEkrU0dWaFpHVnlJRVpwYkdWelBD
OUdhV3gwWlhJK0RRb2dJQ0FnUEM5RGJFbHUKWTJ4MVpHVStEUW9nSUNBZ1BFTnNTVzVqYkhWa1pT
QkpibU5zZFdSbFBTSlNaWE52ZFhKalpVMWhibUZuWlhJdWFDSStEUW9nSUNBZwpJQ0E4Um1sc2RH
VnlQa2hsWVdSbGNpQkdhV3hsY3p3dlJtbHNkR1Z5UGcwS0lDQWdJRHd2UTJ4SmJtTnNkV1JsUGcw
S0lDQWdJRHhECmJFbHVZMngxWkdVZ1NXNWpiSFZrWlQwaVUyaGhaR1Z5TG1naVBnMEtJQ0FnSUNB
Z1BFWnBiSFJsY2o1SVpXRmtaWElnUm1sc1pYTTgKTDBacGJIUmxjajROQ2lBZ0lDQThMME5zU1c1
amJIVmtaVDROQ2lBZ0lDQThRMnhKYm1Oc2RXUmxJRWx1WTJ4MVpHVTlJbFJsZUhSMQpjbVV1YUNJ
K0RRb2dJQ0FnSUNBOFJtbHNkR1Z5UGtobFlXUmxjaUJHYVd4bGN6d3ZSbWxzZEdWeVBnMEtJQ0Fn
SUR3dlEyeEpibU5zCmRXUmxQZzBLSUNBZ0lEeERiRWx1WTJ4MVpHVWdTVzVqYkhWa1pUMGlkWFJw
YkdsMGFXVnpMbWdpUGcwS0lDQWdJQ0FnUEVacGJIUmwKY2o1SVpXRmtaWElnUm1sc1pYTThMMFpw
YkhSbGNqNE5DaUFnSUNBOEwwTnNTVzVqYkhWa1pUNE5DaUFnSUNBOFEyeEpibU5zZFdSbApJRWx1
WTJ4MVpHVTlJaTR1WEdOdmJXMXZibHgyWlhKemFXOXVMbWdpUGcwS0lDQWdJQ0FnUEVacGJIUmxj
ajVJWldGa1pYSWdSbWxzClpYTThMMFpwYkhSbGNqNE5DaUFnSUNBOEwwTnNTVzVqYkhWa1pUNE5D
aUFnSUNBOFEyeEpibU5zZFdSbElFbHVZMngxWkdVOUluWmwKY25SbGVHTnZiblpsY25OcGIyNHVh
Q0krRFFvZ0lDQWdJQ0E4Um1sc2RHVnlQa2hsWVdSbGNpQkdhV3hsY3p3dlJtbHNkR1Z5UGcwSwpJ
Q0FnSUR3dlEyeEpibU5zZFdSbFBnMEtJQ0FnSUR4RGJFbHVZMngxWkdVZ1NXNWpiSFZrWlQwaVZt
VnlkR1Y0UkdGMFlVMWhibUZuClpYSXVhQ0krRFFvZ0lDQWdJQ0E4Um1sc2RHVnlQa2hsWVdSbGNp
QkdhV3hsY3p3dlJtbHNkR1Z5UGcwS0lDQWdJRHd2UTJ4SmJtTnMKZFdSbFBnMEtJQ0FnSUR4RGJF
bHVZMngxWkdVZ1NXNWpiSFZrWlQwaVVtVnVaR1Z5WlhJdWFDSStEUW9nSUNBZ0lDQThSbWxzZEdW
eQpQa2hsWVdSbGNpQkdhV3hsY3p3dlJtbHNkR1Z5UGcwS0lDQWdJRHd2UTJ4SmJtTnNkV1JsUGcw
S0lDQWdJRHhEYkVsdVkyeDFaR1VnClNXNWpiSFZrWlQwaVJXNTFiVlI1Y0dWekxtZ2lQZzBLSUNB
Z0lDQWdQRVpwYkhSbGNqNUlaV0ZrWlhJZ1JtbHNaWE04TDBacGJIUmwKY2o0TkNpQWdJQ0E4TDBO
c1NXNWpiSFZrWlQ0TkNpQWdQQzlKZEdWdFIzSnZkWEErRFFvZ0lEeEpkR1Z0UjNKdmRYQStEUW9n
SUNBZwpQRTV2Ym1VZ1NXNWpiSFZrWlQwaWJHbGlSMHhGVTNZeUxtUmxaaUkrRFFvZ0lDQWdJQ0E4
Um1sc2RHVnlQbE52ZFhKalpTQkdhV3hsCmN6d3ZSbWxzZEdWeVBnMEtJQ0FnSUR3dlRtOXVaVDRO
Q2lBZ1BDOUpkR1Z0UjNKdmRYQStEUW9nSUR4SmRHVnRSM0p2ZFhBK0RRb2cKSUNBZ1BGSmxjMjkx
Y21ObFEyOXRjR2xzWlNCSmJtTnNkV1JsUFNKc2FXSkhURVZUZGpJdWNtTWlJQzgrRFFvZ0lEd3ZT
WFJsYlVkeQpiM1Z3UGcwS1BDOVFjbTlxWldOMFBnPT0KCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>