<?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>187980</bug_id>
          
          <creation_ts>2018-07-24 16:49:26 -0700</creation_ts>
          <short_desc>After replaying a DisplayList, the state of the drawing context has to be restored</short_desc>
          <delta_ts>2018-08-06 16:38:11 -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>NEW</bug_status>
          <resolution></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>
          <dependson>187921</dependson>
          <blocked>188116</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</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>1444889</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-24 16:49:26 -0700</bug_when>
    <thetext>A problem could happen if we are replaying multiple display lists to the same drawing context. When replaying its DisplayListItems, the DisplayList expects to find the state of the drawing context to be exactly the same it was at the time it was recorded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444893</commentid>
    <comment_count>1</comment_count>
      <attachid>345728</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-24 16:54:22 -0700</bug_when>
    <thetext>Created attachment 345728
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1445170</commentid>
    <comment_count>2</comment_count>
      <attachid>345784</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-25 14:30:09 -0700</bug_when>
    <thetext>Created attachment 345784
Patch for Review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448285</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-06 16:38:11 -0700</bug_when>
    <thetext>&lt;rdar://problem/42986541&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345728</attachid>
            <date>2018-07-24 16:54:22 -0700</date>
            <delta_ts>2018-07-25 14:29:15 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-187980-20180724165421.patch</filename>
            <type>text/plain</type>
            <size>288675</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2UxOWQyYTE5Zjg0YjUx
ODQxMGNiMDQ2NGZjOTNiZmRkZmExNTBmOC4uNDc3ZGNmYjc3MTkwNTMxNjI1YjBiY2ZjMjFhOTMy
ZDU3MWYxYzU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2MSBAQAorMjAxOC0wNy0yNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFmdGVy
IHJlcGxheWluZyBhIERpc3BsYXlMaXN0LCB0aGUgc3RhdGUgb2YgdGhlIGRyYXdpbmcgY29udGV4
dCBoYXMgdG8gYmUgcmVzdG9yZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4Nzk4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEEgcHJvYmxlbSBjb3VsZCBoYXBwZW4gaWYgd2UgYXJlIHJlcGxheWluZyBt
dWx0aXBsZSBkaXNwbGF5IGxpc3RzIHRvIHRoZQorICAgICAgICBzYW1lIGRyYXdpbmcgY29udGV4
dC4gV2hlbiByZXBsYXlpbmcgaXRzIERpc3BsYXlMaXN0SXRlbXMsIHRoZSBEaXNwbGF5TGlzdAor
ICAgICAgICBleHBlY3RzIHRvIGZpbmQgdGhlIHN0YXRlIG9mIHRoZSBkcmF3aW5nIGNvbnRleHQg
dG8gYmUgZXhhY3RseSB0aGUgc2FtZQorICAgICAgICBpdCB3YXMgYXQgdGhlIHRpbWUgaXQgd2Fz
IHJlY29yZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
cGxheWVyOjpyZXBsYXkpOgorCisyMDE4LTA3LTIzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgRGlzcGxheUxpc3Q6OkRyYXdSZWN0KCkgc2hv
dWxkIHRha2UgaGFsZiBvZiB0aGUgYm9yZGVyIHRoaWNrbmVzcyBpbnRvIGFjY291bnQgd2hlbiBj
YWxjdWxhdGluZyB0aGUgbG9jYWxCb3VuZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODc5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBIYWxmIG9mIHRoZSBib3JkZXIgdGhpY2tuZXNzIGlzIGRyYXdu
IG91dHNpZGUgdGhlIHJlY3RhbmdsZSBhcmVhLiBXZSBuZWVkCisgICAgICAgIHRvIGluZmxhdGUg
dGhlIGxvY2FsQm91bmRzIGJ5IHRoaXMgYW1vdW50LiBSZW1lbWJlciBsb2NhbEJvdW5kcyBpcyB1
c2VkCisgICAgICAgIGluIGNhbGN1bGF0aW5nIHRoZSBEaXNwbGF5TGlzdEl0ZW0gZXh0ZW50IHdo
aWNoIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIKKyAgICAgICAgRGlzcGxheUxpc3RJdGVtIGlu
dGVyc2VjdHMgdGhlIGNsaXBwaW5nIG9yIG5vdC4gQW5kIGlmIHRoZXkgZG9uJ3QgaW50ZXJzZWN0
CisgICAgICAgIHRoZSBEaXNwbGF5TGlzdEl0ZW0gd2lsbCBub3QgYmUgZHJhd24uCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcDogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXll
cjo6flJlcGxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5oOgorCisyMDE4LTA3LTIyICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIFJlbmRlckxheWVy
Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTg3ODk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBjbGFzcyB3aWxsIGNvbnRyb2wgd2hldGhlciB0aGUgZHJhd2luZyBjb250ZXh0IGlzIGEg
ZGlzcGxheSBsaXN0IG9yCisgICAgICAgIG5vdC4gSXQgd2lsbCBtYW5hZ2UgY3JlYXRpbmcgdGhl
IGRpc3BsYXkgbGlzdHMgYW5kIHJlcGxheWluZyB0aGVtIGluIHRoZQorICAgICAgICBjb3JyZWN0
IG9yZGVyLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHJlbmRlcmluZy9QYWludFBoYXNlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVy
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50Q29tcG9zaXRl
ZFBoYXNlc011bHRpcGxlUGFzc2VzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb250ZXh0Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb250ZXh0OjpSZW5kZXJMYXllckNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb250ZXh0OjpncmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJEaXNwbGF5TGlzdENvbnRleHQ6OlJlbmRlckxh
eWVyRGlzcGxheUxpc3RDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRGlz
cGxheUxpc3RDb250ZXh0OjpyZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJE
aXNwbGF5TGlzdENvbnRleHQ6OnBhaW50T3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyRGlzcGxheUxpc3RDb250ZXh0OjpwYWludE9yZGVyc1NpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJEaXNwbGF5TGlzdENvbnRleHQ6OnBhaW50T3JkZXJJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckRpc3BsYXlMaXN0Q29udGV4dDo6Z3JhcGhpY3ND
b250ZXh0KToKKworMjAxOC0wNy0yMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBSZW5kZXJMYXllciBjb21wb3NpdGVk
IHBoYXNlcyBwYWludGluZyBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Nzg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIG1ha2UgUmVu
ZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cygpIGNob29zZSBiZXR3ZWVuIGRpZmZlcmVudAor
ICAgICAgICBpbXBsZW1lbnRhdGlvbnMgZm9yIHBhaW50aW5nIHRoZSBjb21wb3NpdGVkIHBoYXNl
cy4gVGhlIGZpcnN0IGltcGxlbWVudGF0aW9uCisgICAgICAgIGlzIHRoZSBleGlzdGluZyBvbmU6
IG11bHRpcGxlIHBhc3NlcyBpbnRvIHRoZSBkcmF3aW5nIEdyYXBoaWNzQ29udGV4dC4gSW4KKyAg
ICAgICAgdGhlIGZvbGxvd2luZyBwYXRjaCwgYSBuZXcgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBp
bnRyb2R1Y2VkOiBtdWx0aXBsZSBwYXNzZXMKKyAgICAgICAgaW50byBtdWx0aXBsZSBEaXNwbGF5
TGlzdHMuIFRoZW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGNoYW5nZWQgdG8gYmU6Cisg
ICAgICAgIHNpbmdsZSBwYXNzIGludG8gbXVsdGlwbGUgRGlzcGxheUxpc3RzLgorCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpSZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuZFRy
YW5zcGFyZW5jeUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRM
YXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludENvbXBv
c2l0ZWRQaGFzZXNNdWx0aXBsZVBhc3Nlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKToKKworMjAx
OC0wNy0yMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisg
ICAgICAgIEVuYWJsZSBEaXNwbGF5TGlzdCByZWNvcmRpbmcgZm9yIFNoYXJlYWJsZUJpdG1hcDo6
cGFpbnQoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTg3ODQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBkcmF3aW5nIGZ1bmN0aW9uIHNob3VsZCBiZSByZWNvcmQtYWJsZS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JY29uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlU2NhbGVkSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmRyYXdOYXRpdmVTY2FsZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlU2NhbGVkSW1hZ2UpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d05hdGl2ZVNjYWxlZEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwOgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd05hdGl2ZVNjYWxlZEltYWdl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWly
b09wZXJhdGlvblJlY29yZGVyLmg6CisKKzIwMTgtMDctMTggIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBDbGlwcGluZyBvcGVyYXRpb25zIHNo
b3VsZCBiZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODc3OTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWNvcmRpbmcg
dG8gRGlzcGxheUxpc3QgbGlzdCBoYXBwZW5zIGluIHRoZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBB
UElzLgorICAgICAgICBUaGUgYWN0dWFsIGNsaXBwaW5nIHdpbGwgYmUgZG9uZSBpbiB0aGUgcGxh
dGZvcm0tZGVwZW5kZW50IHNvdXJjZXMuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpkcmF3VGV4dEludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNsaXApOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNsaXBQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1DbGlwT3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1DbGlwVG9JbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlO
YXRpdmVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNs
aXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1DbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1D
bGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1DbGlw
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1U
cmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVu
ZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjppdGVtc0Rlc2NyaXB0b3JzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisKKzIwMTgtMDctMTgg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBB
bGxvdyBpY29uLCB3aWRnZXQsIHNjcm9sbGJhciBhbmQgdGhlbWUgdG8gYmUgZHJhd24gdGhyb3Vn
aCBEaXNwbGF5TGlzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg3NzY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRHJhd2luZyB0aGVzZSBpdGVtcyBzaG91bGQgZ28gdGhyb3VnaCBHcmFwaGljc0NvbnRl
eHQgd2hpY2ggd2lsbCBjcmVhdGUKKyAgICAgICAgc3BlY2lhbCBEaXNwbGF5TGlzdEl0ZW1zIGZv
ciBkcmF3aW5nIHRoZW0uIFRoZXNlIERpc3BsYXlMaXN0SXRlbXMgd2lsbAorICAgICAgICBzdG9y
ZSBhbGwgdGhlIHBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aGVuIHJlcGxheWluZyB0aGUgRGlzcGxh
eUxpc3QgYmFjay4KKworICAgICAgICAqIHBsYXRmb3JtL0NvbnRyb2xTdGF0ZXMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcjo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xs
YmFyLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9UaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6VGhlbWU6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1RoZW1l
Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9X
aWRnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ljb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3V2lk
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Njcm9sbGJhcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaGVtZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ljb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdJY29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6ZHJhd1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3VGhlbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNpemVJbkJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRyYXdJY29uKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
VGhlbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGxhdGZvcm1QYWludCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaW9zL0ljb25JT1MubW06CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9y
bVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SWNv
bjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwOgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3SWNvbik6CisgICAgICAgIChOaWNv
c2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3V2lkZ2V0KToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdTY3JvbGxiYXIpOgorICAgICAgICAoTmlj
b3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1RoZW1lKToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGxhdGZvcm1QYWludCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJY29uOjpwYWludCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3BlL0ljb25XUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGxhdGZvcm1QYWlu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRn
ZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6Cisg
ICAgICAgICogcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwbGF0Zm9ybVBhaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludFRvZ2dsZUJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpwYWludFN0
ZXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OnBsYXRmb3JtUGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvVGV4dEZsYWdzLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldpZGdldDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwbGF0Zm9ybVBhaW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvVGhlbWVXUEUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGhlbWVXUEU6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVXUEU6
OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVXUEU6OnBhaW50UmFkaW8p
OgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVXUEU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRoZW1lV1BFOjpwYWludCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3Bl
L1RoZW1lV1BFLmg6CisgICAgICAgICogcGxhdGZvcm0vd3BlL1dpZGdldFdQRS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludCk6CisKKzIwMTgtMDctMTcgIFNhaWQg
QWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBUZW1wbGF0
aXplIERpc3BsYXlMaXN0SXRlbXMgYW5kIHVzZSBzdGQ6OnR1cGxlIHRvIHN0b3JlIHRoZSBhcmd1
bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
NzAwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERp
c3BsYXlMaXN0SXRlbXMgYXJlIHNpbXBsZSBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCBncmFwaGlj
cyBjb21tYW5kcyBhbmQKKyAgICAgICAgdGhlaXIgYXJndW1lbnRzLiBUaGUgYXJndW1lbnRzIGFy
ZSBzdG9yZWQgd2hpbGUgcmVjb3JkaW5nIHRoZSBEaXNwbGF5TGlzdCAKKyAgICAgICAgYW5kIHVz
ZWQgd2hlbiByZXBsYXlpbmcgaXQgYmFjay4gSW4gZmFjdCwgd2UgZG8gbm90IGNhcmUgbXVjaCBh
Ym91dCBrbm93aW5nCisgICAgICAgIHRoZXNlIGFyZ3VtZW50cyBleHBlY3Qgd2hlbiBkZWJ1Z2dp
bmcgdGhlIERpc3BsYXlMaXN0LiBTbyBhIG1lY2hhbmljYWwgd2F5CisgICAgICAgIHRvIHN0b3Jl
IHRoZSBhcmd1bWVudHMgYW5kIHBhc3NpbmcgdGhlbSB0byBHcmFwaGljc0NvbnRleHQgc2hvdWxk
IGJlIHN1ZmZpY2llbnQuCisgICAgICAgIFRoaXMgd2lsbCBtYWtlIGFkZGluZyBhIG5ldyBEaXNw
bGF5TGlzdEl0ZW0gZWFzaWVyIGFuZCBpbiBtYWtlcyB0aGUgY29kZQorICAgICAgICBhIGxvdCBz
aG9ydGVyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdGVtcGxhdGl6ZXMgdGhlIERpc3BsYXlMaXN0
SXRlbXMgY2xhc3NlcyBhbmQgdXNlcyBzdGQ6OnR1cGxlIHRvCisgICAgICAgIHN0b3JlIHRoZSBh
cmd1bWVudHMuIFRoZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFy
Z3VtZW50IAorICAgICAgICB0byB0aGUgdGVtcGxhdGUgYWxvbmcgd2l0aCB0aGUgdHlwZXMgb2Yg
dGhlIHN0ZDo6dHVwbGUgaXRlbXMuIFRoZSBjbGFzcworICAgICAgICBoaWVyYXJjaHkgaXMgYSBs
aXR0bGUgYml0IGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCBvbmU6CisKKyAgICAgICAgLS0g
SXRlbTogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBhbmQgdGhpcyBpcyB3aGF0IERpc3BsYXlMaXN0
IHN0b3Jlcy4KKyAgICAgICAgLS0gR2VvbXRyeUl0ZW06IEl0IGlzIGRlcml2ZWQgZnJvbSBJdGVt
IGFuZCB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgICAgICAgaXQgYW5kIEl0ZW0gaXMg
aXQga25vd3MgdGhlIGV4dGVudCBvZiB0aGUgSXRlbS4KKyAgICAgICAgLS0gR3JhcGhpY3NJdGVt
OiBJdCdzIGEgdGVtcGxhdGUgY2xhc3Mgd2hpY2ggdGFrZXMgYSBwb2ludGVyIHRvIGEgR3JhcGhp
Y3NDb250ZXh0CisgICAgICAgIGZ1bmN0aW9uLCBzZXQgb2YgYXJndW1lbnRzJyB0eXBlcy4gSXRz
IGNvbnN0cnVjdG9yIHNhdmVzIHRoZSBhcmd1bWVudHMgaW4KKyAgICAgICAgc3RkOjp0dXBsZS4g
SXRzIGFwcGx5IG1ldGhvZCBjYWxscyB0aGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uIGJ5IHBh
c3NpbmcKKyAgICAgICAgdGhlIGFyZ3VtZW50cyBpdCBzdG9yZXMuCisgICAgICAgIC0tIFNldHRp
bmdJdGVtOiBJdCBpcyBkZXJpdmVkIGZyb20gSXRlbSBhbmQgR3JhcGhpY3NJdGVtLgorICAgICAg
ICAtLSBEcmF3aW5nSXRlbTogSXQgaXMgZGVyaXZlZCBmcm9tIEdlb210cnlJdGVtIGFuZCBHcmFw
aGljc0l0ZW0uCisKKyAgICAgICAgTm90ZXMgYW5kIHNvbWUgZHJhd2JhY2tzIG9mIHRoaXMgcGF0
Y2ggYXJlOgorICAgICAgICAtLSBUaGUgRGlzcGxheUxpc3QgcmVwbGF5aW5nIGJhY2sgZnVuY3Rp
b24gc2hvdWxkIGJlIG1ldGhvZHMgb2YgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICAtLSBUaGUg
b3BlcmF0b3IgPDwgaGFzIHRvIGJlIGRlZmluZWQgZm9yIGFsbCB0aGUgYXJndW1lbnRzJyB0eXBl
cy4KKyAgICAgICAgLS0gV2hlbiBhbiBhcmd1bWVudHMgaXMgYSBSZWZDb3VudGVkIGFuZCB0aGUg
R3JhcGhpY3NDb250ZXggZnVuY3Rpb24gdGFrZXMKKyAgICAgICAgYSByYXcgcG9pbnRlciBvciBy
ZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBpdHNlbGYsIHRoZSBHcmFwaGljc0l0ZW0gY2FuIHN0b3Jl
CisgICAgICAgIGEgUmVmIG9yIGEgUmVmUHRyIHRvIHRoZSBvYmplY3QuIFRoZSBpbXBsaWNpdCBj
YXN0aW5nIG9mIFJlZlB0ciBhbmQgUmVmCisgICAgICAgIHdpbGwgZG8gdGhlIG1hZ2ljIHdoZW4g
dGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIEdyYXBoaWNzQ29udGV4dC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6YXBwbHlTdGF0ZUNoYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TGluZXNGb3JU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1Bh
dGgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVzRm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdDo6c2l6ZUluQnl0ZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjppdGVtc0Rlc2NyaXB0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjppdGVtRGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6
bmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6YXJndW1l
bnROYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpkZXNj
cmlwdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbTo6c2l6ZUluQnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNhdmU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZXN0b3JlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6VHJhbnNsYXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5h
dGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVu
YXRlQ1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3RhdGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6YWNjdW11bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjphcHBseSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmFw
cGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRN
aXRlckxpbWl0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6YXBw
bHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdH
bHlwaHM6OkRyYXdHbHlwaHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdHbHlwaHM6OmdlbmVyYXRlR2x5cGhCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmFwcGx5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpjb21wdXRl
Qm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5
cGhzOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ltYWdlOjpEcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3VGlsZWRTY2FsZWRJbWFnZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2
ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmFwcGx5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdMaW5lOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6bG9j
YWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpsb2Nh
bEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0VsbGlwc2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6Omxv
Y2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmxvY2FsQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6YXBw
bHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aENvbG9yOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91
bmRlZFJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjphcHBseSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VS
ZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlUmVjdDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBz
ZTo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJh
bnNwYXJlbmN5TGF5ZXI6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjphcHBseSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6aXNHZW9tZXRyeUl0ZW0gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW06OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW06Okl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdl
b21ldHJ5SXRlbTo6c2V0RXh0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpH
ZW9tZXRyeUl0ZW06OmV4dGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2VvbWV0cnlJdGVtOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6R2VvbWV0cnlJdGVtOjpHZW9tZXRyeUl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkdyYXBoaWNzSXRlbTo6R3JhcGhpY3NJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpHcmFwaGljc0l0ZW06OmFyZ3VtZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHcmFwaGljc0l0ZW06OmFwcGx5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHcmFwaGljc0l0ZW06Oml0ZXJhcnRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXR0aW5nSXRlbTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXR0aW5nSXRlbTo6U2V0dGluZ0l0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpEcmF3aW5nSXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6cmVzdG9yZUluZGV4IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpzZXRSZXN0b3JlSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpzdWJHbHlwaEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6aXNTdGF0ZUl0ZW0gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmlzU3RhdGVJ
dGVtVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2lu
Z0l0ZW06OnNldEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd2luZ0l0ZW06OmV4dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6bG9jYWxCb3VuZHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6U2F2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpS
ZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJh
bnNsYXRlOjp4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpUcmFuc2xhdGU6OnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Um90YXRlOjphbmdsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphbW91bnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OnRyYW5z
Zm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0U3RhdGU6OlNldFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lQ2FwOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVDYXA6OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoQXJy
YXkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExp
bmVEYXNoOjpkYXNoT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpsaW5lSm9pbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNl
dExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRN
aXRlckxpbWl0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldE1pdGVyTGltaXQ6Om1pdGVyTGltaXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpD
bGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xp
cDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwOjpDbGlwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
T3V0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBPdXQ6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXQ6OkNsaXBPdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6cGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OnBh
dGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQ
YXRoOjp3aW5kUnVsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpibG9ja0xvY2F0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpzZXRCbG9ja0xvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjps
b2NhbEFuY2hvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0dseXBoczo6YW5jaG9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmdseXBocyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6aW1hZ2UgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6c291
cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
SW1hZ2U6OmRlc3RpbmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6aW1hZ2UgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpzb3VyY2Ug
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxl
ZEltYWdlOjpkZXN0aW5hdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OnRpbGVTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6c3BhY2luZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6c291cmNlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2Fs
ZWRJbWFnZTo6ZGVzdGluYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpk
ZXN0aW5hdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1BhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1BhdHRlcm46OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6cGF0dGVyblRyYW5zZm9ybSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OnRp
bGVSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3UGF0dGVybjo6ZGVzdFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpwaGFzZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OnNwYWNpbmcgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVn
aW5UcmFuc3BhcmVuY3lMYXllcjo6b3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5k
VHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6cmVj
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Jl
Y3Q6OmJvcmRlclRoaWNrbmVzcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1JlY3Q6OkRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6cG9pbnQxIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6cG9pbnQyIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6RHJhd0xpbmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRl
eHQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0xpbmVzRm9yVGV4dDo6c2V0QmxvY2tMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6YmxvY2tMb2NhdGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4
dDo6bG9jYWxBbmNob3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OnBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojp3aWR0aHMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6
OmlzUHJpbnRpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmRvdWJsZUxpbmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpEcmF3TGluZXNGb3JU
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZv
ckRvY3VtZW50TWFya2VyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OnBvaW50IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyOjp3aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlw
c2U6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OnBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpEcmF3UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6
OnBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdGb2N1c1JpbmdQYXRoOjp3aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNvbG9y
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9j
dXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OnJlY3RzIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUmVjdHM6OndpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpjb2xvciBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmlu
Z1JlY3RzOjpEcmF3Rm9jdXNSaW5nUmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9y
OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdFdpdGhDb2xvcjo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGll
bnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVu
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxDb21wb3NpdGVkUmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb2xvciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpj
b21wb3NpdGVPcGVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENv
bXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpyb3VuZGVkUmVjdCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpjb2xvciBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRS
ZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZTo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OnJvdW5kZWRIb2xlUmVjdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpw
YXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
UGF0aDo6RmlsbFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxFbGxpcHNlOjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6RmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6cmVjdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6bGlu
ZVdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VSZWN0OjpTdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OnBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6cmVj
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
RWxsaXBzZTo6U3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xlYXJSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpDbGVhclJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRl
cm46OkFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0ZXJuKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxl
RmFjdG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OnNjYWxlRmFjdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBs
eURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlcGxheWVyOjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwOgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lc0ZvclRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKwogMjAxOC0wNy0xNyAgQW50b2luZSBRdWlu
dCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gSW50ZXJw
b2xhdGlvbiBiZXR3ZWVuIGxlbmd0aHMgd2l0aCBhbiAiYXV0byIgdmFsdWUgc2hvdWxkIGJlIGRp
c2NyZXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IDZhNzkyNWJiZmE1OTMyZjg1NzM2MWFkYTMwY2NmMzg0ZDVlZjk0
YjUuLmY4MzZjNDc1OGNkMzNlMmZiZTgyN2JjNzJiMmQ3YzUyMmVmZmM4NTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTgtMDctMjAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxs
YXdhQGFwcGxlLmNvbT4KKworICAgICAgICBFbmFibGUgRGlzcGxheUxpc3QgcmVjb3JkaW5nIGZv
ciBTaGFyZWFibGVCaXRtYXA6OnBhaW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4Nzg0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpwYWludCk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMTgtMDctMTcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBUdXJuIG9uIFBTT04gaW4gV2ViS2l0VGVzdFJ1bm5lcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJkNjAyNTll
Yjk4ZjFlYWVhZDM5OWFmM2U5ZGNiZTg3NjUyMDRhNjkuLjQ3ZmNjZTRmMDU2MDM1NzllMjAyMDQ3
NjVkYWQ3NzgyN2YzYmZlMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTgzODUsNiArODM4NSw3IEBACiAJCTU1NUI4N0VCMUNB
QUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZURlY29kZXJDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTU3NkE1NjMxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VGcmFtZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1NTg0QTFBRDIxMDJERjk3MDA1QjcwRTEgLyogUmVuZGVyTGF5
ZXJDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVy
Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTk3RkNDQjIwNzZDMDY4
MDBEMzVCQjAgLyogR2x5cGhEaXNwbGF5TGlzdENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdseXBoRGlzcGxheUxpc3RDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlSW1hZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2lu
Z1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQmFja2luZ1N0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTkyNCw2ICsyNTkyNSw3IEBA
CiAJCQkJMEY1ODBDRkIwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICov
LAogCQkJCTBGNTgwQ0ZBMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwICovLAogCQkJCTBGNTgwQ0Y5MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCAqLywKKwkJCQk1NTg0QTFBRDIxMDJERjk3MDA1QjcwRTEgLyogUmVuZGVyTGF5ZXJD
b250ZXh0LmggKi8sCiAJCQkJNTBEMTBEOTcxNTQ1RjU3NjAwOTZEMjg4IC8qIFJlbmRlckxheWVy
RmlsdGVySW5mby5jcHAgKi8sCiAJCQkJNTBEMTBEOTgxNTQ1RjU3NjAwOTZEMjg4IC8qIFJlbmRl
ckxheWVyRmlsdGVySW5mby5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAvKiBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IGU5YWU2M2M0
OTgwZDUzOTI1MjIyZjQxOTU5NDgyZTk4MTQ1ZDc3ZTYuLjA1MDk1M2MwNWQ0YzI5MTkzMTU3ZGMz
NWRmN2QwMDNkNzRiNDRkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtNTU2LDcgKzU1Niw3IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgZmxvYXQgeCwgZmxvCiAgICAgICAgIH0KIAogICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmMpOwotICAgICAgICBjLT5jbGlwVG9JbWFnZUJ1ZmZl
cigqbWFza0ltYWdlLCBtYXNrUmVjdCk7CisgICAgICAgIGMtPmNsaXBUb0ltYWdlQnVmZmVyKG1h
c2tJbWFnZS0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSwgbWFza1JlY3Qs
IG1hc2tJbWFnZS0+c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShtYXNrUmVjdC5zaXplKCkpKTsKICAg
ICAgICAgZHJhd1N0eWxlLmFwcGx5RmlsbENvbG9yKCpjKTsKICAgICAgICAgYy0+ZmlsbFJlY3Qo
bWFza1JlY3QpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Db250cm9sU3RhdGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250cm9s
U3RhdGVzLmgKaW5kZXggMWRjZThiNzU4MDdmMGRkZjdjNWFiMWYxOWU3NTM5YmM3MjhkNjk3MS4u
ZmU5NmFmZGNiYWRiNDA1N2ZkNjEwNTI2MjIzZTk1ZjBkYmRlZjEwMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0NvbnRyb2xTdGF0ZXMuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaWZuZGVmIF9fT0JK
Q19fCkBAIC0xMDMsNiArMTA0LDEyIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKK2lubGluZSBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb250cm9sU3RhdGVz
JikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgQ29udHJvbFN0YXRlcyBtZW1iZXJzIHRvIHRo
ZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCmluZGV4IGY5ZTA1ZjU1Zjc1NjhhZWUyMWNhODQ5NjY0
YmMzZDZlNTdlMTFiZWYuLmRlMjhmMDI3NGQ2ZTNiMjQ0YjI4NzNjMGI5ZTc2YjdiMDgwOWExNzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcApAQCAtMTYzLDExICsxNjMsMTYg
QEAgdm9pZCBTY3JvbGxiYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCwgV2lkZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSB8fCAhZnJhbWVSZWN0KCkuaW50ZXJzZWN0
cyhkYW1hZ2VSZWN0KSkKKyAgICBpZiAoIWZyYW1lUmVjdCgpLmludGVyc2VjdHMoZGFtYWdlUmVj
dCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghdGhlbWUoKS5wYWludCgqdGhpcywgY29u
dGV4dCwgZGFtYWdlUmVjdCkpCi0gICAgICAgIFdpZGdldDo6cGFpbnQoY29udGV4dCwgZGFtYWdl
UmVjdCk7CisgICAgY29udGV4dC5kcmF3U2Nyb2xsYmFyKCp0aGlzLCBkYW1hZ2VSZWN0KTsKK30K
Kwordm9pZCBTY3JvbGxiYXI6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghdGhlbWUoKS5wYWludCgqdGhpcywg
Y29udGV4dCwgcmVjdCkpCisgICAgICAgIFdpZGdldDo6cGFpbnQoY29udGV4dCwgcmVjdCk7CiB9
CiAKIHZvaWQgU2Nyb2xsYmFyOjphdXRvc2Nyb2xsVGltZXJGaXJlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5oCmluZGV4IDYyZjUwNDRhODM5M2JlNjRlZWJiYzY0NzU0NzVlOGIyZTJk
NzIwMjQuLmMwZDQzMGFkM2RiMzM5OWU2ZTM3NWVmZThjMzc5ZWM3OGE3ZTAyN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCkBAIC04NCw2ICs4NCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFByZXNzZWRQb3MoaW50IHApIHsgbV9wcmVzc2VkUG9zID0gcDsgfQogCiAgICAgdm9p
ZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBXaWRn
ZXQ6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgPSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
OjpBbnlPcmlnaW4pIG92ZXJyaWRlOworICAgIHZvaWQgcGxhdGZvcm1QYWludChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2VuYWJsZWQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKTsKQEAg
LTE4Miw2ICsxODMsMTIgQEAgcHJpdmF0ZToKICAgICBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAoraW5saW5lIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjcm9sbGJhciYpCit7CisgICAgLy8gRklYTUU6
IGR1bXAgdGhlIFNjcm9sbGJhciBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVy
biB0czsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19XSURHRVQoU2Nyb2xsYmFyLCBpc1Njcm9sbGJhcigpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhlbWUuY3BwCmluZGV4IGMwYWYxOTJiMWQxNTI1YjA1YWQzYWY1ZmM4MDk0ODdjN2IyNjEwZTIu
LjY0YmI0Zjc4ZGJmODc0YTAxZmMxYjJjYzIxOGRmNTY3NzE5MDhlZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UaGVtZS5jcHAKQEAgLTU3LDcgKzU3LDEyIEBAIGJvb2wgVGhlbWU6OmNvbnRyb2xSZXF1
aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFRoZW1lOjpwYWludChDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBTY3JvbGxWaWV3KiwgZmxvYXQs
IGZsb2F0LCBib29sLCBib29sKQordm9pZCBUaGVtZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZs
b2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xs
VmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9v
bCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQoreworICAgIGNv
bnRleHQuZHJhd1RoZW1lKCp0aGlzLCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0
b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIHVzZVN5
c3RlbUFwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKK30KKwordm9pZCBUaGVtZTo6cGxh
dGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYs
IGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29s
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAppbmRleCBlOGNlYzM1ZDU5MTZiY2RlYjFk
ZTM5ODhhYTM2OWI1YmUyNDRlMDMyLi5kNjMyNTRiY2FmMzg0NmY3MjI1NTllZWVhMmU1Y2U3OTNh
OTQ1MWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJUaGVtZVR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNjgsNyArNjksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQpIGNvbnN0OwogCiAg
ICAgLy8gTWV0aG9kIGZvciBwYWludGluZyBhIGNvbnRyb2wuIFRoZSByZWN0IGlzIGluIHpvb21l
ZCBjb29yZGluYXRlcy4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQsIENvbnRy
b2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3Qs
IGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvciwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UpOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJv
bFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0
IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQg
cGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4
dCYsIENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRS
ZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURh
cmtBcHBlYXJhbmNlKTsKIAogICAgIC8vIFNvbWUgY29udHJvbHMgbWF5IHNwaWxsIG91dCBvZiB0
aGVpciBjb250YWluZXJzIChlLmcuLCB0aGUgY2hlY2sgb24gYW4gT1MgWCBjaGVja2JveCkuICBX
aGVuIHRoZXNlIGNvbnRyb2xzIHJlcGFpbnQsCiAgICAgLy8gdGhlIHRoZW1lIG5lZWRzIHRvIGNv
bW11bmljYXRlIHRoaXMgaW5mbGF0ZWQgcmVjdCB0byB0aGUgZW5naW5lIHNvIHRoYXQgaXQgY2Fu
IGludmFsaWRhdGUgdGhlIHdob2xlIGNvbnRyb2wuCkBAIC04OCw1ICs5MCwxMSBAQCBwcml2YXRl
OgogICAgIFRoZW1lKGNvbnN0IFRoZW1lJikgPSBkZWxldGU7CiAgICAgdm9pZCBvcGVyYXRvcj0o
Y29uc3QgVGhlbWUmKSA9IGRlbGV0ZTsKIH07CisgICAgCitpbmxpbmUgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVGhlbWUmKQoreworICAgIC8vIEZJWE1FOiBk
dW1wIHRoZSBUaGVtZSBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsK
K30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAppbmRl
eCBmMzFmMjQ1YTgwYmJkNzBhY2NlNjIxMTg1NDljZDJkNDAwYWMyMWYzLi45OWNkODNiZmNiMDYz
ZjVkZDEwMmFkNDQyMDBlNzM4YjJiZTNiZmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9XaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1R5cGVDYXN0cy5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgpAQCAtMTE0LDYgKzExNSw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNz
IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgeyBBbnlPcmlnaW4sIEFjY2Vzc2libGVPcmlnaW5P
bmx5IH07CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgPSBTZWN1
cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4pOworICAgIHZvaWQgcGxhdGZvcm1QYWlu
dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBpbnZhbGlkYXRl
KCkgeyBpbnZhbGlkYXRlUmVjdChib3VuZHNSZWN0KCkpOyB9CiAgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKSA9IDA7CiAKQEAgLTI0NCw2ICsyNDYsMTIgQEAg
aW5saW5lIHZvaWQgV2lkZ2V0OjpyZXRhaW5QbGF0Zm9ybVdpZGdldCgpCiAKICNlbmRpZgogCitp
bmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgV2lkZ2V0
JikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgV2lkZ2V0IG1lbWJlcnMgdG8gdGhlIFRleHRT
dHJlYW0uCisgICAgcmV0dXJuIHRzOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0lER0VUKFRvVmFsdWVUeXBlTmFtZSwg
cHJlZGljYXRlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXgg
NTJlZGJhZTk0NTM3ZmE3MjBkNDcxNGIxODFlZDI2ZjcyN2I2ZTJiZS4uNzE4NTk4NmIyMzBhMzUx
N2ZjZDZjYTk3ODU2YmIyZTYyOGY3YmNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtMzcwLDYgKzM3MSwxMiBAQCBBTFdB
WVNfSU5MSU5FIGZsb2F0IEZvbnQ6OndpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAg
ICAgcmV0dXJuIHdpZHRoOwogfQogCitpbmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZvbnQmKQoreworICAgIC8vIEZJWE1FOiBkdW1w
IHRoZSBGb250IG1lbWJlcnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBGb250X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCmluZGV4IDE3NTJkY2JkMDhl
OGY2Y2M3OTliZTQ1NjM3Y2NjZmNjNTJlNzhjM2MuLjQ1ZjE3ZmFjZDdiMGUxZGEyZjVjZmM5MTUw
ZWJiMmZkNWFmNjUzMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2x5cGhCdWZmZXIuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkdseXBoLmgiCiAjaW5j
bHVkZSA8Y2xpbWl0cz4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R0dlb21ldHJ5Lmg+CkBAIC0yMjgsNSArMjI5LDExIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAK
K2lubGluZSBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywg
Y29uc3QgR2x5cGhCdWZmZXImKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBHbHlwaEJ1ZmZl
ciBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KKwogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAppbmRleCBj
N2ZjNGM2ZTM2OTM4MGE1ZTlhNzczMTI0Zjc0MGE2M2ZkYjUxMDBiLi43YmZiZmZhNDdjZDI0MGVk
Nzc2YTExZTE5MjM2YmNkYzAwZGZjZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShDRykKIHR5cGVk
ZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVmOwpAQCAtMTU2LDQgKzE1NywxMCBAQCBw
cml2YXRlOgogICAgIFBsYXRmb3JtR3JhZGllbnQgbV9ncmFkaWVudDsKIH07CiAKK2lubGluZSBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3QgR3Jh
ZGllbnQmKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBHcmFkaWVudCBtZW1iZXJzIHRvIHRo
ZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggYzk3MzFh
YTUxOTQ4NjZjZjNmYmE1ZTAzM2NjMThkNzNjNTg2MzdmYS4uODVlZmI3NDAwYjJiZDczMGI3ZGZi
M2IxNDIzNDgzNWZhYjk5N2JiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMSwxMCArMzEsMTQgQEAKICNpbmNs
dWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0
LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1
ZGUgIlRoZW1lLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OTcsNiArODAxLDE3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnCiAgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RG
TW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0
aW9ucy5tX2NvbXBvc2l0ZU9wZXJhdG9yLCBpbWFnZVBhaW50aW5nT3B0aW9ucy5tX2JsZW5kTW9k
ZSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwtPmNsaXAocmVjdCk7CisgICAgZWxzZQorICAg
ICAgICBwbGF0Zm9ybUNsaXAocmVjdCk7Cit9CisgICAgCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTgyOSw2ICs4NDQsNTAgQEAgSW50UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAogICAgIHJldHVybiBJbnRSZWN0KCk7CiB9CiAj
ZW5kaWYKKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7CisgICAg
ZWxzZQorICAgICAgICBwbGF0Zm9ybUNsaXBPdXQocmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9p
bXBsLT5jbGlwT3V0KHBhdGgpOworICAgIGVsc2UKKyAgICAgICAgcGxhdGZvcm1DbGlwT3V0KHBh
dGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0
aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5jbGlwUGF0
aChwYXRoLCBjbGlwUnVsZSk7CisgICAgZWxzZQorICAgICAgICBwbGF0Zm9ybUNsaXBQYXRoKHBh
dGgsIGNsaXBSdWxlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVm
ZmVyKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRTaXplJiBidWZmZXJEZXN0aW5hdGlvblNpemUpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW1wbCkKKyAg
ICAgICAgbV9pbXBsLT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIGJ1ZmZlckRl
c3RpbmF0aW9uU2l6ZSk7CisgICAgZWxzZQorICAgICAgICBwbGF0Zm9ybUNsaXBUb0ltYWdlQnVm
ZmVyKGltYWdlLCBkZXN0UmVjdCwgYnVmZmVyRGVzdGluYXRpb25TaXplKTsKK30KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBt
b2RlKQogewpAQCAtODQzLDYgKzkwMiw1MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4
dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCiAgICAgc2V0UGxhdGZvcm1U
ZXh0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SWNv
bihJY29uJiBpY29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW1wbCkKKyAgICAgICAg
bV9pbXBsLT5kcmF3SWNvbihpY29uLCByZWN0KTsKKyAgICBlbHNlCisgICAgICAgIGljb24ucGxh
dGZvcm1QYWludCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
V2lkZ2V0KFdpZGdldCYgd2lkZ2V0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9pbXBs
KQorICAgICAgICBtX2ltcGwtPmRyYXdXaWRnZXQod2lkZ2V0LCByZWN0KTsKKyAgICBlbHNlCisg
ICAgICAgIHdpZGdldC5wbGF0Zm9ybVBhaW50KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGlmIChtX2ltcGwpCisgICAgICAgIG1faW1wbC0+ZHJhd1Njcm9sbGJh
cihzY3JvbGxiYXIsIHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsYmFyLnBsYXRmb3Jt
UGFpbnQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RoZW1l
KFRoZW1lJiB0aGVtZSwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBj
b25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9s
bFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJv
b2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pbXBs
KQorICAgICAgICBtX2ltcGwtPmRyYXdUaGVtZSh0aGVtZSwgcGFydCwgc3RhdGVzLCB6b29tZWRS
ZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxl
RmFjdG9yLCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSk7CisgICAgZWxz
ZQorICAgICAgICB0aGVtZS5wbGF0Zm9ybVBhaW50KCp0aGlzLCBwYXJ0LCBzdGF0ZXMsIHpvb21l
ZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2Nh
bGVGYWN0b3IsIHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
ZGllbnQmIGdyYWRpZW50KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC0xMTI5
LDYgKzEyMzIsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFz
KHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiAgICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250
cyhzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CiB9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6YXBwbHlTdGF0ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3Rh
dGUpCit7CisgICAgc3RhdGUuYXBwbHkoKnRoaXMpOworfQogCiBmbG9hdCBHcmFwaGljc0NvbnRl
eHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRo
KSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAppbmRleCBjY2MyZDAzZTdlYWYxZmJiZWMyYTEyMWY1ODM1OTRiNjkwMTRl
MTJjLi5jNDQxODlhYjI2YjczMTQ5ZTEzZTRhZGNjODNmM2QzYjgwYzEwNmE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAt
MjYsNiArMjYsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbnRyb2xTdGF0ZXMu
aCIKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgpAQCAtMzQsNiArMzUsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNp
bmNsdWRlICJUaGVtZVR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTgwLDE2ICs4MiwyMCBAQCBjb25zdCBpbnQgY01p
c3NwZWxsaW5nTGluZVBhdHRlcm5HYXBXaWR0aCA9IDE7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CiBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU7CitjbGFzcyBJY29uOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBj
bGFzcyBJbnRSZWN0OwotY2xhc3MgUm91bmRlZFJlY3Q7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKIGNsYXNzIFBhdGg7CitjbGFzcyBSb3VuZGVkUmVjdDsKK2NsYXNzIFNj
cm9sbGJhcjsKIGNsYXNzIFRleHRSdW47CitjbGFzcyBUaGVtZTsKIGNsYXNzIFRyYW5zZm9ybWF0
aW9uTWF0cml4OworY2xhc3MgVVJMOworY2xhc3MgV2lkZ2V0OwogCiBlbnVtIFRleHREcmF3aW5n
TW9kZSB7CiAgICAgVGV4dE1vZGVGaWxsID0gMSA8PCAwLApAQCAtMTE2LDYgKzEyMiwxMiBAQCBl
bnVtIGNsYXNzIERvY3VtZW50TWFya2VyTGluZVN0eWxlIDogdWludDhfdCB7CiAgICAgQXV0b2Nv
cnJlY3Rpb25SZXBsYWNlbWVudCwKICAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZXMKIH07CisgICAg
CitpbmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0
aGUgSW1hZ2VQYWludGluZ09wdGlvbnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRz
OworfQogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogY2xhc3MgUmVjb3JkZXI7CkBAIC0yMzMs
NiArMjQ1LDEyIEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9ucyB7CiAgICAgSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uIG1fb3JpZW50YXRpb25EZXNjcmlwdGlvbjsKICAgICBJbnRlcnBv
bGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRpb25RdWFsaXR5OwogfTsKKyAgICAKK2lubGluZSBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBJbWFnZVBhaW50
aW5nT3B0aW9ucyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CiAKIHN0cnVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UoKSA9IGRlZmF1bHQ7CkBAIC0yNTUsNyArMjczLDYgQEAgc3RydWN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlIHsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAKLQogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTMyNyw2ICszNDQsNyBA
QCBwdWJsaWM6CiAKICNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkgfHwgVVNFKENBSVJPKQog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdl
UHRyJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0
ZVNvdXJjZU92ZXIsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlv
biA9IEltYWdlT3JpZW50YXRpb24oKSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0
aXZlU2NhbGVkSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBmbG9hdCBzY2FsZUZhY3Rvciwg
Y29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpOwogI2Vu
ZGlmCiAKICNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKQEAgLTM5Nyw5ICs0MTUsMTAgQEAg
cHVibGljOgogICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
KTsKIAogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpOwogICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmKTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9
IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihjb25z
dCBOYXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwog
ICAgIAogICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OwogCkBAIC00MTIsNiArNDMxLDcg
QEAgcHVibGljOgogICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAK
ICAgICB2b2lkIGFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICB2
b2lkIGFwcGx5U3RhdGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsK
IAogICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgUm91bmRBbGxTaWRlcywKQEAgLTQ0
OCw2ICs0NjgsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29u
c3QgQ29sb3ImKTsKICNlbmRpZgogCisgICAgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZvaWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25z
dCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqLCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFw
cGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOworCiAgICAgdm9pZCBzZXRMaW5lQ2Fw
KExpbmVDYXApOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQg
ZGFzaE9mZnNldCk7CiAgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7CkBAIC00NjcsNyAr
NDkyLDYgQEAgcHVibGljOgogICAgIC8vIGltcGxlbWVudGF0aW9ucyB0byBoYW5kbGUgY2xpcHBp
bmcgb24gdGhlIGNhbnZhcyBkaWZmZXJlbnRseSBzaW5jZQogICAgIC8vIHRoZSBkaXNjaXBsaW5l
IGlzIGRpZmZlcmVudC4KICAgICB2b2lkIGNhbnZhc0NsaXAoY29uc3QgUGF0aCYsIFdpbmRSdWxl
ID0gV2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJik7CiAK
ICAgICB2b2lkIHNjYWxlKGZsb2F0IHMpCiAgICAgewpAQCAtNjI4LDYgKzY1MiwxMiBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKIAorICAgIHZvaWQgcGxhdGZvcm1DbGlwKGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIHZvaWQgcGxhdGZvcm1DbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZvaWQgcGxhdGZvcm1DbGlwT3V0KGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIHBsYXRmb3Jt
Q2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xpcFRv
SW1hZ2VCdWZmZXIoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFNpemUmKTsKKwogICAgIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBw
cmludGluZywgQ29sb3ImKTsKIAogICAgIGZsb2F0IGRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0
cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAppbmRleCA2YmNmNzY4YWRmZDg5ZWUw
YjE5NmEzZWE2MmVlMDY4MGM4YWQxOGVlLi40ZTI0OGEwYmJiMzM0YWNjODAzY2E2NzI2NmMyMDg2
NDdmMzNlMDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCkBAIC03MywxOCArNzMsMjYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxl
UnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiAjaWYgVVNFKENH
KSB8fCBVU0UoQ0FJUk8pCiAgICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25zdCBO
YXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
TmF0aXZlU2NhbGVkSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBmbG9hdCBzY2FsZUZhY3Rv
ciwgY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpID0g
MDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCkgPSAw
OwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
U3Ryb2tlU3R5bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyNpZiBVU0UoQ0cpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgm
KSA9IDA7CisjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIAorICAgIHZpcnR1
YWwgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xT
dGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZv
aWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVG
YWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkg
PSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJl
c3RvcmUoKSA9IDA7CkBAIC0xMDQsNyArMTEyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRz
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFNpemUmIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSkgPSAwOwogICAgIAogICAgIHZpcnR1
YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAppbmRleCA4NjBlYTY5NmZlYjQ4NWJhYmEzNGZlZmMw
NDFkMmVjMzg4NzM0YjgzLi5lMjVjYTg4ZWM4NDYxYWMwNjA1YTZkMjY3NWFhYWM1Y2M4YWNmZmJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEwICsyMSwxMiBA
QAogI2lmbmRlZiBJY29uX2gKICNkZWZpbmUgSWNvbl9oCiAKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShJT1Mp
CiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKQEAgLTQ4LDcgKzUwLDEyIEBAIHB1YmxpYzoKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIH5JY29uKCk7CiAKLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBjb250ZXh0
LmRyYXdJY29uKCp0aGlzLCByZWN0KTsKKyAgICB9CisKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICNpZiBQTEFURk9S
TShXSU4pCiAgICAgc3RhdGljIFJlZlB0cjxJY29uPiBjcmVhdGUoSElDT04gaEljb24pIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJY29uKGhJY29uKSk7IH0KQEAgLTc5LDYgKzg2LDEyIEBAIHByaXZh
dGU6CiAgICAgR2RrUGl4YnVmKiBtX2ljb247CiAjZW5kaWYKIH07CisgICAgCitpbmxpbmUgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSWNvbiYpCit7CisgICAg
Ly8gRklYTUU6IGR1bXAgdGhlIEljb24gbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICBy
ZXR1cm4gdHM7Cit9CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKaW5kZXggOTg3NTgwZTZiZGMzOTEyMzc3MDkyMWM1N2U3ZGM3ZGFiZDc0
YTE2NS4uYzdlNWI4ZDFiMTFlMGJhMjZjM2IyOGY4MTZlMGI3NDczM2RjNDliMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xMzQsMTAg
KzEzNCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKIAogcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCiAgICAgLy8gVGhlIHJldHVy
bmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91
IHdhbnQgdGhlIHNtYWxsZXIKICAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0LgotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUpIGNvbnN0OworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CisjaWYgVVNFKENH
KQogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNv
bnN0OwogI2VsaWYgVVNFKERJUkVDVDJEKQpAQCAtMTU2LDYgKzE1Niw5IEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwogICAgIGZyaWVuZCBjbGFz
cyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1h
Z2U7CisgICAgZnJpZW5kIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDsKKyAgICBmcmll
bmQgY2xhc3MgU2hhZG93Qmx1cjsKKyAgICBmcmllbmQgY2xhc3MgU1ZHUmVuZGVyaW5nQ29udGV4
dDsKIAogcHJpdmF0ZToKICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCBmZTA0OWE0Yjhl
NjcwM2Q2MWJjMWFkYjUwMDY4ODVmY2M3ZWQzZmE1Li5kYmQ0YzczMTg3YjdkMmFjMWRmMzY5YTFi
OTIzZjU0MzQ5NWM5YWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcApAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJh
d1NoYWRvd0J1ZmZlcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCkKICAgICAgICAg
Ly8gYnV0IHdlIG1heSBub3QgaGF2ZSBjbGVhcmVkIGl0IGFsbCwgc28gY2xpcCB0byB0aGUgZmls
bGVkIHBhcnQgZmlyc3QuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKEZsb2F0UmVjdCht
X2xheWVyT3JpZ2luLCBtX2xheWVyU2l6ZSkpOwogICAgIH0KLSAgICBncmFwaGljc0NvbnRleHQu
Y2xpcFRvSW1hZ2VCdWZmZXIoKm1fbGF5ZXJJbWFnZSwgRmxvYXRSZWN0KG1fbGF5ZXJPcmlnaW4s
IGJ1ZmZlclNpemUpKTsKKyAgICBncmFwaGljc0NvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXIobV9s
YXllckltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpLCBGbG9hdFJl
Y3QobV9sYXllck9yaWdpbiwgYnVmZmVyU2l6ZSksIG1fbGF5ZXJJbWFnZS0+c2l6ZUZvckRlc3Rp
bmF0aW9uU2l6ZShidWZmZXJTaXplKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xv
cihtX2NvbG9yKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDhjZmIxZTkyMjU3ZTQzMjUyNzA2YWVhNTQ1YjQy
NjM5NGZlOTlmZDYuLmZlZjI1YTY1N2RmZGVjNDhiYWRmNGUyZWU5YmViOGQxNmYwM2E3ZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTEzMyw2ICsxMzMsMjAgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1h
Z2UsIGNvbnN0IEZsb2F0U2kKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAg
Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgb3JpZW50YXRp
b24sIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIHN0YXRlLmFscGhhLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlU2NhbGVkSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBmbG9hdCBzY2Fs
ZUZhY3RvciwgY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2UpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1faW1wbCkgeworICAgICAgICBtX2ltcGwtPmRyYXdOYXRpdmVTY2FsZWRJbWFnZShp
bWFnZSwgc2NhbGVGYWN0b3IsIGRlc3RpbmF0aW9uLCBzb3VyY2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMsIHNv
IHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dzLgogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQpA
QCAtMjI4LDUxICsyNDIsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIENhaXJvOjpmaWxsUmVj
dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1DbGlwKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQorICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKICAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGlwKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpwbGF0Zm9ybUNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KKyAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7
CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcFBhdGgo
KnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ2xpcFRvSW1h
Z2VCdWZmZXIoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFNpemUmKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5j
bGlwVG9JbWFnZUJ1ZmZlcihidWZmZXIsIGRlc3RSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXIuY29weUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKKyAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CisgICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlmIChhdXRvIHN1
cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKLSAgICAgICAgQ2Fp
cm86OmNsaXBUb0ltYWdlQnVmZmVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwg
ZGVzdFJlY3QpOworICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqcGxhdGZvcm1Db250ZXh0
KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKIEludFJlY3QgR3JhcGhpY3NDb250ZXh0
OjpjbGlwQm91bmRzKCkgY29uc3QKQEAgLTMyMCw3ICszMTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lk
dGgsIGJvbwogICAgIGRyYXdMaW5lc0ZvclRleHQob3JpZ2luLCBEYXNoQXJyYXkgeyB3aWR0aCwg
MCB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJv
a2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMjksNyArMzE5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywg
cHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0cm9rZVRoaWNrbmVzcygpKTsKKyAgICAgICAg
bV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVV
bmRlcmxpbmVzLCBzdHJva2VTdHlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU4
NCwxNiArNTc0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0
aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCisgICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwogICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmNsaXBPdXQoKnBsYXRmb3JtQ29u
dGV4dCgpLCBwYXRoKTsKIH0KQEAgLTYyNiwxNiArNjA5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICBDYWlybzo6c2NhbGUoKnBsYXRm
b3JtQ29udGV4dCgpLCBzaXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ2xp
cE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KKyAgICBBU1NFUlQoIXBh
aW50aW5nRGlzYWJsZWQoKSk7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggZTA2ZTQwMzFkODc5ZDE5MDM2OWFhYzgz
ODc2ODA0OTg0YzY1YTdjZC4uMjViNTYxMjMyNzY5ZmU5Yzk1M2ZkOWJhYWRjZTk2OTY3ZTBmNWIx
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCkBAIC0yNzYsNiArMjc2
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoY29u
c3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zCiAgICAgQ2Fpcm86OmRyYXdOYXRpdmVJbWFn
ZShtX3BsYXRmb3JtQ29udGV4dCwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCBjb21w
b3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbiwgc3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd05hdGl2ZVNjYWxlZEltYWdl
KGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50
UmVjdCYpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KKwogdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpCkBAIC0yOTQsOSArMjk5LDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2kKICAgICBDYWlybzo6ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50
MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVu
ZGVybGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBT
dHJva2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Ryb2tlVGhpY2tu
ZXNzKTsKKyAgICBVTlVTRURfUEFSQU0oc3Ryb2tlU3R5bGUpOwogICAgIGF1dG8mIHN0YXRlID0g
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCht
X3BsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGlu
ZXMsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQpAQCAtMzEy
LDEwICszMTcsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1D
b250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRl
LnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBVTlVT
RURfUEFSQU0ob2Zmc2V0KTsKQEAgLTMyNyw2ICszMjgsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBmbG8KICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmlu
ZyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdHMsIHdpZHRoLCBjb2xvcik7CiB9CisgICAgCit2b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ljb24oSWNvbiYsIGNvbnN0IEZsb2F0UmVj
dCYpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KKyAgICAKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJl
Y3QmKQoreworICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAgCit2b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImLCBjb25z
dCBJbnRSZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorICAg
IAordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaGVtZShUaGVtZSYsIENvbnRy
b2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIHZvaWQqLCBm
bG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9Z
RVQoKTsKK30KIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNhdmUoKQogewpAQCAt
NDAzLDE0ICs0MjQsMTEgQEAgSW50UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBC
b3VuZHMoKQogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENsaXBCb3VuZHMobV9wbGF0Zm9y
bUNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBO
YXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0U2l6ZSYpCiB7Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsK
LQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0
LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CisgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVy
KG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKaW5kZXggOTk3Y2JkZGE1MWMzZjFjMGM1MmQ1
MGZjY2VhNGU1ODU5NWI4YTc5Yi4uMzcxM2U1MWYzMTMwMDk2OWQ3Y2QyNGQ3YWFkYmM3NDg2Yjgy
OGUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKQEAgLTc1LDE4ICs3NSwy
MyBAQCBwdWJsaWM6CiAgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAg
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxlLCBJ
bWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRy
YXdOYXRpdmVTY2FsZWRJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYsIGZsb2F0LCBjb25zdCBJ
bnRQb2ludCYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdQYXR0ZXJu
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwpIG92ZXJyaWRlOwogCiAgICAg
dm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFz
aEFycmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwg
U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwogCisgICAgdm9pZCBkcmF3SWNvbihJ
Y29uJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3V2lkZ2V0KFdp
ZGdldCYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdTY3JvbGxiYXIo
U2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1RoZW1l
KFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpv
b21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFy
YW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgb3ZlcnJpZGU7CisKICAgICB2b2lkIHNhdmUo
KSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKIApAQCAtMTA1LDcgKzEx
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKICAgICBJ
bnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlw
VG9JbWFnZUJ1ZmZlcihjb25zdCBOYXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgYnVmZmVyRGVzdGluYXRpb25TaXplKSBvdmVycmlkZTsK
ICAgICAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmluZGV4IDg5YTQxZjFmNTc4YWZmNmI3MmI2OWRlMjQ2NDdm
YjVlNzRlZjIwN2UuLmYyZWExOGQ2Y2ZkMTJmMGY2ZWU2ZDljMzg1OTBlNWFjMTc5ZTRjYmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCkBAIC0zMjQsNiArMzI0LDEyIEBAIEJhY2tpbmdTdG9yZUNv
cHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKICAgICByZXR1cm4gRG9udENvcHlC
YWNraW5nU3RvcmU7CiB9CiAKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgYXV0byBp
bWFnZSA9IGNvcHlJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIHJldHVybiBpbWFnZSA/IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIDogbnVsbHB0cjsKK30KKwogdm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5k
ZXggZDI5NTA3MTc4Y2IwMGU1NjlkZjFiMWM2NmI5OWZkYTc5YWQyNDdjZi4uYTJhMThjOTQ4Njky
YjU4MmU5MzlkNGI2NDJlYTc4MTIyYjlhN2Y0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMzkz
LDYgKzM5MywzNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKGNvbnN0
IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2UsIGNvbnN0CiAKICAgICBMT0dfV0lUSF9TVFJF
QU0oSW1hZ2VzLCBzdHJlYW0gPDwgIkdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlICIg
PDwgaW1hZ2UuZ2V0KCkgPDwgIiBzaXplICIgPDwgaW1hZ2VTaXplIDw8ICIgaW50byAiIDw8IGRl
c3RSZWN0IDw8ICIgdG9vayAiIDw8IChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSku
bWlsbGlzZWNvbmRzKCkgPDwgIm1zIik7CiB9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd05hdGl2ZVNjYWxlZEltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgZmxvYXQg
c2NhbGVGYWN0b3IsIGNvbnN0IEludFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYg
c291cmNlKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2ltcGwpIHsKKyAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlU2NhbGVkSW1h
Z2UoaW1hZ2UsIHNjYWxlRmFjdG9yLCBkZXN0aW5hdGlvbiwgc291cmNlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CisKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RNYWtlKGRlc3RpbmF0aW9uLngoKSwgZGVzdGluYXRp
b24ueSgpLCBzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpKSk7CisgICAgQ0dDb250ZXh0
U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOworCisgICAgQ0dGbG9hdCBpbWFnZUhlaWdodCA9IENH
SW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpIC8gc2NhbGVGYWN0b3I7CisgICAgQ0dGbG9hdCBp
bWFnZVdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSAvIHNjYWxlRmFjdG9yOwor
CisgICAgQ0dGbG9hdCBkZXN0WCA9IGRlc3RpbmF0aW9uLngoKSAtIHNvdXJjZS54KCk7CisgICAg
Q0dGbG9hdCBkZXN0WSA9IC1pbWFnZUhlaWdodCAtIGRlc3RpbmF0aW9uLnkoKSArIHNvdXJjZS55
KCk7CisKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0TWFrZShkZXN0WCwg
ZGVzdFksIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KSwgaW1hZ2UuZ2V0KCkpOworCisgICAgQ0dD
b250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKK30KIAogc3RhdGljIHZvaWQgZHJhd1BhdHRl
cm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKIHsKQEAgLTQ5OCwx
NCArNTI2LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ2xp
cFRvSW1hZ2VCdWZmZXIoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFNpemUmIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9h
dFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gYnVmZmVyLnNpemVGb3JEZXN0aW5hdGlvblNp
emUoZGVzdFJlY3Quc2l6ZSgpKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBi
dWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQogICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgLy8gRklYTUU6IFRoaXMg
aW1hZ2UgbmVlZHMgdG8gYmUgZ3JheXNjYWxlIHRvIGJlIHVzZWQgYXMgYW4gYWxwaGEgbWFzayBo
ZXJlLgogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBkZXN0UmVjdC54KCksIGRl
c3RSZWN0LnkoKSArIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7CkBAIC0xMDU3LDI5
ICsxMDc5LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0CiAgICAgc2V0RmlsbENvbG9yKG9s
ZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNsaXAoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsK
IAogICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAg
IG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ2xp
cE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKCFwYWlu
dGluZ0Rpc2FibGVkKCkpOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIENHUmVjdEluZmluaXRlIGlz
IG11Y2ggZmFzdGVyIHRoYW4gZ2V0dGluZyB0aGUgY2xpcCBib3VuZGluZyBib3guIEhvd2V2ZXIs
IGR1ZQogICAgIC8vIHRvIDxyZGFyOi8vcHJvYmxlbS8xMjU4NDQ5Mj4sIENHUmVjdEluZmluaXRl
IGNhbid0IGJlIHVzZWQgd2l0aCBhbiBhY2NlbGVyYXRlZCBjb250ZXh0IHRoYXQKQEAgLTEwOTMs
MTUgKzExMDMsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CiAKICAgICBDR0NvbnRleHRCZWdp
blBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENHQ29udGV4dEFkZFJlY3QocGxhdGZvcm1D
b250ZXh0KCksIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkp
OwpAQCAtMTExMCwxNSArMTExNCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNv
bnN0IFBhdGgmIHBhdGgpCiAgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CiAKICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKQEAg
LTE1ODcsNyArMTU4NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0
KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlVGhpY2tuZXNzKCkp
OworICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRp
bmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKaW5kZXggNDIxNmJhMGIxNmMyNzIyNWZmZWRhZGRmNmZlNzY4YjFiYzk0Y2IxYi4u
OTliZGZhYTlkZjUzZmMxYmQ4ZGZjOGI5ODczYTE1ODQwZDQ1YzE0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAg
LTMwOCw5ICszMDgsOSBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZgogI2VuZGlmCiB9CiAKLVJl
dGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6
OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKIHsK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1h
Z2U7CiAgICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewogICAgICAg
ICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewogICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0
b3JlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggYTQwZjg5Zjc2ODg1NGU4MDQ0OTJi
MGMxYTVjM2EwZmNiNmRlNzg2Zi4uYTZiZTFkYzJlNjdhOThkZDEzODc3MGZkYmYxZTMyYTIyNWQw
NWVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0xMTQsOCArMTE0LDggQEAgdm9p
ZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKIHNpemVfdCBEaXNwbGF5
TGlzdDo6c2l6ZUluQnl0ZXMoKSBjb25zdAogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAg
IGZvciAoYXV0byYgcmVmIDogbV9saXN0KQotICAgICAgICByZXN1bHQgKz0gSXRlbTo6c2l6ZUlu
Qnl0ZXMocmVmKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2xpc3QpCisgICAgICAgIHJlc3Vs
dCArPSBpdGVtLT5zaXplSW5CeXRlcygpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmgKaW5kZXggZDQ0MzdlM2Q0MWJlMTIyY2M4OTA2NTI0N2M5MjIyNmU3ODFk
Yzc3Yi4uZjg2MmI4NzhiNTA0YTBkNGUyZGRiODEwY2U4ZmZhODYyYmUwNGM1MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmgKQEAgLTQxLDggKzQxLDYgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBJdGVtOwotCiBlbnVtIEFzVGV4dEZs
YWcgewogICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAogICAgIEluY2x1
ZGVzUGxhdGZvcm1PcGVyYXRpb25zICAgICAgPSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKaW5kZXggMWZjZWU4YjM4NDM3MzAzNmQyM2YwOTExMmFiNjNlNzk2OTVl
YzA0My4uNzM0M2M3ZGU0NWQ0YjhjOGM1M2I4NWI1NzViYmZiMmE2ZWY4YmU0YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMTIxICsyNiw5MiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKIAotI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi0vLyBTaG91bGQgbWF0Y2gg
UmVuZGVyVGhlbWU6OnBsYXRmb3JtRm9jdXNSaW5nV2lkdGgoKQotc3RhdGljIGNvbnN0IGZsb2F0
IHBsYXRmb3JtRm9jdXNSaW5nV2lkdGggPSAzOwotCi0jaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAh
TE9HX0RJU0FCTEVECi1XVEY6OkNTdHJpbmcgSXRlbTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewot
ICAgIFRleHRTdHJlYW0gdHM7Ci0gICAgdHMgPDwgKnRoaXM7Ci0gICAgcmV0dXJuIHRzLnJlbGVh
c2UoKS51dGY4KCk7Ci19Ci0jZW5kaWYKLQotc2l6ZV90IEl0ZW06OnNpemVJbkJ5dGVzKGNvbnN0
IEl0ZW0mIGl0ZW0pCi17Ci0gICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRl
bVR5cGU6OlNhdmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2F2ZT4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8UmVzdG9yZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Um90YXRl
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2NhbGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFNldFN0YXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9p
bjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFy
U2hhZG93OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyU2hhZG93PihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxDbGlwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0
VG9QYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3R2x5cGhzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdHbHlwaHM+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RHJhd0ltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1RpbGVkSW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1RpbGVkSW1h
Z2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaXRlbSkp
OwotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRp
dmVJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TmF0aXZlSW1hZ2U+
KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1Jl
Y3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmVz
Rm9yVGV4dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1Bh
dGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbENv
bXBvc2l0ZWRSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSb3VuZGVkUmVjdD4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RmlsbFBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsRWxsaXBzZT4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
U3Ryb2tlUmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
U3Ryb2tlRWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8QXBwbHlTdHJva2VQYXR0ZXJuPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlG
aWxsUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxBcHBseUZpbGxQYXR0
ZXJuPihpdGVtKSk7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxl
RmFjdG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I+KGl0ZW0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Cit1c2luZyBJdGVtRGVzY3JpcHRv
ciA9IHN0cnVjdCB7CisgICAgU3RyaW5nIG5hbWU7CisgICAgVmVjdG9yPFN0cmluZz4gYXJndW1l
bnRzTmFtZXM7Cit9OworCitzdGF0aWMgY29uc3QgVmVjdG9yPEl0ZW1EZXNjcmlwdG9yPiYgaXRl
bXNEZXNjcmlwdG9ycygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxJdGVt
RGVzY3JpcHRvcj4+IGl0ZW1zRGVzY3JpcHRvcnMgPSBWZWN0b3I8SXRlbURlc2NyaXB0b3I+KHsK
KyAgICAgICAgeyAic2F2ZSIsIHsgfSB9LAorICAgICAgICB7ICJyZXN0b3JlIiwgeyB9IH0sCisg
ICAgICAgIHsgInNldC1zdGF0ZSIsIHsgInN0YXRlLWNoYW5nZSIgfSB9LAorICAgICAgICB7ICJ0
cmFuc2xhdGUiLCB7ICJ4IiwgInkiIH0gfSwKKyAgICAgICAgeyAicm90YXRlIiwgeyAiYW5nbGUi
IH0gfSwKKyAgICAgICAgeyAic2NhbGUiLCB7ICJzaXplIiB9IH0sCisgICAgICAgIHsgImNvbmNh
dGVuYXRlLWN0bSIsIHsgImN0bSIgfSB9LAorICAgICAgICB7ICJzZXQtbGluZS1jYXAiLCB7ICJs
aW5lLWNhcCIgfSB9LAorICAgICAgICB7ICJzZXQtbGluZS1kYXNoIiwgeyAiZGFzaC1hcnJheSIs
ICJkYXNoLW9mZnNldCIgfSB9LAorICAgICAgICB7ICJzZXQtbGluZS1qb2luIiwgeyAibGluZS1q
b2luIiB9IH0sCisgICAgICAgIHsgInNldC1taXRlci1saW1pdCIsIHsgIm1pdHJlLWxpbWl0IiB9
IH0sCisgICAgICAgIHsgImNsZWFyLXNoYWRvdyIsIHsgfSB9LAorICAgICAgICB7ICJjbGlwIiwg
eyAicmVjdCIgfSB9LAorICAgICAgICB7ICJjbGlwLW91dCIsIHsgInJlY3QiIH0gfSwKKyAgICAg
ICAgeyAiY2xpcC1vdXQtdG8tcGF0aCIsIHsgInBhdGgiIH0gfSwKKyAgICAgICAgeyAiY2xpcC1w
YXRoIiwgeyAicGF0aCIsICJ3aW5kLXJ1bGUiIH0gfSwKKyAgICAgICAgeyAiY2xpcC10by1pbWFn
ZS1idWZmZXIiLCB7ICJpbWFnZSIsICJkZXN0LXJlY3QiLCAiYnVmZmVyLWRlc3RpbmF0aW9uLXNp
emUiIH0gfSwKKyAgICAgICAgeyAiYXBwbHktc3Ryb2tlLXBhdHRlcm4iLCB7IH0gfSwKKyAgICAg
ICAgeyAiYXBwbHktZmlsbC1wYXR0ZXJuIiwgeyB9IH0sCisgICAgICAgIHsgImFwcGx5LWRldmlj
ZS1zY2FsZS1mYWN0b3IiLCB7ICJzY2FsZS1mYWN0b3IiIH0gfSwKKworICAgICAgICB7ICJiZWdp
bi10cmFuc3BhcmVuY3ktbGF5ZXIiLCB7ICJvcGFjaXR5IiB9IH0sCisgICAgICAgIHsgImVuZC10
cmFuc3BhcmVuY3ktbGF5ZXIiLCB7IH0gfSwKKyAgICAgICAgeyAiZHJhdy1nbHlwaHMiLCB7ICJm
b250IiwgImdseXBoLWJ1ZmZlciIsICJmcm9tIiwgIm51bS1nbHlwaHMiLCAicG9pbnQiLCAiZm9u
dC1zbW9vdGhpbmciIH0gfSwKKyAgICAgICAgeyAiZHJhdy1pbWFnZSIsIHsgImltYWdlIiwgImRl
c3QtcmVjdCIsICJzb3VyY2UtcmVjdCIsICJpbWFnZS1wYWludGluZy1vcHRpb25zIiB9IH0sCisg
ICAgICAgIHsgImRyYXctdGlsZWQtaW1hZ2UiLCB7ICJpbWFnZSIsICJkZXN0LXJlY3QiLCAic291
cmNlLXBvaW50IiwgInRpbGUtc2l6ZSIsICJzcGFjaW5nIiwgImltYWdlLXBhaW50aW5nLW9wdGlv
bnMiIH0gfSwKKyAgICAgICAgeyAiZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2UiLCB7ICJpbWFnZSIs
ICJkZXN0LXJlY3QiLCAic291cmNlLXJlY3QiLCAidGlsZS1zY2FsZWZhY3RvciIsICJoLXJ1bGUi
LCAidi1ydWxlIiwgImltYWdlLXBhaW50aW5nLW9wdGlvbnMiIH0gfSwKKyAgICAgICAgeyAiZHJh
dy1uYXRpdmUtaW1hZ2UiLCB7ICJpbWFnZSIsICJzZWxmLXNpemUiLCAiZGVzdC1yZWN0IiwgInNv
dXJjZS1yZWN0IiwgImNvbXBvc2l0ZS1vcGVyYXRvciIsICJibGVuZC1tb2RlIiwgImltYWdlLW9y
aWVudGF0aW9uIiB9IH0sCisgICAgICAgIHsgImRyYXctbmF0aXZlLXNjYWxlZC1pbWFnZSIsIHsg
ImltYWdlIiwgInNjYWxlLWZhY3RvciIsICJkZXN0LXBvaW50IiwgInNvdXJjZS1yZWN0IiB9IH0s
CisgICAgICAgIHsgImRyYXctcGF0dGVybiIsIHsgImltYWdlIiwgImRlc3QtcmVjdCIsICJ0aWxl
LXJlY3QiLCAicGF0dGVybi10cmFuc2Zvcm0iLCAicGhhc2UiLCAic3BhY2luZyIsICJjb21wb3Np
dGUtb3BlcmF0b3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAgICAgICB7ICJkcmF3LXJlY3QiLCB7
ICJyZWN0IiwgImJvcmRlci10aGlja25lc3MiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1saW5lIiwg
eyAicG9pbnQtMSIsICJwb2ludC0yIiB9IH0sCisgICAgICAgIHsgImRyYXctbGluZXMtZm9yLXRl
eHQiLCB7ICJwb2ludCIsICJ3aWR0aHMiLCAiaXMtcHJpbnRpbmciLCAiZG91YmxlLWxpbmVzIiwg
InN0cm9rZS1zdHlsZSIgfSB9LAorICAgICAgICB7ICJkcmF3LWxpbmUtZm9yLWRvY3VtZW50LW1h
cmtlciIsIHsgInBvaW50IiwgIndpZHRoIiwgImRvY3VtZW50LW1hcmtlci1saW5lLXN0eWxlIiB9
IH0sCisgICAgICAgIHsgImRyYXctZWxsaXBzZSIsIHsgInJlY3QiIH0gfSwKKyAgICAgICAgeyAi
ZHJhdy1wYXRoIiwgeyAicGF0aCIgfSB9LAorICAgICAgICB7ICJkcmF3LWZvY3VzLXJpbmctcGF0
aCIsIHsgInBhdGgiLCAid2lkdGgiLCAib2Zmc2V0IiwgImNvbG9yIiB9IH0sCisgICAgICAgIHsg
ImRyYXctZm9jdXMtcmluZy1yZWN0cyIsIHsgInJlY3RzIiwgIndpZHRoIiwgIm9mZnNldCIsICJj
b2xvciIgfSB9LAorICAgICAgICB7ICJkcmF3LWljb24iLCB7ICJpY29uIiwgInJlY3QiIH0gfSwK
KyAgICAgICAgeyAiZHJhdy13aWRnZXQiLCB7ICJ3aWRnZXQiLCAicmVjdCJ9IH0sCisgICAgICAg
IHsgImRyYXctc2Nyb2xsYmFyIiwgeyAic2Nyb2xsYmFyIiwgInJlY3QiIH0gfSwKKyAgICAgICAg
eyAiZHJhdy10aGVtZSIsIHsgInRoZW1lIiwgImNvbnRyb2wtcGFydCIsICJjb250cm9sLXN0YXRl
cyIsICJ6b29tZWQtcmVjdCIsICJ6b29tLWZhY3RvciIsICJzY3JvbGwtdmlldyIsICJkZXZpY2Ut
c2NhbGUtZmFjdG9yIiwgInBhZ2Utc2NhbGUtZmFjdG9yIiwgInVzZS1zeXN0ZW0tYXBwZWFyYW5j
ZSIsICJ1c2UtZGFyay1hcHBlYXJhbmNlIiB9IH0sCisgICAgICAgIHsgImZpbGwtcmVjdCIsIHsg
InJlY3QiIH0gfSwKKyAgICAgICAgeyAiZmlsbC1yZWN0LXdpdGgtY29sb3IiLCB7ICJyZWN0Iiwg
ImNvbG9yIiB9IH0sCisgICAgICAgIHsgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IiwgeyAicmVj
dCIsICJncmFkaWVudCIgfSB9LAorICAgICAgICB7ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCIsIHsg
InJlY3QiLCAiY29sb3IiLCAiY29tcG9zaXRlLW9wZXJhdG9yIiwgImJsZW5kLW1vZGUiIH0gfSwK
KyAgICAgICAgeyAiZmlsbC1yb3VuZGVkLXJlY3QiLCB7ICJyZWN0IiwgImNvbG9yIiwgImJsZW5k
LW1vZGUiIH0gfSwKKyAgICAgICAgeyAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIiwgeyAi
cmVjdCIsICJyb3VuZGVkLWhvbGUtcmVjdCIsICJjb2xvciIgfSB9LAorICAgICAgICB7ICJmaWxs
LXBhdGgiLCB7ICJwYXRoIiB9IH0sCisgICAgICAgIHsgImZpbGwtZWxsaXBzZSIsIHsgInJlY3Qi
IH0gfSwKKyAgICAgICAgeyAic3Ryb2tlLXJlY3QiLCB7ICJyZWN0IiwgImxpbmUtd2lkdGgiIH0g
fSwKKyAgICAgICAgeyAic3Ryb2tlLXBhdGgiLCB7ICJwYXRoIiB9IH0sCisgICAgICAgIHsgInN0
cm9rZS1lbGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7ICJjbGVhci1yZWN0IiwgeyAi
cmVjdCIgfSB9CisgICAgfSk7CisKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihJdGVt
VHlwZTo6TWF4KSA9PSBpdGVtc0Rlc2NyaXB0b3JzLmdldCgpLnNpemUoKSk7CisgICAgcmV0dXJu
IGl0ZW1zRGVzY3JpcHRvcnM7Cit9CisKK3N0YXRpYyBjb25zdCBJdGVtRGVzY3JpcHRvciYgaXRl
bURlc2NyaXB0b3IoSXRlbVR5cGUgaXRlbVR5cGUpCit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0
PHNpemVfdD4oaXRlbVR5cGUpIDwgaXRlbXNEZXNjcmlwdG9ycygpLnNpemUoKSk7CisgICAgcmV0
dXJuIGl0ZW1zRGVzY3JpcHRvcnMoKVtzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW1UeXBlKV07CiB9
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3aW5nSXRlbSYgaXRlbSkKLXsKLSAgICB0cy5zdGFydEdyb3VwKCk7Ci0gICAgdHMgPDwgImV4
dGVudCAiOwotICAgIGlmIChpdGVtLmV4dGVudEtub3duKCkpCi0gICAgICAgIHRzIDw8IGl0ZW0u
ZXh0ZW50KCk7Ci0gICAgZWxzZQotICAgICAgICB0cyA8PCAidW5rbm93biI7CiAgICAgCi0gICAg
dHMuZW5kR3JvdXAoKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2F2ZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2F2ZSgpOwotfQot
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2F2
ZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlc3RvcmUtaW5kZXgiLCBpdGVtLnJl
c3RvcmVJbmRleCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUmVzdG9yZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQucmVzdG9yZSgp
OwotfQotCi12b2lkIFRyYW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRl
bSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoIngiLCBpdGVtLngoKSk7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJ5IiwgaXRlbS55KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFJvdGF0
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQu
cm90YXRlKG1fYW5nbGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgUm90YXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YW5nbGUiLCBpdGVtLmFuZ2xlKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNjYWxl
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5z
Y2FsZShtX3NpemUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU2NhbGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzaXpl
IiwgaXRlbS5hbW91bnQoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLUNvbmNhdGVuYXRlQ1RN
OjpDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNKQotICAgICwgbV90cmFuc2Zvcm0odHJhbnNm
b3JtKQotewotfQotCi12b2lkIENvbmNhdGVuYXRlQ1RNOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5jb25jYXRDVE0obV90cmFuc2Zvcm0pOwot
fQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Q29uY2F0ZW5hdGVDVE0mIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjdG0iLCBpdGVt
LnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRTdGF0ZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIG1fc3RhdGUuYXBwbHko
Y29udGV4dCk7Ci19Ci0KLXZvaWQgU2V0U3RhdGU6OmFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBmbGFncykKLXsKLSAgICBtX3N0YXRlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKLX0KLQot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0
YXRlJiBzdGF0ZSkKLXsKLSAgICB0cyA8PCBzdGF0ZS5zdGF0ZSgpOwotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7Ci19Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBs
aW5lQ2FwKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1jYXAiLCBsaW5lQ2FwLmxpbmVD
YXAoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVEYXNoOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCht
X2Rhc2hBcnJheSwgbV9kYXNoT2Zmc2V0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFzaCkKLXsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImRhc2gtYXJyYXkiLCBsaW5lRGFzaC5kYXNoQXJyYXkoKSk7Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLW9mZnNldCIsIGxpbmVEYXNoLmRhc2hPZmZzZXQoKSk7
Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVKb2luOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lSm9pbihtX2xpbmVK
b2luKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFNldExpbmVKb2luJiBsaW5lSm9pbikKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxp
bmUtam9pbiIsIGxpbmVKb2luLmxpbmVKb2luKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7Ci19Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRNaXRlckxpbWl0
JiBtaXRlckxpbWl0KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibWl0cmUtbGltaXQiLCBtaXRl
ckxpbWl0Lm1pdGVyTGltaXQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENsZWFyU2hh
ZG93OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4
dC5jbGVhclNoYWRvdygpOwotfQotCi12b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKLX0KLQotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXAmIGl0ZW0p
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBDbGlwT3V0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgY29udGV4dC5jbGlwT3V0KG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0JiBpdGVtKQot
ewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLXZvaWQgQ2xpcE91dFRvUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY2xpcE91dChtX3BhdGgpOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dFRvUGF0
aCYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENsaXBQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5jbGlwUGF0aChtX3BhdGgsIG1fd2luZFJ1
bGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ2xpcFBhdGgmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRl
bS5wYXRoKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2luZC1ydWxlIiwgaXRlbS53aW5kUnVs
ZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLURyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYg
YmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5
cGhzKQotICAgICwgbV9mb250KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQotICAgICwgbV9ibG9j
a0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCi0gICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9y
KQotICAgICwgbV9zbW9vdGhpbmdNb2RlKHNtb290aGluZ01vZGUpCi17Ci0gICAgbV9nbHlwaHMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7Ci0gICAgbV9hZHZhbmNlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGNvdW50KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgewotICAgICAgICBtX2dseXBocy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhzW2ldKTsKLSAg
ICAgICAgbV9hZHZhbmNlcy51bmNoZWNrZWRBcHBlbmQoYWR2YW5jZXNbaV0pOwotICAgIH0KLSAg
ICBjb21wdXRlQm91bmRzKCk7Ci19Ci0KLWlubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpn
ZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3QKLXsKLSAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgewotICAgICAg
ICByZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLCAmbV9mb250LmdldCgpLCBtX2FkdmFuY2VzW2ldKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBEcmF3R2x5cGhzOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3R2x5cGhz
KG1fZm9udCwgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpLCAwLCBtX2dseXBocy5zaXplKCksIGFuY2hv
clBvaW50KCksIG1fc21vb3RoaW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoczo6Y29tcHV0
ZUJvdW5kcygpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgY29kZSBkb2Vzbid0IGFjdHVhbGx5IHRh
a2UgdGhlIGV4dGVudHMgb2YgdGhlIGdseXBocyBpbnRvIGNvbnNpZGVyYXRpb24uIEl0IGFzc3Vt
ZXMgdGhhdAotICAgIC8vIHRoZSBnbHlwaCBsaWVzIGVudGlyZWx5IHdpdGhpbiBpdHMgWyhhc2Nl
bnQgKyBkZXNjZW50KSwgYWR2YW5jZV0gcmVjdC4KLSAgICBmbG9hdCBhc2NlbnQgPSBtX2ZvbnQt
PmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKTsKLSAgICBmbG9hdCBkZXNjZW50ID0gbV9mb250
LT5mb250TWV0cmljcygpLmZsb2F0RGVzY2VudCgpOwotICAgIEZsb2F0UG9pbnQgY3VycmVudCA9
IHRvRmxvYXRQb2ludChsb2NhbEFuY2hvcigpKTsKLSAgICBzaXplX3QgbnVtR2x5cGhzID0gbV9n
bHlwaHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kp
IHsKLSAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UgPSBtX2FkdmFuY2VzW2ldOwot
ICAgICAgICBGbG9hdFJlY3QgZ2x5cGhSZWN0ID0gRmxvYXRSZWN0KGN1cnJlbnQueCgpLCBjdXJy
ZW50LnkoKSAtIGFzY2VudCwgYWR2YW5jZS53aWR0aCgpLCBhc2NlbnQgKyBkZXNjZW50KTsKLSAg
ICAgICAgbV9ib3VuZHMudW5pdGUoZ2x5cGhSZWN0KTsKLQotICAgICAgICBjdXJyZW50Lm1vdmUo
YWR2YW5jZS53aWR0aCgpLCBhZHZhbmNlLmhlaWdodCgpKTsKLSAgICB9Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdAorU3RyaW5nIEl0ZW06Om5hbWUoKSBjb25zdAogewotICAgIEZsb2F0UmVj
dCBsb2NhbEJvdW5kcyA9IG1fYm91bmRzOwotICAgIGxvY2FsQm91bmRzLm1vdmUobV9ibG9ja0xv
Y2F0aW9uLngoKSwgbV9ibG9ja0xvY2F0aW9uLnkoKSk7Ci0gICAgcmV0dXJuIGxvY2FsQm91bmRz
OworICAgIHJldHVybiBpdGVtRGVzY3JpcHRvcihtX3R5cGUpLm5hbWU7CiB9CiAKLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3R2x5cGhzJiBp
dGVtKQorU3RyaW5nIEl0ZW06OmFyZ3VtZW50TmFtZShzaXplX3QgaW5kZXgpIGNvbnN0CiB7Ci0g
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICAvLyBG
SVhNRTogZHVtcCBtb3JlIHN0dWZmLgotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRp
b24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1h
bmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5jaG9y
LXBvaW50IiwgaXRlbS5hbmNob3JQb2ludCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxlbmd0
aCIsIGl0ZW0uZ2x5cGhzKCkuc2l6ZSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotRHJhd0lt
YWdlOjpEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdJbWFn
ZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
KQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhp
bWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdJbWFnZShtX2lt
YWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9u
cyk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3SW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFn
ZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwot
ICAgIHJldHVybiB0czsKLX0KLQotRHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYg
c291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZSkKLSAgICAsIG1faW1hZ2Uo
aW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uo
c291cmNlKQotICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKLSAgICAsIG1fc3BhY2luZyhzcGFj
aW5nKQotICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykK
LXsKLX0KLQotdm9pZCBEcmF3VGlsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQoKSwg
bV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNpemUsIG1fc3BhY2luZywgbV9pbWFnZVBh
aW50aW5nT3B0aW9ucyk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRJbWFnZSYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
aW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXBvaW50
IiwgaXRlbS5zb3VyY2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVt
LmRlc3RpbmF0aW9uKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgidGlsZS1zaXplIiwgaXRlbS50
aWxlU2l6ZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNwYWNpbmciLCBpdGVtLnNwYWNpbmco
KSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1EcmF3VGlsZWRTY2FsZWRJbWFnZTo6RHJhd1RpbGVk
U2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3Is
IEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQot
ICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkK
LSAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRpbGVTY2FsZUZhY3RvcikKLSAgICAsIG1faFJ1bGUo
aFJ1bGUpCi0gICAgLCBtX3ZSdWxlKHZSdWxlKQotICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9u
cyhpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFn
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQu
ZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1f
dGlsZVNjYWxlRmFjdG9yLCBtX2hSdWxlLCBtX3ZSdWxlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25z
KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IERyYXdUaWxlZFNjYWxlZEltYWdlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIs
IGl0ZW0uaW1hZ2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0u
c291cmNlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5h
dGlvbigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykK
LURyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBp
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlKQotI2lmIFVTRShDRykKLSAgICAvLyBG
SVhNRTogTmVlZCB0byBzdG9yZSBhbiBpbWFnZSBmb3IgQ2Fpcm8uCi0gICAgLCBtX2ltYWdlKGlt
YWdlKQotI2VuZGlmCi0gICAgLCBtX2ltYWdlU2l6ZShpbWFnZVNpemUpCi0gICAgLCBtX2Rlc3Rp
bmF0aW9uKGRlc3RSZWN0KQotICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCi0jaWYgVVNFKENHKQot
ICAgICwgbV9vcChvcCkKLSAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSNlbmRpZgotICAg
ICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKLXsKLSNpZiAhVVNFKENHKQotICAgIFVOVVNF
RF9QQVJBTShpbWFnZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICBVTlVTRURfUEFSQU0o
YmxlbmRNb2RlKTsKLSNlbmRpZgotfQotCi12b2lkIERyYXdOYXRpdmVJbWFnZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotI2lmIFVTRShDRykKLSAgICBjb250ZXh0
LmRyYXdOYXRpdmVJbWFnZShtX2ltYWdlLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvbiwgbV9z
cmNSZWN0LCBtX29wLCBtX2JsZW5kTW9kZSwgbV9vcmllbnRhdGlvbik7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShjb250ZXh0KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQotewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgLy8g
RklYTUU6IGR1bXAgbW9yZSBzdHVmZi4KLSAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0
IiwgaXRlbS5zb3VyY2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVt
LmRlc3RpbmF0aW9uKCkpOwotICAgIHJldHVybiB0czsKLX0KLSNlbmRpZgotCi1EcmF3UGF0dGVy
bjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXR0ZXJuKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAg
ICAsIG1fcGF0dGVyblRyYW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtKQotICAgICwgbV90aWxlUmVj
dCh0aWxlUmVjdCkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3QpCi0gICAgLCBtX3BoYXNl
KHBoYXNlKQotICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCi0gICAgLCBtX29wKG9wKQotICAgICwg
bV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotewotfQotCi12b2lkIERyYXdQYXR0ZXJuOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3UGF0dGVy
bihtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3RpbGVSZWN0LCBtX3BhdHRlcm5UcmFu
c2Zvcm0sIG1fcGhhc2UsIG1fc3BhY2luZywgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdHRl
cm4mIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoInBhdHRlcm4tdHJhbnNmb3JtIiwgaXRlbS5wYXR0ZXJuVHJhbnNmb3Jt
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgidGlsZS1yZWN0IiwgaXRlbS50aWxlUmVjdCgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdFJlY3QoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJwaGFzZSIsIGl0ZW0ucGhhc2UoKSk7Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJzcGFjaW5nIiwgaXRlbS5zcGFjaW5nKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBEcmF3UmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAg
IGNvbnRleHQuZHJhd1JlY3QobV9yZWN0LCBtX2JvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UmVjdCYg
aXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1w
UHJvcGVydHkoImJvcmRlci10aGlja25lc3MiLCBpdGVtLmJvcmRlclRoaWNrbmVzcygpKTsKLSAg
ICByZXR1cm4gdHM7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3Qg
Ym91bmRzOwotICAgIGJvdW5kcy5maXRUb1BvaW50cyhtX3BvaW50MSwgbV9wb2ludDIpOwotICAg
IHJldHVybiBib3VuZHM7Ci19Ci0KLXZvaWQgRHJhd0xpbmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdMaW5lKG1fcG9pbnQxLCBtX3Bv
aW50Mik7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3TGluZSYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMSIsIGl0ZW0u
cG9pbnQxKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0ucG9pbnQyKCkp
OwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3TGluZXNGb3JU
ZXh0KHBvaW50KCksIG1fd2lkdGhzLCBtX3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKLX0KLQot
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVk
cyB0byByZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0Nv
bnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKSByZXR1
cm5zLgotCi0gICAgaWYgKCFtX3dpZHRocy5zaXplKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKLQotICAgIEZsb2F0UmVjdCByZXN1bHQocG9pbnQoKSwgRmxvYXRTaXplKG1fd2lkdGhz
Lmxhc3QoKSwgbV9zdHJva2VXaWR0aCkpOwotICAgIHJlc3VsdC5pbmZsYXRlKDEpOyAvLyBBY2Nv
dW50IGZvciBwaXhlbCBzbmFwcGluZy4gRklYTUU6IFRoaXMgaXNuJ3QgcGVyZmVjdCwgYXMgaXQg
ZG9lc24ndCB0YWtlIHRoZSBDVE0gaW50byBhY2NvdW50LgotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3TGluZXNGb3JUZXh0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIs
IGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hv
ciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludCIsIGl0
ZW0ucG9pbnQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkb3VibGUiLCBpdGVtLmRvdWJsZUxp
bmVzKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGhzIiwgaXRlbS53aWR0aHMoKSk7Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJpcy1wcmludGluZyIsIGl0ZW0uaXNQcmludGluZygpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImRvdWJsZSIsIGl0ZW0uZG91YmxlTGluZXMoKSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi12b2lkIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIobV9wb2ludCwgbV93aWR0aCwgbV9zdHlsZSk7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMg
dG8gcmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKCkgcmV0dXJucy4KLQotICAgIEZsb2F0UmVj
dCByZXN1bHQobV9wb2ludCwgRmxvYXRTaXplKG1fd2lkdGgsIGNNaXNzcGVsbGluZ0xpbmVUaGlj
a25lc3MpKTsKLSAgICByZXN1bHQuaW5mbGF0ZShjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKTsg
Ly8gQWNjb3VudCBmb3IgIm1pc3NwZWxsaW5nIGRvdCIgc25hcHBpbmcuCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXImIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
InBvaW50IiwgaXRlbS5wb2ludCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRl
bS53aWR0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd0VsbGlwc2U6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdFbGxp
cHNlKG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHko
InJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIERyYXdQYXRo
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0jaWYgVVNFKENHKQot
ICAgIGNvbnRleHQuZHJhd1BhdGgobV9wYXRoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNv
bnRleHQpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRo
IiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3BhdGgs
IG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IERyYXdGb2N1c1JpbmdQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdAotewotICAgIEZsb2F0UmVjdCByZXN1bHQgPSBtX3BhdGguZmFzdEJvdW5kaW5nUmVj
dCgpOwotICAgIHJlc3VsdC5pbmZsYXRlKHBsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotLy8gICAgdHMuZHVtcFByb3BlcnR5
KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZzZXQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJj
b2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIERyYXdGb2N1
c1JpbmdSZWN0czo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAg
IGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3JlY3RzLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xv
cik7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUmVjdHM6Omxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0
IHJlc3VsdDsKLSAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX3JlY3RzKQotICAgICAgICByZXN1bHQu
dW5pdGUocmVjdCk7Ci0gICAgcmVzdWx0LmluZmxhdGUocGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkKLXsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmVjdHMiLCBpdGVtLnJlY3RzKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lk
dGgiLCBpdGVtLndpZHRoKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5v
ZmZzZXQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCi12b2lkIEZpbGxSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJl
Y3QmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi12b2lkIEZpbGxSZWN0V2l0aENvbG9yOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29s
b3IpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRmlsbFJlY3RXaXRoQ29sb3ImIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBp
dGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7
Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdCht
X3JlY3QsIG1fZ3JhZGllbnQuZ2V0KCkpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0pCi17
Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICAv
LyBGSVhNRTogbG9nIGdyYWRpZW50LgotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0u
cmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxs
UmVjdChtX3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxlbmRNb2RlKTsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxDb21wb3NpdGVk
UmVjdCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChtX3JlY3Qs
IG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVkUmVjdCYgaXRlbSkKLXsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2Rl
IiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3JlY3QsIG1fcm91bmRlZEhv
bGVSZWN0LCBtX2NvbG9yKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiBpdGVtKQotewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicm91
bmRlZC1ob2xlLXJlY3QiLCBpdGVtLnJvdW5kZWRIb2xlUmVjdCgpKTsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQg
RmlsbFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LmZpbGxQYXRoKG1fcGF0aCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbEVs
bGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250
ZXh0LmZpbGxFbGxpcHNlKG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKLXsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VSZWN0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7Ci0gICAgYm91
bmRzLmV4cGFuZChtX2xpbmVXaWR0aCwgbV9saW5lV2lkdGgpOwotICAgIHJldHVybiBib3VuZHM7
Ci19Ci0KLXZvaWQgU3Ryb2tlUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQuc3Ryb2tlUmVjdChtX3JlY3QsIG1fbGluZVdpZHRoKTsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0
cm9rZVJlY3QmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLXdpZHRoIiwgaXRlbS5saW5lV2lkdGgoKSk7Ci0gICAg
cmV0dXJuIHRzOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUGF0aDo6bG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIC8v
IEZJWE1FOiBOZWVkIHRvIHRha2Ugc3Ryb2tlIHRoaWNrbmVzcyBpbnRvIGFjY291bnQgY29ycmVj
dGx5LCB2aWEgQ0dQYXRoQnlTdHJva2luZ1BhdGgoKS4KLSAgICBmbG9hdCBzdHJva2VUaGlja25l
c3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOwotCi0gICAgRmxvYXRSZWN0IGJvdW5kcyA9
IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKLSAgICBib3VuZHMuZXhwYW5kKHN0cm9rZVRoaWNrbmVz
cywgc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi12b2lkIFN0cm9r
ZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250
ZXh0LnN0cm9rZVBhdGgobV9wYXRoKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVBhdGgmIGl0ZW0pCi17Ci0gICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1zdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gU3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNv
bnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9yZWN0
OwotICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOwot
ICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLXZvaWQgU3Ryb2tlRWxsaXBzZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc3Ryb2tlRWxsaXBzZSht
X3JlY3QpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0
ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJSZWN0OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5jbGVhclJlY3Qo
bV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENsZWFyUmVjdCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0u
cmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXll
cjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQu
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX29wYWNpdHkpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQmVnaW5UcmFuc3BhcmVuY3lMYXll
ciYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BhY2l0eSIsIGl0ZW0ub3BhY2l0eSgpKTsKLSAg
ICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5j
eUxheWVyKCk7Ci19Ci0KLSNpZiBVU0UoQ0cpCi12b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuYXBwbHlT
dHJva2VQYXR0ZXJuKCk7Ci19Ci0KLXZvaWQgQXBwbHlGaWxsUGF0dGVybjo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuYXBwbHlGaWxsUGF0dGVy
bigpOwotfQotI2VuZGlmCi0KLXZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihtX3NjYWxlRmFjdG9yKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3ImIGl0ZW0p
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzY2FsZS1mYWN0b3IiLCBpdGVtLnNjYWxlRmFjdG9y
KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRzIDw8ICJzYXZlIjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogdHMgPDwgInJlc3RvcmUiOyBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHRzIDw8ICJ0cmFuc2xhdGUiOyBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpSb3RhdGU6IHRzIDw8ICJyb3RhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTY2FsZTogdHMgPDwgInNjYWxlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29u
Y2F0ZW5hdGVDVE06IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3RhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxpbmUtY2FwIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJzZXQtbGluZS1kYXNoIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRzIDw8ICJzZXQtbGluZS1qb2luIjsgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogdHMgPDwgInNldC1taXRlci1s
aW1pdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHRzIDw8ICJjbGlwIjsgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogdHMgPDwgImNsaXAtb3V0IjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDogdHMgPDwgImNsaXAtb3V0LXRvLXBh
dGgiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDogdHMgPDwgImNsaXAtcGF0
aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHRzIDw8ICJkcmF3LWds
eXBocyI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZTogdHMgPDwgImRyYXct
aW1hZ2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTogdHMgPDwg
ImRyYXctdGlsZWQtaW1hZ2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRT
Y2FsZWRJbWFnZTogdHMgPDwgImRyYXctdGlsZWQtc2NhbGVkLWltYWdlIjsgYnJlYWs7Ci0jaWYg
VVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdl
OiB0cyA8PCAiZHJhdy1uYXRpdmUtaW1hZ2UiOyBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdQYXR0ZXJuOiB0cyA8PCAiZHJhdy1wYXR0ZXJuIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHRzIDw8ICJkcmF3LXJlY3QiOyBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3TGluZTogdHMgPDwgImRyYXctbGluZSI7IGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHRzIDw8ICJkcmF3LWxpbmVzLWZvci10ZXh0Ijsg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjogdHMg
PDwgImRyYXctbGluZXMtZm9yLWRvY3VtZW50LW1hcmtlciI7IGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdFbGxpcHNlOiB0cyA8PCAiZHJhdy1lbGxpcHNlIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1BhdGg6IHRzIDw8ICJkcmF3LXBhdGgiOyBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogdHMgPDwgImRyYXctZm9jdXMtcmluZy1wYXRo
IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB0cyA8PCAi
ZHJhdy1mb2N1cy1yaW5nLXJlY3RzIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3Q6IHRzIDw8ICJmaWxsLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjogdHMgPDwgImZpbGwtcmVjdC13aXRoLWNvbG9yIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1n
cmFkaWVudCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDog
dHMgPDwgImZpbGwtY29tcG9zaXRlZC1yZWN0IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJvdW5kZWRSZWN0OiB0cyA8PCAiZmlsbC1yb3VuZGVkLXJlY3QiOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogdHMgPDwgImZpbGwtcmVjdC13
aXRoLXJvdW5kZWQtaG9sZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB0
cyA8PCAiZmlsbC1wYXRoIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6
IHRzIDw8ICJmaWxsLWVsbGlwc2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VS
ZWN0OiB0cyA8PCAic3Ryb2tlLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VQYXRoOiB0cyA8PCAic3Ryb2tlLXBhdGgiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VFbGxpcHNlOiB0cyA8PCAic3Ryb2tlLWVsbGlwc2UiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDbGVhclJlY3Q6IHRzIDw8ICJjbGVhci1yZWN0IjsgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjogdHMgPDwgImJlZ2luLXRyYW5zcGFyZW5j
eS1sYXllciI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OiB0cyA8PCAiZW5kLXRyYW5zcGFyZW5jeS1sYXllciI7IGJyZWFrOwotI2lmIFVTRShDRykKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHRzIDw8ICJhcHBseS1zdHJva2Ut
cGF0dGVybiI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHRz
IDw8ICJhcHBseS1maWxsLXBhdHRlcm4iOyBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6IHRzIDw8ICJhcHBseS1kZXZpY2Utc2NhbGUtZmFj
dG9yIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHRzIDw8ICJjbGVh
ci1zaGFkb3ciOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQotewotICAgIFRl
eHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwotICAgIHRzIDw8IGl0ZW0udHlwZSgpOwot
Ci0gICAgLy8gRklYTUU6IE1ha2UgYSBtYWNybyB3aGljaCB0YWtlcyBhIG1hY3JvIGZvciBhbGwg
dGhlc2UgZW51bWVyYXRpb24gc3dpdGNoZXMKLSAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2F2ZT4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxSb3RhdGU+KGl0
ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8U2NhbGU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29uY2F0ZW5h
dGVDVE0+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxTZXRMaW5lQ2FwPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZURhc2g6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVEYXNoPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0
TWl0ZXJMaW1pdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXA6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXA+KGl0ZW0pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlw
T3V0PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRv
UGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxDbGlwUGF0aD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdHbHlwaHM+KGl0ZW0p
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdJbWFnZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3
VGlsZWRJbWFnZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3VGlsZWRTY2Fs
ZWRJbWFnZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShDRykgfHwgVVNFKENBSVJP
KQotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJh
d1BhdHRlcm4+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1JlY3Q+KGl0ZW0pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd0xpbmU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3TGluZXNGb3JUZXh0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0
PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcj4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdF
bGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxsaXBzZT4oaXRlbSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxEcmF3UGF0aD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNS
aW5nUGF0aD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdG
b2N1c1JpbmdSZWN0czoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3Rz
PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZp
bGxSZWN0V2l0aEdyYWRpZW50PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsQ29t
cG9zaXRlZFJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUm91bmRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSb3VuZGVkUmVjdD4o
aXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUGF0aD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxG
aWxsRWxsaXBzZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZVJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlRWxs
aXBzZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pOwotICAgICAgICBi
cmVhazsKLQotICAgIC8vIEl0ZW1zIHdpdGggbm8gYWRkaXRpb25hbCBkYXRhLgotICAgIGNhc2Ug
SXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXI6Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoK
LSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotI2VuZGlmCi0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4g
dHM7CisgICAgQVNTRVJUKGluZGV4IDwgaXRlbURlc2NyaXB0b3IobV90eXBlKS5hcmd1bWVudHNO
YW1lcy5zaXplKCkpOworICAgIHJldHVybiBpdGVtRGVzY3JpcHRvcihtX3R5cGUpLmFyZ3VtZW50
c05hbWVzW2luZGV4XTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5k
ZXggZjAwZWE3ZTg1Y2IxY2Q1MjQ2OWJlMTU4OGQwMTFlODM4NDczYzEzYy4uNGNjMTg1NDQyYjE1
NGVjMmM1Zjg5NGVlOTkyZDU5YTY1Mzc1ZjRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMxLDMyICszMSwzMiBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkljb24u
aCIKICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUg
IlRoZW1lLmgiCisjaW5jbHVkZSAiVGhlbWVUeXBlcy5oIgorI2luY2x1ZGUgIldpZGdldC5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShDRykKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2VuZGlmCiAKLW5hbWVzcGFj
ZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7Ci0KIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAK
IGVudW0gY2xhc3MgSXRlbVR5cGUgewotICAgIFNhdmUsCisgICAgTWluID0gMCwKKyAgICBTYXZl
ID0gTWluLAogICAgIFJlc3RvcmUsCisgICAgU2V0U3RhdGUsCiAgICAgVHJhbnNsYXRlLAogICAg
IFJvdGF0ZSwKICAgICBTY2FsZSwKICAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRTdGF0ZSwK
ICAgICBTZXRMaW5lQ2FwLAogICAgIFNldExpbmVEYXNoLAogICAgIFNldExpbmVKb2luLApAQCAt
NjYsMTMgKzY2LDE5IEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgewogICAgIENsaXBPdXQsCiAgICAg
Q2xpcE91dFRvUGF0aCwKICAgICBDbGlwUGF0aCwKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlciwKKyAg
ICBBcHBseVN0cm9rZVBhdHRlcm4sCisgICAgQXBwbHlGaWxsUGF0dGVybiwKKyAgICBBcHBseURl
dmljZVNjYWxlRmFjdG9yLAorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllciwKKyAgICBFbmRU
cmFuc3BhcmVuY3lMYXllciwKICAgICBEcmF3R2x5cGhzLAogICAgIERyYXdJbWFnZSwKICAgICBE
cmF3VGlsZWRJbWFnZSwKICAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZSwKLSNpZiBVU0UoQ0cpIHx8
IFVTRShDQUlSTykKICAgICBEcmF3TmF0aXZlSW1hZ2UsCi0jZW5kaWYKKyAgICBEcmF3TmF0aXZl
U2NhbGVkSW1hZ2UsCiAgICAgRHJhd1BhdHRlcm4sCiAgICAgRHJhd1JlY3QsCiAgICAgRHJhd0xp
bmUsCkBAIC04Miw2ICs4OCwxMCBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIHsKICAgICBEcmF3UGF0
aCwKICAgICBEcmF3Rm9jdXNSaW5nUGF0aCwKICAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCisgICAg
RHJhd0ljb24sCisgICAgRHJhd1dpZGdldCwKKyAgICBEcmF3U2Nyb2xsYmFyLAorICAgIERyYXdU
aGVtZSwKICAgICBGaWxsUmVjdCwKICAgICBGaWxsUmVjdFdpdGhDb2xvciwKICAgICBGaWxsUmVj
dFdpdGhHcmFkaWVudCwKQEAgLTk0LDEyOTUgKzEwNCw5NjYgQEAgZW51bSBjbGFzcyBJdGVtVHlw
ZSB7CiAgICAgU3Ryb2tlUGF0aCwKICAgICBTdHJva2VFbGxpcHNlLAogICAgIENsZWFyUmVjdCwK
LSAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyLAotICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAot
I2lmIFVTRShDRykKLSAgICBBcHBseVN0cm9rZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90
IGJlIGEgcmVjb3JkZWQgaXRlbS4KLSAgICBBcHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hv
dWxkIG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0uCi0jZW5kaWYKLSAgICBBcHBseURldmljZVNjYWxl
RmFjdG9yLAorICAgIE1heAogfTsKIAogY2xhc3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0
ZW0+IHsKIHB1YmxpYzoKLSAgICBJdGVtKCkgPSBkZWxldGU7Ci0KLSAgICBJdGVtKEl0ZW1UeXBl
IHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgewotICAgIH0KLQogICAgIHZpcnR1
YWwgfkl0ZW0oKSA9IGRlZmF1bHQ7CiAKLSAgICBJdGVtVHlwZSB0eXBlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3R5cGU7Ci0gICAgfQotCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0ID0gMDsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0Rpc3BsYXlMaXN0SXRlbSA9IHRydWU7CisgICAgdmlydHVhbCBib29sIGlzR2VvbWV0cnlJ
dGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBzaXplSW5C
eXRlcygpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICAvLyBBIHN0YXRlIGl0ZW0gaXMgb25lIHBy
ZXNlcnZlZCBieSBTYXZlL1Jlc3RvcmUuCi0gICAgYm9vbCBpc1N0YXRlSXRlbSgpIGNvbnN0Cisg
ICAgdmlydHVhbCB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBpc1N0YXRlSXRlbVR5cGUobV90eXBlKTsKKyAgICAgICAgdHMgPDwgbmFt
ZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGlzU3RhdGVJdGVtVHlwZShJdGVtVHlwZSBp
dGVtVHlwZSkKKyAgICBJdGVtVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Cisg
ICAgV1RGOjpDU3RyaW5nIGR1bXAoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEl0ZW0oSXRl
bVR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKICAgICB7Ci0gICAgICAgIHN3aXRj
aCAoaXRlbVR5cGUpIHsKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFRyYW5zbGF0ZToKLSAgICAg
ICAgY2FzZSBJdGVtVHlwZTo6IFJvdGF0ZToKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNjYWxl
OgotICAgICAgICBjYXNlIEl0ZW1UeXBlOjogQ29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGNhc2Ug
SXRlbVR5cGU6OiBTZXRTdGF0ZToKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldExpbmVDYXA6
Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lRGFzaDoKLSAgICAgICAgY2FzZSBJdGVt
VHlwZTo6IFNldExpbmVKb2luOgotICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0TWl0ZXJMaW1p
dDoKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IENsZWFyU2hhZG93OgotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotI2lmICFkZWZpbmVkKE5E
RUJVRykgfHwgIUxPR19ESVNBQkxFRAotICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNv
bnN0OwotI2VuZGlmCi0gICAgc3RhdGljIHNpemVfdCBzaXplSW5CeXRlcyhjb25zdCBJdGVtJik7
CisgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICBTdHJpbmcgYXJndW1lbnROYW1lKHNpemVf
dCBpbmRleCkgY29uc3Q7CiAKLXByaXZhdGU6CiAgICAgSXRlbVR5cGUgbV90eXBlOwogfTsKIAot
Y2xhc3MgRHJhd2luZ0l0ZW0gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBHZW9tZXRyeUl0ZW0gOiBw
dWJsaWMgSXRlbSB7CiBwdWJsaWM6Ci0gICAgRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKLSAg
ICAgICAgOiBJdGVtKHR5cGUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgc2V0RXh0ZW50KGNv
bnN0IEZsb2F0UmVjdCYgcikgeyBtX2V4dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJlY3Qm
IGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KLQogICAgIGJvb2wg
ZXh0ZW50S25vd24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVudCk7
IH0KIAotICAgIC8vIFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBpbiBs
b2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0cmFu
c2Zvcm0sIHNoYWRvdyBldGMgaW4gdGhlIHN0YXRlLgotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgaXNEcmF3aW5nSXRl
bSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGluYXRlcywgdGFraW5nIHNoYWRv
d3MgYW5kIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgotfTsKLQotY2xhc3MgU2F2ZSA6IHB1Ymxp
YyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNhdmU+IGNyZWF0ZSgpCisgICAgdm9p
ZCBzZXRFeHRlbnQoY29uc3QgRmxvYXRSZWN0JiBleHRlbnQpIHsgbV9leHRlbnQgPSBleHRlbnQ7
IH0KKyAgICBjb25zdCBGbG9hdFJlY3QgZXh0ZW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNhdmUpOworICAgICAgICByZXR1cm4gbV9leHRlbnQudmFsdWVf
b3IoRmxvYXRSZWN0KCkpOwogICAgIH0KIAotICAgIC8vIEluZGV4IGluIHRoZSBkaXNwbGF5IGxp
c3Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcgUmVzdG9yZSBpdGVtLiAwIGlmIHVubWF0Y2hlZC4KLSAg
ICBzaXplX3QgcmVzdG9yZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9yZXN0b3JlSW5kZXg7IH0K
LSAgICB2b2lkIHNldFJlc3RvcmVJbmRleChzaXplX3QgaW5kZXgpIHsgbV9yZXN0b3JlSW5kZXgg
PSBpbmRleDsgfQotCi1wcml2YXRlOgotICAgIFNhdmUoKQotICAgICAgICA6IEl0ZW0oSXRlbVR5
cGU6OlNhdmUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
c3RkOjpudWxsb3B0OyB9CiAgICAgCi0gICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4IHsgMCB9Owot
fTsKLQotY2xhc3MgUmVzdG9yZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFJlc3RvcmU+IGNyZWF0ZSgpCitwcm90ZWN0ZWQ6CisgICAgR2VvbWV0cnlJdGVtKEl0ZW1U
eXBlIHR5cGUpCisgICAgICAgIDogSXRlbSh0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUmVzdG9yZSk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIFJlc3RvcmUoKQot
ICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlJlc3RvcmUpCisgICAgdm9pZCBkdW1wKFdURjo6VGV4
dFN0cmVhbSYgdHMpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBJdGVtOjpkdW1wKHRz
KTsKKyAgICAgICAgdHMuc3RhcnRHcm91cCgpOworICAgICAgICB0cyA8PCAiZXh0ZW50ICI7Cisg
ICAgICAgIGlmIChleHRlbnRLbm93bigpKQorICAgICAgICAgICAgdHMgPDwgZXh0ZW50KCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRzIDw8ICJ1bmtub3duIjsKKyAgICAgICAgdHMuZW5k
R3JvdXAoKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsKIH07CiAK
LWNsYXNzIFRyYW5zbGF0ZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFRyYW5zbGF0ZT4gY3JlYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QXBwbGllciwgQXBwbGllciBhcHBsaWVyLCBjbGFzcy4uLiBBcmd1bWVudHM+CitjbGFzcyBHcmFw
aGljc0l0ZW0geworcHJvdGVjdGVkOgorICAgIEdyYXBoaWNzSXRlbShBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgICAgICA6IG1fYXJndW1lbnRzKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2xh
dGUoeCwgeSkpOwogICAgIH0KIAotICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0K
LSAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLXByaXZhdGU6Ci0gICAgVHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6VHJhbnNs
YXRlKQotICAgICAgICAsIG1feCh4KQotICAgICAgICAsIG1feSh5KQorICAgIHRlbXBsYXRlPCBz
dGQ6OnNpemVfdCBJPgorICAgIGNvbnN0IGF1dG8mIGFyZ3VtZW50KCkgY29uc3QKICAgICB7Cisg
ICAgICAgIHJldHVybiBzdGQ6OmdldDxJPihtX2FyZ3VtZW50cyk7CiAgICAgfQogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1f
eDsKLSAgICBmbG9hdCBtX3k7Ci19OwotCi1jbGFzcyBSb3RhdGUgOiBwdWJsaWMgSXRlbSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSb3RhdGU+IGNyZWF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cykKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOwor
ICAgICAgICBhcHBseShjb250ZXh0LCBzdGQ6OmluZGV4X3NlcXVlbmNlX2ZvcjxBcmd1bWVudHMu
Li4+KCkpOwogICAgIH0KIAotICAgIGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmds
ZTsgfQotCi1wcml2YXRlOgotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICAgICAgOiBJdGVt
KEl0ZW1UeXBlOjpSb3RhdGUpCi0gICAgICAgICwgbV9hbmdsZShhbmdsZSkKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGl0ZXJhcnRlKEZ1bmN0b3ImJiBmdW5jdG9y
KSBjb25zdAogICAgIHsKKyAgICAgICAgaXRlcmFydGUoV1RGTW92ZShmdW5jdG9yKSwgc3RkOjpp
bmRleF9zZXF1ZW5jZV9mb3I8QXJndW1lbnRzLi4uPigpKTsKICAgICB9CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZmxvYXQgbV9hbmds
ZTsgLy8gSW4gcmFkaWFucy4KLX07Ci0KLWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUp
Citwcml2YXRlOgorICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90Li4uIEluZGljZXM+CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SW5k
aWNlcy4uLj4pIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY2Fs
ZShzaXplKSk7CisgICAgICAgIChjb250ZXh0LiphcHBsaWVyKShzdGQ6OmdldDxJbmRpY2VzPiht
X2FyZ3VtZW50cykuLi4pOwogICAgIH0KIAotICAgIGNvbnN0IEZsb2F0U2l6ZSYgYW1vdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLXByaXZhdGU6Ci0gICAgU2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNjYWxlKQotICAgICAgICAs
IG1fc2l6ZShzaXplKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHN0ZDo6c2l6ZV90
Li4uIEluZGljZXM+CisgICAgdm9pZCBpdGVyYXJ0ZShGdW5jdG9yJiYgZnVuY3Rvciwgc3RkOjpp
bmRleF9zZXF1ZW5jZTxJbmRpY2VzLi4uPikgY29uc3QKICAgICB7CisgICAgICAgIHVzaW5nIHN3
YWxsb3cgPSBpbnRbXTsKKyAgICAgICAgKHZvaWQpc3dhbGxvdyB7IDEsIChmdW5jdG9yKEluZGlj
ZXMsIHN0ZDo6Z2V0PEluZGljZXM+KG1fYXJndW1lbnRzKSksIGludCB7IH0pLi4uIH07CiAgICAg
fQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIEZsb2F0U2l6ZSBtX3NpemU7CisgICAgc3RkOjp0dXBsZTxBcmd1bWVudHMuLi4+IG1fYXJn
dW1lbnRzOwogfTsKIAotY2xhc3MgQ29uY2F0ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7Cit0ZW1w
bGF0ZSA8SXRlbVR5cGUgaXRlbVR5cGUsIHR5cGVuYW1lIEFwcGxpZXIsIEFwcGxpZXIgYXBwbGll
ciwgY2xhc3MuLi4gQXJndW1lbnRzPgorY2xhc3MgU2V0dGluZ0l0ZW0gOiBwdWJsaWMgSXRlbSwg
cHVibGljIEdyYXBoaWNzSXRlbTxBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+ICB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb25jYXRlbmF0ZUNUTT4gY3JlYXRlKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgbWF0cml4KQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb25j
YXRlbmF0ZUNUTShtYXRyaXgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGlu
Z0l0ZW0oYXJndW1lbnRzLi4uKSk7CiAgICAgfQogCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi1wcml2YXRlOgot
ICAgIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KLWNsYXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0gewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IGZsYWdzKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlZjxJdGVtPiBj
cmVhdGUoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNldFN0YXRlKHN0YXRlLCBmbGFncykpOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZjxTZWxmLCBUPjo6dmFsdWUsICJUaGlzIGZ1bmN0aW9uIHNob3VsZCBj
cmVhdGUgY2xhc3NlcyBmcm9tIFNldHRpbmdJdGVtLiIpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKICAgICB9
Ci0gICAgCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotCi0gICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
OwogCi0gICAgdm9pZCBhY2N1bXVsYXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJikgY29uc3Q7Cisg
ICAgdXNpbmcgR3JhcGhpY3NJdGVtQmFzZSA9IEdyYXBoaWNzSXRlbTxBcHBsaWVyLCBhcHBsaWVy
LCBBcmd1bWVudHMuLi4+OwogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlTdGF0ZShHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMo
V1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci1wcml2YXRlOgotICAgIFNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUp
Ci0gICAgICAgICwgbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCisgICAgU2V0dGluZ0l0ZW0oQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBJdGVtKGl0ZW1UeXBlKQorICAgICAgICAsIEdy
YXBoaWNzSXRlbUJhc2Uoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikKICAg
ICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGU7Ci19OwotCi1j
bGFzcyBTZXRMaW5lQ2FwIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
U2V0TGluZUNhcD4gY3JlYXRlKExpbmVDYXAgbGluZUNhcCkKKyAgICB2b2lkIGR1bXAoV1RGOjpU
ZXh0U3RyZWFtJiB0cykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNldExpbmVDYXAobGluZUNhcCkpOworICAgICAgICBJdGVtOjpkdW1wKHRzKTsK
KyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6aXRlcmFydGUoW3RoaXMsICZ0c10oc2l6ZV90IGlu
ZGV4LCBjb25zdCBhdXRvJiBhcmd1bWVudFZhbHVlKSB7CisgICAgICAgICAgICB0cy5kdW1wUHJv
cGVydHkodGhpcy0+YXJndW1lbnROYW1lKGluZGV4KSwgYXJndW1lbnRWYWx1ZSk7CisgICAgICAg
IH0pOwogICAgIH0KLSAgICAKLSAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBt
X2xpbmVDYXA7IH0KIAogcHJpdmF0ZToKLSAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkK
LSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lQ2FwKQotICAgICAgICAsIG1fbGluZUNh
cChsaW5lQ2FwKQorICAgIHVzaW5nIFNlbGYgPSBTZXR0aW5nSXRlbTxpdGVtVHlwZSwgQXBwbGll
ciwgYXBwbGllciwgQXJndW1lbnRzLi4uPjsKKworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgR3JhcGhpY3NJdGVt
QmFzZTo6YXBwbHkoY29udGV4dCk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIExpbmVDYXAgbV9saW5lQ2FwOworICAgIHNp
emVfdCBzaXplSW5CeXRlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHNpemVvZigqdGhpcyk7
IH0KIH07CiAKLWNsYXNzIFNldExpbmVEYXNoIDogcHVibGljIEl0ZW0gewordGVtcGxhdGUgPEl0
ZW1UeXBlIGl0ZW1UeXBlLCB0eXBlbmFtZSBBcHBsaWVyLCBBcHBsaWVyIGFwcGxpZXIsIGNsYXNz
Li4uIEFyZ3VtZW50cz4KK2NsYXNzIERyYXdpbmdJdGVtIDogcHVibGljIEdlb21ldHJ5SXRlbSwg
cHVibGljIEdyYXBoaWNzSXRlbTxBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+ICB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lRGFzaD4gY3JlYXRlKGNvbnN0IERhc2hBcnJh
eSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3Jl
YXRlKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRHJhd2luZ0l0ZW0oc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJn
dW1lbnRzKS4uLikpOwogICAgIH0KIAotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkg
Y29uc3QgeyByZXR1cm4gbV9kYXNoQXJyYXk7IH0KLSAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9kYXNoT2Zmc2V0OyB9Ci0KLXByaXZhdGU6Ci0gICAgU2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgICAgIDog
SXRlbShJdGVtVHlwZTo6U2V0TGluZURhc2gpCi0gICAgICAgICwgbV9kYXNoQXJyYXkoZGFzaEFy
cmF5KQotICAgICAgICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlZjxJdGVtPiBjcmVhdGUoQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKICAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPFNlbGYs
IFQ+Ojp2YWx1ZSwgIlRoaXMgZnVuY3Rpb24gc2hvdWxkIGNyZWF0ZSBjbGFzc2VzIGZyb20gRHJh
d2luZ0l0ZW0uIik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFQoc3RkOjpmb3J3YXJk
PEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdXNpbmcgR3JhcGhpY3NJdGVtQmFz
ZSA9IEdyYXBoaWNzSXRlbTxBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+OwogCi0gICAg
RGFzaEFycmF5IG1fZGFzaEFycmF5OwotICAgIGZsb2F0IG1fZGFzaE9mZnNldDsKLX07CisgICAg
Ly8gU2hvdWxkIG1hdGNoIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKCkKKyAg
ICBjb25zdGV4cHIgc3RhdGljIGZsb2F0IGNvbnN0IHNfcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9
IDM7CiAKLWNsYXNzIFNldExpbmVKb2luIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8U2V0TGluZUpvaW4+IGNyZWF0ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICBEcmF3
aW5nSXRlbShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IEdlb21ldHJ5SXRlbShp
dGVtVHlwZSkKKyAgICAgICAgLCBHcmFwaGljc0l0ZW1CYXNlKHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
ZXRMaW5lSm9pbihsaW5lSm9pbikpOwogICAgIH0KLSAgICAKLSAgICBMaW5lSm9pbiBsaW5lSm9p
bigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KIAogcHJpdmF0ZToKLSAgICBTZXRMaW5l
Sm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5l
Sm9pbikKLSAgICAgICAgLCBtX2xpbmVKb2luKGxpbmVKb2luKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTGlu
ZUpvaW4gbV9saW5lSm9pbjsKLX07CisgICAgdXNpbmcgU2VsZiA9IERyYXdpbmdJdGVtPGl0ZW1U
eXBlLCBBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+OwogCi1jbGFzcyBTZXRNaXRlckxp
bWl0IDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TWl0ZXJMaW1p
dD4gY3JlYXRlKGZsb2F0IGxpbWl0KQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2V0TWl0ZXJMaW1pdChsaW1pdCkpOworICAgICAgICBHcmFwaGljc0l0ZW1CYXNlOjphcHBs
eShjb250ZXh0KTsKICAgICB9CiAKLSAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1
cm4gbV9taXRlckxpbWl0OyB9CisgICAgYm9vbCBpc0dlb21ldHJ5SXRlbSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBzaXplb2YoKnRoaXMpOyB9CiAKLXByaXZhdGU6Ci0gICAgU2V0TWl0ZXJM
aW1pdChmbG9hdCBtaXRlckxpbWl0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQpCi0gICAgICAgICwgbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCisgICAgdm9pZCBkdW1w
KFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBHZW9t
ZXRyeUl0ZW06OmR1bXAodHMpOworICAgICAgICBHcmFwaGljc0l0ZW1CYXNlOjppdGVyYXJ0ZShb
dGhpcywgJnRzXShzaXplX3QgaW5kZXgsIGNvbnN0IGF1dG8mIGFyZ3VtZW50VmFsdWUpIHsKKyAg
ICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSh0aGlzLT5hcmd1bWVudE5hbWUoaW5kZXgpLCBhcmd1
bWVudFZhbHVlKTsKKyAgICAgICAgfSk7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKIH07
CiAKLWNsYXNzIENsZWFyU2hhZG93IDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDbGVhclNoYWRvdyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENsZWFyU2hhZG93
KCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKLSAgICB7Ci0gICAgfQot
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLX07Cit1
c2luZyBTYXZlQmFzZSA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpTYXZlLAorICAgIHZv
aWQgKEdyYXBoaWNzQ29udGV4dDo6KikoKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzYXZlCis+
OwogCi0vLyBGSVhNRTogdHJlYXQgYXMgRHJhd2luZ0l0ZW0/Ci1jbGFzcyBDbGlwIDogcHVibGlj
IEl0ZW0geworY2xhc3MgU2F2ZSA6IHB1YmxpYyBTYXZlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxDbGlwPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcChyZWN0KSk7Ci0gICAgfQorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTYXZlQmFzZTo6Y3JlYXRlPFNhdmU+OwogCi0gICAgRmxv
YXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICAvLyBJbmRleCBpbiB0
aGUgZGlzcGxheSBsaXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1
bm1hdGNoZWQuCisgICAgc2l6ZV90IHJlc3RvcmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
dG9yZUluZGV4OyB9CisgICAgdm9pZCBzZXRSZXN0b3JlSW5kZXgoc2l6ZV90IGluZGV4KSB7IG1f
cmVzdG9yZUluZGV4ID0gaW5kZXg7IH0KIAogcHJpdmF0ZToKLSAgICBDbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwKQotICAgICAgICAsIG1f
cmVjdChyZWN0KQotICAgIHsKLSAgICB9CisgICAgdXNpbmcgU2F2ZUJhc2U6OlNhdmVCYXNlOwog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IEZsb2F0UmVjdCBtX3JlY3Q7Ci19OwotCi1jbGFzcyBDbGlwT3V0IDogcHVibGljIEl0ZW0gewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcE91dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKKyAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0cykgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXQocmVjdCkpOworICAg
ICAgICBTYXZlQmFzZTo6ZHVtcCh0cyk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdG9y
ZS1pbmRleCIsIG1fcmVzdG9yZUluZGV4KTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCi1wcml2YXRlOgotICAgIENsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCi0gICAg
ICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0KKyAgICBzaXplX3QgbV9yZXN0b3JlSW5k
ZXggeyAwIH07Cit9OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKK3VzaW5nIFJlc3RvcmUgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6UmVz
dG9yZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNzQ29u
dGV4dDo6cmVzdG9yZQorPjsKIAotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci19OwordXNpbmcgU2V0
U3RhdGVCYXNlID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlNldFN0YXRlLAorICAgIHZv
aWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlQ2hhbmdlLAorICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlCis+OwogCi1jbGFzcyBDbGlwT3V0VG9QYXRoIDogcHVibGljIEl0
ZW0geworY2xhc3MgU2V0U3RhdGUgOiBwdWJsaWMgU2V0U3RhdGVCYXNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPENsaXBPdXRUb1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dFRvUGF0aChwYXRoKSk7Ci0g
ICAgfQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTZXRTdGF0ZUJhc2U6OmNy
ZWF0ZTxTZXRTdGF0ZT47CisgICAgdXNpbmcgU2V0U3RhdGVCYXNlOjpTZXRTdGF0ZUJhc2U7Cisg
ICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gYXJndW1lbnQ8MD4oKTsgfQorfTsKIAotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7
IHJldHVybiBtX3BhdGg7IH0KK3VzaW5nIFRyYW5zbGF0ZSA9IFNldHRpbmdJdGVtPAorICAgIEl0
ZW1UeXBlOjpUcmFuc2xhdGUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9hdCwg
ZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSwKKyAgICBmbG9hdCwgZmxv
YXQKKz47CisKK3VzaW5nIFJvdGF0ZSA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpSb3Rh
dGUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9hdCksCisgICAgJkdyYXBoaWNz
Q29udGV4dDo6cm90YXRlLAorICAgIGZsb2F0Cis+OworCit1c2luZyBTY2FsZSA9IFNldHRpbmdJ
dGVtPAorICAgIEl0ZW1UeXBlOjpTY2FsZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6Oiop
KGNvbnN0IEZsb2F0U2l6ZSYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNjYWxlLAorICAgIEZs
b2F0U2l6ZQorPjsKKwordXNpbmcgQ29uY2F0ZW5hdGVDVE0gPSBTZXR0aW5nSXRlbTwKKyAgICBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0s
CisgICAgQWZmaW5lVHJhbnNmb3JtCis+OworCit1c2luZyBTZXRMaW5lQ2FwID0gU2V0dGluZ0l0
ZW08CisgICAgSXRlbVR5cGU6OlNldExpbmVDYXAsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0
OjoqKShMaW5lQ2FwKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwLAorICAgIExp
bmVDYXAKKz47CisKK3VzaW5nIFNldExpbmVEYXNoID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5
cGU6OlNldExpbmVEYXNoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRGFz
aEFycmF5JiwgZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoLAorICAg
IERhc2hBcnJheSwgZmxvYXQKKz47CisKK3VzaW5nIFNldExpbmVKb2luID0gU2V0dGluZ0l0ZW08
CisgICAgSXRlbVR5cGU6OlNldExpbmVKb2luLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoTGluZUpvaW4pLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luLAorICAgIExp
bmVKb2luCis+OworCit1c2luZyBTZXRNaXRlckxpbWl0ID0gU2V0dGluZ0l0ZW08CisgICAgSXRl
bVR5cGU6OlNldE1pdGVyTGltaXQsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9h
dCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCwKKyAgICBmbG9hdAorPjsK
KwordXNpbmcgQ2xlYXJTaGFkb3cgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xlYXJT
aGFkb3csCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFwaGljc0Nv
bnRleHQ6OmNsZWFyU2hhZG93Cis+OworCit1c2luZyBDbGlwID0gU2V0dGluZ0l0ZW08CisgICAg
SXRlbVR5cGU6OkNsaXAsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9h
dFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpjbGlwLAorICAgIEZsb2F0UmVjdAorPjsK
KwordXNpbmcgQ2xpcE91dCA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGlwT3V0LAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiksCisgICAgJkdy
YXBoaWNzQ29udGV4dDo6Y2xpcE91dCwKKyAgICBGbG9hdFJlY3QKKz47CisKK3VzaW5nIENsaXBP
dXRUb1BhdGggPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCwKKyAg
ICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAgICAmR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0LAorICAgIGNvbnN0IFBhdGgKKz47CisKK3VzaW5nIENsaXBQYXRoID0g
U2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OkNsaXBQYXRoLAorICAgIHZvaWQgKEdyYXBoaWNz
Q29udGV4dDo6KikoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0
OjpjbGlwUGF0aCwKKyAgICBjb25zdCBQYXRoLCBXaW5kUnVsZQorPjsKKwordXNpbmcgQ2xpcFRv
SW1hZ2VCdWZmZXIgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZm
ZXIsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBOYXRpdmVJbWFnZVB0ciYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmNsaXBUb0ltYWdlQnVmZmVyLAorICAgIE5hdGl2ZUltYWdlUHRyLCBGbG9hdFJlY3QsIEZs
b2F0U2l6ZQorPjsKIAotcHJpdmF0ZToKLSAgICBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCkKLSAgICAgICAgLCBt
X3BhdGgocGF0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyNpZiBVU0UoQ0cpCit1c2luZyBBcHBseVN0cm9rZVBhdHRl
cm4gPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuLAorICAg
IHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjphcHBs
eVN0cm9rZVBhdHRlcm4KKz47CisKK3VzaW5nIEFwcGx5RmlsbFBhdHRlcm4gPSBTZXR0aW5nSXRl
bTwKKyAgICBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybiwKKyAgICB2b2lkIChHcmFwaGljc0Nv
bnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybgorPjsK
KyNlbmRpZgogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Ci19OwordXNpbmcgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvciA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxl
RmFjdG9yLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoZmxvYXQpLAorICAgICZHcmFw
aGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCisgICAgZmxvYXQKKz47CiAKLWNs
YXNzIENsaXBQYXRoIDogcHVibGljIEl0ZW0geworLy8gSXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0
aGUgc2l6ZSBvZiB0aGUgdHJhbnNwYXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAg
Ym91bmRzLgordXNpbmcgQmVnaW5UcmFuc3BhcmVuY3lMYXllciA9IERyYXdpbmdJdGVtPAorICAg
IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyLAorICAgIHZvaWQgKEdyYXBoaWNzQ29u
dGV4dDo6KikoZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIsCisgICAgZmxvYXQKKz47CisKK3VzaW5nIEVuZFRyYW5zcGFyZW5jeUxheWVyID0gRHJh
d2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyLAorICAgIHZvaWQg
KEdyYXBoaWNzQ29udGV4dDo6KikoKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3Bh
cmVuY3lMYXllcgorPjsKKwordXNpbmcgRHJhd0dseXBoc0Jhc2UgPSBEcmF3aW5nSXRlbTwKKyAg
ICBJdGVtVHlwZTo6RHJhd0dseXBocywKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3Qg
RmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpk
cmF3R2x5cGhzLAorICAgIFJlZjxjb25zdCBGb250PiwgR2x5cGhCdWZmZXIsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgRmxvYXRQb2ludCwgRm9udFNtb290aGluZ01vZGUKKz47CisKK2NsYXNzIERyYXdH
bHlwaHMgOiBwdWJsaWMgRHJhd0dseXBoc0Jhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAg
ICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0ZShSZWY8Y29uc3QgRm9udD4mJiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcFBhdGgocGF0aCwgd2luZFJ1
bGUpKTsKKyAgICAgICAgYXV0byBzdWJHbHlwaEJ1ZmZlciA9IERyYXdHbHlwaHM6OnN1YkdseXBo
QnVmZmVyKGZvbnQucHRyKCksIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzKTsKKyAgICAgICAgcmV0
dXJuIERyYXdHbHlwaHNCYXNlOjpjcmVhdGUoV1RGTW92ZShmb250KSwgV1RGTW92ZShzdWJHbHlw
aEJ1ZmZlciksIDAsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmcpOwogICAgIH0KIAot
ICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICBXaW5k
UnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KLQogcHJpdmF0ZToK
LSAgICBDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICAg
ICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAg
ICAgICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVzaW5nIERyYXdHbHlw
aHNCYXNlOjpEcmF3R2x5cGhzQmFzZTsKIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOwotICAgIFdp
bmRSdWxlIG1fd2luZFJ1bGU7Ci19OwotCi1jbGFzcyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdp
bmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50
JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3Ro
aW5nTW9kZSBzbW9vdGhpbmdNb2RlKQorICAgIHN0YXRpYyBHbHlwaEJ1ZmZlciBzdWJHbHlwaEJ1
ZmZlcihjb25zdCBGb250KiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBibG9ja0xv
Y2F0aW9uLCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOworICAgICAgICBHbHlwaEJ1ZmZl
ciBzdWJCdWZmZXI7CisgICAgICAgIGNvbnN0IGF1dG8qIGdseXBocyA9IGJ1ZmZlci5nbHlwaHMo
ZnJvbSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGFkdmFuY2VzID0gYnVmZmVyLmFkdmFuY2VzKGZy
b20pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKQorICAg
ICAgICAgICAgc3ViQnVmZmVyLmFkZChnbHlwaHNbaV0sIGZvbnQsIGFkdmFuY2VzW2ldKTsKKyAg
ICAgICAgcmV0dXJuIHN1YkJ1ZmZlcjsKICAgICB9CiAKLSAgICBjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9Ci0gICAgdm9p
ZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9i
bG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgZm9udCA9IGFyZ3VtZW50PDA+KCk7Cisg
ICAgICAgIGZsb2F0IGFzY2VudCA9IGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKTsK
KyAgICAgICAgZmxvYXQgZGVzY2VudCA9IGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXREZXNjZW50
KCk7CiAKLSAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhbEFuY2hvcjsgfQorICAgICAgICBjb25zdCBhdXRvJiBnbHlwaEJ1ZmZlciA9IGFyZ3Vt
ZW50PDE+KCk7CisgICAgICAgIHNpemVfdCBudW1HbHlwaHMgPSBnbHlwaEJ1ZmZlci5zaXplKCk7
CisgICAgICAgIGF1dG8gY3VycmVudCA9IGFyZ3VtZW50PDQ+KCk7CiAKLSAgICBGbG9hdFBvaW50
IGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uICsgbV9sb2NhbEFu
Y2hvcjsgfQorICAgICAgICBGbG9hdFJlY3QgYm91bmRzOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFu
Y2UgYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKTsKKyAgICAgICAgICAgIEZsb2F0
UmVjdCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgpIC0gYXNj
ZW50LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOworICAgICAgICAgICAgYm91
bmRzLnVuaXRlKGdseXBoUmVjdCk7CisgICAgICAgICAgICBjdXJyZW50Lm1vdmUoYWR2YW5jZS53
aWR0aCgpLCBhZHZhbmNlLmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYm91
bmRzOworICAgIH0KK307CiAKLSAgICBjb25zdCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4
PiYgZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHM7IH0KK3VzaW5nIERyYXdJbWFnZUJh
c2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0ltYWdlLAorICAgIEltYWdlRHJh
d1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiksCisgICAgJkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlLAorICAgIFJlZjxJbWFnZT4sIEZsb2F0UmVjdCwgRmxvYXRS
ZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucworPjsKIAorY2xhc3MgRHJhd0ltYWdlIDogcHVibGlj
IERyYXdJbWFnZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVh
dGUgPSBEcmF3SW1hZ2VCYXNlOjpjcmVhdGU8RHJhd0ltYWdlPjsKKyAgICB1c2luZyBEcmF3SW1h
Z2VCYXNlOjpEcmF3SW1hZ2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3R2x5cGhzKGNvbnN0IEZv
bnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZs
b2F0U2l6ZSYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLQotICAgIHZvaWQgY29t
cHV0ZUJvdW5kcygpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEdseXBoQnVmZmVyIGdl
bmVyYXRlR2x5cGhCdWZmZXIoKSBjb25zdDsKLQotICAgIFJlZjxGb250PiBtX2ZvbnQ7Ci0gICAg
VmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4gbV9nbHlwaHM7Ci0gICAgVmVjdG9yPEdseXBo
QnVmZmVyQWR2YW5jZSwgMTI4PiBtX2FkdmFuY2VzOwotICAgIEZsb2F0UmVjdCBtX2JvdW5kczsK
LSAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKLSAgICBGbG9hdFNpemUgbV9sb2NhbEFu
Y2hvcjsKLSAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGU7CisgICAgY29uc3Qg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDE+KCk7IH0KIH07CiAKLWNsYXNz
IERyYXdJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxEcmF3SW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdP
cHRpb25zKSk7Ci0gICAgfQotCi0gICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZS5nZXQoKTsgfQotICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVy
biBtX3NvdXJjZTsgfQotICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb247IH0KK3VzaW5nIERyYXdUaWxlZEltYWdlQmFzZSA9IERyYXdpbmdJdGVt
PAorICAgIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZSwKKyAgICBJbWFnZURyYXdSZXN1bHQgKEdy
YXBoaWNzQ29udGV4dDo6KikoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSwKKyAg
ICBSZWY8SW1hZ2U+LCBGbG9hdFJlY3QsIEZsb2F0UG9pbnQsIEZsb2F0U2l6ZSwgRmxvYXRTaXpl
LCBJbWFnZVBhaW50aW5nT3B0aW9ucworPjsKIAorY2xhc3MgRHJhd1RpbGVkSW1hZ2UgOiBwdWJs
aWMgRHJhd1RpbGVkSW1hZ2VCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1
dG8gY3JlYXRlID0gRHJhd1RpbGVkSW1hZ2VCYXNlOjpjcmVhdGU8RHJhd1RpbGVkSW1hZ2U+Owor
ICAgIHVzaW5nIERyYXdUaWxlZEltYWdlQmFzZTo6RHJhd1RpbGVkSW1hZ2VCYXNlOwogcHJpdmF0
ZToKLSAgICBEcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0gICAgbXV0YWJs
ZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2Ug
dGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBt
dXRhYmxlLgotICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UmVjdCBtX3Nv
dXJjZTsKLSAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOwor
ICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwxPigpOyB9CiB9
OwogCi1jbGFzcyBEcmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKLSAgICB9
Ci0KLSAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgp
OyB9Ci0gICAgRmxvYXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQot
ICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247
IH0KLQotICAgIEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7
IH0KLSAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQor
dXNpbmcgRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5
cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlLAorICAgIEltYWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3ND
b250ZXh0OjoqKShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZElt
YWdlLAorICAgIFJlZjxJbWFnZT4sIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBGbG9hdFNpemUsIElt
YWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZVBhaW50aW5nT3B0aW9ucworPjsK
IAorY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd1RpbGVkU2NhbGVkSW1h
Z2VCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJh
d1RpbGVkU2NhbGVkSW1hZ2VCYXNlOjpjcmVhdGU8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+OworICAg
IHVzaW5nIERyYXdUaWxlZFNjYWxlZEltYWdlQmFzZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNl
OwogcHJpdmF0ZToKLSAgICBEcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9Ci0K
LSAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2Vz
IGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBo
YXZlIHRvIGJlIG11dGFibGUuCi0gICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247Ci0gICAgRmxv
YXRQb2ludCBtX3NvdXJjZTsKLSAgICBGbG9hdFNpemUgbV90aWxlU2l6ZTsKLSAgICBGbG9hdFNp
emUgbV9zcGFjaW5nOwotICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09w
dGlvbnM7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDE+
KCk7IH0KIH07CiAKLWNsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPiBjcmVh
dGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpU
aWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3VGlsZWRTY2FsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7
Ci0gICAgfQotCi0gICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZS5nZXQoKTsgfQotICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZTsgfQotICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkgfHwgVVNFKENBSVJPKQordXNp
bmcgRHJhd05hdGl2ZUltYWdlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3
TmF0aXZlSW1hZ2UsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24pLAor
ICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSwKKyAgICBOYXRpdmVJbWFnZVB0
ciwgRmxvYXRTaXplLCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbgorPjsKIAorY2xhc3MgRHJhd05hdGl2ZUltYWdlIDog
cHVibGljIERyYXdOYXRpdmVJbWFnZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0
aWMgYXV0byBjcmVhdGUgPSBEcmF3TmF0aXZlSW1hZ2VCYXNlOjpjcmVhdGU8RHJhd05hdGl2ZUlt
YWdlPjsKKyAgICB1c2luZyBEcmF3TmF0aXZlSW1hZ2VCYXNlOjpEcmF3TmF0aXZlSW1hZ2VCYXNl
OwogcHJpdmF0ZToKLSAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNp
emUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1
bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KLQotICAgIG11dGFibGUgUmVmPEltYWdlPiBt
X2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlv
bnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KLSAgICBG
bG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKLSAgICBGbG9hdFJlY3QgbV9zb3VyY2U7Ci0gICAgRmxv
YXRTaXplIG1fdGlsZVNjYWxlRmFjdG9yOwotICAgIEltYWdlOjpUaWxlUnVsZSBtX2hSdWxlOwot
ICAgIEltYWdlOjpUaWxlUnVsZSBtX3ZSdWxlOwotICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG1f
aW1hZ2VQYWludGluZ09wdGlvbnM7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGFyZ3VtZW50PDI+KCk7IH0KIH07CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLWNs
YXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxEcmF3TmF0aXZlSW1hZ2U+IGNyZWF0ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNp
emUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbikpOwotICAg
IH0KLQotICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0K
LSAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9Cit1c2luZyBEcmF3TmF0aXZlU2NhbGVkSW1hZ2VCYXNlID0gRHJhd2luZ0l0ZW08CisgICAg
SXRlbVR5cGU6OkRyYXdOYXRpdmVTY2FsZWRJbWFnZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRl
eHQ6OiopKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgY29u
c3QgSW50UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVTY2FsZWRJbWFn
ZSwKKyAgICBOYXRpdmVJbWFnZVB0ciwgZmxvYXQsIEludFBvaW50LCBJbnRSZWN0Cis+OwogCitj
bGFzcyBEcmF3TmF0aXZlU2NhbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd05hdGl2ZVNjYWxlZEltYWdl
QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdO
YXRpdmVTY2FsZWRJbWFnZUJhc2U6OmNyZWF0ZTxEcmF3TmF0aXZlU2NhbGVkSW1hZ2U+OworICAg
IHVzaW5nIERyYXdOYXRpdmVTY2FsZWRJbWFnZUJhc2U6OkRyYXdOYXRpdmVTY2FsZWRJbWFnZUJh
c2U7CiBwcml2YXRlOgotICAgIERyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYs
IGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1h
Z2VPcmllbnRhdGlvbik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRp
b247IH0KLQotI2lmIFVTRShDRykKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9pbWFnZTsK
LSNlbmRpZgotICAgIEZsb2F0U2l6ZSBtX2ltYWdlU2l6ZTsKLSAgICBGbG9hdFJlY3QgbV9kZXN0
aW5hdGlvbjsKLSAgICBGbG9hdFJlY3QgbV9zcmNSZWN0OwotI2lmIFVTRShDRykKLSAgICBDb21w
b3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKLSNlbmRpZgot
ICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKKyAgICBjb25zdCBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KGFyZ3VtZW50PDM+KCkpOyB9CiB9OwogI2VuZGlm
CiAKLWNsYXNzIERyYXdQYXR0ZXJuIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPERyYXdQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1BhdHRlcm4o
aW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wLCBibGVuZE1vZGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3JtOyB9
Ci0gICAgRmxvYXRSZWN0IHRpbGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV90aWxlUmVjdDsgfQot
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0K
LSAgICBGbG9hdFBvaW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfQotICAgIEZs
b2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9Cit1c2luZyBEcmF3
UGF0dGVybkJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1BhdHRlcm4sCisg
ICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSwKKyAgICAm
R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybiwKKyAgICBSZWY8SW1hZ2U+LCBGbG9hdFJlY3Qs
IEZsb2F0UmVjdCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50LCBGbG9hdFNpemUsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUKKz47CiAKLXByaXZhdGU6Ci0gICAgRHJhd1BhdHRlcm4o
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVu
ZE1vZGVOb3JtYWwpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9Ci0KLSAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcg
aW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3Vs
ZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1fcGF0dGVyblRy
YW5zZm9ybTsKLSAgICBGbG9hdFJlY3QgbV90aWxlUmVjdDsKLSAgICBGbG9hdFJlY3QgbV9kZXN0
aW5hdGlvbjsKLSAgICBGbG9hdFBvaW50IG1fcGhhc2U7Ci0gICAgRmxvYXRTaXplIG1fc3BhY2lu
ZzsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9k
ZTsKLX07Ci0KLS8vIElzIERyYXdpbmdJdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHRyYW5z
cGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KLWNsYXNzIEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1BhdHRl
cm4gOiBwdWJsaWMgRHJhd1BhdHRlcm5CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KSk7
Ci0gICAgfQotCi0gICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsg
fQotCisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdQYXR0ZXJuQmFzZTo6
Y3JlYXRlPERyYXdQYXR0ZXJuPjsKKyAgICB1c2luZyBEcmF3UGF0dGVybkJhc2U6OkRyYXdQYXR0
ZXJuQmFzZTsKIHByaXZhdGU6Ci0gICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxh
eWVyKQotICAgICAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQotICAgIHsKLSAgICB9Ci0KLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZmxvYXQg
bV9vcGFjaXR5OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVu
dDwxPigpOyB9CiB9OwogCi1jbGFzcyBFbmRUcmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbmRUcmFuc3BhcmVuY3lMYXllcj4g
Y3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVuZFRyYW5zcGFy
ZW5jeUxheWVyKTsKLSAgICB9Cit1c2luZyBEcmF3UmVjdEJhc2UgPSBEcmF3aW5nSXRlbTwKKyAg
ICBJdGVtVHlwZTo6RHJhd1JlY3QsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QsCisg
ICAgRmxvYXRSZWN0LCBmbG9hdAorPjsKIAorY2xhc3MgRHJhd1JlY3QgOiBwdWJsaWMgRHJhd1Jl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJh
d1JlY3RCYXNlOjpjcmVhdGU8RHJhd1JlY3Q+OworICAgIHVzaW5nIERyYXdSZWN0QmFzZTo6RHJh
d1JlY3RCYXNlOwogcHJpdmF0ZToKLSAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyKQorICAgIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBhcmd1
bWVudDwwPigpOworICAgICAgICBmbG9hdCBib3JkZXJUaGlja25lc3MgPSBhcmd1bWVudDwxPigp
OworICAgICAgICByZWN0LmluZmxhdGUoYm9yZGVyVGhpY2tuZXNzIC8gMik7CisgICAgICAgIHJl
dHVybiByZWN0OwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CiB9OwogCi1jbGFzcyBEcmF3UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7Ci0gICAgfQotCi0g
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBmbG9hdCBi
b3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclRoaWNrbmVzczsgfQordXNp
bmcgRHJhd0xpbmVCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lLAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0UG9pbnQmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSwKKyAgICBGbG9hdFBv
aW50LCBGbG9hdFBvaW50Cis+OwogCitjbGFzcyBEcmF3TGluZSA6IHB1YmxpYyBEcmF3TGluZUJh
c2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TGlu
ZUJhc2U6OmNyZWF0ZTxEcmF3TGluZT47CisgICAgdXNpbmcgRHJhd0xpbmVCYXNlOjpEcmF3TGlu
ZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3
UmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2JvcmRlclRoaWNrbmVz
cyhib3JkZXJUaGlja25lc3MpCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlCiAgICAgewor
ICAgICAgICBGbG9hdFJlY3QgYm91bmRzOworICAgICAgICBib3VuZHMuZml0VG9Qb2ludHMoYXJn
dW1lbnQ8MD4oKSwgYXJndW1lbnQ8MT4oKSk7CisgICAgICAgIHJldHVybiBib3VuZHM7CiAgICAg
fQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3Qg
bV9yZWN0OwotICAgIGZsb2F0IG1fYm9yZGVyVGhpY2tuZXNzOwogfTsKIAotY2xhc3MgRHJhd0xp
bmUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xp
bmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBwb2ludDEoKSBjb25zdCB7IHJl
dHVybiBtX3BvaW50MTsgfQotICAgIEZsb2F0UG9pbnQgcG9pbnQyKCkgY29uc3QgeyByZXR1cm4g
bV9wb2ludDI7IH0KK3VzaW5nIERyYXdMaW5lc0ZvclRleHRCYXNlID0gRHJhd2luZ0l0ZW08Cisg
ICAgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0
OjoqKShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ry
b2tlU3R5bGUpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQsCisgICAg
RmxvYXRQb2ludCwgRGFzaEFycmF5LCBib29sLCBib29sLCBTdHJva2VTdHlsZQorPjsKIAorY2xh
c3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3TGluZXNGb3JUZXh0QmFzZSB7CitwdWJs
aWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdMaW5lc0ZvclRleHRC
YXNlOjpjcmVhdGU8RHJhd0xpbmVzRm9yVGV4dD47CisgICAgdXNpbmcgRHJhd0xpbmVzRm9yVGV4
dEJhc2U6OkRyYXdMaW5lc0ZvclRleHRCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLSAgICAgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmUpCi0gICAgICAgICwgbV9wb2ludDEocG9p
bnQxKQotICAgICAgICAsIG1fcG9pbnQyKHBvaW50MikKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBy
ZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6
OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKSByZXR1cm5zLgor
ICAgICAgICBpZiAoIWFyZ3VtZW50PDE+KCkuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRzKGFyZ3VtZW50PDA+KCksIEZsb2F0
U2l6ZShhcmd1bWVudDwxPigpLmxhc3QoKSwgY29udGV4dC5zdHJva2VUaGlja25lc3MoKSkpOwor
ICAgICAgICBib3VuZHMuaW5mbGF0ZSgxKTsgLy8gQWNjb3VudCBmb3IgcGl4ZWwgc25hcHBpbmcu
IEZJWE1FOiBUaGlzIGlzbid0IHBlcmZlY3QsIGFzIGl0IGRvZXNuJ3QgdGFrZSB0aGUgQ1RNIGlu
dG8gYWNjb3VudC4KKyAgICAgICAgcmV0dXJuIGJvdW5kczsKICAgICB9Ci0KLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLQotICAgIEZsb2F0UG9pbnQgbV9wb2ludDE7Ci0gICAgRmxvYXRQb2ludCBtX3BvaW50
MjsKIH07CiAKLWNsYXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmVzRm9yVGV4dD4gY3JlYXRlKGNvbnN0IEZs
b2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBm
bG9hdCBzdHJva2VXaWR0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERy
YXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHdpZHRocywgcHJpbnRp
bmcsIGRvdWJsZUxpbmVzLCBzdHJva2VXaWR0aCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Qmxv
Y2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2Nh
dGlvbiA9IGJsb2NrTG9jYXRpb247IH0KLSAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRT
aXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KLSAgICBG
bG9hdFBvaW50IHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uICsgbV9sb2Nh
bEFuY2hvcjsgfQotICAgIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzKCkgY29uc3QgeyByZXR1cm4g
bV93aWR0aHM7IH0KLSAgICBib29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50
aW5nOyB9Ci0gICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGlu
ZXM7IH0KK3VzaW5nIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNlID0gRHJhd2luZ0l0ZW08
CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIsCisgICAgdm9pZCAoR3Jh
cGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyLAorICAgIEZsb2F0UG9pbnQsIGZsb2F0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZQorPjsK
IAorY2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNy
ZWF0ZSA9IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNlOjpjcmVhdGU8RHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcj47CisgICAgdXNpbmcgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlckJhc2U6
OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
bG9jYWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dCkKLSAgICAgICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxv
Y2tMb2NhdGlvbikKLSAgICAgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQotICAgICAg
ICAsIG1fd2lkdGhzKHdpZHRocykKLSAgICAgICAgLCBtX3N0cm9rZVdpZHRoKHN0cm9rZVdpZHRo
KQotICAgICAgICAsIG1fcHJpbnRpbmcocHJpbnRpbmcpCi0gICAgICAgICwgbV9kb3VibGVMaW5l
cyhkb3VibGVMaW5lcykKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAg
ICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3Ig
ZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
KCkgcmV0dXJucy4KKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyhhcmd1bWVudDwwPigpLCBGbG9h
dFNpemUoYXJndW1lbnQ8MT4oKSwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOworICAgICAg
ICBib3VuZHMuaW5mbGF0ZShjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKTsgLy8gQWNjb3VudCBm
b3IgIm1pc3NwZWxsaW5nIGRvdCIgc25hcHBpbmcuCisgICAgICAgIHJldHVybiBib3VuZHM7CiAg
ICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0
aW9uOwotICAgIEZsb2F0U2l6ZSBtX2xvY2FsQW5jaG9yOwotICAgIERhc2hBcnJheSBtX3dpZHRo
czsKLSAgICBmbG9hdCBtX3N0cm9rZVdpZHRoOwotICAgIGJvb2wgbV9wcmludGluZzsKLSAgICBi
b29sIG1fZG91YmxlTGluZXM7CiB9OwogCi1jbGFzcyBEcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5l
Rm9yRG9jdW1lbnRNYXJrZXI+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
d2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihwb2ludCwgd2lkdGgs
IHN0eWxlKSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fcG9pbnQ7IH0KLSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
K3VzaW5nIERyYXdFbGxpcHNlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3
RWxsaXBzZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYp
LAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlLAorICAgIEZsb2F0UmVjdAorPjsK
IAorY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd0VsbGlwc2VCYXNlIHsKK3B1YmxpYzoK
KyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd0VsbGlwc2VCYXNlOjpjcmVh
dGU8RHJhd0VsbGlwc2U+OworICAgIHVzaW5nIERyYXdFbGxpcHNlQmFzZTo6RHJhd0VsbGlwc2VC
YXNlOwogcHJpdmF0ZToKLSAgICBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
Ci0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXIpCi0gICAgICAgICwgbV9wb2ludChwb2ludCkKLSAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQot
ICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBGbG9hdFBvaW50IG1fcG9pbnQ7Ci0gICAgZmxvYXQgbV93aWR0aDsKLSAgICBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxlOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBEcmF3RWxsaXBzZSA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CisjaWYgVVNFKENHKQordXNpbmcgRHJhd1BhdGhCYXNlID0g
RHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdQYXRoLAorICAgIHZvaWQgKEdyYXBoaWNz
Q29udGV4dDo6KikoY29uc3QgUGF0aCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRo
LAorICAgIGNvbnN0IFBhdGgKKz47CisKK2NsYXNzIERyYXdQYXRoIDogcHVibGljIERyYXdQYXRo
QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3RWxsaXBzZT4gY3JlYXRlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERy
YXdFbGxpcHNlKHJlY3QpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQotCisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERy
YXdQYXRoQmFzZTo6Y3JlYXRlPERyYXdQYXRoPjsKKyAgICB1c2luZyBEcmF3UGF0aEJhc2U6OkRy
YXdQYXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3RWxsaXBzZSkKLSAgICAg
ICAgLCBtX3JlY3QocmVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQog
fTsKKyNlbmRpZgogCi1jbGFzcyBEcmF3UGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UGF0aChwYXRoKSk7Ci0gICAg
fQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQordXNp
bmcgRHJhd0ZvY3VzUmluZ1BhdGhCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRy
YXdGb2N1c1JpbmdQYXRoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0
aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpk
cmF3Rm9jdXNSaW5nLAorICAgIGNvbnN0IFBhdGgsIGZsb2F0LCBmbG9hdCwgQ29sb3IKKz47CiAK
K2NsYXNzIERyYXdGb2N1c1JpbmdQYXRoIDogcHVibGljIERyYXdGb2N1c1JpbmdQYXRoQmFzZSB7
CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdGb2N1c1Jp
bmdQYXRoQmFzZTo6Y3JlYXRlPERyYXdGb2N1c1JpbmdQYXRoPjsKKyAgICB1c2luZyBEcmF3Rm9j
dXNSaW5nUGF0aEJhc2U6OkRyYXdGb2N1c1JpbmdQYXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RHJhd1BhdGgpCi0gICAgICAgICwgbV9wYXRoKHBhdGgpCisgICAgY29uc3Qgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlCiAgICAgeworICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gYXJndW1lbnQ8MD4oKS5m
YXN0Qm91bmRpbmdSZWN0KCk7CisgICAgICAgIGJvdW5kcy5pbmZsYXRlKHNfcGxhdGZvcm1Gb2N1
c1JpbmdXaWR0aCk7CisgICAgICAgIHJldHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9Ci0KLSAgICBjb25z
dCBQYXRoIG1fcGF0aDsKIH07CiAKLWNsYXNzIERyYXdGb2N1c1JpbmdQYXRoIDogcHVibGljIERy
YXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdGb2N1c1JpbmdQYXRoPiBj
cmVhdGUoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0Zv
Y3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBj
b25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgZmxvYXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgZmxvYXQgb2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX2NvbG9yOyB9Cit1c2luZyBEcmF3Rm9jdXNSaW5nUmVjdHNCYXNlID0gRHJhd2luZ0l0
ZW08CisgICAgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cywKKyAgICB2b2lkIChHcmFwaGlj
c0NvbnRleHQ6OiopKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25z
dCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcsCisgICAgVmVj
dG9yPEZsb2F0UmVjdD4sIGZsb2F0LCBmbG9hdCwgQ29sb3IKKz47CiAKK2NsYXNzIERyYXdGb2N1
c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3Rm9jdXNSaW5nUmVjdHNCYXNlIHsKK3B1YmxpYzoKKyAg
ICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd0ZvY3VzUmluZ1JlY3RzQmFzZTo6
Y3JlYXRlPERyYXdGb2N1c1JpbmdSZWN0cz47CisgICAgdXNpbmcgRHJhd0ZvY3VzUmluZ1JlY3Rz
QmFzZTo6RHJhd0ZvY3VzUmluZ1JlY3RzQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd0ZvY3VzUmlu
Z1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICAgICAgLCBtX3dpZHRoKHdpZHRo
KQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQor
ICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IGJv
dW5kczsKKyAgICAgICAgZm9yIChhdXRvJiByZWN0IDogYXJndW1lbnQ8MD4oKSkKKyAgICAgICAg
ICAgIGJvdW5kcy51bml0ZShyZWN0KTsKKyAgICAgICAgYm91bmRzLmluZmxhdGUoc19wbGF0Zm9y
bUZvY3VzUmluZ1dpZHRoKTsKKyAgICAgICAgcmV0dXJuIGJvdW5kczsKICAgICB9Ci0KLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Ci0gICAgZmxvYXQgbV93aWR0
aDsKLSAgICBmbG9hdCBtX29mZnNldDsKLSAgICBDb2xvciBtX2NvbG9yOwogfTsKIAotY2xhc3Mg
RHJhd0ZvY3VzUmluZ1JlY3RzIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3VzaW5nIERyYXdJY29u
QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3SWNvbiwKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKEljb24mLCBjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SWNvbiwKKyAgICBSZWY8SWNvbj4sIEZsb2F0UmVjdAorPjsKKyAgICAK
K2NsYXNzIERyYXdJY29uIDogcHVibGljIERyYXdJY29uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+IGNyZWF0ZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdSZWN0cyhy
ZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiByZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdHM7IH0KLSAgICBmbG9hdCB3
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICBmbG9hdCBvZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29sb3I7IH0KLQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBE
cmF3SWNvbkJhc2U6OmNyZWF0ZTxEcmF3SWNvbj47CisgICAgdXNpbmcgRHJhd0ljb25CYXNlOjpE
cmF3SWNvbkJhc2U7CiBwcml2YXRlOgotICAgIERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmlu
Z1JlY3RzKQotICAgICAgICAsIG1fcmVjdHMocmVjdHMpCi0gICAgICAgICwgbV93aWR0aCh3aWR0
aCkKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9jb2xvcihjb2xvcikK
LSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IG1fcmVjdHM7Ci0gICAgZmxvYXQgbV93aWR0aDsKLSAgICBmbG9hdCBtX29mZnNldDsKLSAg
ICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBh
cmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBGaWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7Cit1c2luZyBEcmF3V2lkZ2V0QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpE
cmF3V2lkZ2V0LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoV2lkZ2V0JiwgY29uc3Qg
SW50UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdXaWRnZXQsCisgICAgUmVmPFdp
ZGdldD4sIEludFJlY3QKKz47CisgICAgCitjbGFzcyBEcmF3V2lkZ2V0IDogcHVibGljIERyYXdX
aWRnZXRCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0PiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RmlsbFJlY3QocmVjdCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9Ci0KKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJh
d1dpZGdldEJhc2U6OmNyZWF0ZTxEcmF3V2lkZ2V0PjsKKyAgICB1c2luZyBEcmF3V2lkZ2V0QmFz
ZTo6RHJhd1dpZGdldEJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3QpCi0gICAg
ICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBjb25zdCBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KGFyZ3VtZW50PDE+KCkpOyB9CiB9OwotCi0v
LyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZyb20gRmlsbFJlY3QgcHJvcGVyLgotY2xhc3Mg
RmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworICAgIAordXNpbmcgRHJh
d1Njcm9sbGJhckJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1Njcm9sbGJh
ciwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKFNjcm9sbGJhciYsIGNvbnN0IEludFJl
Y3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3U2Nyb2xsYmFyLAorICAgIFJlZjxTY3Jv
bGxiYXI+LCBJbnRSZWN0Cis+OworICAgIAorY2xhc3MgRHJhd1Njcm9sbGJhciA6IHB1YmxpYyBE
cmF3U2Nyb2xsYmFyQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhD
b2xvcj4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoQ29sb3IocmVj
dCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29s
b3I7IH0KLQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3U2Nyb2xsYmFy
QmFzZTo6Y3JlYXRlPERyYXdTY3JvbGxiYXI+OworICAgIHVzaW5nIERyYXdTY3JvbGxiYXJCYXNl
OjpEcmF3U2Nyb2xsYmFyQmFzZTsKIHByaXZhdGU6Ci0gICAgRmlsbFJlY3RXaXRoQ29sb3IoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yKQotICAgICAgICAsIG1fcmVjdChyZWN0
KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBDb2xv
ciBtX2NvbG9yOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJl
Y3QoYXJndW1lbnQ8MT4oKSk7IH0KIH07Ci0KLWNsYXNzIEZpbGxSZWN0V2l0aEdyYWRpZW50IDog
cHVibGljIERyYXdpbmdJdGVtIHsKKyAgICAKK3VzaW5nIERyYXdUaGVtZUJhc2UgPSBEcmF3aW5n
SXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1RoZW1lLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4
dDo6KikoVGhlbWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sKSwKKyAgICAmR3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGhlbWUsCisgICAgVGhlbWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0
YXRlcyYsIEZsb2F0UmVjdCwgZmxvYXQsIHZvaWQqLCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wK
Kz47CisgICAgCitjbGFzcyBEcmF3VGhlbWUgOiBwdWJsaWMgRHJhd1RoZW1lQmFzZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpKTsKLSAg
ICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCisg
ICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdUaGVtZUJhc2U6OmNyZWF0ZTxE
cmF3VGhlbWU+OworICAgIHVzaW5nIERyYXdUaGVtZUJhc2U6OkRyYXdUaGVtZUJhc2U7CiBwcml2
YXRlOgotICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
ZGllbnQmIGdyYWRpZW50KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhHcmFkaWVudCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2dyYWRp
ZW50KGdyYWRpZW50KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgbXV0YWJsZSBSZWY8R3JhZGll
bnQ+IG1fZ3JhZGllbnQ7IC8vIEZJWE1FOiBNYWtlIHRoaXMgbm90IG11dGFibGUKKyAgICBjb25z
dCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8Mz4oKTsgfQogfTsKIAotY2xh
c3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxDb21w
b3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOwotICAgIH0KLQotICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgY29uc3QgQ29sb3Im
IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQotICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQordXNpbmcgRmlsbFJl
Y3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxSZWN0LAorICAgIHZvaWQg
KEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiksCisgICAgJkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QsCisgICAgRmxvYXRSZWN0Cis+OwogCitjbGFzcyBGaWxsUmVjdCA6IHB1
YmxpYyBGaWxsUmVjdEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBj
cmVhdGUgPSBGaWxsUmVjdEJhc2U6OmNyZWF0ZTxGaWxsUmVjdD47CisgICAgdXNpbmcgRmlsbFJl
Y3RCYXNlOjpGaWxsUmVjdEJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxDb21wb3NpdGVkUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fb3Aob3ApCi0gICAgICAgICwgbV9ibGVuZE1v
ZGUoYmxlbmRNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKLSAg
ICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKKyAg
ICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsK
IAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZpbGxSb3VuZGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSb3VuZGVkUmVjdChyZWN0LCBj
b2xvciwgYmxlbmRNb2RlKSk7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYg
Y29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9Cit1c2luZyBGaWxsUmVjdFdpdGhDb2xv
ckJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IsCisg
ICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0LAorICAgIEZsb2F0UmVjdCwgQ29s
b3IKKz47CiAKK2NsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVibGljIEZpbGxSZWN0V2l0aENv
bG9yQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZp
bGxSZWN0V2l0aENvbG9yQmFzZTo6Y3JlYXRlPEZpbGxSZWN0V2l0aENvbG9yPjsKKyAgICB1c2lu
ZyBGaWxsUmVjdFdpdGhDb2xvckJhc2U6OkZpbGxSZWN0V2l0aENvbG9yQmFzZTsKIHByaXZhdGU6
Ci0gICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICAgICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0KQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAg
ICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9
Ci0KLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOwotICAg
IEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOwotICAgIH0KLQotICAgIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVS
ZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsg
fQordXNpbmcgRmlsbFJlY3RXaXRoR3JhZGllbnRCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCwKKyAgICBGbG9hdFJlY3QsIFJlZjxHcmFkaWVudD4KKz47CiAKK2NsYXNzIEZpbGxS
ZWN0V2l0aEdyYWRpZW50IDogcHVibGljIEZpbGxSZWN0V2l0aEdyYWRpZW50QmFzZSB7CitwdWJs
aWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxSZWN0V2l0aEdyYWRp
ZW50QmFzZTo6Y3JlYXRlPEZpbGxSZWN0V2l0aEdyYWRpZW50PjsKKyAgICB1c2luZyBGaWxsUmVj
dFdpdGhHcmFkaWVudEJhc2U6OkZpbGxSZWN0V2l0aEdyYWRpZW50QmFzZTsKIHByaXZhdGU6Ci0g
ICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAg
ICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCi0g
ICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRl
ZEhvbGVSZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsK
LSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91bmRlZEhvbGVSZWN0OwotICAgIENvbG9yIG1fY29s
b3I7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7
IH0KIH07CiAKLWNsYXNzIEZpbGxQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxQYXRoKHBhdGgpKTsKLSAgICB9Ci0K
LSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Cit1c2luZyBG
aWxsQ29tcG9zaXRlZFJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxD
b21wb3NpdGVkUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSksCisgICAg
JkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisgICAgRmxvYXRSZWN0LCBDb2xvciwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZQorPjsKIAorY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDog
cHVibGljIEZpbGxDb21wb3NpdGVkUmVjdEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBz
dGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsQ29tcG9zaXRlZFJlY3RCYXNlOjpjcmVhdGU8RmlsbENv
bXBvc2l0ZWRSZWN0PjsKKyAgICB1c2luZyBGaWxsQ29tcG9zaXRlZFJlY3RCYXNlOjpGaWxsQ29t
cG9zaXRlZFJlY3RCYXNlOwogcHJpdmF0ZToKLSAgICBGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUGF0aCkKLSAgICAgICAgLCBt
X3BhdGgocGF0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9w
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQotCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7CisgICAg
Y29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAK
LWNsYXNzIEZpbGxFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZpbGxFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbEVsbGlwc2UocmVjdCkpOwotICAg
IH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Cit1c2lu
ZyBGaWxsUm91bmRlZFJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxS
b3VuZGVkUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSksCisgICAgJkdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJvdW5kZWRSZWN0LAorICAgIEZsb2F0Um91bmRlZFJlY3QsIENvbG9yLCBCbGVuZE1v
ZGUKKz47CiAKK2NsYXNzIEZpbGxSb3VuZGVkUmVjdCA6IHB1YmxpYyBGaWxsUm91bmRlZFJlY3RC
YXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJv
dW5kZWRSZWN0QmFzZTo6Y3JlYXRlPEZpbGxSb3VuZGVkUmVjdD47CisgICAgdXNpbmcgRmlsbFJv
dW5kZWRSZWN0QmFzZTo6RmlsbFJvdW5kZWRSZWN0QmFzZTsKIHByaXZhdGU6Ci0gICAgRmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpGaWxsRWxsaXBzZSkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBt
X3JlY3Q7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+
KCkucmVjdCgpOyB9CiB9OwogCi1jbGFzcyBTdHJva2VSZWN0IDogcHVibGljIERyYXdpbmdJdGVt
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKSk7Ci0gICAgfQotCi0gICAgRmxv
YXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBmbG9hdCBsaW5lV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVXaWR0aDsgfQordXNpbmcgRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGVCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiksCisgICAgJkdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisgICAgRmxvYXRSZWN0LCBGbG9hdFJv
dW5kZWRSZWN0LCBDb2xvcgorPjsKIAorY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBw
dWJsaWMgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4
cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGVCYXNlOjpjcmVh
dGU8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+OworICAgIHVzaW5nIEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlQmFzZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGVCYXNlOwogcHJpdmF0ZToKLSAgICBT
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotICAgICAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VSZWN0KQotICAgICAgICAsIG1fcmVjdChy
ZWN0KQotICAgICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OwotICAgIGZsb2F0IG1fbGlu
ZVdpZHRoOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDww
PigpOyB9CiB9OwogCi1jbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUGF0aChwYXRoKSk7
Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQordXNpbmcgRmlsbFBhdGhCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxQ
YXRoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0aCYpLAorICAgICZH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoLAorICAgIGNvbnN0IFBhdGgKKz47CiAKK2NsYXNzIEZp
bGxQYXRoIDogcHVibGljIEZpbGxQYXRoQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0
YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxQYXRoQmFzZTo6Y3JlYXRlPEZpbGxQYXRoPjsKKyAgICB1
c2luZyBGaWxsUGF0aEJhc2U6OkZpbGxQYXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgU3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJv
a2VQYXRoKQotICAgICAgICAsIG1fcGF0aChwYXRoKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIGNvbnN0IFBhdGggbV9wYXRoOwotICAgIEZsb2F0UG9pbnQgbV9ibG9j
a0xvY2F0aW9uOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVu
dDwwPigpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogfTsKIAotY2xhc3MgU3Ryb2tlRWxsaXBzZSA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJva2VFbGxp
cHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU3Ryb2tlRWxsaXBzZShyZWN0KSk7Ci0gICAgfQotCi0gICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KK3VzaW5nIEZpbGxFbGxpcHNlQmFz
ZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSwKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmZpbGxFbGxpcHNlLAorICAgIEZsb2F0UmVjdAorPjsKIAorY2xhc3MgRmlsbEVsbGlwc2Ug
OiBwdWJsaWMgRmlsbEVsbGlwc2VCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGlj
IGF1dG8gY3JlYXRlID0gRmlsbEVsbGlwc2VCYXNlOjpjcmVhdGU8RmlsbEVsbGlwc2U+OworICAg
IHVzaW5nIEZpbGxFbGxpcHNlQmFzZTo6RmlsbEVsbGlwc2VCYXNlOwogcHJpdmF0ZToKLSAgICBT
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZSkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICB7
Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OworICAg
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9Owog
Ci1jbGFzcyBDbGVhclJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJSZWN0KHJlY3QpKTsKLSAgICB9Ci0K
LSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQordXNpbmcgU3Ry
b2tlUmVjdEJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6U3Ryb2tlUmVjdCwKKyAg
ICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSwKKyAg
ICAmR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0LAorICAgIEZsb2F0UmVjdCwgZmxvYXQKKz47
CiAKK2NsYXNzIFN0cm9rZVJlY3QgOiBwdWJsaWMgU3Ryb2tlUmVjdEJhc2UgeworcHVibGljOgor
ICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTdHJva2VSZWN0QmFzZTo6Y3JlYXRl
PFN0cm9rZVJlY3Q+OworICAgIHVzaW5nIFN0cm9rZVJlY3RCYXNlOjpTdHJva2VSZWN0QmFzZTsK
IHByaXZhdGU6Ci0gICAgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Q2xlYXJSZWN0KQotICAgICAgICAsIG1fcmVjdChyZWN0
KQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0
IGJvdW5kcyA9IGFyZ3VtZW50PDA+KCk7CisgICAgICAgIGJvdW5kcy5leHBhbmQoYXJndW1lbnQ8
MT4oKSwgYXJndW1lbnQ8MT4oKSk7CisgICAgICAgIHJldHVybiBib3VuZHM7CiAgICAgfQotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0
OwogfTsKIAotI2lmIFVTRShDRykKLWNsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiA6IHB1YmxpYyBJ
dGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5U3Ryb2tlUGF0dGVybj4gY3JlYXRl
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5U3Ryb2tlUGF0dGVy
bik7Ci0gICAgfQordXNpbmcgU3Ryb2tlUGF0aEJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6U3Ryb2tlUGF0aCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBh
dGgmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoLAorICAgIGNvbnN0IFBhdGgK
Kz47CiAKK2NsYXNzIFN0cm9rZVBhdGggOiBwdWJsaWMgU3Ryb2tlUGF0aEJhc2UgeworcHVibGlj
OgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTdHJva2VQYXRoQmFzZTo6Y3Jl
YXRlPFN0cm9rZVBhdGg+OworICAgIHVzaW5nIFN0cm9rZVBhdGhCYXNlOjpTdHJva2VQYXRoQmFz
ZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlTdHJva2VQYXR0ZXJuKCkKLSAgICAgICAgOiBJdGVtKEl0
ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3Qg
b3ZlcnJpZGUKICAgICB7Ci0gICAgfQorICAgICAgICAvLyBGSVhNRTogTmVlZCB0byB0YWtlIHN0
cm9rZSB0aGlja25lc3MgaW50byBhY2NvdW50IGNvcnJlY3RseSwgdmlhIENHUGF0aEJ5U3Ryb2tp
bmdQYXRoKCkuCisgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tl
VGhpY2tuZXNzKCk7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gYXJndW1lbnQ8MD4oKS5ib3VuZGlu
Z1JlY3QoKTsKKyAgICAgICAgYm91bmRzLmV4cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRo
aWNrbmVzcyk7CisgICAgICAgIHJldHVybiBib3VuZHM7CisgICAgfQogfTsKIAotY2xhc3MgQXBw
bHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFw
cGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKLSAgICB9Cit1c2luZyBTdHJva2VFbGxpcHNlQmFzZSA9
IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlLAorICAgIHZvaWQgKEdy
YXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlRWxsaXBzZSwKKyAgICBGbG9hdFJlY3QKKz47CiAKK2NsYXNzIFN0cm9rZUVsbGlw
c2UgOiBwdWJsaWMgU3Ryb2tlRWxsaXBzZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBz
dGF0aWMgYXV0byBjcmVhdGUgPSBTdHJva2VFbGxpcHNlQmFzZTo6Y3JlYXRlPFN0cm9rZUVsbGlw
c2U+OworICAgIHVzaW5nIFN0cm9rZUVsbGlwc2VCYXNlOjpTdHJva2VFbGxpcHNlQmFzZTsKIHBy
aXZhdGU6Ci0gICAgQXBwbHlGaWxsUGF0dGVybigpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6
QXBwbHlGaWxsUGF0dGVybikKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQog
ICAgIHsKKyAgICAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlj
a25lc3MoKTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGFyZ3VtZW50PDA+KCk7CisgICAg
ICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOworICAg
ICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiB9OwotI2VuZGlmCi0KLWNsYXNzIEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseURl
dmljZVNjYWxlRmFjdG9yPiBjcmVhdGUoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9y
KSk7Ci0gICAgfQogCi0gICAgZmxvYXQgc2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3Nj
YWxlRmFjdG9yOyB9Cit1c2luZyBDbGVhclJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkNsZWFyUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZs
b2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCwKKyAgICBGbG9hdFJl
Y3QKKz47CiAKK2NsYXNzIENsZWFyUmVjdCA6IHB1YmxpYyBDbGVhclJlY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gQ2xlYXJSZWN0QmFzZTo6Y3Jl
YXRlPENsZWFyUmVjdD47CisgICAgdXNpbmcgQ2xlYXJSZWN0QmFzZTo6Q2xlYXJSZWN0QmFzZTsK
IHByaXZhdGU6Ci0gICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikK
LSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yKQotICAgICAg
ICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX3Nj
YWxlRmFjdG9yOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVu
dDwwPigpOyB9CiB9OwogCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgY29uc3QgSXRlbSYpOworaW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQoreworICAgIFRleHRTdHJlYW06
Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworICAgIGl0ZW0uZHVtcCh0cyk7CisgICAgcmV0dXJuIHRz
OworfQorCitpbmxpbmUgV1RGOjpDU3RyaW5nIEl0ZW06OmR1bXAoKSBjb25zdAoreworICAgIFRl
eHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7CisgICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51
dGY4KCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RS
QVdJTkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9i
amVjdCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0ZTsgfSBcCisjZGVmaW5lIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfR0VPTUVUUllJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJl
ZGljYXRlKSBcCisgICAgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtKSB7IHJldHVybiBpdGVtLnByZWRpY2F0
ZTsgfSBcCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2luZ0l0ZW0sIGlzRHJhd2luZ0l0ZW0o
KSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfR0VPTUVUUllJVEVNKEdlb21l
dHJ5SXRlbSwgaXNHZW9tZXRyeUl0ZW0oKSkKIAogI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAg
ICBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1Zh
bHVlVHlwZU5hbWUpIFwKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5cGVOYW1lOyB9IFwKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFNhdmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShUcmFuc2xhdGUpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUm90YXRlKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNjYWxlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKENvbmNhdGVuYXRlQ1RNKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKFNldFN0YXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKFNldExpbmVDYXApCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oU2V0TGluZURhc2gpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oU2V0TGluZUpvaW4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oU2V0TWl0ZXJMaW1pdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShDbGlwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXQp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcE91dFRvUGF0aCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwUGF0aCkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3R2x5cGhzKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRJbWFnZSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRTY2FsZWRJbWFnZSkKLSNpZiBVU0Uo
Q0cpIHx8IFVTRShDQUlSTykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShEcmF3TmF0aXZlSW1hZ2UpCi0jZW5kaWYKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShEcmF3UGF0dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3UmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShEcmF3TGluZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
TGluZXNGb3JUZXh0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRHJhd0VsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRHJhd1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
RHJhd0ZvY3VzUmluZ1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oRHJhd0ZvY3VzUmluZ1JlY3RzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKEZpbGxSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KEZpbGxSZWN0V2l0aENvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEZpbGxSZWN0V2l0aEdyYWRpZW50KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKEZpbGxDb21wb3NpdGVkUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShGaWxsUm91bmRlZFJlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRmlsbEVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShTdHJva2VQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFN0cm9rZUVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oQ2xlYXJSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi0jaWYgVVNFKENHKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQotI2VuZGlm
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNo
YWRvdykKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVh
MjczMjZiNTYxZjE5ZGUyMjQ3M2UzYmFjODNmNDRmYWEwOTJmZmQuLjIyNjViMzcxNDE0MDQ0NzM2
NDUwNDlhNjJkZDI2Yzc2YzI0MDE1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTIsMjEgKzUyLDIyIEBAIFJlY29yZGVyOjp+UmVjb3JkZXIoKQogCiB2b2lk
IFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQogewotICAgIGlmIChp
dGVtLmlzRHJhd2luZ0l0ZW0oKQogI2lmIFVTRShDRykKLSAgICAgICAgfHwgaXRlbS50eXBlKCkg
PT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybiB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlw
ZTo6QXBwbHlTdHJva2VQYXR0ZXJuCisgICAgaWYgKCFpczxHZW9tZXRyeUl0ZW0+KGl0ZW0pICYm
IGl0ZW0udHlwZSgpICE9IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4gJiYgaXRlbS50eXBl
KCkgIT0gSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCisjZWxzZQorICAgIGlmICghaXM8R2Vv
bWV0cnlJdGVtPihpdGVtKSkKICNlbmRpZgotICAgICkgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNG
cm9tTGFzdFN0YXRlID0gc3RhdGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRl
KCkubGFzdERyYXdpbmdTdGF0ZSk7Ci0gICAgICAgIGlmIChjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkg
ewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJw
cmUtZHJhd2luZywgc2F2aW5nIHN0YXRlICIgPDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uo
c3RhdGVDaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7Ci0gICAgICAgICAg
ICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChTZXRTdGF0ZTo6Y3JlYXRlKHN0YXRlQ2hhbmdlcy5tX3N0
YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOwotICAgICAgICAgICAgc3RhdGVDaGFuZ2VzLm1f
Y2hhbmdlRmxhZ3MgPSAwOwotICAgICAgICAgICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdT
dGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnRT
dGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50U3Rh
dGUoKS5zdGF0ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRl
KGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOworICAgIGlmIChjaGFuZ2VzRnJvbUxh
c3RTdGF0ZSkgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0g
PDwgInByZS1kcmF3aW5nLCBzYXZpbmcgc3RhdGUgIiA8PCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKKyAgICAg
ICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoU2V0U3RhdGU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKSk7
CisgICAgICAgIHN0YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0gMDsKKyAgICAgICAgY3VycmVu
dFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwogICAgIH0K
KyAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyA9IHRydWU7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCkBAIC05OSw0NCAr
MTAwLDUwIEBAIHZvaWQgUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkK
ICAgICBhcHBlbmRJdGVtKFNldE1pdGVyTGltaXQ6OmNyZWF0ZShtaXRlckxpbWl0KSk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01v
ZGUpCit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21v
b3RoaW5nKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0
ZW0+KGFwcGVuZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKGZvbnQsIGdseXBoQnVmZmVyLmdseXBo
cyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocywgRmxvYXRQb2lu
dCgpLCB0b0Zsb2F0U2l6ZShzdGFydFBvaW50KSwgc21vb3RoaW5nTW9kZSkpKTsKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdHbHlwaHM6
OmNyZWF0ZShtYWtlUmVmKGZvbnQpLCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBzdGFy
dFBvaW50LCBmb250U21vb3RoaW5nKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7
CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERy
YXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5n
T3B0aW9ucykpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihh
cHBlbmRJdGVtKERyYXdJbWFnZTo6Y3JlYXRlKG1ha2VSZWYoaW1hZ2UpLCBkZXN0aW5hdGlvbiwg
c291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1h
Z2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgRHJhd2luZ0l0
ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRJ
bWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2lu
ZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0
PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKG1ha2VSZWYo
aW1hZ2UpLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKICAgICByZXR1
cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNv
cmRlcjo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2Nh
bGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAg
RHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShE
cmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0
aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7Cisg
ICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3
VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKG1ha2VSZWYoaW1hZ2UpLCBkZXN0aW5hdGlvbiwgc291
cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMp
KSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKICAgICByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyNpZiBV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkgfHwgVVNFKENBSVJPKQogdm9pZCBSZWNvcmRlcjo6ZHJh
d05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBk
b3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShp
bWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgb3JpZW50
YXRpb24pKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBw
ZW5kSXRlbShEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pKSk7CiAgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKIH0KKyAgICAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVTY2Fs
ZWRJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGZsb2F0IHNjYWxlRmFjdG9yLCBj
b25zdCBJbnRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHNvdXJjZSkKK3sKKyAg
ICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdO
YXRpdmVTY2FsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBzY2FsZUZhY3RvciwgZGVzdGluYXRpb24s
IHNvdXJjZSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfSAgICAKICNlbmRp
ZgogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRl
bT4oYXBwZW5kSXRlbShEcmF3UGF0dGVybjo6Y3JlYXRlKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgYmxlbmRNb2RlKSkpOwor
ICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJh
d1BhdHRlcm46OmNyZWF0ZShtYWtlUmVmKGltYWdlKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGJsZW5kTW9kZSkpKTsKICAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCkBAIC0yMDksNyArMjE2LDcgQEAgQWZmaW5lVHJh
bnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2Nh
bGUpCiAKIHZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihh
cHBlbmRJdGVtKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSkpOworICAg
IGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oQmVnaW5U
cmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKG9wYWNpdHkpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVu
dChuZXdJdGVtKTsKIH0KIApAQCAtMjIwLDEyMSArMjI3LDE0NyBAQCB2b2lkIFJlY29yZGVyOjpl
bmRUcmFuc3BhcmVuY3lMYXllcigpCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIERyYXdpbmdJdGVt
JiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1JlY3Q6OmNy
ZWF0ZShyZWN0LCBib3JkZXJUaGlja25lc3MpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25j
YXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3UmVjdDo6Y3JlYXRlKHJlY3QsIGJvcmRl
clRoaWNrbmVzcykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lk
IFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lOjpjcmVhdGUocG9pbnQxLCBwb2ludDIpKSk7
CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShE
cmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpCit2b2lkIFJlY29yZGVyOjpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ry
b2tlU3R5bGUpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5n
SXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0
b0Zsb2F0U2l6ZShwb2ludCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VU
aGlja25lc3MpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4o
YXBwZW5kSXRlbShEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUocG9pbnQsIHdpZHRocywgcHJpbnRp
bmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgc3R5bGUpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5n
SXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUocG9pbnQs
IHdpZHRoLCBzdHlsZSkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJ
dGVtPihhcHBlbmRJdGVtKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShwb2ludCwg
d2lkdGgsIHN0eWxlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERy
YXdFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8
R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKICAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCisjaWYgVVNFKENHKQogdm9pZCBSZWNv
cmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdQYXRoOjpjcmVhdGUo
cGF0aCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBl
bmRJdGVtKERyYXdQYXRoOjpjcmVhdGUocGF0aCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogfQorI2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcikpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBl
bmRJdGVtKERyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUocGF0aCwgd2lkdGgsIG9mZnNldCwgY29s
b3IpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdGb2N1c1Jp
bmdSZWN0czo6Y3JlYXRlKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdGb2N1c1Jp
bmdSZWN0czo6Y3JlYXRlKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorICAgIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ljb24o
SWNvbiYgaWNvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ljb246OmNyZWF0ZShtYWtl
UmVmKGljb24pLCByZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdXaWRnZXQoV2lkZ2V0JiB3aWRnZXQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBw
ZW5kSXRlbShEcmF3V2lkZ2V0OjpjcmVhdGUobWFrZVJlZih3aWRnZXQpLCByZWN0KSkpOworICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdTY3Jv
bGxiYXIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
YXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3U2Ny
b2xsYmFyOjpjcmVhdGUobWFrZVJlZihzY3JvbGxiYXIpLCByZWN0KSkpOworICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdUaGVtZShUaGVtZSYg
dGhlbWUsIENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxv
YXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5
c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCit7CisgICAgYXV0byYgbmV3
SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3VGhlbWU6OmNyZWF0
ZSh0aGVtZSwgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3
LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCB1c2VTeXN0ZW1BcHBlYXJhbmNl
LCB1c2VEYXJrQXBwZWFyYW5jZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwog
fQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0
PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKSk7CiAgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgRHJhd2lu
Z0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVj
dFdpdGhDb2xvcjo6Y3JlYXRlKHJlY3QsIGNvbG9yKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBk
b3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRoQ29sb3I6OmNyZWF0
ZShyZWN0LCBjb2xvcikpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2
b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBn
cmFkaWVudCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJ
dGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUocmVjdCwgZ3JhZGll
bnQpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5k
SXRlbShGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSkpOwogICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxDb21wb3NpdGVkUmVjdDo6
Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSkpOworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRmlsbENvbXBvc2l0ZWRSZWN0Ojpj
cmVhdGUocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVu
dChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKEZpbGxSb3VuZGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBibGVuZE1v
ZGUpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5k
SXRlbShGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSkpOwog
ICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgRHJh
d2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
KSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRl
bShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwg
Y29sb3IpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxQYXRoOjpjcmVhdGUo
cGF0aCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBl
bmRJdGVtKEZpbGxQYXRoOjpjcmVhdGUocGF0aCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRl
bT4oYXBwZW5kSXRlbShGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgYXV0byYgbmV3
SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsRWxsaXBzZTo6Y3Jl
YXRlKHJlY3QpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihh
cHBlbmRJdGVtKFN0cm9rZVJlY3Q6OmNyZWF0ZShyZWN0LCBsaW5lV2lkdGgpKSk7CisgICAgYXV0
byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShTdHJva2VSZWN0
OjpjcmVhdGUocmVjdCwgbGluZVdpZHRoKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3du
Y2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oU3Ryb2tlUGF0aDo6Y3JlYXRlKHBhdGgpKSk7
CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ry
b2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VFbGxpcHNlOjpj
cmVhdGUocmVjdCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVt
PihhcHBlbmRJdGVtKFN0cm9rZUVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOwogICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShDbGVhclJlY3Q6OmNyZWF0ZShyZWN0KSkpOworICAgIGF1
dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oQ2xlYXJSZWN0
OjpjcmVhdGUocmVjdCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCkBA
IC0zNzgsOSArNDExLDkgQEAgSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpCiAgICAgcmV0
dXJuIEludFJlY3QoLTIwNDgsIC0yMDQ4LCA0MDk2LCA0MDk2KTsKIH0KIAotdm9pZCBSZWNvcmRl
cjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKQordm9p
ZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFNpemUmIGJ1ZmZlckRlc3Rp
bmF0aW9uU2l6ZSkKIHsKLSAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIu
Iik7CisgICAgYXBwZW5kSXRlbShDbGlwVG9JbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlLCBkZXN0
UmVjdCwgYnVmZmVyRGVzdGluYXRpb25TaXplKSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCkBAIC00MDIsNyArNDM1
LDcgQEAgSXRlbSYgUmVjb3JkZXI6OmFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYgaXRlbSkKICAgICBy
ZXR1cm4gbV9kaXNwbGF5TGlzdC5hcHBlbmQoV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mIGl0ZW0pIGNvbnN0Cit2b2lkIFJl
Y29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50KEdlb21ldHJ5SXRlbSYgaXRlbSkgY29uc3QKIHsKICAg
ICBpZiAoc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdy
YXBoaWNzQ29udGV4dCgpKSkKICAgICAgICAgaXRlbS5zZXRFeHRlbnQoZXh0ZW50RnJvbUxvY2Fs
Qm91bmRzKHJlY3QudmFsdWUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmgKaW5kZXggYzVhYzcwOTEzOTVmYTRmZTgzYTMxZDJjODhkYjFlODhhN2FkYTNlNC4uZmU1YjU1
OTgxMjEzMTM4ODdhNTljZmExNTE4NGUzNGMwZDMwYzI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5oCkBAIC00NSw4ICs0NSw2IEBAIHN0cnVjdCBJbWFnZVBhaW50aW5n
T3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgRHJhd2luZ0l0ZW07
Ci0KIGNsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKQEAgLTkyLDE4ICs5MCwyNiBA
QCBwcml2YXRlOgogICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFn
ZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7
CiAjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCiAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29u
c3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24pIG92ZXJyaWRlOworICAgIHZvaWQgZHJh
d05hdGl2ZVNjYWxlZEltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgZmxvYXQgc2NhbGVGYWN0
b3IsIGNvbnN0IEludFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgc291cmNlKSBv
dmVycmlkZTsKICNlbmRpZgogICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpIG92ZXJyaWRlOworICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyNpZiBVU0Uo
Q0cpCiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CisjZW5kaWYKIAog
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZHJhd0ljb24oSWNvbiYsIGNvbnN0IEZs
b2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1dpZGdldChXaWRnZXQmLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3U2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdUaGVtZShUaGVtZSYsIENvbnRy
b2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9h
dCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvciwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CkBAIC0xMjMsNyArMTI5LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKICAgICBJbnRSZWN0IGNsaXBCb3Vu
ZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihj
b25zdCBOYXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0U2l6ZSYgYnVmZmVyRGVzdGluYXRpb25TaXplKSBvdmVycmlkZTsKICAgICAKICAgICB2b2lk
IGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwogCkBAIC0xMzMsNyArMTM5
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKTsKIAog
ICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29u
c3Q7Ci0gICAgdm9pZCB1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJikgY29uc3Q7CisgICAg
dm9pZCB1cGRhdGVJdGVtRXh0ZW50KEdlb21ldHJ5SXRlbSYpIGNvbnN0OwogICAgIAogICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBj
bGlwQm91bmRzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5j
cHAKaW5kZXggOGZlYWEyZjVkNzUzMjhlNDM2YmY5ZDg4YjhkYzA1YmFjMWMyZTFmMy4uZjMxYzg1
YjI4ZWU5YzUzY2U2MWVmOGYzYThkMzNjZGMyNzEyZTYyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAtNDAsOCArNDAsNiBAQCBSZXBsYXllcjo6UmVwbGF5
ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QpCiB7CiB9CiAKLVJlcGxheWVyOjp+UmVwbGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KIHN0ZDo6dW5p
cXVlX3B0cjxEaXNwbGF5TGlzdD4gUmVwbGF5ZXI6OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBib29sIHRyYWNrUmVwbGF5TGlzdCkKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0o
RGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVwbGF5aW5nIHdpdGggY2xpcCAiIDw8IGluaXRp
YWxDbGlwKTsKQEAgLTUxLDEzICs0OSwxNSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+
IFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgYm9vbAogICAg
IGlmIChVTkxJS0VMWSh0cmFja1JlcGxheUxpc3QpKQogICAgICAgICByZXBsYXlMaXN0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxEaXNwbGF5TGlzdD4oKTsKIAorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihtX2NvbnRleHQpOworICAgIAogICAgIHNpemVfdCBudW1JdGVtcyA9
IG1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1JdGVtczsgKytpKSB7CiAgICAgICAgIGF1dG8mIGl0ZW0gPSBtX2Rpc3BsYXlMaXN0Lmxpc3Qo
KVtpXS5nZXQoKTsKIAotICAgICAgICBpZiAoIWluaXRpYWxDbGlwLmlzWmVybygpICYmIGlzPERy
YXdpbmdJdGVtPihpdGVtKSkgewotICAgICAgICAgICAgY29uc3QgRHJhd2luZ0l0ZW0mIGRyYXdp
bmdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGl0ZW0pOwotICAgICAgICAgICAgaWYgKGRy
YXdpbmdJdGVtLmV4dGVudEtub3duKCkgJiYgIWRyYXdpbmdJdGVtLmV4dGVudCgpLmludGVyc2Vj
dHMoaW5pdGlhbENsaXApKSB7CisgICAgICAgIGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYg
aXM8R2VvbWV0cnlJdGVtPihpdGVtKSkgeworICAgICAgICAgICAgY29uc3QgYXV0byYgZ2VvbWV0
cnlJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihpdGVtKTsKKyAgICAgICAgICAgIGlmIChn
ZW9tZXRyeUl0ZW0uZXh0ZW50S25vd24oKSAmJiAhZ2VvbWV0cnlJdGVtLmV4dGVudCgpLmludGVy
c2VjdHMoaW5pdGlhbENsaXApKSB7CiAgICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERp
c3BsYXlMaXN0cywgc3RyZWFtIDw8ICJza2lwcGluZyAiIDw8IGkgPDwgIiAiIDw8IGl0ZW0pOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVw
bGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlcGxheWVyLmgKaW5kZXggNGY5NjhlODQ2YzY1NzZhYjU1NTlhZjEyNDAxMjQx
MTZiZTYzMWE2ZS4uYzAzMTk4OTJkNWEyMDI4MTZhZjg1ZjU1NWE3ZGU1YzkxNzYyZGUxZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCkBAIC00MCw4ICs0MCw2IEBAIGNs
YXNzIFJlcGxheWVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXBsYXllcik7CiBwdWJs
aWM6CiAgICAgUmVwbGF5ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRGlzcGxheUxpc3QmKTsK
LSAgICB+UmVwbGF5ZXIoKTsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gcmVw
bGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAgPSB7IH0sIGJvb2wgdHJhY2tSZXBsYXlM
aXN0ID0gZmFsc2UpOwogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAppbmRleCBhZjE4NWE1NGNkZDQ5ZDIwNDY4NjVl
NjkzYzVhNzNjOTRjNThiMDRiLi5mMGFlNWNmY2ExOWFiYmZjYjk0MDBkODEzNWIzNGM4ZjMxN2Mz
MDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNv
bkd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25H
dGsuY3BwCkBAIC0xMTMsMTEgKzExMyw4IEBAIFJlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29u
Rm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKICAgICByZXR1cm4gMDsK
IH0KIAotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgSWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29udGV4
dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFRPRE86IFNj
YWxlL2NsaXAgdGhlIGltYWdlIGlmIG5lY2Vzc2FyeS4KICAgICBjYWlyb190KiBjciA9IGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgY2Fpcm9fc2F2ZShjcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCmluZGV4IGNlZTUx
NmUxNDQwZTc4ZWI1NDM3MzlhYjJhMDM4ZDg3MzYyZjdkNDQuLmRiZDgzZDU3YzBlNjU4N2FmMjIy
ZDdjN2E3NWRiZjQ0YWRhMDg5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9JY29uSU9TLm1tCkBAIC01NSwxMSArNTUsOCBAQCBSZWZQdHI8SWNvbj4gSWNv
bjo6Y3JlYXRlSWNvbkZvckltYWdlKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2Up
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKGltYWdlKSk7CiB9CiAKLXZvaWQgSWNvbjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQordm9pZCBJY29uOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29udGV4dC5wYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKIAogICAgIGZsb2F0IHdpZHRoID0gQ0dJbWFnZUdl
dFdpZHRoKG1fY2dJbWFnZS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9JY29uTWFjLm1tCmluZGV4IDYxNDNiNTFkNDM2NDVkNWFkNDhjMzk1YWY3YzRl
YTI2NDMzZDdjNGEuLmU4NTAzMDhkMGJjODU3MjdiOTUwYzY2YzE2NmFmN2Q1NGFkOTQyZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCkBA
IC05MSwxMyArOTEsOSBAQCBSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvclVUSShjb25z
dCBTdHJpbmcmIFVUSSkKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oaW1hZ2UpKTsKIH0K
IAotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3ZvaWQgSWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29udGV4dC5w
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBsb2NhbEN1cnJlbnRHQyhjb250ZXh0KTsKLQogICAgIFttX25zSW1hZ2Ug
ZHJhd0luUmVjdDpyZWN0IGZyb21SZWN0Ok5TTWFrZVJlY3QoMCwgMCwgW21fbnNJbWFnZSBzaXpl
XS53aWR0aCwgW21fbnNJbWFnZSBzaXplXS5oZWlnaHQpIG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5n
T3BlcmF0aW9uU291cmNlT3ZlciBmcmFjdGlvbjoxLjBmXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCA5YTk1
NGUyMmI5NGJiYWU5Y2IxNzVmZWFmYzA0MmZmZmViNWFmZTFkLi5hM2UwMTdhNWU2YmJjZTAyN2Y3
MTk2MWQ2NjZiZTFkMGY1ZmYzZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtNTcwLDYgKzU3MCwxMSBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFn
ZVB0ciYgaW1hZ2UsIGNvbnN0CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUlt
YWdlPihSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PihpbWFnZS5nZXQoKSksIGRlc3RSZWN0LCBzcmNS
ZWN0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbiwgc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpKTsKIH0KIAordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlU2Nh
bGVkSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBj
b25zdCBJbnRSZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQor
ICAgIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgc3RydWN0IERyYXdQ
YXR0ZXJuIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4sIEludFNpemUsIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFu
c2Zvcm0sIEZsb2F0UG9pbnQsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+IHsKQEAgLTYz
MSw3ICs2MzYsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludAogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRl
LnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlh
cykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0
IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxGbG9hdFBvaW50LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yLCBmbG9hdD4gewogICAg
ICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjQ3LDcgKzY1
Miw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzCiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
VU5VU0VEX1BBUkFNKHN0cm9rZVRoaWNrbmVzcyk7CisgICAgVU5VU0VEX1BBUkFNKHN0cm9rZVN0
eWxlKTsKICAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CiAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHdpZHRocywgcHJp
bnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MpKTsKIH0KQEAgLTY5MSwxMCArNjk2LDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ry
b2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJikKLXsK
LX0KLQogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKICAgICBzdHJ1Y3QgRHJhd0ZvY3VzUmluZyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPFBhdGgsIGZsb2F0LCBDb2xvcj4gewpAQCAtNzM1LDYgKzczNiwyNiBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdAogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdGb2N1
c1Jpbmc+KHJlY3RzLCB3aWR0aCwgY29sb3IpKTsKIH0KIAordm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICBBU1NFUlRf
Tk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorICAgIAordm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKQoreworICAgIEFTU0VSVF9O
T1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAgCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgQVNT
RVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KKyAgICAKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9pZCosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkK
K3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorCiB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OnNhdmUoKQogewogICAgIHN0cnVjdCBTYXZlIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7CkBAIC0xMDUzLDcgKzEwNzQsNyBAQCBJbnRS
ZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKQogICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KHN0YXRlLmN0bUludmVyc2UubWFwUmVjdChzdGF0ZS5jbGlwQm91bmRzKSk7
CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgTmF0aXZlSW1hZ2VQdHIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFNpemUmKQogewog
ICAgIHN0cnVjdCBDbGlwVG9JbWFnZUJ1ZmZlciBmaW5hbDogUGFpbnRpbmdPcGVyYXRpb24sIE9w
ZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdD4gewogICAgICAg
ICB2aXJ0dWFsIH5DbGlwVG9JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKQEAgLTEwNjksMTIgKzEw
OTAsMTAgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFIKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8g
c3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKQotICAgICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4oc3VyZmFjZS5nZXQoKSksIGRlc3RSZWN0KSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlLCBkZXN0UmVjdCkpOwogfQogCiB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29z
aWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKaW5kZXgg
ZGM0ODQ5ZTVjZjRhOGNhOTJmMzlhMjY1Y2Q5OWMxNDNhOThjZDUzMC4uYThhZGM3NTNjZGMxMDA3
N2M4MTg1M2E4ODE3ZjEzYWI4NzI3M2QxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8v
Tmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaApAQCAtNjgsMTcgKzY4LDIyIEBAIHByaXZh
dGU6CiAgICAgV2ViQ29yZTo6SW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKFdlYkNvcmU6
OkltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAgICAg
V2ViQ29yZTo6SW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKFdlYkNvcmU6OkltYWdlJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6SW1hZ2U6OlRpbGVSdWxlLCBXZWJDb3Jl
OjpJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgV2ViQ29yZTo6TmF0aXZl
SW1hZ2VQdHImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVy
YXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlLCBXZWJDb3JlOjpJbWFnZU9yaWVudGF0aW9uKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdOYXRpdmVTY2FsZWRJbWFnZShjb25zdCBXZWJDb3JlOjpOYXRp
dmVJbWFnZVB0ciYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdQYXR0ZXJuKFdlYkNvcmU6Oklt
YWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJh
dG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUgPSBXZWJDb3JlOjpCbGVuZE1vZGVOb3JtYWwpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9h
dCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5Jiwg
Ym9vbCwgYm9vbCwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwg
V2ViQ29yZTo6U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQsIFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29u
c3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRl
OworICAgIAorICAgIHZvaWQgZHJhd0ljb24oV2ViQ29yZTo6SWNvbiYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1dpZGdldChXZWJDb3JlOjpXaWRn
ZXQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3U2Ny
b2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdUaGVtZShXZWJDb3JlOjpUaGVtZSYsIFdlYkNvcmU6OkNvbnRy
b2xQYXJ0LCBXZWJDb3JlOjpDb250cm9sU3RhdGVzJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFw
cGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBz
YXZlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CkBAIC05OCw3ICsx
MDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29y
ZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwogICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6Ok5hdGl2ZUltYWdlUHRyJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dERpcmVjdDJELmNwcAppbmRleCAwMjlkMDc5Y2MxYzIwMDM5OGE3ODExZTY2ZjNl
MzNlNzkzOTYxYmFjLi4xYWJmNGZhYzEzYjBhZGEyM2FkYmRmMDA0YjExYjM4YTgyYzIyYjVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKQEAgLTE3MDgsNyArMTcwOCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBjb25zdCBEYXNoQXJyYXkmCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc1JlY29y
ZGluZygpKSB7Ci0gICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+ZHJhd0xpbmVzRm9yVGV4
dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNrbmVzcygp
KTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50
LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSWNvbldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSWNvbldpbi5jcHAKaW5kZXggNzk5ZTM0NzQwMzk0MDYzNTEwZTk1NGI2YWYzMDk5OGU3ZDI1
ZTJhZC4uMThmZTZmNzkxMjc1ZWFkNTljMDM0MjNiYWQ4YzdkNGE4MmQ5Y2ZiZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcApAQCAtNzQs
MTEgKzc0LDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNvbiho
SWNvbikpOwogfQogCi12b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBJY29uOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByKSBjb25zdAogewotICAgIGlmIChjb250
ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgTG9jYWxXaW5k
b3dzQ29udGV4dCB3aW5kb3dDb250ZXh0KGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QocikpOwog
ICAgIERyYXdJY29uRXgod2luZG93Q29udGV4dC5oZGMoKSwgci54KCksIHIueSgpLCBtX2hJY29u
LCByLndpZHRoKCksIHIuaGVpZ2h0KCksIDAsIDAsIERJX05PUk1BTCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93cGUvSWNvbldQRS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93cGUvSWNvbldQRS5jcHAKaW5kZXggNzZhMjFk
YTM2ZjM2ZWY5MWFhMTc4ODliOGZjMTE5YjIyMmU3MjViZS4uMWVkYjdkOWY1YzZkMTM5YWU4ZjY3
NTFjMWNjYTMyNWQyOTRlMjc2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dwZS9JY29uV1BFLmNwcApAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEljb246On5JY29uKCkgPSBkZWZhdWx0OwogCi12b2lkIEljb246OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEljb246OnBsYXRmb3JtUGFpbnQo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAppbmRleCA4NzQxMjkzMzk3OTNhZDJl
NmIzZGFkOWY3MTlmYTA2MDViNDUyMGFkLi5mMzhhMGE0ZTE1Y2IxOWRkNWMxMzhiOWMzYTFjNWEy
ZTNhZTk2NjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcApA
QCAtODAsNyArODAsMTIgQEAgdm9pZCBXaWRnZXQ6OmhpZGUoKQogICAgICAgICBndGtfd2lkZ2V0
X2hpZGUocGxhdGZvcm1XaWRnZXQoKSk7CiB9CiAKLXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3Zv
aWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit7CisgICAgY29udGV4dC5kcmF3V2lk
Z2V0KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBXaWRnZXQ6OnBsYXRmb3JtUGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2lkZ2V0SU9TLm1tCmluZGV4IDhiMWU4YjU0YjVjZTI3MGYyNDhkYWVjZWQ1MjRmNzcy
YTE1NGU5ZWIuLmRjYzZhNDkwNTIwOTk0YWE0NTcwMjEyY2U0YmMyZGRiYjcxZWY2MWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQpAQCAtMTQxLDE0ICsxNDEsMTYg
QEAgTlNWaWV3KiBXaWRnZXQ6OmdldE91dGVyVmlldygpIGNvbnN0CiAgICAgcmV0dXJuIHZpZXc7
CiB9CiAKLXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJl
Y3QmIHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdp
blBhaW50UG9saWN5KQogewotICAgIGlmIChwLnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOworICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhpcywgcmVjdCk7Cit9CiAgICAgCit2
b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CiAgICAgTlNWaWV3ICp2aWV3ID0gZ2V0T3V0ZXJWaWV3KCk7CiAK
LSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBD
R0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7CiAKICAgICBOU1JlY3Qgdmlld0ZyYW1lID0g
W3ZpZXcgZnJhbWVdOwpAQCAtMTU2LDcgKzE1OCw3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChHcmFw
aGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xp
CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgdmlld0ZyYW1lLm9yaWdpbi54
IC0gdmlld0JvdW5kcy5vcmlnaW4ueCwgdmlld0ZyYW1lLm9yaWdpbi55IC0gdmlld0JvdW5kcy5v
cmlnaW4ueSk7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW3ZpZXcg
ZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6ciBmcm9tVmlldzpb
dmlldyBzdXBlcnZpZXddXSBpbkNvbnRleHQ6Y2dDb250ZXh0XTsKKyAgICBbdmlldyBkaXNwbGF5
UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Olt2aWV3
IHN1cGVydmlld11dIGluQ29udGV4dDpjZ0NvbnRleHRdOwogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCmluZGV4IDQ5MDI4ZjFiNDNjNzNjMzVjYzMx
MzcwYTdkZjRlOTg0MTRmZGM2MjYuLmU5ZjMwM2QzZDFiZmFkZjE3YjY3ZDhkMzZlNWU4YjIxNTc0
ZDZmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCkBAIC01Myw3ICs1
Myw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2Uo
Q29udHJvbFBhcnQgcGFydCkgY29uc3QgZmluYWwgeyByZXR1cm4gcGFydCA9PSBQdXNoQnV0dG9u
UGFydDsgfQogCi0gICAgdm9pZCBwYWludChDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9s
bFZpZXcqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIGZpbmFsOwor
ICAgIHZvaWQgcGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmLCBDb250cm9sUGFydCwgQ29u
dHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rv
ciwgdm9pZCogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VT
Y2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJh
bmNlKSBmaW5hbDsKICAgICB2b2lkIGluZmxhdGVDb250cm9sUGFpbnRSZWN0KENvbnRyb2xQYXJ0
LCBjb25zdCBDb250cm9sU3RhdGVzJiwgRmxvYXRSZWN0JiwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3QgZmluYWw7CiAKICAgICBib29sIHVzZXJQcmVmZXJzUmVkdWNlZE1vdGlvbigpIGNvbnN0IGZp
bmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCmluZGV4IDQ4MzFmZmY0
Zjg4YWNlMTRjZmQwZmVmM2VhN2I4MWI3ODQzNzdkN2EuLmQ5MjM4NTYwMTk2ZGQzNjllNDg3OGZi
MjdlMjYyNjlmMzQyZjVkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9UaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMu
bW0KQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgYm9vbCBkcmF3Q2VsbEZvY3VzUmluZyhOU0Nl
bGwgKmNlbGwsIE5TUmVjdCBjZWxsRnJhbWUsIE5TVmlldyAqY29udHJvbFZpZQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUb2dnbGVCdXR0b24oQ29udHJvbFBhcnQg
YnV0dG9uVHlwZSwgQ29udHJvbFN0YXRlcyYgY29udHJvbFN0YXRlcywgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3Is
IFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBw
YWdlU2NhbGVGYWN0b3IpCitzdGF0aWMgdm9pZCBwYWludFRvZ2dsZUJ1dHRvbihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIENvbnRyb2xQYXJ0IGJ1dHRvblR5cGUsIENvbnRyb2xTdGF0ZXMmIGNv
bnRyb2xTdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rv
ciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0
IHBhZ2VTY2FsZUZhY3RvcikKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIApA
QCAtNTIwLDcgKzUyMCw3IEBAIHN0YXRpYyBOU0J1dHRvbkNlbGwgKmJ1dHRvbihDb250cm9sUGFy
dCBwYXJ0LCBjb25zdCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzCiAgICAgcmV0dXJuIGNl
bGw7CiB9CiAgICAgCi1zdGF0aWMgdm9pZCBwYWludEJ1dHRvbihDb250cm9sUGFydCBwYXJ0LCBD
b250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyog
c2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3Rv
cikKK3N0YXRpYyB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29u
dHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgY29udHJvbFN0YXRlcywgY29uc3QgRmxvYXRS
ZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3
LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKQogewogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIApAQCAtNTk2LDcgKzU5Niw3IEBAIHN0
YXRpYyBOU0NvbnRyb2xTaXplIHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQpCiAgICAgcmV0dXJuIE5TQ29udHJvbFNpemVNaW5pOwogfQogCi1zdGF0aWMg
dm9pZCBwYWludFN0ZXBwZXIoQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwg
U2Nyb2xsVmlldyopCitzdGF0aWMgdm9pZCBwYWludFN0ZXBwZXIoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVj
dCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyopCiB7CiAgICAgLy8gV2UgZG9uJ3QgdXNl
IE5TU3RlcHBlckNlbGwgYmVjYXVzZSB0aGVyZSBhcmUgbm8gd2F5cyB0byBkcmF3IGFuCiAgICAg
Ly8gTlNTdGVwcGVyQ2VsbCB3aXRoIHRoZSB1cCBidXR0b24gaGlnaGxpZ2h0ZWQuCkBAIC04NDgs
MjUgKzg0OCwyNSBAQCB2b2lkIFRoZW1lTWFjOjppbmZsYXRlQ29udHJvbFBhaW50UmVjdChDb250
cm9sUGFydCBwYXJ0LCBjb25zdCBDb250cm9sU3RhdGVzJiBzdAogICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKIH0KIAotdm9pZCBUaGVtZU1hYzo6cGFpbnQoQ29udHJvbFBhcnQgcGFydCwg
Q29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xs
VmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9v
bCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQordm9pZCBUaGVt
ZU1hYzo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENvbnRyb2xQYXJ0
IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0
LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7CiAgICAgTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5j
ZSBsb2NhbEFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSwgdXNlRGFya0FwcGVhcmFuY2Up
OwogCiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAg
ICAgICAgICAgcGFpbnRUb2dnbGVCdXR0b24ocGFydCwgc3RhdGVzLCBjb250ZXh0LCB6b29tZWRS
ZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxl
RmFjdG9yKTsKKyAgICAgICAgICAgIHBhaW50VG9nZ2xlQnV0dG9uKGNvbnRleHQsIHBhcnQsIHN0
YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3RvciwgcmVpbnRlcnByZXRfY2FzdDxTY3JvbGxWaWV3
Kj4oc2Nyb2xsVmlldyksIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICAgICAgcGFp
bnRUb2dnbGVCdXR0b24ocGFydCwgc3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6b29tRmFj
dG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsKKyAg
ICAgICAgICAgIHBhaW50VG9nZ2xlQnV0dG9uKGNvbnRleHQsIHBhcnQsIHN0YXRlcywgem9vbWVk
UmVjdCwgem9vbUZhY3RvciwgcmVpbnRlcnByZXRfY2FzdDxTY3JvbGxWaWV3Kj4oc2Nyb2xsVmll
dyksIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgRGVmYXVsdEJ1
dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBTcXVhcmVC
dXR0b25QYXJ0OgotICAgICAgICAgICAgcGFpbnRCdXR0b24ocGFydCwgc3RhdGVzLCBjb250ZXh0
LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3Rvciwg
cGFnZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIHBhaW50QnV0dG9uKGNvbnRleHQsIHBhcnQs
IHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3RvciwgcmVpbnRlcnByZXRfY2FzdDxTY3JvbGxW
aWV3Kj4oc2Nyb2xsVmlldyksIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKLSAg
ICAgICAgICAgIHBhaW50U3RlcHBlcihzdGF0ZXMsIGNvbnRleHQsIHpvb21lZFJlY3QsIHpvb21G
YWN0b3IsIHNjcm9sbFZpZXcpOworICAgICAgICAgICAgcGFpbnRTdGVwcGVyKGNvbnRleHQsIHN0
YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3RvciwgcmVpbnRlcnByZXRfY2FzdDxTY3JvbGxWaWV3
Kj4oc2Nyb2xsVmlldykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XaWRnZXRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1t
CmluZGV4IDk5NmMxOWQ1NTBmOTEzMWZhMDIzNjBiNjU3Zjg4YmU5ZjllNjY2YmIuLmI4YTdmYzkz
MjA2NmM4MTkyYWIyYmM4ZWUzNzA1OTc4ZjllMDg1ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dpZGdldE1hYy5tbQpAQCAtMTg2LDkgKzE4Niw5IEBAIE5TVmlldyAqV2lkZ2V0Ojpn
ZXRPdXRlclZpZXcoKSBjb25zdAogICAgIHJldHVybiB2aWV3OwogfQogCi12b2lkIFdpZGdldDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdp
blBhaW50UG9saWN5KQordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKIHsKLSAg
ICBpZiAocC5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgTlNWaWV3ICp2aWV3ID0gZ2V0T3V0ZXJWaWV3
KCk7CiAKQEAgLTIwMiwxMSArMjAyLDE3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0Nv
bnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpCiAjZW5k
aWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorICAgIAorICAgIGNvbnRleHQuZHJhd1dpZGdl
dCgqdGhpcywgcmVjdCk7Cit9CisgICAgCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CiAgICAgLy8gVGFr
ZSBhIHJlZmVyZW5jZSB0byB0aGlzIFdpZGdldCwgYmVjYXVzZSBzZW5kaW5nIG1lc3NhZ2VzIHRv
IHRoZSB2aWV3cyBjYW4gaW52b2tlIGFyYml0cmFyeQogICAgIC8vIGNvZGUsIHdoaWNoIGNhbiBk
ZXJlZiBpdC4KICAgICBSZWY8V2lkZ2V0PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAorICAgIE5T
VmlldyAqdmlldyA9IGdldE91dGVyVmlldygpOwogICAgIE5TR3JhcGhpY3NDb250ZXh0ICpjdXJy
ZW50Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CiAjcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCkBAIC0yMTQsNyArMjIwLDcgQEAgdm9pZCBXaWRn
ZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlP
cmlnaW5QYWludFBvbGkKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgY29tbW9uIGNhc2Ugb2YgZHJhd2luZyBpbnRvIGEgd2luZG93IG9yIGFuIGlu
Y2x1c2l2ZSBsYXllciwgb3IgcHJpbnRpbmcuCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKLSAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcg
Y29udmVydFJlY3Q6ciBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXV07CisgICAgICAgIFt2aWV3
IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZp
ZXc6W3ZpZXcgc3VwZXJ2aWV3XV1dOwogICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjM3LDcgKzI0Myw3IEBAIHZvaWQgV2lkZ2V0
OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3Jp
Z2luUGFpbnRQb2xpCiAgICAgICAgICAgICBzY3JvbGxWaWV3ID0gMDsKICAgICB9CiAKLSAgICBD
R0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKICNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdk
ZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICBBU1NFUlQoY2dDb250ZXh0ID09IFtjdXJyZW50
Q29udGV4dCBncmFwaGljc1BvcnRdKTsKQEAgLTI1OSw3ICsyNjUsNyBAQCB2b2lkIFdpZGdldDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdp
blBhaW50UG9saQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRl
ZC1kZWNsYXJhdGlvbnMiCiAgICAgICAgIE5TR3JhcGhpY3NDb250ZXh0ICpuc0NvbnRleHQgPSBb
TlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpjZ0NvbnRl
eHQgZmxpcHBlZDpOT107CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgICAgIFt2
aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnIgZnJvbVZp
ZXc6W3ZpZXcgc3VwZXJ2aWV3XV0gaW5Db250ZXh0Om5zQ29udGV4dF07CisgICAgICAgIFt2aWV3
IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZp
ZXc6W3ZpZXcgc3VwZXJ2aWV3XV0gaW5Db250ZXh0Om5zQ29udGV4dF07CiAgICAgfQogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dEZsYWdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRGbGFncy5oCmluZGV4IGY4Y2IzYmQyNjY3NDY1MWU2YWNlMDY4MmRiMGFmOGViZDVmODlmMzUu
LmVjZmUxN2JiMjE5MzVmZGY1ZGRmY2Y2YWIyNjhkMTdmNmFmMmU5YTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaApAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBlbnVtIGNsYXNzIFRleHRSZW5kZXJpbmdNb2RlIDogdWludDhfdCB7CkBAIC00
MCw2ICs0MiwxMiBAQCBlbnVtIGNsYXNzIEZvbnRTbW9vdGhpbmdNb2RlIDogdWludDhfdCB7CiAg
ICAgQW50aWFsaWFzZWQsCiAgICAgU3VicGl4ZWxBbnRpYWxpYXNlZAogfTsKKyAgICAKK2lubGlu
ZSBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Rm9udFNtb290aGluZ01vZGUmKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBGb250U21vb3Ro
aW5nTW9kZSB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CiAKIC8vIFRoaXMg
c2V0dGluZyBpcyB1c2VkIHRvIHByb3ZpZGUgd2F5cyBvZiBzd2l0Y2hpbmcgYmV0d2VlbiBtdWx0
aXBsZSByZW5kZXJpbmcgbW9kZXMgdGhhdCBtYXkgaGF2ZSBkaWZmZXJlbnQKIC8vIG1ldHJpY3Mu
IEl0IGlzIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9uIFdpbmRvd3Mu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwCmluZGV4IDhiZGMwMjNh
NDM3NjZkNDVmM2MxYTlmY2E4Y2UwOTNlZjkzNWQ3YjkuLmE1MWU0ZjE3NTk0MmQ4YmJlODRlN2Ez
N2UxOWJhZDY4MjY5MWUzYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9XaWRnZXRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaWRnZXRX
aW4uY3BwCkBAIC03NSw3ICs3NSwxMiBAQCB2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1
cnNvciYgY3Vyc29yKQogICAgIHZpZXctPmhvc3RXaW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7
CiB9CiAKLXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0
JiwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFp
bnRQb2xpY3kpCit7CisgICAgY29udGV4dC5kcmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KKwor
dm9pZCBXaWRnZXQ6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVj
dCYpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9UaGVt
ZVdQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvVGhlbWVXUEUuY3BwCmluZGV4
IGUyMmEyOTQ3ZWU3MjdhYWY4MGRiNzA2YWI3NjdhN2U2YTE4NDVmOTIuLjM0MGEwYWRhMGIzNGFl
NWVjN2NmZGEwMDZjZjg0ODVkY2U5N2UxZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dwZS9UaGVtZVdQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3Bl
L1RoZW1lV1BFLmNwcApAQCAtNTcsMjQgKzU3LDI0IEBAIExlbmd0aFNpemUgVGhlbWVXUEU6OmNv
bnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2Fk
CiAgICAgcmV0dXJuIFRoZW1lOjpjb250cm9sU2l6ZShwYXJ0LCBmb250Q2FzY2FkZSwgem9vbWVk
U2l6ZSwgem9vbUZhY3Rvcik7CiB9CiAKLXZvaWQgVGhlbWVXUEU6OnBhaW50KENvbnRyb2xQYXJ0
IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcq
LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wpCit2b2lkIFRoZW1lV1BFOjpwbGF0Zm9ybVBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRl
cyYgc3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3Is
IHZvaWQqICwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sKQogewogICAgIHN3aXRjaCAocGFydCkg
ewogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICBwYWludENoZWNrYm94KHN0YXRlcywg
Y29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7CisgICAgICAgIHBhaW50Q2hlY2tib3go
Y29udGV4dCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgIHBhaW50UmFkaW8oc3RhdGVzLCBjb250ZXh0
LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKKyAgICAgICAgcGFpbnRSYWRpbyhjb250ZXh0LCBz
dGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFB1c2hCdXR0b25QYXJ0OgotICAgICAgICBwYWludEJ1dHRvbihzdGF0ZXMsIGNvbnRleHQsIHpv
b21lZFJlY3QsIHpvb21GYWN0b3IpOworICAgICAgICBwYWludEJ1dHRvbihjb250ZXh0LCBzdGF0
ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgVGhlbWVXUEU6OnBhaW50Q2hlY2ti
b3goQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQpCit2b2lkIFRoZW1lV1BFOjpwYWludENoZWNr
Ym94KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25z
dCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0KQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKIApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQg
VGhlbWVXUEU6OnBhaW50Q2hlY2tib3goQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvCiAgICAgfQogfQogCi12b2lkIFRoZW1lV1BFOjpwYWludFJhZGlv
KENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0KQordm9pZCBUaGVtZVdQRTo6cGFpbnRSYWRpbyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxv
YXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFRoZW1l
V1BFOjpwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdAogICAgIH0KIH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnRCdXR0b24oQ29u
dHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQpCit2b2lkIFRoZW1lV1BFOjpwYWludEJ1dHRvbihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxvYXRS
ZWN0JiB6b29tZWRSZWN0LCBmbG9hdCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dwZS9UaGVtZVdQRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BF
LmgKaW5kZXggYjE3NmE4MDJmMmE5OGY0ZmEwYzAxYmFhNjdmNTk4ZGMwOGRkYzcyMy4uNDE0YWUw
YjIxMGM5YzZjMjdmY2ZiMmQyODZiYzU2Y2EyMDZkMjNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BFLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3BlL1RoZW1lV1BFLmgKQEAgLTMzLDExICszMywxMSBAQCBjbGFzcyBUaGVtZVdQRSBmaW5h
bCA6IHB1YmxpYyBUaGVtZSB7CiBwcml2YXRlOgogICAgIExlbmd0aFNpemUgY29udHJvbFNpemUo
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0
KSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0
ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgU2Nyb2xsVmll
dyosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkgZmluYWw7CisgICAgdm9pZCBwbGF0Zm9ybVBh
aW50KEdyYXBoaWNzQ29udGV4dCYsIENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQsIHZvaWQqLCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wpIGZpbmFs
OwogCi0gICAgdm9pZCBwYWludENoZWNrYm94KENvbnRyb2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCk7Ci0gICAgdm9pZCBwYWludFJhZGlvKENvbnRy
b2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCk7Ci0g
ICAgdm9pZCBwYWludEJ1dHRvbihDb250cm9sU3RhdGVzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQpOworICAgIHZvaWQgcGFpbnRDaGVja2JveChHcmFwaGljc0Nv
bnRleHQmLCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOworICAgIHZv
aWQgcGFpbnRSYWRpbyhHcmFwaGljc0NvbnRleHQmLCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQpOworICAgIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0Jiwg
Q29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9X
aWRnZXRXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1dpZGdldFdQRS5jcHAK
aW5kZXggNWY2NjMzMGM1MjM5ODdhNjcwODUwMDA0YjM5ODljY2FjNjQwZmI1ZC4uOTQ1MzM4NWQ4
N2FlYWNkMTFjMDdhMTk5NDI3ODljM2IzNTJiNzlhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3BlL1dpZGdldFdQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3BlL1dpZGdldFdQRS5jcHAKQEAgLTUyLDcgKzUyLDEyIEBAIEludFJlY3QgV2lkZ2V0Ojpm
cmFtZVJlY3QoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lOwogfQogCi12b2lkIFdpZGdldDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3VyaXR5T3JpZ2luUGFp
bnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQoreworICAgIGNv
bnRleHQuZHJhd1dpZGdldCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9y
bVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRQ
aGFzZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50UGhhc2UuaAppbmRleCAzN2Rj
OThjODc1MjA2ZGRjYjAzMjBiNjcxMGM4NDVhZTgxMjNhNjIzLi5jZmUzNWFmN2ZmNWM2OTg1NGZl
MmZjMjlhNjk3ODM2MmQzZTBmYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUGFpbnRQaGFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludFBoYXNl
LmgKQEAgLTQ5LDcgKzQ5LDggQEAgZW51bSBQYWludFBoYXNlIHsKICAgICBQYWludFBoYXNlQ29s
bGFwc2VkVGFibGVCb3JkZXJzLAogICAgIFBhaW50UGhhc2VUZXh0Q2xpcCwKICAgICBQYWludFBo
YXNlTWFzaywKLSAgICBQYWludFBoYXNlQ2xpcHBpbmdNYXNrCisgICAgUGFpbnRQaGFzZUNsaXBw
aW5nTWFzaywKKyAgICBQYWludFBoYXNlTWF4CiB9OwogCiBlbnVtIFBhaW50QmVoYXZpb3JGbGFn
cyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA2YTBmMTRk
YzZhN2RkYWYzYjMyYjBkNmIwYjg2NmJkMjJjYTcwMmVlLi4zMjBhMzRmYWFhNTliNWM1ZTZjMmJm
MDJjMzcwYzM2MmJhN2Q4YmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKQEAgLTk1LDYgKzk1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9z
aXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyRmlsdGVySW5mby5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKQEAgLTI3OSw3ICsyODAsNiBAQCBSZW5kZXJMYXll
cjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVs
T2JqZWN0KQogICAgICwgbV9oYXNPdXRPZkZsb3dQb3NpdGlvbmVkRGVzY2VuZGFudERpcnR5KHRy
dWUpCiAgICAgLCBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyhmYWxzZSkKICAgICAsIG1fZGVz
Y2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyKGZhbHNlKQotICAgICwgbV91c2Vk
VHJhbnNwYXJlbmN5KGZhbHNlKQogICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFs
c2UpCiAgICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0
YXR1cyhOZWVkc05vcm1hbFJlcGFpbnQpCkBAIC0xNzk4LDcgKzE3OTgsNyBAQCBzdGF0aWMgTGF5
b3V0UmVjdCBwYWludGluZ0V4dGVudChjb25zdCBSZW5kZXJMYXllciYgY3VycmVudExheWVyLCBj
b25zdCBSZW5kZXJMYQogCiB2b2lkIFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWlu
dGluZ0luZm8sIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBpZiAoY29udGV4
dC5wYWludGluZ0Rpc2FibGVkKCkgfHwgKHBhaW50c1dpdGhUcmFuc3BhcmVuY3kocGFpbnRpbmdJ
bmZvLnBhaW50QmVoYXZpb3IpICYmIG1fdXNlZFRyYW5zcGFyZW5jeSkpCisgICAgaWYgKGNvbnRl
eHQucGFpbnRpbmdEaXNhYmxlZCgpIHx8IChwYWludHNXaXRoVHJhbnNwYXJlbmN5KHBhaW50aW5n
SW5mby5wYWludEJlaGF2aW9yKSAmJiBtX2NvbnRleHRGb3JUcmFuc3BhcmVuY3lMYXllcikpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlckxheWVyKiBhbmNlc3RvciA9IHRyYW5zcGFyZW50
UGFpbnRpbmdBbmNlc3RvcigpOwpAQCAtMTgwNyw3ICsxODA3LDcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXllclAKICAgICAKICAgICBpZiAocGFpbnRzV2l0aFRyYW5zcGFyZW5jeShwYWludGluZ0lu
Zm8ucGFpbnRCZWhhdmlvcikpIHsKICAgICAgICAgQVNTRVJUKGlzU3RhY2tpbmdDb250ZXh0KCkp
OwotICAgICAgICBtX3VzZWRUcmFuc3BhcmVuY3kgPSB0cnVlOworICAgICAgICBtX2NvbnRleHRG
b3JUcmFuc3BhcmVuY3lMYXllciA9ICZjb250ZXh0OwogICAgICAgICBjb250ZXh0LnNhdmUoKTsK
ICAgICAgICAgTGF5b3V0UmVjdCBhZGp1c3RlZENsaXBSZWN0ID0gcGFpbnRpbmdFeHRlbnQoKnRo
aXMsIHBhaW50aW5nSW5mby5yb290TGF5ZXIsIGRpcnR5UmVjdCwgcGFpbnRpbmdJbmZvLnBhaW50
QmVoYXZpb3IpOwogICAgICAgICBhZGp1c3RlZENsaXBSZWN0Lm1vdmUocGFpbnRpbmdJbmZvLnN1
YnBpeGVsT2Zmc2V0KTsKQEAgLTE4MzQsNiArMTgzNCwxNiBAQCB2b2lkIFJlbmRlckxheWVyOjpi
ZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eWVyUAogICAgIH0KIH0KIAordm9pZCBSZW5kZXJMYXllcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXJz
KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dEZvclRyYW5zcGFyZW5jeUxheWVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbnRleHRGb3JUcmFuc3BhcmVuY3lMYXllci0+ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKKyAgICBtX2NvbnRleHRGb3JUcmFuc3BhcmVuY3lMYXllci0+cmVzdG9yZSgp
OworICAgIG1fY29udGV4dEZvclRyYW5zcGFyZW5jeUxheWVyID0gbnVsbHB0cjsKK30KKwogI2lm
IFBMQVRGT1JNKElPUykKIHZvaWQgUmVuZGVyTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCiB7CkBA
IC00Mzc3LDQwICs0Mzg3LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAgICAg
ICAgICAgKGlzUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6
IFJlc3BlY3RPdmVyZmxvd0NsaXAsIG9mZnNldEZyb21Sb290KTsKICAgICAgICAgICAgIHVwZGF0
ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0lu
Zm8sIGxvY2FsUGFpbnRGbGFncywgc2hvdWxkUGFpbnRDb250ZW50LCBvZmZzZXRGcm9tUm9vdCk7
CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChpc1BhaW50aW5nQ29tcG9zaXRlZEJh
Y2tncm91bmQpIHsKLSAgICAgICAgICAgIC8vIFBhaW50IG9ubHkgdGhlIGJhY2tncm91bmRzIGZv
ciBhbGwgb2YgdGhlIGZyYWdtZW50cyBvZiB0aGUgbGF5ZXIuCi0gICAgICAgICAgICBpZiAoc2hv
dWxkUGFpbnRDb250ZW50ICYmICFzZWxlY3Rpb25Pbmx5KSB7Ci0gICAgICAgICAgICAgICAgcGFp
bnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwg
Y29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBoYXZlVHJhbnNwYXJlbmN5LAot
ICAgICAgICAgICAgICAgICAgICBsb2NhbFBhaW50aW5nSW5mbywgcGFpbnRCZWhhdmlvciwgc3Vi
dHJlZVBhaW50Um9vdEZvclJlbmRlcmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogCi0g
ICAgICAgIC8vIE5vdyB3YWxrIHRoZSBzb3J0ZWQgbGlzdCBvZiBjaGlsZHJlbiB3aXRoIG5lZ2F0
aXZlIHotaW5kaWNlcy4KLSAgICAgICAgaWYgKChpc1BhaW50aW5nU2Nyb2xsaW5nQ29udGVudCAm
JiBpc1BhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgfHwgKCFpc1BhaW50aW5nU2Nyb2xsaW5nQ29u
dGVudCAmJiBpc1BhaW50aW5nQ29tcG9zaXRlZEJhY2tncm91bmQpKQotICAgICAgICAgICAgcGFp
bnRMaXN0KG5lZ1pPcmRlckxpc3QoKSwgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LCBsb2NhbFBhaW50RmxhZ3MpOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzUGFpbnRpbmdDb21w
b3NpdGVkRm9yZWdyb3VuZCkgewotICAgICAgICAgICAgaWYgKHNob3VsZFBhaW50Q29udGVudCkg
ewotICAgICAgICAgICAgICAgIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhsYXllckZyYWdt
ZW50cywgY3VycmVudENvbnRleHQsIGNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVj
dCwgaGF2ZVRyYW5zcGFyZW5jeSwKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxQYWludGluZ0lu
Zm8sIHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlcik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2hvdWxkUGFpbnRPdXRsaW5lKQotICAg
ICAgICAgICAgcGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50
Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJv
b3RGb3JSZW5kZXJlcik7Ci0KLSAgICAgICAgaWYgKGlzUGFpbnRpbmdDb21wb3NpdGVkRm9yZWdy
b3VuZCkgewotICAgICAgICAgICAgLy8gUGFpbnQgYW55IGNoaWxkIGxheWVycyB0aGF0IGhhdmUg
b3ZlcmZsb3cuCi0gICAgICAgICAgICBwYWludExpc3QobV9ub3JtYWxGbG93TGlzdC5nZXQoKSwg
Y3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwotICAg
ICAgICAKLSAgICAgICAgICAgIC8vIE5vdyB3YWxrIHRoZSBzb3J0ZWQgbGlzdCBvZiBjaGlsZHJl
biB3aXRoIHBvc2l0aXZlIHotaW5kaWNlcy4KLSAgICAgICAgICAgIHBhaW50TGlzdChwb3NaT3Jk
ZXJMaXN0KCksIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZs
YWdzKTsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgIFJlbmRlckxheWVyQ29udGV4
dCByZW5kZXJMYXllckNvbnRleHQoY3VycmVudENvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCk7CisgICAgICAgICAgICBwYWludENvbXBvc2l0ZWRQaGFzZXNNdWx0aXBsZVBhc3Nl
cyhsYXllckZyYWdtZW50cywgcmVuZGVyTGF5ZXJDb250ZXh0LCBjb250ZXh0LCBwYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MsCisg
ICAgICAgICAgICAgICAgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVy
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlbmRlckxheWVyRGlzcGxheUxpc3RD
b250ZXh0IHJlbmRlckxheWVyQ29udGV4dChjdXJyZW50Q29udGV4dCwgY29udGV4dCwgcGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0KTsKKyAgICAgICAgICAgIHBhaW50Q29tcG9zaXRlZFBoYXNl
c011bHRpcGxlUGFzc2VzKGxheWVyRnJhZ21lbnRzLCByZW5kZXJMYXllckNvbnRleHQsIGNvbnRl
eHQsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2Fs
UGFpbnRGbGFncywKKyAgICAgICAgICAgICAgICBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRS
b290Rm9yUmVuZGVyZXIpOworICAgICAgICAgICAgcmVuZGVyTGF5ZXJDb250ZXh0LnJlcGxheSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAm
JiBoYXNTY3JvbGxiYXJzKCkpCi0gICAgICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JG
cmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
byk7Ci0KICAgICAgICAgaWYgKGZpbHRlckNvbnRleHQpIHsKICAgICAgICAgICAgIC8vIFdoZW4g
d2UgY2FsbGVkIGNvbGxlY3RGcmFnbWVudHMoKSBsYXN0IHRpbWUsIHBhaW50RGlydHlSZWN0IHdh
cyByZXNldCB0byByZXByZXNlbnQgdGhlIGZpbHRlciBib3VuZHMuCiAgICAgICAgICAgICAvLyBO
b3cgd2UgbmVlZCB0byBjb21wdXRlIHRoZSBiYWNrZ3JvdW5kUmVjdCB1bmNvbnRhbWluYXRlZCBi
eSBmaWx0ZXJzLCBpbiBvcmRlciB0byBjbGlwIHRoZSBmaWx0ZXJlZCByZXN1bHQuCkBAIC00NDU0
LDExICs0NDQyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICB9CiAKICAgICAvLyBF
bmQgb3VyIHRyYW5zcGFyZW5jeSBsYXllcgotICAgIGlmIChoYXZlVHJhbnNwYXJlbmN5ICYmIG1f
dXNlZFRyYW5zcGFyZW5jeSAmJiAhbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24pIHsKLSAgICAg
ICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgICAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKLSAgICAgICAgbV91c2VkVHJhbnNwYXJlbmN5ID0gZmFsc2U7Ci0gICAgfQorICAgIGVu
ZFRyYW5zcGFyZW5jeUxheWVycygpOwogCiAgICAgLy8gUmUtc2V0IHRoaXMgdG8gd2hhdGV2ZXIg
aXQgd2FzIGJlZm9yZSB3ZSBwYWludGVkIHRoZSBsYXllci4KICAgICBpZiAobmVlZFRvQWRqdXN0
U3VicGl4ZWxRdWFudGl6YXRpb24pCkBAIC00ODMwLDYgKzQ4MTQsNTMgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXll
ckZyYWdtZW50cywKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q29tcG9zaXRl
ZFBoYXNlc011bHRpcGxlUGFzc2VzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50
cywgUmVuZGVyTGF5ZXJDb250ZXh0JiByZW5kZXJMYXllckNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiBwYWludERpcnR5UmVjdCwgY29uc3Qg
TGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50Rmxh
Z3MsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFp
bnRSb290Rm9yUmVuZGVyZXIpCit7CisgICAgYm9vbCBoYXZlVHJhbnNwYXJlbmN5ID0gcGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJIYXZlVHJhbnNwYXJlbmN5OworICAgIGJvb2wgaXNTZWxmUGFpbnRp
bmdMYXllciA9IHRoaXMtPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBib29sIGlzUGFpbnRp
bmdDb21wb3NpdGVkQmFja2dyb3VuZCA9IHBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdD
b21wb3NpdGluZ0JhY2tncm91bmRQaGFzZTsKKyAgICBib29sIGlzUGFpbnRpbmdDb21wb3NpdGVk
Rm9yZWdyb3VuZCA9IHBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0Zv
cmVncm91bmRQaGFzZTsKKyAgICBib29sIGlzUGFpbnRpbmdTY3JvbGxpbmdDb250ZW50ID0gcGFp
bnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nU2Nyb2xsaW5nUGhhc2U7Cisg
ICAgYm9vbCBpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgPSBwYWludEZsYWdzICYgUGFpbnRM
YXllclBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnM7CisgICAgYm9vbCBpc1BhaW50aW5nT3ZlcmZs
b3dDb250ZW50cyA9IHBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRl
bnRzOworCisgICAgYm9vbCBzaG91bGRQYWludE91dGxpbmUgPSBpc1NlbGZQYWludGluZ0xheWVy
ICYmICFpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMKKyAgICAgICAgJiYgKChpc1BhaW50aW5n
U2Nyb2xsaW5nQ29udGVudCAmJiBpc1BhaW50aW5nQ29tcG9zaXRlZEJhY2tncm91bmQpCisgICAg
ICAgIHx8ICghaXNQYWludGluZ1Njcm9sbGluZ0NvbnRlbnQgJiYgaXNQYWludGluZ0NvbXBvc2l0
ZWRGb3JlZ3JvdW5kKSk7CisgICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQgPSBtX2hhc1Zpc2li
bGVDb250ZW50ICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIgJiYgIWlzUGFpbnRpbmdPdmVybGF5U2Ny
b2xsYmFyczsKKyAgICBib29sIHNlbGVjdGlvbk9ubHkgPSBwYWludGluZ0luZm8ucGFpbnRCZWhh
dmlvciAmIFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5OworCisgICAgLy8gUGFpbnQgb25seSB0
aGUgYmFja2dyb3VuZHMgZm9yIGFsbCBvZiB0aGUgZnJhZ21lbnRzIG9mIHRoZSBsYXllci4KKyAg
ICBpZiAoaXNQYWludGluZ0NvbXBvc2l0ZWRCYWNrZ3JvdW5kICYmIHNob3VsZFBhaW50Q29udGVu
dCAmJiAhc2VsZWN0aW9uT25seSkKKyAgICAgICAgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRz
KGxheWVyRnJhZ21lbnRzLCByZW5kZXJMYXllckNvbnRleHQuZ3JhcGhpY3NDb250ZXh0KFBhaW50
UGhhc2VCbG9ja0JhY2tncm91bmQpLCBjb250ZXh0LCBwYWludERpcnR5UmVjdCwgaGF2ZVRyYW5z
cGFyZW5jeSwgcGFpbnRpbmdJbmZvLCBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRSb290Rm9y
UmVuZGVyZXIpOworCisgICAgLy8gTm93IHdhbGsgdGhlIHNvcnRlZCBsaXN0IG9mIGNoaWxkcmVu
IHdpdGggbmVnYXRpdmUgei1pbmRpY2VzLgorICAgIGlmICgoaXNQYWludGluZ1Njcm9sbGluZ0Nv
bnRlbnQgJiYgaXNQYWludGluZ092ZXJmbG93Q29udGVudHMpIHx8ICghaXNQYWludGluZ1Njcm9s
bGluZ0NvbnRlbnQgJiYgaXNQYWludGluZ0NvbXBvc2l0ZWRCYWNrZ3JvdW5kKSkKKyAgICAgICAg
cGFpbnRMaXN0KG5lZ1pPcmRlckxpc3QoKSwgcmVuZGVyTGF5ZXJDb250ZXh0LmdyYXBoaWNzQ29u
dGV4dChGcmFnbWVudFBoYXNlTmVnWk9yZGVyTGlzdCksIHBhaW50aW5nSW5mbywgcGFpbnRGbGFn
cyk7CisKKyAgICBpZiAoaXNQYWludGluZ0NvbXBvc2l0ZWRGb3JlZ3JvdW5kICYmIHNob3VsZFBh
aW50Q29udGVudCkKKyAgICAgICAgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGxheWVyRnJh
Z21lbnRzLCByZW5kZXJMYXllckNvbnRleHQuZ3JhcGhpY3NDb250ZXh0KFBhaW50UGhhc2VGb3Jl
Z3JvdW5kKSwgY29udGV4dCwgcGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFuc3BhcmVuY3ksIHBhaW50
aW5nSW5mbywgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVyKTsKKwor
ICAgIGlmIChzaG91bGRQYWludE91dGxpbmUpCisgICAgICAgIHBhaW50T3V0bGluZUZvckZyYWdt
ZW50cyhsYXllckZyYWdtZW50cywgcmVuZGVyTGF5ZXJDb250ZXh0LmdyYXBoaWNzQ29udGV4dChQ
YWludFBoYXNlU2VsZk91dGxpbmUpLCBwYWludGluZ0luZm8sIHBhaW50QmVoYXZpb3IsIHN1YnRy
ZWVQYWludFJvb3RGb3JSZW5kZXJlcik7CisKKyAgICBpZiAoaXNQYWludGluZ0NvbXBvc2l0ZWRG
b3JlZ3JvdW5kKSB7CisgICAgICAgIC8vIFBhaW50IGFueSBjaGlsZCBsYXllcnMgdGhhdCBoYXZl
IG92ZXJmbG93LgorICAgICAgICBwYWludExpc3QobV9ub3JtYWxGbG93TGlzdC5nZXQoKSwgcmVu
ZGVyTGF5ZXJDb250ZXh0LmdyYXBoaWNzQ29udGV4dChGcmFnbWVudFBoYXNlTm9ybWFsRmxvd0xp
c3QpLCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOworCisgICAgICAgIC8vIE5vdyB3YWxrIHRo
ZSBzb3J0ZWQgbGlzdCBvZiBjaGlsZHJlbiB3aXRoIHBvc2l0aXZlIHotaW5kaWNlcy4KKyAgICAg
ICAgcGFpbnRMaXN0KHBvc1pPcmRlckxpc3QoKSwgcmVuZGVyTGF5ZXJDb250ZXh0LmdyYXBoaWNz
Q29udGV4dChGcmFnbWVudFBoYXNlUG9zWk9yZGVyTGlzdCksIHBhaW50aW5nSW5mbywgcGFpbnRG
bGFncyk7CisgICAgfQorCisgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBo
YXNTY3JvbGxiYXJzKCkpCisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgcmVuZGVyTGF5ZXJDb250ZXh0LmdyYXBoaWNzQ29udGV4dChGcmFn
bWVudFBoYXNlT3ZlcmZsb3dDb250cm9scyksIHBhaW50aW5nSW5mbyk7CisKKyAgICAvLyBFbmQg
b3VyIHRyYW5zcGFyZW5jeSBsYXllciBpZiBuZWVkZWQuCisgICAgaWYgKG1fY29udGV4dEZvclRy
YW5zcGFyZW5jeUxheWVyICE9ICZjb250ZXh0KQorICAgICAgICBlbmRUcmFuc3BhcmVuY3lMYXll
cnMoKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sCiAgICAgUGFpbnRC
ZWhhdmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3RGb3JS
ZW5kZXJlcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggZDdm
ZDBhOGM2YTYyOTVmMDEyZjgwN2U1NDE2ZjE1YTc2ZmMxZDY5ZC4uOWZhNjg0MDU3NzIxNTJkY2Q0
MDI1MjU2YjA2YjY5OWU1ZGJjNGRjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKQEAgLTcyLDYgKzcyLDcgQEAgY2xhc3MgUmVuZGVyRnJhZ21lbnRlZEZsb3c7CiBjbGFz
cyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKIGNsYXNzIFJl
bmRlckxheWVyQ29tcG9zaXRvcjsKK2NsYXNzIFJlbmRlckxheWVyQ29udGV4dDsKIGNsYXNzIFJl
bmRlck1hcnF1ZWU7CiBjbGFzcyBSZW5kZXJSZXBsaWNhOwogY2xhc3MgUmVuZGVyU2Nyb2xsYmFy
UGFydDsKQEAgLTg0Nyw2ICs4NDgsOCBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBMYXlvdXRS
ZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFp
bnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21l
bnRzV2l0aFBoYXNlKFBhaW50UGhhc2UsIGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBSZW5kZXJP
YmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50T3V0bGluZUZv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlcik7CisgICAgdm9pZCBwYWludENvbXBvc2l0ZWRQaGFzZXNNdWx0aXBs
ZVBhc3Nlcyhjb25zdCBMYXllckZyYWdtZW50cyYsIFJlbmRlckxheWVyQ29udGV4dCYsIEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYs
CisgICAgICAgIFBhaW50TGF5ZXJGbGFncywgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0Kik7
CiAgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYpOwog
ICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBS
ZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50Q2hp
bGRDbGlwcGluZ01hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRl
ck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwpAQCAtODU0LDYgKzg1Nyw3IEBAIHBy
aXZhdGU6CiAKICAgICBSZW5kZXJMYXllciogdHJhbnNwYXJlbnRQYWludGluZ0FuY2VzdG9yKCk7
CiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CisgICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcnMoKTsKIAogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0
TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVy
LCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAog
ICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLApAQCAtMTA1Nyw5ICsxMDYxLDYgQEAgcHJpdmF0
ZToKICAgICAvLyBhYmxlIHRvIHNhZmVseSBiZWNvbWUgYSBzdGFja2luZyBjb250ZXh0LgogICAg
IGJvb2wgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIgOiAxOwogCi0g
ICAgYm9vbCBtX3VzZWRUcmFuc3BhcmVuY3kgOiAxOyAvLyBUcmFja3Mgd2hldGhlciB3ZSBuZWVk
IHRvIGNsb3NlIGEgdHJhbnNwYXJlbnQgbGF5ZXIsIGkuZS4sIHdoZXRoZXIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuZGVkIHVwIHBhaW50aW5nIHRoaXMgbGF5ZXIg
b3IgYW55IGRlc2NlbmRhbnRzIChhbmQgdGhlcmVmb3JlIG5lZWQgdG8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGJsZW5kKS4KICAgICBib29sIG1fcGFpbnRpbmdJbnNpZGVS
ZWZsZWN0aW9uIDogMTsgIC8vIEEgc3RhdGUgYml0IHRyYWNraW5nIGlmIHdlIGFyZSBwYWludGlu
ZyBpbnNpZGUgYSByZXBsaWNhLgogICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlvdXQgOiAxOwog
ICAgIHVuc2lnbmVkIG1fcmVwYWludFN0YXR1cyA6IDI7IC8vIFJlcGFpbnRTdGF0dXMKQEAgLTEx
NjYsNiArMTE2NywxMSBAQCBwcml2YXRlOgogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGVuY2xvc2lu
ZyBSZW5kZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0IGlzIDAgaWYg
d2UgYXJlIG5vdCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9lbmNsb3Np
bmdQYWdpbmF0aW9uTGF5ZXI7CiAKKyAgICAKKyAgICAvLyBUcmFja3Mgd2hldGhlciB3ZSBuZWVk
IHRvIGNsb3NlIGEgdHJhbnNwYXJlbnQgbGF5ZXIsIGkuZS4sIHdoZXRoZXIgd2UgZW5kZWQgdXAg
cGFpbnRpbmcgdGhpcyBsYXllciBvcgorICAgIC8vIGFueSBkZXNjZW5kYW50cyAoYW5kIHRoZXJl
Zm9yZSBuZWVkIHRvIGJsZW5kKS4KKyAgICBHcmFwaGljc0NvbnRleHQgKm1fY29udGV4dEZvclRy
YW5zcGFyZW5jeUxheWVyIHsgbnVsbHB0ciB9OworICAgIAogICAgIEludFJlY3QgbV9ibG9ja1Nl
bGVjdGlvbkdhcHNCb3VuZHM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJCYWNr
aW5nPiBtX2JhY2tpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCmluZGV4IDFjNjI1NTExZGVhZjczZGNmYzFiMzcxYmY3MDViODA3NTc2ZWFi
MWYuLjU4NTYxOTUzNzZmZTYwODhkNDIzNTViOWQ5ZTcxOTUwZTdmOWU2MzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0yNTc1LDcg
KzI1NzUsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3Qg
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogCiAgICAgY29tcG9zaXRvcigpLmRp
ZFBhaW50QmFja2luZyh0aGlzKTsKIAotICAgIEFTU0VSVCghbV9vd25pbmdMYXllci5tX3VzZWRU
cmFuc3BhcmVuY3kpOworICAgIEFTU0VSVCghbV9vd25pbmdMYXllci5tX2NvbnRleHRGb3JUcmFu
c3BhcmVuY3lMYXllcik7CiB9CiAKIC8vIFVwLWNhbGwgZnJvbSBjb21wb3NpdGluZyBsYXllciBk
cmF3aW5nIGNhbGxiYWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2ZjNiMmJkOTNiZjE0MjA3MGEwNjMwNmE0YThkZDI4YzJj
NjQzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb250ZXh0LmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworZW51bSBGcmFnbWVu
dFBoYXNlIHsKKyAgICBGcmFnbWVudFBoYXNlTWluID0gUGFpbnRQaGFzZU1heCwKKyAgICBGcmFn
bWVudFBoYXNlTmVnWk9yZGVyTGlzdCA9IEZyYWdtZW50UGhhc2VNaW4sCisgICAgRnJhZ21lbnRQ
aGFzZU5vcm1hbEZsb3dMaXN0LAorICAgIEZyYWdtZW50UGhhc2VQb3NaT3JkZXJMaXN0LAorICAg
IEZyYWdtZW50UGhhc2VPdmVyZmxvd0NvbnRyb2xzLAorICAgIEZyYWdtZW50UGhhc2VNYXgKK307
CisKK2NsYXNzIFJlbmRlckxheWVyQ29udGV4dCB7CitwdWJsaWM6CisgICAgUmVuZGVyTGF5ZXJD
b250ZXh0KEdyYXBoaWNzQ29udGV4dCYgZHJhd2luZ0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
Y2xpcFJlY3QpCisgICAgICAgIDogbV9kcmF3aW5nQ29udGV4dChkcmF3aW5nQ29udGV4dCkKKyAg
ICAgICAgLCBtX2NsaXBSZWN0KGNsaXBSZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IH5SZW5kZXJMYXllckNvbnRleHQoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dChQYWludFBoYXNlKSB7IHJldHVybiBtX2RyYXdpbmdDb250
ZXh0OyB9CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dChGcmFn
bWVudFBoYXNlKSB7IHJldHVybiBtX2RyYXdpbmdDb250ZXh0OyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBHcmFwaGljc0NvbnRleHQmIG1fZHJhd2luZ0NvbnRleHQ7CisgICAgRmxvYXRSZWN0IG1fY2xp
cFJlY3Q7Cit9OworCitjbGFzcyBSZW5kZXJMYXllckRpc3BsYXlMaXN0Q29udGV4dCA6IHB1Ymxp
YyBSZW5kZXJMYXllckNvbnRleHQgeworcHVibGljOgorICAgIFJlbmRlckxheWVyRGlzcGxheUxp
c3RDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYgZHJhd2luZ0NvbnRleHQsIEdyYXBoaWNzQ29udGV4
dCYgcmVmZXJlbmNlQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKKyAgICAgICAg
OiBSZW5kZXJMYXllckNvbnRleHQoZHJhd2luZ0NvbnRleHQsIGNsaXBSZWN0KQorICAgICAgICAs
IG1fcmVmZXJlbmNlQ29udGV4dChyZWZlcmVuY2VDb250ZXh0KQorICAgICAgICAsIG1fZGlzcGxh
eUxpc3RDb250ZXh0cyhwYWludE9yZGVyc1NpemUoKSkKKyAgICAgICAgLCBtX2Rpc3BsYXlMaXN0
cyhwYWludE9yZGVyc1NpemUoKSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQoUGFpbnRQaGFzZSBwaGFzZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIHJldHVybiBncmFwaGljc0NvbnRleHQocGFpbnRPcmRlckluZGV4KHBoYXNlKSk7CisgICAg
fQorICAgIAorICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KEZyYWdtZW50UGhh
c2UgcGhhc2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0
KHBhaW50T3JkZXJJbmRleChwaGFzZSkpOworICAgIH0KKworICAgIHZvaWQgcmVwbGF5KCkKKyAg
ICB7CisgICAgICAgIGZvciAoYXV0byYgIGRpc3BsYXlMaXN0IDogbV9kaXNwbGF5TGlzdHMpIHsK
KyAgICAgICAgICAgIGlmICghZGlzcGxheUxpc3QgfHwgIWRpc3BsYXlMaXN0LT5pdGVtQ291bnQo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIERpc3BsYXlMaXN0OjpS
ZXBsYXllciByZXBsYXllcihtX2RyYXdpbmdDb250ZXh0LCAqZGlzcGxheUxpc3QpOworICAgICAg
ICAgICAgcmVwbGF5ZXIucmVwbGF5KG1fY2xpcFJlY3QpOworICAgICAgICB9CisgICAgfQorCitw
cml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwYWludE9yZGVycygp
CisgICAgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPHVuc2lnbmVkPj4g
cGFpbnRPcmRlcnMgPSBWZWN0b3I8dW5zaWduZWQ+KHsKKyAgICAgICAgICAgIFBhaW50UGhhc2VC
bG9ja0JhY2tncm91bmQsCisgICAgICAgICAgICBGcmFnbWVudFBoYXNlTmVnWk9yZGVyTGlzdCwK
KyAgICAgICAgICAgIFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCwKKyAgICAgICAgICAg
IFBhaW50UGhhc2VGbG9hdCwKKyAgICAgICAgICAgIFBhaW50UGhhc2VGb3JlZ3JvdW5kLAorICAg
ICAgICAgICAgUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMsCisgICAgICAgICAgICBQYWludFBoYXNl
U2VsZWN0aW9uLAorICAgICAgICAgICAgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLAorICAgICAgICAg
ICAgRnJhZ21lbnRQaGFzZU5vcm1hbEZsb3dMaXN0LAorICAgICAgICAgICAgRnJhZ21lbnRQaGFz
ZVBvc1pPcmRlckxpc3QsCisgICAgICAgICAgICBGcmFnbWVudFBoYXNlT3ZlcmZsb3dDb250cm9s
cywKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBwYWludE9yZGVyczsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIHNpemVfdCBwYWludE9yZGVyc1NpemUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHBhaW50T3JkZXJzKCkuc2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgcGFp
bnRPcmRlckluZGV4KHVuc2lnbmVkIHBhaW50T3JkZXIpCisgICAgeworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKHBhaW50T3JkZXJzKCkuY29udGFpbnMocGFpbnRPcmRlcikpOworICAgICAgICBy
ZXR1cm4gcGFpbnRPcmRlcnMoKS5maW5kKHBhaW50T3JkZXIpOworICAgIH0KKworICAgIEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAg
IGlmICghbV9kaXNwbGF5TGlzdENvbnRleHRzW2luZGV4XSkgeworICAgICAgICAgICAgbV9kaXNw
bGF5TGlzdENvbnRleHRzW2luZGV4XSA9IHN0ZDo6bWFrZV91bmlxdWU8R3JhcGhpY3NDb250ZXh0
PihbJl0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgbV9kaXNw
bGF5TGlzdHNbaW5kZXhdID0gc3RkOjptYWtlX3VuaXF1ZTxEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3Q+KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RGlzcGxheUxp
c3Q6OlJlY29yZGVyPihjb250ZXh0LCAqbV9kaXNwbGF5TGlzdHNbaW5kZXhdLCBtX3JlZmVyZW5j
ZUNvbnRleHQuc3RhdGUoKSwgbV9jbGlwUmVjdCwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICptX2Rpc3BsYXlMaXN0Q29udGV4
dHNbaW5kZXhdOworICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgbV9yZWZlcmVuY2VDb250
ZXh0OworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0Pj4gbV9kaXNw
bGF5TGlzdENvbnRleHRzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0Pj4gbV9kaXNwbGF5TGlzdHM7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCA0Njg0NzJjNjg2NWJmNjcxNmI5YjJmODhiYmJh
ZTE1NWRmM2UzNjBhLi42YmI5ZTkxZTk2NWExOGVhOWIwYTI0NTVlM2NiM2ZlNGIwZmVhYjg2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTMwMyw3ICszMDMs
NyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludChjb25zdCBSZW5kZXJCb3gmIGJveCwgQ29udHJv
bFN0YXRlcyYgY29udHJvbFN0YXRlcywgY29ucwogICAgIGNhc2UgQnV0dG9uUGFydDoKICAgICBj
YXNlIElubmVyU3BpbkJ1dHRvblBhcnQ6CiAgICAgICAgIHVwZGF0ZUNvbnRyb2xTdGF0ZXNGb3JS
ZW5kZXJlcihib3gsIGNvbnRyb2xTdGF0ZXMpOwotICAgICAgICBUaGVtZTo6c2luZ2xldG9uKCku
cGFpbnQocGFydCwgY29udHJvbFN0YXRlcywgcGFpbnRJbmZvLmNvbnRleHQoKSwgZGV2aWNlUGl4
ZWxTbmFwcGVkUmVjdCwgYm94LnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpLCAmYm94LnZpZXcoKS5m
cmFtZVZpZXcoKSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3RvciwgYm94LnBhZ2Uo
KS51c2VTeXN0ZW1BcHBlYXJhbmNlKCksIGJveC5wYWdlKCkudXNlRGFya0FwcGVhcmFuY2UoKSk7
CisgICAgICAgIFRoZW1lOjpzaW5nbGV0b24oKS5wYWludChwYWludEluZm8uY29udGV4dCgpLCBw
YXJ0LCBjb250cm9sU3RhdGVzLCBkZXZpY2VQaXhlbFNuYXBwZWRSZWN0LCBib3guc3R5bGUoKS5l
ZmZlY3RpdmVab29tKCksICZib3gudmlldygpLmZyYW1lVmlldygpLCBkZXZpY2VTY2FsZUZhY3Rv
ciwgcGFnZVNjYWxlRmFjdG9yLCBib3gucGFnZSgpLnVzZVN5c3RlbUFwcGVhcmFuY2UoKSwgYm94
LnBhZ2UoKS51c2VEYXJrQXBwZWFyYW5jZSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMmJhYTJmMWJiZTMxYmE2MzFm
MjE2NzMzMTdhMTJiMWI0MTRmNzkzZi4uOGE4OWIxMDMxZWQ3NmFiM2M0NmFhMTU5MmQ3ODc4ZDlm
MjRhMWU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEFmZmkKICAgICAvLyBUaGUgbWFzayBpbWFnZSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBhYnNv
bHV0ZSBjb29yZGluYXRlIHNwYWNlLCBhcyB0aGUgaW1hZ2Ugc2hvdWxkIG5vdCBiZSBzY2FsZWQu
CiAgICAgLy8gU28gdGhlIGFjdHVhbCBtYXNraW5nIHByb2Nlc3MgaGFzIHRvIGJlIGRvbmUgaW4g
dGhlIGFic29sdXRlIGNvb3JkaW5hdGUgc3BhY2UgYXMgd2VsbC4KICAgICBjb250ZXh0LmNvbmNh
dENUTShhYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3Jt
KCkpKTsKLSAgICBjb250ZXh0LmNsaXBUb0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWJzb2x1
dGVUYXJnZXRSZWN0KTsKKyAgICBjb250ZXh0LmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpLCBhYnNvbHV0ZVRhcmdldFJl
Y3QsIGltYWdlQnVmZmVyLT5zaXplRm9yRGVzdGluYXRpb25TaXplKGFic29sdXRlVGFyZ2V0UmVj
dC5zaXplKCkpKTsKICAgICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7CiAK
ICAgICAvLyBXaGVuIG5lc3RpbmcgcmVzb3VyY2VzLCB3aXRoIG9iamVjdEJvdW5kaW5nQm94IGFz
IGNvbnRlbnQgdW5pdCB0eXBlcywgdGhlcmUncyBubyB1c2UgaW4gY2FjaGluZyB0aGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuY3BwIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGFmMDhmNmQ1ZWZiNGFhYTg2YjEwNGE0OWM5ODU1ZjIwNzI1YjY4MDguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNHVXRpbGl0aWVz
LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIHBhaW50SW1hZ2UoQ0dDb250ZXh0UmVm
IGNvbnRleHQsIENHSW1hZ2VSZWYgaW1hZ2UsIENHRmxvYXQgc2NhbGVGYWN0b3IsIENHUG9pbnQg
ZGVzdGluYXRpb24sIENHUmVjdCBzb3VyY2UpCi17Ci0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShj
b250ZXh0KTsKLQotICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0TWFrZShk
ZXN0aW5hdGlvbi54LCBkZXN0aW5hdGlvbi55LCBzb3VyY2Uuc2l6ZS53aWR0aCwgc291cmNlLnNp
emUuaGVpZ2h0KSk7Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwotCi0g
ICAgQ0dGbG9hdCBpbWFnZUhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpIC8gc2NhbGVG
YWN0b3I7Ci0gICAgQ0dGbG9hdCBpbWFnZVdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAv
IHNjYWxlRmFjdG9yOwotCi0gICAgQ0dGbG9hdCBkZXN0WCA9IGRlc3RpbmF0aW9uLnggLSBzb3Vy
Y2Uub3JpZ2luLng7Ci0gICAgQ0dGbG9hdCBkZXN0WSA9IC1pbWFnZUhlaWdodCAtIGRlc3RpbmF0
aW9uLnkgKyBzb3VyY2Uub3JpZ2luLnk7Ci0KLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4
dCwgQ0dSZWN0TWFrZShkZXN0WCwgZGVzdFksIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KSwgaW1h
Z2UpOwotCi0gICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0NH
VXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MWQxODFhOGZjNzU3M2M5MzBjZmM2MDNiMGY0
MTQyODc0N2IyMmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5oCisrKyAvZGV2L251bGwK
QEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0dVdGlsaXRpZXNfaAotI2Rl
ZmluZSBDR1V0aWxpdGllc19oCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIHBhaW50SW1h
Z2UoQ0dDb250ZXh0UmVmLCBDR0ltYWdlUmVmLCBDR0Zsb2F0IHNjYWxlRmFjdG9yLCBDR1BvaW50
IGRlc3RpbmF0aW9uLCBDR1JlY3Qgc291cmNlKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBDR1V0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFy
ZWFibGVCaXRtYXBDRy5jcHAKaW5kZXggNDFiMmZlYTMyYjE1M2YzYmY0ZmVmNjU5MmUyOWUyMzU0
MmU2NTQ1Zi4uYmVkZWVhZjlhMWFmMDM1YmZkYmUwZDJhOGNhNmU2MTMwY2M3YzNkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMzIsNyAr
MzIsNiBAQAogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVk
ZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0jaW5jbHVkZSAiQ0dVdGlsaXRpZXMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKQEAgLTEwMywxMiArMTAyLDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKIAogdm9pZCBTaGFyZWFi
bGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCiB7Ci0gICAgcGFp
bnRJbWFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtYWtlQ0dJbWFnZUNvcHkoKS5nZXQo
KSwgMSwgZGVzdGluYXRpb24sIHNvdXJjZSk7CisgICAgcGFpbnQoY29udGV4dCwgMSwgZGVzdGlu
YXRpb24sIHNvdXJjZSk7CiB9CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNjYWxlRmFjdG9yLCBjb25zdCBJbnRQ
b2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHNvdXJjZSkKIHsKLSAgICBwYWludElt
YWdlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIG1ha2VDR0ltYWdlQ29weSgpLmdldCgpLCBz
Y2FsZUZhY3RvciwgZGVzdGluYXRpb24sIHNvdXJjZSk7CisgICAgY29udGV4dC5kcmF3TmF0aXZl
U2NhbGVkSW1hZ2UobWFrZUNHSW1hZ2VDb3B5KCkuZ2V0KCksIHNjYWxlRmFjdG9yLCBkZXN0aW5h
dGlvbiwgc291cmNlKTsKIH0KIAogUmV0YWluUHRyPENHSW1hZ2VSZWY+IFNoYXJlYWJsZUJpdG1h
cDo6bWFrZUNHSW1hZ2VDb3B5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQ2NGQyZTViZjM4YWMwNjI1M2M3NWFmMDRkN2VhOGRhNjYw
Y2UxYzMuLmYzZGUyMGI5ZmU4YzEwZDhhZWFkNTJjZWU3MDI1MmZlM2NhNDhjMjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzU1LDgg
KzM1NSw2IEBACiAJCTFBOUZCQThEMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBOUZCQThDMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUuaCAqLzsgfTsKIAkJMUFBMTMyMTIxOTFENTkyNDAwOUMxNDg5IC8qIFdLTmF2aWdhdGlvblJl
c3BvbnNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFBMTMyMTExOTFENTkyNDAwOUMxNDg5IC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlUHJp
dmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTFBQTIwRDUxMThBRDUwRTAwMDVEMUVENCAvKiBXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTIwRDUw
MThBRDUwRTAwMDVEMUVENCAvKiBXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQUEyRTUxRDEyRTRD
MDVFMDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTJFNTFCMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGll
cy5oICovOyB9OwotCQkxQUEyRTUxRTEyRTRDMDVFMDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMkU1MUMx
MkU0QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMUFBMkU1NjYxOEQ3
NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUEyRTU2NDE4RDc3NTA4MDAz
ODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5tbSAqLzsgfTsKIAkJMUFBMkU1
NjcxOEQ3NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTJFNTY1MThENzc1
MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLmggKi87IH07CiAJCTFB
QTNENzVCMTY1MUI0NEYwMDg3MTNEMCAvKiBSZW1vdGVMYXllclRyZWVIb3N0Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBM0Q3NTkxNjUxQjQ0RjAw
ODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QubW0gKi87IH07CkBAIC0yNzkwLDggKzI3ODgs
NiBAQAogCQkxQUExQ0M1QzEwMEZBMUExMDA3OERFQkMgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVy
LmZyYW1ld29yazsgbmFtZSA9IFF1YXJ0ekNvcmUuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9M
aWJyYXJ5L0ZyYW1ld29ya3MvUXVhcnR6Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFi
c29sdXRlPiI7IH07CiAJCTFBQTFDRDA2MTAwRkExQkEwMDc4REVCQyAvKiBDYXJib24uZnJhbWV3
b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3Jh
cHBlci5mcmFtZXdvcms7IG5hbWUgPSBDYXJib24uZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9M
aWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJMUFBMjBENTAxOEFENTBFMDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVn
YXRlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBMkU1
MUIxMkU0QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENHVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFBQTJFNTFDMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDR1V0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBQTJFNTY0MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NC
dW5kbGVQYXJhbWV0ZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFBMkU1NjUxOEQ3NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBh
cmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJQcm9jZXNz
QnVuZGxlUGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUEzRDc1
OTE2NTFCNDRGMDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZUhvc3QubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mjk5LDE1ICs1Mjk1LDYgQEAKIAkJCXBhdGggPSBt
YWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQUEyRTUxQTEyRTRDMDU2
MDBCQzQ5NjYgLyogY2cgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0g
KAotCQkJCTFBQTJFNTFDMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5jcHAgKi8sCi0J
CQkJMUFBMkU1MUIxMkU0QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0aWVzLmggKi8sCi0JCQkpOwot
CQkJcGF0aCA9IGNnOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUFBQzRE
REUxNkIxQ0JGNjAwOTQyNUUzIC8qIFdlYlN0b3JhZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtODAxMiw3ICs3OTk5LDYgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMzcwOTUwNDExOEE4OEJBNDAwODdBRTVEIC8qIGNm
ICovLAotCQkJCTFBQTJFNTFBMTJFNEMwNTYwMEJDNDk2NiAvKiBjZyAqLywKIAkJCQk2QkU5NjlD
MjFFNTRENDY3MDA4Qjc0ODMgLyogY2xhc3NpZmllciAqLywKIAkJCQk0NDUwQUVCRTFEQzNGQUFD
MDA5OTQzRjIgLyogY29jb2EgKi8sCiAJCQkJMzcwOTUwNDIxOEE4OENERTAwODdBRTVEIC8qIGZv
dW5kYXRpb24gKi8sCkBAIC05MDU4LDcgKzkwNDQsNiBAQAogCQkJCTQxODk3RUQ4MUY0MTVEOEEw
MDE2RkE0MiAvKiBDYWNoZVN0b3JhZ2VFbmdpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkFC
RDJBMUY0REUwMDEwMDZBNkM5NyAvKiBDYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDE4OTdFREExRjQxNUQ4QTAwMTZGQTQyIC8qIENhY2hlU3RvcmFnZUVuZ2lu
ZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2
NiAvKiBDR1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRDk1NkYxMjg0ODU2NDAw
MUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGQUVDM0ExQjA2
NTc2MzAwMDlDNEU3IC8qIENoaWxkUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMTUxM0M2NzE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJveHkuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTA4MTIsNyArMTA3OTcsNiBAQAogCQkJCTQxMzVGQkQxMUY0RkI4MDkwMDc0
QzQ3QiAvKiBDYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDE4OTdFRDkxRjQxNUQ4QTAwMTZGQTQyIC8qIENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3Q0YwRTMxNjNBNDg2QzAwQzI5NTBGIC8qIENhY2hl
U3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMUFBMkU1MUUxMkU0QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0aWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBMkQ5NTcwMTI4NDg1NjQwMDFFQjk2MiAvKiBDaGlsZFByb2Nlc3MuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2OThGMTkxRTQ5MTAyMjAwNjRFODgxIC8qIENoaWxkUHJv
Y2Vzc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFOTNDRUQxOTI1MzMxMTAwQTFEQzQ4
IC8qIENoaWxkUHJvY2Vzc0lPUy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFkZTcwNTRkYTE1
YWVlYWJmOTAzOGY1ZTIzMDkwODViMDg5NDBhMGEuLjY1YmQxYWM1OTU5ZTYzNjhjZTI5MmM4MmU4
MjVjYzkyNDMzMmZhZWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxOC0wNy0yNCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEVuYWJsZSBE
aXNwbGF5TGlzdCByZWNvcmRpbmcgZm9yIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3ODQxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmUtYmFzZWxpbmUgdGhl
IGV4cGVjdGVkIHJlc3VsdCBvZiBvbmUgb2YgdGhlIGRpc3BsYXkgbGlzdCB0ZXN0cy4KKworICAg
ICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6CisKKzIw
MTgtMDctMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKwor
ICAgICAgICBUZW1wbGF0aXplIERpc3BsYXlMaXN0SXRlbXMgYW5kIHVzZSBzdGQ6OnR1cGxlIHRv
IHN0b3JlIHRoZSBhcmd1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4NzAwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlYmFzZWxpbmUgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLgorCisgICAgICAg
ICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjLXdr
MS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0Ogor
CiAyMDE4LTA3LTE3ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVuc2tpcCBMYXlvdXRUZXN0IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1kaXNwbGF5L2Rpc3BsYXktY29udGVudHMtZmlyc3QtbGV0dGVyLTAwMi5odG1sLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3Qt
ZXhwZWN0ZWQudHh0CmluZGV4IGE4ODNlNjg1MmUxODQyZGY5NjlmYmNhZTI1NmEyNzg3Y2Y5NmJm
YzkuLjdjN2E4OTRkZWIxZDNjMzA2Mzk4MGQ2YjYwNzBlMDNiOTk3NDJhY2QgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBl
Y3RlZC50eHQKQEAgLTEsMTMgKzEsMTUgQEAKICAKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFn
cyAyNTYpCi0gIChmaWxsLWNvbG9yICNDODAwMDApKQorICAoc3RhdGUtY2hhbmdlIAorICAgIChj
aGFuZ2UtZmxhZ3MgMjU2KQorICAgIChmaWxsLWNvbG9yICNDODAwMDApKSkKIChmaWxsLXJlY3QK
ICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6
ZSA1NXg1MCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xv
ciAjMDAwMEM4N0YpKQorICAoc3RhdGUtY2hhbmdlIAorICAgIChjaGFuZ2UtZmxhZ3MgMjU2KQor
ICAgIChmaWxsLWNvbG9yICMwMDAwQzg3RikpKQogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgz
MCwzMCkgc2l6ZSA1NXg1MCkKICAgKHJlY3QgYXQgKDMwLDMwKSBzaXplIDU1eDUwKSkKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hh
ZG93LWV4cGVjdGVkLnR4dAppbmRleCBkZTY5OGFlNjRkYjYyYzZjNDlhMjJlMGJiOWVmYzY1NzM0
OGViZmM4Li45OTg3YmFlMWFhODZlYmU3ZmNiYTVhYTdjNjg5MmQyZGQwYjIxOTE2IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CkBAIC01LDE0ICs1LDE1IEBACiAoc2F2ZQogICAocmVzdG9yZS1p
bmRleCA0KSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAxMDI0KQotICAoc2hhZG93LWJs
dXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRv
d3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCisgIChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1m
bGFncyAxMDI0KQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQog
KGZpbGwtY29tcG9zaXRlZC1yZWN0CiAgIChleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcp
CiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAg
KGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Ig
c291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAocmVzdG9yZSkKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRy
YW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDg0OGIwNzc1NDVhN2M2ODAyNzBlZWUxYmEwMWZi
YmQxZThiY2MzZmMuLjA1NGUzNGE0NTI4ZmZhZTM0ZTliMTQzNzM1ZDdlYjYzNTJkODMwYzIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNm
b3Jtcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMiwxOSArMiwyMCBAQAogKHRyYW5z
bGF0ZQogICAoeCAwLjAwKQogICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQorKGNvbmNh
dGVuYXRlLWN0bQogICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAs
LTE4LjMwKX0pKQogKHNhdmUKICAgKHJlc3RvcmUtaW5kZXggNSkpCiAoc2V0LXN0YXRlCi0gIChj
aGFuZ2UtZmxhZ3MgMTAyNCkKLSAgKHNoYWRvdy1ibHVyIDEyLjAwKQotICAoc2hhZG93LW9mZnNl
dCB3aWR0aD0xMCBoZWlnaHQ9MjApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQor
ICAoc3RhdGUtY2hhbmdlIAorICAgIChjaGFuZ2UtZmxhZ3MgMTAyNCkKKyAgICAoc2hhZG93LWJs
dXIgMTIuMDApCisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChz
aGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAogICAo
ZXh0ZW50IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKICAgKHJlY3QgYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRp
b24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92ZXIpCiAgIChi
bGVuZC1tb2RlIG5vcm1hbCkpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9k
aXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGM1ZjZhYzZi
MjVhOTg3ZmIwNGVlZTlhMTE5MTBiZWY2MWY3MzFhMzMuLmI5ZjViZjllNDg1YmMwZDQzOTEyYmFm
MTVmZDY1YTg4ZGMzODFlZWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9s
YXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtNiwyNiArNiwyNyBAQAogICAo
ZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4
MTA0KQogICAoY29sb3IgIzAwODAwMCkKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92
ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5v
cm1hbCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMTMxNDU2KQotICAoZmlsbC1jb2xv
ciAjMDAwMEZGKQotICAoc3Ryb2tlLXN0eWxlIDApCi0gIChzaG91bGQtYW50aWFsaWFzIDApKQor
ICAoc3RhdGUtY2hhbmdlIAorICAgIChjaGFuZ2UtZmxhZ3MgMTMxNDU2KQorICAgIChmaWxsLWNv
bG9yICMwMDAwRkYpCisgICAgKHN0cm9rZS1zdHlsZSAwKQorICAgIChzaG91bGQtYW50aWFsaWFz
IDApKSkKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgyKQorICAoZXh0
ZW50IGF0ICgwLDApIHNpemUgMTA0eDIuNTApCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDIp
CiAgIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgw
LDEwMikgc2l6ZSAxMDR4MikKKyAgKGV4dGVudCBhdCAoMCwxMDEuNTApIHNpemUgMTA0eDIuNTAp
CiAgIChyZWN0IGF0ICgwLDEwMikgc2l6ZSAxMDR4MikKICAgKGJvcmRlci10aGlja25lc3MgMS4w
MCkpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKKyAgKGV4dGVu
dCBhdCAoMCwwKSBzaXplIDIuNTB4MTA0KQogICAocmVjdCBhdCAoMCwwKSBzaXplIDJ4MTA0KQog
ICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSkKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMTAy
LDApIHNpemUgMngxMDQpCisgIChleHRlbnQgYXQgKDEwMS41MCwwKSBzaXplIDIuNTB4MTA0KQog
ICAocmVjdCBhdCAoMTAyLDApIHNpemUgMngxMDQpCiAgIChib3JkZXItdGhpY2tuZXNzIDEuMDAp
KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBw
ZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNr
aXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAppbmRleCBiZjdlZjI3NWY2MTg1NWE2MjUxYjYx
NzZkYjE3ZGQwMmU5MDQ4ZWMzLi41ZTFmYzk2OGI0NWFiN2MxMTcxNGNmM2I3NWUyNmY3ODQyZjNk
Nzg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xp
cHBlZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVw
bGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtNiw3ICs2LDcgQEAgcmVjb3Jk
ZWQ6CiAgIChleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAgIChyZWN0IGF0ICg0MTIs
MCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRp
b24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92ZXIpCiAgIChi
bGVuZC1tb2RlIG5vcm1hbCkpCiAKIHJlcGxheWVkOiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0
ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXggMjEwZTQ0YjA4NzdjMDQwY2E4
NTI0MjBkZDk3YjQyYzBlYWMxNzZjNS4uMTFlN2UwMWU5ODg4M2IwZmMzNjEzM2IyMmMwNTJhYWY3
Y2M5ZDA3MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5
bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1l
eHBlY3RlZC50eHQKQEAgLTUsMTUgKzUsMTYgQEAKIChzYXZlCiAgIChyZXN0b3JlLWluZGV4IDQp
KQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDUyNTMxMikKLSAgKHNoYWRvdy1ibHVyIDEy
LjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCi0gIChzaGFkb3dzLXVz
ZS1sZWdhY3ktcmFkaXVzIDApCi0gIChzaG91bGQtc3VicGl4ZWwtcXVhbnRpemUtZm9udHMgMCkp
CisgIChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1mbGFncyA1MjUzMTIpCisgICAgKHNoYWRv
dy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKKyAg
ICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKQorICAgIChzaG91bGQtc3VicGl4ZWwtcXVh
bnRpemUtZm9udHMgMCkpKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0CiAgIChleHRlbnQgYXQgKDQz
LDUwKSBzaXplIDEzNHgxMzcpCiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQogICAo
Y29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChj
b21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAo
cmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxh
eWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zv
cm1zLWV4cGVjdGVkLnR4dAppbmRleCAzODRlOTgxMjlkYzdlYmNkZDg5NmQzMTBmYThjNzVkMzY1
M2FiYjdmLi5hZmNjOGM0YTk0MWViOWNlMTM1MjE5NzUxNjUxZTkxMWZlMDdjNzA3IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5j
bHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQu
dHh0CkBAIC0yLDIwICsyLDIxIEBACiAodHJhbnNsYXRlCiAgICh4IDAuMDApCiAgICh5IDIyLjAw
KSkKLShjb25jYXRlbnRhdGUtY3RtCisoY29uY2F0ZW5hdGUtY3RtCiAgIChjdG0ge209KCgwLjg3
LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwtMTguMzApfSkpCiAoc2F2ZQogICAocmVzdG9y
ZS1pbmRleCA1KSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1MjUzMTIpCi0gIChzaGFk
b3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAo
c2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKQotICAoc2hvdWxkLXN1YnBpeGVsLXF1YW50aXpl
LWZvbnRzIDApKQorICAoc3RhdGUtY2hhbmdlIAorICAgIChjaGFuZ2UtZmxhZ3MgNTI1MzEyKQor
ICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWln
aHQ9MjApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkKKyAgICAoc2hvdWxkLXN1
YnBpeGVsLXF1YW50aXplLWZvbnRzIDApKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAogICAoZXh0
ZW50IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKICAgKHJlY3QgYXQgKDAsMCkg
c2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24g
c291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92ZXIpCiAgIChibGVu
ZC1tb2RlIG5vcm1hbCkpCiAocmVzdG9yZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345784</attachid>
            <date>2018-07-25 14:30:09 -0700</date>
            <delta_ts>2018-07-25 14:30:09 -0700</delta_ts>
            <desc>Patch for Review</desc>
            <filename>187980-review.patch</filename>
            <type>text/plain</type>
            <size>1769</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWFkMjIyZmU2MC4uNDc3ZGNmYjc3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxOC0wNy0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEFmdGVyIHJlcGxheWluZyBhIERpc3BsYXlMaXN0LCB0aGUg
c3RhdGUgb2YgdGhlIGRyYXdpbmcgY29udGV4dCBoYXMgdG8gYmUgcmVzdG9yZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Nzk4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgcHJvYmxlbSBjb3VsZCBo
YXBwZW4gaWYgd2UgYXJlIHJlcGxheWluZyBtdWx0aXBsZSBkaXNwbGF5IGxpc3RzIHRvIHRoZQor
ICAgICAgICBzYW1lIGRyYXdpbmcgY29udGV4dC4gV2hlbiByZXBsYXlpbmcgaXRzIERpc3BsYXlM
aXN0SXRlbXMsIHRoZSBEaXNwbGF5TGlzdAorICAgICAgICBleHBlY3RzIHRvIGZpbmQgdGhlIHN0
YXRlIG9mIHRoZSBkcmF3aW5nIGNvbnRleHQgdG8gYmUgZXhhY3RseSB0aGUgc2FtZQorICAgICAg
ICBpdCB3YXMgYXQgdGhlIHRpbWUgaXQgd2FzIHJlY29yZGVkLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpyZXBsYXkpOgorCiAyMDE4LTA3LTIz
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAg
RGlzcGxheUxpc3Q6OkRyYXdSZWN0KCkgc2hvdWxkIHRha2UgaGFsZiBvZiB0aGUgYm9yZGVyIHRo
aWNrbmVzcyBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbG9jYWxCb3VuZHMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggZWRiOWFmNDU5Y2Eu
LmYzMWM4NWIyOGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
CkBAIC00OSw2ICs0OSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gUmVwbGF5ZXI6
OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBib29sCiAgICAgaWYgKFVOTElL
RUxZKHRyYWNrUmVwbGF5TGlzdCkpCiAgICAgICAgIHJlcGxheUxpc3QgPSBzdGQ6Om1ha2VfdW5p
cXVlPERpc3BsYXlMaXN0PigpOwogCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKG1fY29udGV4dCk7CisgICAgCiAgICAgc2l6ZV90IG51bUl0ZW1zID0gbV9kaXNwbGF5
TGlzdC5pdGVtQ291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyAr
K2kpIHsKICAgICAgICAgYXV0byYgaXRlbSA9IG1fZGlzcGxheUxpc3QubGlzdCgpW2ldLmdldCgp
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>