<?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>41106</bug_id>
          
          <creation_ts>2010-06-23 14:52:33 -0700</creation_ts>
          <short_desc>[chromium] Allow composited layers to own their textures and specify how they get rendered</short_desc>
          <delta_ts>2010-06-24 11:11:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vangelis Kokkevis">vangelis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242105</commentid>
    <comment_count>0</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-06-23 14:52:33 -0700</bug_when>
    <thetext>This is in preparation for hooking up WebGL with the compositor. The current code is too inflexible and makes adding new layer types that need special handling difficult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242129</commentid>
    <comment_count>1</comment_count>
      <attachid>59570</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-06-23 15:54:23 -0700</bug_when>
    <thetext>Created attachment 59570
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242143</commentid>
    <comment_count>2</comment_count>
      <attachid>59570</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-23 16:24:51 -0700</bug_when>
    <thetext>Comment on attachment 59570
Proposed patch

Looks good to me.  Just a couple nits:

WebCore/platform/graphics/chromium/LayerChromium.cpp:399
 +  unsigned int WebGLLayerChromium::m_shaderProgramId = 0;
nit: webkit style is to just use &quot;unsigned&quot; instead of &quot;unsigned int&quot;

WebCore/platform/graphics/chromium/LayerChromium.h:257
 +  class ImageLayerChromium : public LayerChromium {
style-nit: one class per file is the rule.  would you be okay splitting
these out into their own files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242207</commentid>
    <comment_count>3</comment_count>
      <attachid>59593</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-06-23 18:04:50 -0700</bug_when>
    <thetext>Created attachment 59593
Proposed patch addressing review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242209</commentid>
    <comment_count>4</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-06-23 18:05:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 59570 [details])
&gt; Looks good to me.  Just a couple nits:
&gt; 
&gt; WebCore/platform/graphics/chromium/LayerChromium.cpp:399
&gt;  +  unsigned int WebGLLayerChromium::m_shaderProgramId = 0;
&gt; nit: webkit style is to just use &quot;unsigned&quot; instead of &quot;unsigned int&quot;

Done. Also fixed all other instances of unsigned in the layer code.

&gt; 
&gt; WebCore/platform/graphics/chromium/LayerChromium.h:257
&gt;  +  class ImageLayerChromium : public LayerChromium {
&gt; style-nit: one class per file is the rule.  would you be okay splitting
&gt; these out into their own files?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242597</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-24 11:11:25 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/61775</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59570</attachid>
            <date>2010-06-23 15:54:23 -0700</date>
            <delta_ts>2010-06-23 18:04:50 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>splitLayerTypes_41106.txt</filename>
            <type>text/plain</type>
            <size>44088</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTcxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjQgQEAKKzIwMTAtMDYtMjMgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtDaHJvbWl1bV0gQ3JlYXRlIHNwZWNpYWxpemVkIGNsYXNzZXMgZm9yIFRyYW5zZm9y
bSwKKyAgICAgICAgSW1hZ2UgYW5kIFdlYkdMIGxheWVycyB0byByZXBsYWNlIHRoZSByYXRoZXIg
bW9ub2xpdGhpYyBMYXllckNocm9taXVtIGNsYXNzLgorICAgICAgICBMYXllcnMgY2FuIG5vdyBv
d24gdGhlIEdMIHRleHR1cmUgdGhleSB1c2UgZm9yIGJhY2tpbmcgc3RvcmUgYW5kIGEgZGlmZmVy
ZW50CisgICAgICAgIHNoYWRpbmcgcHJvZ3JhbSBjYW4gYmUgdXNlZCBieSB0aGUgY29tcG9zaXRv
ciBmb3IgZWFjaCBsYXllciB0eXBlLiBXZWJHTCBsYXllcnMKKyAgICAgICAgYXJlIG5vdCB5ZXQg
aG9va2VkIHVwIHRvIEdyYXBoaWNzQ29udGV4dDNELgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDExMDYKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2Vy
dmVzM0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjop
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRy
YW5zZm9ybUxheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zv
cm1MYXllckNocm9taXVtOjpUcmFuc2Zvcm1MYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
TGF5ZXJDaHJvbWl1bTo6SW1hZ2VMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VM
YXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXll
ckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xM
YXllckNocm9taXVtOjp0ZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNo
cm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xM
YXllckNocm9taXVtOjpzZXRDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6b3duc1Rl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldFNoYWRlclByb2dyYW1JZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzaGFkZXJQcm9ncmFtSWQpOgorICAgICAgICAo
V2ViQ29yZTo6VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6b3duc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xMYXllckNocm9taXVtOjpzaGFkZXJQcm9ncmFtSWQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xMYXllckNocm9taXVtOjpzZXRTaGFkZXJQcm9ncmFtSWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyU2hhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYWRlclByb2dyYW06OlNoYWRlclByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hh
ZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdUZXh0dXJlZFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjopOgorCiAyMDEwLTA2LTIz
ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmlkIEh5YXR0LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAkocmV2
aXNpb24gNjE3MDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hybwogICAgICwgbV9jb250ZW50c0xh
eWVyUHVycG9zZShOb0NvbnRlbnRzTGF5ZXIpCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJIYXNCYWNr
Z3JvdW5kQ29sb3IoZmFsc2UpCiB7Ci0gICAgbV9sYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZShMYXllckNocm9taXVtOjpMYXllciwgdGhpcyk7CisgICAgbV9sYXllciA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSh0aGlzKTsKIAogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogfQpAQCAt
MzA3LDE4ICszMDcsMjUgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
VAogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CiAgICAgaWYgKGltYWdlKSB7
Ci0gICAgICAgIG1fcGVuZGluZ0NvbnRlbnRzSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKLSAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRz
TGF5ZXJGb3JJbWFnZTsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCisgICAgICAgIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNM
YXllclB1cnBvc2UgIT0gQ29udGVudHNMYXllckZvckltYWdlKSB7CisgICAgICAgICAgICBSZWZQ
dHI8SW1hZ2VMYXllckNocm9taXVtPiBpbWFnZUxheWVyID0gSW1hZ2VMYXllckNocm9taXVtOjpj
cmVhdGUodGhpcyk7CisgICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIoaW1hZ2VMYXllci5n
ZXQoKSk7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBpbWFnZUxheWVyOworICAgICAg
ICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJGb3JJbWFnZTsKICAg
ICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgSW1h
Z2VMYXllckNocm9taXVtKiBpbWFnZUxheWVyID0gc3RhdGljX2Nhc3Q8SW1hZ2VMYXllckNocm9t
aXVtKj4obV9jb250ZW50c0xheWVyLmdldCgpKTsKKyAgICAgICAgaW1hZ2VMYXllci0+c2V0Q29u
dGVudHMobmF0aXZlSW1hZ2UpOworICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKICAgICB9
IGVsc2UgewotICAgICAgICBtX3BlbmRpbmdDb250ZW50c0ltYWdlID0gMDsKLSAgICAgICAgbV9j
b250ZW50c0xheWVyUHVycG9zZSA9IE5vQ29udGVudHNMYXllcjsKLSAgICAgICAgaWYgKG1fY29u
dGVudHNMYXllcikKKyAgICAgICAgaWYgKG1fY29udGVudHNMYXllcikgewogICAgICAgICAgICAg
Y2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKLSAgICB9CiAKLSAgICB1cGRhdGVDb250ZW50c0ltYWdl
KCk7CisgICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVtb3Zl
ZCB2aWEgdXBkYXRlU3VibGF5ZXJMaXN0LgorICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0g
MDsKKyAgICAgICAgfQorICAgIH0KIAogICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCiAgICAgICAg
IHVwZGF0ZVN1YmxheWVyTGlzdCgpOwpAQCAtNDc2LDcgKzQ4Myw3IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjp1cGRhdGVMYXllclAKIHsKICAgICBpZiAobV9wcmVzZXJ2ZXMzRCAmJiAh
bV90cmFuc2Zvcm1MYXllcikgewogICAgICAgICAvLyBDcmVhdGUgdGhlIHRyYW5zZm9ybSBsYXll
ci4KLSAgICAgICAgbV90cmFuc2Zvcm1MYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZShMYXll
ckNocm9taXVtOjpUcmFuc2Zvcm1MYXllciwgdGhpcyk7CisgICAgICAgIG1fdHJhbnNmb3JtTGF5
ZXIgPSBUcmFuc2Zvcm1MYXllckNocm9taXVtOjpjcmVhdGUodGhpcyk7CiAKICAgICAgICAgLy8g
Q29weSB0aGUgcG9zaXRpb24gZnJvbSB0aGlzIGxheWVyLgogICAgICAgICB1cGRhdGVMYXllclBv
c2l0aW9uKCk7CkBAIC01NDAsMjYgKzU0Nyw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
Ojp1cGRhdGVMYXllckIKICAgICAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9jb250
ZW50c0xheWVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzSW1hZ2UoKQotewotICAgIGlmIChtX3BlbmRpbmdDb250ZW50c0ltYWdlKSB7Ci0gICAgICAg
IGlmICghbV9jb250ZW50c0xheWVyLmdldCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gaW1hZ2VMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZShMYXllckNocm9taXVt
OjpMYXllciwgdGhpcyk7Ci0KLSAgICAgICAgICAgIHNldHVwQ29udGVudHNMYXllcihpbWFnZUxh
eWVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IGltYWdlTGF5ZXI7Ci0g
ICAgICAgICAgICAvLyBtX2NvbnRlbnRzTGF5ZXIgd2lsbCBiZSBwYXJlbnRlZCBieSB1cGRhdGVT
dWJsYXllckxpc3QuCi0gICAgICAgIH0KLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRDb250
ZW50cyhtX3BlbmRpbmdDb250ZW50c0ltYWdlKTsKLSAgICAgICAgbV9wZW5kaW5nQ29udGVudHNJ
bWFnZSA9IDA7Ci0KLSAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gTm8gaW1hZ2UuIG1fY29udGVudHNMYXllciB3aWxsIGJlIHJlbW92ZWQgdmlh
IHVwZGF0ZVN1YmxheWVyTGlzdC4KLSAgICAgICAgbV9jb250ZW50c0xheWVyID0gMDsKLSAgICB9
Ci19Ci0KIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c1ZpZGVvKCkK
IHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgJKHJl
dmlzaW9uIDYxNzA2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDEzICsxMzUsMTIgQEAg
cHJpdmF0ZToKICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAgICAgICAgTm9Db250
ZW50c0xheWVyID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdlLAotICAgICAgICBD
b250ZW50c0xheWVyRm9yVmlkZW8KKyAgICAgICAgQ29udGVudHNMYXllckZvclZpZGVvLAorICAg
ICAgICBDb250ZW50c0xheWVyRm9yV2ViR0wKICAgICB9OwogCiAgICAgQ29udGVudHNMYXllclB1
cnBvc2UgbV9jb250ZW50c0xheWVyUHVycG9zZTsKICAgICBib29sIG1fY29udGVudHNMYXllckhh
c0JhY2tncm91bmRDb2xvciA6IDE7Ci0KLSAgICBOYXRpdmVJbWFnZVB0ciBtX3BlbmRpbmdDb250
ZW50c0ltYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA2MTcwNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDIwICs0NCwyMCBAQAogCiAjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCi1QYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNy
ZWF0ZShMYXllclR5cGUgdHlwZSwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK3Vuc2ln
bmVkIGludCBMYXllckNocm9taXVtOjptX3NoYWRlclByb2dyYW1JZCA9IDA7CisKK1Bhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtKHR5
cGUsIG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtKG93bmVy
KSk7CiB9CiAKLUxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oTGF5ZXJUeXBlIHR5cGUsIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCitMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBtX25lZWRzRGlzcGxheU9uQm91
bmRzQ2hhbmdlKGZhbHNlKQogICAgICwgbV9vd25lcihvd25lcikKLSAgICAsIG1fbGF5ZXJUeXBl
KHR5cGUpCiAgICAgLCBtX3N1cGVybGF5ZXIoMCkKICAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQog
ICAgICwgbV9ib3JkZXJXaWR0aCgwKQpAQCAtNzEsMTMgKzcxLDExIEBAIExheWVyQ2hyb21pdW06
OkxheWVyQ2hyb21pdW0oTGF5ZXJUeXBlIHQKICAgICAsIG1fZWRnZUFudGlhbGlhc2luZ01hc2so
MCkKICAgICAsIG1faGlkZGVuKGZhbHNlKQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQot
ICAgICwgbV9jb250ZW50c0dyYXZpdHkoQm90dG9tKQogICAgICwgbV9vcGFjaXR5KDEuMCkKICAg
ICAsIG1fb3BhcXVlKHRydWUpCiAgICAgLCBtX3pQb3NpdGlvbigwLjApCiAgICAgLCBtX2dlb21l
dHJ5RmxpcHBlZChmYWxzZSkKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKLSAgICAsIG1f
Y29udGVudHMoMCkKIHsKIH0KIApAQCAtMTA2LDg3ICsxMDQsOTEgQEAgdm9pZCBMYXllckNocm9t
aXVtOjpzZXRMYXllclJlbmRlcmVyKExheQogdm9pZCBMYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlQ29udGVudHModW5zaWduZWQgaW50IHRleHR1cmVJZCkKIHsKICAgICBSZW5kZXJMYXllckJh
Y2tpbmcqIGJhY2tpbmcgPSBzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJhY2tpbmcqPihtX293bmVy
LT5jbGllbnQoKSk7CisgICAgaWYgKCFiYWNraW5nIHx8IGJhY2tpbmctPnBhaW50aW5nR29lc1Rv
V2luZG93KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7
CisKKyAgICB2b2lkKiBwaXhlbHMgPSAwOworICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlS
ZWN0KTsKKyAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7CisgICAgSW50U2l6ZSBiaXRt
YXBTaXplOwogCi0gICAgaWYgKGJhY2tpbmcgJiYgIWJhY2tpbmctPnBhaW50aW5nR29lc1RvV2lu
ZG93KCkpIHsKLSAgICAgICAgdm9pZCogcGl4ZWxzID0gMDsKLSAgICAgICAgSW50UmVjdCBkaXJ0
eVJlY3QobV9kaXJ0eVJlY3QpOwotICAgICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7
Ci0gICAgICAgIEludFNpemUgYml0bWFwU2l6ZTsKICNpZiBQTEFURk9STShTS0lBKQotICAgICAg
ICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IDA7Ci0gICAgICAgIE93blB0cjxza2lhOjpQ
bGF0Zm9ybUNhbnZhcz4gY2FudmFzOwotICAgICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tp
YT4gc2tpYUNvbnRleHQ7Ci0gICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNz
Q29udGV4dDsKLSAgICAgICAgaWYgKGRyYXdzQ29udGVudCgpKSB7IC8vIExheWVyIGNvbnRlbnRz
IG11c3QgYmUgZHJhd24gaW50byBhIGNhbnZhcy4KLSAgICAgICAgICAgIC8vIENsaXAgdGhlIGRp
cnR5UmVjdCB0byB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIgdG8gYXZvaWQgZHJhd2luZyBvdXRzaWRl
Ci0gICAgICAgICAgICAvLyB0aGUgYm91bmRzIG9mIHRoZSBiYWNraW5nIHRleHR1cmUuCi0gICAg
ICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91
bmRzKSk7Ci0KLSAgICAgICAgICAgIGNhbnZhcy5zZXQobmV3IHNraWE6OlBsYXRmb3JtQ2FudmFz
KGRpcnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIGZhbHNlKSk7Ci0gICAgICAg
ICAgICBza2lhQ29udGV4dC5zZXQobmV3IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgp
KSk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cg
dXAgY29ycmVjdGx5LiBXaXRob3V0IGl0LAotICAgICAgICAgICAgLy8gR0RJIHJlbmRlcnMgd2l0
aCB6ZXJvIGFscGhhIGFuZCB0aGUgdGV4dCBiZWNvbWVzIGludmlzaWJsZS4KLSAgICAgICAgICAg
IC8vIFVuZm9ydHVuYXRlbHksIHNldHRpbmcgdGhpcyB0byB0cnVlIGRpc2FibGVzIGNsZWFydHlw
ZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBz
bG93IHRleHQgcmVuZGVyaW5nIHBhdGg/Ci0gICAgICAgICAgICBza2lhQ29udGV4dC0+c2V0RHJh
d2luZ1RvSW1hZ2VCdWZmZXIodHJ1ZSk7Ci0KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXQobmV3IEdyYXBoaWNzQ29udGV4dChyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0Kj4oc2tpYUNvbnRleHQuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEJyaW5nIHRo
ZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0g
ICAgICAgICAgICBjYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLWRpcnR5
UmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLWRpcnR5UmVjdC55KCkpKTsKLQotICAg
ICAgICAgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmdyYXBoaWNzQ29u
dGV4dCwgZGlydHlSZWN0KTsKLSAgICAgICAgICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBj
YW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgICAgICAgICAgc2tp
YUJpdG1hcCA9ICZiaXRtYXA7Ci0gICAgICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9i
b3VuZHM7Ci0gICAgICAgIH0gZWxzZSB7IC8vIExheWVyIGlzIGEgY29udGFpbmVyLgotICAgICAg
ICAgICAgLy8gVGhlIGxheWVyIGNvbnRhaW5zIGFuIEltYWdlLgotICAgICAgICAgICAgTmF0aXZl
SW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNraWEqPihjb250
ZW50cygpKTsKLSAgICAgICAgICAgIHNraWFCaXRtYXAgPSBza2lhSW1hZ2U7Ci0gICAgICAgICAg
ICByZXF1aXJlZFRleHR1cmVTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lh
Qml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoc2tpYUJpdG1h
cCk7Ci0gICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7Ci0gICAgICAg
IFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOwotICAg
ICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJh
dGlvbnM/Ci0gICAgICAgIGlmIChza2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZykgewotICAgICAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7Ci0g
ICAgICAgICAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lh
Qml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgICAgIH0KKyAgICBjb25zdCBTa0JpdG1hcCogc2tpYUJp
dG1hcCA9IDA7CisgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBjYW52YXM7CisgICAg
T3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IHNraWFDb250ZXh0OworICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKKworICAgIHJlcXVpcmVkVGV4dHVyZVNpemUg
PSBtX2JvdW5kczsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91
bmRzKTsKKworICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkIHRo
ZW4gd2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQorICAgIC8vIGNvbnRlbnRzIG9mIHRoZSBsYXll
ci4KKyAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVTaXpl
KQorICAgICAgICBkaXJ0eVJlY3QgPSBib3VuZHNSZWN0OworICAgIGVsc2UgeworICAgICAgICAv
LyBDbGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lkIGRy
YXdpbmcgb3V0c2lkZQorICAgICAgICAvLyB0aGUgYm91bmRzIG9mIHRoZSBiYWNraW5nIHRleHR1
cmUuCisgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVjdCk7CisgICAgfQorCisg
ICAgY2FudmFzLnNldChuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlSZWN0LndpZHRoKCks
IGRpcnR5UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKKyAgICBza2lhQ29udGV4dC5zZXQobmV3IFBs
YXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7CisKKyAgICAvLyBUaGlzIGlzIG5lZWRl
ZCB0byBnZXQgdGV4dCB0byBzaG93IHVwIGNvcnJlY3RseS4gV2l0aG91dCBpdCwKKyAgICAvLyBH
REkgcmVuZGVycyB3aXRoIHplcm8gYWxwaGEgYW5kIHRoZSB0ZXh0IGJlY29tZXMgaW52aXNpYmxl
LgorICAgIC8vIFVuZm9ydHVuYXRlbHksIHNldHRpbmcgdGhpcyB0byB0cnVlIGRpc2FibGVzIGNs
ZWFydHlwZS4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIHRha2UgdXMgZG93biBhIHZlcnkgc2xv
dyB0ZXh0IHJlbmRlcmluZyBwYXRoPworICAgIHNraWFDb250ZXh0LT5zZXREcmF3aW5nVG9JbWFn
ZUJ1ZmZlcih0cnVlKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29u
dGV4dChyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oc2tpYUNvbnRl
eHQuZ2V0KCkpKSk7CisKKyAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5h
dGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgorICAgIGNhbnZhcy0+dHJhbnNsYXRlKHN0YXRp
Y19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigt
ZGlydHlSZWN0LnkoKSkpOworCisgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVu
dHMoKmdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0
bWFwID0gY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBza2lh
Qml0bWFwID0gJmJpdG1hcDsKKyAgICBBU1NFUlQoc2tpYUJpdG1hcCk7CisKKyAgICBTa0F1dG9M
b2NrUGl4ZWxzIGxvY2soKnNraWFCaXRtYXApOworICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNv
bmZpZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRv
IHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KKyAgICBpZiAoc2tpYUNvbmZpZyA9
PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsKKyAgICAgICAgcGl4ZWxzID0gc2tpYUJp
dG1hcC0+Z2V0UGl4ZWxzKCk7CisgICAgICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHNraWFCaXRt
YXAtPndpZHRoKCksIHNraWFCaXRtYXAtPmhlaWdodCgpKTsKKyAgICB9CiAjZWxzZQogI2Vycm9y
ICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKLSAgICAgICAg
aWYgKHBpeGVscykgewotICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0
ZXh0dXJlSWQpOwotICAgICAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaWQgb3Igc2l6ZSBjaGFu
Z2VkIHNpbmNlIGxhc3QgdGltZSB0aGVuIHdlIG5lZWQgdG8gdGVsbCBHTAotICAgICAgICAgICAg
Ly8gdG8gcmUtYWxsb2NhdGUgYSB0ZXh0dXJlLgotICAgICAgICAgICAgaWYgKG1fYWxsb2NhdGVk
VGV4dHVyZUlkICE9IHRleHR1cmVJZCB8fCByZXF1aXJlZFRleHR1cmVTaXplICE9IG1fYWxsb2Nh
dGVkVGV4dHVyZVNpemUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYml0bWFwU2l6ZSA9PSBy
ZXF1aXJlZFRleHR1cmVTaXplKTsKLSAgICAgICAgICAgICAgICBnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwgR0xfUkdCQSwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpLCByZXF1aXJl
ZFRleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhl
bHMpOwotCi0gICAgICAgICAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7
Ci0gICAgICAgICAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJlcXVpcmVkVGV4dHVy
ZVNpemU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChkaXJ0
eVJlY3Qud2lkdGgoKSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkgJiYgZGlydHlS
ZWN0LmhlaWdodCgpIDw9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChkaXJ0eVJlY3Qud2lkdGgoKSA9PSBiaXRtYXBTaXplLndpZHRoKCkg
JiYgZGlydHlSZWN0LmhlaWdodCgpID09IGJpdG1hcFNpemUuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBkaXJ0eVJlY3QueCgpLCBk
aXJ0eVJlY3QueSgpLCBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdodCgpLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQogCi0gICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7Ci0gICAgbV9kaXJ0eVJlY3Qu
c2V0U2l6ZShGbG9hdFNpemUoKSk7CisgICAgaWYgKHBpeGVscykKKyAgICAgICAgdXBkYXRlVGV4
dHVyZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXplLCByZXF1aXJlZFRleHR1cmVTaXplLCAgZGlydHlS
ZWN0LCB0ZXh0dXJlSWQpOwogfQogCi12b2lkIExheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKE5h
dGl2ZUltYWdlUHRyIGNvbnRlbnRzKQordm9pZCBMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJl
UmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNpemUmIGJpdG1hcFNpemUsIGNvbnN0IEludFNp
emUmIHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2ln
bmVkIGludCB0ZXh0dXJlSWQpCiB7Ci0gICAgLy8gQ2hlY2sgaWYgdGhlIGltYWdlIGhhcyBjaGFu
Z2VkLgotICAgIGlmIChtX2NvbnRlbnRzID09IGNvbnRlbnRzKQorICAgIGlmICghcGl4ZWxzKQog
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZW50cyA9IGNvbnRlbnRzOwotICAgIHNldE5lZWRz
RGlzcGxheSgpOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQp
OworICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlkIG9yIHNpemUgY2hhbmdlZCBzaW5jZSBsYXN0IHRp
bWUgdGhlbiB3ZSBuZWVkIHRvIHRlbGwgR0wKKyAgICAvLyB0byByZS1hbGxvY2F0ZSBhIHRleHR1
cmUuCisgICAgaWYgKG1fYWxsb2NhdGVkVGV4dHVyZUlkICE9IHRleHR1cmVJZCB8fCByZXF1aXJl
ZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUpIHsKKyAgICAgICAgQVNTRVJU
KGJpdG1hcFNpemUgPT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSk7CisgICAgICAgIGdsVGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCks
IHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVscyk7CisKKyAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7
CisgICAgICAgIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUgPSByZXF1aXJlZFRleHR1cmVTaXplOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh1cGRhdGVSZWN0LndpZHRoKCkgPD0gbV9hbGxv
Y2F0ZWRUZXh0dXJlU2l6ZS53aWR0aCgpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPD0gbV9hbGxv
Y2F0ZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIEFTU0VSVCh1cGRhdGVSZWN0Lndp
ZHRoKCkgPT0gYml0bWFwU2l6ZS53aWR0aCgpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPT0gYml0
bWFwU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwg
dXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsK
KyAgICB9CisKKyAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsKKyAgICBtX2Nv
bnRlbnRzRGlydHkgPSBmYWxzZTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Nv
bW1pdCgpCkBAIC0zMzAsNiArMzMyLDk0IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNE
aXNwbGF5KCkKICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwogfQogCitQYXNzUmVmUHRyPFRy
YW5zZm9ybUxheWVyQ2hyb21pdW0+IFRyYW5zZm9ybUxheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJh
bnNmb3JtTGF5ZXJDaHJvbWl1bShvd25lcikpOworfQorCitUcmFuc2Zvcm1MYXllckNocm9taXVt
OjpUcmFuc2Zvcm1MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCisg
ICAgOiBMYXllckNocm9taXVtKG93bmVyKQoreworfQorCitQYXNzUmVmUHRyPEltYWdlTGF5ZXJD
aHJvbWl1bT4gSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlTGF5ZXJDaHJvbWl1bShv
d25lcikpOworfQorCitJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAg
ICAsIG1fY29udGVudHMoMCkKK3sKK30KKwordm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENv
bnRlbnRzKE5hdGl2ZUltYWdlUHRyIGNvbnRlbnRzKQoreworICAgIC8vIENoZWNrIGlmIHRoZSBp
bWFnZSBoYXMgY2hhbmdlZC4KKyAgICBpZiAobV9jb250ZW50cyA9PSBjb250ZW50cykKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGVudHMgPSBjb250ZW50czsKKyAgICBzZXROZWVkc0Rpc3Bs
YXkoKTsKK30KKwordm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVDb250ZW50
cyh1bnNpZ25lZCBpbnQgdGV4dHVyZUlkKQoreworICAgIHZvaWQqIHBpeGVscyA9IDA7CisgICAg
SW50UmVjdCBkaXJ0eVJlY3QobV9kaXJ0eVJlY3QpOworICAgIEludFNpemUgcmVxdWlyZWRUZXh0
dXJlU2l6ZTsKKyAgICBJbnRTaXplIGJpdG1hcFNpemU7CisKKyNpZiBQTEFURk9STShTS0lBKQor
ICAgIC8vIFRoZSBsYXllciBjb250YWlucyBhbiBJbWFnZS4KKyAgICBOYXRpdmVJbWFnZVNraWEq
IHNraWFJbWFnZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU2tpYSo+KG1fY29udGVudHMpOwor
ICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gc2tpYUltYWdlOworICAgIHJlcXVpcmVk
VGV4dHVyZVNpemUgPSBJbnRTaXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRtYXAtPmhl
aWdodCgpKTsKKyAgICBBU1NFUlQoc2tpYUJpdG1hcCk7CisKKyAgICBTa0F1dG9Mb2NrUGl4ZWxz
IGxvY2soKnNraWFCaXRtYXApOworICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNr
aWFCaXRtYXAtPmNvbmZpZygpOworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQg
bW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KKyAgICBpZiAoc2tpYUNvbmZpZyA9PSBTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcpIHsKKyAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0
UGl4ZWxzKCk7CisgICAgICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHNraWFCaXRtYXAtPndpZHRo
KCksIHNraWFCaXRtYXAtPmhlaWdodCgpKTsKKyAgICB9CisjZWxzZQorI2Vycm9yICJOZWVkIHRv
IGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCisjZW5kaWYKKyAgICBpZiAocGl4ZWxzKQor
ICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChwaXhlbHMsIGJpdG1hcFNpemUsIHJlcXVpcmVkVGV4
dHVyZVNpemUsICBkaXJ0eVJlY3QsIHRleHR1cmVJZCk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xM
YXllckNocm9taXVtPiBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xMYXllckNocm9t
aXVtKG93bmVyKSk7CiB9CiAKKwordW5zaWduZWQgaW50IFdlYkdMTGF5ZXJDaHJvbWl1bTo6bV9z
aGFkZXJQcm9ncmFtSWQgPSAwOworCitXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogTGF5ZXJDaHJvbWl1bShv
d25lcikKKyAgICAsIG1fY29udGV4dCgwKQorICAgICwgbV90ZXh0dXJlSWQoMCkKKyAgICAsIG1f
dGV4dHVyZUNoYW5nZWQoZmFsc2UpCit7Cit9CisKK3Vuc2lnbmVkIGludCBXZWJHTExheWVyQ2hy
b21pdW06OnRleHR1cmVJZCgpCit7CisgICAgcmV0dXJuIG1fdGV4dHVyZUlkOworfQorCit2b2lk
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIGludCB0
ZXh0dXJlSWQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorfQorCit2b2lkIFdlYkdMTGF5
ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Cit9CisKK30KICNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gNjE3MDYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMjEgKzUyLDE4IEBAIGNsYXNzIFBsYXRmb3JtQ2FudmFzOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOwogCisvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxheWVycy4gVGhlIGlt
cGxlbWVudGF0aW9uIGNvdmVycyBsYXllcnMgdGhhdCByZXF1aXJlCisvLyBhIEdyYXBoaWNzQ29u
dGV4dCB0byByZW5kZXIgdGhlaXIgY29udGVudHMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRl
cml2ZWQgZnJvbQorLy8gdGhpcyBjbGFzcy4KIGNsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMg
UmVmQ291bnRlZDxMYXllckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBMYXllclR5cGUg
eyBMYXllciwgVHJhbnNmb3JtTGF5ZXIgfTsKLSAgICBlbnVtIEZpbHRlclR5cGUgeyBMaW5lYXIs
IE5lYXJlc3QsIFRyaWxpbmVhciwgTGFuY3pvcyB9OwotICAgIGVudW0gQ29udGVudHNHcmF2aXR5
VHlwZSB7IENlbnRlciwgVG9wLCBCb3R0b20sIExlZnQsIFJpZ2h0LCBUb3BMZWZ0LCBUb3BSaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb3R0b21MZWZ0LCBCb3R0b21SaWdo
dCwgUmVzaXplLCBSZXNpemVBc3BlY3QsIFJlc2l6ZUFzcGVjdEZpbGwgfTsKLQotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclR5cGUsIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckNocm9t
aXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOwogCiAgICAgfkxh
eWVyQ2hyb21pdW0oKTsKIAotICAgIHZvaWQgZGlzcGxheShQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCopOwotCiAgICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KTsK
ICAgICB2b2lkIGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4sIHNpemVf
dCBpbmRleCk7CiAgICAgdm9pZCByZXBsYWNlU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bSogcmVmZXJl
bmNlLCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IG5ld0xheWVyKTsKQEAgLTkzLDkgKzkwLDYg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2xlYXJzQ29udGV4dChib29sIGNsZWFycykgeyBtX2Ns
ZWFyc0NvbnRleHQgPSBjbGVhcnM7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGNsZWFy
c0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NsZWFyc0NvbnRleHQ7IH0KIAotICAgIHZvaWQg
c2V0Q29udGVudHNHcmF2aXR5KENvbnRlbnRzR3Jhdml0eVR5cGUgZ3Jhdml0eVR5cGUpIHsgbV9j
b250ZW50c0dyYXZpdHkgPSBncmF2aXR5VHlwZTsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIENv
bnRlbnRzR3Jhdml0eVR5cGUgY29udGVudHNHcmF2aXR5KCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50c0dyYXZpdHk7IH0KLQogICAgIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRl
ZCkgeyBtX2RvdWJsZVNpZGVkID0gZG91YmxlU2lkZWQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAg
ICBib29sIGRvdWJsZVNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVTaWRlZDsgfQogCkBA
IC0xNTIsMjcgKzE0Niw0MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQo
Ym9vbCBmbGlwcGVkKSB7IG1fZ2VvbWV0cnlGbGlwcGVkID0gZmxpcHBlZDsgc2V0TmVlZHNDb21t
aXQoKTsgfQogICAgIGJvb2wgZ2VvbWV0cnlGbGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9nZW9t
ZXRyeUZsaXBwZWQ7IH0KIAotICAgIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVk
IGludCB0ZXh0dXJlSWQpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHMo
dW5zaWduZWQgaW50IHRleHR1cmVJZCk7CiAgICAgYm9vbCBjb250ZW50c0RpcnR5KCkgeyByZXR1
cm4gbV9jb250ZW50c0RpcnR5OyB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRzKE5hdGl2ZUltYWdl
UHRyIGNvbnRlbnRzKTsKLSAgICBOYXRpdmVJbWFnZVB0ciBjb250ZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudHM7IH0KLQogICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fZHJhd1RyYW5zZm9ybSA9IHRyYW5zZm9y
bTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAKICAgICB2b2lkIHNldERyYXdPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KICAgICBmbG9hdCBk
cmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KIAotICAgIGJvb2wg
ZHJhd3NDb250ZW50KCkgeyByZXR1cm4gbV9vd25lciAmJiBtX293bmVyLT5kcmF3c0NvbnRlbnQo
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiBtX293bmVyICYm
IG1fb3duZXItPmRyYXdzQ29udGVudCgpOyB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUg
bGF5ZXIgaGFzIGl0cyBvd24gR0wgdGV4dHVyZSBhbmQgZmFsc2UgaWYgdGhlIHRleHR1cmUKKyAg
ICAvLyBuZWVkcyB0byBiZSBhbGxvY2F0ZWQgYnkgdGhlIGNvbXBvc2l0b3IuCisgICAgdmlydHVh
bCBib29sIG93bnNUZXh0dXJlKCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIFJldHVybnMg
dGhlIGlkIG9mIHRoZSBHTCB0ZXh0dXJlIHRoYXQgc3RvcmVzIHRoZSBjb250ZW50cyBvZiB0aGlz
IGxheWVyLgorICAgIC8vIERlcml2ZWQgbGF5ZXIgY2xhc3NlcyB0aGF0IG93biB0aGVpciBvd24g
dGV4dHVyZXMgc2hvdWxkIG92ZXJ3cml0ZSB0aGlzIG1ldGhvZC4KKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCB0ZXh0dXJlSWQoKSB7IHJldHVybiBtX2FsbG9jYXRlZFRleHR1cmVJZDsgfQogCiAg
ICAgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+cHJlc2Vy
dmVzM0QoKTsgfQogCiAgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJv
bWl1bSopOwogCi1wcml2YXRlOgotICAgIExheWVyQ2hyb21pdW0oTGF5ZXJUeXBlLCBHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTaGFkZXJQcm9ncmFt
SWQodW5zaWduZWQgaW50IHNoYWRlclByb2dyYW1JZCkgeyBtX3NoYWRlclByb2dyYW1JZCA9IHNo
YWRlclByb2dyYW1JZDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IHNoYWRlclByb2dyYW1J
ZCgpIHsgcmV0dXJuIG1fc2hhZGVyUHJvZ3JhbUlkOyB9CisKK3Byb3RlY3RlZDoKKyAgICBHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG1fb3duZXI7CisgICAgTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KHZvaWQqIHBp
eGVscywgY29uc3QgSW50U2l6ZSYgYml0bWFwU2l6ZSwgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRU
ZXh0dXJlU2l6ZSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCB1bnNpZ25lZCBpbnQgdGV4dHVy
ZUlkKTsKKworICAgIEludFNpemUgbV9ib3VuZHM7CisgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0
OworICAgIGJvb2wgbV9jb250ZW50c0RpcnR5OwogCitwcml2YXRlOgogICAgIHZvaWQgc2V0TmVl
ZHNDb21taXQoKTsKIAogICAgIHZvaWQgc2V0U3VwZXJsYXllcihMYXllckNocm9taXVtKiBzdXBl
cmxheWVyKSB7IG1fc3VwZXJsYXllciA9IHN1cGVybGF5ZXI7IH0KQEAgLTE5MywxNyArMjAyLDEx
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fc3VibGF5
ZXJzOwogICAgIExheWVyQ2hyb21pdW0qIG1fc3VwZXJsYXllcjsKIAotICAgIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogbV9vd25lcjsKLQotICAgIExheWVyVHlwZSBtX2xheWVyVHlwZTsKLQotICAg
IEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50U2l6ZSBtX2JhY2tpbmdTdG9yZVNpemU7CiAgICAg
RmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKICAg
ICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKICAgICBDb2xvciBtX2JvcmRlckNvbG9yOwotICAg
IEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKIAogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9s
YXllclJlbmRlcmVyOwogCkBAIC0yMjQsNiArMjI3LDEwIEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgaW50IG1fYWxsb2NhdGVkVGV4dHVyZUlkOwogICAgIEludFNpemUgbV9hbGxvY2F0ZWRUZXh0
dXJlU2l6ZTsKIAorICAgIC8vIFRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IGFsbCBsYXllcnMg
b2YgdGhpcyB0eXBlIGlzIHRoZSBzYW1lLgorICAgIC8vIFRoaXMgc3RhdGljIGNhbiBiZSBzaGFk
b3dlZCBieSBkZXJpdmVkIGNsYXNzZXMgdG8gdXNlIGEgc3BlY2lhbCBzaGFkZXIuCisgICAgc3Rh
dGljIHVuc2lnbmVkIGludCBtX3NoYWRlclByb2dyYW1JZDsKKwogICAgIGJvb2wgbV9jbGVhcnND
b250ZXh0OwogICAgIGJvb2wgbV9kb3VibGVTaWRlZDsKICAgICBib29sIG1faGlkZGVuOwpAQCAt
MjMyLDE1ICsyMzksNTcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZ2VvbWV0cnlGbGlwcGVkOwog
ICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZTsKIAotICAgIGJvb2wgbV9jb250
ZW50c0RpcnR5OworICAgIFN0cmluZyBtX25hbWU7Cit9OworCisvLyBBIExheWVyIHRoYXQgZG9l
c24ndCBkcmF3IGFueSBjb250ZW50IGJ1dCBzaW1wbHkgZXhpc3RzIHRvIGdyb3VwIGFuZAorLy8g
dHJhbnNmb3JtIGl0cyBkZXNjZW5kYW50cy4KK2NsYXNzIFRyYW5zZm9ybUxheWVyQ2hyb21pdW0g
OiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3du
ZXIgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gZmFsc2U7
IH0KKworcHJpdmF0ZToKKyAgICBUcmFuc2Zvcm1MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogb3duZXIpOworfTsKIAotICAgIENvbnRlbnRzR3Jhdml0eVR5cGUgbV9jb250ZW50
c0dyYXZpdHk7CisvLyBBIExheWVyIHRoYXQgY29udGFpbnMgb25seSBhbiBJbWFnZSBlbGVtZW50
LgorY2xhc3MgSW1hZ2VMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3ND
b250ZW50KCkgeyByZXR1cm4gbV9jb250ZW50czsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVU
ZXh0dXJlQ29udGVudHModW5zaWduZWQgaW50IHRleHR1cmVJZCk7CisgICAgdm9pZCBzZXRDb250
ZW50cyhOYXRpdmVJbWFnZVB0cik7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VMYXllckNocm9taXVt
KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogICAgIE5hdGl2ZUltYWdlUHRyIG1fY29u
dGVudHM7Ci0gICAgU3RyaW5nIG1fbmFtZTsKIH07CiAKLX0KKy8vIEEgTGF5ZXIgdGhhdCBjb250
YWlucyBhIFdlYkdMIGVsZW1lbnQuCitjbGFzcyBXZWJHTExheWVyQ2hyb21pdW0gOiBwdWJsaWMg
TGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xMYXll
ckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOworICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgb3duc1RleHR1cmUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCBpbnQpOworICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IHRleHR1cmVJZCgpOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IHNoYWRlclBy
b2dyYW1JZCgpIHsgcmV0dXJuIG1fc2hhZGVyUHJvZ3JhbUlkOyB9CisKKyAgICB2b2lkIHNldENv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOworCisgICAgc3RhdGljIHZv
aWQgc2V0U2hhZGVyUHJvZ3JhbUlkKHVuc2lnbmVkIGludCBzaGFkZXJQcm9ncmFtSWQpIHsgbV9z
aGFkZXJQcm9ncmFtSWQgPSBzaGFkZXJQcm9ncmFtSWQ7IH0KIAorcHJpdmF0ZToKKyAgICBXZWJH
TExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICB1bnNpZ25lZCBpbnQgbV90ZXh0dXJlSWQ7Cisg
ICAgYm9vbCBtX3RleHR1cmVDaGFuZ2VkOworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBtX3No
YWRlclByb2dyYW1JZDsKK307CisKK30KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24g
NjE3MDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMjIgQEAgc3RhdGlj
IEdMdWludCBsb2FkU2hhZGVyUHJvZ3JhbShjb25zdCBjaAogICAgIHJldHVybiBwcm9ncmFtT2Jq
ZWN0OwogfQogCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlTGF5ZXJTaGFkZXIo
U2hhZGVyUHJvZ3JhbVR5cGUgdHlwZSwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgcHJv
Z3JhbUlkID0gbG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlLCBmcmFnbWVudFNo
YWRlclNvdXJjZSk7CisgICAgQVNTRVJUKHByb2dyYW1JZCk7CisKKyAgICBTaGFkZXJQcm9ncmFt
KiBwcm9ncmFtID0gJm1fc2hhZGVyUHJvZ3JhbXNbdHlwZV07CisKKyAgICBwcm9ncmFtLT5tX3No
YWRlclByb2dyYW1JZCA9IHByb2dyYW1JZDsKKyAgICBwcm9ncmFtLT5tX3NhbXBsZXJMb2NhdGlv
biA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JZCwgInNfdGV4dHVyZSIpOworICAgIHBy
b2dyYW0tPm1fbWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSWQs
ICJtYXRyaXgiKTsKKyAgICBwcm9ncmFtLT5tX2FscGhhTG9jYXRpb24gPSBnbEdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtSWQsICJhbHBoYSIpOworCisgICAgcmV0dXJuIHByb2dyYW1JZDsKK30K
KworCiBzdGF0aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtKQogewogICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CkBAIC0x
NjQsNiArMTgwLDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IEwK
ICAgICByZXR1cm4gdHJhbnNmb3JtQS5tNDMoKSA8IHRyYW5zZm9ybUIubTQzKCk7CiB9CiAKK1No
YWRlclByb2dyYW06OlNoYWRlclByb2dyYW0oKQorICAgIDogbV9zaGFkZXJQcm9ncmFtSWQoMCkK
KyAgICAsIG1fc2FtcGxlckxvY2F0aW9uKC0xKQorICAgICwgbV9tYXRyaXhMb2NhdGlvbigtMSkK
KyAgICAsIG1fYWxwaGFMb2NhdGlvbigtMSkKK3sKK30KKwogUGFzc093blB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCiB7
CiAgICAgcmV0dXJuIG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ocGFnZSk7CkBAIC0xNzIsMTUg
KzE5NiwxMyBAQCBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSCiBMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShQYWdlKiBwYWdlKQogICAg
IDogbV9yb290TGF5ZXIoMCkKICAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQotICAgICwgbV9s
YXllclByb2dyYW1PYmplY3QoMCkKLSAgICAsIG1fYm9yZGVyUHJvZ3JhbU9iamVjdCgwKQotICAg
ICwgbV9zY3JvbGxQcm9ncmFtT2JqZWN0KDApCiAgICAgLCBtX3Bvc2l0aW9uTG9jYXRpb24oMCkK
ICAgICAsIG1fdGV4Q29vcmRMb2NhdGlvbigxKQogICAgICwgbV9wYWdlKHBhZ2UpCiAgICAgLCBt
X3Jvb3RMYXllclRleHR1cmVXaWR0aCgwKQogICAgICwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0
KDApCiAgICAgLCBtX3Njcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCisgICAgLCBtX2N1
cnJlbnRTaGFkZXJQcm9ncmFtVHlwZShOdW1TaGFkZXJQcm9ncmFtVHlwZXMpCiB7CiAgICAgbV9x
dWFkVmJvSWRzW1ZlcnRpY2VzXSA9IG1fcXVhZFZib0lkc1tMYXllckVsZW1lbnRzXSA9IDA7CiAg
ICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gKGluaXRHTCgpICYmIGluaXRpYWxpemVTaGFyZWRH
TE9iamVjdHMoKSk7CkBAIC0xOTEsOSArMjEzLDExIEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
fkxheWVyUmVuZGVyZXJDaHIKICAgICBpZiAobV9oYXJkd2FyZUNvbXBvc2l0aW5nKSB7CiAgICAg
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgICAgICBnbERlbGV0ZUJ1ZmZlcnMoMywgbV9x
dWFkVmJvSWRzKTsKLSAgICAgICAgZ2xEZWxldGVQcm9ncmFtKG1fbGF5ZXJQcm9ncmFtT2JqZWN0
KTsKLSAgICAgICAgZ2xEZWxldGVQcm9ncmFtKG1fc2Nyb2xsUHJvZ3JhbU9iamVjdCk7Ci0gICAg
ICAgIGdsRGVsZXRlUHJvZ3JhbShtX2JvcmRlclByb2dyYW1PYmplY3QpOworCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTnVtU2hhZGVyUHJvZ3JhbVR5cGVzOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmIChtX3NoYWRlclByb2dyYW1zW2ldLm1fc2hhZGVyUHJvZ3JhbUlkKQorICAgICAgICAg
ICAgICAgIGdsRGVsZXRlUHJvZ3JhbShtX3NoYWRlclByb2dyYW1zW2ldLm1fc2hhZGVyUHJvZ3Jh
bUlkKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEZyZWUgdXAgYWxsIEdMIHRleHR1cmVz
LgpAQCAtMjI0LDcgKzI0OCwyMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Um9v
dExheWVyCiAgICAgbV9yb290TGF5ZXJDYW52YXNTaXplID0gc2l6ZTsKIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwg
Ym9vbCBzY3JvbGxpbmcpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyUHJv
Z3JhbShTaGFkZXJQcm9ncmFtVHlwZSBwcm9ncmFtVHlwZSkKK3sKKyAgICBpZiAocHJvZ3JhbVR5
cGUgIT0gbV9jdXJyZW50U2hhZGVyUHJvZ3JhbVR5cGUpIHsKKyAgICAgICAgU2hhZGVyUHJvZ3Jh
bSogcHJvZ3JhbSA9ICZtX3NoYWRlclByb2dyYW1zW3Byb2dyYW1UeXBlXTsKKyAgICAgICAgZ2xV
c2VQcm9ncmFtKHByb2dyYW0tPm1fc2hhZGVyUHJvZ3JhbUlkKTsKKyAgICAgICAgbV9jdXJyZW50
U2hhZGVyUHJvZ3JhbVR5cGUgPSBwcm9ncmFtVHlwZTsKKworICAgICAgICAvLyBTZXQgdGhlIHVu
aWZvcm0gbG9jYXRpb25zIG1hdGNoaW5nIHRoZSBwcm9ncmFtLgorICAgICAgICBtX3NhbXBsZXJM
b2NhdGlvbiA9IHByb2dyYW0tPm1fc2FtcGxlckxvY2F0aW9uOworICAgICAgICBtX21hdHJpeExv
Y2F0aW9uID0gcHJvZ3JhbS0+bV9tYXRyaXhMb2NhdGlvbjsKKyAgICAgICAgbV9hbHBoYUxvY2F0
aW9uID0gcHJvZ3JhbS0+bV9hbHBoYUxvY2F0aW9uOworICAgIH0KK30KKwordm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSkKIHsK
ICAgICBzdGF0aWMgR0xmbG9hdCBnbE1hdHJpeFsxNl07CiAKQEAgLTIzOCwxMCArMjc2LDkgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZAogCiAgICAgdG9HTE1hdHJp
eCgmZ2xNYXRyaXhbMF0sIHJlbmRlck1hdHJpeCk7CiAKLSAgICBpbnQgbWF0cml4TG9jYXRpb24g
PSAoc2Nyb2xsaW5nID8gbV9zY3JvbGxNYXRyaXhMb2NhdGlvbiA6IG1fbWF0cml4TG9jYXRpb24p
OwotICAgIGdsVW5pZm9ybU1hdHJpeDRmdihtYXRyaXhMb2NhdGlvbiwgMSwgZmFsc2UsICZnbE1h
dHJpeFswXSk7CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KG1fbWF0cml4TG9jYXRpb24sIDEsIGZh
bHNlLCAmZ2xNYXRyaXhbMF0pOwogCi0gICAgaWYgKCFzY3JvbGxpbmcpCisgICAgaWYgKG1fYWxw
aGFMb2NhdGlvbiAhPSAtMSkKICAgICAgICAgZ2xVbmlmb3JtMWYobV9hbHBoYUxvY2F0aW9uLCBv
cGFjaXR5KTsKIAogICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFUywgNiwgR0xfVU5TSUdO
RURfU0hPUlQsIDApOwpAQCAtMzEwLDEwICszNDcsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnMoYwogICAgICAgICBzY3JvbGxlZExheWVyTWF0cml4LnNjYWxlM2Qo
MSwgLTEsIDEpOwogCiAgICAgICAgIC8vIFN3aXRjaCBzaGFkZXJzIHRvIGF2b2lkIFJHQiBzd2l6
emxpbmcuCi0gICAgICAgIGdsVXNlUHJvZ3JhbShtX3Njcm9sbFByb2dyYW1PYmplY3QpOwotICAg
ICAgICBnbFVuaWZvcm0xaShtX3Njcm9sbFNhbXBsZXJMb2NhdGlvbiwgMCk7CisgICAgICAgIHVz
ZVNoYWRlclByb2dyYW0oU2Nyb2xsTGF5ZXJQcm9ncmFtKTsKKyAgICAgICAgZ2xVbmlmb3JtMWko
bV9zaGFkZXJQcm9ncmFtc1tTY3JvbGxMYXllclByb2dyYW1dLm1fc2FtcGxlckxvY2F0aW9uLCAw
KTsKIAotICAgICAgICBkcmF3VGV4dHVyZWRRdWFkKHNjcm9sbGVkTGF5ZXJNYXRyaXgsIHZpc2li
bGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpLCAxLCB0cnVlKTsKKyAgICAgICAg
ZHJhd1RleHR1cmVkUXVhZChzY3JvbGxlZExheWVyTWF0cml4LCB2aXNpYmxlUmVjdC53aWR0aCgp
LCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSk7CiAKICAgICAgICAgZ2xDb3B5VGV4U3ViSW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCAwLCAwLCAwLCAwLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250
ZW50UmVjdC5oZWlnaHQoKSk7CiAKQEAgLTM0OSwxMSArMzg2LDExIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGMKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9C
SVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKTsKIAogICAgIC8vIFJlbmRlciB0aGUgcm9vdCBsYXll
ciB1c2luZyBhIHF1YWQgdGhhdCB0YWtlcyB1cCB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBvZiB0
aGUgd2luZG93LgotICAgIGdsVXNlUHJvZ3JhbShtX2xheWVyUHJvZ3JhbU9iamVjdCk7CisgICAg
dXNlU2hhZGVyUHJvZ3JhbShDb250ZW50TGF5ZXJQcm9ncmFtKTsKICAgICBnbFVuaWZvcm0xaSht
X3NhbXBsZXJMb2NhdGlvbiwgMCk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJNYXRy
aXg7CiAgICAgbGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QodmlzaWJsZVJlY3Qud2lkdGgoKSAvIDIs
IHZpc2libGVSZWN0LmhlaWdodCgpIC8gMiwgMCk7Ci0gICAgZHJhd1RleHR1cmVkUXVhZChsYXll
ck1hdHJpeCwgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsIGZh
bHNlKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyTWF0cml4LCB2aXNpYmxlUmVjdC53aWR0
aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSk7CiAKICAgICAvLyBJZiBjdWxsaW5nIGlzIGVu
YWJsZWQgdGhlbiB3ZSB3aWxsIGN1bGwgdGhlIGJhY2tmYWNlLgogICAgIGdsQ3VsbEZhY2UoR0xf
QkFDSyk7CkBAIC00NDIsMTMgKzQ3OSwxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0RlYnVnQm9yCiAgICAgaWYgKCFib3JkZXJDb2xvci5hbHBoYSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBnbFVzZVByb2dyYW0obV9ib3JkZXJQcm9ncmFtT2JqZWN0KTsKKyAgICB1c2VT
aGFkZXJQcm9ncmFtKERlYnVnQm9yZGVyUHJvZ3JhbSk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcmVuZGVyTWF0cml4ID0gbWF0cml4OwogICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJv
dW5kcygpOwogICAgIHJlbmRlck1hdHJpeC5zY2FsZTNkKGJvdW5kcy53aWR0aCgpLCBib3VuZHMu
aGVpZ2h0KCksIDEpOwogICAgIHJlbmRlck1hdHJpeC5tdWx0aXBseShtX3Byb2plY3Rpb25NYXRy
aXgpOwogICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCByZW5kZXJNYXRyaXgpOwotICAgIGds
VW5pZm9ybU1hdHJpeDRmdihtX2JvcmRlck1hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwgJmdsTWF0
cml4WzBdKTsKKyAgICB1bnNpZ25lZCBpbnQgYm9yZGVyTWF0cml4TG9jYXRpb24gPSBtX3NoYWRl
clByb2dyYW1zW0RlYnVnQm9yZGVyUHJvZ3JhbV0ubV9tYXRyaXhMb2NhdGlvbjsKKyAgICBnbFVu
aWZvcm1NYXRyaXg0ZnYoYm9yZGVyTWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhb
MF0pOwogCiAgICAgZ2xVbmlmb3JtNGYobV9ib3JkZXJDb2xvckxvY2F0aW9uLCBib3JkZXJDb2xv
ci5yZWQoKSAvIDI1NS4wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyQ29sb3IuZ3JlZW4oKSAvIDI1NS4wLApAQCAtNDYwLDkgKzQ5OCw2IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3IKICAgICAvLyBUaGUgaW5kaWNlcyBmb3Ig
dGhlIGxpbmUgYXJlIHN0b3JlZCBpbiB0aGUgc2FtZSBhcnJheSBhcyB0aGUgdHJpYW5nbGUgaW5k
aWNlcy4KICAgICBnbERyYXdFbGVtZW50cyhHTF9MSU5FX0xPT1AsIDQsIEdMX1VOU0lHTkVEX1NI
T1JULCAodm9pZCopKDYgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSk7CiAgICAgY2hlY2tHTEVy
cm9yKCk7Ci0KLSAgICAvLyBTd2l0Y2ggYmFjayB0byB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCBm
b3IgbGF5ZXIgY29udGVudHMuCi0gICAgZ2xVc2VQcm9ncmFtKG1fbGF5ZXJQcm9ncmFtT2JqZWN0
KTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIGFueSBwYXJ0IG9mIHRoZSBsYXllciBmYWxscyB3
aXRoaW4gdGhlIHZpc2libGVSZWN0CkBAIC01MjQsMTEgKzU1OSw5IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMKICAgICAvLyBDaGVjayBpZiB0aGUgbGF5ZXIgZmFs
bHMgd2l0aGluIHRoZSB2aXNpYmxlIGJvdW5kcyBvZiB0aGUgcGFnZS4KICAgICBib29sIGxheWVy
VmlzaWJsZSA9IGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBsb2NhbE1hdHJpeCwgdmlzaWJsZVJlY3Qp
OwogCi0gICAgYm9vbCBsYXllckhhc0NvbnRlbnQgPSBsYXllci0+ZHJhd3NDb250ZW50KCkgfHwg
bGF5ZXItPmNvbnRlbnRzKCk7Ci0KICAgICBib29sIHNraXBMYXllciA9IGZhbHNlOwogICAgIGlm
IChib3VuZHMud2lkdGgoKSA+IDIwNDggfHwgYm91bmRzLmhlaWdodCgpID4gMjA0OCkgewotICAg
ICAgICBpZiAobGF5ZXJIYXNDb250ZW50KQorICAgICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVu
dCgpKQogICAgICAgICAgICAgTE9HKExheWVyUmVuZGVyZXIsICJTa2lwcGluZyBsYXllciB3aXRo
IHNpemUgJWQgJWQiLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKICAgICAgICAg
c2tpcExheWVyID0gdHJ1ZTsKICAgICB9CkBAIC01NzEsMTUgKzYwNCwxNiBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKExhCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGxvY2FsTWF0cml4ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKICAgICBJbnRTaXpl
IGJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGVyZSBhcmUg
dHdvIHR5cGVzIG9mIGxheWVyczoKLSAgICAvLyAxLiBMYXllcnMgdGhhdCBkcmF3IHRoZWlyIG93
biBjb250ZW50IHZpYSB0aGUgR3JhcGhpY3NDb250ZXh0IChsYXllci0+ZHJhd3NDb250ZW50KCkg
PT0gdHJ1ZSkuCi0gICAgLy8gMi4gTGF5ZXJzIHRoYXQgYXJlIHB1cmUgY29udGFpbmVycyBvZiBp
bWFnZXMvdmlkZW8vZXRjIHdob3NlIGNvbnRlbnQgaXMgc2ltcGx5Ci0gICAgLy8gICAgY29waWVk
IGludG8gdGhlIGJhY2tpbmcgdGV4dHVyZSAobGF5ZXItPmNvbnRlbnRzKCkgPT0gdHJ1ZSkuCi0g
ICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSB8fCBsYXllci0+Y29udGVudHMoKSkgewotICAg
ICAgICBpbnQgdGV4dHVyZUlkID0gZ2V0VGV4dHVyZUlkKGxheWVyKTsKLSAgICAgICAgLy8gSWYg
bm8gdGV4dHVyZSBoYXMgYmVlbiBjcmVhdGVkIGZvciB0aGUgbGF5ZXIgeWV0IHRoZW4gY3JlYXRl
IG9uZSBub3cuCi0gICAgICAgIGlmICh0ZXh0dXJlSWQgPT0gLTEpCi0gICAgICAgICAgICB0ZXh0
dXJlSWQgPSBhc3NpZ25UZXh0dXJlRm9yTGF5ZXIobGF5ZXIpOworICAgIGlmIChsYXllci0+ZHJh
d3NDb250ZW50KCkpIHsKKyAgICAgICAgaW50IHRleHR1cmVJZDsKKyAgICAgICAgaWYgKGxheWVy
LT5vd25zVGV4dHVyZSgpKQorICAgICAgICAgICAgdGV4dHVyZUlkID0gbGF5ZXItPnRleHR1cmVJ
ZCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRleHR1cmVJZCA9IGdldFRleHR1cmVJ
ZChsYXllcik7CisgICAgICAgICAgICAvLyBJZiBubyB0ZXh0dXJlIGhhcyBiZWVuIGNyZWF0ZWQg
Zm9yIHRoZSBsYXllciB5ZXQgdGhlbiBjcmVhdGUgb25lIG5vdy4KKyAgICAgICAgICAgIGlmICh0
ZXh0dXJlSWQgPT0gLTEpCisgICAgICAgICAgICAgICAgdGV4dHVyZUlkID0gYXNzaWduVGV4dHVy
ZUZvckxheWVyKGxheWVyKTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIFJlZHJhdyB0aGUgY29u
dGVudHMgb2YgdGhlIGxheWVyIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgaWYgKGxheWVyLT5jb250
ZW50c0RpcnR5KCkpIHsKQEAgLTU4NywxNCArNjIxLDE5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXIoTGEKICAgICAgICAgICAgIGxheWVyLT51cGRhdGVUZXh0dXJlQ29u
dGVudHModGV4dHVyZUlkKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHRlbXBvcmFyeSB1bnRpbCBXZWJHTCBsYXllcnMgc3RvcCBjaGFuZ2luZyB0aGUgY3VycmVudAor
ICAgICAgICAvLyBjb250ZXh0LgorICAgICAgICBpZiAobGF5ZXItPm93bnNUZXh0dXJlKCkpCisg
ICAgICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwogICAgICAgICBpZiAobGF5ZXItPmRv
dWJsZVNpZGVkKCkpCiAgICAgICAgICAgICBnbERpc2FibGUoR0xfQ1VMTF9GQUNFKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgZ2xFbmFibGUoR0xfQ1VMTF9GQUNFKTsKIAogICAgICAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7Ci0KLSAgICAgICAgZHJhd1Rl
eHR1cmVkUXVhZChsb2NhbE1hdHJpeCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwg
bGF5ZXItPmRyYXdPcGFjaXR5KCksIGZhbHNlKTsKKyAgICAgICAgdXNlU2hhZGVyUHJvZ3JhbShz
dGF0aWNfY2FzdDxTaGFkZXJQcm9ncmFtVHlwZT4obGF5ZXItPnNoYWRlclByb2dyYW1JZCgpKSk7
CisgICAgICAgIGRyYXdUZXh0dXJlZFF1YWQobG9jYWxNYXRyaXgsIGJvdW5kcy53aWR0aCgpLCBi
b3VuZHMuaGVpZ2h0KCksIGxheWVyLT5kcmF3T3BhY2l0eSgpKTsKICAgICB9CiAKICAgICAvLyBE
cmF3IHRoZSBkZWJ1ZyBib3JkZXIgaWYgdGhlcmUgaXMgb25lLgpAQCAtNjE2LDE0ICs2NTUsMTUg
QEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRHTCgpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLS8vIEJpbmRzIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSB0byBhIGNvbW1vbiBsb2Nh
dGlvbiBhY3Jvc3MgYWxsIHRocmVlIHByb2dyYW1zCi0vLyB1c2VkIGJ5IHRoZSBjb21wb3NpdG9y
LiBUaGlzIGFsbG93cyB0aGUgY29kZSB0byBiaW5kIHRoZSBhdHRyaWJ1dGVzIG9ubHkgb25jZQot
Ly8gZXZlbiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIHByb2dyYW1zLgotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihpbnQgbG9jYXRpb24sIGNoYXIq
IGF0dHJpYk5hbWUpCi17Ci0gICAgZ2xCaW5kQXR0cmliTG9jYXRpb24obV9sYXllclByb2dyYW1P
YmplY3QsIGxvY2F0aW9uLCBhdHRyaWJOYW1lKTsKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbiht
X2JvcmRlclByb2dyYW1PYmplY3QsIGxvY2F0aW9uLCBhdHRyaWJOYW1lKTsKLSAgICBnbEJpbmRB
dHRyaWJMb2NhdGlvbihtX3Njcm9sbFByb2dyYW1PYmplY3QsIGxvY2F0aW9uLCBhdHRyaWJOYW1l
KTsKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25z
KFNoYWRlclByb2dyYW1UeXBlIHByb2dyYW0pCit7CisgICAgdW5zaWduZWQgaW50IHByb2dyYW1J
ZCA9IG1fc2hhZGVyUHJvZ3JhbXNbcHJvZ3JhbV0ubV9zaGFkZXJQcm9ncmFtSWQ7CisgICAgZ2xC
aW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbUlkLCBtX3Bvc2l0aW9uTG9jYXRpb24sICJhX3Bvc2l0
aW9uIik7CisgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbUlkLCBtX3RleENvb3JkTG9j
YXRpb24sICJhX3RleENvb3JkIik7CisKKyAgICAvLyBSZS1saW5rIHRoZSBwcm9ncmFtIGZvciB0
aGUgbmV3IGF0dHJpYnV0ZSBsb2NhdGlvbnMgdG8gdGFrZSBlZmZlY3QuCisgICAgZ2xMaW5rUHJv
Z3JhbShwcm9ncmFtSWQpOworICAgIGNoZWNrR0xFcnJvcigpOwogfQogCiBib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCkBAIC02NjMsNiArNzAz
LDE5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAg
IiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56
LCB0ZXhDb2xvci53KTsgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwogCisgICAgLy8gV2ViR0wgbGF5ZXJzIG5lZWQg
dG8gYmUgZmxpcHBlZCB2ZXJ0aWNhbGx5IGFuZCB0aGVpciBjb2xvcnMgc2hvdWxkbid0IGJlCisg
ICAgLy8gc3dpenpsZWQuCisgICAgY2hhciB3ZWJHTEZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQor
ICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc190ZXh0dXJlOyAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBmbG9hdCBhbHBoYTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAg
ICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENv
b3JkLngsIDEuMCAtIHZfdGV4Q29vcmQueSkpOyBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9y
ID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAq
IGFscGhhOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiI7CisKICAgICAvLyBTaGFkZXJzIGZvciBkcmF3aW5nIHRoZSBk
ZWJ1ZyBib3JkZXJzIGFyb3VuZCB0aGUgbGF5ZXJzLgogICAgIGNoYXIgYm9yZGVyVmVydGV4U2hh
ZGVyU3RyaW5nW10gPQogICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIK
QEAgLTY5Miw0OSArNzQ1LDM4IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDN9OyAvLyBBIGxpbmUg
cGF0aCBmb3IgZHJhd2luZyB0aGUgbGF5ZXIgYm9yZGVyLgogCiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9sYXllclByb2dyYW1PYmplY3QgPSBsb2FkU2hhZGVyUHJvZ3JhbSh2ZXJ0
ZXhTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKTsKLSAgICBpZiAoIW1fbGF5ZXJQ
cm9ncmFtT2JqZWN0KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFk
ZXIgcHJvZ3JhbSBmb3IgbGF5ZXJzIik7CisKKyAgICBpZiAoIWNyZWF0ZUxheWVyU2hhZGVyKENv
bnRlbnRMYXllclByb2dyYW0sIHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21lbnRTaGFkZXJTdHJp
bmcpKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3Jh
bSBmb3IgY29udGVudCBsYXllcnMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBMYXllckNocm9taXVtOjpzZXRTaGFkZXJQcm9ncmFtSWQoQ29udGVudExheWVyUHJvZ3JhbSk7
CisKKyAgICBpZiAoIWNyZWF0ZUxheWVyU2hhZGVyKFdlYkdMTGF5ZXJQcm9ncmFtLCB2ZXJ0ZXhT
aGFkZXJTdHJpbmcsIHdlYkdMRnJhZ21lbnRTaGFkZXJTdHJpbmcpKSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgV2ViR0wgbGF5ZXJzIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgV2ViR0xMYXllckNocm9taXVtOjpz
ZXRTaGFkZXJQcm9ncmFtSWQoV2ViR0xMYXllclByb2dyYW0pOwogCi0gICAgbV9zY3JvbGxQcm9n
cmFtT2JqZWN0ID0gbG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCBzY3JvbGxG
cmFnbWVudFNoYWRlclN0cmluZyk7Ci0gICAgaWYgKCFtX3Njcm9sbFByb2dyYW1PYmplY3QpIHsK
KyAgICBpZiAoIWNyZWF0ZUxheWVyU2hhZGVyKFNjcm9sbExheWVyUHJvZ3JhbSwgdmVydGV4U2hh
ZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVudFNoYWRlclN0cmluZykpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIGZvciBzY3JvbGxpbmcgbGF5ZXIi
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1fYm9yZGVyUHJvZ3JhbU9i
amVjdCA9IGxvYWRTaGFkZXJQcm9ncmFtKGJvcmRlclZlcnRleFNoYWRlclN0cmluZywgYm9yZGVy
RnJhZ21lbnRTaGFkZXJTdHJpbmcpOwotICAgIGlmICghbV9ib3JkZXJQcm9ncmFtT2JqZWN0KSB7
CisgICAgaWYgKCFjcmVhdGVMYXllclNoYWRlcihEZWJ1Z0JvcmRlclByb2dyYW0sIGJvcmRlclZl
cnRleFNoYWRlclN0cmluZywgYm9yZGVyRnJhZ21lbnRTaGFkZXJTdHJpbmcpKSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgZGVidWcgYm9y
ZGVycyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLy8gU3BlY2lmeSB0
aGUgYXR0cmliIGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24gYW5kIG1ha2UgaXQgdGhlIHNhbWUg
Zm9yIGFsbCB0aHJlZSBwcm9ncmFtcyB0bworICAgIC8vIFNwZWNpZnkgdGhlIGF0dHJpYiBsb2Nh
dGlvbiBmb3IgdGhlIHBvc2l0aW9uIGFuZCB0ZXhDb29yZCBhbmQgbWFrZSBpdCB0aGUgc2FtZSBm
b3IgYWxsIHByb2dyYW1zIHRvCiAgICAgLy8gYXZvaWQgYmluZGluZyByZS1iaW5kaW5nIHRoZSB2
ZXJ0ZXggYXR0cmlidXRlcy4KLSAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24obV9wb3NpdGlv
bkxvY2F0aW9uLCAiYV9wb3NpdGlvbiIpOwotICAgIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbiht
X3RleENvb3JkTG9jYXRpb24sICJhX3RleENvb3JkIik7Ci0KLSAgICBjaGVja0dMRXJyb3IoKTsK
LQotICAgIC8vIFJlLWxpbmsgdGhlIHNoYWRlcnMgdG8gZ2V0IHRoZSBuZXcgYXR0cmliIGxvY2F0
aW9uIHRvIHRha2UgZWZmZWN0LgotICAgIGdsTGlua1Byb2dyYW0obV9sYXllclByb2dyYW1PYmpl
Y3QpOwotICAgIGdsTGlua1Byb2dyYW0obV9ib3JkZXJQcm9ncmFtT2JqZWN0KTsKLSAgICBnbExp
bmtQcm9ncmFtKG1fc2Nyb2xsUHJvZ3JhbU9iamVjdCk7Ci0KLSAgICBjaGVja0dMRXJyb3IoKTsK
KyAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25zKENvbnRlbnRMYXllclByb2dyYW0pOworICAg
IGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbnMoV2ViR0xMYXllclByb2dyYW0pOworICAgIGJpbmRD
b21tb25BdHRyaWJMb2NhdGlvbnMoRGVidWdCb3JkZXJQcm9ncmFtKTsKKyAgICBiaW5kQ29tbW9u
QXR0cmliTG9jYXRpb25zKFNjcm9sbExheWVyUHJvZ3JhbSk7CiAKLSAgICAvLyBHZXQgbG9jYXRp
b25zIG9mIHVuaWZvcm1zIGZvciB0aGUgbGF5ZXIgY29udGVudCBzaGFkZXIgcHJvZ3JhbS4KLSAg
ICBtX3NhbXBsZXJMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fbGF5ZXJQcm9ncmFt
T2JqZWN0LCAic190ZXh0dXJlIik7Ci0gICAgbV9tYXRyaXhMb2NhdGlvbiA9IGdsR2V0VW5pZm9y
bUxvY2F0aW9uKG1fbGF5ZXJQcm9ncmFtT2JqZWN0LCAibWF0cml4Iik7Ci0gICAgbV9hbHBoYUxv
Y2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9sYXllclByb2dyYW1PYmplY3QsICJhbHBo
YSIpOwotCi0gICAgbV9zY3JvbGxNYXRyaXhMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9u
KG1fc2Nyb2xsUHJvZ3JhbU9iamVjdCwgIm1hdHJpeCIpOwotICAgIG1fc2Nyb2xsU2FtcGxlckxv
Y2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9zY3JvbGxQcm9ncmFtT2JqZWN0LCAic190
ZXh0dXJlIik7Ci0KLSAgICAvLyBHZXQgbG9jYXRpb25zIG9mIHVuaWZvcm1zIGZvciB0aGUgZGVi
dWcgYm9yZGVyIHNoYWRlciBwcm9ncmFtLgotICAgIG1fYm9yZGVyTWF0cml4TG9jYXRpb24gPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbihtX2JvcmRlclByb2dyYW1PYmplY3QsICJtYXRyaXgiKTsKLSAg
ICBtX2JvcmRlckNvbG9yTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2JvcmRlclBy
b2dyYW1PYmplY3QsICJjb2xvciIpOworICAgIC8vIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGNv
bG9yIHVuaWZvcm0gZm9yIHRoZSBkZWJ1ZyBib3JkZXIgc2hhZGVyIHByb2dyYW0uCisgICAgbV9i
b3JkZXJDb2xvckxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9zaGFkZXJQcm9ncmFt
c1tEZWJ1Z0JvcmRlclByb2dyYW1dLm1fc2hhZGVyUHJvZ3JhbUlkLCAiY29sb3IiKTsKIAogICAg
IGdsR2VuQnVmZmVycygzLCBtX3F1YWRWYm9JZHMpOwogICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJB
WV9CVUZGRVIsIG1fcXVhZFZib0lkc1tWZXJ0aWNlc10pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCShyZXZpc2lvbiA2MTcwNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDE2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdMRVMyQ29udGV4dDsKIGNsYXNzIFBhZ2U7
CiAKK2NsYXNzIFNoYWRlclByb2dyYW0geworcHVibGljOgorICAgIFNoYWRlclByb2dyYW0oKTsK
KworICAgIHVuc2lnbmVkIGludCBtX3NoYWRlclByb2dyYW1JZDsKKyAgICBpbnQgbV9zYW1wbGVy
TG9jYXRpb247CisgICAgaW50IG1fbWF0cml4TG9jYXRpb247CisgICAgaW50IG1fYWxwaGFMb2Nh
dGlvbjsKK307CisKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQg
cmVuZGVyIGxheWVycyB1c2luZyBHTC4KIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CkBAIC03NCwxNyArODQsMjMgQEAgcHVibGljOgog
ICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQuZ2V0KCk7IH0KIAogcHJpdmF0ZToKKyAg
ICBlbnVtIFNoYWRlclByb2dyYW1UeXBlIHsgRGVidWdCb3JkZXJQcm9ncmFtLCBTY3JvbGxMYXll
clByb2dyYW0sIENvbnRlbnRMYXllclByb2dyYW0sIFdlYkdMTGF5ZXJQcm9ncmFtLCBOdW1TaGFk
ZXJQcm9ncmFtVHlwZXMgfTsKKwogICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVy
Q2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CiAKICAgICB2b2lk
IGRyYXdMYXllcihMYXllckNocm9taXVtKik7CiAKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcihM
YXllckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAotICAgIHZvaWQg
ZHJhd1RleHR1cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LCBib29sIHNjcm9sbGluZyk7Cisg
ICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgsIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHkpOwogCiAgICAgYm9v
bCBpc0xheWVyVmlzaWJsZShMYXllckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CiAKLSAgICB2b2lkIGJpbmRDb21tb25B
dHRyaWJMb2NhdGlvbihpbnQgbG9jYXRpb24sIGNoYXIqIGF0dHJpYk5hbWUpOworICAgIGJvb2wg
Y3JlYXRlTGF5ZXJTaGFkZXIoU2hhZGVyUHJvZ3JhbVR5cGUsIGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworCisgICAgdm9p
ZCB1c2VTaGFkZXJQcm9ncmFtKFNoYWRlclByb2dyYW1UeXBlKTsKKworICAgIHZvaWQgYmluZENv
bW1vbkF0dHJpYkxvY2F0aW9ucyhTaGFkZXJQcm9ncmFtVHlwZSk7CiAKICAgICBlbnVtIFZib0lk
cyB7IFZlcnRpY2VzLCBMYXllckVsZW1lbnRzIH07CiAKQEAgLTk2LDEwICsxMTIsNyBAQCBwcml2
YXRlOgogICAgIGludCBnZXRUZXh0dXJlSWQoTGF5ZXJDaHJvbWl1bSopOwogICAgIGludCBhc3Np
Z25UZXh0dXJlRm9yTGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwogCi0gICAgLy8gR0wgc2hhZGVyIHBy
b2dyYW0gb2JqZWN0IElEcy4KLSAgICB1bnNpZ25lZCBpbnQgbV9sYXllclByb2dyYW1PYmplY3Q7
Ci0gICAgdW5zaWduZWQgaW50IG1fYm9yZGVyUHJvZ3JhbU9iamVjdDsKLSAgICB1bnNpZ25lZCBp
bnQgbV9zY3JvbGxQcm9ncmFtT2JqZWN0OworICAgIFNoYWRlclByb2dyYW0gbV9zaGFkZXJQcm9n
cmFtc1tOdW1TaGFkZXJQcm9ncmFtVHlwZXNdOwogCiAgICAgdW5zaWduZWQgaW50IG1fcm9vdExh
eWVyVGV4dHVyZUlkOwogICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVXaWR0aDsKQEAgLTExMSwx
MCArMTI0LDYgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zYW1wbGVyTG9jYXRpb247CiAgICAgaW50
IG1fbWF0cml4TG9jYXRpb247CiAgICAgaW50IG1fYWxwaGFMb2NhdGlvbjsKLSAgICBpbnQgbV9z
Y3JvbGxNYXRyaXhMb2NhdGlvbjsKLSAgICBpbnQgbV9zY3JvbGxTYW1wbGVyTG9jYXRpb247Ci0K
LSAgICBpbnQgbV9ib3JkZXJNYXRyaXhMb2NhdGlvbjsKICAgICBpbnQgbV9ib3JkZXJDb2xvckxv
Y2F0aW9uOwogCiAgICAgdW5zaWduZWQgaW50IG1fcXVhZFZib0lkc1szXTsKQEAgLTEyOCw2ICsx
MzcsOCBAQCBwcml2YXRlOgogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9v
bCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CiAKKyAgICBTaGFkZXJQcm9ncmFtVHlwZSBtX2N1cnJl
bnRTaGFkZXJQcm9ncmFtVHlwZTsKKwogICAgIC8vIE1hcCBhc3NvY2lhdGluZyBsYXllcnMgd2l0
aCB0ZXh0dXJlcyBpZHMgdXNlZCBieSB0aGUgR0wgY29tcG9zaXRvci4KICAgICB0eXBlZGVmIEhh
c2hNYXA8TGF5ZXJDaHJvbWl1bSosIHVuc2lnbmVkIGludD4gVGV4dHVyZUlkTWFwOwogICAgIFRl
eHR1cmVJZE1hcCBtX3RleHR1cmVJZE1hcDsK
</data>
<flag name="review"
          id="46506"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59593</attachid>
            <date>2010-06-23 18:04:50 -0700</date>
            <delta_ts>2010-06-24 11:11:35 -0700</delta_ts>
            <desc>Proposed patch addressing review comments</desc>
            <filename>splitLayerTypes_41106_1.txt</filename>
            <type>text/plain</type>
            <size>60165</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTcyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzAgQEAKKzIwMTAtMDYtMjMgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtDaHJvbWl1bV0gQ3JlYXRlIHNwZWNpYWxpemVkIGNsYXNzZXMgZm9yIFRyYW5zZm9y
bSwKKyAgICAgICAgSW1hZ2UgYW5kIFdlYkdMIGxheWVycyB0byByZXBsYWNlIHRoZSByYXRoZXIg
bW9ub2xpdGhpYyBMYXllckNocm9taXVtIGNsYXNzLgorICAgICAgICBMYXllcnMgY2FuIG5vdyBv
d24gdGhlIEdMIHRleHR1cmUgdGhleSB1c2UgZm9yIGJhY2tpbmcgc3RvcmUgYW5kIGEgZGlmZmVy
ZW50CisgICAgICAgIHNoYWRpbmcgcHJvZ3JhbSBjYW4gYmUgdXNlZCBieSB0aGUgY29tcG9zaXRv
ciBmb3IgZWFjaCBsYXllciB0eXBlLiBXZWJHTCBsYXllcnMKKyAgICAgICAgYXJlIG5vdCB5ZXQg
aG9va2VkIHVwIHRvIEdyYXBoaWNzQ29udGV4dDNELgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDExMDYKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVt
OjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjp1cGRhdGVMYXllclByZXNlcnZlczNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5
ZXJDaHJvbWl1bTo6SW1hZ2VMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXll
ckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVw
ZGF0ZVRleHR1cmVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1
cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om93bnNUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnRleHR1cmVJZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRTaGFkZXJQcm9ncmFtSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2hhZGVyUHJvZ3JhbUlkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVMYXllclNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFkZXJQcm9ncmFtOjpTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRl
clByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
VGV4dHVyZWRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdEZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmJpbmRDb21tb25BdHRyaWJMb2NhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1MYXllckNocm9taXVtLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1MYXllckNocm9taXVtOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bTo6VHJhbnNmb3JtTGF5ZXJDaHJv
bWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5
ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybUxheWVyQ2hy
b21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTExheWVyQ2hyb21pdW06OnRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExh
eWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTExheWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMTGF5ZXJDaHJvbWl1bTo6b3duc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpzaGFkZXJQcm9ncmFtSWQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpzZXRTaGFkZXJQcm9ncmFtSWQpOgorCiAyMDEwLTA2LTIzICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
S2VudCBUYW11cmEuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjE3MDYpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjEzNSw2ICsyMTM1LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bU1hYy5tbScs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAnLApAQCAtMjE0MywxMiArMjE0NSwxNiBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtSWNvbi5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0
YUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1MYXllckNocm9taXVtLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdp
bi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVI
ZWxwZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Vbmlz
Y3JpYmVIZWxwZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uaCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwJywKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDYxNzA2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw5ICs0OCwxMSBAQAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1h
Z2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybUxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgpAQCAtOTQsNyArOTYsNyBAQCBHcmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJD
aHJvCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29udGVudHNMYXllcikKICAgICAs
IG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihmYWxzZSkKIHsKLSAgICBtX2xheWVy
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyQ2hyb21pdW06OkxheWVyLCB0aGlzKTsKKyAg
ICBtX2xheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpOwogCiAgICAgdXBkYXRlRGVi
dWdJbmRpY2F0b3JzKCk7CiB9CkBAIC0zMDcsMTggKzMwOSwyNSBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBm
YWxzZTsKICAgICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgbV9wZW5kaW5nQ29udGVudHNJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICBtX2NvbnRlbnRz
TGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZvckltYWdlOwotICAgICAgICBpZiAoIW1fY29u
dGVudHNMYXllcikKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5
ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVyUHVycG9zZSAhPSBDb250ZW50c0xheWVyRm9ySW1h
Z2UpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbWFnZUxheWVyQ2hyb21pdW0+IGltYWdlTGF5ZXIg
PSBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgIHNldHVwQ29u
dGVudHNMYXllcihpbWFnZUxheWVyLmdldCgpKTsKKyAgICAgICAgICAgIG1fY29udGVudHNMYXll
ciA9IGltYWdlTGF5ZXI7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29u
dGVudHNMYXllckZvckltYWdlOwogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBJbWFnZUxheWVyQ2hyb21pdW0qIGltYWdlTGF5ZXIgPSBzdGF0
aWNfY2FzdDxJbWFnZUxheWVyQ2hyb21pdW0qPihtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpOworICAg
ICAgICBpbWFnZUxheWVyLT5zZXRDb250ZW50cyhuYXRpdmVJbWFnZSk7CisgICAgICAgIHVwZGF0
ZUNvbnRlbnRzUmVjdCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGVuZGluZ0NvbnRlbnRz
SW1hZ2UgPSAwOwotICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gTm9Db250ZW50c0xh
eWVyOwotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKQorICAgICAgICBpZiAobV9jb250ZW50
c0xheWVyKSB7CiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotICAgIH0KIAot
ICAgIHVwZGF0ZUNvbnRlbnRzSW1hZ2UoKTsKKyAgICAgICAgICAgIC8vIFRoZSBvbGQgY29udGVu
dHMgbGF5ZXIgd2lsbCBiZSByZW1vdmVkIHZpYSB1cGRhdGVTdWJsYXllckxpc3QuCisgICAgICAg
ICAgICBtX2NvbnRlbnRzTGF5ZXIgPSAwOworICAgICAgICB9CisgICAgfQogCiAgICAgaWYgKGNo
aWxkcmVuQ2hhbmdlZCkKICAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CkBAIC00NzYsNyAr
NDg1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUAogewogICAg
IGlmIChtX3ByZXNlcnZlczNEICYmICFtX3RyYW5zZm9ybUxheWVyKSB7CiAgICAgICAgIC8vIENy
ZWF0ZSB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyQ2hyb21pdW06OlRyYW5zZm9ybUxheWVyLCB0aGlzKTsK
KyAgICAgICAgbV90cmFuc2Zvcm1MYXllciA9IFRyYW5zZm9ybUxheWVyQ2hyb21pdW06OmNyZWF0
ZSh0aGlzKTsKIAogICAgICAgICAvLyBDb3B5IHRoZSBwb3NpdGlvbiBmcm9tIHRoaXMgbGF5ZXIu
CiAgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKQEAgLTU0MCwyNiArNTQ5LDYgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyQgogICAgICAgICBjbGVhckxheWVy
QmFja2dyb3VuZENvbG9yKCptX2NvbnRlbnRzTGF5ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJbWFnZSgpCi17Ci0gICAgaWYgKG1fcGVuZGluZ0Nv
bnRlbnRzSW1hZ2UpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBpbWFnZUxheWVyID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKExheWVyQ2hyb21pdW06OkxheWVyLCB0aGlzKTsKLQotICAgICAgICAgICAgc2V0
dXBDb250ZW50c0xheWVyKGltYWdlTGF5ZXIuZ2V0KCkpOwotICAgICAgICAgICAgbV9jb250ZW50
c0xheWVyID0gaW1hZ2VMYXllcjsKLSAgICAgICAgICAgIC8vIG1fY29udGVudHNMYXllciB3aWxs
IGJlIHBhcmVudGVkIGJ5IHVwZGF0ZVN1YmxheWVyTGlzdC4KLSAgICAgICAgfQotICAgICAgICBt
X2NvbnRlbnRzTGF5ZXItPnNldENvbnRlbnRzKG1fcGVuZGluZ0NvbnRlbnRzSW1hZ2UpOwotICAg
ICAgICBtX3BlbmRpbmdDb250ZW50c0ltYWdlID0gMDsKLQotICAgICAgICB1cGRhdGVDb250ZW50
c1JlY3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBObyBpbWFnZS4gbV9jb250ZW50c0xh
eWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlU3VibGF5ZXJMaXN0LgotICAgICAgICBtX2Nv
bnRlbnRzTGF5ZXIgPSAwOwotICAgIH0KLX0KLQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbnRlbnRzVmlkZW8oKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gNjE3MDYpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsMTMgKzEzNSwxMiBAQCBwcml2YXRlOgogICAgIGVudW0gQ29udGVudHNMYXllclB1
cnBvc2UgewogICAgICAgICBOb0NvbnRlbnRzTGF5ZXIgPSAwLAogICAgICAgICBDb250ZW50c0xh
eWVyRm9ySW1hZ2UsCi0gICAgICAgIENvbnRlbnRzTGF5ZXJGb3JWaWRlbworICAgICAgICBDb250
ZW50c0xheWVyRm9yVmlkZW8sCisgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JXZWJHTAogICAgIH07
CiAKICAgICBDb250ZW50c0xheWVyUHVycG9zZSBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlOwogICAg
IGJvb2wgbV9jb250ZW50c0xheWVySGFzQmFja2dyb3VuZENvbG9yIDogMTsKLQotICAgIE5hdGl2
ZUltYWdlUHRyIG1fcGVuZGluZ0NvbnRlbnRzSW1hZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5
ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCisK
KyNpZiBQTEFURk9STShTS0lBKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBJbWFnZUxheWVyQ2hyb21pdW06OmNy
ZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW1hZ2VMYXllckNocm9taXVtKG93bmVyKSk7Cit9CisKK0ltYWdlTGF5ZXJDaHJvbWl1
bTo6SW1hZ2VMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAg
OiBMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9jb250ZW50cygwKQoreworfQorCit2b2lk
IEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoTmF0aXZlSW1hZ2VQdHIgY29udGVudHMp
Cit7CisgICAgLy8gQ2hlY2sgaWYgdGhlIGltYWdlIGhhcyBjaGFuZ2VkLgorICAgIGlmIChtX2Nv
bnRlbnRzID09IGNvbnRlbnRzKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZW50cyA9IGNv
bnRlbnRzOworICAgIHNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIEltYWdlTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCkKK3sKKyAgICB2
b2lkKiBwaXhlbHMgPSAwOworICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKKyAg
ICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7CisgICAgSW50U2l6ZSBiaXRtYXBTaXplOwor
CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAvLyBUaGUgbGF5ZXIgY29udGFpbnMgYW4gSW1hZ2Uu
CisgICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFn
ZVNraWEqPihtX2NvbnRlbnRzKTsKKyAgICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IHNr
aWFJbWFnZTsKKyAgICByZXF1aXJlZFRleHR1cmVTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53
aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CisgICAgQVNTRVJUKHNraWFCaXRtYXApOwor
CisgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKCpza2lhQml0bWFwKTsKKyAgICBTa0JpdG1hcDo6
Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0bWFwLT5jb25maWcoKTsKKyAgICAvLyBGSVhNRTog
ZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/CisgICAgaWYg
KHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKSB7CisgICAgICAgIHBp
eGVscyA9IHNraWFCaXRtYXAtPmdldFBpeGVscygpOworICAgICAgICBiaXRtYXBTaXplID0gSW50
U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CisgICAgfQor
I2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgorI2Vu
ZGlmCisgICAgaWYgKHBpeGVscykKKyAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxzLCBi
aXRtYXBTaXplLCByZXF1aXJlZFRleHR1cmVTaXplLCAgZGlydHlSZWN0LCB0ZXh0dXJlSWQpOwor
fQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKwor
I2lmbmRlZiBJbWFnZUxheWVyQ2hyb21pdW1faAorI2RlZmluZSBJbWFnZUxheWVyQ2hyb21pdW1f
aAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJD
aHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgTGF5ZXIgdGhhdCBjb250
YWlucyBvbmx5IGFuIEltYWdlIGVsZW1lbnQuCitjbGFzcyBJbWFnZUxheWVyQ2hyb21pdW0gOiBw
dWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1h
Z2VMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDAp
OworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiBtX2NvbnRlbnRzOyB9
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJl
SWQpOworICAgIHZvaWQgc2V0Q29udGVudHMoTmF0aXZlSW1hZ2VQdHIpOworCitwcml2YXRlOgor
ICAgIEltYWdlTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKyAg
ICBOYXRpdmVJbWFnZVB0ciBtX2NvbnRlbnRzOworfTsKKworfQorI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDYx
NzA2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjAgKzQ0LDIwIEBACiAKICNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKLVBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVy
VHlwZSB0eXBlLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQordW5zaWduZWQgTGF5ZXJD
aHJvbWl1bTo6bV9zaGFkZXJQcm9ncmFtSWQgPSAwOworCitQYXNzUmVmUHRyPExheWVyQ2hyb21p
dW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQog
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bSh0eXBlLCBvd25lcikpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bShvd25lcikpOwogfQogCi1MYXll
ckNocm9taXVtOjpMYXllckNocm9taXVtKExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKQorTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyKQogICAgIDogbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShmYWxz
ZSkKICAgICAsIG1fb3duZXIob3duZXIpCi0gICAgLCBtX2xheWVyVHlwZSh0eXBlKQogICAgICwg
bV9zdXBlcmxheWVyKDApCiAgICAgLCBtX2xheWVyUmVuZGVyZXIoMCkKICAgICAsIG1fYm9yZGVy
V2lkdGgoMCkKQEAgLTcxLDEzICs3MSwxMSBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KExheWVyVHlwZSB0CiAgICAgLCBtX2VkZ2VBbnRpYWxpYXNpbmdNYXNrKDApCiAgICAgLCBtX2hp
ZGRlbihmYWxzZSkKICAgICAsIG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKLSAgICAsIG1fY29udGVu
dHNHcmF2aXR5KEJvdHRvbSkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX29wYXF1ZSh0
cnVlKQogICAgICwgbV96UG9zaXRpb24oMC4wKQogICAgICwgbV9nZW9tZXRyeUZsaXBwZWQoZmFs
c2UpCiAgICAgLCBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCi0gICAgLCBtX2NvbnRlbnRzKDApCiB7
CiB9CiAKQEAgLTEwMyw5MCArMTAxLDk0IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJS
ZW5kZXJlcihMYXkKICAgICBtX2xheWVyUmVuZGVyZXIgPSByZW5kZXJlcjsKIH0KIAotdm9pZCBM
YXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHModW5zaWduZWQgaW50IHRleHR1cmVJ
ZCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRl
eHR1cmVJZCkKIHsKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJMYXllckJhY2tpbmcqPihtX293bmVyLT5jbGllbnQoKSk7CisgICAgaWYgKCFiYWNr
aW5nIHx8IGJhY2tpbmctPnBhaW50aW5nR29lc1RvV2luZG93KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7CisKKyAgICB2b2lkKiBwaXhlbHMgPSAwOwor
ICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKKyAgICBJbnRTaXplIHJlcXVpcmVk
VGV4dHVyZVNpemU7CisgICAgSW50U2l6ZSBiaXRtYXBTaXplOwogCi0gICAgaWYgKGJhY2tpbmcg
JiYgIWJhY2tpbmctPnBhaW50aW5nR29lc1RvV2luZG93KCkpIHsKLSAgICAgICAgdm9pZCogcGl4
ZWxzID0gMDsKLSAgICAgICAgSW50UmVjdCBkaXJ0eVJlY3QobV9kaXJ0eVJlY3QpOwotICAgICAg
ICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0gICAgICAgIEludFNpemUgYml0bWFwU2l6
ZTsKICNpZiBQTEFURk9STShTS0lBKQotICAgICAgICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1h
cCA9IDA7Ci0gICAgICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gY2FudmFzOwotICAg
ICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gc2tpYUNvbnRleHQ7Ci0gICAgICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKLSAgICAgICAgaWYgKGRyYXdz
Q29udGVudCgpKSB7IC8vIExheWVyIGNvbnRlbnRzIG11c3QgYmUgZHJhd24gaW50byBhIGNhbnZh
cy4KLSAgICAgICAgICAgIC8vIENsaXAgdGhlIGRpcnR5UmVjdCB0byB0aGUgc2l6ZSBvZiB0aGUg
bGF5ZXIgdG8gYXZvaWQgZHJhd2luZyBvdXRzaWRlCi0gICAgICAgICAgICAvLyB0aGUgYm91bmRz
IG9mIHRoZSBiYWNraW5nIHRleHR1cmUuCi0gICAgICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91bmRzKSk7Ci0KLSAgICAgICAgICAgIGNhbnZh
cy5zZXQobmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKGRpcnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJl
Y3QuaGVpZ2h0KCksIGZhbHNlKSk7Ci0gICAgICAgICAgICBza2lhQ29udGV4dC5zZXQobmV3IFBs
YXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMg
aXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVjdGx5LiBXaXRob3V0IGl0LAot
ICAgICAgICAgICAgLy8gR0RJIHJlbmRlcnMgd2l0aCB6ZXJvIGFscGhhIGFuZCB0aGUgdGV4dCBi
ZWNvbWVzIGludmlzaWJsZS4KLSAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHNldHRpbmcg
dGhpcyB0byB0cnVlIGRpc2FibGVzIGNsZWFydHlwZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBE
b2VzIHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5nIHBhdGg/Ci0g
ICAgICAgICAgICBza2lhQ29udGV4dC0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIodHJ1ZSk7Ci0K
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4dChyZWlu
dGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oc2tpYUNvbnRleHQuZ2V0KCkp
KSk7Ci0KLSAgICAgICAgICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0
ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAgICAgICAgICBjYW52YXMtPnRyYW5zbGF0
ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLWRpcnR5UmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1Nj
YWxhcj4oLWRpcnR5UmVjdC55KCkpKTsKLQotICAgICAgICAgICAgbV9vd25lci0+cGFpbnRHcmFw
aGljc0xheWVyQ29udGVudHMoKmdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLSAgICAgICAg
ICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NC
aXRtYXAoZmFsc2UpOwotICAgICAgICAgICAgc2tpYUJpdG1hcCA9ICZiaXRtYXA7Ci0gICAgICAg
ICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7Ci0gICAgICAgIH0gZWxzZSB7IC8v
IExheWVyIGlzIGEgY29udGFpbmVyLgotICAgICAgICAgICAgLy8gVGhlIGxheWVyIGNvbnRhaW5z
IGFuIEltYWdlLgotICAgICAgICAgICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBzdGF0
aWNfY2FzdDxOYXRpdmVJbWFnZVNraWEqPihjb250ZW50cygpKTsKLSAgICAgICAgICAgIHNraWFC
aXRtYXAgPSBza2lhSW1hZ2U7Ci0gICAgICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gSW50
U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBBU1NFUlQoc2tpYUJpdG1hcCk7Ci0gICAgICAgIFNrQXV0b0xvY2tQaXhl
bHMgbG9jaygqc2tpYUJpdG1hcCk7Ci0gICAgICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZp
ZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOwotICAgICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0
byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/Ci0gICAgICAgIGlmIChza2lhQ29u
ZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykgewotICAgICAgICAgICAgcGl4ZWxz
ID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7Ci0gICAgICAgICAgICBiaXRtYXBTaXplID0gSW50
U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgICAg
IH0KKyAgICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IDA7CisgICAgT3duUHRyPHNraWE6
OlBsYXRmb3JtQ2FudmFzPiBjYW52YXM7CisgICAgT3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+
IHNraWFDb250ZXh0OworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4
dDsKKworICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsKKyAgICBJbnRSZWN0IGJv
dW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91bmRzKTsKKworICAgIC8vIElmIHRoZSB0ZXh0
dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkIHRoZW4gd2UgbXVzdCByZWRyYXcgdGhlIGVudGly
ZQorICAgIC8vIGNvbnRlbnRzIG9mIHRoZSBsYXllci4KKyAgICBpZiAocmVxdWlyZWRUZXh0dXJl
U2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVTaXplKQorICAgICAgICBkaXJ0eVJlY3QgPSBib3Vu
ZHNSZWN0OworICAgIGVsc2UgeworICAgICAgICAvLyBDbGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhl
IHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lkIGRyYXdpbmcgb3V0c2lkZQorICAgICAgICAvLyB0
aGUgYm91bmRzIG9mIHRoZSBiYWNraW5nIHRleHR1cmUuCisgICAgICAgIGRpcnR5UmVjdC5pbnRl
cnNlY3QoYm91bmRzUmVjdCk7CisgICAgfQorCisgICAgY2FudmFzLnNldChuZXcgc2tpYTo6UGxh
dGZvcm1DYW52YXMoZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgZmFsc2Up
KTsKKyAgICBza2lhQ29udGV4dC5zZXQobmV3IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdl
dCgpKSk7CisKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBnZXQgdGV4dCB0byBzaG93IHVwIGNv
cnJlY3RseS4gV2l0aG91dCBpdCwKKyAgICAvLyBHREkgcmVuZGVycyB3aXRoIHplcm8gYWxwaGEg
YW5kIHRoZSB0ZXh0IGJlY29tZXMgaW52aXNpYmxlLgorICAgIC8vIFVuZm9ydHVuYXRlbHksIHNl
dHRpbmcgdGhpcyB0byB0cnVlIGRpc2FibGVzIGNsZWFydHlwZS4KKyAgICAvLyBGSVhNRTogRG9l
cyB0aGlzIHRha2UgdXMgZG93biBhIHZlcnkgc2xvdyB0ZXh0IHJlbmRlcmluZyBwYXRoPworICAg
IHNraWFDb250ZXh0LT5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih0cnVlKTsKKworICAgIGdyYXBo
aWNzQ29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4dChyZWludGVycHJldF9jYXN0PFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0Kj4oc2tpYUNvbnRleHQuZ2V0KCkpKSk7CisKKyAgICAvLyBCcmlu
ZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0
LgorICAgIGNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0
LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LnkoKSkpOworCisgICAgbV9v
d25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmdyYXBoaWNzQ29udGV4dCwgZGlydHlS
ZWN0KTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY2FudmFzLT5nZXREZXZpY2UoKS0+
YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBza2lhQml0bWFwID0gJmJpdG1hcDsKKyAgICBBU1NF
UlQoc2tpYUJpdG1hcCk7CisKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFCaXRtYXAp
OworICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNvbmZpZygp
OworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1
cmF0aW9ucz8KKyAgICBpZiAoc2tpYUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcpIHsKKyAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7CisgICAgICAg
IGJpdG1hcFNpemUgPSBJbnRTaXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRtYXAtPmhl
aWdodCgpKTsKKyAgICB9CiAjZWxzZQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91
ciBwbGF0Zm9ybS4iCiAjZW5kaWYKLSAgICAgICAgaWYgKHBpeGVscykgewotICAgICAgICAgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgICAgICAgICAgLy8g
SWYgdGhlIHRleHR1cmUgaWQgb3Igc2l6ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZSB0aGVuIHdl
IG5lZWQgdG8gdGVsbCBHTAotICAgICAgICAgICAgLy8gdG8gcmUtYWxsb2NhdGUgYSB0ZXh0dXJl
LgotICAgICAgICAgICAgaWYgKG1fYWxsb2NhdGVkVGV4dHVyZUlkICE9IHRleHR1cmVJZCB8fCBy
ZXF1aXJlZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVTaXplKTsKLSAgICAg
ICAgICAgICAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgcmVxdWly
ZWRUZXh0dXJlU2l6ZS53aWR0aCgpLCByZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpLCAwLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotCi0gICAgICAgICAgICAgICAgbV9h
bGxvY2F0ZWRUZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgICAgICAgICAgICAgbV9hbGxvY2F0
ZWRUZXh0dXJlU2l6ZSA9IHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIEFTU0VSVChkaXJ0eVJlY3Qud2lkdGgoKSA8PSBtX2FsbG9jYXRl
ZFRleHR1cmVTaXplLndpZHRoKCkgJiYgZGlydHlSZWN0LmhlaWdodCgpIDw9IG1fYWxsb2NhdGVk
VGV4dHVyZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChkaXJ0eVJlY3Qu
d2lkdGgoKSA9PSBiaXRtYXBTaXplLndpZHRoKCkgJiYgZGlydHlSZWN0LmhlaWdodCgpID09IGJp
dG1hcFNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCBkaXJ0eVJlY3QueCgpLCBkaXJ0eVJlY3QueSgpLCBkaXJ0eVJlY3Qud2lk
dGgoKSwgZGlydHlSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhl
bHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCi0gICAgbV9jb250ZW50c0Rp
cnR5ID0gZmFsc2U7Ci0gICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7CisgICAg
aWYgKHBpeGVscykKKyAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXpl
LCByZXF1aXJlZFRleHR1cmVTaXplLCAgZGlydHlSZWN0LCB0ZXh0dXJlSWQpOwogfQogCi12b2lk
IExheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKE5hdGl2ZUltYWdlUHRyIGNvbnRlbnRzKQordm9p
ZCBMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IElu
dFNpemUmIGJpdG1hcFNpemUsIGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVyZVNpemUsIGNv
bnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCkKIHsKLSAgICAvLyBD
aGVjayBpZiB0aGUgaW1hZ2UgaGFzIGNoYW5nZWQuCi0gICAgaWYgKG1fY29udGVudHMgPT0gY29u
dGVudHMpCisgICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRlbnRz
ID0gY29udGVudHM7Ci0gICAgc2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICBnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7CisgICAgLy8gSWYgdGhlIHRleHR1cmUgaWQgb3Ig
c2l6ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZSB0aGVuIHdlIG5lZWQgdG8gdGVsbCBHTAorICAg
IC8vIHRvIHJlLWFsbG9jYXRlIGEgdGV4dHVyZS4KKyAgICBpZiAobV9hbGxvY2F0ZWRUZXh0dXJl
SWQgIT0gdGV4dHVyZUlkIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0
dXJlU2l6ZSkgeworICAgICAgICBBU1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVT
aXplKTsKKyAgICAgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIHJl
cXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSwgcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSwg
MCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKworICAgICAgICBtX2FsbG9j
YXRlZFRleHR1cmVJZCA9IHRleHR1cmVJZDsKKyAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6
ZSA9IHJlcXVpcmVkVGV4dHVyZVNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHVw
ZGF0ZVJlY3Qud2lkdGgoKSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkgJiYgdXBk
YXRlUmVjdC5oZWlnaHQoKSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgQVNTRVJUKHVwZGF0ZVJlY3Qud2lkdGgoKSA9PSBiaXRtYXBTaXplLndpZHRoKCkgJiYg
dXBkYXRlUmVjdC5oZWlnaHQoKSA9PSBiaXRtYXBTaXplLmhlaWdodCgpKTsKKyAgICAgICAgZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0
LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAgIH0KKworICAgIG1fZGlydHlSZWN0LnNldFNp
emUoRmxvYXRTaXplKCkpOworICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwogfQogCiB2b2lk
IExheWVyQ2hyb21pdW06OnNldE5lZWRzQ29tbWl0KCkKQEAgLTMzMSw1ICszMzMsNCBAQCB2b2lk
IExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiB9CiAKIH0KLQogI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2MTcwNikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MiwyMSArNTIsMTggQEAgY2xhc3MgUGxhdGZvcm1DYW52YXM7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBMYXll
clJlbmRlcmVyQ2hyb21pdW07CiAKKy8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJz
LiBUaGUgaW1wbGVtZW50YXRpb24gY292ZXJzIGxheWVycyB0aGF0IHJlcXVpcmUKKy8vIGEgR3Jh
cGhpY3NDb250ZXh0IHRvIHJlbmRlciB0aGVpciBjb250ZW50cy4gU3BlY2lhbCBsYXllciB0eXBl
cyBhcmUgZGVyaXZlZCBmcm9tCisvLyB0aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBlbnVtIExh
eWVyVHlwZSB7IExheWVyLCBUcmFuc2Zvcm1MYXllciB9OwotICAgIGVudW0gRmlsdGVyVHlwZSB7
IExpbmVhciwgTmVhcmVzdCwgVHJpbGluZWFyLCBMYW5jem9zIH07Ci0gICAgZW51bSBDb250ZW50
c0dyYXZpdHlUeXBlIHsgQ2VudGVyLCBUb3AsIEJvdHRvbSwgTGVmdCwgUmlnaHQsIFRvcExlZnQs
IFRvcFJpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvdHRvbUxlZnQsIEJv
dHRvbVJpZ2h0LCBSZXNpemUsIFJlc2l6ZUFzcGVjdCwgUmVzaXplQXNwZWN0RmlsbCB9OwotCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKExheWVyVHlwZSwgR3Jh
cGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CiAK
ICAgICB+TGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdm9pZCBkaXNwbGF5KFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0Kik7Ci0KICAgICB2b2lkIGFkZFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4pOwogICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVt
Piwgc2l6ZV90IGluZGV4KTsKICAgICB2b2lkIHJlcGxhY2VTdWJsYXllcihMYXllckNocm9taXVt
KiByZWZlcmVuY2UsIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbmV3TGF5ZXIpOwpAQCAtOTMs
OSArOTAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGVhcnNDb250ZXh0KGJvb2wgY2xlYXJz
KSB7IG1fY2xlYXJzQ29udGV4dCA9IGNsZWFyczsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJv
b2wgY2xlYXJzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xlYXJzQ29udGV4dDsgfQogCi0g
ICAgdm9pZCBzZXRDb250ZW50c0dyYXZpdHkoQ29udGVudHNHcmF2aXR5VHlwZSBncmF2aXR5VHlw
ZSkgeyBtX2NvbnRlbnRzR3Jhdml0eSA9IGdyYXZpdHlUeXBlOyBzZXROZWVkc0NvbW1pdCgpOyB9
Ci0gICAgQ29udGVudHNHcmF2aXR5VHlwZSBjb250ZW50c0dyYXZpdHkoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRlbnRzR3Jhdml0eTsgfQotCiAgICAgdm9pZCBzZXREb3VibGVTaWRlZChib29sIGRv
dWJsZVNpZGVkKSB7IG1fZG91YmxlU2lkZWQgPSBkb3VibGVTaWRlZDsgc2V0TmVlZHNDb21taXQo
KTsgfQogICAgIGJvb2wgZG91YmxlU2lkZWQoKSBjb25zdCB7IHJldHVybiBtX2RvdWJsZVNpZGVk
OyB9CiAKQEAgLTE1MiwyNyArMTQ2LDQyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdlb21ldHJ5
RmxpcHBlZChib29sIGZsaXBwZWQpIHsgbV9nZW9tZXRyeUZsaXBwZWQgPSBmbGlwcGVkOyBzZXRO
ZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBnZW9tZXRyeUZsaXBwZWQoKSBjb25zdCB7IHJldHVy
biBtX2dlb21ldHJ5RmxpcHBlZDsgfQogCi0gICAgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHMo
dW5zaWduZWQgaW50IHRleHR1cmVJZCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVD
b250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpOwogICAgIGJvb2wgY29udGVudHNEaXJ0eSgpIHsg
cmV0dXJuIG1fY29udGVudHNEaXJ0eTsgfQogCi0gICAgdm9pZCBzZXRDb250ZW50cyhOYXRpdmVJ
bWFnZVB0ciBjb250ZW50cyk7Ci0gICAgTmF0aXZlSW1hZ2VQdHIgY29udGVudHMoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRzOyB9Ci0KICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX2RyYXdUcmFuc2Zvcm0gPSB0cmFu
c2Zvcm07IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogCiAgICAgdm9pZCBzZXREcmF3T3Bh
Y2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CiAgICAgZmxv
YXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAKLSAgICBi
b29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3NDb250
ZW50KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gbV9vd25l
ciAmJiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKTsgfQorCisgICAgLy8gUmV0dXJuIHRydWUgaWYg
dGhlIGxheWVyIGhhcyBpdHMgb3duIEdMIHRleHR1cmUgYW5kIGZhbHNlIGlmIHRoZSB0ZXh0dXJl
CisgICAgLy8gbmVlZHMgdG8gYmUgYWxsb2NhdGVkIGJ5IHRoZSBjb21wb3NpdG9yLgorICAgIHZp
cnR1YWwgYm9vbCBvd25zVGV4dHVyZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBSZXR1
cm5zIHRoZSBpZCBvZiB0aGUgR0wgdGV4dHVyZSB0aGF0IHN0b3JlcyB0aGUgY29udGVudHMgb2Yg
dGhpcyBsYXllci4KKyAgICAvLyBEZXJpdmVkIGxheWVyIGNsYXNzZXMgdGhhdCBvd24gdGhlaXIg
b3duIHRleHR1cmVzIHNob3VsZCBvdmVyd3JpdGUgdGhpcyBtZXRob2QuCisgICAgdmlydHVhbCB1
bnNpZ25lZCB0ZXh0dXJlSWQoKSB7IHJldHVybiBtX2FsbG9jYXRlZFRleHR1cmVJZDsgfQogCiAg
ICAgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+cHJlc2Vy
dmVzM0QoKTsgfQogCiAgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJv
bWl1bSopOwogCi1wcml2YXRlOgotICAgIExheWVyQ2hyb21pdW0oTGF5ZXJUeXBlLCBHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTaGFkZXJQcm9ncmFt
SWQodW5zaWduZWQgc2hhZGVyUHJvZ3JhbUlkKSB7IG1fc2hhZGVyUHJvZ3JhbUlkID0gc2hhZGVy
UHJvZ3JhbUlkOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBzaGFkZXJQcm9ncmFtSWQoKSB7IHJl
dHVybiBtX3NoYWRlclByb2dyYW1JZDsgfQorCitwcm90ZWN0ZWQ6CisgICAgR3JhcGhpY3NMYXll
ckNocm9taXVtKiBtX293bmVyOworICAgIExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9t
aXVtKiBvd25lcik7CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNv
bnN0IEludFNpemUmIGJpdG1hcFNpemUsIGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVyZVNp
emUsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkKTsKKworICAg
IEludFNpemUgbV9ib3VuZHM7CisgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAgIGJvb2wg
bV9jb250ZW50c0RpcnR5OwogCitwcml2YXRlOgogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsK
IAogICAgIHZvaWQgc2V0U3VwZXJsYXllcihMYXllckNocm9taXVtKiBzdXBlcmxheWVyKSB7IG1f
c3VwZXJsYXllciA9IHN1cGVybGF5ZXI7IH0KQEAgLTE5MywxNyArMjAyLDExIEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fc3VibGF5ZXJzOwogICAgIExh
eWVyQ2hyb21pdW0qIG1fc3VwZXJsYXllcjsKIAotICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
bV9vd25lcjsKLQotICAgIExheWVyVHlwZSBtX2xheWVyVHlwZTsKLQotICAgIEludFNpemUgbV9i
b3VuZHM7CiAgICAgSW50U2l6ZSBtX2JhY2tpbmdTdG9yZVNpemU7CiAgICAgRmxvYXRQb2ludCBt
X3Bvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKICAgICBDb2xvciBtX2Jh
Y2tncm91bmRDb2xvcjsKICAgICBDb2xvciBtX2JvcmRlckNvbG9yOwotICAgIEZsb2F0UmVjdCBt
X2RpcnR5UmVjdDsKIAogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVy
OwogCkBAIC0yMjEsOSArMjI0LDEzIEBAIHByaXZhdGU6CiAKICAgICBmbG9hdCBtX2RyYXdPcGFj
aXR5OwogCi0gICAgdW5zaWduZWQgaW50IG1fYWxsb2NhdGVkVGV4dHVyZUlkOworICAgIHVuc2ln
bmVkIG1fYWxsb2NhdGVkVGV4dHVyZUlkOwogICAgIEludFNpemUgbV9hbGxvY2F0ZWRUZXh0dXJl
U2l6ZTsKIAorICAgIC8vIFRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IGFsbCBsYXllcnMgb2Yg
dGhpcyB0eXBlIGlzIHRoZSBzYW1lLgorICAgIC8vIFRoaXMgc3RhdGljIGNhbiBiZSBzaGFkb3dl
ZCBieSBkZXJpdmVkIGNsYXNzZXMgdG8gdXNlIGEgc3BlY2lhbCBzaGFkZXIuCisgICAgc3RhdGlj
IHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOworCiAgICAgYm9vbCBtX2NsZWFyc0NvbnRleHQ7
CiAgICAgYm9vbCBtX2RvdWJsZVNpZGVkOwogICAgIGJvb2wgbV9oaWRkZW47CkBAIC0yMzIsMTUg
KzIzOSwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9nZW9tZXRyeUZsaXBwZWQ7CiAgICAgYm9v
bCBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlOwogCi0gICAgYm9vbCBtX2NvbnRlbnRzRGly
dHk7Ci0KLSAgICBDb250ZW50c0dyYXZpdHlUeXBlIG1fY29udGVudHNHcmF2aXR5OwotICAgIE5h
dGl2ZUltYWdlUHRyIG1fY29udGVudHM7CiAgICAgU3RyaW5nIG1fbmFtZTsKIH07CiAKIH0KLQog
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2MTcwNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1MYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAj
aWYgUExBVEZPUk0oU0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCkBAIC0xMDQsNiArMTA2LDIyIEBAIHN0YXRpYyBHTHVp
bnQgbG9hZFNoYWRlclByb2dyYW0oY29uc3QgY2gKICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdDsK
IH0KIAorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyU2hhZGVyKFNoYWRl
clByb2dyYW1UeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCit7CisgICAgdW5zaWduZWQgcHJvZ3JhbUlkID0g
bG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlLCBmcmFnbWVudFNoYWRlclNvdXJj
ZSk7CisgICAgQVNTRVJUKHByb2dyYW1JZCk7CisKKyAgICBTaGFkZXJQcm9ncmFtKiBwcm9ncmFt
ID0gJm1fc2hhZGVyUHJvZ3JhbXNbdHlwZV07CisKKyAgICBwcm9ncmFtLT5tX3NoYWRlclByb2dy
YW1JZCA9IHByb2dyYW1JZDsKKyAgICBwcm9ncmFtLT5tX3NhbXBsZXJMb2NhdGlvbiA9IGdsR2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JZCwgInNfdGV4dHVyZSIpOworICAgIHByb2dyYW0tPm1f
bWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSWQsICJtYXRyaXgi
KTsKKyAgICBwcm9ncmFtLT5tX2FscGhhTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSWQsICJhbHBoYSIpOworCisgICAgcmV0dXJuIHByb2dyYW1JZDsKK30KKworCiBzdGF0
aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtKQogewogICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CkBAIC0xNjQsNiArMTgy
LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IEwKICAgICByZXR1
cm4gdHJhbnNmb3JtQS5tNDMoKSA8IHRyYW5zZm9ybUIubTQzKCk7CiB9CiAKK1NoYWRlclByb2dy
YW06OlNoYWRlclByb2dyYW0oKQorICAgIDogbV9zaGFkZXJQcm9ncmFtSWQoMCkKKyAgICAsIG1f
c2FtcGxlckxvY2F0aW9uKC0xKQorICAgICwgbV9tYXRyaXhMb2NhdGlvbigtMSkKKyAgICAsIG1f
YWxwaGFMb2NhdGlvbigtMSkKK3sKK30KKwogUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCiB7CiAgICAgcmV0
dXJuIG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ocGFnZSk7CkBAIC0xNzIsMTUgKzE5OCwxMyBA
QCBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSCiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShQYWdlKiBwYWdlKQogICAgIDogbV9yb290
TGF5ZXIoMCkKICAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQotICAgICwgbV9sYXllclByb2dy
YW1PYmplY3QoMCkKLSAgICAsIG1fYm9yZGVyUHJvZ3JhbU9iamVjdCgwKQotICAgICwgbV9zY3Jv
bGxQcm9ncmFtT2JqZWN0KDApCiAgICAgLCBtX3Bvc2l0aW9uTG9jYXRpb24oMCkKICAgICAsIG1f
dGV4Q29vcmRMb2NhdGlvbigxKQogICAgICwgbV9wYWdlKHBhZ2UpCiAgICAgLCBtX3Jvb3RMYXll
clRleHR1cmVXaWR0aCgwKQogICAgICwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KDApCiAgICAg
LCBtX3Njcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCisgICAgLCBtX2N1cnJlbnRTaGFk
ZXJQcm9ncmFtVHlwZShOdW1TaGFkZXJQcm9ncmFtVHlwZXMpCiB7CiAgICAgbV9xdWFkVmJvSWRz
W1ZlcnRpY2VzXSA9IG1fcXVhZFZib0lkc1tMYXllckVsZW1lbnRzXSA9IDA7CiAgICAgbV9oYXJk
d2FyZUNvbXBvc2l0aW5nID0gKGluaXRHTCgpICYmIGluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMo
KSk7CkBAIC0xOTEsOSArMjE1LDExIEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVu
ZGVyZXJDaHIKICAgICBpZiAobV9oYXJkd2FyZUNvbXBvc2l0aW5nKSB7CiAgICAgICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgICAgICBnbERlbGV0ZUJ1ZmZlcnMoMywgbV9xdWFkVmJvSWRz
KTsKLSAgICAgICAgZ2xEZWxldGVQcm9ncmFtKG1fbGF5ZXJQcm9ncmFtT2JqZWN0KTsKLSAgICAg
ICAgZ2xEZWxldGVQcm9ncmFtKG1fc2Nyb2xsUHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgIGdsRGVs
ZXRlUHJvZ3JhbShtX2JvcmRlclByb2dyYW1PYmplY3QpOworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTnVtU2hhZGVyUHJvZ3JhbVR5cGVzOyBpKyspIHsKKyAgICAgICAgICAgIGlmICht
X3NoYWRlclByb2dyYW1zW2ldLm1fc2hhZGVyUHJvZ3JhbUlkKQorICAgICAgICAgICAgICAgIGds
RGVsZXRlUHJvZ3JhbShtX3NoYWRlclByb2dyYW1zW2ldLm1fc2hhZGVyUHJvZ3JhbUlkKTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIEZyZWUgdXAgYWxsIEdMIHRleHR1cmVzLgpAQCAtMjI0
LDcgKzI1MCwyMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Um9vdExheWVyCiAg
ICAgbV9yb290TGF5ZXJDYW52YXNTaXplID0gc2l6ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBzY3Jv
bGxpbmcpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyUHJvZ3JhbShTaGFk
ZXJQcm9ncmFtVHlwZSBwcm9ncmFtVHlwZSkKK3sKKyAgICBpZiAocHJvZ3JhbVR5cGUgIT0gbV9j
dXJyZW50U2hhZGVyUHJvZ3JhbVR5cGUpIHsKKyAgICAgICAgU2hhZGVyUHJvZ3JhbSogcHJvZ3Jh
bSA9ICZtX3NoYWRlclByb2dyYW1zW3Byb2dyYW1UeXBlXTsKKyAgICAgICAgZ2xVc2VQcm9ncmFt
KHByb2dyYW0tPm1fc2hhZGVyUHJvZ3JhbUlkKTsKKyAgICAgICAgbV9jdXJyZW50U2hhZGVyUHJv
Z3JhbVR5cGUgPSBwcm9ncmFtVHlwZTsKKworICAgICAgICAvLyBTZXQgdGhlIHVuaWZvcm0gbG9j
YXRpb25zIG1hdGNoaW5nIHRoZSBwcm9ncmFtLgorICAgICAgICBtX3NhbXBsZXJMb2NhdGlvbiA9
IHByb2dyYW0tPm1fc2FtcGxlckxvY2F0aW9uOworICAgICAgICBtX21hdHJpeExvY2F0aW9uID0g
cHJvZ3JhbS0+bV9tYXRyaXhMb2NhdGlvbjsKKyAgICAgICAgbV9hbHBoYUxvY2F0aW9uID0gcHJv
Z3JhbS0+bV9hbHBoYUxvY2F0aW9uOworICAgIH0KK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSkKIHsKICAgICBzdGF0
aWMgR0xmbG9hdCBnbE1hdHJpeFsxNl07CiAKQEAgLTIzOCwxMCArMjc4LDkgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZAogCiAgICAgdG9HTE1hdHJpeCgmZ2xNYXRy
aXhbMF0sIHJlbmRlck1hdHJpeCk7CiAKLSAgICBpbnQgbWF0cml4TG9jYXRpb24gPSAoc2Nyb2xs
aW5nID8gbV9zY3JvbGxNYXRyaXhMb2NhdGlvbiA6IG1fbWF0cml4TG9jYXRpb24pOwotICAgIGds
VW5pZm9ybU1hdHJpeDRmdihtYXRyaXhMb2NhdGlvbiwgMSwgZmFsc2UsICZnbE1hdHJpeFswXSk7
CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KG1fbWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xN
YXRyaXhbMF0pOwogCi0gICAgaWYgKCFzY3JvbGxpbmcpCisgICAgaWYgKG1fYWxwaGFMb2NhdGlv
biAhPSAtMSkKICAgICAgICAgZ2xVbmlmb3JtMWYobV9hbHBoYUxvY2F0aW9uLCBvcGFjaXR5KTsK
IAogICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFUywgNiwgR0xfVU5TSUdORURfU0hPUlQs
IDApOwpAQCAtMjY1LDggKzMwNCw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzKGMKIAogICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJU
ZXh0dXJlSWQpOwogCi0gICAgdW5zaWduZWQgaW50IHZpc2libGVSZWN0V2lkdGggPSB2aXNpYmxl
UmVjdC53aWR0aCgpOwotICAgIHVuc2lnbmVkIGludCB2aXNpYmxlUmVjdEhlaWdodCA9IHZpc2li
bGVSZWN0LmhlaWdodCgpOworICAgIHVuc2lnbmVkIHZpc2libGVSZWN0V2lkdGggPSB2aXNpYmxl
UmVjdC53aWR0aCgpOworICAgIHVuc2lnbmVkIHZpc2libGVSZWN0SGVpZ2h0ID0gdmlzaWJsZVJl
Y3QuaGVpZ2h0KCk7CiAgICAgaWYgKHZpc2libGVSZWN0V2lkdGggIT0gbV9yb290TGF5ZXJUZXh0
dXJlV2lkdGggfHwgdmlzaWJsZVJlY3RIZWlnaHQgIT0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0
KSB7CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJlY3Qud2lkdGgo
KTsKICAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3QuaGVpZ2h0
KCk7CkBAIC0zMTAsMTAgKzM0OSwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycyhjCiAgICAgICAgIHNjcm9sbGVkTGF5ZXJNYXRyaXguc2NhbGUzZCgxLCAtMSwgMSk7
CiAKICAgICAgICAgLy8gU3dpdGNoIHNoYWRlcnMgdG8gYXZvaWQgUkdCIHN3aXp6bGluZy4KLSAg
ICAgICAgZ2xVc2VQcm9ncmFtKG1fc2Nyb2xsUHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgIGdsVW5p
Zm9ybTFpKG1fc2Nyb2xsU2FtcGxlckxvY2F0aW9uLCAwKTsKKyAgICAgICAgdXNlU2hhZGVyUHJv
Z3JhbShTY3JvbGxMYXllclByb2dyYW0pOworICAgICAgICBnbFVuaWZvcm0xaShtX3NoYWRlclBy
b2dyYW1zW1Njcm9sbExheWVyUHJvZ3JhbV0ubV9zYW1wbGVyTG9jYXRpb24sIDApOwogCi0gICAg
ICAgIGRyYXdUZXh0dXJlZFF1YWQoc2Nyb2xsZWRMYXllck1hdHJpeCwgdmlzaWJsZVJlY3Qud2lk
dGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsIHRydWUpOworICAgICAgICBkcmF3VGV4dHVy
ZWRRdWFkKHNjcm9sbGVkTGF5ZXJNYXRyaXgsIHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVS
ZWN0LmhlaWdodCgpLCAxKTsKIAogICAgICAgICBnbENvcHlUZXhTdWJJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAsIDAsIDAsIDAsIDAsIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0Lmhl
aWdodCgpKTsKIApAQCAtMzQ5LDExICszODgsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcnMoYwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX0RF
UFRIX0JVRkZFUl9CSVQpOwogCiAgICAgLy8gUmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEg
cXVhZCB0aGF0IHRha2VzIHVwIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cu
Ci0gICAgZ2xVc2VQcm9ncmFtKG1fbGF5ZXJQcm9ncmFtT2JqZWN0KTsKKyAgICB1c2VTaGFkZXJQ
cm9ncmFtKENvbnRlbnRMYXllclByb2dyYW0pOwogICAgIGdsVW5pZm9ybTFpKG1fc2FtcGxlckxv
Y2F0aW9uLCAwKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck1hdHJpeDsKICAgICBs
YXllck1hdHJpeC50cmFuc2xhdGUzZCh2aXNpYmxlUmVjdC53aWR0aCgpIC8gMiwgdmlzaWJsZVJl
Y3QuaGVpZ2h0KCkgLyAyLCAwKTsKLSAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyTWF0cml4LCB2
aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSwgZmFsc2UpOworICAg
IGRyYXdUZXh0dXJlZFF1YWQobGF5ZXJNYXRyaXgsIHZpc2libGVSZWN0LndpZHRoKCksIHZpc2li
bGVSZWN0LmhlaWdodCgpLCAxKTsKIAogICAgIC8vIElmIGN1bGxpbmcgaXMgZW5hYmxlZCB0aGVu
IHdlIHdpbGwgY3VsbCB0aGUgYmFja2ZhY2UuCiAgICAgZ2xDdWxsRmFjZShHTF9CQUNLKTsKQEAg
LTQ0MiwxMyArNDgxLDE0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdC
b3IKICAgICBpZiAoIWJvcmRlckNvbG9yLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGdsVXNlUHJvZ3JhbShtX2JvcmRlclByb2dyYW1PYmplY3QpOworICAgIHVzZVNoYWRlclByb2dy
YW0oRGVidWdCb3JkZXJQcm9ncmFtKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJN
YXRyaXggPSBtYXRyaXg7CiAgICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CiAg
ICAgcmVuZGVyTWF0cml4LnNjYWxlM2QoYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwg
MSk7CiAgICAgcmVuZGVyTWF0cml4Lm11bHRpcGx5KG1fcHJvamVjdGlvbk1hdHJpeCk7CiAgICAg
dG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIHJlbmRlck1hdHJpeCk7Ci0gICAgZ2xVbmlmb3JtTWF0
cml4NGZ2KG1fYm9yZGVyTWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pOwor
ICAgIHVuc2lnbmVkIGJvcmRlck1hdHJpeExvY2F0aW9uID0gbV9zaGFkZXJQcm9ncmFtc1tEZWJ1
Z0JvcmRlclByb2dyYW1dLm1fbWF0cml4TG9jYXRpb247CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2
KGJvcmRlck1hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwgJmdsTWF0cml4WzBdKTsKIAogICAgIGds
VW5pZm9ybTRmKG1fYm9yZGVyQ29sb3JMb2NhdGlvbiwgYm9yZGVyQ29sb3IucmVkKCkgLyAyNTUu
MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yLmdy
ZWVuKCkgLyAyNTUuMCwKQEAgLTQ2MCw5ICs1MDAsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0RlYnVnQm9yCiAgICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBz
dG9yZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCiAgICAgZ2xE
cmF3RWxlbWVudHMoR0xfTElORV9MT09QLCA0LCBHTF9VTlNJR05FRF9TSE9SVCwgKHZvaWQqKSg2
ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpOwogICAgIGNoZWNrR0xFcnJvcigpOwotCi0gICAg
Ly8gU3dpdGNoIGJhY2sgdG8gdGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgZm9yIGxheWVyIGNvbnRl
bnRzLgotICAgIGdsVXNlUHJvZ3JhbShtX2xheWVyUHJvZ3JhbU9iamVjdCk7CiB9CiAKIC8vIFJl
dHVybnMgdHJ1ZSBpZiBhbnkgcGFydCBvZiB0aGUgbGF5ZXIgZmFsbHMgd2l0aGluIHRoZSB2aXNp
YmxlUmVjdApAQCAtNTI0LDExICs1NjEsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlTGF5ZXJzCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGxheWVyIGZhbGxzIHdpdGhpbiB0aGUg
dmlzaWJsZSBib3VuZHMgb2YgdGhlIHBhZ2UuCiAgICAgYm9vbCBsYXllclZpc2libGUgPSBpc0xh
eWVyVmlzaWJsZShsYXllciwgbG9jYWxNYXRyaXgsIHZpc2libGVSZWN0KTsKIAotICAgIGJvb2wg
bGF5ZXJIYXNDb250ZW50ID0gbGF5ZXItPmRyYXdzQ29udGVudCgpIHx8IGxheWVyLT5jb250ZW50
cygpOwotCiAgICAgYm9vbCBza2lwTGF5ZXIgPSBmYWxzZTsKICAgICBpZiAoYm91bmRzLndpZHRo
KCkgPiAyMDQ4IHx8IGJvdW5kcy5oZWlnaHQoKSA+IDIwNDgpIHsKLSAgICAgICAgaWYgKGxheWVy
SGFzQ29udGVudCkKKyAgICAgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKICAgICAgICAg
ICAgIExPRyhMYXllclJlbmRlcmVyLCAiU2tpcHBpbmcgbGF5ZXIgd2l0aCBzaXplICVkICVkIiwg
Ym91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CiAgICAgICAgIHNraXBMYXllciA9IHRy
dWU7CiAgICAgfQpAQCAtNTcxLDE1ICs2MDYsMTYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcihMYQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsb2NhbE1h
dHJpeCA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CiAgICAgSW50U2l6ZSBib3VuZHMgPSBsYXll
ci0+Ym91bmRzKCk7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBs
YXllcnM6Ci0gICAgLy8gMS4gTGF5ZXJzIHRoYXQgZHJhdyB0aGVpciBvd24gY29udGVudCB2aWEg
dGhlIEdyYXBoaWNzQ29udGV4dCAobGF5ZXItPmRyYXdzQ29udGVudCgpID09IHRydWUpLgotICAg
IC8vIDIuIExheWVycyB0aGF0IGFyZSBwdXJlIGNvbnRhaW5lcnMgb2YgaW1hZ2VzL3ZpZGVvL2V0
YyB3aG9zZSBjb250ZW50IGlzIHNpbXBseQotICAgIC8vICAgIGNvcGllZCBpbnRvIHRoZSBiYWNr
aW5nIHRleHR1cmUgKGxheWVyLT5jb250ZW50cygpID09IHRydWUpLgotICAgIGlmIChsYXllci0+
ZHJhd3NDb250ZW50KCkgfHwgbGF5ZXItPmNvbnRlbnRzKCkpIHsKLSAgICAgICAgaW50IHRleHR1
cmVJZCA9IGdldFRleHR1cmVJZChsYXllcik7Ci0gICAgICAgIC8vIElmIG5vIHRleHR1cmUgaGFz
IGJlZW4gY3JlYXRlZCBmb3IgdGhlIGxheWVyIHlldCB0aGVuIGNyZWF0ZSBvbmUgbm93LgotICAg
ICAgICBpZiAodGV4dHVyZUlkID09IC0xKQotICAgICAgICAgICAgdGV4dHVyZUlkID0gYXNzaWdu
VGV4dHVyZUZvckxheWVyKGxheWVyKTsKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7
CisgICAgICAgIGludCB0ZXh0dXJlSWQ7CisgICAgICAgIGlmIChsYXllci0+b3duc1RleHR1cmUo
KSkKKyAgICAgICAgICAgIHRleHR1cmVJZCA9IGxheWVyLT50ZXh0dXJlSWQoKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICB0ZXh0dXJlSWQgPSBnZXRUZXh0dXJlSWQobGF5ZXIpOworICAg
ICAgICAgICAgLy8gSWYgbm8gdGV4dHVyZSBoYXMgYmVlbiBjcmVhdGVkIGZvciB0aGUgbGF5ZXIg
eWV0IHRoZW4gY3JlYXRlIG9uZSBub3cuCisgICAgICAgICAgICBpZiAodGV4dHVyZUlkID09IC0x
KQorICAgICAgICAgICAgICAgIHRleHR1cmVJZCA9IGFzc2lnblRleHR1cmVGb3JMYXllcihsYXll
cik7CisgICAgICAgIH0KIAogICAgICAgICAvLyBSZWRyYXcgdGhlIGNvbnRlbnRzIG9mIHRoZSBs
YXllciBpZiBuZWNlc3NhcnkuCiAgICAgICAgIGlmIChsYXllci0+Y29udGVudHNEaXJ0eSgpKSB7
CkBAIC01ODcsMTQgKzYyMywxOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVyKExhCiAgICAgICAgICAgICBsYXllci0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHRleHR1cmVJ
ZCk7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdW50
aWwgV2ViR0wgbGF5ZXJzIHN0b3AgY2hhbmdpbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gY29u
dGV4dC4KKyAgICAgICAgaWYgKGxheWVyLT5vd25zVGV4dHVyZSgpKQorICAgICAgICAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKICAgICAgICAgaWYgKGxheWVyLT5kb3VibGVTaWRlZCgpKQog
ICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX0NVTExfRkFDRSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGdsRW5hYmxlKEdMX0NVTExfRkFDRSk7CiAKICAgICAgICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotCi0gICAgICAgIGRyYXdUZXh0dXJlZFF1YWQobG9j
YWxNYXRyaXgsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIGxheWVyLT5kcmF3T3Bh
Y2l0eSgpLCBmYWxzZSk7CisgICAgICAgIHVzZVNoYWRlclByb2dyYW0oc3RhdGljX2Nhc3Q8U2hh
ZGVyUHJvZ3JhbVR5cGU+KGxheWVyLT5zaGFkZXJQcm9ncmFtSWQoKSkpOworICAgICAgICBkcmF3
VGV4dHVyZWRRdWFkKGxvY2FsTWF0cml4LCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgp
LCBsYXllci0+ZHJhd09wYWNpdHkoKSk7CiAgICAgfQogCiAgICAgLy8gRHJhdyB0aGUgZGVidWcg
Ym9yZGVyIGlmIHRoZXJlIGlzIG9uZS4KQEAgLTYxNiwxNCArNjU3LDE1IEBAIGJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjppbml0R0woKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBCaW5k
cyB0aGUgZ2l2ZW4gYXR0cmlidXRlIG5hbWUgdG8gYSBjb21tb24gbG9jYXRpb24gYWNyb3NzIGFs
bCB0aHJlZSBwcm9ncmFtcwotLy8gdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBhbGxvd3Mg
dGhlIGNvZGUgdG8gYmluZCB0aGUgYXR0cmlidXRlcyBvbmx5IG9uY2UKLS8vIGV2ZW4gd2hlbiBz
d2l0Y2hpbmcgYmV0d2VlbiBwcm9ncmFtcy4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpi
aW5kQ29tbW9uQXR0cmliTG9jYXRpb24oaW50IGxvY2F0aW9uLCBjaGFyKiBhdHRyaWJOYW1lKQot
ewotICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uKG1fbGF5ZXJQcm9ncmFtT2JqZWN0LCBsb2NhdGlv
biwgYXR0cmliTmFtZSk7Ci0gICAgZ2xCaW5kQXR0cmliTG9jYXRpb24obV9ib3JkZXJQcm9ncmFt
T2JqZWN0LCBsb2NhdGlvbiwgYXR0cmliTmFtZSk7Ci0gICAgZ2xCaW5kQXR0cmliTG9jYXRpb24o
bV9zY3JvbGxQcm9ncmFtT2JqZWN0LCBsb2NhdGlvbiwgYXR0cmliTmFtZSk7Cit2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9ucyhTaGFkZXJQcm9ncmFt
VHlwZSBwcm9ncmFtKQoreworICAgIHVuc2lnbmVkIHByb2dyYW1JZCA9IG1fc2hhZGVyUHJvZ3Jh
bXNbcHJvZ3JhbV0ubV9zaGFkZXJQcm9ncmFtSWQ7CisgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24o
cHJvZ3JhbUlkLCBtX3Bvc2l0aW9uTG9jYXRpb24sICJhX3Bvc2l0aW9uIik7CisgICAgZ2xCaW5k
QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlkLCBtX3RleENvb3JkTG9jYXRpb24sICJhX3RleENvb3Jk
Iik7CisKKyAgICAvLyBSZS1saW5rIHRoZSBwcm9ncmFtIGZvciB0aGUgbmV3IGF0dHJpYnV0ZSBs
b2NhdGlvbnMgdG8gdGFrZSBlZmZlY3QuCisgICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSWQpOwor
ICAgIGNoZWNrR0xFcnJvcigpOwogfQogCiBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5p
dGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCkBAIC02NjMsNiArNzA1LDE5IEBAIGJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0g
dmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KTsgXG4i
CiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iOwogCisgICAgLy8gV2ViR0wgbGF5ZXJzIG5lZWQgdG8gYmUgZmxpcHBlZCB2ZXJ0
aWNhbGx5IGFuZCB0aGVpciBjb2xvcnMgc2hvdWxkbid0IGJlCisgICAgLy8gc3dpenpsZWQuCisg
ICAgY2hhciB3ZWJHTEZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAi
dmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgor
ICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidW5pZm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICB2ZWM0IHRleENv
bG9yID0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIDEuMCAtIHZfdGV4
Q29vcmQueSkpOyBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54
LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyAgICAg
ICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biI7CisKICAgICAvLyBTaGFkZXJzIGZvciBkcmF3aW5nIHRoZSBkZWJ1ZyBib3JkZXJzIGFyb3Vu
ZCB0aGUgbGF5ZXJzLgogICAgIGNoYXIgYm9yZGVyVmVydGV4U2hhZGVyU3RyaW5nW10gPQogICAg
ICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIKQEAgLTY5Miw0OSArNzQ3LDM4
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIDEsIDIsIDN9OyAvLyBBIGxpbmUgcGF0aCBmb3IgZHJhd2luZyB0
aGUgbGF5ZXIgYm9yZGVyLgogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9sYXll
clByb2dyYW1PYmplY3QgPSBsb2FkU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTdHJpbmcsIGZy
YWdtZW50U2hhZGVyU3RyaW5nKTsKLSAgICBpZiAoIW1fbGF5ZXJQcm9ncmFtT2JqZWN0KSB7Ci0g
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgbGF5
ZXJzIik7CisKKyAgICBpZiAoIWNyZWF0ZUxheWVyU2hhZGVyKENvbnRlbnRMYXllclByb2dyYW0s
IHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21lbnRTaGFkZXJTdHJpbmcpKSB7CisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgY29udGVudCBsYXll
cnMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBMYXllckNocm9taXVtOjpz
ZXRTaGFkZXJQcm9ncmFtSWQoQ29udGVudExheWVyUHJvZ3JhbSk7CisKKyAgICBpZiAoIWNyZWF0
ZUxheWVyU2hhZGVyKFdlYkdMTGF5ZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHdlYkdM
RnJhZ21lbnRTaGFkZXJTdHJpbmcpKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNy
ZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgV2ViR0wgbGF5ZXJzIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CisgICAgV2ViR0xMYXllckNocm9taXVtOjpzZXRTaGFkZXJQcm9ncmFtSWQo
V2ViR0xMYXllclByb2dyYW0pOwogCi0gICAgbV9zY3JvbGxQcm9ncmFtT2JqZWN0ID0gbG9hZFNo
YWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVudFNoYWRlclN0cmlu
Zyk7Ci0gICAgaWYgKCFtX3Njcm9sbFByb2dyYW1PYmplY3QpIHsKKyAgICBpZiAoIWNyZWF0ZUxh
eWVyU2hhZGVyKFNjcm9sbExheWVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyU3RyaW5nLCBzY3JvbGxG
cmFnbWVudFNoYWRlclN0cmluZykpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIHNoYWRlciBwcm9ncmFtIGZvciBzY3JvbGxpbmcgbGF5ZXIiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIG1fYm9yZGVyUHJvZ3JhbU9iamVjdCA9IGxvYWRTaGFkZXJQ
cm9ncmFtKGJvcmRlclZlcnRleFNoYWRlclN0cmluZywgYm9yZGVyRnJhZ21lbnRTaGFkZXJTdHJp
bmcpOwotICAgIGlmICghbV9ib3JkZXJQcm9ncmFtT2JqZWN0KSB7CisgICAgaWYgKCFjcmVhdGVM
YXllclNoYWRlcihEZWJ1Z0JvcmRlclByb2dyYW0sIGJvcmRlclZlcnRleFNoYWRlclN0cmluZywg
Ym9yZGVyRnJhZ21lbnRTaGFkZXJTdHJpbmcpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgZGVidWcgYm9yZGVycyIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLy8gU3BlY2lmeSB0aGUgYXR0cmliIGxvY2F0aW9u
IGZvciB0aGUgcG9zaXRpb24gYW5kIG1ha2UgaXQgdGhlIHNhbWUgZm9yIGFsbCB0aHJlZSBwcm9n
cmFtcyB0bworICAgIC8vIFNwZWNpZnkgdGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGhlIHBvc2l0
aW9uIGFuZCB0ZXhDb29yZCBhbmQgbWFrZSBpdCB0aGUgc2FtZSBmb3IgYWxsIHByb2dyYW1zIHRv
CiAgICAgLy8gYXZvaWQgYmluZGluZyByZS1iaW5kaW5nIHRoZSB2ZXJ0ZXggYXR0cmlidXRlcy4K
LSAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24obV9wb3NpdGlvbkxvY2F0aW9uLCAiYV9wb3Np
dGlvbiIpOwotICAgIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihtX3RleENvb3JkTG9jYXRpb24s
ICJhX3RleENvb3JkIik7Ci0KLSAgICBjaGVja0dMRXJyb3IoKTsKLQotICAgIC8vIFJlLWxpbmsg
dGhlIHNoYWRlcnMgdG8gZ2V0IHRoZSBuZXcgYXR0cmliIGxvY2F0aW9uIHRvIHRha2UgZWZmZWN0
LgotICAgIGdsTGlua1Byb2dyYW0obV9sYXllclByb2dyYW1PYmplY3QpOwotICAgIGdsTGlua1By
b2dyYW0obV9ib3JkZXJQcm9ncmFtT2JqZWN0KTsKLSAgICBnbExpbmtQcm9ncmFtKG1fc2Nyb2xs
UHJvZ3JhbU9iamVjdCk7Ci0KLSAgICBjaGVja0dMRXJyb3IoKTsKKyAgICBiaW5kQ29tbW9uQXR0
cmliTG9jYXRpb25zKENvbnRlbnRMYXllclByb2dyYW0pOworICAgIGJpbmRDb21tb25BdHRyaWJM
b2NhdGlvbnMoV2ViR0xMYXllclByb2dyYW0pOworICAgIGJpbmRDb21tb25BdHRyaWJMb2NhdGlv
bnMoRGVidWdCb3JkZXJQcm9ncmFtKTsKKyAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25zKFNj
cm9sbExheWVyUHJvZ3JhbSk7CiAKLSAgICAvLyBHZXQgbG9jYXRpb25zIG9mIHVuaWZvcm1zIGZv
ciB0aGUgbGF5ZXIgY29udGVudCBzaGFkZXIgcHJvZ3JhbS4KLSAgICBtX3NhbXBsZXJMb2NhdGlv
biA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fbGF5ZXJQcm9ncmFtT2JqZWN0LCAic190ZXh0dXJl
Iik7Ci0gICAgbV9tYXRyaXhMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fbGF5ZXJQ
cm9ncmFtT2JqZWN0LCAibWF0cml4Iik7Ci0gICAgbV9hbHBoYUxvY2F0aW9uID0gZ2xHZXRVbmlm
b3JtTG9jYXRpb24obV9sYXllclByb2dyYW1PYmplY3QsICJhbHBoYSIpOwotCi0gICAgbV9zY3Jv
bGxNYXRyaXhMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fc2Nyb2xsUHJvZ3JhbU9i
amVjdCwgIm1hdHJpeCIpOwotICAgIG1fc2Nyb2xsU2FtcGxlckxvY2F0aW9uID0gZ2xHZXRVbmlm
b3JtTG9jYXRpb24obV9zY3JvbGxQcm9ncmFtT2JqZWN0LCAic190ZXh0dXJlIik7Ci0KLSAgICAv
LyBHZXQgbG9jYXRpb25zIG9mIHVuaWZvcm1zIGZvciB0aGUgZGVidWcgYm9yZGVyIHNoYWRlciBw
cm9ncmFtLgotICAgIG1fYm9yZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihtX2JvcmRlclByb2dyYW1PYmplY3QsICJtYXRyaXgiKTsKLSAgICBtX2JvcmRlckNvbG9yTG9j
YXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2JvcmRlclByb2dyYW1PYmplY3QsICJjb2xv
ciIpOworICAgIC8vIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbG9yIHVuaWZvcm0gZm9yIHRo
ZSBkZWJ1ZyBib3JkZXIgc2hhZGVyIHByb2dyYW0uCisgICAgbV9ib3JkZXJDb2xvckxvY2F0aW9u
ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9zaGFkZXJQcm9ncmFtc1tEZWJ1Z0JvcmRlclByb2dy
YW1dLm1fc2hhZGVyUHJvZ3JhbUlkLCAiY29sb3IiKTsKIAogICAgIGdsR2VuQnVmZmVycygzLCBt
X3F1YWRWYm9JZHMpOwogICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fcXVhZFZi
b0lkc1tWZXJ0aWNlc10pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2MTcw
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDE2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIEdMRVMyQ29udGV4dDsKIGNsYXNzIFBhZ2U7CiAKK2NsYXNzIFNoYWRlclBy
b2dyYW0geworcHVibGljOgorICAgIFNoYWRlclByb2dyYW0oKTsKKworICAgIHVuc2lnbmVkIG1f
c2hhZGVyUHJvZ3JhbUlkOworICAgIGludCBtX3NhbXBsZXJMb2NhdGlvbjsKKyAgICBpbnQgbV9t
YXRyaXhMb2NhdGlvbjsKKyAgICBpbnQgbV9hbHBoYUxvY2F0aW9uOworfTsKKwogLy8gQ2xhc3Mg
dGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdM
LgogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKQEAgLTc0LDE3ICs4NCwyMyBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0KiBy
b290TGF5ZXJHcmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllckdyYXBo
aWNzQ29udGV4dC5nZXQoKTsgfQogCiBwcml2YXRlOgorICAgIGVudW0gU2hhZGVyUHJvZ3JhbVR5
cGUgeyBEZWJ1Z0JvcmRlclByb2dyYW0sIFNjcm9sbExheWVyUHJvZ3JhbSwgQ29udGVudExheWVy
UHJvZ3JhbSwgV2ViR0xMYXllclByb2dyYW0sIE51bVNoYWRlclByb2dyYW1UeXBlcyB9OworCiAg
ICAgdm9pZCB1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0KTsKIAogICAgIHZvaWQgZHJhd0xheWVyKExheWVyQ2hyb21p
dW0qKTsKIAogICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyKExheWVyQ2hyb21pdW0qLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQs
IGZsb2F0IG9wYWNpdHksIGJvb2wgc2Nyb2xsaW5nKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1
YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCwgZmxvYXQgb3BhY2l0eSk7CiAKICAgICBib29sIGlzTGF5ZXJWaXNpYmxlKExheWVy
Q2hyb21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEludFJlY3QmIHZp
c2libGVSZWN0KTsKIAotICAgIHZvaWQgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBsb2Nh
dGlvbiwgY2hhciogYXR0cmliTmFtZSk7CisgICAgYm9vbCBjcmVhdGVMYXllclNoYWRlcihTaGFk
ZXJQcm9ncmFtVHlwZSwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisKKyAgICB2b2lkIHVzZVNoYWRlclByb2dyYW0oU2hh
ZGVyUHJvZ3JhbVR5cGUpOworCisgICAgdm9pZCBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25zKFNo
YWRlclByb2dyYW1UeXBlKTsKIAogICAgIGVudW0gVmJvSWRzIHsgVmVydGljZXMsIExheWVyRWxl
bWVudHMgfTsKIApAQCAtOTYsMTIgKzExMiw5IEBAIHByaXZhdGU6CiAgICAgaW50IGdldFRleHR1
cmVJZChMYXllckNocm9taXVtKik7CiAgICAgaW50IGFzc2lnblRleHR1cmVGb3JMYXllcihMYXll
ckNocm9taXVtKik7CiAKLSAgICAvLyBHTCBzaGFkZXIgcHJvZ3JhbSBvYmplY3QgSURzLgotICAg
IHVuc2lnbmVkIGludCBtX2xheWVyUHJvZ3JhbU9iamVjdDsKLSAgICB1bnNpZ25lZCBpbnQgbV9i
b3JkZXJQcm9ncmFtT2JqZWN0OwotICAgIHVuc2lnbmVkIGludCBtX3Njcm9sbFByb2dyYW1PYmpl
Y3Q7CisgICAgU2hhZGVyUHJvZ3JhbSBtX3NoYWRlclByb2dyYW1zW051bVNoYWRlclByb2dyYW1U
eXBlc107CiAKLSAgICB1bnNpZ25lZCBpbnQgbV9yb290TGF5ZXJUZXh0dXJlSWQ7CisgICAgdW5z
aWduZWQgbV9yb290TGF5ZXJUZXh0dXJlSWQ7CiAgICAgaW50IG1fcm9vdExheWVyVGV4dHVyZVdp
ZHRoOwogICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7CiAKQEAgLTExMSwxMyArMTI0
LDkgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zYW1wbGVyTG9jYXRpb247CiAgICAgaW50IG1fbWF0
cml4TG9jYXRpb247CiAgICAgaW50IG1fYWxwaGFMb2NhdGlvbjsKLSAgICBpbnQgbV9zY3JvbGxN
YXRyaXhMb2NhdGlvbjsKLSAgICBpbnQgbV9zY3JvbGxTYW1wbGVyTG9jYXRpb247Ci0KLSAgICBp
bnQgbV9ib3JkZXJNYXRyaXhMb2NhdGlvbjsKICAgICBpbnQgbV9ib3JkZXJDb2xvckxvY2F0aW9u
OwogCi0gICAgdW5zaWduZWQgaW50IG1fcXVhZFZib0lkc1szXTsKKyAgICB1bnNpZ25lZCBtX3F1
YWRWYm9JZHNbM107CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4
OwogCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdExheWVyOwpAQCAtMTI4LDggKzEz
NywxMCBAQCBwcml2YXRlOgogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9v
bCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CiAKKyAgICBTaGFkZXJQcm9ncmFtVHlwZSBtX2N1cnJl
bnRTaGFkZXJQcm9ncmFtVHlwZTsKKwogICAgIC8vIE1hcCBhc3NvY2lhdGluZyBsYXllcnMgd2l0
aCB0ZXh0dXJlcyBpZHMgdXNlZCBieSB0aGUgR0wgY29tcG9zaXRvci4KLSAgICB0eXBlZGVmIEhh
c2hNYXA8TGF5ZXJDaHJvbWl1bSosIHVuc2lnbmVkIGludD4gVGV4dHVyZUlkTWFwOworICAgIHR5
cGVkZWYgSGFzaE1hcDxMYXllckNocm9taXVtKiwgdW5zaWduZWQ+IFRleHR1cmVJZE1hcDsKICAg
ICBUZXh0dXJlSWRNYXAgbV90ZXh0dXJlSWRNYXA7CiAKICNpZiBQTEFURk9STShTS0lBKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1MYXllckNocm9t
aXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1MYXllckNocm9taXVtLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlRyYW5zZm9ybUxheWVyQ2hyb21pdW0u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFRyYW5zZm9ybUxheWVyQ2hy
b21pdW0+IFRyYW5zZm9ybUxheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNmb3JtTGF5ZXJDaHJv
bWl1bShvd25lcikpOworfQorCitUcmFuc2Zvcm1MYXllckNocm9taXVtOjpUcmFuc2Zvcm1MYXll
ckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgOiBMYXllckNocm9t
aXVtKG93bmVyKQoreworfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1M
YXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmFuc2Zvcm1MYXllckNocm9taXVtLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBUcmFuc2Zvcm1MYXllckNocm9taXVt
X2gKKyNkZWZpbmUgVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gQSBMYXllciB0aGF0IGRvZXNuJ3QgZHJhdyBhbnkgY29udGVudCBi
dXQgc2ltcGx5IGV4aXN0cyB0byBncm91cCBhbmQKKy8vIHRyYW5zZm9ybSBpdHMgZGVzY2VuZGFu
dHMuCitjbGFzcyBUcmFuc2Zvcm1MYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zZm9ybUxheWVyQ2hyb21pdW0+
IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CisgICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgVHJh
bnNmb3JtTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKK307CisK
K30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3Vuc2lnbmVkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6bV9zaGFkZXJQcm9ncmFt
SWQgPSAwOworCitXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAs
IG1fY29udGV4dCgwKQorICAgICwgbV90ZXh0dXJlSWQoMCkKKyAgICAsIG1fdGV4dHVyZUNoYW5n
ZWQoZmFsc2UpCit7Cit9CisKK3Vuc2lnbmVkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlk
KCkKK3sKKyAgICByZXR1cm4gbV90ZXh0dXJlSWQ7Cit9CisKK3ZvaWQgV2ViR0xMYXllckNocm9t
aXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQKK30KKwordm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnNldENvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudAorfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKworI2lmbmRlZiBXZWJHTExheWVyQ2hyb21pdW1faAorI2RlZmluZSBXZWJHTExheWVy
Q2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworCisvLyBBIExheWVyIHRoYXQgY29udGFpbnMgYSBXZWJHTCBlbGVtZW50
LgorY2xhc3MgV2ViR0xMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3ND
b250ZW50KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgdmlydHVhbCBib29sIG93bnNUZXh0
dXJlKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlQ29u
dGVudHModW5zaWduZWQpOworICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVyZUlkKCk7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBzaGFkZXJQcm9ncmFtSWQoKSB7IHJldHVybiBtX3NoYWRlclByb2dy
YW1JZDsgfQorCisgICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KTsKKworICAgIHN0YXRpYyB2b2lkIHNldFNoYWRlclByb2dyYW1JZCh1bnNpZ25lZCBz
aGFkZXJQcm9ncmFtSWQpIHsgbV9zaGFkZXJQcm9ncmFtSWQgPSBzaGFkZXJQcm9ncmFtSWQ7IH0K
KworcHJpdmF0ZToKKyAgICBXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lcik7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICB1bnNpZ25l
ZCBtX3RleHR1cmVJZDsKKyAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7CisKKyAgICBzdGF0aWMg
dW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYK
</data>
<flag name="review"
          id="46542"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>