<?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>46318</bug_id>
          
          <creation_ts>2010-09-22 16:18:48 -0700</creation_ts>
          <short_desc>Perform framebuffer attachment checking upon draw call rather than attachment</short_desc>
          <delta_ts>2010-11-02 17:24:19 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>enne</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>283341</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-22 16:18:48 -0700</bug_when>
    <thetext>Per recent changes to the WebGL specification (Framebuffer Object Attachments, section 6.3), checks about the validity of the framebuffer configuration need to occur upon draw call rather than at the point a renderbuffer is attached to a framebuffer. In particular:

 - Attachments to more than one attachment point (DEPTH, STENCIL, DEPTH_STENCIL) are illegal.
 - The attachment&apos;s format must match that of the attachment point.

The reason for this is to avoid implicitly supporting separate depth+stencil (or packed depth+stencil) on some platforms and not others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301415</commentid>
    <comment_count>1</comment_count>
      <attachid>72252</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-10-28 16:18:12 -0700</bug_when>
    <thetext>Created attachment 72252
patch

I will commit the test change to khronos once reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303518</commentid>
    <comment_count>2</comment_count>
      <attachid>72252</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-02 11:44:55 -0700</bug_when>
    <thetext>Comment on attachment 72252
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=72252&amp;action=review

Looks good overall. Couple of minor comments.

&gt; WebCore/html/canvas/WebGLFramebuffer.cpp:38
&gt; +static unsigned long getInternalFormat(WebGLObject* buffer)

You could use an anonymous namespace instead of static methods here.

&gt; WebCore/html/canvas/WebGLFramebuffer.cpp:141
&gt; +        return true;

This test seems redundant.

&gt; WebCore/html/canvas/WebGLFramebuffer.h:49
&gt; +    // readPixels, copyTexImage2D, copyTexSubImage2D if this frame bufferis

bufferis -&gt; buffer is</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303528</commentid>
    <comment_count>3</comment_count>
      <attachid>72252</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-02 11:52:53 -0700</bug_when>
    <thetext>Comment on attachment 72252
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=72252&amp;action=review

Sorry, I noticed an issue after r+&apos;ing the patch. Hopefully you get this email before landing.

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:458
&gt; +        return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_ATTACHMENT;

According to the spec this is supposed to be FRAMEBUFFER_UNSUPPORTED. Is there a reason to diverge? If not, please update the code and the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303742</commentid>
    <comment_count>4</comment_count>
      <attachid>72754</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-02 15:56:22 -0700</bug_when>
    <thetext>Created attachment 72754
revised patch: responding to kbr&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303765</commentid>
    <comment_count>5</comment_count>
      <attachid>72754</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-02 16:14:01 -0700</bug_when>
    <thetext>Comment on attachment 72754
revised patch: responding to kbr&apos;s review

Looks good. Thanks for taking care of this. Don&apos;t forget to sync the test with the Khronos repository.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303809</commentid>
    <comment_count>6</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-02 17:24:19 -0700</bug_when>
    <thetext>Committed r71190: &lt;http://trac.webkit.org/changeset/71190&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72252</attachid>
            <date>2010-10-28 16:18:12 -0700</date>
            <delta_ts>2010-11-02 15:56:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>attachment.patch</filename>
            <type>text/plain</type>
            <size>27453</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDgyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMTAtMjggIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQZXJmb3Jt
IGZyYW1lYnVmZmVyIGF0dGFjaG1lbnQgY2hlY2tpbmcgdXBvbiBkcmF3IGNhbGwgcmF0aGVyIHRo
YW4gYXR0YWNobWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDYzMTgKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW50ZXJuYWxGb3JtYXQpOiBIZWxwZXIgZnVuY3Rpb24g
dG8gZ2V0IGFuIGF0dGFjaG1lbnQncyBpbnRlcm5hbCBmb3JtYXQuCisgICAgICAgIChXZWJDb3Jl
Ojppc1VuaW5pdGlhbGl6ZWQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZGVjaWRlIGlmIGFuIGF0dGFj
aG1lbnQgaXMgaW5pdGlhbGl6ZWQgb3Igbm90LgorICAgICAgICAoV2ViQ29yZTo6c2V0SW5pdGlh
bGl6ZWQpOiBIZWxwZXIgZnVudGlvbiB0byBzZXQgYW4gYXR0YWNobWVudCBhcyBiZWluZyBpbml0
aWFsaXplZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1l
bnQpOiBObyBsb25nZXIgcGVyZm9ybSBidWZmZXIgaW5pdGlhbGl6YXRpb24gYXQgdGhpcyBwb2lu
dC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldENvbG9yQnVm
ZmVyRm9ybWF0KTogTWFrZSBpdCBjb25zdC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVi
dWZmZXI6OmlzSW5jb21wbGV0ZSk6IEF0dGFjaG1lbnRzIGNvbmZsaWN0IGNoZWNrLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MpOiBDaGVjayBhdGF0Y2htZW50
IGNvbmZsaWN0cyBhbmQgYnVmZmVyIGluaXRpYWxpemF0aW9uIGlmIG5lY2Vzc2FyeS4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTog
UmV0dXJuIGEgYm9vbGVhbiB3aGV0aGVyIHRoZSBmcmFtZWJ1ZmZlciBpcyBjb21wbGV0ZSBvciBu
b3QuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oOiBBZGQgbmV3IGZ1
bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCByZW1vdmUgc29tZSBvdXRkYXRlZCBmdW5jdGlvbnMuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjppc0NvbG9yQXR0YWNoZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aXNEZXB0aEF0dGFjaGVkKTogTWFrZSB0
aGlzIHByaXZhdGUuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjppc1N0ZW5j
aWxBdHRhY2hlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6
aXNEZXB0aFN0ZW5jaWxBdHRhY2hlZCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6
c2V0SW50ZXJuYWxGb3JtYXQpOiBBbHNvIHNldCB0aGUgcmVuZGVyYnVmZmVyIGFzIHVuaW5pdGlh
bGl6ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVy
KTogTm8gbG9uZ2VyIHBlcmZvcm0gZnJhbWVidWZmZXIgaW5pdGlhbGl6YXRpb24gYXQgdGhpcyBw
b2ludC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyk6IENoZWNrIFdlYkdMIHNwZWNpZmljIGF0dGFjaG1lbnQgY29uZmxpY3Rz
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENhbGwg
V2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKTogTm8gbG9uZ2VyIHBlcmZvcm0gZnJhbWVidWZmZXIgaW5pdGlhbGl6YXRp
b24gYXQgdGhpcyBwb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVhZFBpeGVscyk6IENhbGwgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOiBO
byBsb25nZXIgcGVyZm9ybSBmcmFtZWJ1ZmZlciBpbml0aWFsaXphdGlvbiBhdCB0aGlzIHBvaW50
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmFz
ZSk6IERpdHRvLgorCiAyMDEwLTEwLTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4OiBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDcwNzk4KQorKysgV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsMjkgQEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIAorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZm9yIGRlcHRoL3N0
ZW5jaWwvZGVwdGhfc3RlbmNpbCBhdHRhY2htZW50LgorLy8gQ3VycmVudGx5IHdlIGFzc3VtZSB0
aGVzZSBhdHRhY2htZW50cyBhcmUgYWxsIHJlbmRlcmJ1ZmZlcnMuCitzdGF0aWMgdW5zaWduZWQg
bG9uZyBnZXRJbnRlcm5hbEZvcm1hdChXZWJHTE9iamVjdCogYnVmZmVyKQoreworICAgIEFTU0VS
VChidWZmZXIgJiYgYnVmZmVyLT5pc1JlbmRlcmJ1ZmZlcigpKTsKKyAgICByZXR1cm4gKHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihidWZmZXIpKS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKTsKK30KKworc3RhdGljIGJvb2wgaXNVbmluaXRpYWxpemVkKFdlYkdMT2JqZWN0KiBhdHRh
Y2hlZE9iamVjdCkKK3sKKyAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRPYmplY3Qt
Pm9iamVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpCisgICAgICAgICYm
ICEocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KGF0dGFjaGVkT2JqZWN0KSkt
PmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitzdGF0aWMgdm9pZCBzZXRJbml0aWFsaXplZChXZWJHTE9iamVjdCogYXR0YWNoZWRP
YmplY3QpCit7CisgICAgaWYgKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmpl
Y3QoKSAmJiBhdHRhY2hlZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSkKKyAgICAgICAgKHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihhdHRhY2hlZE9iamVjdCkpLT5zZXRJbml0
aWFsaXplZCgpOworfQorCiBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJhbWVi
dWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkdMRnJhbWVidWZmZXIoY3R4KSk7CkBAIC02Niw3ICs4OCw2IEBAIHZv
aWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCh1bnMKICAgICBkZWZhdWx0OgogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7CiB9CiAK
IHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudChXZWJHTE9iamVjdCogYXR0
YWNobWVudCkKQEAgLTgzLDI1ICsxMDQsOSBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92
ZUF0dGFjaG1lbnQoCiAgICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IDA7CiAgICAg
ZWxzZQogICAgICAgICByZXR1cm47Ci0gICAgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKLX0K
LQotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpvbkJpbmQoKQotewotICAgIGluaXRpYWxpemVSZW5k
ZXJidWZmZXJzKCk7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BdHRhY2hlZE9iamVj
dENoYW5nZShXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAgIC8vIEN1cnJlbnRseSBvYmplY3Qg
PT0gMCBpcyBub3QgY29uc2lkZXJlZCwgYnV0IHRoaXMgbWlnaHQgY2hhbmdlIGlmIHRoZQotICAg
IC8vIGxpZmVzcGFuIG9mIFdlYkdMT2JqZWN0IGNoYW5nZXMuCi0gICAgaWYgKG9iamVjdAotICAg
ICAgICAmJiAob2JqZWN0ID09IG1fY29sb3JBdHRhY2htZW50LmdldCgpIHx8IG9iamVjdCA9PSBt
X2RlcHRoQXR0YWNobWVudC5nZXQoKQotICAgICAgICAgICAgfHwgb2JqZWN0ID09IG1fc3RlbmNp
bEF0dGFjaG1lbnQuZ2V0KCkgfHwgb2JqZWN0ID09IG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC5n
ZXQoKSkpCi0gICAgICAgIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7Ci19Ci0KLXVuc2lnbmVk
IGxvbmcgV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKQordW5zaWduZWQg
bG9uZyBXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0CiB7CiAg
ICAgaWYgKG9iamVjdCgpICYmIG1fY29sb3JBdHRhY2htZW50ICYmIG1fY29sb3JBdHRhY2htZW50
LT5vYmplY3QoKSkgewogICAgICAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQtPmlzUmVuZGVyYnVm
ZmVyKCkpIHsKQEAgLTExOSw2ICsxMjQsMzggQEAgdW5zaWduZWQgbG9uZyBXZWJHTEZyYW1lYnVm
ZmVyOjpnZXRDb2xvcgogICAgIHJldHVybiAwOwogfQogCitib29sIFdlYkdMRnJhbWVidWZmZXI6
OmlzSW5jb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKyAg
ICBpZiAoaXNEZXB0aEF0dGFjaGVkKCkpIHsKKyAgICAgICAgaWYgKGdldEludGVybmFsRm9ybWF0
KG1fZGVwdGhBdHRhY2htZW50LmdldCgpKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09N
UE9ORU5UMTYpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY291bnQrKzsKKyAg
ICB9CisgICAgaWYgKGlzU3RlbmNpbEF0dGFjaGVkKCkpIHsKKyAgICAgICAgaWYgKGdldEludGVy
bmFsRm9ybWF0KG1fc3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0lOREVYOCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjb3Vu
dCsrOworICAgIH0KKyAgICBpZiAoY291bnQgPiAxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoaXNEZXB0aFN0ZW5jaWxBdHRhY2hlZCgpKSB7CisgICAgICAgIGlmIChnZXRJbnRlcm5h
bEZvcm1hdChtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9TVEVOQ0lMKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNv
dW50Kys7CisgICAgfQorICAgIGlmIChjb3VudCA+IDEpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcygp
Cit7CisgICAgaWYgKGlzSW5jb21wbGV0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7Cit9CisKIHZvaWQgV2ViR0xGcmFtZWJ1
ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBp
ZiAoIWlzRGVsZXRlZCgpKQpAQCAtMTI5LDI0ICsxNjYsMTEgQEAgdm9pZCBXZWJHTEZyYW1lYnVm
ZmVyOjpkZWxldGVPYmplY3RJbXBsKAogICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IDA7
CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aXNVbmluaXRpYWxpemVkKFdlYkdMT2JqZWN0
KiBhdHRhY2hlZE9iamVjdCkKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRl
cmJ1ZmZlcnMoKQogewotICAgIGlmIChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+
b2JqZWN0KCkgJiYgYXR0YWNoZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkKLSAgICAgICAgJiYg
IShyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4oYXR0YWNoZWRPYmplY3QpKS0+
aXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0SW5pdGlhbGl6ZWQoV2ViR0xPYmplY3Qq
IGF0dGFjaGVkT2JqZWN0KQotewotICAgIGlmIChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9i
amVjdC0+b2JqZWN0KCkgJiYgYXR0YWNoZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpCi0gICAg
ICAgIChyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4oYXR0YWNoZWRPYmplY3Qp
KS0+c2V0SW5pdGlhbGl6ZWQoKTsKLX0KLQotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFs
aXplUmVuZGVyYnVmZmVycygpCi17Ci0gICAgaWYgKCFvYmplY3QoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVChvYmplY3QoKSk7CisgICAgaWYgKCFpc0NvbG9yQXR0YWNoZWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgaW5pdENvbG9yID0gZmFsc2UsIGluaXREZXB0
aCA9IGZhbHNlLCBpbml0U3RlbmNpbCA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGxvbmcgbWFzayA9
IDA7CiAgICAgaWYgKGlzVW5pbml0aWFsaXplZChtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkpIHsK
QEAgLTE2NywxMyArMTkxLDEzIEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJl
bmRlcmIKICAgICAgICAgbWFzayB8PSAoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9C
SVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKICAgICB9CiAgICAg
aWYgKCFpbml0Q29sb3IgJiYgIWluaXREZXB0aCAmJiAhaW5pdFN0ZW5jaWwpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBXZSBvbmx5IGNsZWFyIHVuLWlu
aXRpYWxpemVkIHJlbmRlcmJ1ZmZlcnMgd2hlbiB0aGV5IGFyZSByZWFkeSB0byBiZQogICAgIC8v
IHJlYWQsIGkuZS4sIHdoZW4gdGhlIGZyYW1lYnVmZmVyIGlzIGNvbXBsZXRlLgogICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBnM2QgPSBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAg
aWYgKGczZC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmbG9hdCBjb2xvckNsZWFy
VmFsdWVbXSA9IHswLCAwLCAwLCAwfSwgZGVwdGhDbGVhclZhbHVlID0gMDsKICAgICBpbnQgc3Rl
bmNpbENsZWFyVmFsdWUgPSAwOwpAQCAtMjM3LDYgKzI2MSw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1
ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmIKICAgICAgICAgaWYgKGluaXRTdGVuY2lsKQogICAgICAg
ICAgICAgc2V0SW5pdGlhbGl6ZWQobV9zdGVuY2lsQXR0YWNobWVudC5nZXQoKSk7CiAgICAgfQor
ICAgIHJldHVybiB0cnVlOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuaAkocmV2aXNpb24gNzA3OTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMjcgKzM5LDIxIEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKIAotICAgIGJvb2wgaXNEZXB0aEF0dGFjaGVkKCkgY29uc3QgeyBy
ZXR1cm4gKG1fZGVwdGhBdHRhY2htZW50ICYmIG1fZGVwdGhBdHRhY2htZW50LT5vYmplY3QoKSk7
IH0KLSAgICBib29sIGlzU3RlbmNpbEF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gKG1fc3RlbmNp
bEF0dGFjaG1lbnQgJiYgbV9zdGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9Ci0gICAgYm9v
bCBpc0RlcHRoU3RlbmNpbEF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gKG1fZGVwdGhTdGVuY2ls
QXR0YWNobWVudCAmJiBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPm9iamVjdCgpKTsgfQotCiAg
ICAgdm9pZCBzZXRBdHRhY2htZW50KHVuc2lnbmVkIGxvbmcsIFdlYkdMT2JqZWN0Kik7CiAgICAg
Ly8gSWYgYW4gb2JqZWN0IGlzIGF0dGFjaGVkIHRvIHRoZSBmcmFtZWJ1ZmZlciwgcmVtb3ZlIGl0
LgogICAgIHZvaWQgcmVtb3ZlQXR0YWNobWVudChXZWJHTE9iamVjdCopOwogCi0gICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgYSBmcmFtZWJ1ZmZlciBpcyBib3VuZC4K
LSAgICAvLyBCZWNhdXNlIHJlbmRlcmJ1ZmZlcnMgYW5kIHRleHR1cmVzIGF0dGFjaGVkIHRvIHRo
ZSBmcmFtZWJ1ZmZlciBtaWdodAotICAgIC8vIGhhdmUgY2hhbmdlZCBhbmQgdGhlIGZyYW1lYnVm
ZmVyIG1pZ2h0IGhhdmUgYmVjb21lIGNvbXBsZXRlIHdoZW4gaXQKLSAgICAvLyBpc24ndCBib3Vu
ZCwgc28gd2UgbmVlZCB0byBjbGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJidWZmZXJzLgotICAg
IHZvaWQgb25CaW5kKCk7Ci0KLSAgICAvLyBXaGVuIGEgdGV4dHVyZSBvciBhIHJlbmRlcmJ1ZmZl
ciBjaGFuZ2VzLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZQotICAgIC8vIGN1cnJlbnQgYm91bmQgZnJh
bWVidWZmZXI7IGlmIHRoZSBuZXdseSBjaGFuZ2VkIG9iamVjdCBpcyBhdHRhY2hlZAotICAgIC8v
IHRvIHRoZSBmcmFtZWJ1ZmZlciBhbmQgdGhlIGZyYW1lYnVmZmVyIGJlY29tZXMgY29tcGxldGUs
IHdlIG5lZWQgdG8KLSAgICAvLyBjbGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJidWZmZXJzLgot
ICAgIHZvaWQgb25BdHRhY2hlZE9iamVjdENoYW5nZShXZWJHTE9iamVjdCopOworICAgIHVuc2ln
bmVkIGxvbmcgZ2V0Q29sb3JCdWZmZXJGb3JtYXQoKSBjb25zdDsKKworICAgIC8vIFRoaXMgc2hv
dWxkIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIGRyYXdBcnJheSwgZHJhd0VsZW1lbnRzLCBjbGVh
ciwKKyAgICAvLyByZWFkUGl4ZWxzLCBjb3B5VGV4SW1hZ2UyRCwgY29weVRleFN1YkltYWdlMkQg
aWYgdGhpcyBmcmFtZSBidWZmZXJpcworICAgIC8vIGN1cnJlbnRseSBib3VuZC4KKyAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGluY29tcGxldGU7IG90aGVyd2lzZSBp
bml0aWFsaXplCisgICAgLy8gdGhlIGJ1ZmZlcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gaW5pdGlh
bGl6ZWQuCisgICAgYm9vbCBvbkFjY2VzcygpOwogCi0gICAgdW5zaWduZWQgbG9uZyBnZXRDb2xv
ckJ1ZmZlckZvcm1hdCgpOworICAgIC8vIFJldHVybiBmYWxzZSBkb2VzIG5vdCBtZWFuIENPTVBM
RVRFLCBtaWdodCBzdGlsbCBiZSBJTkNPTVBMRVRFLgorICAgIGJvb2wgaXNJbmNvbXBsZXRlKCkg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOwpAQCAtNjksOSArNjMsMTMgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IGJvb2wgaXNVbmluaXRpYWxpemVkKFdlYkdMT2JqZWN0Kik7Ci0gICAgdm9pZCBzZXRJbml0aWFs
aXplZChXZWJHTE9iamVjdCopOwotICAgIHZvaWQgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsK
KyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZS4KKyAgICBi
b29sIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7CisKKyAgICBib29sIGlzQ29sb3JBdHRhY2hl
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX2NvbG9yQXR0YWNobWVudCAmJiBtX2NvbG9yQXR0YWNobWVu
dC0+b2JqZWN0KCkpOyB9CisgICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJldHVy
biAobV9kZXB0aEF0dGFjaG1lbnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVjdCgpKTsgfQor
ICAgIGJvb2wgaXNTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9zdGVuY2lsQXR0
YWNobWVudCAmJiBtX3N0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KKyAgICBib29sIGlz
RGVwdGhTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9kZXB0aFN0ZW5jaWxBdHRh
Y2htZW50ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9CiAKICAgICBS
ZWZQdHI8V2ViR0xPYmplY3Q+IG1fY29sb3JBdHRhY2htZW50OwogICAgIFJlZlB0cjxXZWJHTE9i
amVjdD4gbV9kZXB0aEF0dGFjaG1lbnQ7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmJ1ZmZlci5oCShyZXZpc2lvbiA3MDc5OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksMTIgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZvaWQgc2V0SW50ZXJuYWxGb3JtYXQodW5zaWdu
ZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCkgeyBtX2ludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3Jt
YXQ7IH0KKyAgICB2b2lkIHNldEludGVybmFsRm9ybWF0KHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxm
b3JtYXQpCisgICAgeworICAgICAgICBtX2ludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7
CisgICAgICAgIG1faW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICB9CisKICAgICB1bnNpZ25lZCBs
b25nIGdldEludGVybmFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbEZvcm1hdDsg
fQogCiAgICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXpl
ZDsgfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkocmV2aXNpb24gNzA3OTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw4ICsyNzIsNiBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmCiAgICAgfQogICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gYnVmZmVyOwogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdl
dCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykK
LSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQmluZCgpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTQ1Niw2ICs0NTQsOCBAQCB1bnNpZ25lZCBs
b25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlCiAgICAgfQogICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURTsKKyAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPmlzSW5jb21wbGV0ZSgpKQorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICBy
ZXR1cm4gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTQ2Niw2ICs0NjYsMTAgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyKHVuc2lnbgogICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2NvbnRleHQtPmNsZWFyKG1h
c2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KQEAgLTUzMCwxMSAr
NTM0LDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1fZnJhbWVidWZmZXJC
aW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9jb250
ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVy
IGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgog
ICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BdHRh
Y2hlZE9iamVjdENoYW5nZSh0ZXgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKQEAgLTU1MSw2ICs1NTcsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvcHlUZXhTdWJJbQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQorICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNj
ZXNzKCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47
CisgICAgfQogICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTk0OSw2ICs5NTksMTEgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXModQogICAgICAgICB9CiAgICAgfQogCisgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3Mo
KSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKICAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNp
bXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CkBAIC0xMDA1LDYgKzEwMjAs
MTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAgICAgICB9
CiAgICAgfQogCisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVy
QmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQg
PSBmYWxzZTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICBpZiAoIW51
bUVsZW1lbnRzKQpAQCAtMTA3OSwzMyArMTA5OSw2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpmcmFtZWJ1ZmZlclIKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5vYmplY3QoKSkgewotICAgICAgICBib29s
IGlzQ29uZmxpY3RlZCA9IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAg
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZy0+aXNEZXB0aFN0ZW5jaWxBdHRhY2hlZCgpIHx8
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5pc1N0ZW5jaWxBdHRhY2hlZCgpKQotICAgICAgICAgICAg
ICAgIGlzQ29uZmxpY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNikKLSAg
ICAgICAgICAgICAgICBpc0NvbmZsaWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICAg
ICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZy0+aXNEZXB0aFN0ZW5jaWxBdHRhY2hlZCgp
IHx8IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5pc0RlcHRoQXR0YWNoZWQoKSkKLSAgICAgICAgICAg
ICAgICBpc0NvbmZsaWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Z2V0SW50
ZXJuYWxGb3JtYXQoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgpCi0gICAg
ICAgICAgICAgICAgaXNDb25mbGljdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0g
ICAgICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmctPmlzRGVwdGhBdHRhY2hlZCgpIHx8
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5pc1N0ZW5jaWxBdHRhY2hlZCgpKQotICAgICAgICAgICAg
ICAgIGlzQ29uZmxpY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMKQotICAgICAg
ICAgICAgICAgIGlzQ29uZmxpY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoaXNDb25mbGljdGVkKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CiAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwogICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5z
ZXRBdHRhY2htZW50KGF0dGFjaG1lbnQsIGJ1ZmZlcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKQEAgLTE5OTgsNiArMTk5MSwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVhZFBpeGVscyhsCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJC
aW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KICAgICAvLyBDYWxjdWxhdGUgYXJyYXkgc2l6ZSwgdGFraW5n
IGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FMSUdOTUVOVC4KICAgICB1bnNpZ25lZCBsb25n
IGJ5dGVzUGVyUm93ID0gY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQgKiB3
aWR0aDsKICAgICB1bnNpZ25lZCBsb25nIHBhZGRpbmcgPSAwOwpAQCAtMjA1MSwxMSArMjA0OCw4
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXIKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9TVEVOQ0lMOgogICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3Jh
Z2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGlmICht
X3JlbmRlcmJ1ZmZlckJpbmRpbmcpIHsKKyAgICAgICAgaWYgKG1fcmVuZGVyYnVmZmVyQmluZGlu
ZykKICAgICAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpOwotICAgICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQot
ICAgICAgICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hh
bmdlKG1fcmVuZGVyYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgIH0KICAgICAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKQEAgLTIxNDAsOCArMjEzNCw2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEQmEKICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsKLSAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFj
aGVkT2JqZWN0Q2hhbmdlKHRleCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzA4MjEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMC0yOCAgWmhlbnlhbyBN
byAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFBlcmZvcm0gZnJhbWVidWZmZXIgYXR0YWNobWVudCBjaGVja2luZyB1cG9u
IGRyYXcgY2FsbCByYXRoZXIgdGhhbiBhdHRhY2htZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjMxOAorCisgICAgICAgICogZmFzdC9jYW52YXMv
d2ViZ2wvZnJhbWVidWZmZXItb2JqZWN0LWF0dGFjaG1lbnQtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL2ZyYW1lYnVmZmVyLW9iamVjdC1hdHRhY2htZW50Lmh0bWw6
CisKIDIwMTAtMTAtMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2ZyYW1lYnVmZmVyLW9iamVjdC1hdHRhY2htZW50LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9mcmFtZWJ1ZmZlci1vYmplY3Qt
YXR0YWNobWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcwNzk4KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItb2JqZWN0LWF0dGFjaG1lbnQtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsOCBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBCiAKIENyZWF0ZSByZW5kZXJidWZmZXJzCiBQQVNTIGdsID0gY3Jl
YXRlM0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRl
UmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9f
RVJST1IKIFBBU1MgZGVwdGhCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24t
bnVsbC4KIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogUEFTUyBzdGVuY2lsQnVm
ZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCkBAIC0xNSw2NCArMTcs
NzYgQEAgUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbgogUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBBdHRhY2ggZGVwdGggdXNpbmcgU1RFTkNJTF9BVFRB
Q0hNRU5UCiBQQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQKK1BBU1Mg
Z2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCiBBdHRhY2gg
ZGVwdGggdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCiBQQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5W
QUxJRF9PUEVSQVRJT04KK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OCiBBdHRhY2ggc3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFD
SE1FTlQKIFBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KIFBB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogQXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQ
VEhfQVRUQUNITUVOVAogUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
CitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04K
K1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgog
QXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCiBQQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdsLmdldEVycm9yKCkg
aXMgZ2wuSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJP
UgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBn
bC5JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
LklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCiBBdHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5n
IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAogUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpIGlzIG5vbi1udWxsLgogUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBBdHRh
Y2ggZGVwdGhTdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKIFBBU1MgZmJvID0gZ2wuY3Jl
YXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5J
TlZBTElEX09QRVJBVElPTgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNT
IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVAorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04KIEF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgU1RFTkNJ
TF9BVFRBQ0hNRU5UCiBQQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQK
K1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCiBB
dHRhY2ggZGVwdGgsIHRoZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAogUEFTUyBmYm8gPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgogUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCi1QQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9PUEVSQVRJT04K
LVBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIGlzIGdsLkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVAogQXR0YWNoIHN0ZW5j
aWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxpY3QKIFBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJP
UgotUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCi1QQVNTIGdsLmdl
dEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJP
UgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQKIEF0dGFjaCBkZXB0aCwgdGhlbiBkZXB0
aFN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKIFBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgotUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCi1QQVNTIGdsLmdldEVycm9y
KCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFT
UyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQKIEF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gZGVw
dGgsIGNhdXNpbmcgY29uZmxpY3QKIFBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBp
cyBub24tbnVsbC4KIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgotUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCi1QQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0FUVEFDSE1FTlQKIEF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoU3RlbmNpbCwg
Y2F1c2luZyBjb25mbGljdAogUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5v
bi1udWxsLgogUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCi1QQVNTIGdsLmdldEVy
cm9yKCkgaXMgZ2wuSU5WQUxJRF9PUEVSQVRJT04KLVBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5O
T19FUlJPUgogUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVAogQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBzdGVuY2lsLCBjYXVz
aW5nIGNvbmZsaWN0CiBQQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51
bGwuCiBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKLVBBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5JTlZBTElEX09QRVJBVElPTgotUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VS
Uk9SCiBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UCiBBdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3Jt
YXQgPT0gUkdCQTQKIFBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBp
cyBub24tbnVsbC4KIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItb2JqZWN0LWF0dGFjaG1lbnQu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9mcmFtZWJ1
ZmZlci1vYmplY3QtYXR0YWNobWVudC5odG1sCShyZXZpc2lvbiA3MDc5OCkKKysrIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ZyYW1lYnVmZmVyLW9iamVjdC1hdHRhY2htZW50Lmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDI1ICsyMywyOSBAQCBmdW5jdGlvbiB0ZXN0QXR0YWNobWVu
dChhdHRhY2htZW50LCBidWZmCiB7CiAgICAgc2hvdWxkQmVOb25OdWxsKCJmYm8gPSBnbC5jcmVh
dGVGcmFtZWJ1ZmZlcigpIik7CiAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVS
LCBmYm8pOworICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBn
bC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuUkVOREVSQlVGRkVSLCBjb2xvckJ1ZmZlcik7CiAgICAg
Z2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIGds
LlJFTkRFUkJVRkZFUiwgYnVmZmVyKTsKLSAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsIGlz
Q29uZmxpY3RlZCA/ICJnbC5JTlZBTElEX09QRVJBVElPTiIgOiAiZ2wuTk9fRVJST1IiKTsKKyAg
ICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworICAgIGlmIChpc0Nv
bmZsaWN0ZWQpIHsKKyAgICAgICAgc2hvdWxkQmUoImdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIiwgImdsLkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCIp
OworICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsKKyAgICAgICAgc2hvdWxk
QmUoImdsLmdldEVycm9yKCkiLCAiZ2wuSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iKTsK
KyAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpKTsKKyAgICAg
ICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04iKTsKKyAgICB9CiB9CiAKIGZ1bmN0aW9uIHRlc3RBdHRhY2htZW50cyhhdHRhY2htZW50
MCwgYnVmZmVyMCwgYXR0YWNobWVudDEsIGJ1ZmZlcjEsIGlzQ29uZmxpY3RlZCkKIHsKICAgICBz
aG91bGRCZU5vbk51bGwoImZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkiKTsKICAgICBnbC5i
aW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZibyk7CisgICAgZ2wuZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5SRU5E
RVJCVUZGRVIsIGNvbG9yQnVmZmVyKTsKICAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihn
bC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudDAsIGdsLlJFTkRFUkJVRkZFUiwgYnVmZmVyMCk7CiAg
ICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKICAgICBnbC5mcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudDEsIGdsLlJFTkRF
UkJVRkZFUiwgYnVmZmVyMSk7Ci0gICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCBpc0NvbmZs
aWN0ZWQgPyAiZ2wuSU5WQUxJRF9PUEVSQVRJT04iIDogImdsLk5PX0VSUk9SIik7Ci0gICAgaWYg
KGlzQ29uZmxpY3RlZCkgewotICAgICAgICAvLyBEZXRhY2ggYnVmZmVyMCBmaXJzdCB1c2luZyBh
IG51bGwgb2JqZWN0LCB0aGVuIGF0dGFjaGluZyBidWZmZXIxIHNob3VsZCBzdWNjZWVkLgotICAg
ICAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVu
dDAsIGdsLlJFTkRFUkJVRkZFUiwgbnVsbCk7Ci0gICAgICAgIHNob3VsZEJlKCJnbC5nZXRFcnJv
cigpIiwgImdsLk5PX0VSUk9SIik7Ci0gICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50MSwgZ2wuUkVOREVSQlVGRkVSLCBidWZmZXIxKTsK
LSAgICAgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKLSAgICB9
CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAgICBpZiAo
aXNDb25mbGljdGVkKQorICAgICAgICBzaG91bGRCZSgiZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikiLCAiZ2wuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
Iik7CiB9CiAKIGZ1bmN0aW9uIHRlc3RDb2xvclJlbmRlcmJ1ZmZlcihpbnRlcm5hbGZvcm1hdCkK
QEAgLTU3LDYgKzYxLDEwIEBAIGRlc2NyaXB0aW9uKCJUZXN0IGZyYW1lYnVmZmVyIG9iamVjdCBh
dHQKIAogZGVidWcoIkNyZWF0ZSByZW5kZXJidWZmZXJzIik7CiBzaG91bGRCZU5vbk51bGwoImds
ID0gY3JlYXRlM0RDb250ZXh0KCkiKTsKK3Nob3VsZEJlTm9uTnVsbCgiY29sb3JCdWZmZXIgPSBn
bC5jcmVhdGVSZW5kZXJidWZmZXIoKSIpOworZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJC
VUZGRVIsIGNvbG9yQnVmZmVyKTsKK2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVG
RkVSLCBnbC5SR0JBNCwgd2lkdGgsIGhlaWdodCk7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIs
ICJnbC5OT19FUlJPUiIpOwogc2hvdWxkQmVOb25OdWxsKCJkZXB0aEJ1ZmZlciA9IGdsLmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpIik7CiBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwg
ZGVwdGhCdWZmZXIpOwogZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGds
LkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsK
</data>
<flag name="review"
          id="62473"
          type_id="1"
          status="-"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="62474"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72754</attachid>
            <date>2010-11-02 15:56:22 -0700</date>
            <delta_ts>2010-11-02 16:14:01 -0700</delta_ts>
            <desc>revised patch: responding to kbr&apos;s review</desc>
            <filename>attachment.patch</filename>
            <type>text/plain</type>
            <size>27359</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDgyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMTAtMjggIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQZXJmb3Jt
IGZyYW1lYnVmZmVyIGF0dGFjaG1lbnQgY2hlY2tpbmcgdXBvbiBkcmF3IGNhbGwgcmF0aGVyIHRo
YW4gYXR0YWNobWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDYzMTgKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW50ZXJuYWxGb3JtYXQpOiBIZWxwZXIgZnVuY3Rpb24g
dG8gZ2V0IGFuIGF0dGFjaG1lbnQncyBpbnRlcm5hbCBmb3JtYXQuCisgICAgICAgIChXZWJDb3Jl
Ojppc1VuaW5pdGlhbGl6ZWQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZGVjaWRlIGlmIGFuIGF0dGFj
aG1lbnQgaXMgaW5pdGlhbGl6ZWQgb3Igbm90LgorICAgICAgICAoV2ViQ29yZTo6c2V0SW5pdGlh
bGl6ZWQpOiBIZWxwZXIgZnVudGlvbiB0byBzZXQgYW4gYXR0YWNobWVudCBhcyBiZWluZyBpbml0
aWFsaXplZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1l
bnQpOiBObyBsb25nZXIgcGVyZm9ybSBidWZmZXIgaW5pdGlhbGl6YXRpb24gYXQgdGhpcyBwb2lu
dC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldENvbG9yQnVm
ZmVyRm9ybWF0KTogTWFrZSBpdCBjb25zdC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVi
dWZmZXI6OmlzSW5jb21wbGV0ZSk6IEF0dGFjaG1lbnRzIGNvbmZsaWN0IGNoZWNrLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MpOiBDaGVjayBhdGF0Y2htZW50
IGNvbmZsaWN0cyBhbmQgYnVmZmVyIGluaXRpYWxpemF0aW9uIGlmIG5lY2Vzc2FyeS4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTog
UmV0dXJuIGEgYm9vbGVhbiB3aGV0aGVyIHRoZSBmcmFtZWJ1ZmZlciBpcyBjb21wbGV0ZSBvciBu
b3QuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oOiBBZGQgbmV3IGZ1
bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCByZW1vdmUgc29tZSBvdXRkYXRlZCBmdW5jdGlvbnMuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjppc0NvbG9yQXR0YWNoZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aXNEZXB0aEF0dGFjaGVkKTogTWFrZSB0
aGlzIHByaXZhdGUuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjppc1N0ZW5j
aWxBdHRhY2hlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6
aXNEZXB0aFN0ZW5jaWxBdHRhY2hlZCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6
c2V0SW50ZXJuYWxGb3JtYXQpOiBBbHNvIHNldCB0aGUgcmVuZGVyYnVmZmVyIGFzIHVuaW5pdGlh
bGl6ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVy
KTogTm8gbG9uZ2VyIHBlcmZvcm0gZnJhbWVidWZmZXIgaW5pdGlhbGl6YXRpb24gYXQgdGhpcyBw
b2ludC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyk6IENoZWNrIFdlYkdMIHNwZWNpZmljIGF0dGFjaG1lbnQgY29uZmxpY3Rz
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENhbGwg
V2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKTogTm8gbG9uZ2VyIHBlcmZvcm0gZnJhbWVidWZmZXIgaW5pdGlhbGl6YXRp
b24gYXQgdGhpcyBwb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVhZFBpeGVscyk6IENhbGwgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOiBO
byBsb25nZXIgcGVyZm9ybSBmcmFtZWJ1ZmZlciBpbml0aWFsaXphdGlvbiBhdCB0aGlzIHBvaW50
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmFz
ZSk6IERpdHRvLgorCiAyMDEwLTEwLTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4OiBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDcwNzk4KQorKysgV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsMzMgQEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIAorCituYW1lc3BhY2UgeworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBvbmx5IGZvciBkZXB0aC9zdGVuY2lsL2RlcHRoX3N0ZW5jaWwgYXR0YWNobWVudC4KKyAgICAv
LyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoZXNlIGF0dGFjaG1lbnRzIGFyZSBhbGwgcmVuZGVyYnVm
ZmVycy4KKyAgICB1bnNpZ25lZCBsb25nIGdldEludGVybmFsRm9ybWF0KFdlYkdMT2JqZWN0KiBi
dWZmZXIpCisgICAgeworICAgICAgICBBU1NFUlQoYnVmZmVyICYmIGJ1ZmZlci0+aXNSZW5kZXJi
dWZmZXIoKSk7CisgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1
ZmZlcio+KGJ1ZmZlcikpLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgIH0KKworICAgIGJvb2wg
aXNVbmluaXRpYWxpemVkKFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKKyAgICB7CisgICAg
ICAgIGlmIChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+b2JqZWN0KCkgJiYgYXR0
YWNoZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkKKyAgICAgICAgICAgICYmICEocmVpbnRlcnBy
ZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KGF0dGFjaGVkT2JqZWN0KSktPmlzSW5pdGlhbGl6
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRJbml0aWFsaXplZChXZWJHTE9iamVjdCogYXR0YWNoZWRPYmpl
Y3QpCisgICAgeworICAgICAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRPYmplY3Qt
Pm9iamVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKQorICAgICAgICAg
ICAgKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihhdHRhY2hlZE9iamVjdCkp
LT5zZXRJbml0aWFsaXplZCgpOworICAgIH0KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
IFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
R0xGcmFtZWJ1ZmZlcihjdHgpKTsKQEAgLTY2LDcgKzkyLDYgQEAgdm9pZCBXZWJHTEZyYW1lYnVm
ZmVyOjpzZXRBdHRhY2htZW50KHVucwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKIH0KIAogdm9pZCBXZWJHTEZyYW1l
YnVmZmVyOjpyZW1vdmVBdHRhY2htZW50KFdlYkdMT2JqZWN0KiBhdHRhY2htZW50KQpAQCAtODMs
MjUgKzEwOCw5IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudCgKICAg
ICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gMDsKICAgICBlbHNlCiAgICAgICAgIHJl
dHVybjsKLSAgICBpbml0aWFsaXplUmVuZGVyYnVmZmVycygpOwogfQogCi12b2lkIFdlYkdMRnJh
bWVidWZmZXI6Om9uQmluZCgpCi17Ci0gICAgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKLX0K
LQotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpvbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKFdlYkdMT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgLy8gQ3VycmVudGx5IG9iamVjdCA9PSAwIGlzIG5vdCBjb25z
aWRlcmVkLCBidXQgdGhpcyBtaWdodCBjaGFuZ2UgaWYgdGhlCi0gICAgLy8gbGlmZXNwYW4gb2Yg
V2ViR0xPYmplY3QgY2hhbmdlcy4KLSAgICBpZiAob2JqZWN0Ci0gICAgICAgICYmIChvYmplY3Qg
PT0gbV9jb2xvckF0dGFjaG1lbnQuZ2V0KCkgfHwgb2JqZWN0ID09IG1fZGVwdGhBdHRhY2htZW50
LmdldCgpCi0gICAgICAgICAgICB8fCBvYmplY3QgPT0gbV9zdGVuY2lsQXR0YWNobWVudC5nZXQo
KSB8fCBvYmplY3QgPT0gbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKSkKLSAgICAgICAg
aW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBXZWJHTEZyYW1l
YnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZvcm1hdCgpCit1bnNpZ25lZCBsb25nIFdlYkdMRnJhbWVi
dWZmZXI6OmdldENvbG9yQnVmZmVyRm9ybWF0KCkgY29uc3QKIHsKICAgICBpZiAob2JqZWN0KCkg
JiYgbV9jb2xvckF0dGFjaG1lbnQgJiYgbV9jb2xvckF0dGFjaG1lbnQtPm9iamVjdCgpKSB7CiAg
ICAgICAgIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNSZW5kZXJidWZmZXIoKSkgewpAQCAtMTE5
LDYgKzEyOCwzNiBAQCB1bnNpZ25lZCBsb25nIFdlYkdMRnJhbWVidWZmZXI6OmdldENvbG9yCiAg
ICAgcmV0dXJuIDA7CiB9CiAKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aXNJbmNvbXBsZXRlKCkg
Y29uc3QKK3sKKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAwOworICAgIGlmIChpc0RlcHRoQXR0
YWNoZWQoKSkgeworICAgICAgICBpZiAoZ2V0SW50ZXJuYWxGb3JtYXQobV9kZXB0aEF0dGFjaG1l
bnQuZ2V0KCkpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNikKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjb3VudCsrOworICAgIH0KKyAgICBpZiAoaXNT
dGVuY2lsQXR0YWNoZWQoKSkgeworICAgICAgICBpZiAoZ2V0SW50ZXJuYWxGb3JtYXQobV9zdGVu
Y2lsQXR0YWNobWVudC5nZXQoKSkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNvdW50Kys7CisgICAgfQorICAg
IGlmIChpc0RlcHRoU3RlbmNpbEF0dGFjaGVkKCkpIHsKKyAgICAgICAgaWYgKGdldEludGVybmFs
Rm9ybWF0KG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC5nZXQoKSkgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUwpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY291
bnQrKzsKKyAgICB9CisgICAgaWYgKGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYkdMRnJhbWVidWZmZXI6Om9uQWNjZXNzKCkK
K3sKKyAgICBpZiAoaXNJbmNvbXBsZXRlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKK30KKwogdm9pZCBXZWJHTEZyYW1lYnVm
ZmVyOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIGlm
ICghaXNEZWxldGVkKCkpCkBAIC0xMjksMjQgKzE2OCwxMSBAQCB2b2lkIFdlYkdMRnJhbWVidWZm
ZXI6OmRlbGV0ZU9iamVjdEltcGwoCiAgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gMDsK
IH0KIAotYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppc1VuaW5pdGlhbGl6ZWQoV2ViR0xPYmplY3Qq
IGF0dGFjaGVkT2JqZWN0KQotewotICAgIGlmIChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9i
amVjdC0+b2JqZWN0KCkgJiYgYXR0YWNoZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkKLSAgICAg
ICAgJiYgIShyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4oYXR0YWNoZWRPYmpl
Y3QpKS0+aXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0SW5pdGlhbGl6ZWQoV2ViR0xP
YmplY3QqIGF0dGFjaGVkT2JqZWN0KQorYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXpl
UmVuZGVyYnVmZmVycygpCiB7Ci0gICAgaWYgKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2Jq
ZWN0LT5vYmplY3QoKSAmJiBhdHRhY2hlZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSkKLSAgICAg
ICAgKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihhdHRhY2hlZE9iamVjdCkp
LT5zZXRJbml0aWFsaXplZCgpOwotfQotCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxp
emVSZW5kZXJidWZmZXJzKCkKLXsKLSAgICBpZiAoIW9iamVjdCgpKQotICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKG9iamVjdCgpKTsKKyAgICBpZiAoIWlzQ29sb3JBdHRhY2hlZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBpbml0Q29sb3IgPSBmYWxzZSwgaW5pdERlcHRo
ID0gZmFsc2UsIGluaXRTdGVuY2lsID0gZmFsc2U7CiAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0g
MDsKICAgICBpZiAoaXNVbmluaXRpYWxpemVkKG1fY29sb3JBdHRhY2htZW50LmdldCgpKSkgewpA
QCAtMTY3LDEzICsxOTMsMTMgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVu
ZGVyYgogICAgICAgICBtYXNrIHw9IChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJ
VCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIH0KICAgICBp
ZiAoIWluaXRDb2xvciAmJiAhaW5pdERlcHRoICYmICFpbml0U3RlbmNpbCkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFdlIG9ubHkgY2xlYXIgdW4taW5p
dGlhbGl6ZWQgcmVuZGVyYnVmZmVycyB3aGVuIHRoZXkgYXJlIHJlYWR5IHRvIGJlCiAgICAgLy8g
cmVhZCwgaS5lLiwgd2hlbiB0aGUgZnJhbWVidWZmZXIgaXMgY29tcGxldGUuCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGczZCA9IGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICBp
ZiAoZzNkLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZsb2F0IGNvbG9yQ2xlYXJW
YWx1ZVtdID0gezAsIDAsIDAsIDB9LCBkZXB0aENsZWFyVmFsdWUgPSAwOwogICAgIGludCBzdGVu
Y2lsQ2xlYXJWYWx1ZSA9IDA7CkBAIC0yMzcsNiArMjYzLDcgQEAgdm9pZCBXZWJHTEZyYW1lYnVm
ZmVyOjppbml0aWFsaXplUmVuZGVyYgogICAgICAgICBpZiAoaW5pdFN0ZW5jaWwpCiAgICAgICAg
ICAgICBzZXRJbml0aWFsaXplZChtX3N0ZW5jaWxBdHRhY2htZW50LmdldCgpKTsKICAgICB9Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5oCShyZXZpc2lvbiA3MDc5OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNyArMzksMjEgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOwogCi0gICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJl
dHVybiAobV9kZXB0aEF0dGFjaG1lbnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVjdCgpKTsg
fQotICAgIGJvb2wgaXNTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9zdGVuY2ls
QXR0YWNobWVudCAmJiBtX3N0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KLSAgICBib29s
IGlzRGVwdGhTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9kZXB0aFN0ZW5jaWxB
dHRhY2htZW50ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9Ci0KICAg
ICB2b2lkIHNldEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZywgV2ViR0xPYmplY3QqKTsKICAgICAv
LyBJZiBhbiBvYmplY3QgaXMgYXR0YWNoZWQgdG8gdGhlIGZyYW1lYnVmZmVyLCByZW1vdmUgaXQu
CiAgICAgdm9pZCByZW1vdmVBdHRhY2htZW50KFdlYkdMT2JqZWN0Kik7CiAKLSAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCByaWdodCBhZnRlciBhIGZyYW1lYnVmZmVyIGlzIGJvdW5kLgot
ICAgIC8vIEJlY2F1c2UgcmVuZGVyYnVmZmVycyBhbmQgdGV4dHVyZXMgYXR0YWNoZWQgdG8gdGhl
IGZyYW1lYnVmZmVyIG1pZ2h0Ci0gICAgLy8gaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgZnJhbWVidWZm
ZXIgbWlnaHQgaGF2ZSBiZWNvbWUgY29tcGxldGUgd2hlbiBpdAotICAgIC8vIGlzbid0IGJvdW5k
LCBzbyB3ZSBuZWVkIHRvIGNsZWFyIHVuLWluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcnMuCi0gICAg
dm9pZCBvbkJpbmQoKTsKLQotICAgIC8vIFdoZW4gYSB0ZXh0dXJlIG9yIGEgcmVuZGVyYnVmZmVy
IGNoYW5nZXMsIHdlIG5lZWQgdG8gY2hlY2sgdGhlCi0gICAgLy8gY3VycmVudCBib3VuZCBmcmFt
ZWJ1ZmZlcjsgaWYgdGhlIG5ld2x5IGNoYW5nZWQgb2JqZWN0IGlzIGF0dGFjaGVkCi0gICAgLy8g
dG8gdGhlIGZyYW1lYnVmZmVyIGFuZCB0aGUgZnJhbWVidWZmZXIgYmVjb21lcyBjb21wbGV0ZSwg
d2UgbmVlZCB0bwotICAgIC8vIGNsZWFyIHVuLWluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcnMuCi0g
ICAgdm9pZCBvbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKFdlYkdMT2JqZWN0Kik7CisgICAgdW5zaWdu
ZWQgbG9uZyBnZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0OworCisgICAgLy8gVGhpcyBzaG91
bGQgYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUgZHJhd0FycmF5LCBkcmF3RWxlbWVudHMsIGNsZWFy
LAorICAgIC8vIHJlYWRQaXhlbHMsIGNvcHlUZXhJbWFnZTJELCBjb3B5VGV4U3ViSW1hZ2UyRCBp
ZiB0aGlzIGZyYW1lYnVmZmVyIGlzCisgICAgLy8gY3VycmVudGx5IGJvdW5kLgorICAgIC8vIFJl
dHVybiBmYWxzZSBpZiB0aGUgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZTsgb3RoZXJ3aXNlIGlu
aXRpYWxpemUKKyAgICAvLyB0aGUgYnVmZmVycyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBpbml0aWFs
aXplZC4KKyAgICBib29sIG9uQWNjZXNzKCk7CiAKLSAgICB1bnNpZ25lZCBsb25nIGdldENvbG9y
QnVmZmVyRm9ybWF0KCk7CisgICAgLy8gUmV0dXJuIGZhbHNlIGRvZXMgbm90IG1lYW4gQ09NUExF
VEUsIG1pZ2h0IHN0aWxsIGJlIElOQ09NUExFVEUuCisgICAgYm9vbCBpc0luY29tcGxldGUoKSBj
b25zdDsKIAogcHJvdGVjdGVkOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CkBAIC02OSw5ICs2MywxMyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBpc0ZyYW1lYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
Ym9vbCBpc1VuaW5pdGlhbGl6ZWQoV2ViR0xPYmplY3QqKTsKLSAgICB2b2lkIHNldEluaXRpYWxp
emVkKFdlYkdMT2JqZWN0Kik7Ci0gICAgdm9pZCBpbml0aWFsaXplUmVuZGVyYnVmZmVycygpOwor
ICAgIC8vIFJldHVybiBmYWxzZSBpZiBmcmFtZWJ1ZmZlciBpcyBpbmNvbXBsZXRlLgorICAgIGJv
b2wgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKworICAgIGJvb2wgaXNDb2xvckF0dGFjaGVk
KCkgY29uc3QgeyByZXR1cm4gKG1fY29sb3JBdHRhY2htZW50ICYmIG1fY29sb3JBdHRhY2htZW50
LT5vYmplY3QoKSk7IH0KKyAgICBib29sIGlzRGVwdGhBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJu
IChtX2RlcHRoQXR0YWNobWVudCAmJiBtX2RlcHRoQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9Cisg
ICAgYm9vbCBpc1N0ZW5jaWxBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIChtX3N0ZW5jaWxBdHRh
Y2htZW50ICYmIG1fc3RlbmNpbEF0dGFjaG1lbnQtPm9iamVjdCgpKTsgfQorICAgIGJvb2wgaXNE
ZXB0aFN0ZW5jaWxBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIChtX2RlcHRoU3RlbmNpbEF0dGFj
aG1lbnQgJiYgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KIAogICAgIFJl
ZlB0cjxXZWJHTE9iamVjdD4gbV9jb2xvckF0dGFjaG1lbnQ7CiAgICAgUmVmUHRyPFdlYkdMT2Jq
ZWN0PiBtX2RlcHRoQXR0YWNobWVudDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyYnVmZmVyLmgJKHJldmlzaW9uIDcwNzk4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSwxMiBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdm9pZCBzZXRJbnRlcm5hbEZvcm1hdCh1bnNpZ25l
ZCBsb25nIGludGVybmFsZm9ybWF0KSB7IG1faW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1h
dDsgfQorICAgIHZvaWQgc2V0SW50ZXJuYWxGb3JtYXQodW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCkKKyAgICB7CisgICAgICAgIG1faW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsK
KyAgICAgICAgbV9pbml0aWFsaXplZCA9IGZhbHNlOworICAgIH0KKwogICAgIHVuc2lnbmVkIGxv
bmcgZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsRm9ybWF0OyB9
CiAKICAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxpemVk
OyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCShyZXZpc2lvbiA3MDc5OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDggKzI3Miw2IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVidWYKICAgICB9CiAgICAgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgPSBidWZmZXI7CiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0
LCBvYmplY3RPclplcm8oYnVmZmVyKSk7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQot
ICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25CaW5kKCk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtNDU2LDYgKzQ1NCw4IEBAIHVuc2lnbmVkIGxv
bmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGUKICAgICB9CiAgICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZy0+aXNJbmNvbXBsZXRlKCkpCisgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgcmV0dXJuIG1fY29u
dGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC00NjYsNiArNDY2LDEwIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjbGVhcih1bnNpZ24KICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVy
QmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CkBAIC01MzAsMTEgKzUzNCwxMyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG1fY29udGV4dC0+Y29weVRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7CiAgICAgLy8gRklYTUU6IGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29t
cGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBleGVjdXRlZC4KICAgICB0ZXgtPnNl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RD
aGFuZ2UodGV4KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBA
IC01NTEsNiArNTU3LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3Vi
SW0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KKyAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcygpKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CkBAIC05NDksNiArOTU5LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkcmF3QXJyYXlzKHUKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCkpIHsKKyAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Ym9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkpCiAgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRl
eEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwpAQCAtMTAwNSw2ICsxMDIwLDExIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMKICAgICAgICAgfQogICAgIH0KIAor
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9u
QWNjZXNzKCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CiAg
ICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAgaWYgKCFudW1FbGVtZW50cykK
QEAgLTEwNzksMzMgKzEwOTksNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVi
dWZmZXJSCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAoYnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpIHsKLSAgICAgICAgYm9vbCBpc0NvbmZsaWN0
ZWQgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmlzRGVwdGhTdGVuY2lsQXR0YWNoZWQoKSB8fCBtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+aXNTdGVuY2lsQXR0YWNoZWQoKSkKLSAgICAgICAgICAgICAgICBpc0NvbmZs
aWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYpCi0gICAgICAgICAgICAg
ICAgaXNDb25mbGljdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPmlzRGVwdGhTdGVuY2lsQXR0YWNoZWQoKSB8fCBtX2ZyYW1l
YnVmZmVyQmluZGluZy0+aXNEZXB0aEF0dGFjaGVkKCkpCi0gICAgICAgICAgICAgICAgaXNDb25m
bGljdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChidWZmZXItPmdldEludGVybmFsRm9ybWF0
KCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4KQotICAgICAgICAgICAgICAg
IGlzQ29uZmxpY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nLT5pc0RlcHRoQXR0YWNoZWQoKSB8fCBtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+aXNTdGVuY2lsQXR0YWNoZWQoKSkKLSAgICAgICAgICAgICAgICBpc0NvbmZs
aWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCkKLSAgICAgICAgICAgICAgICBp
c0NvbmZsaWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGlzQ29uZmxpY3RlZCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQogICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIG9iamVj
dE9yWmVybyhidWZmZXIpKTsKICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVu
dChhdHRhY2htZW50LCBidWZmZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CkBAIC0xOTk4LDYgKzE5OTEsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
YWRQaXhlbHMobAogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25B
Y2Nlc3MoKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNpemUsIHRha2luZyBpbnRvIGNvbnNp
ZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCiAgICAgdW5zaWduZWQgbG9uZyBieXRlc1BlclJv
dyA9IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50ICogd2lkdGg7CiAgICAg
dW5zaWduZWQgbG9uZyBwYWRkaW5nID0gMDsKQEAgLTIwNTEsMTEgKzIwNDgsOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyCiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9JTkRFWDg6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTDoKICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBpZiAobV9yZW5kZXJidWZm
ZXJCaW5kaW5nKSB7CisgICAgICAgIGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpCiAgICAgICAg
ICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9y
bWF0KTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgICAg
ICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BdHRhY2hlZE9iamVjdENoYW5nZShtX3JlbmRl
cmJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICB9CiAgICAgICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yMTQw
LDggKzIxMzQsNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhCiAg
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzKTsKICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJC
aW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BdHRhY2hlZE9iamVjdENo
YW5nZSh0ZXgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDcwODIxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTAtMjggIFpoZW55YW8gTW8gIDx6bW9AZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQZXJmb3JtIGZyYW1lYnVmZmVyIGF0dGFjaG1lbnQgY2hlY2tpbmcgdXBvbiBkcmF3IGNhbGwg
cmF0aGVyIHRoYW4gYXR0YWNobWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDYzMTgKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2ZyYW1l
YnVmZmVyLW9iamVjdC1hdHRhY2htZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9mcmFtZWJ1ZmZlci1vYmplY3QtYXR0YWNobWVudC5odG1sOgorCiAyMDEwLTEw
LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFRvbnkgQ2hhbmcuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9mcmFt
ZWJ1ZmZlci1vYmplY3QtYXR0YWNobWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItb2JqZWN0LWF0dGFjaG1lbnQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MDc5OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2ZyYW1lYnVmZmVyLW9iamVjdC1hdHRhY2htZW50LWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNCw2ICs0LDggQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQQogCiBDcmVhdGUgcmVuZGVyYnVmZmVycwogUEFTUyBnbCA9IGNyZWF0ZTNEQ29udGV4
dCgpIGlzIG5vbi1udWxsLgorUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpIGlzIG5vbi1udWxsLgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBQQVNT
IGRlcHRoQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCiBQQVNT
IGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1Mgc3RlbmNpbEJ1ZmZlciA9IGdsLmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgpAQCAtMTUsNjQgKzE3LDc2IEBAIFBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24KIFBBU1MgZ2wuZ2V0RXJyb3IoKSBp
cyBnbC5OT19FUlJPUgogQXR0YWNoIGRlcHRoIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAogUEFT
UyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
Tk9fRVJST1IKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
aXMgZ2wuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCiBBdHRhY2ggZGVwdGggdXNpbmcgREVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UCiBQQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9PUEVSQVRJT04KK1BBU1Mg
Z2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04KIEF0dGFjaCBz
dGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAogUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFt
ZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgogUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9S
CiBBdHRhY2ggc3RlbmNpbCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCiBQQVNTIGZibyA9IGdsLmNy
ZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
SU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFT
UyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJV
RkZFUl9VTlNVUFBPUlRFRAorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04KIEF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVAogUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdsLmdldEVycm9y
KCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQKK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgorUEFTUyBnbC5nZXRFcnJvcigp
IGlzIGdsLklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCiBBdHRhY2ggZGVwdGhTdGVuY2ls
IHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAogUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFt
ZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgogUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9S
CiBBdHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKIFBBU1MgZmJvID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2wuZ2V0RXJyb3IoKSBp
cyBnbC5JTlZBTElEX09QRVJBVElPTgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9S
CitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVECitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04KK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTgogQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FU
VEFDSE1FTlQKIFBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4K
LVBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX09QRVJBVElPTgorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZ2wuSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04KK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgogQXR0YWNoIGRlcHRoLCB0
aGVuIHN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKIFBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSBpcyBub24tbnVsbC4KIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgot
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCi1QQVNTIGdsLmdldEVy
cm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgor
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFN
RUJVRkZFUl9VTlNVUFBPUlRFRAogQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcg
Y29uZmxpY3QKIFBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4K
IFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgotUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLklOVkFMSURfT1BFUkFUSU9OCi1QQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IK
IFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAog
QXR0YWNoIGRlcHRoLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAogUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgogUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCi1QQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9PUEVS
QVRJT04KLVBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECiBBdHRhY2ggZGVwdGhTdGVu
Y2lsLCB0aGVuIGRlcHRoLCBjYXVzaW5nIGNvbmZsaWN0CiBQQVNTIGZibyA9IGdsLmNyZWF0ZUZy
YW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCiBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKLVBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX09QRVJBVElPTgotUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wu
RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQKIEF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoU3RlbmNp
bCwgY2F1c2luZyBjb25mbGljdAogUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgogUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCi1QQVNTIGdsLmdl
dEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9PUEVSQVRJT04KLVBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBn
bC5OT19FUlJPUgogUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX1VO
U1VQUE9SVEVECiBBdHRhY2ggZGVwdGhTdGVuY2lsLCB0aGVuIHN0ZW5jaWwsIGNhdXNpbmcgY29u
ZmxpY3QKIFBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KIFBB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgotUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
LklOVkFMSURfT1BFUkFUSU9OCi1QQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAogQXR0
YWNoIGNvbG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQkE0CiBQQVNT
IGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCiBQQVNT
IGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2ZyYW1lYnVmZmVyLW9iamVjdC1hdHRhY2htZW50Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItb2JqZWN0LWF0dGFj
aG1lbnQuaHRtbAkocmV2aXNpb24gNzA3OTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9mcmFtZWJ1ZmZlci1vYmplY3QtYXR0YWNobWVudC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0yMywyNSArMjMsMjkgQEAgZnVuY3Rpb24gdGVzdEF0dGFjaG1lbnQoYXR0YWNobWVudCwgYnVm
ZgogewogICAgIHNob3VsZEJlTm9uTnVsbCgiZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSIp
OwogICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBnbC5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVO
VDAsIGdsLlJFTkRFUkJVRkZFUiwgY29sb3JCdWZmZXIpOwogICAgIGdsLmZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBnbC5SRU5ERVJCVUZGRVIsIGJ1
ZmZlcik7Ci0gICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCBpc0NvbmZsaWN0ZWQgPyAiZ2wu
SU5WQUxJRF9PUEVSQVRJT04iIDogImdsLk5PX0VSUk9SIik7CisgICAgc2hvdWxkQmUoImdsLmdl
dEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAgICBpZiAoaXNDb25mbGljdGVkKSB7CisgICAg
ICAgIHNob3VsZEJlKCJnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSIs
ICJnbC5GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCIpOworICAgICAgICBnbC5jbGVhcihnbC5DT0xP
Ul9CVUZGRVJfQklUKTsKKyAgICAgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iKTsKKyAgICAgICAgZ2wucmVhZFBpeGVscygwLCAw
LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBuZXcgVWludDhBcnJh
eSh3aWR0aCAqIGhlaWdodCAqIDQpKTsKKyAgICAgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCki
LCAiZ2wuSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iKTsKKyAgICB9CiB9CiAKIGZ1bmN0
aW9uIHRlc3RBdHRhY2htZW50cyhhdHRhY2htZW50MCwgYnVmZmVyMCwgYXR0YWNobWVudDEsIGJ1
ZmZlcjEsIGlzQ29uZmxpY3RlZCkKIHsKICAgICBzaG91bGRCZU5vbk51bGwoImZibyA9IGdsLmNy
ZWF0ZUZyYW1lYnVmZmVyKCkiKTsKICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZG
RVIsIGZibyk7CisgICAgZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIs
IGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5SRU5ERVJCVUZGRVIsIGNvbG9yQnVmZmVyKTsKICAg
ICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudDAs
IGdsLlJFTkRFUkJVRkZFUiwgYnVmZmVyMCk7CiAgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCki
LCAiZ2wuTk9fRVJST1IiKTsKICAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFN
RUJVRkZFUiwgYXR0YWNobWVudDEsIGdsLlJFTkRFUkJVRkZFUiwgYnVmZmVyMSk7Ci0gICAgc2hv
dWxkQmUoImdsLmdldEVycm9yKCkiLCBpc0NvbmZsaWN0ZWQgPyAiZ2wuSU5WQUxJRF9PUEVSQVRJ
T04iIDogImdsLk5PX0VSUk9SIik7Ci0gICAgaWYgKGlzQ29uZmxpY3RlZCkgewotICAgICAgICAv
LyBEZXRhY2ggYnVmZmVyMCBmaXJzdCB1c2luZyBhIG51bGwgb2JqZWN0LCB0aGVuIGF0dGFjaGlu
ZyBidWZmZXIxIHNob3VsZCBzdWNjZWVkLgotICAgICAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudDAsIGdsLlJFTkRFUkJVRkZFUiwgbnVsbCk7
Ci0gICAgICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7Ci0gICAg
ICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50
MSwgZ2wuUkVOREVSQlVGRkVSLCBidWZmZXIxKTsKLSAgICAgICAgc2hvdWxkQmUoImdsLmdldEVy
cm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKLSAgICB9CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9y
KCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAgICBpZiAoaXNDb25mbGljdGVkKQorICAgICAgICBzaG91
bGRCZSgiZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikiLCAiZ2wuRlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQiKTsKIH0KIAogZnVuY3Rpb24gdGVzdENvbG9yUmVuZGVyYnVm
ZmVyKGludGVybmFsZm9ybWF0KQpAQCAtNTcsNiArNjEsMTAgQEAgZGVzY3JpcHRpb24oIlRlc3Qg
ZnJhbWVidWZmZXIgb2JqZWN0IGF0dAogCiBkZWJ1ZygiQ3JlYXRlIHJlbmRlcmJ1ZmZlcnMiKTsK
IHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBjcmVhdGUzRENvbnRleHQoKSIpOworc2hvdWxkQmVOb25O
dWxsKCJjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIik7CitnbC5iaW5kUmVu
ZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgY29sb3JCdWZmZXIpOworZ2wucmVuZGVyYnVmZmVy
U3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLlJHQkE0LCB3aWR0aCwgaGVpZ2h0KTsKK3Nob3Vs
ZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7CiBzaG91bGRCZU5vbk51bGwoImRl
cHRoQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkiKTsKIGdsLmJpbmRSZW5kZXJidWZm
ZXIoZ2wuUkVOREVSQlVGRkVSLCBkZXB0aEJ1ZmZlcik7CiBnbC5yZW5kZXJidWZmZXJTdG9yYWdl
KGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOwo=
</data>
<flag name="review"
          id="63062"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="63063"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
      

    </bug>

</bugzilla>