<?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>210401</bug_id>
          
          <creation_ts>2020-04-11 22:00:36 -0700</creation_ts>
          <short_desc>[LFC][TFC] Add support for fixed width columns</short_desc>
          <delta_ts>2020-04-12 10:22:18 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1640645</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-04-11 22:00:36 -0700</bug_when>
    <thetext>This is in preparation for the column spanner work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640646</commentid>
    <comment_count>1</comment_count>
      <attachid>396211</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-04-11 22:05:16 -0700</bug_when>
    <thetext>Created attachment 396211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640691</commentid>
    <comment_count>2</comment_count>
      <attachid>396225</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-04-12 09:55:28 -0700</bug_when>
    <thetext>Created attachment 396225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640693</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-12 10:21:49 -0700</bug_when>
    <thetext>Committed r259982: &lt;https://trac.webkit.org/changeset/259982&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 396225.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640694</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-12 10:22:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/61677847&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396211</attachid>
            <date>2020-04-11 22:05:16 -0700</date>
            <delta_ts>2020-04-12 09:55:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210401-20200411220515.patch</filename>
            <type>text/plain</type>
            <size>33377</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM1MWNkZGNmZDIyM2Y1
NzkyZDZjOTg3ZmIzNzNkNjFkNTdjODE5OC4uOGU0OGM2MDQ1YTcyZTQ5NjVhYWIyZjRiNWJjYWY1
OWMzZTIwZDQwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA0LTExICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bVEZDXSBBZGQgc3Vw
cG9ydCBmb3IgZml4ZWQgd2lkdGggY29sdW1ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNDAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgYWRkaW5nIHN1
cHBvcnQgZm9yIHNwYW5uZXIgY2VsbHMuCisgICAgICAgIEZpeGVkIHdpZHRoIGNvbHVtbnMgKDxj
b2w+IGFuZCA8dGQ+KSBkb24ndCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3Bhbm5lciB3aWR0aCBkaXN0
cmlidXRpb24uCisKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM6Om9wZXJhdG9yLT0pOgorICAgICAgICAqIGxheW91dC9WZXJpZmljYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphcmVFc3NlbnRpYWxseUVxdWFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0Q29udGV4dDo6dmVyaWZ5QW5kT3V0cHV0TWlzbWF0
Y2hpbmdMYXlvdXRUcmVlKToKKyAgICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZFBy
ZWZlcnJlZFdpZHRoRm9yQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFIb3Jpem9udGFsU3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6dXNlQXNDb250ZW50TG9naWNhbFdp
ZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9y
bWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzRm9yQ2VsbCk6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUdyaWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6OkNvbHVtbjo6aXNGaXhl
ZFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDZWxs
Ojppc0ZpeGVkV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdy
aWQ6OlNsb3Q6OlNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6OmFw
cGVuZENlbGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6OkNvbHVtbjo6
c2V0V2lkdGhDb25zdHJhaW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRhYmxlR3JpZDo6Q29sdW1uOjp3aWR0aENvbnN0cmFpbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDb2x1bW46Omhhc0ZpeGVkV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6Ondp
ZHRoQ29uc3RyYWludHMpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC90YWJsZWZvcm1hdHRp
bmcvVGFibGVHcmlkLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6c2V0
V2lkdGhDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6
d2lkdGhDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6
Q29sdW1uOjpzZXRIYXNGaXhlZFdpZHRoQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRhYmxlR3JpZDo6Q29sdW1uOjpoYXNGaXhlZFdpZHRoQ2VsbCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6Y2VsbCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6Y2VsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6d2lkdGhDb25zdHJhaW50cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6c2V0V2lkdGhDb25zdHJhaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6aGFzQ29sdW1u
U3BhbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6
aGFzUm93U3BhbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6
U2xvdDo6aXNDb2x1bW5TcGFubmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
VGFibGVHcmlkOjpTbG90Ojppc1Jvd1NwYW5uZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpUYWJsZUdyaWQ6Omhhc0NvbXB1dGVkV2lkdGhDb25zdHJhaW50cyBjb25zdCk6IERl
bGV0ZWQuCisKIDIwMjAtMDQtMTEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtURkNdIEFkZCB0YWJsZSBzdXBwb3J0IHRvIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbkZsb3dXaWR0aEFuZE1hcmdpbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBlZWQ4MDRkNmZlZmEwMmIxNWY3MzMzNWNhMGQ5
ZmU5YTczNTBkZTg1Li5lZDQxOWI3ODlmMDAyNDdmMTljZWY2YjAwZTQ5MGZlMzlhNGE5NGE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNzEsNiArNzEs
NyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgewogICAg
ICAgICB2b2lkIGV4cGFuZChMYXlvdXRVbml0IGhvcml6b250YWxWYWx1ZSk7CiAgICAgICAgIElu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIG9wZXJhdG9yKz0oY29uc3QgSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyYpOworICAgICAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzJiBvcGVyYXRv
ci09KExheW91dFVuaXQpOwogCiAgICAgICAgIExheW91dFVuaXQgbWluaW11bTsKICAgICAgICAg
TGF5b3V0VW5pdCBtYXhpbXVtOwpAQCAtMjI4LDYgKzIyOSwxMyBAQCBpbmxpbmUgRm9ybWF0dGlu
Z0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIEZvcm1hdHRpbmdDb250ZXh0OjpJ
bnRyaW5zaQogICAgIHJldHVybiAqdGhpczsKIH0KIAoraW5saW5lIEZvcm1hdHRpbmdDb250ZXh0
OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzJiBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2lj
V2lkdGhDb25zdHJhaW50czo6b3BlcmF0b3ItPShMYXlvdXRVbml0IHZhbHVlKQoreworICAgIG1p
bmltdW0gLT0gdmFsdWU7CisgICAgbWF4aW11bSAtPSB2YWx1ZTsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9y
bWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMDhlMDI4
M2Y0ZWQ4ZjE2MGYwZTljMmYyNTFlM2U2MWI2NDczZDY1OS4uNWZlZDQ2MmY1NjNmNjAyOGI4ODAx
MTJlZjRiNGEwZDFiY2U5NjczNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBA
IC0xODAsMTMgKzE4MCwxNiBAQCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludAogICAgIC8vIGEgZ2Vu
ZXJpYyBzaHJpbmstdG8gZml0IGJsb2NrIGxldmVsIGJveCBsaWtlIGEgZmxvYXQgYm94IHdvdWxk
IGJlIGp1c3Qgc2l6ZWQgdG8gdGhlIGNvbXB1dGVkIHZhbHVlIG9mICJ3aWR0aCIsIHRhYmxlcwog
ICAgIC8vIGNhbiBhY3R1YWxseSBiZSBzdHJlY2hlZCB3YXkgb3Zlci4KICAgICBhdXRvJiBncmlk
ID0gZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCk7Ci0gICAgaWYgKCFncmlkLmhhc0NvbXB1
dGVkV2lkdGhDb25zdHJhaW50cygpKSB7Ci0gICAgICAgIC8vIDEuIEVuc3VyZSBlYWNoIGNlbGwg
c2xvdCBpcyBvY2N1cGllZCBieSBhdCBsZWFzdCBvbmUgY2VsbC4KLSAgICAgICAgZW5zdXJlVGFi
bGVHcmlkKCk7Ci0gICAgICAgIC8vIDIuIENvbXB1dGUgdGhlIG1pbmltdW0vbWF4aW11bSB3aWR0
aCBvZiBlYWNoIGNvbHVtbi4KLSAgICAgICAgY29tcHV0ZVByZWZlcnJlZFdpZHRoRm9yQ29sdW1u
cygpOwotICAgIH0KLSAgICByZXR1cm4gZ3JpZC53aWR0aENvbnN0cmFpbnRzKCk7CisgICAgaWYg
KGF1dG8gY29tcHV0ZWRXaWR0aENvbnN0cmFpbnRzID0gZ3JpZC53aWR0aENvbnN0cmFpbnRzKCkp
CisgICAgICAgIHJldHVybiAqY29tcHV0ZWRXaWR0aENvbnN0cmFpbnRzOworCisgICAgLy8gMS4g
RW5zdXJlIGVhY2ggY2VsbCBzbG90IGlzIG9jY3VwaWVkIGJ5IGF0IGxlYXN0IG9uZSBjZWxsLgor
ICAgIGVuc3VyZVRhYmxlR3JpZCgpOworICAgIC8vIDIuIENvbXB1dGUgdGhlIG1pbmltdW0vbWF4
aW11bSB3aWR0aCBvZiBlYWNoIGNvbHVtbi4KKyAgICBhdXRvIGNvbXB1dGVkV2lkdGhDb25zdHJh
aW50cyA9IGNvbXB1dGVkUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKCk7CisgICAgY29tcHV0ZWRX
aWR0aENvbnN0cmFpbnRzLmV4cGFuZChncmlkLnRvdGFsSG9yaXpvbnRhbFNwYWNpbmcoKSk7Cisg
ICAgZ3JpZC5zZXRXaWR0aENvbnN0cmFpbnRzKGNvbXB1dGVkV2lkdGhDb25zdHJhaW50cyk7Cisg
ICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhDb25zdHJhaW50czsKIH0KIAogdm9pZCBUYWJsZUZvcm1h
dHRpbmdDb250ZXh0OjplbnN1cmVUYWJsZUdyaWQoKQpAQCAtMjMzLDY3ICsyMzYsODQgQEAgdm9p
ZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjplbnN1cmVUYWJsZUdyaWQoKQogICAgIH0KIH0KIAot
dm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlUHJlZmVycmVkV2lkdGhGb3JDb2x1
bW5zKCkKK0Zvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKCkKIHsK
ICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKICAg
ICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlLnRhYmxlR3JpZCgpOwotICAgIEFTU0VSVCgh
Z3JpZC5oYXNDb21wdXRlZFdpZHRoQ29uc3RyYWludHMoKSk7CisgICAgQVNTRVJUKCFncmlkLndp
ZHRoQ29uc3RyYWludHMoKSk7CiAKICAgICAvLyAxLiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gY29u
dGVudCB3aWR0aCAoTUNXKSBvZiBlYWNoIGNlbGw6IHRoZSBmb3JtYXR0ZWQgY29udGVudCBtYXkg
c3BhbiBhbnkgbnVtYmVyIG9mIGxpbmVzIGJ1dCBtYXkgbm90IG92ZXJmbG93IHRoZSBjZWxsIGJv
eC4KICAgICAvLyAgICBJZiB0aGUgc3BlY2lmaWVkICd3aWR0aCcgKFcpIG9mIHRoZSBjZWxsIGlz
IGdyZWF0ZXIgdGhhbiBNQ1csIFcgaXMgdGhlIG1pbmltdW0gY2VsbCB3aWR0aC4gQSB2YWx1ZSBv
ZiAnYXV0bycgbWVhbnMgdGhhdCBNQ1cgaXMgdGhlIG1pbmltdW0gY2VsbCB3aWR0aC4KICAgICAv
LyAgICBBbHNvLCBjYWxjdWxhdGUgdGhlICJtYXhpbXVtIiBjZWxsIHdpZHRoIG9mIGVhY2ggY2Vs
bDogZm9ybWF0dGluZyB0aGUgY29udGVudCB3aXRob3V0IGJyZWFraW5nIGxpbmVzIG90aGVyIHRo
YW4gd2hlcmUgZXhwbGljaXQgbGluZSBicmVha3Mgb2NjdXIuCiAgICAgZm9yIChhdXRvJiBjZWxs
IDogZ3JpZC5jZWxscygpKSB7CiAgICAgICAgIGF1dG8mIGNlbGxCb3ggPSBjZWxsLT5ib3goKTsK
LSAgICAgICAgQVNTRVJUKGNlbGxCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsK
KyAgICAgICAgQVNTRVJUKGNlbGxCb3guZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
KCkpOwogCiAgICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGggPSBmb3JtYXR0aW5nU3RhdGUuaW50
cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChjZWxsQm94KTsKICAgICAgICAgaWYgKCFpbnRy
aW5zaWNXaWR0aCkgewotICAgICAgICAgICAgaW50cmluc2ljV2lkdGggPSBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIHsgfTsKLSAgICAgICAgICAgIGlmIChpczxDb250YWluZXJCb3g+KGNlbGxC
b3gpICYmIGRvd25jYXN0PENvbnRhaW5lckJveD4oY2VsbEJveCkuaGFzSW5GbG93T3JGbG9hdGlu
Z0NoaWxkKCkpCi0gICAgICAgICAgICAgICAgaW50cmluc2ljV2lkdGggPSBMYXlvdXRDb250ZXh0
OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChkb3duY2FzdDxDb250YWluZXJCb3g+KGNlbGxCb3gp
LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0g
ICAgICAgICAgICBpbnRyaW5zaWNXaWR0aCA9IGdlb21ldHJ5KCkuY29uc3RyYWluQnlNaW5NYXhX
aWR0aChjZWxsQm94LCAqaW50cmluc2ljV2lkdGgpOwotICAgICAgICAgICAgYXV0byBib3JkZXIg
PSBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGNlbGxCb3gpOwotICAgICAgICAgICAgYXV0byBw
YWRkaW5nID0gKmdlb21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5nKGNlbGxCb3gsIHsgfSk7Ci0KLSAg
ICAgICAgICAgIGludHJpbnNpY1dpZHRoLT5leHBhbmQoYm9yZGVyLmhvcml6b250YWwud2lkdGgo
KSArIHBhZGRpbmcuaG9yaXpvbnRhbC53aWR0aCgpKTsKKyAgICAgICAgICAgIGludHJpbnNpY1dp
ZHRoID0gZ2VvbWV0cnkoKS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQ2VsbChkb3duY2Fz
dDxDb250YWluZXJCb3g+KGNlbGxCb3gpKTsKICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5z
ZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNlbGxCb3gsICppbnRyaW5zaWNXaWR0
aCk7CiAgICAgICAgIH0KLQotICAgICAgICBhdXRvIGNvbHVtblNwYW4gPSBjZWxsLT5zcGFuKCku
Y29sdW1uOwotICAgICAgICBhdXRvIHNsb3RJbnRyaW5zaWNXaWR0aCA9IEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgaW50cmluc2ljV2lkdGgtPm1pbmltdW0g
LyBjb2x1bW5TcGFuLCBpbnRyaW5zaWNXaWR0aC0+bWF4aW11bSAvIGNvbHVtblNwYW4gfTsKLSAg
ICAgICAgYXV0byBpbml0aWFsUG9zaXRpb24gPSBjZWxsLT5wb3NpdGlvbigpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtblNwYW47ICsraSkKLSAgICAgICAgICAgIGdyaWQu
c2xvdCh7IGluaXRpYWxQb3NpdGlvbi5jb2x1bW4gKyBpLCBpbml0aWFsUG9zaXRpb24ucm93IH0p
LT53aWR0aENvbnN0cmFpbnRzID0gc2xvdEludHJpbnNpY1dpZHRoOworICAgICAgICAvLyBTcGFu
bmVyIGNlbGxzIHB1dCB0aGVpciBpbnRyaW5zaWMgd2lkdGhzIG9uIHRoZSBpbml0aWFsIHNsb3Rz
LgorICAgICAgICBncmlkLnNsb3QoY2VsbC0+cG9zaXRpb24oKSktPnNldFdpZHRoQ29uc3RyYWlu
dHMoKmludHJpbnNpY1dpZHRoKTsKICAgICB9Ci0gICAgLy8gMi4gRm9yIGVhY2ggY29sdW1uLCBk
ZXRlcm1pbmUgYSBtYXhpbXVtIGFuZCBtaW5pbXVtIGNvbHVtbiB3aWR0aCBmcm9tIHRoZSBjZWxs
cyB0aGF0IHNwYW4gb25seSB0aGF0IGNvbHVtbi4KLSAgICAvLyAgICBUaGUgbWluaW11bSBpcyB0
aGF0IHJlcXVpcmVkIGJ5IHRoZSBjZWxsIHdpdGggdGhlIGxhcmdlc3QgbWluaW11bSBjZWxsIHdp
ZHRoIChvciB0aGUgY29sdW1uICd3aWR0aCcsIHdoaWNoZXZlciBpcyBsYXJnZXIpLgotICAgIC8v
ICAgIFRoZSBtYXhpbXVtIGlzIHRoYXQgcmVxdWlyZWQgYnkgdGhlIGNlbGwgd2l0aCB0aGUgbGFy
Z2VzdCBtYXhpbXVtIGNlbGwgd2lkdGggKG9yIHRoZSBjb2x1bW4gJ3dpZHRoJywgd2hpY2hldmVy
IGlzIGxhcmdlcikuCisKICAgICBhdXRvJiBjb2x1bW5MaXN0ID0gZ3JpZC5jb2x1bW5zKCkubGlz
dCgpOwotICAgIGF1dG8gbnVtYmVyT2ZSb3dzID0gZ3JpZC5yb3dzKCkuc2l6ZSgpOwotICAgIGF1
dG8gbnVtYmVyT2ZDb2x1bW5zID0gY29sdW1uTGlzdC5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
Y29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IG51bWJlck9mQ29sdW1uczsgKytjb2x1bW5J
bmRleCkgewotICAgICAgICBhdXRvIGNvbHVtbkludHJpbnNpY1dpZHRocyA9IEZvcm1hdHRpbmdD
b250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgfTsKLSAgICAgICAgZm9yIChzaXpl
X3Qgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IG51bWJlck9mUm93czsgKytyb3dJbmRleCkgewot
ICAgICAgICAgICAgYXV0byogc2xvdCA9IGdyaWQuc2xvdCh7IGNvbHVtbkluZGV4LCByb3dJbmRl
eCB9KTsKLSAgICAgICAgICAgIGNvbHVtbkludHJpbnNpY1dpZHRocy5taW5pbXVtID0gc3RkOjpt
YXgoc2xvdC0+d2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCBjb2x1bW5JbnRyaW5zaWNXaWR0aHMu
bWluaW11bSk7Ci0gICAgICAgICAgICBjb2x1bW5JbnRyaW5zaWNXaWR0aHMubWF4aW11bSA9IHN0
ZDo6bWF4KHNsb3QtPndpZHRoQ29uc3RyYWludHMubWF4aW11bSwgY29sdW1uSW50cmluc2ljV2lk
dGhzLm1heGltdW0pOwotICAgICAgICB9Ci0gICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhl
IGNvbnRlbnQgZHJpdmVuIG1pbi9tYXggd2lkdGhzLCBjaGVjayBpZiA8Y29sPiBzZXRzIGEgcHJl
ZmVycmVkIHdpZHRoIG9uIHRoaXMgY29sdW1uLgotICAgICAgICBpZiAoYXV0byogY29sdW1uQm94
ID0gY29sdW1uTGlzdFtjb2x1bW5JbmRleF0uYm94KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
IGNvbHVtblByZWZlcnJlZFdpZHRoID0gZ2VvbWV0cnkoKS5jb21wdXRlZENvbHVtbldpZHRoKCpj
b2x1bW5Cb3gpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTGV0J3Mgc3RheSBhdCBsZWFzdCBhcyB3
aWRlIGFzIHRoZSBwcmVmZXJyZWQgd2lkdGguCi0gICAgICAgICAgICAgICAgY29sdW1uSW50cmlu
c2ljV2lkdGhzLm1pbmltdW0gPSBzdGQ6Om1heChjb2x1bW5JbnRyaW5zaWNXaWR0aHMubWluaW11
bSwgKmNvbHVtblByZWZlcnJlZFdpZHRoKTsKKyAgICBWZWN0b3I8T3B0aW9uYWw8TGF5b3V0VW5p
dD4+IGZpeGVkV2lkdGhDb2x1bW5zOworICAgIGZvciAoc2l6ZV90IGNvbHVtbkluZGV4ID0gMDsg
Y29sdW1uSW5kZXggPCBjb2x1bW5MaXN0LnNpemUoKTsgKytjb2x1bW5JbmRleCkgeworICAgICAg
ICBhdXRvIGZpeGVkV2lkdGggPSBbJl0gKCkgLT4gT3B0aW9uYWw8TGF5b3V0VW5pdD4geworICAg
ICAgICAgICAgYXV0byogY29sdW1uQm94ID0gY29sdW1uTGlzdFtjb2x1bW5JbmRleF0uYm94KCk7
CisgICAgICAgICAgICBpZiAoIWNvbHVtbkJveCkgeworICAgICAgICAgICAgICAgIC8vIEFub3lu
bW91cyBjb2x1bW5zIGRvbid0IGhhdmUgYXNzb2NpYXRlZCBsYXlvdXQgYm94ZXMuCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRv
IHdpZHRoID0gY29sdW1uQm94LT5jb2x1bW5XaWR0aCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biB3aWR0aDsKKyAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmNvbXB1dGVkQ29sdW1uV2lk
dGgoKmNvbHVtbkJveCk7CisgICAgICAgIH07CisgICAgICAgIGZpeGVkV2lkdGhDb2x1bW5zLmFw
cGVuZChmaXhlZFdpZHRoKCkpOworICAgIH0KKworICAgIFZlY3RvcjxGb3JtYXR0aW5nQ29udGV4
dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cz4gY29sdW1uSW50cmluc2ljV2lkdGhzOworICAg
IC8vIENvbGxlY3QgaGUgbWluL21heCB3aWR0aCBmb3IgZWFjaCBjb2x1bW4gYW5kIGZpbmFsaXpl
IHRoZSBwcmVmZXJyZWQgd2lkdGggZm9yIHRoZSB0YWJsZS4KKyAgICBmb3IgKHNpemVfdCBjb2x1
bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29sdW1uTGlzdC5zaXplKCk7ICsrY29sdW1uSW5k
ZXgpIHsKKyAgICAgICAgY29sdW1uSW50cmluc2ljV2lkdGhzLmFwcGVuZChGb3JtYXR0aW5nQ29u
dGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH0pOworICAgICAgICBmb3IgKHNpemVf
dCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgZ3JpZC5yb3dzKCkuc2l6ZSgpOyArK3Jvd0luZGV4
KSB7CisgICAgICAgICAgICBhdXRvJiBzbG90ID0gKmdyaWQuc2xvdCh7IGNvbHVtbkluZGV4LCBy
b3dJbmRleCB9KTsKKyAgICAgICAgICAgIGlmIChzbG90Lmhhc0NvbHVtblNwYW4oKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGNlbGwgPSBzbG90LmNlbGwoKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHdpZHRoQ29uc3RyYWludHNUb0Rpc3RyaWJ1dGUgPSBzbG90LndpZHRoQ29uc3RyYWludHMo
KTsKKyAgICAgICAgICAgICAgICBhdXRvIG51bWJlck9mTm9uRml4ZWRTcGFubmVkQ29sdW1ucyA9
IGNlbGwuY29sdW1uU3BhbigpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvbHVtblNw
YW5JbmRleCA9IGNlbGwuc3RhcnRDb2x1bW4oKTsgY29sdW1uU3BhbkluZGV4IDwgY2VsbC5lbmRD
b2x1bW4oKTsgKytjb2x1bW5TcGFuSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1
dG8gZml4ZWRXaWR0aCA9IGZpeGVkV2lkdGhDb2x1bW5zW2NvbHVtblNwYW5JbmRleF0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdpZHRoQ29uc3RyYWludHNUb0Rpc3RyaWJ1dGUgLT0gKmZp
eGVkV2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICAtLW51bWJlck9mTm9uRml4ZWRTcGFu
bmVkQ29sdW1uczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW5TcGFuSW5kZXggPSBjZWxsLnN0YXJ0Q29s
dW1uKCk7IGNvbHVtblNwYW5JbmRleCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29sdW1uU3Bhbklu
ZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5J
bmRleF0ubWluaW11bSA9IHN0ZDo6bWF4KHdpZHRoQ29uc3RyYWludHNUb0Rpc3RyaWJ1dGUubWlu
aW11bSAvIG51bWJlck9mTm9uRml4ZWRTcGFubmVkQ29sdW1ucywgY29sdW1uSW50cmluc2ljV2lk
dGhzW2NvbHVtbkluZGV4XS5taW5pbXVtKTsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uSW50
cmluc2ljV2lkdGhzW2NvbHVtbkluZGV4XS5tYXhpbXVtID0gc3RkOjptYXgod2lkdGhDb25zdHJh
aW50c1RvRGlzdHJpYnV0ZS5tYXhpbXVtIC8gbnVtYmVyT2ZOb25GaXhlZFNwYW5uZWRDb2x1bW5z
LCBjb2x1bW5JbnRyaW5zaWNXaWR0aHNbY29sdW1uSW5kZXhdLm1heGltdW0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBjb2x1
bW5GaXhlZFdpZHRoID0gZml4ZWRXaWR0aENvbHVtbnNbY29sdW1uSW5kZXhdOworICAgICAgICAg
ICAgICAgIGF1dG8gd2lkdGhDb25zdHJhaW50cyA9ICFjb2x1bW5GaXhlZFdpZHRoID8gc2xvdC53
aWR0aENvbnN0cmFpbnRzKCkgOiBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyB7ICpjb2x1bW5GaXhlZFdpZHRoLCAqY29sdW1uRml4ZWRXaWR0aCB9OworICAgICAg
ICAgICAgICAgIGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0ubWluaW11bSA9IHN0
ZDo6bWF4KHdpZHRoQ29uc3RyYWludHMubWluaW11bSwgY29sdW1uSW50cmluc2ljV2lkdGhzW2Nv
bHVtbkluZGV4XS5taW5pbXVtKTsKKyAgICAgICAgICAgICAgICBjb2x1bW5JbnRyaW5zaWNXaWR0
aHNbY29sdW1uSW5kZXhdLm1heGltdW0gPSBzdGQ6Om1heCh3aWR0aENvbnN0cmFpbnRzLm1heGlt
dW0sIGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0ubWF4aW11bSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgY29sdW1uTGlzdFtjb2x1bW5JbmRleF0uc2V0V2lk
dGhDb25zdHJhaW50cyhjb2x1bW5JbnRyaW5zaWNXaWR0aHMpOwogICAgIH0KKyAgICBhdXRvIHRh
YmxlV2lkdGhDb25zdHJhaW50cyA9IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OworICAg
IGZvciAoYXV0byYgY29sdW1uSW50cmluc2ljV2lkdGggOiBjb2x1bW5JbnRyaW5zaWNXaWR0aHMp
CisgICAgICAgIHRhYmxlV2lkdGhDb25zdHJhaW50cyArPSBjb2x1bW5JbnRyaW5zaWNXaWR0aDsK
KyAgICByZXR1cm4gdGFibGVXaWR0aENvbnN0cmFpbnRzOwogfQogCi12b2lkIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFIb3Jpem9udGFsU3BhY2UoTGF5
b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkKK3ZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxTcGFjZShMYXlvdXRVbml0IGF2
YWlsYWJsZUhvcml6b250YWxTcGFjZSkKIHsKICAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0
YXRlKCkudGFibGVHcmlkKCk7Ci0gICAgQVNTRVJUKGdyaWQuaGFzQ29tcHV0ZWRXaWR0aENvbnN0
cmFpbnRzKCkpOwotICAgIGF1dG8gdGFibGVXaWR0aENvbnN0cmFpbnRzID0gZ3JpZC53aWR0aENv
bnN0cmFpbnRzKCk7CisgICAgYXV0byYgY29sdW1ucyA9IGdyaWQuY29sdW1ucygpOworICAgIGF1
dG8mIHJvd3MgPSBncmlkLnJvd3MoKTsKKyAgICBhdXRvIHRhYmxlV2lkdGhDb25zdHJhaW50cyA9
ICpncmlkLndpZHRoQ29uc3RyYWludHMoKTsKIAogICAgIC8vIENvbHVtbiBhbmQgY2FwdGlvbiB3
aWR0aHMgaW5mbHVlbmNlIHRoZSBmaW5hbCB0YWJsZSB3aWR0aCBhcyBmb2xsb3dzOgogICAgIC8v
IElmIHRoZSAndGFibGUnIG9yICdpbmxpbmUtdGFibGUnIGVsZW1lbnQncyAnd2lkdGgnIHByb3Bl
cnR5IGhhcyBhIGNvbXB1dGVkIHZhbHVlIChXKSBvdGhlciB0aGFuICdhdXRvJywgdGhlIHVzZWQg
d2lkdGggaXMgdGhlIGdyZWF0ZXIgb2YKQEAgLTMwMiwxNiArMzIyLDU4IEBAIHZvaWQgVGFibGVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxTcGFj
ZShMYXlvdXRVbml0CiAgICAgLy8gSWYgdGhlICd0YWJsZScgb3IgJ2lubGluZS10YWJsZScgZWxl
bWVudCBoYXMgJ3dpZHRoOiBhdXRvJywgdGhlIHVzZWQgd2lkdGggaXMgdGhlIGdyZWF0ZXIgb2Yg
dGhlIHRhYmxlJ3MgY29udGFpbmluZyBibG9jayB3aWR0aCwKICAgICAvLyBDQVBNSU4sIGFuZCBN
SU4uIEhvd2V2ZXIsIGlmIGVpdGhlciBDQVBNSU4gb3IgdGhlIG1heGltdW0gd2lkdGggcmVxdWly
ZWQgYnkgdGhlIGNvbHVtbnMgcGx1cyBjZWxsIHNwYWNpbmcgb3IgYm9yZGVycyAoTUFYKSBpcwog
ICAgIC8vIGxlc3MgdGhhbiB0aGF0IG9mIHRoZSBjb250YWluaW5nIGJsb2NrLCB1c2UgbWF4KE1B
WCwgQ0FQTUlOKS4KLSAgICBhdXRvIGRpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxTcGFjZSA9IFsm
XShhdXRvIGV4dHJhSG9yaXpvbnRhbFNwYWNlKSB7CisgICAgYXV0byBkaXN0cmlidXRlRXh0cmFI
b3Jpem9udGFsU3BhY2UgPSBbJl0gKGF1dG8gaG9yaXpvbnRhbFNwYWNlVG9EaXN0cmlidXRlKSB7
CiAgICAgICAgIGF1dG8mIGNvbHVtbkxpc3QgPSBncmlkLmNvbHVtbnMoKS5saXN0KCk7CiAgICAg
ICAgIEFTU0VSVCghY29sdW1uTGlzdC5pc0VtcHR5KCkpOwogCi0gICAgICAgIGF1dG8gdGFibGVN
aW5pbXVtQ29udGVudFdpZHRoID0gdGFibGVXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0gLSBncmlk
LnRvdGFsSG9yaXpvbnRhbFNwYWNpbmcoKTsKLSAgICAgICAgYXV0byBhZGp1c3RhYmxlZEhvcml6
b250YWxTcGFjZSA9IHRhYmxlTWluaW11bUNvbnRlbnRXaWR0aDsKKyAgICAgICAgLy8gMS4gQ29s
bGVjdCBtaW5pbXVtIHdpZHRocyBhY3Jvc3MgY29sdW1ucyBidXQgaWdub3JlIHNwYW5uaW5nIGNl
bGxzIGZpcnN0LgorICAgICAgICBWZWN0b3I8ZmxvYXQ+IGNvbHVtbk1pbmltdW1XaWR0aHM7Cisg
ICAgICAgIFZlY3RvcjxTbG90UG9zaXRpb24+IHNwYW5uaW5nQ2VsbFBvc2l0aW9uTGlzdDsKKyAg
ICAgICAgZm9yIChzaXplX3Qgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IHJvd3Muc2l6ZSgpOyAr
K3Jvd0luZGV4KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNv
bHVtbkluZGV4IDwgY29sdW1ucy5zaXplKCk7ICsrY29sdW1uSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBzbG90ID0gKmdyaWQuc2xvdCh7IGNvbHVtbkluZGV4LCByb3dJbmRleCB9KTsK
KyAgICAgICAgICAgICAgICBpZiAoc2xvdC5oYXNDb2x1bW5TcGFuKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3Bhbm5pbmdDZWxsUG9zaXRpb25MaXN0LmFwcGVuZCh7IGNvbHVtbkluZGV4LCBy
b3dJbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChzbG90LmlzQ29sdW1uU3Bhbm5lZCgpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoIXJvd0luZGV4KQor
ICAgICAgICAgICAgICAgICAgICBjb2x1bW5NaW5pbXVtV2lkdGhzLmFwcGVuZChzbG90LndpZHRo
Q29uc3RyYWludHMoKS5taW5pbXVtKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbk1pbmltdW1XaWR0aHNbY29sdW1uSW5kZXhdID0gc3RkOjptYXg8Zmxv
YXQ+KGNvbHVtbk1pbmltdW1XaWR0aHNbY29sdW1uSW5kZXhdLCBzbG90LndpZHRoQ29uc3RyYWlu
dHMoKS5taW5pbXVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyAyLiBE
aXN0cmlidXRlIHRoZSBzcGFubmluZyBjZWxscycgbWltaW11bSB3aWR0aHMgYWNyb3NzIHRoZSBj
b2x1bW5zIHVzaW5nIHRoZSBub24tc3Bhbm5pbmcgbWluaXVtIHdpZHRocy4KKyAgICAgICAgLy8g
ZS5nLiBbIDEgXVsgNSBdWyAxIF0KKyAgICAgICAgLy8gICAgICBbICAgIDkgICBdWyAxIF0KKyAg
ICAgICAgLy8gVGhlIG1pbmltdW0gd2lkdGhzIGFyZTogWyAyIF1bIDcgXVsgMSBdCisgICAgICAg
IGZvciAoYXV0byBzcGFubmluZ0NlbGxQb3NpdGlvbiA6IHNwYW5uaW5nQ2VsbFBvc2l0aW9uTGlz
dCkgeworICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpncmlkLnNsb3Qoc3Bhbm5pbmdDZWxsUG9z
aXRpb24pOworICAgICAgICAgICAgYXV0byYgY2VsbCA9IHNsb3QuY2VsbCgpOworICAgICAgICAg
ICAgQVNTRVJUKHNsb3QuaGFzQ29sdW1uU3BhbigpKTsKKyAgICAgICAgICAgIGZsb2F0IGN1cnJl
bnRTcGFubmluZ01pbmltdW1XaWR0aCA9IDA7CisgICAgICAgICAgICAvLyAxLiBDb2xsZWN0IHRo
ZSBub24tc3BhbmluZyBtaW5pbXVtIHdpZHRocy4KKyAgICAgICAgICAgIGZvciAoYXV0byBjb2x1
bW5JbmRleCA9IGNlbGwuc3RhcnRDb2x1bW4oKTsgY29sdW1uSW5kZXggPCBjZWxsLmVuZENvbHVt
bigpOyArK2NvbHVtbkluZGV4KQorICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFubmluZ01pbmlt
dW1XaWR0aCArPSBjb2x1bW5NaW5pbXVtV2lkdGhzW2NvbHVtbkluZGV4XTsKKyAgICAgICAgICAg
IGZsb2F0IHNwYW5uaW5nTWluaW11bVdpZHRoID0gc2xvdC53aWR0aENvbnN0cmFpbnRzKCkubWlu
aW11bTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50U3Bhbm5pbmdNaW5pbXVtV2lkdGggPj0gc3Bh
bm5pbmdNaW5pbXVtV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgc3Bhbm5pbmcgY2Vs
bCBmaXRzIHRoZSBzcGFubmVkIGNvbHVtbnMganVzdCBmaW5lLiBOb3RoaW5nIHRvIGRpc3RyaWJ1
dGUuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyAyLiBEaXN0cmlidXRlIHRoZSBleHRyYSBtaW5pbXVtIHdpZHRoIGFtb25nIHRoZSBzcGFu
bmVkIGNvbHVtbnMgYmFzZWQgb24gdGhlIG1pbmltdW0gY29sbW4gd2lkdGguCisgICAgICAgICAg
ICAvLyBlLmcuIHNwYW5uaW5nIG1pbWltdW0gd2lkdGg6IFsgICA5ICAgXS4gQ3VycmVudCBtaW5p
bXVtIHdpZHRocyBmb3IgdGhlIHNwYW5uZWQgY29sdW1uczogWyAxIF0gWyAyIF0KKyAgICAgICAg
ICAgIC8vIE5ldyBtaW5pbXVtIHdpZHRoczogWyAzIF0gWyA2IF0uCisgICAgICAgICAgICBhdXRv
IHNwYWNlVG9EaXN0cmlidXRlID0gc3Bhbm5pbmdNaW5pbXVtV2lkdGggLSBjdXJyZW50U3Bhbm5p
bmdNaW5pbXVtV2lkdGg7CisgICAgICAgICAgICBmb3IgKGF1dG8gY29sdW1uSW5kZXggPSBjZWxs
LnN0YXJ0Q29sdW1uKCk7IGNvbHVtbkluZGV4IDwgY2VsbC5lbmRDb2x1bW4oKTsgKytjb2x1bW5J
bmRleCkKKyAgICAgICAgICAgICAgICBjb2x1bW5NaW5pbXVtV2lkdGhzW2NvbHVtbkluZGV4XSAr
PSBzcGFjZVRvRGlzdHJpYnV0ZSAvIGN1cnJlbnRTcGFubmluZ01pbmltdW1XaWR0aCAqIGNvbHVt
bk1pbmltdW1XaWR0aHNbY29sdW1uSW5kZXhdOworICAgICAgICB9CisgICAgICAgIC8vIDMuIERp
c3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlIHVzaW5nIHRoZSBmaW5hbCBtaW5pbXVtIHdpZHRocy4K
KyAgICAgICAgZmxvYXQgYWRqdXN0YWJsZWRIb3Jpem9udGFsU3BhY2UgPSB0YWJsZVdpZHRoQ29u
c3RyYWludHMubWluaW11bSAtIGdyaWQudG90YWxIb3Jpem9udGFsU3BhY2luZygpOwogICAgICAg
ICBhdXRvIG51bWJlck9mQ29sdW1ucyA9IGNvbHVtbkxpc3Quc2l6ZSgpOwogICAgICAgICAvLyBG
aXhlZCB3aWR0aCBjb2x1bW5zIGRvbid0IHBhcnRpY2lwYXRlIGluIGF2YWlsYWJsZSBzcGFjZSBk
aXN0cmlidXRpb24uCiAgICAgICAgIGZvciAoYXV0byYgY29sdW1uIDogY29sdW1uTGlzdCkgewot
ICAgICAgICAgICAgaWYgKCFjb2x1bW4uaGFzRml4ZWRXaWR0aCgpKQorICAgICAgICAgICAgaWYg
KCFjb2x1bW4uaXNGaXhlZFdpZHRoKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBhdXRvIGNvbHVtbkZpeGVkV2lkdGggPSAqY29sdW1uLmJveCgpLT5jb2x1bW5XaWR0
aCgpOwogICAgICAgICAgICAgY29sdW1uLnNldExvZ2ljYWxXaWR0aChjb2x1bW5GaXhlZFdpZHRo
KTsKQEAgLTMyMSwzOCArMzgzLDM1IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxTcGFjZShMYXlvdXRVbml0CiAgICAgICAg
IH0KICAgICAgICAgaWYgKCFudW1iZXJPZkNvbHVtbnMgfHwgIWFkanVzdGFibGVkSG9yaXpvbnRh
bFNwYWNlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBGSVhNRTogUmlnaHQgbm93
IGp1c3QgZGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UgZXF1YWx5IGFtb25nIHRoZSBjb2x1bW5z
IHVzaW5nIHRoZSBtaW5pbXVtIHdpZHRoLgogICAgICAgICBBU1NFUlQoYWRqdXN0YWJsZWRIb3Jp
em9udGFsU3BhY2UgPiAwKTsKLSAgICAgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBjb2x1bW5MaXN0
KSB7Ci0gICAgICAgICAgICBpZiAoY29sdW1uLmhhc0ZpeGVkV2lkdGgoKSkKKyAgICAgICAgZm9y
IChzaXplX3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgpOyAr
K2NvbHVtbkluZGV4KSB7CisgICAgICAgICAgICBhdXRvJiBjb2x1bW4gPSBjb2x1bW5zLmxpc3Qo
KVtjb2x1bW5JbmRleF07CisgICAgICAgICAgICBpZiAoY29sdW1uLmlzRml4ZWRXaWR0aCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXV0byBjb2x1bW5FeHRyYVNw
YWNlID0gZXh0cmFIb3Jpem9udGFsU3BhY2UgLyBhZGp1c3RhYmxlZEhvcml6b250YWxTcGFjZSAq
IGNvbHVtbi53aWR0aENvbnN0cmFpbnRzKCkubWluaW11bTsKLSAgICAgICAgICAgIGNvbHVtbi5z
ZXRMb2dpY2FsV2lkdGgoY29sdW1uLndpZHRoQ29uc3RyYWludHMoKS5taW5pbXVtICsgY29sdW1u
RXh0cmFTcGFjZSk7CisgICAgICAgICAgICBhdXRvIGNvbHVtbkV4dHJhU3BhY2UgPSBob3Jpem9u
dGFsU3BhY2VUb0Rpc3RyaWJ1dGUgLyBhZGp1c3RhYmxlZEhvcml6b250YWxTcGFjZSAqIGNvbHVt
bk1pbmltdW1XaWR0aHNbY29sdW1uSW5kZXhdOworICAgICAgICAgICAgY29sdW1uLnNldExvZ2lj
YWxXaWR0aChMYXlvdXRVbml0IHsgY29sdW1uTWluaW11bVdpZHRoc1tjb2x1bW5JbmRleF0gKyBj
b2x1bW5FeHRyYVNwYWNlIH0pOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGlmIChhdXRvIGNv
bnRlbnRXaWR0aCA9IGdlb21ldHJ5KCkuY29tcHV0ZWRDb250ZW50V2lkdGgocm9vdCgpLCBjb250
YWluaW5nQmxvY2tXaWR0aCkpIHsKLSAgICAgICAgaWYgKCpjb250ZW50V2lkdGggPiB0YWJsZVdp
ZHRoQ29uc3RyYWludHMubWluaW11bSkKLSAgICAgICAgICAgIGRpc3RyaWJ1dGVFeHRyYUhvcml6
b250YWxTcGFjZSgqY29udGVudFdpZHRoIC0gdGFibGVXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0p
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1c2VBc0NvbnRlbnRMb2dpY2FsV2lkdGgoV2lk
dGhDb25zdHJhaW50c1R5cGU6Ok1pbmltdW0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0
YWJsZVdpZHRoQ29uc3RyYWludHMubWluaW11bSA+IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQotICAg
ICAgICAgICAgdXNlQXNDb250ZW50TG9naWNhbFdpZHRoKFdpZHRoQ29uc3RyYWludHNUeXBlOjpN
aW5pbXVtKTsKLSAgICAgICAgZWxzZSBpZiAodGFibGVXaWR0aENvbnN0cmFpbnRzLm1heGltdW0g
PD0gY29udGFpbmluZ0Jsb2NrV2lkdGgpCi0gICAgICAgICAgICB1c2VBc0NvbnRlbnRMb2dpY2Fs
V2lkdGgoV2lkdGhDb25zdHJhaW50c1R5cGU6Ok1heGltdW0pOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBkaXN0cmlidXRlRXh0cmFIb3Jpem9udGFsU3BhY2UoY29udGFpbmluZ0Jsb2NrV2lk
dGggLSB0YWJsZVdpZHRoQ29uc3RyYWludHMubWluaW11bSk7Ci0gICAgfQotfQotCi12b2lkIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OnVzZUFzQ29udGVudExvZ2ljYWxXaWR0aChXaWR0aENvbnN0
cmFpbnRzVHlwZSB0eXBlKQotewotICAgIGF1dG8mIGNvbHVtbkxpc3QgPSBmb3JtYXR0aW5nU3Rh
dGUoKS50YWJsZUdyaWQoKS5jb2x1bW5zKCkubGlzdCgpOwotICAgIEFTU0VSVCghY29sdW1uTGlz
dC5pc0VtcHR5KCkpOworICAgIGVudW0gY2xhc3MgV2lkdGhDb25zdHJhaW50c1R5cGUgeyBNaW5p
bXVtLCBNYXhpbXVtIH07CisgICAgYXV0byBkaXN0cmlidXRlTWluT3JNYXggPSBbJl0gKFdpZHRo
Q29uc3RyYWludHNUeXBlIHR5cGUpIHsKKyAgICAgICAgZm9yIChzaXplX3QgY29sdW1uSW5kZXgg
PSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgpOyArK2NvbHVtbkluZGV4KSB7CisgICAg
ICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9IExheW91dFVuaXQgeyB9OworICAgICAgICAgICAg
Zm9yIChzaXplX3Qgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IHJvd3Muc2l6ZSgpOyArK3Jvd0lu
ZGV4KSB7CisgICAgICAgICAgICAgICAgYXV0byB3aWR0aENvbnN0cmFpbnRzID0gZ3JpZC5zbG90
KHsgY29sdW1uSW5kZXgsIHJvd0luZGV4IH0pLT53aWR0aENvbnN0cmFpbnRzKCk7CisgICAgICAg
ICAgICAgICAgbG9naWNhbFdpZHRoID0gc3RkOjptYXgobG9naWNhbFdpZHRoLCB0eXBlID09IFdp
ZHRoQ29uc3RyYWludHNUeXBlOjpNaW5pbXVtID8gd2lkdGhDb25zdHJhaW50cy5taW5pbXVtIDog
d2lkdGhDb25zdHJhaW50cy5tYXhpbXVtKTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
b2x1bW5zLmxpc3QoKVtjb2x1bW5JbmRleF0uc2V0TG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCk7
CisgICAgICAgIH0KKyAgICB9OwogCi0gICAgZm9yIChhdXRvJiBjb2x1bW4gOiBjb2x1bW5MaXN0
KQotICAgICAgICBjb2x1bW4uc2V0TG9naWNhbFdpZHRoKHR5cGUgPT0gV2lkdGhDb25zdHJhaW50
c1R5cGU6Ok1pbmltdW0gPyBjb2x1bW4ud2lkdGhDb25zdHJhaW50cygpLm1pbmltdW0gOiBjb2x1
bW4ud2lkdGhDb25zdHJhaW50cygpLm1heGltdW0pOworICAgIEFTU0VSVChhdmFpbGFibGVIb3Jp
em9udGFsU3BhY2UgPj0gdGFibGVXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0pOworICAgIGlmIChh
dmFpbGFibGVIb3Jpem9udGFsU3BhY2UgPT0gdGFibGVXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0p
CisgICAgICAgIGRpc3RyaWJ1dGVNaW5Pck1heChXaWR0aENvbnN0cmFpbnRzVHlwZTo6TWluaW11
bSk7CisgICAgZWxzZSBpZiAoYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlID09IHRhYmxlV2lkdGhD
b25zdHJhaW50cy5tYXhpbXVtKQorICAgICAgICBkaXN0cmlidXRlTWluT3JNYXgoV2lkdGhDb25z
dHJhaW50c1R5cGU6Ok1heGltdW0pOworICAgIGVsc2UKKyAgICAgICAgZGlzdHJpYnV0ZUV4dHJh
SG9yaXpvbnRhbFNwYWNlKGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSAtIHRhYmxlV2lkdGhDb25z
dHJhaW50cy5taW5pbXVtKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAppbmRl
eCA5NTBmM2VlNzg2ZTg5NjJlMDVlYThjMzg1MzM3OWYwMTk2MTM2NmZmLi4xZWYyZGZkMmYwYzU3
NjVkNGE0YzQ4MGU4Mjk3M2FkNmFlNTMwYTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQu
aApAQCAtNDksNiArNDksNyBAQCBwcml2YXRlOgogICAgIHB1YmxpYzoKICAgICAgICAgQ29udGVu
dEhlaWdodEFuZE1hcmdpbiB0YWJsZUNlbGxIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JikgY29u
c3Q7CiAgICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkQ29sdW1uV2lkdGgoY29u
c3QgQm94JiBjb2x1bW5Cb3gpIGNvbnN0OworICAgICAgICBGb3JtYXR0aW5nQ29udGV4dDo6SW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQ2VsbChj
b25zdCBDb250YWluZXJCb3gmIGNlbGxCb3gpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJp
ZW5kIGNsYXNzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ7CkBAIC02NSwxMCArNjYsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0Q29tcHV0ZWRHZW9tZXRyeUZvclNlY3Rpb25zKCk7CiAKICAgICB2
b2lkIGVuc3VyZVRhYmxlR3JpZCgpOwotICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZFdpZHRoRm9y
Q29sdW1ucygpOworICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRQcmVmZXJy
ZWRXaWR0aEZvckNvbHVtbnMoKTsKICAgICB2b2lkIGNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFI
b3Jpem9udGFsU3BhY2UoTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgZW51
bSBjbGFzcyBXaWR0aENvbnN0cmFpbnRzVHlwZSB7IE1pbmltdW0sIE1heGltdW0gfTsKLSAgICB2
b2lkIHVzZUFzQ29udGVudExvZ2ljYWxXaWR0aChXaWR0aENvbnN0cmFpbnRzVHlwZSk7CiAKICAg
ICB2b2lkIGluaXRpYWxpemVEaXNwbGF5Qm94VG9CbGFuayhEaXNwbGF5OjpCb3gmKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJs
ZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDcw
OGQ5NTc5MmJjOGFmMjhjMzQxNDFkM2FlMGMxNTZmNWJmMTlmMjYuLjNhYjgyZDEyNTczZmJjNTM1
ODJhZWViN2I2MDUxNTg0NTFjM2I1NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0Nv
bnRleHRHZW9tZXRyeS5jcHAKQEAgLTU1LDYgKzU1LDMyIEBAIE9wdGlvbmFsPExheW91dFVuaXQ+
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZENvbHVtbldpZHRoKGNv
bnN0CiAgICAgcmV0dXJuIGNvbHVtbkJveC5jb2x1bW5XaWR0aCgpOwogfQogCitGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoY29uc3QgQ29udGFp
bmVyQm94JiBjZWxsQm94KQoreworICAgIGF1dG8gZml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRkaW5n
ID0gWyZdIHsKKyAgICAgICAgYXV0byYgc3R5bGUgPSBjZWxsQm94LnN0eWxlKCk7CisgICAgICAg
IHJldHVybiBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpblN0YXJ0KCkpLnZhbHVlT3IoMCkKKyAgICAg
ICAgICAgICsgTGF5b3V0VW5pdCB7IHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpIH0KKyAgICAgICAg
ICAgICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9yKDApCisgICAgICAg
ICAgICArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ1JpZ2h0KCkpLnZhbHVlT3IoMCkKKyAgICAg
ICAgICAgICsgTGF5b3V0VW5pdCB7IHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSB9CisgICAgICAg
ICAgICArIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luRW5kKCkpLnZhbHVlT3IoMCk7CisgICAgfTsK
KworICAgIGF1dG8gY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKKyAg
ICAgICAgLy8gRXZlbiBmaXhlZCB3aWR0aCBjZWxscyBleHBhbmQgdG8gdGhlaXIgbWluaW11bSBj
b250ZW50IHdpZHRoCisgICAgICAgIC8vIDx0ZCBzdHlsZT0id2lkdGg6IDEwcHgiPnRlc3RfY29u
dGVudDwvdGQ+IHdpbGwgc2l6ZSB0byBtYXgobWluaW11bSBjb250ZW50IHdpZHRoLCBjb21wdXRl
ZCB3aWR0aCkuCisgICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IExheW91
dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNlbGxCb3gsIGxheW91dFN0YXRlKCkp
LT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKKyAgICAgICAgaWYgKGF1dG8g
d2lkdGggPSBmaXhlZFZhbHVlKGNlbGxCb3guc3R5bGUoKS5sb2dpY2FsV2lkdGgoKSkpCisgICAg
ICAgICAgICByZXR1cm4gRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgeyBzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICp3aWR0aCks
IHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSwgKndpZHRoKSB9Owor
ICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICB9OworICAgIC8v
IEZJWE1FIENoZWNrIGZvciBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGF1dG8gaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY2VsbEJveCwgY29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOworICAgIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMuZXhwYW5kKGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpKTsKKyAgICByZXR1
cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlR3JpZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlR3JpZC5jcHAKaW5kZXggMzYw
ZDQ3NmM3MmJkOGY4ZTk1ODA4YmM2YTkyZTI3ZGRjM2Q2MjM5Yy4uMTQ4NmFiN2Y0YTA1ZmZmMWYw
ZThlMWM0ZTNkZGM5YTI3ZDRiZWRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L3RhYmxlZm9ybWF0dGluZy9UYWJsZUdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlkLmNwcApAQCAtNDAsMjAgKzQwLDYgQEAgVGFibGVH
cmlkOjpDb2x1bW46OkNvbHVtbihjb25zdCBCb3gqIGNvbHVtbkJveCkKIHsKIH0KIAotdm9pZCBU
YWJsZUdyaWQ6OkNvbHVtbjo6c2V0V2lkdGhDb25zdHJhaW50cyhGb3JtYXR0aW5nQ29udGV4dDo6
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB3aWR0aENvbnN0cmFpbnRzKQotewotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgbV9oYXNXaWR0aENvbnN0cmFpbnRzID0gdHJ1ZTsKLSNlbmRpZgotICAg
IG1fd2lkdGhDb25zdHJhaW50cyA9IHdpZHRoQ29uc3RyYWludHM7Ci19Ci0KLUZvcm1hdHRpbmdD
b250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRhYmxlR3JpZDo6Q29sdW1uOjp3aWR0
aENvbnN0cmFpbnRzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNXaWR0aENvbnN0cmFpbnRz
KTsKLSAgICByZXR1cm4gbV93aWR0aENvbnN0cmFpbnRzOwotfQotCiB2b2lkIFRhYmxlR3JpZDo6
Q29sdW1uOjpzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCBjb21wdXRlZExvZ2ljYWxXaWR0aCkK
IHsKICNpZiBBU1NFUlRfRU5BQkxFRApAQCAtODIsMTAgKzY4LDkgQEAgTGF5b3V0VW5pdCBUYWJs
ZUdyaWQ6OkNvbHVtbjo6bG9naWNhbExlZnQoKSBjb25zdAogICAgIHJldHVybiBtX2NvbXB1dGVk
TG9naWNhbExlZnQ7CiB9CiAKLWJvb2wgVGFibGVHcmlkOjpDb2x1bW46Omhhc0ZpeGVkV2lkdGgo
KSBjb25zdAorYm9vbCBUYWJsZUdyaWQ6OkNvbHVtbjo6aXNGaXhlZFdpZHRoKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogVGhpcyBvbmx5IGNvdmVycyB0aGUgPGNvbD4gYXR0cmlidXRlIGNhc2Uu
Ci0gICAgcmV0dXJuIGJveCgpICYmIGJveCgpLT5jb2x1bW5XaWR0aCgpOworICAgIHJldHVybiBo
YXNGaXhlZFdpZHRoQ2VsbCgpIHx8IChib3goKSAmJiBib3goKS0+Y29sdW1uV2lkdGgoKSk7CiB9
CiAKIHZvaWQgVGFibGVHcmlkOjpDb2x1bW5zOjphZGRDb2x1bW4oY29uc3QgQm94JiBjb2x1bW5C
b3gpCkBAIC0xMTUsOCArMTAwLDE1IEBAIFRhYmxlR3JpZDo6Q2VsbDo6Q2VsbChjb25zdCBCb3gm
IGNlbGxCb3gsIFNsb3RQb3NpdGlvbiBwb3NpdGlvbiwgQ2VsbFNwYW4gc3BhbikKIHsKIH0KIAot
VGFibGVHcmlkOjpTbG90OjpTbG90KENlbGwmIGNlbGwpCi0gICAgOiBjZWxsKG1ha2VXZWFrUHRy
KGNlbGwpKQorYm9vbCBUYWJsZUdyaWQ6OkNlbGw6OmlzRml4ZWRXaWR0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGJveCgpLnN0eWxlKCkubG9naWNhbFdpZHRoKCkuaXNGaXhlZCgpOworfQorCitU
YWJsZUdyaWQ6OlNsb3Q6OlNsb3QoQ2VsbCYgY2VsbCwgYm9vbCBpc0NvbHVtblNwYW5uZWQsIGJv
b2wgaXNSb3dTcGFubmVkKQorICAgIDogbV9jZWxsKG1ha2VXZWFrUHRyKGNlbGwpKQorICAgICwg
bV9pc0NvbHVtblNwYW5uZWQoaXNDb2x1bW5TcGFubmVkKQorICAgICwgbV9pc1Jvd1NwYW5uZWQo
aXNSb3dTcGFubmVkKQogewogfQogCkBAIC0xNTQsMTggKzE0NiwyNiBAQCB2b2lkIFRhYmxlR3Jp
ZDo6YXBwZW5kQ2VsbChjb25zdCBCb3gmIGNlbGxCb3gpCiAgICAgfQogICAgIGF1dG8gY2VsbCA9
IG1ha2VVbmlxdWU8Q2VsbD4oY2VsbEJveCwgaW5pdGlhbFNsb3RQb3NpdGlvbiwgQ2VsbFNwYW4g
eyBjb2x1bW5TcGFuLCByb3dTcGFuIH0pOwogICAgIC8vIFJvdyBhbmQgY29sdW1uIHNwYW5uZXJz
IGNyZWF0ZSBhZGRpdGlvbmFsIHNsb3RzLgotICAgIGZvciAoc2l6ZV90IHJvdyA9IDE7IHJvdyA8
PSByb3dTcGFuOyArK3JvdykgewotICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW4gPSAxOyBjb2x1
bW4gPD0gY29sdW1uU3BhbjsgKytjb2x1bW4pIHsKLSAgICAgICAgICAgIGF1dG8gcG9zaXRpb24g
PSBTbG90UG9zaXRpb24geyBpbml0aWFsU2xvdFBvc2l0aW9uLmNvbHVtbiArIGNvbHVtbiAtIDEs
IGluaXRpYWxTbG90UG9zaXRpb24ucm93ICsgcm93IC0gMSB9OworICAgIGZvciAoc2l6ZV90IHJv
dyA9IDA7IHJvdyA8IHJvd1NwYW47ICsrcm93KSB7CisgICAgICAgIGZvciAoYXV0byBjb2x1bW4g
PSBjZWxsLT5zdGFydENvbHVtbigpOyBjb2x1bW4gPCBjZWxsLT5lbmRDb2x1bW4oKTsgKytjb2x1
bW4pIHsKKyAgICAgICAgICAgIGF1dG8gcG9zaXRpb24gPSBTbG90UG9zaXRpb24geyBjb2x1bW4s
IGNlbGwtPnN0YXJ0Um93KCkgKyByb3cgfTsKICAgICAgICAgICAgIEFTU0VSVCghbV9zbG90TWFw
LmNvbnRhaW5zKHBvc2l0aW9uKSk7Ci0gICAgICAgICAgICBtX3Nsb3RNYXAuYWRkKHBvc2l0aW9u
LCBtYWtlVW5pcXVlPFNsb3Q+KCpjZWxsKSk7CisgICAgICAgICAgICAvLyBUaGlzIHNsb3QgaXMg
c3Bhbm5lZCBieSBhIGNlbGwgYXQgdGhlIGluaXRpYWwgc2xvdyBwb3NpdGlvbi4KKyAgICAgICAg
ICAgIGF1dG8gaXNDb2x1bW5TcGFubmVkID0gY29sdW1uICE9IGNlbGwtPnN0YXJ0Q29sdW1uKCk7
CisgICAgICAgICAgICBhdXRvIGlzUm93U3Bhbm5lZCA9ICEhcm93OworICAgICAgICAgICAgbV9z
bG90TWFwLmFkZChwb3NpdGlvbiwgbWFrZVVuaXF1ZTxTbG90PigqY2VsbCwgaXNDb2x1bW5TcGFu
bmVkLCBpc1Jvd1NwYW5uZWQpKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyBJbml0aWFsaXpl
IGNvbHVtbnMvcm93cyBpZiBuZWVkZWQuCi0gICAgYXV0byBtaXNzaW5nTnVtYmVyT2ZDb2x1bW5z
ID0gc3RkOjptYXg8c2l6ZV90PigwLCBpbml0aWFsU2xvdFBvc2l0aW9uLmNvbHVtbiArIGNvbHVt
blNwYW4gLSBtX2NvbHVtbnMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBjb2x1bW4gPSAwOyBj
b2x1bW4gPCBtaXNzaW5nTnVtYmVyT2ZDb2x1bW5zOyArK2NvbHVtbikKKyAgICBhdXRvIG1pc3Np
bmdOdW1iZXJPZkNvbHVtbnMgPSBzdGQ6Om1heDxpbnQ+KDAsIGNlbGwtPmVuZENvbHVtbigpIC0g
bV9jb2x1bW5zLnNpemUoKSk7CisgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgbWlz
c2luZ051bWJlck9mQ29sdW1uczsgKytjb2x1bW4pCiAgICAgICAgIG1fY29sdW1ucy5hZGRBbm9u
eW1vdXNDb2x1bW4oKTsKIAorICAgIGlmIChjZWxsLT5pc0ZpeGVkV2lkdGgoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gY29sdW1uID0gY2VsbC0+c3RhcnRDb2x1bW4oKTsgY29sdW1uIDwgY2VsbC0+
ZW5kQ29sdW1uKCk7ICsrY29sdW1uKQorICAgICAgICAgICAgbV9jb2x1bW5zLmxpc3QoKVtjb2x1
bW5dLnNldEhhc0ZpeGVkV2lkdGhDZWxsKCk7CisgICAgfQorCiAgICAgaWYgKGlzSW5OZXdSb3cp
CiAgICAgICAgIG1fcm93cy5hZGRSb3coY2VsbEJveC5wYXJlbnQoKSk7CiAKQEAgLTE4MywxOSAr
MTgzLDYgQEAgdm9pZCBUYWJsZUdyaWQ6OnJlbW92ZUNlbGwoY29uc3QgQm94JiBjZWxsQm94KQog
ICAgIFVOVVNFRF9QQVJBTShjZWxsQm94KTsKIH0KIAotRm9ybWF0dGluZ0NvbnRleHQ6OkludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgVGFibGVHcmlkOjp3aWR0aENvbnN0cmFpbnRzKCkKLXsKLSAg
ICAvLyBGSVhNRTogQWRkIGNvbnN0cmFpbnQgaW52YWxpZGF0aW9uIGZvciBpbmNyZW1lbnRhbCBs
YXlvdXRzLgotICAgIGlmIChtX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpCi0gICAgICAgIHJl
dHVybiAqbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOwotCi0gICAgbV9pbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzID0gRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgeyB9OwotICAgIGZvciAoYXV0byYgY29sdW1uIDogbV9jb2x1bW5zLmxpc3QoKSkKLSAgICAg
ICAgKm1faW50cmluc2ljV2lkdGhDb25zdHJhaW50cyArPSBjb2x1bW4ud2lkdGhDb25zdHJhaW50
cygpOwotICAgIG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50cy0+ZXhwYW5kKHRvdGFsSG9yaXpv
bnRhbFNwYWNpbmcoKSk7Ci0gICAgcmV0dXJuICptX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7
Ci19Ci0KIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZv
cm1hdHRpbmcvVGFibGVHcmlkLmgKaW5kZXggMjJjODc5YzRhYWEyODlmNDJiNDcyZTk3NTIxOTUy
MmVkOWYxNTgxYS4uOWM5YzMwYTRjYjg4ODUzYzI5YTg5MzM0NjcwNjRjNTMxNDJhYjk0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUdyaWQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlR3JpZC5o
CkBAIC01NSwzNSArNTUsMzQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmVydGljYWxTcGFjaW5n
KExheW91dFVuaXQgdmVydGljYWxTcGFjaW5nKSB7IG1fdmVydGljYWxTcGFjaW5nID0gdmVydGlj
YWxTcGFjaW5nOyB9CiAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNwYWNpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3ZlcnRpY2FsU3BhY2luZzsgfQogCi0gICAgYm9vbCBoYXNDb21wdXRlZFdpZHRoQ29u
c3RyYWludHMoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuaGFz
VmFsdWUoKTsgfQotICAgIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzIHdpZHRoQ29uc3RyYWludHMoKTsKKyAgICB2b2lkIHNldFdpZHRoQ29uc3RyYWludHMoRm9y
bWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cykgeyBtX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzOyB9CisgICAgT3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHM+IHdpZHRoQ29uc3RyYWludHMoKSB7IHJldHVybiBtX2ludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHM7IH0KIAotICAgIC8vIENvbHVtbiByZXByZXNlbnRzIGEgdmVydGlj
YWwgc2V0IG9mIHNsb3RzIGluIHRoZSBncmlkLiBBIGNvbHVtbiBoYXMgbWluL21heCBhbmQgZmlu
YWwgd2lkdGguCisgICAgLy8gQ29sdW1uIHJlcHJlc2VudHMgYSB2ZXJ0aWNhbCBzZXQgb2Ygc2xv
dHMgaW4gdGhlIGdyaWQuIEEgY29sdW1uIGhhcyBob3Jpem9udGFsIHBvc2l0aW9uIGFuZCB3aWR0
aC4KICAgICBjbGFzcyBDb2x1bW4gewogICAgIHB1YmxpYzoKICAgICAgICAgQ29sdW1uKGNvbnN0
IEJveCopOwogCi0gICAgICAgIHZvaWQgc2V0V2lkdGhDb25zdHJhaW50cyhGb3JtYXR0aW5nQ29u
dGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk7Ci0gICAgICAgIEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHdpZHRoQ29uc3RyYWludHMoKSBjb25zdDsK
LQogICAgICAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQpOwogICAgICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3Q7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFJp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxvZ2ljYWxXaWR0aCgpOyB9CiAg
ICAgICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKExheW91dFVuaXQpOwogICAgICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0OwogCi0gICAgICAgIGJvb2wgaGFzRml4ZWRXaWR0aCgp
IGNvbnN0OworICAgICAgICBib29sIGlzRml4ZWRXaWR0aCgpIGNvbnN0OwogCisgICAgICAgIHZv
aWQgc2V0SGFzRml4ZWRXaWR0aENlbGwoKSB7IG1faGFzRml4ZWRXaWR0aENlbGwgPSB0cnVlOyB9
CiAgICAgICAgIGNvbnN0IEJveCogYm94KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3guZ2V0
KCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzIG1fd2lkdGhDb25zdHJhaW50czsKKyAgICAgICAgYm9vbCBoYXNG
aXhlZFdpZHRoQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRml4ZWRXaWR0aENlbGw7IH0KKwog
ICAgICAgICBMYXlvdXRVbml0IG1fY29tcHV0ZWRMb2dpY2FsV2lkdGg7CiAgICAgICAgIExheW91
dFVuaXQgbV9jb21wdXRlZExvZ2ljYWxMZWZ0OwogICAgICAgICBXZWFrUHRyPGNvbnN0IEJveD4g
bV9sYXlvdXRCb3g7CisgICAgICAgIGJvb2wgbV9oYXNGaXhlZFdpZHRoQ2VsbCB7IGZhbHNlIH07
CiAKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBib29sIG1faGFzV2lkdGhDb25zdHJhaW50
cyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9oYXNDb21wdXRlZFdpZHRoIHsgZmFsc2UgfTsK
ICAgICAgICAgYm9vbCBtX2hhc0NvbXB1dGVkTGVmdCB7IGZhbHNlIH07CiAjZW5kaWYKQEAgLTE1
Niw2ICsxNTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIFNsb3RQb3NpdGlvbiBwb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICAgICAgQ2VsbFNwYW4gc3BhbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3BhbjsgfQogCisgICAgICAgIGJvb2wgaXNGaXhlZFdpZHRoKCkgY29uc3Q7
CisKICAgICAgICAgY29uc3QgQm94JiBib3goKSBjb25zdCB7IHJldHVybiAqbV9sYXlvdXRCb3gu
Z2V0KCk7IH0KIAogICAgIHByaXZhdGU6CkBAIC0xNjQsMTMgKzE2NSwzNCBAQCBwdWJsaWM6CiAg
ICAgICAgIENlbGxTcGFuIG1fc3BhbjsKICAgICB9OwogCi0gICAgc3RydWN0IFNsb3QgeworICAg
IGNsYXNzIFNsb3QgeworICAgIHB1YmxpYzoKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwogICAgICAgICBTbG90KCkgPSBkZWZhdWx0OwotICAgICAgICBTbG90KENlbGwm
KTsKKyAgICAgICAgU2xvdChDZWxsJiwgYm9vbCBpc0NvbHVtblNwYW5uZWQsIGJvb2wgaXNSb3dT
cGFubmVkKTsKKworICAgICAgICBjb25zdCBDZWxsJiBjZWxsKCkgY29uc3QgeyByZXR1cm4gKm1f
Y2VsbDsgfQorICAgICAgICBDZWxsJiBjZWxsKCkgeyByZXR1cm4gKm1fY2VsbDsgfQogCi0gICAg
ICAgIFdlYWtQdHI8Q2VsbD4gY2VsbDsKLSAgICAgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgd2lkdGhDb25zdHJhaW50czsKKyAgICAgICAgY29uc3QgRm9y
bWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmIHdpZHRoQ29uc3RyYWlu
dHMoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ29uc3RyYWludHM7IH0KKyAgICAgICAgdm9pZCBz
ZXRXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzJiB3aWR0aENvbnN0cmFpbnRzKSB7IG1fd2lkdGhDb25zdHJhaW50cyA9IHdp
ZHRoQ29uc3RyYWludHM7IH0KKworICAgICAgICAvLyBJbml0aWFsIHNsb3QgcG9zaXRpb24gZm9y
IGEgc3Bhbm5pbmcgY2VsbC4KKyAgICAgICAgLy8gPHRkPjwvdGQ+PHRkIGNvbHNwYW49Mj48L3Rk
PiBbMSwgMF0gc2xvdCBoYXMgY29sdW1uIHNwYW4gb2YgMi4KKyAgICAgICAgYm9vbCBoYXNDb2x1
bW5TcGFuKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsLT5jb2x1bW5TcGFuKCkgPiAxICYmICFpc0Nv
bHVtblNwYW5uZWQoKTsgfQorICAgICAgICBib29sIGhhc1Jvd1NwYW4oKSBjb25zdCB7IHJldHVy
biBtX2NlbGwtPnJvd1NwYW4oKSA+IDEgJiYgIWlzUm93U3Bhbm5lZCgpOyB9CisKKyAgICAgICAg
Ly8gTm9uLWluaXRpYWwgc3Bhbm5lZCBzbG90LgorICAgICAgICAvLyA8dGQ+PC90ZD48dGQgY29s
c3Bhbj0yPjwvdGQ+IFsyLCAwXSBzbG90IGlzIGNvbHVtbiBzcGFubmVkIGJ5IFsxLCAwXS4KKyAg
ICAgICAgLy8gPHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+CisgICAgICAgIGJvb2wgaXNDb2x1
bW5TcGFubmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbHVtblNwYW5uZWQ7IH0KKyAgICAgICAg
Ym9vbCBpc1Jvd1NwYW5uZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUm93U3Bhbm5lZDsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgV2Vha1B0cjxDZWxsPiBtX2NlbGw7CisgICAgICAgIGJvb2wg
bV9pc0NvbHVtblNwYW5uZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIG1faXNSb3dTcGFubmVk
IHsgZmFsc2UgfTsKKyAgICAgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgbV93aWR0aENvbnN0cmFpbnRzOwogICAgIH07CiAKICAgICBjb25zdCBDb2x1bW5z
JiBjb2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zOyB9CkBAIC0xODMsNiArMjA1LDcg
QEAgcHVibGljOgogICAgIENlbGxzJiBjZWxscygpIHsgcmV0dXJuIG1fY2VsbHM7IH0KIAogICAg
IFNsb3QqIHNsb3QoU2xvdFBvc2l0aW9uKTsKKyAgICBib29sIGlzU3Bhbm5lZChTbG90UG9zaXRp
b24pOwogCiBwcml2YXRlOgogICAgIHVzaW5nIFNsb3RNYXAgPSBXVEY6Okhhc2hNYXA8U2xvdFBv
c2l0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8U2xvdD4+Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396225</attachid>
            <date>2020-04-12 09:55:28 -0700</date>
            <delta_ts>2020-04-12 10:21:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210401-20200412095527.patch</filename>
            <type>text/plain</type>
            <size>33265</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjFkMDRmMTMxMmI2ZmM4
NzdkYzU4NjU1ZjBlM2UxMWUwYmYwYmIwMS4uMTAzMGQ4YmVhNDIwNmYyZGM4M2RiYWE1Mzc2NGY3
NmQ3YTlkN2I5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA0LTEyICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bVEZDXSBBZGQgc3Vw
cG9ydCBmb3IgZml4ZWQgd2lkdGggY29sdW1ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNDAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkg
S29pdmlzdG8uCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgYWRkaW5nIHN1
cHBvcnQgZm9yIHNwYW5uZXIgY2VsbHMuCisgICAgICAgIEZpeGVkIHdpZHRoIGNvbHVtbnMgKDxj
b2w+IGFuZCA8dGQ+KSBkb24ndCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3Bhbm5lciB3aWR0aCBkaXN0
cmlidXRpb24uCisKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM6Om9wZXJhdG9yLT0pOgorICAgICAgICAqIGxheW91dC9WZXJpZmljYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphcmVFc3NlbnRpYWxseUVxdWFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0Q29udGV4dDo6dmVyaWZ5QW5kT3V0cHV0TWlzbWF0
Y2hpbmdMYXlvdXRUcmVlKToKKyAgICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZFBy
ZWZlcnJlZFdpZHRoRm9yQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFIb3Jpem9udGFsU3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6dXNlQXNDb250ZW50TG9naWNhbFdp
ZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9y
bWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzRm9yQ2VsbCk6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUdyaWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6OkNvbHVtbjo6aXNGaXhl
ZFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDZWxs
Ojppc0ZpeGVkV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdy
aWQ6OlNsb3Q6OlNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6OmFw
cGVuZENlbGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6OkNvbHVtbjo6
c2V0V2lkdGhDb25zdHJhaW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRhYmxlR3JpZDo6Q29sdW1uOjp3aWR0aENvbnN0cmFpbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDb2x1bW46Omhhc0ZpeGVkV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6Ondp
ZHRoQ29uc3RyYWludHMpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC90YWJsZWZvcm1hdHRp
bmcvVGFibGVHcmlkLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6c2V0
V2lkdGhDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6
d2lkdGhDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6
Q29sdW1uOjpzZXRIYXNGaXhlZFdpZHRoQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRhYmxlR3JpZDo6Q29sdW1uOjpoYXNGaXhlZFdpZHRoQ2VsbCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6Y2VsbCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6Y2VsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6d2lkdGhDb25zdHJhaW50cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6c2V0V2lkdGhDb25zdHJhaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6aGFzQ29sdW1u
U3BhbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6
aGFzUm93U3BhbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6
U2xvdDo6aXNDb2x1bW5TcGFubmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
VGFibGVHcmlkOjpTbG90Ojppc1Jvd1NwYW5uZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpUYWJsZUdyaWQ6Omhhc0NvbXB1dGVkV2lkdGhDb25zdHJhaW50cyBjb25zdCk6IERl
bGV0ZWQuCisKIDIwMjAtMDQtMTIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtURkNdIEludHJvZHVjZSBkZWRpY2F0ZWQgU2xvdFBvc2l0aW9uL0NlbGxT
cGFuIHN0cnVjdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5n
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5k
ZXggZWVkODA0ZDZmZWZhMDJiMTVmNzMzMzVjYTBkOWZlOWE3MzUwZGU4NS4uZWQ0MTliNzg5ZjAw
MjQ3ZjE5Y2VmNmIwMGU0OTBmZTM5YTRhOTRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zv
cm1hdHRpbmdDb250ZXh0LmgKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsKICAgICAgICAgdm9pZCBleHBhbmQoTGF5b3V0VW5p
dCBob3Jpem9udGFsVmFsdWUpOwogICAgICAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzJiBv
cGVyYXRvcis9KGNvbnN0IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMmKTsKKyAgICAgICAgSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyYgb3BlcmF0b3ItPShMYXlvdXRVbml0KTsKIAogICAgICAg
ICBMYXlvdXRVbml0IG1pbmltdW07CiAgICAgICAgIExheW91dFVuaXQgbWF4aW11bTsKQEAgLTIy
OCw2ICsyMjksMTMgQEAgaW5saW5lIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzJiBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2kKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKK2lubGluZSBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyYgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHM6Om9wZXJhdG9y
LT0oTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICBtaW5pbXVtIC09IHZhbHVlOworICAgIG1heGlt
dW0gLT0gdmFsdWU7CisgICAgcmV0dXJuICp0aGlzOworfQorCiB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9y
bWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDA4ZTAyODNmNGVkOGYxNjBmMGU5YzJmMjUxZTNlNjFi
NjQ3M2Q2NTkuLjVmZWQ0NjJmNTYzZjYwMjhiODgwMTEyZWY0YjRhMGQxYmNlOTY3MzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0
aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGlu
Zy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMTgwLDEzICsxODAsMTYgQEAgRm9ybWF0
dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgVGFibGVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZWRJbnQKICAgICAvLyBhIGdlbmVyaWMgc2hyaW5rLXRvIGZpdCBibG9jayBs
ZXZlbCBib3ggbGlrZSBhIGZsb2F0IGJveCB3b3VsZCBiZSBqdXN0IHNpemVkIHRvIHRoZSBjb21w
dXRlZCB2YWx1ZSBvZiAid2lkdGgiLCB0YWJsZXMKICAgICAvLyBjYW4gYWN0dWFsbHkgYmUgc3Ry
ZWNoZWQgd2F5IG92ZXIuCiAgICAgYXV0byYgZ3JpZCA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxl
R3JpZCgpOwotICAgIGlmICghZ3JpZC5oYXNDb21wdXRlZFdpZHRoQ29uc3RyYWludHMoKSkgewot
ICAgICAgICAvLyAxLiBFbnN1cmUgZWFjaCBjZWxsIHNsb3QgaXMgb2NjdXBpZWQgYnkgYXQgbGVh
c3Qgb25lIGNlbGwuCi0gICAgICAgIGVuc3VyZVRhYmxlR3JpZCgpOwotICAgICAgICAvLyAyLiBD
b21wdXRlIHRoZSBtaW5pbXVtL21heGltdW0gd2lkdGggb2YgZWFjaCBjb2x1bW4uCi0gICAgICAg
IGNvbXB1dGVQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGdy
aWQud2lkdGhDb25zdHJhaW50cygpOworICAgIGlmIChhdXRvIGNvbXB1dGVkV2lkdGhDb25zdHJh
aW50cyA9IGdyaWQud2lkdGhDb25zdHJhaW50cygpKQorICAgICAgICByZXR1cm4gKmNvbXB1dGVk
V2lkdGhDb25zdHJhaW50czsKKworICAgIC8vIDEuIEVuc3VyZSBlYWNoIGNlbGwgc2xvdCBpcyBv
Y2N1cGllZCBieSBhdCBsZWFzdCBvbmUgY2VsbC4KKyAgICBlbnN1cmVUYWJsZUdyaWQoKTsKKyAg
ICAvLyAyLiBDb21wdXRlIHRoZSBtaW5pbXVtL21heGltdW0gd2lkdGggb2YgZWFjaCBjb2x1bW4u
CisgICAgYXV0byBjb21wdXRlZFdpZHRoQ29uc3RyYWludHMgPSBjb21wdXRlZFByZWZlcnJlZFdp
ZHRoRm9yQ29sdW1ucygpOworICAgIGNvbXB1dGVkV2lkdGhDb25zdHJhaW50cy5leHBhbmQoZ3Jp
ZC50b3RhbEhvcml6b250YWxTcGFjaW5nKCkpOworICAgIGdyaWQuc2V0V2lkdGhDb25zdHJhaW50
cyhjb21wdXRlZFdpZHRoQ29uc3RyYWludHMpOworICAgIHJldHVybiBjb21wdXRlZFdpZHRoQ29u
c3RyYWludHM7CiB9CiAKIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6ZW5zdXJlVGFibGVH
cmlkKCkKQEAgLTIzMyw2NyArMjM2LDg0IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
ZW5zdXJlVGFibGVHcmlkKCkKICAgICB9CiB9CiAKLXZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZVByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucygpCitGb3JtYXR0aW5nQ29udGV4dDo6
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucygpCiB7CiAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRl
ID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7CiAgICAgYXV0byYgZ3JpZCA9IGZvcm1hdHRpbmdT
dGF0ZS50YWJsZUdyaWQoKTsKLSAgICBBU1NFUlQoIWdyaWQuaGFzQ29tcHV0ZWRXaWR0aENvbnN0
cmFpbnRzKCkpOworICAgIEFTU0VSVCghZ3JpZC53aWR0aENvbnN0cmFpbnRzKCkpOwogCiAgICAg
Ly8gMS4gQ2FsY3VsYXRlIHRoZSBtaW5pbXVtIGNvbnRlbnQgd2lkdGggKE1DVykgb2YgZWFjaCBj
ZWxsOiB0aGUgZm9ybWF0dGVkIGNvbnRlbnQgbWF5IHNwYW4gYW55IG51bWJlciBvZiBsaW5lcyBi
dXQgbWF5IG5vdCBvdmVyZmxvdyB0aGUgY2VsbCBib3guCiAgICAgLy8gICAgSWYgdGhlIHNwZWNp
ZmllZCAnd2lkdGgnIChXKSBvZiB0aGUgY2VsbCBpcyBncmVhdGVyIHRoYW4gTUNXLCBXIGlzIHRo
ZSBtaW5pbXVtIGNlbGwgd2lkdGguIEEgdmFsdWUgb2YgJ2F1dG8nIG1lYW5zIHRoYXQgTUNXIGlz
IHRoZSBtaW5pbXVtIGNlbGwgd2lkdGguCiAgICAgLy8gICAgQWxzbywgY2FsY3VsYXRlIHRoZSAi
bWF4aW11bSIgY2VsbCB3aWR0aCBvZiBlYWNoIGNlbGw6IGZvcm1hdHRpbmcgdGhlIGNvbnRlbnQg
d2l0aG91dCBicmVha2luZyBsaW5lcyBvdGhlciB0aGFuIHdoZXJlIGV4cGxpY2l0IGxpbmUgYnJl
YWtzIG9jY3VyLgogICAgIGZvciAoYXV0byYgY2VsbCA6IGdyaWQuY2VsbHMoKSkgewogICAgICAg
ICBhdXRvJiBjZWxsQm94ID0gY2VsbC0+Ym94KCk7Ci0gICAgICAgIEFTU0VSVChjZWxsQm94LmVz
dGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7CisgICAgICAgIEFTU0VSVChjZWxsQm94LmVz
dGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpKTsKIAogICAgICAgICBhdXRvIGludHJp
bnNpY1dpZHRoID0gZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JC
b3goY2VsbEJveCk7CiAgICAgICAgIGlmICghaW50cmluc2ljV2lkdGgpIHsKLSAgICAgICAgICAg
IGludHJpbnNpY1dpZHRoID0gSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07Ci0gICAgICAg
ICAgICBpZiAoaXM8Q29udGFpbmVyQm94PihjZWxsQm94KSAmJiBkb3duY2FzdDxDb250YWluZXJC
b3g+KGNlbGxCb3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgICAg
IGludHJpbnNpY1dpZHRoID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQo
ZG93bmNhc3Q8Q29udGFpbmVyQm94PihjZWxsQm94KSwgbGF5b3V0U3RhdGUoKSktPmNvbXB1dGVk
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOwotICAgICAgICAgICAgaW50cmluc2ljV2lkdGgg
PSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY2VsbEJveCwgKmludHJpbnNpY1dp
ZHRoKTsKLSAgICAgICAgICAgIGF1dG8gYm9yZGVyID0gZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRl
cihjZWxsQm94KTsKLSAgICAgICAgICAgIGF1dG8gcGFkZGluZyA9ICpnZW9tZXRyeSgpLmNvbXB1
dGVkUGFkZGluZyhjZWxsQm94LCB7IH0pOwotCi0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aC0+
ZXhwYW5kKGJvcmRlci5ob3Jpem9udGFsLndpZHRoKCkgKyBwYWRkaW5nLmhvcml6b250YWwud2lk
dGgoKSk7CisgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aCA9IGdlb21ldHJ5KCkuaW50cmluc2lj
V2lkdGhDb25zdHJhaW50c0ZvckNlbGwoZG93bmNhc3Q8Q29udGFpbmVyQm94PihjZWxsQm94KSk7
CiAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuc2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50
c0ZvckJveChjZWxsQm94LCAqaW50cmluc2ljV2lkdGgpOwogICAgICAgICB9Ci0KLSAgICAgICAg
YXV0byBjb2x1bW5TcGFuID0gY2VsbC0+c3BhbigpLmNvbHVtbjsKLSAgICAgICAgYXV0byBzbG90
SW50cmluc2ljV2lkdGggPSBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyB7IGludHJpbnNpY1dpZHRoLT5taW5pbXVtIC8gY29sdW1uU3BhbiwgaW50cmluc2ljV2lk
dGgtPm1heGltdW0gLyBjb2x1bW5TcGFuIH07Ci0gICAgICAgIGF1dG8gaW5pdGlhbFBvc2l0aW9u
ID0gY2VsbC0+cG9zaXRpb24oKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1
bW5TcGFuOyArK2kpCi0gICAgICAgICAgICBncmlkLnNsb3QoeyBpbml0aWFsUG9zaXRpb24uY29s
dW1uICsgaSwgaW5pdGlhbFBvc2l0aW9uLnJvdyB9KS0+d2lkdGhDb25zdHJhaW50cyA9IHNsb3RJ
bnRyaW5zaWNXaWR0aDsKKyAgICAgICAgLy8gU3Bhbm5lciBjZWxscyBwdXQgdGhlaXIgaW50cmlu
c2ljIHdpZHRocyBvbiB0aGUgaW5pdGlhbCBzbG90cy4KKyAgICAgICAgZ3JpZC5zbG90KGNlbGwt
PnBvc2l0aW9uKCkpLT5zZXRXaWR0aENvbnN0cmFpbnRzKCppbnRyaW5zaWNXaWR0aCk7CiAgICAg
fQotICAgIC8vIDIuIEZvciBlYWNoIGNvbHVtbiwgZGV0ZXJtaW5lIGEgbWF4aW11bSBhbmQgbWlu
aW11bSBjb2x1bW4gd2lkdGggZnJvbSB0aGUgY2VsbHMgdGhhdCBzcGFuIG9ubHkgdGhhdCBjb2x1
bW4uCi0gICAgLy8gICAgVGhlIG1pbmltdW0gaXMgdGhhdCByZXF1aXJlZCBieSB0aGUgY2VsbCB3
aXRoIHRoZSBsYXJnZXN0IG1pbmltdW0gY2VsbCB3aWR0aCAob3IgdGhlIGNvbHVtbiAnd2lkdGgn
LCB3aGljaGV2ZXIgaXMgbGFyZ2VyKS4KLSAgICAvLyAgICBUaGUgbWF4aW11bSBpcyB0aGF0IHJl
cXVpcmVkIGJ5IHRoZSBjZWxsIHdpdGggdGhlIGxhcmdlc3QgbWF4aW11bSBjZWxsIHdpZHRoIChv
ciB0aGUgY29sdW1uICd3aWR0aCcsIHdoaWNoZXZlciBpcyBsYXJnZXIpLgorCiAgICAgYXV0byYg
Y29sdW1uTGlzdCA9IGdyaWQuY29sdW1ucygpLmxpc3QoKTsKLSAgICBhdXRvIG51bWJlck9mUm93
cyA9IGdyaWQucm93cygpLnNpemUoKTsKLSAgICBhdXRvIG51bWJlck9mQ29sdW1ucyA9IGNvbHVt
bkxpc3Quc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGNvbHVtbkluZGV4ID0gMDsgY29sdW1uSW5k
ZXggPCBudW1iZXJPZkNvbHVtbnM7ICsrY29sdW1uSW5kZXgpIHsKLSAgICAgICAgYXV0byBjb2x1
bW5JbnRyaW5zaWNXaWR0aHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyB7IH07Ci0gICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gMDsgcm93SW5kZXgg
PCBudW1iZXJPZlJvd3M7ICsrcm93SW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8qIHNsb3QgPSBn
cmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7Ci0gICAgICAgICAgICBjb2x1bW5J
bnRyaW5zaWNXaWR0aHMubWluaW11bSA9IHN0ZDo6bWF4KHNsb3QtPndpZHRoQ29uc3RyYWludHMu
bWluaW11bSwgY29sdW1uSW50cmluc2ljV2lkdGhzLm1pbmltdW0pOwotICAgICAgICAgICAgY29s
dW1uSW50cmluc2ljV2lkdGhzLm1heGltdW0gPSBzdGQ6Om1heChzbG90LT53aWR0aENvbnN0cmFp
bnRzLm1heGltdW0sIGNvbHVtbkludHJpbnNpY1dpZHRocy5tYXhpbXVtKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBjb250ZW50IGRyaXZlbiBtaW4vbWF4IHdp
ZHRocywgY2hlY2sgaWYgPGNvbD4gc2V0cyBhIHByZWZlcnJlZCB3aWR0aCBvbiB0aGlzIGNvbHVt
bi4KLSAgICAgICAgaWYgKGF1dG8qIGNvbHVtbkJveCA9IGNvbHVtbkxpc3RbY29sdW1uSW5kZXhd
LmJveCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBjb2x1bW5QcmVmZXJyZWRXaWR0aCA9IGdl
b21ldHJ5KCkuY29tcHV0ZWRDb2x1bW5XaWR0aCgqY29sdW1uQm94KSkgewotICAgICAgICAgICAg
ICAgIC8vIExldCdzIHN0YXkgYXQgbGVhc3QgYXMgd2lkZSBhcyB0aGUgcHJlZmVycmVkIHdpZHRo
LgotICAgICAgICAgICAgICAgIGNvbHVtbkludHJpbnNpY1dpZHRocy5taW5pbXVtID0gc3RkOjpt
YXgoY29sdW1uSW50cmluc2ljV2lkdGhzLm1pbmltdW0sICpjb2x1bW5QcmVmZXJyZWRXaWR0aCk7
CisgICAgVmVjdG9yPE9wdGlvbmFsPExheW91dFVuaXQ+PiBmaXhlZFdpZHRoQ29sdW1uczsKKyAg
ICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29sdW1uTGlzdC5z
aXplKCk7ICsrY29sdW1uSW5kZXgpIHsKKyAgICAgICAgYXV0byBmaXhlZFdpZHRoID0gWyZdICgp
IC0+IE9wdGlvbmFsPExheW91dFVuaXQ+IHsKKyAgICAgICAgICAgIGF1dG8qIGNvbHVtbkJveCA9
IGNvbHVtbkxpc3RbY29sdW1uSW5kZXhdLmJveCgpOworICAgICAgICAgICAgaWYgKCFjb2x1bW5C
b3gpIHsKKyAgICAgICAgICAgICAgICAvLyBBbm95bm1vdXMgY29sdW1ucyBkb24ndCBoYXZlIGFz
c29jaWF0ZWQgbGF5b3V0IGJveGVzLgorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXV0byB3aWR0aCA9IGNvbHVtbkJveC0+Y29sdW1u
V2lkdGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gd2lkdGg7CisgICAgICAgICAgICByZXR1
cm4gZ2VvbWV0cnkoKS5jb21wdXRlZENvbHVtbldpZHRoKCpjb2x1bW5Cb3gpOworICAgICAgICB9
OworICAgICAgICBmaXhlZFdpZHRoQ29sdW1ucy5hcHBlbmQoZml4ZWRXaWR0aCgpKTsKKyAgICB9
CisKKyAgICBWZWN0b3I8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHM+IGNvbHVtbkludHJpbnNpY1dpZHRoczsKKyAgICAvLyBDb2xsZWN0IGhlIG1pbi9tYXggd2lk
dGggZm9yIGVhY2ggY29sdW1uIGFuZCBmaW5hbGl6ZSB0aGUgcHJlZmVycmVkIHdpZHRoIGZvciB0
aGUgdGFibGUuCisgICAgZm9yIChzaXplX3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8
IGNvbHVtbkxpc3Quc2l6ZSgpOyArK2NvbHVtbkluZGV4KSB7CisgICAgICAgIGNvbHVtbkludHJp
bnNpY1dpZHRocy5hcHBlbmQoRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgeyB9KTsKKyAgICAgICAgZm9yIChzaXplX3Qgcm93SW5kZXggPSAwOyByb3dJbmRleCA8
IGdyaWQucm93cygpLnNpemUoKTsgKytyb3dJbmRleCkgeworICAgICAgICAgICAgYXV0byYgc2xv
dCA9ICpncmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7CisgICAgICAgICAgICBp
ZiAoc2xvdC5oYXNDb2x1bW5TcGFuKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBjZWxsID0g
c2xvdC5jZWxsKCk7CisgICAgICAgICAgICAgICAgYXV0byB3aWR0aENvbnN0cmFpbnRzVG9EaXN0
cmlidXRlID0gc2xvdC53aWR0aENvbnN0cmFpbnRzKCk7CisgICAgICAgICAgICAgICAgYXV0byBu
dW1iZXJPZk5vbkZpeGVkU3Bhbm5lZENvbHVtbnMgPSBjZWxsLmNvbHVtblNwYW4oKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW5TcGFuSW5kZXggPSBjZWxsLnN0YXJ0Q29sdW1u
KCk7IGNvbHVtblNwYW5JbmRleCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29sdW1uU3BhbkluZGV4
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBmaXhlZFdpZHRo
Q29sdW1uc1tjb2x1bW5TcGFuSW5kZXhdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aENvbnN0cmFpbnRzVG9EaXN0cmlidXRlIC09ICpmaXhlZFdpZHRoOworICAgICAgICAgICAgICAg
ICAgICAgICAgLS1udW1iZXJPZk5vbkZpeGVkU3Bhbm5lZENvbHVtbnM7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
Y29sdW1uU3BhbkluZGV4ID0gY2VsbC5zdGFydENvbHVtbigpOyBjb2x1bW5TcGFuSW5kZXggPCBj
ZWxsLmVuZENvbHVtbigpOyArK2NvbHVtblNwYW5JbmRleCkgeworICAgICAgICAgICAgICAgICAg
ICBjb2x1bW5JbnRyaW5zaWNXaWR0aHNbY29sdW1uSW5kZXhdLm1pbmltdW0gPSBzdGQ6Om1heCh3
aWR0aENvbnN0cmFpbnRzVG9EaXN0cmlidXRlLm1pbmltdW0gLyBudW1iZXJPZk5vbkZpeGVkU3Bh
bm5lZENvbHVtbnMsIGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0ubWluaW11bSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0u
bWF4aW11bSA9IHN0ZDo6bWF4KHdpZHRoQ29uc3RyYWludHNUb0Rpc3RyaWJ1dGUubWF4aW11bSAv
IG51bWJlck9mTm9uRml4ZWRTcGFubmVkQ29sdW1ucywgY29sdW1uSW50cmluc2ljV2lkdGhzW2Nv
bHVtbkluZGV4XS5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGF1dG8gY29sdW1uRml4ZWRXaWR0aCA9IGZpeGVkV2lkdGhD
b2x1bW5zW2NvbHVtbkluZGV4XTsKKyAgICAgICAgICAgICAgICBhdXRvIHdpZHRoQ29uc3RyYWlu
dHMgPSAhY29sdW1uRml4ZWRXaWR0aCA/IHNsb3Qud2lkdGhDb25zdHJhaW50cygpIDogRm9ybWF0
dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyAqY29sdW1uRml4ZWRXaWR0
aCwgKmNvbHVtbkZpeGVkV2lkdGggfTsKKyAgICAgICAgICAgICAgICBjb2x1bW5JbnRyaW5zaWNX
aWR0aHNbY29sdW1uSW5kZXhdLm1pbmltdW0gPSBzdGQ6Om1heCh3aWR0aENvbnN0cmFpbnRzLm1p
bmltdW0sIGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0ubWluaW11bSk7CisgICAg
ICAgICAgICAgICAgY29sdW1uSW50cmluc2ljV2lkdGhzW2NvbHVtbkluZGV4XS5tYXhpbXVtID0g
c3RkOjptYXgod2lkdGhDb25zdHJhaW50cy5tYXhpbXVtLCBjb2x1bW5JbnRyaW5zaWNXaWR0aHNb
Y29sdW1uSW5kZXhdLm1heGltdW0pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IGNvbHVtbkxpc3RbY29sdW1uSW5kZXhdLnNldFdpZHRoQ29uc3RyYWludHMoY29sdW1uSW50cmlu
c2ljV2lkdGhzKTsKICAgICB9CisgICAgYXV0byB0YWJsZVdpZHRoQ29uc3RyYWludHMgPSBJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgfTsKKyAgICBmb3IgKGF1dG8mIGNvbHVtbkludHJpbnNp
Y1dpZHRoIDogY29sdW1uSW50cmluc2ljV2lkdGhzKQorICAgICAgICB0YWJsZVdpZHRoQ29uc3Ry
YWludHMgKz0gY29sdW1uSW50cmluc2ljV2lkdGg7CisgICAgcmV0dXJuIHRhYmxlV2lkdGhDb25z
dHJhaW50czsKIH0KIAotdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQW5kRGlz
dHJpYnV0ZUV4dHJhSG9yaXpvbnRhbFNwYWNlKExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lk
dGgpCit2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0
cmFIb3Jpem9udGFsU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpCiB7
CiAgICAgYXV0byYgZ3JpZCA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpOwotICAgIEFT
U0VSVChncmlkLmhhc0NvbXB1dGVkV2lkdGhDb25zdHJhaW50cygpKTsKLSAgICBhdXRvIHRhYmxl
V2lkdGhDb25zdHJhaW50cyA9IGdyaWQud2lkdGhDb25zdHJhaW50cygpOworICAgIGF1dG8mIGNv
bHVtbnMgPSBncmlkLmNvbHVtbnMoKTsKKyAgICBhdXRvJiByb3dzID0gZ3JpZC5yb3dzKCk7Cisg
ICAgYXV0byB0YWJsZVdpZHRoQ29uc3RyYWludHMgPSAqZ3JpZC53aWR0aENvbnN0cmFpbnRzKCk7
CiAKICAgICAvLyBDb2x1bW4gYW5kIGNhcHRpb24gd2lkdGhzIGluZmx1ZW5jZSB0aGUgZmluYWwg
dGFibGUgd2lkdGggYXMgZm9sbG93czoKICAgICAvLyBJZiB0aGUgJ3RhYmxlJyBvciAnaW5saW5l
LXRhYmxlJyBlbGVtZW50J3MgJ3dpZHRoJyBwcm9wZXJ0eSBoYXMgYSBjb21wdXRlZCB2YWx1ZSAo
Vykgb3RoZXIgdGhhbiAnYXV0bycsIHRoZSB1c2VkIHdpZHRoIGlzIHRoZSBncmVhdGVyIG9mCkBA
IC0zMDIsMTYgKzMyMiw1OCBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVB
bmREaXN0cmlidXRlRXh0cmFIb3Jpem9udGFsU3BhY2UoTGF5b3V0VW5pdAogICAgIC8vIElmIHRo
ZSAndGFibGUnIG9yICdpbmxpbmUtdGFibGUnIGVsZW1lbnQgaGFzICd3aWR0aDogYXV0bycsIHRo
ZSB1c2VkIHdpZHRoIGlzIHRoZSBncmVhdGVyIG9mIHRoZSB0YWJsZSdzIGNvbnRhaW5pbmcgYmxv
Y2sgd2lkdGgsCiAgICAgLy8gQ0FQTUlOLCBhbmQgTUlOLiBIb3dldmVyLCBpZiBlaXRoZXIgQ0FQ
TUlOIG9yIHRoZSBtYXhpbXVtIHdpZHRoIHJlcXVpcmVkIGJ5IHRoZSBjb2x1bW5zIHBsdXMgY2Vs
bCBzcGFjaW5nIG9yIGJvcmRlcnMgKE1BWCkgaXMKICAgICAvLyBsZXNzIHRoYW4gdGhhdCBvZiB0
aGUgY29udGFpbmluZyBibG9jaywgdXNlIG1heChNQVgsIENBUE1JTikuCi0gICAgYXV0byBkaXN0
cmlidXRlRXh0cmFIb3Jpem9udGFsU3BhY2UgPSBbJl0oYXV0byBleHRyYUhvcml6b250YWxTcGFj
ZSkgeworICAgIGF1dG8gZGlzdHJpYnV0ZUV4dHJhSG9yaXpvbnRhbFNwYWNlID0gWyZdIChhdXRv
IGhvcml6b250YWxTcGFjZVRvRGlzdHJpYnV0ZSkgewogICAgICAgICBhdXRvJiBjb2x1bW5MaXN0
ID0gZ3JpZC5jb2x1bW5zKCkubGlzdCgpOwogICAgICAgICBBU1NFUlQoIWNvbHVtbkxpc3QuaXNF
bXB0eSgpKTsKIAotICAgICAgICBhdXRvIHRhYmxlTWluaW11bUNvbnRlbnRXaWR0aCA9IHRhYmxl
V2lkdGhDb25zdHJhaW50cy5taW5pbXVtIC0gZ3JpZC50b3RhbEhvcml6b250YWxTcGFjaW5nKCk7
Ci0gICAgICAgIGF1dG8gYWRqdXN0YWJsZWRIb3Jpem9udGFsU3BhY2UgPSB0YWJsZU1pbmltdW1D
b250ZW50V2lkdGg7CisgICAgICAgIC8vIDEuIENvbGxlY3QgbWluaW11bSB3aWR0aHMgYWNyb3Nz
IGNvbHVtbnMgYnV0IGlnbm9yZSBzcGFubmluZyBjZWxscyBmaXJzdC4KKyAgICAgICAgVmVjdG9y
PGZsb2F0PiBjb2x1bW5NaW5pbXVtV2lkdGhzOworICAgICAgICBWZWN0b3I8U2xvdFBvc2l0aW9u
PiBzcGFubmluZ0NlbGxQb3NpdGlvbkxpc3Q7CisgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4
ID0gMDsgcm93SW5kZXggPCByb3dzLnNpemUoKTsgKytyb3dJbmRleCkgeworICAgICAgICAgICAg
Zm9yIChzaXplX3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgp
OyArK2NvbHVtbkluZGV4KSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpncmlkLnNs
b3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7CisgICAgICAgICAgICAgICAgaWYgKHNsb3Qu
aGFzQ29sdW1uU3BhbigpKSB7CisgICAgICAgICAgICAgICAgICAgIHNwYW5uaW5nQ2VsbFBvc2l0
aW9uTGlzdC5hcHBlbmQoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
c2xvdC5pc0NvbHVtblNwYW5uZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgaWYgKCFyb3dJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY29sdW1u
TWluaW11bVdpZHRocy5hcHBlbmQoc2xvdC53aWR0aENvbnN0cmFpbnRzKCkubWluaW11bSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb2x1bW5NaW5pbXVtV2lk
dGhzW2NvbHVtbkluZGV4XSA9IHN0ZDo6bWF4PGZsb2F0Pihjb2x1bW5NaW5pbXVtV2lkdGhzW2Nv
bHVtbkluZGV4XSwgc2xvdC53aWR0aENvbnN0cmFpbnRzKCkubWluaW11bSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gMi4gRGlzdHJpYnV0ZSB0aGUgc3Bhbm5pbmcgY2Vs
bHMnIG1pbWltdW0gd2lkdGhzIGFjcm9zcyB0aGUgY29sdW1ucyB1c2luZyB0aGUgbm9uLXNwYW5u
aW5nIG1pbml1bSB3aWR0aHMuCisgICAgICAgIC8vIGUuZy4gWyAxIF1bIDUgXVsgMSBdCisgICAg
ICAgIC8vICAgICAgWyAgICA5ICAgXVsgMSBdCisgICAgICAgIC8vIFRoZSBtaW5pbXVtIHdpZHRo
cyBhcmU6IFsgMiBdWyA3IF1bIDEgXQorICAgICAgICBmb3IgKGF1dG8gc3Bhbm5pbmdDZWxsUG9z
aXRpb24gOiBzcGFubmluZ0NlbGxQb3NpdGlvbkxpc3QpIHsKKyAgICAgICAgICAgIGF1dG8mIHNs
b3QgPSAqZ3JpZC5zbG90KHNwYW5uaW5nQ2VsbFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGF1dG8m
IGNlbGwgPSBzbG90LmNlbGwoKTsKKyAgICAgICAgICAgIEFTU0VSVChzbG90Lmhhc0NvbHVtblNw
YW4oKSk7CisgICAgICAgICAgICBmbG9hdCBjdXJyZW50U3Bhbm5pbmdNaW5pbXVtV2lkdGggPSAw
OworICAgICAgICAgICAgLy8gMS4gQ29sbGVjdCB0aGUgbm9uLXNwYW5pbmcgbWluaW11bSB3aWR0
aHMuCisgICAgICAgICAgICBmb3IgKGF1dG8gY29sdW1uSW5kZXggPSBjZWxsLnN0YXJ0Q29sdW1u
KCk7IGNvbHVtbkluZGV4IDwgY2VsbC5lbmRDb2x1bW4oKTsgKytjb2x1bW5JbmRleCkKKyAgICAg
ICAgICAgICAgICBjdXJyZW50U3Bhbm5pbmdNaW5pbXVtV2lkdGggKz0gY29sdW1uTWluaW11bVdp
ZHRoc1tjb2x1bW5JbmRleF07CisgICAgICAgICAgICBmbG9hdCBzcGFubmluZ01pbmltdW1XaWR0
aCA9IHNsb3Qud2lkdGhDb25zdHJhaW50cygpLm1pbmltdW07CisgICAgICAgICAgICBpZiAoY3Vy
cmVudFNwYW5uaW5nTWluaW11bVdpZHRoID49IHNwYW5uaW5nTWluaW11bVdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgLy8gVGhlIHNwYW5uaW5nIGNlbGwgZml0cyB0aGUgc3Bhbm5lZCBjb2x1bW5z
IGp1c3QgZmluZS4gTm90aGluZyB0byBkaXN0cmlidXRlLgorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gMi4gRGlzdHJpYnV0ZSB0aGUgZXh0
cmEgbWluaW11bSB3aWR0aCBhbW9uZyB0aGUgc3Bhbm5lZCBjb2x1bW5zIGJhc2VkIG9uIHRoZSBt
aW5pbXVtIGNvbG1uIHdpZHRoLgorICAgICAgICAgICAgLy8gZS5nLiBzcGFubmluZyBtaW1pbXVt
IHdpZHRoOiBbICAgOSAgIF0uIEN1cnJlbnQgbWluaW11bSB3aWR0aHMgZm9yIHRoZSBzcGFubmVk
IGNvbHVtbnM6IFsgMSBdIFsgMiBdCisgICAgICAgICAgICAvLyBOZXcgbWluaW11bSB3aWR0aHM6
IFsgMyBdIFsgNiBdLgorICAgICAgICAgICAgYXV0byBzcGFjZVRvRGlzdHJpYnV0ZSA9IHNwYW5u
aW5nTWluaW11bVdpZHRoIC0gY3VycmVudFNwYW5uaW5nTWluaW11bVdpZHRoOworICAgICAgICAg
ICAgZm9yIChhdXRvIGNvbHVtbkluZGV4ID0gY2VsbC5zdGFydENvbHVtbigpOyBjb2x1bW5JbmRl
eCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29sdW1uSW5kZXgpCisgICAgICAgICAgICAgICAgY29s
dW1uTWluaW11bVdpZHRoc1tjb2x1bW5JbmRleF0gKz0gc3BhY2VUb0Rpc3RyaWJ1dGUgLyBjdXJy
ZW50U3Bhbm5pbmdNaW5pbXVtV2lkdGggKiBjb2x1bW5NaW5pbXVtV2lkdGhzW2NvbHVtbkluZGV4
XTsKKyAgICAgICAgfQorICAgICAgICAvLyAzLiBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZSB1
c2luZyB0aGUgZmluYWwgbWluaW11bSB3aWR0aHMuCisgICAgICAgIGZsb2F0IGFkanVzdGFibGVk
SG9yaXpvbnRhbFNwYWNlID0gdGFibGVXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0gLSBncmlkLnRv
dGFsSG9yaXpvbnRhbFNwYWNpbmcoKTsKICAgICAgICAgYXV0byBudW1iZXJPZkNvbHVtbnMgPSBj
b2x1bW5MaXN0LnNpemUoKTsKICAgICAgICAgLy8gRml4ZWQgd2lkdGggY29sdW1ucyBkb24ndCBw
YXJ0aWNpcGF0ZSBpbiBhdmFpbGFibGUgc3BhY2UgZGlzdHJpYnV0aW9uLgogICAgICAgICBmb3Ig
KGF1dG8mIGNvbHVtbiA6IGNvbHVtbkxpc3QpIHsKLSAgICAgICAgICAgIGlmICghY29sdW1uLmhh
c0ZpeGVkV2lkdGgoKSkKKyAgICAgICAgICAgIGlmICghY29sdW1uLmlzRml4ZWRXaWR0aCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYXV0byBjb2x1bW5GaXhlZFdp
ZHRoID0gKmNvbHVtbi5ib3goKS0+Y29sdW1uV2lkdGgoKTsKICAgICAgICAgICAgIGNvbHVtbi5z
ZXRMb2dpY2FsV2lkdGgoY29sdW1uRml4ZWRXaWR0aCk7CkBAIC0zMjEsMzggKzM4MywzNSBAQCB2
b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFIb3Jp
em9udGFsU3BhY2UoTGF5b3V0VW5pdAogICAgICAgICB9CiAgICAgICAgIGlmICghbnVtYmVyT2ZD
b2x1bW5zIHx8ICFhZGp1c3RhYmxlZEhvcml6b250YWxTcGFjZSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdyBqdXN0IGRpc3RyaWJ1dGUgdGhlIGV4dHJh
IHNwYWNlIGVxdWFseSBhbW9uZyB0aGUgY29sdW1ucyB1c2luZyB0aGUgbWluaW11bSB3aWR0aC4K
ICAgICAgICAgQVNTRVJUKGFkanVzdGFibGVkSG9yaXpvbnRhbFNwYWNlID4gMCk7Ci0gICAgICAg
IGZvciAoYXV0byYgY29sdW1uIDogY29sdW1uTGlzdCkgewotICAgICAgICAgICAgaWYgKGNvbHVt
bi5oYXNGaXhlZFdpZHRoKCkpCisgICAgICAgIGZvciAoc2l6ZV90IGNvbHVtbkluZGV4ID0gMDsg
Y29sdW1uSW5kZXggPCBjb2x1bW5zLnNpemUoKTsgKytjb2x1bW5JbmRleCkgeworICAgICAgICAg
ICAgYXV0byYgY29sdW1uID0gY29sdW1ucy5saXN0KClbY29sdW1uSW5kZXhdOworICAgICAgICAg
ICAgaWYgKGNvbHVtbi5pc0ZpeGVkV2lkdGgoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGF1dG8gY29sdW1uRXh0cmFTcGFjZSA9IGV4dHJhSG9yaXpvbnRhbFNwYWNl
IC8gYWRqdXN0YWJsZWRIb3Jpem9udGFsU3BhY2UgKiBjb2x1bW4ud2lkdGhDb25zdHJhaW50cygp
Lm1pbmltdW07Ci0gICAgICAgICAgICBjb2x1bW4uc2V0TG9naWNhbFdpZHRoKGNvbHVtbi53aWR0
aENvbnN0cmFpbnRzKCkubWluaW11bSArIGNvbHVtbkV4dHJhU3BhY2UpOworICAgICAgICAgICAg
YXV0byBjb2x1bW5FeHRyYVNwYWNlID0gaG9yaXpvbnRhbFNwYWNlVG9EaXN0cmlidXRlIC8gYWRq
dXN0YWJsZWRIb3Jpem9udGFsU3BhY2UgKiBjb2x1bW5NaW5pbXVtV2lkdGhzW2NvbHVtbkluZGV4
XTsKKyAgICAgICAgICAgIGNvbHVtbi5zZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCB7IGNvbHVt
bk1pbmltdW1XaWR0aHNbY29sdW1uSW5kZXhdICsgY29sdW1uRXh0cmFTcGFjZSB9KTsKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBpZiAoYXV0byBjb250ZW50V2lkdGggPSBnZW9tZXRyeSgpLmNv
bXB1dGVkQ29udGVudFdpZHRoKHJvb3QoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7Ci0gICAg
ICAgIGlmICgqY29udGVudFdpZHRoID4gdGFibGVXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0pCi0g
ICAgICAgICAgICBkaXN0cmlidXRlRXh0cmFIb3Jpem9udGFsU3BhY2UoKmNvbnRlbnRXaWR0aCAt
IHRhYmxlV2lkdGhDb25zdHJhaW50cy5taW5pbXVtKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdXNlQXNDb250ZW50TG9naWNhbFdpZHRoKFdpZHRoQ29uc3RyYWludHNUeXBlOjpNaW5pbXVt
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAodGFibGVXaWR0aENvbnN0cmFpbnRzLm1pbmlt
dW0gPiBjb250YWluaW5nQmxvY2tXaWR0aCkKLSAgICAgICAgICAgIHVzZUFzQ29udGVudExvZ2lj
YWxXaWR0aChXaWR0aENvbnN0cmFpbnRzVHlwZTo6TWluaW11bSk7Ci0gICAgICAgIGVsc2UgaWYg
KHRhYmxlV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtIDw9IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQot
ICAgICAgICAgICAgdXNlQXNDb250ZW50TG9naWNhbFdpZHRoKFdpZHRoQ29uc3RyYWludHNUeXBl
OjpNYXhpbXVtKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlzdHJpYnV0ZUV4dHJhSG9y
aXpvbnRhbFNwYWNlKGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gdGFibGVXaWR0aENvbnN0cmFpbnRz
Lm1pbmltdW0pOwotICAgIH0KLX0KLQotdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojp1c2VB
c0NvbnRlbnRMb2dpY2FsV2lkdGgoV2lkdGhDb25zdHJhaW50c1R5cGUgdHlwZSkKLXsKLSAgICBh
dXRvJiBjb2x1bW5MaXN0ID0gZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCkuY29sdW1ucygp
Lmxpc3QoKTsKLSAgICBBU1NFUlQoIWNvbHVtbkxpc3QuaXNFbXB0eSgpKTsKKyAgICBlbnVtIGNs
YXNzIFdpZHRoQ29uc3RyYWludHNUeXBlIHsgTWluaW11bSwgTWF4aW11bSB9OworICAgIGF1dG8g
ZGlzdHJpYnV0ZU1pbk9yTWF4ID0gWyZdIChXaWR0aENvbnN0cmFpbnRzVHlwZSB0eXBlKSB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGNvbHVtbkluZGV4ID0gMDsgY29sdW1uSW5kZXggPCBjb2x1bW5z
LnNpemUoKTsgKytjb2x1bW5JbmRleCkgeworICAgICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGgg
PSBMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gMDsg
cm93SW5kZXggPCByb3dzLnNpemUoKTsgKytyb3dJbmRleCkgeworICAgICAgICAgICAgICAgIGF1
dG8gd2lkdGhDb25zdHJhaW50cyA9IGdyaWQuc2xvdCh7IGNvbHVtbkluZGV4LCByb3dJbmRleCB9
KS0+d2lkdGhDb25zdHJhaW50cygpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0
ZDo6bWF4KGxvZ2ljYWxXaWR0aCwgdHlwZSA9PSBXaWR0aENvbnN0cmFpbnRzVHlwZTo6TWluaW11
bSA/IHdpZHRoQ29uc3RyYWludHMubWluaW11bSA6IHdpZHRoQ29uc3RyYWludHMubWF4aW11bSk7
IAorICAgICAgICAgICAgfQorICAgICAgICAgICAgY29sdW1ucy5saXN0KClbY29sdW1uSW5kZXhd
LnNldExvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgpOworICAgICAgICB9CisgICAgfTsKIAotICAg
IGZvciAoYXV0byYgY29sdW1uIDogY29sdW1uTGlzdCkKLSAgICAgICAgY29sdW1uLnNldExvZ2lj
YWxXaWR0aCh0eXBlID09IFdpZHRoQ29uc3RyYWludHNUeXBlOjpNaW5pbXVtID8gY29sdW1uLndp
ZHRoQ29uc3RyYWludHMoKS5taW5pbXVtIDogY29sdW1uLndpZHRoQ29uc3RyYWludHMoKS5tYXhp
bXVtKTsKKyAgICBBU1NFUlQoYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlID49IHRhYmxlV2lkdGhD
b25zdHJhaW50cy5taW5pbXVtKTsKKyAgICBpZiAoYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlID09
IHRhYmxlV2lkdGhDb25zdHJhaW50cy5taW5pbXVtKQorICAgICAgICBkaXN0cmlidXRlTWluT3JN
YXgoV2lkdGhDb25zdHJhaW50c1R5cGU6Ok1pbmltdW0pOworICAgIGVsc2UgaWYgKGF2YWlsYWJs
ZUhvcml6b250YWxTcGFjZSA9PSB0YWJsZVdpZHRoQ29uc3RyYWludHMubWF4aW11bSkKKyAgICAg
ICAgZGlzdHJpYnV0ZU1pbk9yTWF4KFdpZHRoQ29uc3RyYWludHNUeXBlOjpNYXhpbXVtKTsKKyAg
ICBlbHNlCisgICAgICAgIGRpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxTcGFjZShhdmFpbGFibGVI
b3Jpem9udGFsU3BhY2UgLSB0YWJsZVdpZHRoQ29uc3RyYWludHMubWluaW11bSk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVG
b3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGlu
Zy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggOTUwZjNlZTc4NmU4OTYyZTA1ZWE4YzM4
NTMzNzlmMDE5NjEzNjZmZi4uMWVmMmRmZDJmMGM1NzY1ZDRhNGM0ODBlODI5NzNhZDZhZTUzMGEy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJs
ZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9y
bWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHJpdmF0
ZToKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gdGFibGVDZWxs
SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYpIGNvbnN0OwogICAgICAgICBPcHRpb25hbDxMYXlv
dXRVbml0PiBjb21wdXRlZENvbHVtbldpZHRoKGNvbnN0IEJveCYgY29sdW1uQm94KSBjb25zdDsK
KyAgICAgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50
cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0OwpAQCAtNjUsMTAgKzY2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldENvbXB1dGVk
R2VvbWV0cnlGb3JTZWN0aW9ucygpOwogCiAgICAgdm9pZCBlbnN1cmVUYWJsZUdyaWQoKTsKLSAg
ICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMoKTsKKyAgICBJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzIGNvbXB1dGVkUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKCk7CiAgICAg
dm9pZCBjb21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhSG9yaXpvbnRhbFNwYWNlKExheW91dFVuaXQg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGVudW0gY2xhc3MgV2lkdGhDb25zdHJhaW50c1R5
cGUgeyBNaW5pbXVtLCBNYXhpbXVtIH07Ci0gICAgdm9pZCB1c2VBc0NvbnRlbnRMb2dpY2FsV2lk
dGgoV2lkdGhDb25zdHJhaW50c1R5cGUpOwogCiAgICAgdm9pZCBpbml0aWFsaXplRGlzcGxheUJv
eFRvQmxhbmsoRGlzcGxheTo6Qm94JikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCA3MDhkOTU3OTJiYzhhZjI4YzM0MTQxZDNhZTBj
MTU2ZjViZjE5ZjI2Li4yMThlMzI5MWVlNTNhNzZkNDgyMGRlNDI2YWNkOTM1MDU2OWExZTRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC01NSw2
ICs1NSwzNCBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6Y29tcHV0ZWRDb2x1bW5XaWR0aChjb25zdAogICAgIHJldHVybiBjb2x1bW5Cb3gu
Y29sdW1uV2lkdGgoKTsKIH0KIAorRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmludHJpbnNpY1dpZHRo
Q29uc3RyYWludHNGb3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCkKK3sKKyAgICBh
dXRvIGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZyA9IFsmXSB7CisgICAgICAgIGF1dG8mIHN0
eWxlID0gY2VsbEJveC5zdHlsZSgpOworICAgICAgICByZXR1cm4gZml4ZWRWYWx1ZShzdHlsZS5t
YXJnaW5TdGFydCgpKS52YWx1ZU9yKDApCisgICAgICAgICAgICArIExheW91dFVuaXQgeyBzdHls
ZS5ib3JkZXJMZWZ0V2lkdGgoKSB9CisgICAgICAgICAgICArIGZpeGVkVmFsdWUoc3R5bGUucGFk
ZGluZ0xlZnQoKSkudmFsdWVPcigwKQorICAgICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBh
ZGRpbmdSaWdodCgpKS52YWx1ZU9yKDApCisgICAgICAgICAgICArIExheW91dFVuaXQgeyBzdHls
ZS5ib3JkZXJSaWdodFdpZHRoKCkgfQorICAgICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLm1h
cmdpbkVuZCgpKS52YWx1ZU9yKDApOworICAgIH07CisKKyAgICBhdXRvIGNvbXB1dGVkSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IFsmXSB7CisgICAgICAgIC8vIEV2ZW4gZml4ZWQgd2lkdGgg
Y2VsbHMgZXhwYW5kIHRvIHRoZWlyIG1pbmltdW0gY29udGVudCB3aWR0aAorICAgICAgICAvLyA8
dGQgc3R5bGU9IndpZHRoOiAxMHB4Ij50ZXN0X2NvbnRlbnQ8L3RkPiB3aWxsIHNpemUgdG8gbWF4
KG1pbmltdW0gY29udGVudCB3aWR0aCwgY29tcHV0ZWQgd2lkdGgpLgorICAgICAgICBhdXRvIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyB7IH07CisgICAgICAgIGlmIChjZWxsQm94Lmhhc0NoaWxkKCkpCisgICAg
ICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRl
Rm9ybWF0dGluZ0NvbnRleHQoY2VsbEJveCwgbGF5b3V0U3RhdGUoKSktPmNvbXB1dGVkSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cygpOworICAgICAgICBpZiAoYXV0byB3aWR0aCA9IGZpeGVkVmFs
dWUoY2VsbEJveC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpKSkKKyAgICAgICAgICAgIHJldHVybiBG
b3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IHN0ZDo6bWF4KGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgKndpZHRoKSwgc3RkOjptYXgoaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtLCAqd2lkdGgpIH07CisgICAgICAgIHJldHVybiBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOworICAgIH07CisgICAgLy8gRklYTUUgQ2hlY2sgZm9y
IGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzID0gY29uc3RyYWluQnlNaW5NYXhXaWR0aChjZWxsQm94LCBjb21wdXRlZEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMoKSk7CisgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5leHBhbmQo
Zml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkpOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzOworfQorCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlkLmNwcAppbmRleCAxMzY1ZTVkYWM5YmY1OWY3OWU1
ZTUzZTAxZWUxN2JmOTdkOWE5MTMxLi41YzI3ODA2M2QzMjBkZDI0YjdkYTFkNGVjMDBlNGU2M2Zh
ZGJjZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5n
L1RhYmxlR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGlu
Zy9UYWJsZUdyaWQuY3BwCkBAIC00MCwyMCArNDAsNiBAQCBUYWJsZUdyaWQ6OkNvbHVtbjo6Q29s
dW1uKGNvbnN0IEJveCogY29sdW1uQm94KQogewogfQogCi12b2lkIFRhYmxlR3JpZDo6Q29sdW1u
OjpzZXRXaWR0aENvbnN0cmFpbnRzKEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIHdpZHRoQ29uc3RyYWludHMpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBt
X2hhc1dpZHRoQ29uc3RyYWludHMgPSB0cnVlOwotI2VuZGlmCi0gICAgbV93aWR0aENvbnN0cmFp
bnRzID0gd2lkdGhDb25zdHJhaW50czsKLX0KLQotRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgVGFibGVHcmlkOjpDb2x1bW46OndpZHRoQ29uc3RyYWludHMoKSBj
b25zdAotewotICAgIEFTU0VSVChtX2hhc1dpZHRoQ29uc3RyYWludHMpOwotICAgIHJldHVybiBt
X3dpZHRoQ29uc3RyYWludHM7Ci19Ci0KIHZvaWQgVGFibGVHcmlkOjpDb2x1bW46OnNldExvZ2lj
YWxXaWR0aChMYXlvdXRVbml0IGNvbXB1dGVkTG9naWNhbFdpZHRoKQogewogI2lmIEFTU0VSVF9F
TkFCTEVECkBAIC04MiwxMCArNjgsOSBAQCBMYXlvdXRVbml0IFRhYmxlR3JpZDo6Q29sdW1uOjps
b2dpY2FsTGVmdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY29tcHV0ZWRMb2dpY2FsTGVmdDsKIH0K
IAotYm9vbCBUYWJsZUdyaWQ6OkNvbHVtbjo6aGFzRml4ZWRXaWR0aCgpIGNvbnN0Citib29sIFRh
YmxlR3JpZDo6Q29sdW1uOjppc0ZpeGVkV2lkdGgoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBU
aGlzIG9ubHkgY292ZXJzIHRoZSA8Y29sPiBhdHRyaWJ1dGUgY2FzZS4KLSAgICByZXR1cm4gYm94
KCkgJiYgYm94KCktPmNvbHVtbldpZHRoKCk7CisgICAgcmV0dXJuIGhhc0ZpeGVkV2lkdGhDZWxs
KCkgfHwgKGJveCgpICYmIGJveCgpLT5jb2x1bW5XaWR0aCgpKTsKIH0KIAogdm9pZCBUYWJsZUdy
aWQ6OkNvbHVtbnM6OmFkZENvbHVtbihjb25zdCBCb3gmIGNvbHVtbkJveCkKQEAgLTExNSw4ICsx
MDAsMTUgQEAgVGFibGVHcmlkOjpDZWxsOjpDZWxsKGNvbnN0IEJveCYgY2VsbEJveCwgU2xvdFBv
c2l0aW9uIHBvc2l0aW9uLCBDZWxsU3BhbiBzcGFuKQogewogfQogCi1UYWJsZUdyaWQ6OlNsb3Q6
OlNsb3QoQ2VsbCYgY2VsbCkKLSAgICA6IGNlbGwobWFrZVdlYWtQdHIoY2VsbCkpCitib29sIFRh
YmxlR3JpZDo6Q2VsbDo6aXNGaXhlZFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYm94KCku
c3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0ZpeGVkKCk7Cit9CisKK1RhYmxlR3JpZDo6U2xvdDo6
U2xvdChDZWxsJiBjZWxsLCBib29sIGlzQ29sdW1uU3Bhbm5lZCwgYm9vbCBpc1Jvd1NwYW5uZWQp
CisgICAgOiBtX2NlbGwobWFrZVdlYWtQdHIoY2VsbCkpCisgICAgLCBtX2lzQ29sdW1uU3Bhbm5l
ZChpc0NvbHVtblNwYW5uZWQpCisgICAgLCBtX2lzUm93U3Bhbm5lZChpc1Jvd1NwYW5uZWQpCiB7
CiB9CiAKQEAgLTE1NCwxMSArMTQ2LDE0IEBAIHZvaWQgVGFibGVHcmlkOjphcHBlbmRDZWxsKGNv
bnN0IEJveCYgY2VsbEJveCkKICAgICB9CiAgICAgYXV0byBjZWxsID0gbWFrZVVuaXF1ZTxDZWxs
PihjZWxsQm94LCBpbml0aWFsU2xvdFBvc2l0aW9uLCBDZWxsU3BhbiB7IGNvbHVtblNwYW4sIHJv
d1NwYW4gfSk7CiAgICAgLy8gUm93IGFuZCBjb2x1bW4gc3Bhbm5lcnMgY3JlYXRlIGFkZGl0aW9u
YWwgc2xvdHMuCi0gICAgZm9yIChzaXplX3Qgcm93ID0gMTsgcm93IDw9IHJvd1NwYW47ICsrcm93
KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNvbHVtbiA9IDE7IGNvbHVtbiA8PSBjb2x1bW5TcGFu
OyArK2NvbHVtbikgewotICAgICAgICAgICAgYXV0byBwb3NpdGlvbiA9IFNsb3RQb3NpdGlvbiB7
IGluaXRpYWxTbG90UG9zaXRpb24uY29sdW1uICsgY29sdW1uIC0gMSwgaW5pdGlhbFNsb3RQb3Np
dGlvbi5yb3cgKyByb3cgLSAxIH07CisgICAgZm9yIChzaXplX3Qgcm93ID0gMDsgcm93IDwgcm93
U3BhbjsgKytyb3cpIHsKKyAgICAgICAgZm9yIChhdXRvIGNvbHVtbiA9IGNlbGwtPnN0YXJ0Q29s
dW1uKCk7IGNvbHVtbiA8IGNlbGwtPmVuZENvbHVtbigpOyArK2NvbHVtbikgeworICAgICAgICAg
ICAgYXV0byBwb3NpdGlvbiA9IFNsb3RQb3NpdGlvbiB7IGNvbHVtbiwgY2VsbC0+c3RhcnRSb3co
KSArIHJvdyB9OwogICAgICAgICAgICAgQVNTRVJUKCFtX3Nsb3RNYXAuY29udGFpbnMocG9zaXRp
b24pKTsKLSAgICAgICAgICAgIG1fc2xvdE1hcC5hZGQocG9zaXRpb24sIG1ha2VVbmlxdWU8U2xv
dD4oKmNlbGwpKTsKKyAgICAgICAgICAgIC8vIFRoaXMgc2xvdCBpcyBzcGFubmVkIGJ5IGEgY2Vs
bCBhdCB0aGUgaW5pdGlhbCBzbG93IHBvc2l0aW9uLgorICAgICAgICAgICAgYXV0byBpc0NvbHVt
blNwYW5uZWQgPSBjb2x1bW4gIT0gY2VsbC0+c3RhcnRDb2x1bW4oKTsKKyAgICAgICAgICAgIGF1
dG8gaXNSb3dTcGFubmVkID0gISFyb3c7CisgICAgICAgICAgICBtX3Nsb3RNYXAuYWRkKHBvc2l0
aW9uLCBtYWtlVW5pcXVlPFNsb3Q+KCpjZWxsLCBpc0NvbHVtblNwYW5uZWQsIGlzUm93U3Bhbm5l
ZCkpOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIEluaXRpYWxpemUgY29sdW1ucy9yb3dzIGlm
IG5lZWRlZC4KQEAgLTE2Niw2ICsxNjEsMTEgQEAgdm9pZCBUYWJsZUdyaWQ6OmFwcGVuZENlbGwo
Y29uc3QgQm94JiBjZWxsQm94KQogICAgIGZvciAoYXV0byBjb2x1bW4gPSAwOyBjb2x1bW4gPCBt
aXNzaW5nTnVtYmVyT2ZDb2x1bW5zOyArK2NvbHVtbikKICAgICAgICAgbV9jb2x1bW5zLmFkZEFu
b255bW91c0NvbHVtbigpOwogCisgICAgaWYgKGNlbGwtPmlzRml4ZWRXaWR0aCgpKSB7CisgICAg
ICAgIGZvciAoYXV0byBjb2x1bW4gPSBjZWxsLT5zdGFydENvbHVtbigpOyBjb2x1bW4gPCBjZWxs
LT5lbmRDb2x1bW4oKTsgKytjb2x1bW4pCisgICAgICAgICAgICBtX2NvbHVtbnMubGlzdCgpW2Nv
bHVtbl0uc2V0SGFzRml4ZWRXaWR0aENlbGwoKTsKKyAgICB9CisKICAgICBpZiAoaXNJbk5ld1Jv
dykKICAgICAgICAgbV9yb3dzLmFkZFJvdyhjZWxsQm94LnBhcmVudCgpKTsKIApAQCAtMTgzLDE5
ICsxODMsNiBAQCB2b2lkIFRhYmxlR3JpZDo6cmVtb3ZlQ2VsbChjb25zdCBCb3gmIGNlbGxCb3gp
CiAgICAgVU5VU0VEX1BBUkFNKGNlbGxCb3gpOwogfQogCi1Gb3JtYXR0aW5nQ29udGV4dDo6SW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUdyaWQ6OndpZHRoQ29uc3RyYWludHMoKQotewot
ICAgIC8vIEZJWE1FOiBBZGQgY29uc3RyYWludCBpbnZhbGlkYXRpb24gZm9yIGluY3JlbWVudGFs
IGxheW91dHMuCi0gICAgaWYgKG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50cykKLSAgICAgICAg
cmV0dXJuICptX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0KLSAgICBtX2ludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyB7IH07Ci0gICAgZm9yIChhdXRvJiBjb2x1bW4gOiBtX2NvbHVtbnMubGlzdCgpKQotICAg
ICAgICAqbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzICs9IGNvbHVtbi53aWR0aENvbnN0cmFp
bnRzKCk7Ci0gICAgbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLT5leHBhbmQodG90YWxIb3Jp
em9udGFsU3BhY2luZygpKTsKLSAgICByZXR1cm4gKm1faW50cmluc2ljV2lkdGhDb25zdHJhaW50
czsKLX0KLQogfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
dGFibGVmb3JtYXR0aW5nL1RhYmxlR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxl
Zm9ybWF0dGluZy9UYWJsZUdyaWQuaAppbmRleCAyMmM4NzljNGFhYTI4OWY0MmI0NzJlOTc1MjE5
NTIyZWQ5ZjE1ODFhLi45YzljMzBhNGNiODg4NTNjMjlhODkzMzQ2NzA2NGM1MzE0MmFiOTRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlR3Jp
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlk
LmgKQEAgLTU1LDM1ICs1NSwzNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWZXJ0aWNhbFNwYWNp
bmcoTGF5b3V0VW5pdCB2ZXJ0aWNhbFNwYWNpbmcpIHsgbV92ZXJ0aWNhbFNwYWNpbmcgPSB2ZXJ0
aWNhbFNwYWNpbmc7IH0KICAgICBMYXlvdXRVbml0IHZlcnRpY2FsU3BhY2luZygpIGNvbnN0IHsg
cmV0dXJuIG1fdmVydGljYWxTcGFjaW5nOyB9CiAKLSAgICBib29sIGhhc0NvbXB1dGVkV2lkdGhD
b25zdHJhaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5o
YXNWYWx1ZSgpOyB9Ci0gICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgd2lkdGhDb25zdHJhaW50cygpOworICAgIHZvaWQgc2V0V2lkdGhDb25zdHJhaW50cyhG
b3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzKSB7IG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHM7IH0KKyAgICBPcHRpb25hbDxGb3JtYXR0aW5nQ29udGV4dDo6SW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cz4gd2lkdGhDb25zdHJhaW50cygpIHsgcmV0dXJuIG1faW50cmlu
c2ljV2lkdGhDb25zdHJhaW50czsgfQogCi0gICAgLy8gQ29sdW1uIHJlcHJlc2VudHMgYSB2ZXJ0
aWNhbCBzZXQgb2Ygc2xvdHMgaW4gdGhlIGdyaWQuIEEgY29sdW1uIGhhcyBtaW4vbWF4IGFuZCBm
aW5hbCB3aWR0aC4KKyAgICAvLyBDb2x1bW4gcmVwcmVzZW50cyBhIHZlcnRpY2FsIHNldCBvZiBz
bG90cyBpbiB0aGUgZ3JpZC4gQSBjb2x1bW4gaGFzIGhvcml6b250YWwgcG9zaXRpb24gYW5kIHdp
ZHRoLgogICAgIGNsYXNzIENvbHVtbiB7CiAgICAgcHVibGljOgogICAgICAgICBDb2x1bW4oY29u
c3QgQm94Kik7CiAKLSAgICAgICAgdm9pZCBzZXRXaWR0aENvbnN0cmFpbnRzKEZvcm1hdHRpbmdD
b250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKLSAgICAgICAgRm9ybWF0dGluZ0Nv
bnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgd2lkdGhDb25zdHJhaW50cygpIGNvbnN0
OwotCiAgICAgICAgIHZvaWQgc2V0TG9naWNhbExlZnQoTGF5b3V0VW5pdCk7CiAgICAgICAgIExh
eW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdDsKICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHQoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdCgpICsgbG9naWNhbFdpZHRoKCk7IH0K
ICAgICAgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCk7CiAgICAgICAgIExheW91
dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3Q7CiAKLSAgICAgICAgYm9vbCBoYXNGaXhlZFdpZHRo
KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNGaXhlZFdpZHRoKCkgY29uc3Q7CiAKKyAgICAgICAg
dm9pZCBzZXRIYXNGaXhlZFdpZHRoQ2VsbCgpIHsgbV9oYXNGaXhlZFdpZHRoQ2VsbCA9IHRydWU7
IH0KICAgICAgICAgY29uc3QgQm94KiBib3goKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveC5n
ZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgbV93aWR0aENvbnN0cmFpbnRzOworICAgICAgICBib29sIGhh
c0ZpeGVkV2lkdGhDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaXhlZFdpZHRoQ2VsbDsgfQor
CiAgICAgICAgIExheW91dFVuaXQgbV9jb21wdXRlZExvZ2ljYWxXaWR0aDsKICAgICAgICAgTGF5
b3V0VW5pdCBtX2NvbXB1dGVkTG9naWNhbExlZnQ7CiAgICAgICAgIFdlYWtQdHI8Y29uc3QgQm94
PiBtX2xheW91dEJveDsKKyAgICAgICAgYm9vbCBtX2hhc0ZpeGVkV2lkdGhDZWxsIHsgZmFsc2Ug
fTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgIGJvb2wgbV9oYXNXaWR0aENvbnN0cmFp
bnRzIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBtX2hhc0NvbXB1dGVkV2lkdGggeyBmYWxzZSB9
OwogICAgICAgICBib29sIG1faGFzQ29tcHV0ZWRMZWZ0IHsgZmFsc2UgfTsKICNlbmRpZgpAQCAt
MTU2LDYgKzE1NSw4IEBAIHB1YmxpYzoKICAgICAgICAgU2xvdFBvc2l0aW9uIHBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgICAgICBDZWxsU3BhbiBzcGFuKCkgY29u
c3QgeyByZXR1cm4gbV9zcGFuOyB9CiAKKyAgICAgICAgYm9vbCBpc0ZpeGVkV2lkdGgoKSBjb25z
dDsKKwogICAgICAgICBjb25zdCBCb3gmIGJveCgpIGNvbnN0IHsgcmV0dXJuICptX2xheW91dEJv
eC5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKQEAgLTE2NCwxMyArMTY1LDM0IEBAIHB1YmxpYzoK
ICAgICAgICAgQ2VsbFNwYW4gbV9zcGFuOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvdCB7Cisg
ICAgY2xhc3MgU2xvdCB7CisgICAgcHVibGljOgogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7CiAgICAgICAgIFNsb3QoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIFNsb3QoQ2Vs
bCYpOworICAgICAgICBTbG90KENlbGwmLCBib29sIGlzQ29sdW1uU3Bhbm5lZCwgYm9vbCBpc1Jv
d1NwYW5uZWQpOworCisgICAgICAgIGNvbnN0IENlbGwmIGNlbGwoKSBjb25zdCB7IHJldHVybiAq
bV9jZWxsOyB9CisgICAgICAgIENlbGwmIGNlbGwoKSB7IHJldHVybiAqbV9jZWxsOyB9CiAKLSAg
ICAgICAgV2Vha1B0cjxDZWxsPiBjZWxsOwotICAgICAgICBGb3JtYXR0aW5nQ29udGV4dDo6SW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyB3aWR0aENvbnN0cmFpbnRzOworICAgICAgICBjb25zdCBG
b3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyYgd2lkdGhDb25zdHJh
aW50cygpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDb25zdHJhaW50czsgfQorICAgICAgICB2b2lk
IHNldFdpZHRoQ29uc3RyYWludHMoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMmIHdpZHRoQ29uc3RyYWludHMpIHsgbV93aWR0aENvbnN0cmFpbnRzID0g
d2lkdGhDb25zdHJhaW50czsgfQorCisgICAgICAgIC8vIEluaXRpYWwgc2xvdCBwb3NpdGlvbiBm
b3IgYSBzcGFubmluZyBjZWxsLgorICAgICAgICAvLyA8dGQ+PC90ZD48dGQgY29sc3Bhbj0yPjwv
dGQ+IFsxLCAwXSBzbG90IGhhcyBjb2x1bW4gc3BhbiBvZiAyLgorICAgICAgICBib29sIGhhc0Nv
bHVtblNwYW4oKSBjb25zdCB7IHJldHVybiBtX2NlbGwtPmNvbHVtblNwYW4oKSA+IDEgJiYgIWlz
Q29sdW1uU3Bhbm5lZCgpOyB9CisgICAgICAgIGJvb2wgaGFzUm93U3BhbigpIGNvbnN0IHsgcmV0
dXJuIG1fY2VsbC0+cm93U3BhbigpID4gMSAmJiAhaXNSb3dTcGFubmVkKCk7IH0KKworICAgICAg
ICAvLyBOb24taW5pdGlhbCBzcGFubmVkIHNsb3QuCisgICAgICAgIC8vIDx0ZD48L3RkPjx0ZCBj
b2xzcGFuPTI+PC90ZD4gWzIsIDBdIHNsb3QgaXMgY29sdW1uIHNwYW5uZWQgYnkgWzEsIDBdLgor
ICAgICAgICAvLyA8dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD4KKyAgICAgICAgYm9vbCBpc0Nv
bHVtblNwYW5uZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sdW1uU3Bhbm5lZDsgfQorICAgICAg
ICBib29sIGlzUm93U3Bhbm5lZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSb3dTcGFubmVkOyB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBXZWFrUHRyPENlbGw+IG1fY2VsbDsKKyAgICAgICAgYm9v
bCBtX2lzQ29sdW1uU3Bhbm5lZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9pc1Jvd1NwYW5u
ZWQgeyBmYWxzZSB9OworICAgICAgICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyBtX3dpZHRoQ29uc3RyYWludHM7CiAgICAgfTsKIAogICAgIGNvbnN0IENvbHVt
bnMmIGNvbHVtbnMoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnM7IH0KQEAgLTE4Myw2ICsyMDUs
NyBAQCBwdWJsaWM6CiAgICAgQ2VsbHMmIGNlbGxzKCkgeyByZXR1cm4gbV9jZWxsczsgfQogCiAg
ICAgU2xvdCogc2xvdChTbG90UG9zaXRpb24pOworICAgIGJvb2wgaXNTcGFubmVkKFNsb3RQb3Np
dGlvbik7CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgU2xvdE1hcCA9IFdURjo6SGFzaE1hcDxTbG90
UG9zaXRpb24sIHN0ZDo6dW5pcXVlX3B0cjxTbG90Pj47Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>