<?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>101426</bug_id>
          
          <creation_ts>2012-11-06 21:22:37 -0800</creation_ts>
          <short_desc>Coordinated Graphics: Decode an image directly into a GraphicsSurface.</short_desc>
          <delta_ts>2013-03-12 01:01:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kalyan.kondapally</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>noam</cc>
    
    <cc>sergio</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>760371</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-06 21:22:37 -0800</bug_when>
    <thetext>We need to decode an image directly into a GraphicsSurface when the image is directly composited image that RenderLayerBacking give CoordinatedGraphicsLayer via setContentsToImage.
If we make it, we can save temporary memory and remove a copy overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765797</commentid>
    <comment_count>1</comment_count>
      <attachid>173925</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-13 10:48:13 -0800</bug_when>
    <thetext>Created attachment 173925
Partially working patch

This shows how it can work, but I&apos;m not sure yet if it&apos;s the way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853162</commentid>
    <comment_count>2</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-03-12 01:01:18 -0700</bug_when>
    <thetext>I think you show the direction where we should go.

I think it would be better if we can change only ImageDecoder without changing BitmapImage and ImageSource.
I think we can do it as following chromium&apos;s approach. 
for instance, define as follow in NativeImagePtr.h

#elif PLATFORM(QT)
#if USE(GRAPHICS_SURFACE)
typedef GraphicsSurface* NativeImagePtr;
#else
typedef QPixmap* NativeImagePtr;
#endif

and every image decoders access NativeImagePtr&apos;s pixel.

btw, I think the most tricky blocker is caching mechanism of MemoryCache.
MemoryCache needs to remove decoded data of CachedImage. But if MemoryCache removes directed-composited image, UI Process encounters null pointer exception. we need to make the plan for this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173925</attachid>
            <date>2012-11-13 10:48:13 -0800</date>
            <delta_ts>2012-11-13 10:48:13 -0800</delta_ts>
            <desc>Partially working patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>31473</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ1YjIzZTIzMTQzMThjOTY3YzkzNWEwMTU3ZTA0OTQ4MGQ0MGQ0NWYKQXV0aG9yOiBO
bydhbSBSb3NlbnRoYWwgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KRGF0ZTogICBUdWUgTm92
IDEzIDEwOjEzOjA2IDIwMTIgLTA4MDAKCiAgICBEZWNvZGUgaW50byBzdXJmYWNlCgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IGRl
ZjA3MmUuLmYzYTczYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5jcHAKQEAgLTEzNyw2ICsxMzcsOSBAQCB2b2lkIEJpdG1hcEltYWdlOjpj
YWNoZUZyYW1lKHNpemVfdCBpbmRleCkKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMp
OwogCiAgICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUF0
SW5kZXgoaW5kZXgpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIG1fZnJhbWVzW2lu
ZGV4XS5tX2dyYXBoaWNzU3VyZmFjZSA9IG1fc291cmNlLmdyYXBoaWNzU3VyZmFjZUF0SW5kZXgo
aW5kZXgpOworI2VuZGlmCiAgICAgaWYgKG51bUZyYW1lcyA9PSAxICYmIG1fZnJhbWVzW2luZGV4
XS5tX2ZyYW1lKQogICAgICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIApAQCAtMzA1LDYgKzMw
OCwxNSBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBp
bmRleCkKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWU7CiB9CiAKKyNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBCaXRtYXBJbWFn
ZTo6c3VyZmFjZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghZW5zdXJlRnJhbWVJ
c0NhY2hlZChpbmRleCkpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4oKTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZ3JhcGhpY3NTdXJmYWNlOworfQor
I2VuZGlmCisKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90
IGluZGV4KQogewogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCkBAIC0zMjQs
NiArMzM2LDEzIEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpCiAgICAgcmV0dXJuIGZyYW1lQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CiB9
CiAKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNl
PiBCaXRtYXBJbWFnZTo6Z3JhcGhpY3NTdXJmYWNlRm9yQ3VycmVudEZyYW1lKCkKK3sKKyAgICBy
ZXR1cm4gc3VyZmFjZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworfQorI2VuZGlmCisKIGJvb2wg
Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBp
ZiAobV9mcmFtZXMuc2l6ZSgpIDw9IGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggNzA0M2Q5Yi4uYjQwZDYyNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC00Nyw2ICs0
NywxMCBAQCB0eXBlZGVmIHN0cnVjdCBIQklUTUFQX18gKkhCSVRNQVA7CiBjbGFzcyB3eEJpdG1h
cDsKICNlbmRpZgogCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisjaW5jbHVkZSAiR3JhcGhp
Y3NTdXJmYWNlLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBG
cmFtZURhdGE7CiB9CkBAIC05MSw2ICs5NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBvcnRN
ZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKICAgICBOYXRpdmVJbWFnZVB0
ciBtX2ZyYW1lOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIFJlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+IG1fZ3JhcGhpY3NTdXJmYWNlOworI2VuZGlmCisKICAgICBJbWFnZU9yaWVudGF0
aW9uIG1fb3JpZW50YXRpb247CiAgICAgZmxvYXQgbV9kdXJhdGlvbjsKICAgICBib29sIG1faGF2
ZU1ldGFkYXRhIDogMTsKQEAgLTE3OCw2ICsxODYsMTEgQEAgcHVibGljOgogI2VuZGlmCiAKICAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhp
Y3NTdXJmYWNlPiBncmFwaGljc1N1cmZhY2VGb3JDdXJyZW50RnJhbWUoKTsKKyNlbmRpZgorCiAg
ICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CiAKICAgICBJbWFnZU9yaWVu
dGF0aW9uIGN1cnJlbnRGcmFtZU9yaWVudGF0aW9uKCk7CkBAIC0yMjAsNiArMjMzLDExIEBAIHBy
b3RlY3RlZDoKICAgICBzaXplX3QgY3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50RnJhbWU7IH0KICAgICBzaXplX3QgZnJhbWVDb3VudCgpOwogICAgIE5hdGl2ZUltYWdlUHRy
IGZyYW1lQXRJbmRleChzaXplX3QpOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAg
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2VBdEluZGV4KHNpemVfdCBpbmRleCk7
CisjZW5kaWYKKwogICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpOwogICAg
IGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUhhc0Fs
cGhhQXRJbmRleChzaXplX3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IDU2ODU3YTQuLmNkMzQxMGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTE2MCw2ICsx
NjAsMjUgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChz
aXplX3QgaW5kZXgpCiAgICAgcmV0dXJuIGJ1ZmZlci0+YXNOZXdOYXRpdmVJbWFnZSgpOwogfQog
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCitQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4g
SW1hZ2VTb3VyY2U6OmdyYXBoaWNzU3VyZmFjZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAg
IGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEltYWdlRnJhbWUqIGJ1
ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1
ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8gWmVyby1oZWlnaHQgaW1hZ2VzIGNhbiBjYXVzZSBwcm9i
bGVtcyBmb3Igc29tZSBwb3J0cy4gIElmIHdlIGhhdmUgYW4KKyAgICAvLyBlbXB0eSBpbWFnZSBk
aW1lbnNpb24sIGp1c3QgYmFpbC4KKyAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gYnVmZmVyLT5ncmFwaGljc1N1cmZhY2UoKTsKK30KKyNl
bmRpZgorCiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQogewogICAgIGlmICghbV9kZWNvZGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggNjZhOGEwYS4uNjI3YjQ0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0zOSw2ICsz
OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBDR0ltYWdlU291cmNlKiBDR0ltYWdlU291cmNlUmVmOwog
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRhdGEqIENGRGF0YVJlZjsKICNlbmRpZgogCisjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZU9yaWVudGF0aW9uOwpAQCAt
MTUxLDYgKzE1NSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkg
YWJvdmUuCiAgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCk7CiAK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4gZ3JhcGhpY3NTdXJmYWNlQXRJbmRleChzaXplX3QpOworI2VuZGlmCisKICAgICBmbG9hdCBm
cmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoc2l6ZV90KTsgLy8gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGFjdHVhbGx5IHVzZWQgYW55
IGFscGhhLgogICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpOyAvLyBXaGV0
aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgY29tcGxldGVseSBkZWNvZGVkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwCmlu
ZGV4IGE3ZDlmNzUuLmNiZGI5ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5jcHAKQEAgLTI3Miw3ICsyNzIsNyBAQCBO
YXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKICAgICBl
bHNlCiAgICAgICAgIGZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOwogCi0gICAgUUltYWdl
IGltZyhyZWludGVycHJldF9jYXN0PHVjaGFyKj4obV9ieXRlcyksIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCksIHNpemVvZihQaXhlbERhdGEpICogbV9zaXplLndpZHRoKCksIGZvcm1h
dCk7CisgICAgUUltYWdlIGltZyhyZWludGVycHJldF9jYXN0PHVjaGFyKj4obV9ieXRlcyksIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KCksIGZvcm1hdCk7CiAK
ICAgICByZXR1cm4gbmV3IFFQaXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdlKGltZykpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhp
Y3NTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L0dyYXBoaWNzU3VyZmFjZS5jcHAKaW5kZXggZDk2NmRjNS4uY2JiZmQ2OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFw
aGljc1N1cmZhY2UuY3BwCkBAIC0zNSw2ICszNSwyNiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzU3Vy
ZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhp
YwogICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZShzaXplLCBmbGFncywgc2hhcmVDb250ZXh0KTsK
IH0KIAorUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRl
SW1hZ2VCYWNraW5nKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIHBsYXRmb3Jt
Q3JlYXRlSW1hZ2VCYWNraW5nKHNpemUpOworfQorCisKK3ZvaWQqIEdyYXBoaWNzU3VyZmFjZTo6
bG9jayh1bnNpZ25lZCogc3RyaWRlKQoreworICAgIGludCBzdHJpZGVJbnQ7CisgICAgY2hhciog
ZGF0YSA9IHBsYXRmb3JtTG9jayhJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHNpemUoKSksICZz
dHJpZGVJbnQsIDApOworICAgIGlmIChzdHJpZGUpCisgICAgICAgICpzdHJpZGUgPSBzdHJpZGVJ
bnQ7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjp1bmxvY2so
KQoreworICAgIHBsYXRmb3JtVW5sb2NrKCk7Cit9CisKIEdyYXBoaWNzU3VyZmFjZVRva2VuIEdy
YXBoaWNzU3VyZmFjZTo6ZXhwb3J0VG9rZW4oKQogewogICAgIHJldHVybiBwbGF0Zm9ybUV4cG9y
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvR3JhcGhpY3NTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaAppbmRleCA1NjAyY2Y1Li5lNjVkYzI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9H
cmFwaGljc1N1cmZhY2UuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgRmxhZ3Ms
IGNvbnN0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qgc2hhcmVDb250ZXh0ID0gMCk7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYs
IEZsYWdzLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlSW1hZ2VCYWNraW5nKGNvbnN0IEludFNpemUmKTsK
ICAgICB2b2lkIGNvcHlUb0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZz
ZXQpOwogICAgIHZvaWQgY29weUZyb21UZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QpOwogICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKTsKQEAgLTg4LDEw
ICs4OSwxMyBAQCBwdWJsaWM6CiAgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2lu
UGFpbnQoY29uc3QgSW50UmVjdCYsIExvY2tPcHRpb25zKTsKICAgICBQYXNzUmVmUHRyPEltYWdl
PiBjcmVhdGVSZWFkT25seUltYWdlKGNvbnN0IEludFJlY3QmKTsKICAgICB+R3JhcGhpY3NTdXJm
YWNlKCk7CisgICAgdm9pZCogbG9jayh1bnNpZ25lZCogc3RyaWRlKTsKKyAgICB2b2lkIHVubG9j
aygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNl
PiBwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiwgRmxhZ3MsIGNvbnN0IFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4g
cGxhdGZvcm1JbXBvcnQoY29uc3QgSW50U2l6ZSYsIEZsYWdzLCBjb25zdCBHcmFwaGljc1N1cmZh
Y2VUb2tlbiYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gcGxhdGZv
cm1DcmVhdGVJbWFnZUJhY2tpbmcoY29uc3QgSW50U2l6ZSYpOwogICAgIEdyYXBoaWNzU3VyZmFj
ZVRva2VuIHBsYXRmb3JtRXhwb3J0KCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3Jh
cGhpY3NTdXJmYWNlVG9rZW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL0dyYXBoaWNzU3VyZmFjZVRva2VuLmgKaW5kZXggYzk3ZjM2OC4uMzQyMGViYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhp
Y3NTdXJmYWNlVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9HcmFwaGljc1N1cmZhY2VUb2tlbi5oCkBAIC03MSw3ICs3MSw3IEBAIHN0cnVjdCBH
cmFwaGljc1N1cmZhY2VUb2tlbiB7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIGZyb250QnVmZmVySGFuZGxlICYmIGJhY2tCdWZmZXJIYW5kbGU7Cisg
ICAgICAgIHJldHVybiBmcm9udEJ1ZmZlckhhbmRsZTsKICAgICB9CiAKICAgICBCdWZmZXJIYW5k
bGUgYmFja0J1ZmZlckhhbmRsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5j
cHAKaW5kZXggODU5N2ViNC4uMTEwYmI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3Vy
ZmFjZU1hYy5jcHAKQEAgLTgxLDI3ICs4MSwzMSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kcmF3
RmJvKDApCiAgICAgewogICAgICAgICBtX2Zyb250QnVmZmVyID0gSU9TdXJmYWNlTG9va3VwRnJv
bU1hY2hQb3J0KG1fdG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUpOwotICAgICAgICBtX2JhY2tCdWZm
ZXIgPSBJT1N1cmZhY2VMb29rdXBGcm9tTWFjaFBvcnQobV90b2tlbi5iYWNrQnVmZmVySGFuZGxl
KTsKKyAgICAgICAgaWYgKG1fdG9rZW4uYmFja0J1ZmZlckhhbmRsZSkKKyAgICAgICAgICAgIG1f
YmFja0J1ZmZlciA9IElPU3VyZmFjZUxvb2t1cEZyb21NYWNoUG9ydChtX3Rva2VuLmJhY2tCdWZm
ZXJIYW5kbGUpOwogICAgIH0KIAogICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoY29uc3QgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCBzaGFyZUNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUs
IEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCiAgICAgICAgIDogbV9jb250ZXh0KDApCisg
ICAgICAgICwgbV9iYWNrQnVmZmVyKDApCiAgICAgICAgICwgbV9mcm9udEJ1ZmZlclRleHR1cmUo
MCkKICAgICAgICAgLCBtX2JhY2tCdWZmZXJUZXh0dXJlKDApCiAgICAgICAgICwgbV9yZWFkRmJv
KDApCiAgICAgICAgICwgbV9kcmF3RmJvKDApCiAgICAgewogI2lmIFBMQVRGT1JNKFFUKQotICAg
ICAgICBRUGxhdGZvcm1OYXRpdmVJbnRlcmZhY2UqIG5hdGl2ZUludGVyZmFjZSA9IFFHdWlBcHBs
aWNhdGlvbjo6cGxhdGZvcm1OYXRpdmVJbnRlcmZhY2UoKTsKLSAgICAgICAgQ0dMQ29udGV4dE9i
aiBzaGFyZUNvbnRleHRPYmplY3QgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihuYXRpdmVJ
bnRlcmZhY2UtPm5hdGl2ZVJlc291cmNlRm9yQ29udGV4dChRQnl0ZUFycmF5TGl0ZXJhbCgiY2ds
Q29udGV4dE9iaiIpLCBzaGFyZUNvbnRleHQpKTsKLSAgICAgICAgaWYgKCFzaGFyZUNvbnRleHRP
YmplY3QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ0dMUGl4ZWxGb3JtYXRPYmog
cGl4ZWxGb3JtYXRPYmplY3QgPSBDR0xHZXRQaXhlbEZvcm1hdChzaGFyZUNvbnRleHRPYmplY3Qp
OwotICAgICAgICBpZiAoa0NHTE5vRXJyb3IgIT0gQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1h
dE9iamVjdCwgc2hhcmVDb250ZXh0T2JqZWN0LCAmbV9jb250ZXh0KSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBDR0xSZXRhaW5Db250ZXh0KG1fY29udGV4dCk7CisgICAgICAgIGlm
IChzaGFyZUNvbnRleHQpIHsKKyAgICAgICAgICAgIFFQbGF0Zm9ybU5hdGl2ZUludGVyZmFjZSog
bmF0aXZlSW50ZXJmYWNlID0gUUd1aUFwcGxpY2F0aW9uOjpwbGF0Zm9ybU5hdGl2ZUludGVyZmFj
ZSgpOworICAgICAgICAgICAgQ0dMQ29udGV4dE9iaiBzaGFyZUNvbnRleHRPYmplY3QgPSBzdGF0
aWNfY2FzdDxDR0xDb250ZXh0T2JqPihuYXRpdmVJbnRlcmZhY2UtPm5hdGl2ZVJlc291cmNlRm9y
Q29udGV4dChRQnl0ZUFycmF5TGl0ZXJhbCgiY2dsQ29udGV4dE9iaiIpLCBzaGFyZUNvbnRleHQp
KTsKKyAgICAgICAgICAgIGlmICghc2hhcmVDb250ZXh0T2JqZWN0KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmpl
Y3QgPSBDR0xHZXRQaXhlbEZvcm1hdChzaGFyZUNvbnRleHRPYmplY3QpOworICAgICAgICAgICAg
aWYgKGtDR0xOb0Vycm9yICE9IENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXRPYmplY3QsIHNo
YXJlQ29udGV4dE9iamVjdCwgJm1fY29udGV4dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBDR0xSZXRhaW5Db250ZXh0KG1fY29udGV4dCk7CisgICAgICAgIH0KICNl
bmRpZgogCiAgICAgICAgIHVuc2lnbmVkIHBpeGVsRm9ybWF0ID0gJ0JHUkEnOwpAQCAtMTM3LDEy
ICsxNDEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7CiAK
ICAgICAgICAgbV9mcm9udEJ1ZmZlciA9IElPU3VyZmFjZUNyZWF0ZShkaWN0KTsKLSAgICAgICAg
bV9iYWNrQnVmZmVyID0gSU9TdXJmYWNlQ3JlYXRlKGRpY3QpOworICAgICAgICBpZiAoIWZsYWdz
ICYgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQorICAgICAgICAgICAg
bV9iYWNrQnVmZmVyID0gSU9TdXJmYWNlQ3JlYXRlKGRpY3QpOwogCiAgICAgICAgIGlmICghKGZs
YWdzICYgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmcpKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIG1fdG9rZW4gPSBHcmFwaGljc1N1cmZhY2VUb2tlbihJT1N1cmZhY2VD
cmVhdGVNYWNoUG9ydChtX2Zyb250QnVmZmVyKSwgSU9TdXJmYWNlQ3JlYXRlTWFjaFBvcnQobV9i
YWNrQnVmZmVyKSk7CisgICAgICAgIG1fdG9rZW4gPSBHcmFwaGljc1N1cmZhY2VUb2tlbihJT1N1
cmZhY2VDcmVhdGVNYWNoUG9ydChtX2Zyb250QnVmZmVyKSwgbV9iYWNrQnVmZmVyID8gSU9TdXJm
YWNlQ3JlYXRlTWFjaFBvcnQobV9iYWNrQnVmZmVyKSA6IDApOwogICAgIH0KIAogICAgIH5HcmFw
aGljc1N1cmZhY2VQcml2YXRlKCkKQEAgLTE3Nyw2ICsxODIsOSBAQCBwdWJsaWM6CiAKICAgICB1
aW50MzJfdCBzd2FwQnVmZmVycygpCiAgICAgeworICAgICAgICBpZiAoIW1fYmFja0J1ZmZlcikK
KyAgICAgICAgICAgIHJldHVybiAwOworCiAgICAgICAgIHN0ZDo6c3dhcChtX2Zyb250QnVmZmVy
LCBtX2JhY2tCdWZmZXIpOwogICAgICAgICBzdGQ6OnN3YXAobV9mcm9udEJ1ZmZlclRleHR1cmUs
IG1fYmFja0J1ZmZlclRleHR1cmUpOwogCkBAIC0zNTUsMTYgKzM2MywxMCBAQCBQYXNzUmVmUHRy
PEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25zdCBJ
bnRTaXplJiBzaXplLAogCiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncywgY29u
c3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQogewotICAgIC8vIFdlIGN1cnJlbnRseSBk
aXNhYmxlIHN1cHBvcnQgZm9yIENvcHlUb1RleHR1cmUgb24gTWFjLCBiZWNhdXNlIHRoaXMgaXMg
dXNlZCBmb3Igc2luZ2xlIGJ1ZmZlcmVkIFRpbGVzLgotICAgIC8vIFRoZSBzaW5nbGUgYnVmZmVy
ZWQgbmF0dXJlIG9mIHRoaXMgcmVxdWlyZXMgYSBjYWxsIHRvIGdsRmx1c2gsIGFzIGRlc2NyaWJl
ZCBpbiBwbGF0Zm9ybUNvcHlUb1RleHR1cmUuCi0gICAgLy8gVGhpcyBjYWxsIGJsb2NrcyB0aGUg
R1BVIGZvciBhYm91dCA0MG1zLCB3aGljaCBtYWtlcyBzbW9vdGggYW5pbWF0aW9ucyBpbXBvc3Np
YmxlLgotICAgIGlmIChmbGFncyAmIFN1cHBvcnRzQ29weVRvVGV4dHVyZSB8fCBmbGFncyAmIFN1
cHBvcnRzU2luZ2xlQnVmZmVyZWQpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4oKTsKLQogICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9w
dFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CiAgICAgc3VyZmFjZS0+bV9w
cml2YXRlID0gbmV3IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUodG9rZW4pOwogCi0gICAgaWYgKCFz
dXJmYWNlLT5tX3ByaXZhdGUtPmZyb250QnVmZmVyKCkgfHwgIXN1cmZhY2UtPm1fcHJpdmF0ZS0+
YmFja0J1ZmZlcigpKQorICAgIGlmICghc3VyZmFjZS0+bV9wcml2YXRlLT5mcm9udEJ1ZmZlcigp
KQogICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CiAKICAgICBy
ZXR1cm4gc3VyZmFjZTsKQEAgLTM4MSwxMCArMzgzLDIxIEBAIHN0YXRpYyBpbnQgaW9TdXJmYWNl
TG9ja09wdGlvbnMoaW50IGxvY2tPcHRpb25zKQogICAgIHJldHVybiBvcHRpb25zOwogfQogCitQ
YXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0
ZUltYWdlQmFja2luZyhjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEZsYWdzIGZsYWdzID0g
U3VwcG9ydHNBbHBoYSB8IFN1cHBvcnRzU29mdHdhcmVXcml0ZSB8IFN1cHBvcnRzU29mdHdhcmVS
ZWFkIHwgU3VwcG9ydHNUZXh0dXJlVGFyZ2V0IHwgU3VwcG9ydHNTaGFyaW5nIHwgU3VwcG9ydHNT
aW5nbGVCdWZmZXJlZDsKKyAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRv
cHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOworICAgIHN1cmZhY2UtPm1f
cHJpdmF0ZSA9IG5ldyBHcmFwaGljc1N1cmZhY2VQcml2YXRlKDAsIHNpemUsIGZsYWdzKTsKKwor
ICAgIGlmICghc3VyZmFjZS0+bV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpKQorICAgICAgICByZXR1
cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKKyAgICByZXR1cm4gc3VyZmFjZTsK
K30KKworCiBjaGFyKiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtTG9jayhjb25zdCBJbnRSZWN0
JiByZWN0LCBpbnQqIG91dHB1dFN0cmlkZSwgTG9ja09wdGlvbnMgbG9ja09wdGlvbnMpCiB7Ci0g
ICAgLy8gTG9ja2luZyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3Igc2luZ2xlIGJ1ZmZlcmVkIHVzZS4K
LSAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugb25seSBoYXZlIGEgZnJvbnQgYnVmZmVyLCBzbyB3ZSBv
bmx5IGxvY2sgdGhpcyBvbmUuCiAgICAgbV9sb2NrT3B0aW9ucyA9IGxvY2tPcHRpb25zOwogICAg
IElPUmV0dXJuIHN0YXR1cyA9IElPU3VyZmFjZUxvY2sobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigp
LCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSwgMCk7CiAgICAgaWYgKHN0YXR1
cyA9PSBrSU9SZXR1cm5DYW5ub3RMb2NrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNl
R0xYLmNwcAppbmRleCBiOTZmMDhkLi5iZmQ4ZmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNz
U3VyZmFjZUdMWC5jcHAKQEAgLTQyNSw2ICs0MjUsMTIgQEAgdWludDMyX3QgR3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybVN3YXBCdWZmZXJzKCkKICAgICByZXR1cm4gMDsKIH0KIAorUGFzc1JlZlB0
cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGVJbWFnZUJh
Y2tpbmcoY29uc3QgSW50U2l6ZSYpCit7CisgICAgLy8gRklYTUU6IE1heWJlIGFsbG93IFhQaXht
YXAgaW1hZ2UgYmFja2luZy4KKyAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+
KCk7Cit9CisKIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBs
YXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCBjb25zdCBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHNoYXJlQ29udGV4dCkKIHsKICAgICAvLyBYMTEgZG9lcyBu
b3Qgc3VwcG9ydCBDb3B5VG9UZXh0dXJlLCBzbyB3ZSBkbyBub3QgY3JlYXRlIGEgR3JhcGhpY3NT
dXJmYWNlIGlmIHRoaXMgaXMgcmVxdWVzdGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvd2luL0dyYXBoaWNzU3VyZmFjZVdpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy93aW4vR3JhcGhpY3NTdXJm
YWNlV2luLmNwcAppbmRleCAxOWJlYmQyLi5lNGRjMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy93aW4vR3JhcGhpY3NTdXJmYWNlV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy93aW4vR3Jh
cGhpY3NTdXJmYWNlV2luLmNwcApAQCAtNDU2LDYgKzQ1NiwxMiBAQCBQYXNzUmVmUHRyPEdyYXBo
aWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXpl
JiBzaXplLAogICAgIHJldHVybiBzdXJmYWNlOwogfQogCitQYXNzUmVmUHRyPEdyYXBoaWNzU3Vy
ZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZUltYWdlQmFja2luZyhjb25zdCBJ
bnRTaXplJikKK3sKKyAgICAvLyBGSVhNRTogTWF5YmUgYWxsb3cgSEJJVE1BUCBpbWFnZSBiYWNr
aW5nLgorICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKK30KKwogUGFz
c1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBvcnQo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRv
a2VuJiB0b2tlbikKIHsKICAgICAvLyBTaW5nbGUgYnVmZmVyZWQgR3JhcGhpY3NTdXJmYWNlIGlz
IGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmUuY3BwCmluZGV4IGZmOTZmMTYuLmFhODNhOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZS5jcHAKQEAgLTQ2LDcgKzQ2LDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
U3VyZmFjZUJhY2tpbmdTdG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKGNvbnN0IEdyYXBoaWNzU3Vy
ZmFjZVQKICAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gZ3Jh
cGhpY3NTdXJmYWNlKCk7CiAgICAgaWYgKHN1cmZhY2UgJiYgc3VyZmFjZS0+ZnJvbnRCdWZmZXIo
KSAhPSBmcm9udEJ1ZmZlcikKICAgICAgICAgc3VyZmFjZS0+c3dhcEJ1ZmZlcnMoKTsKLQogfQog
CiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0
b3JlOjp0ZXh0dXJlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5o
CmluZGV4IGM0NTQzMGUuLjE2Mzc0MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmUuaApAQCAtNTUsOCArNTUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKICAgICB2aXJ0dWFs
IH5UZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSgpIHsgfQotCi1wcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBzZXRTdXJmYWNlKFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPik7CiAKIHByaXZh
dGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmNwcAppbmRleCA0ZjY1Mjc1Li40MmZiNGIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAK
QEAgLTE0Niw2ICsxNDYsNyBAQCBJbWFnZUZyYW1lOjpJbWFnZUZyYW1lKCkKICAgICAsIG1fZHVy
YXRpb24oMCkKICAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlzcG9zZU5vdFNwZWNpZmllZCkKICAg
ICAsIG1fcHJlbXVsdGlwbHlBbHBoYSh0cnVlKQorICAgICwgbV9zdHJpZGUoMCkKIHsKIH0gCiAK
QEAgLTE5NSw5ICsxOTYsMjEgQEAgYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25z
dCBJbWFnZUZyYW1lJiBvdGhlcikKIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lk
dGgsIGludCBuZXdIZWlnaHQpCiB7CiAgICAgQVNTRVJUKCF3aWR0aCgpICYmICFoZWlnaHQoKSk7
CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IEdy
YXBoaWNzU3VyZmFjZTo6Y3JlYXRlSW1hZ2VCYWNraW5nKEludFNpemUobmV3V2lkdGgsIG5ld0hl
aWdodCkpOworICAgIGlmIChtX2dyYXBoaWNzU3VyZmFjZSkgeworICAgICAgICBtX3NpemUgPSBt
X2dyYXBoaWNzU3VyZmFjZS0+c2l6ZSgpOworICAgICAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRf
Y2FzdDxQaXhlbERhdGEqPihtX2dyYXBoaWNzU3VyZmFjZS0+bG9jaygmbV9zdHJpZGUpKTsKKyAg
ICAgICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
I2VuZGlmCisKICAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVp
Z2h0OwogICAgIGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdT
dG9yZVNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBtX2JhY2tpbmdTdG9yZS5y
ZXNpemUoYmFja2luZ1N0b3JlU2l6ZSk7CiAgICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRh
dGEoKTsKICAgICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwpAQCAtMjIz
LDYgKzIzNiwxNSBAQCB2b2lkIEltYWdlRnJhbWU6OnNldENvbG9yUHJvZmlsZShjb25zdCBDb2xv
clByb2ZpbGUmIGNvbG9yUHJvZmlsZSkKIAogdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJh
bWVTdGF0dXMgc3RhdHVzKQogeworICAgIGlmIChzdGF0dXMgPT0gbV9zdGF0dXMpCisgICAgICAg
IHJldHVybjsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmIChzdGF0dXMgPT0g
RnJhbWVDb21wbGV0ZSAmJiBtX2dyYXBoaWNzU3VyZmFjZSkgeworICAgICAgICBtX2dyYXBoaWNz
U3VyZmFjZS0+dW5sb2NrKCk7CisgICAgICAgIG1fYnl0ZXMgPSByZWludGVycHJldF9jYXN0PFBp
eGVsRGF0YSo+KG1fZ3JhcGhpY3NTdXJmYWNlLT5sb2NrKCZtX3N0cmlkZSkpOworICAgIH0KKyNl
bmRpZgogICAgIG1fc3RhdHVzID0gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IDhjMGRiMzku
LmFkYWQ5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC01Miw2ICs1MiwxMCBAQAogI2VuZGlmCiAjZW5kaWYK
IAorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIC8vIEltYWdlRnJhbWUgcmVw
cmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhLiAgVGhpcyBidWZmZXIgaXMgd2hhdCBhbGwK
QEAgLTEwMSw3ICsxMDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBBU1NF
UlQoZW5kWCA8PSB3aWR0aCgpKTsKICAgICAgICAgICAgIEFTU0VSVChzdGFydFkgPCBoZWlnaHQo
KSk7CiAgICAgICAgICAgICBBU1NFUlQoZW5kWSA8PSBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBj
b25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAtIHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsK
KyAgICAgICAgICAgIGNvbnN0IGludCByb3dCeXRlcyA9IGJ5dGVzUGVyUm93KCk7CiAgICAgICAg
ICAgICBjb25zdCBQaXhlbERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBz
dGFydFkpOwogICAgICAgICAgICAgZm9yIChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8
IGVuZFk7ICsrZGVzdFkpCiAgICAgICAgICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBk
ZXN0WSksIHN0YXJ0QWRkciwgcm93Qnl0ZXMpOwpAQCAtMTE1LDYgKzExOSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRv
IHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFsIHVz
ZTogVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGlu
CiAgICAgICAgIC8vIEZyYW1lRGF0YTo6Y2xlYXIoKSkuCisgICAgICAgIHZvaWQgZGlkQ29tcGxl
dGVGcmFtZSgpOwogICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29u
c3Q7CiAKICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OwpAQCAtMTQyLDEyICsxNDcsMjQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFVTRShTS0lBKQogICAgICAgICAgICAgcmV0dXJu
IG1fYml0bWFwLmJpdG1hcCgpLmdldEFkZHIzMih4LCB5KTsKICNlbHNlCi0gICAgICAgICAgICBy
ZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OworICAgICAgICAgICAgcmV0dXJuIG1f
Ynl0ZXMgKyAoeSAqIGJ5dGVzUGVyUm93KCkgLyBzaXplb2YoUGl4ZWxEYXRhKSkgKyB4OwogI2Vu
ZGlmCiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qKSBjb25zdDsKIAorICAgICAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZXNQZXJSb3co
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zdHJpZGUgPyBtX3N0cmlk
ZSA6IHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCisgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBncmFw
aGljc1N1cmZhY2UoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9ncmFw
aGljc1N1cmZhY2U7CisgICAgICAgIH0KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ0hST01JVU0p
CiAgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKICAgICAg
ICAgewpAQCAtMTkwLDYgKzIwNywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5h
dGl2ZUltYWdlU2tpYSBtX2JpdG1hcDsKICNlbHNlCiAgICAgICAgIFZlY3RvcjxQaXhlbERhdGE+
IG1fYmFja2luZ1N0b3JlOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIFJl
ZlB0cjxHcmFwaGljc1N1cmZhY2U+IG1fZ3JhcGhpY3NTdXJmYWNlOworI2VuZGlmCisKICAgICAg
ICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tp
bmdTdG9yZS4KICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgICAgIC8vIEZJWE1FOiBEbyB3
ZSBuZWVkIG1fY29sb3JQcm9maWxlIGFueW1vcmU/CkBAIC0yMDQsNiArMjI2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOwogICAgICAgICBGcmFt
ZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7CiAgICAgICAgIGJvb2wgbV9wcmVtdWx0
aXBseUFscGhhOworICAgICAgICB1bnNpZ25lZCBtX3N0cmlkZTsKICAgICB9OwogCiAgICAgLy8g
SW1hZ2VEZWNvZGVyIGlzIGEgYmFzZSBmb3IgYWxsIGZvcm1hdC1zcGVjaWZpYyBkZWNvZGVycwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuY3BwCmluZGV4IGJmOGZhMTAu
LmZiZWJiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJm
YWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHAK
QEAgLTExNyw2ICsxMTcsMTUgQEAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb24KICAgICByZXR1cm4g
Z3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKIH0KIAorI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQorUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUo
UGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UpCit7CisgICAgaWYg
KCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPigp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlU3VyZmFjZShzdXJmYWNlLT5zaXpl
KCksIHN1cmZhY2UtPmZsYWdzKCkgJiBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzQWxwaGEgPyBT
aGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwLCBzdXJmYWNlKSk7Cit9CisjZW5kaWYK
KwogUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNoYXJlYWJsZVN1cmZhY2Uoc2l6ZSwgZmxhZ3MsIGJpdG1hcCkpOwpAQCAtMTQzLDYgKzE1Miwx
NiBAQCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0
ZShjb25zdCBJbnRTaXplJiBzaXplLCBTaGFyZQogfQogI2VuZGlmCiAKK1Bhc3NSZWZQdHI8SW1h
Z2U+IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZUltYWdlKCkKK3sKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKKyAgICBpZiAobV9ncmFwaGljc1N1cmZhY2UpCisgICAgICAgIHJldHVybiBtX2dy
YXBoaWNzU3VyZmFjZS0+Y3JlYXRlUmVhZE9ubHlJbWFnZShJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIHNpemUoKSkpOworI2VuZGlmCisgICAgcmV0dXJuIG1fYml0bWFwLT5jcmVhdGVJbWFnZSgp
OworfQorCisKIFNoYXJlYWJsZVN1cmZhY2U6On5TaGFyZWFibGVTdXJmYWNlKCkKIHsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5oCmluZGV4IGUwZTdhMzkuLmM5YmRi
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuaApAQCAtNzQsNiAr
NzQsMTEgQEAgcHVibGljOgogICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBzdXJmYWNlIGZyb20g
YSBoYW5kbGUuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gY3JlYXRl
KGNvbnN0IEhhbmRsZSYpOwogCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgLy8gQ3Jl
YXRlIGEgc2hhcmVhYmxlIHN1cmZhY2UgZnJvbSBhbiBleGlzdGluZyBzdXJmYWNlLgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkNv
cmU6OkdyYXBoaWNzU3VyZmFjZT4pOworI2VuZGlmCisKICAgICBTaGFyZWFibGVCaXRtYXA6OkZs
YWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogCiAgICAgLy8gQ3JlYXRlIGEg
aGFuZGxlLgpAQCAtOTEsNiArOTYsMTIgQEAgcHVibGljOgogICAgIHZvaWQgY29weVRvVGV4dHVy
ZShQYXNzUmVmUHRyPFdlYkNvcmU6OkJpdG1hcFRleHR1cmU+LCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzb3VyY2VPZmZzZXQpOwogI2Vu
ZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OkdyYXBoaWNzU3VyZmFjZT4gZ3JhcGhpY3NTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9ncmFw
aGljc1N1cmZhY2U7IH0KKyNlbmRpZgorCisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJbWFnZT4g
Y3JlYXRlSW1hZ2UoKTsKKwogcHJpdmF0ZToKICAgICBTaGFyZWFibGVTdXJmYWNlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkuY3BwCmluZGV4IDE3ZmEyZWEuLjQ1ZTA0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC0xMjcsMTAgKzEyNywxMCBAQCB2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGNvbnRlbnRzUwogI2VuZGlmCiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0
IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBr
ZXksIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCiB7Ci0g
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGUoaGFuZGxlKTsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
Y3JlYXRlSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSwgYml0bWFwKSk7CisgICAgUmVmUHRy
PFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUoaGFu
ZGxlKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRl
SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSwgc3VyZmFjZSkpOwogfQogCiB2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90IGtleSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaApp
bmRleCBkMzQ4Njg3Li4yZDE5ZjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5oCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92
ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CiAgICAgdm9pZCBjcmVhdGVV
cGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJik7
CiAgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVh
dGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJik7CisgICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpOwogICAg
IHZvaWQgZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QpOwogICAgIHZvaWQg
ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAg
ICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KaW5kZXggZTVlNjRhOS4uMmQ0MGU5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5Lm1lc3NhZ2VzLmluCkBAIC0zMSw3ICszMSw3IEBAIG1lc3NhZ2VzIC0+IExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkgewogICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklE
LCBpbnQgdGlsZUlEKQogICAgIENyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBXZWJLaXQ6
OlNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCiAgICAgUmVtb3ZlVXBkYXRlQXRsYXMo
aW50IGF0bGFzSUQpCi0gICAgQ3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBr
ZXksIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKQorICAgIENyZWF0ZURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZVN1cmZh
Y2U6OkhhbmRsZSBoYW5kbGUpCiAgICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGlu
dDY0X3Qga2V5KQogICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6OkludFNpemUgY29udGVudHNT
aXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQogICAgIERpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
UmVuZGVyZXIuY3BwCmluZGV4IDI1YTI3MGUuLmY0ZmNiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVSZW5kZXJlci5jcHAKQEAgLTM5OCwxMiArMzk4LDI0IEBAIHZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBU
aWxlVXBkCiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5n
U3RvcmUpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZShpbnQ2NF90
IGltYWdlSUQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQordm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBQYXNzUmVmUHRy
PFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2VSZWYpCiB7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwID0gd2Vha0JpdG1hcDsKKyAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4g
c3VyZmFjZSA9IHN1cmZhY2VSZWY7CisKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAg
IFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IGdyYXBoaWNzU3VyZmFjZSA9IHN1cmZhY2UtPmdyYXBo
aWNzU3VyZmFjZSgpOworICAgIGlmIChncmFwaGljc1N1cmZhY2UpIHsKKyAgICAgICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBUZXh0dXJl
TWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tpbmdTdG9y
ZS0+c2V0U3VyZmFjZShncmFwaGljc1N1cmZhY2UpOworICAgICAgICBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5zZXQoaW1hZ2VJRCwgYmFja2luZ1N0b3JlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUo
KTsKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5zZXQoaW1hZ2VJRCwgYmFja2luZ1N0
b3JlKTsKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZU1hcHBlci5n
ZXQoKSwgYml0bWFwLT5jcmVhdGVJbWFnZSgpLmdldCgpLCBCaXRtYXBUZXh0dXJlOjpVcGRhdGVD
YW5ub3RNb2RpZnlPcmlnaW5hbEltYWdlRGF0YSk7CisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVD
b250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIHN1cmZhY2UtPmNyZWF0ZUltYWdlKCkuZ2V0
KCksIEJpdG1hcFRleHR1cmU6OlVwZGF0ZUNhbm5vdE1vZGlmeU9yaWdpbmFsSW1hZ2VEYXRhKTsK
IH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlKGludDY0X3QgaW1hZ2VJ
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCmluZGV4IDYwNDM1YzkuLjM3MDU5ODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtODksNyArODksNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CiAgICAgdm9pZCB1cGRh
dGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgZmx1
c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPik7CisgICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNz
UmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+KTsKICAgICB2b2lkIGRlc3Ryb3lJbWFnZShpbnQ2NF90
KTsKICAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwogICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tl
ZChib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmNwcAppbmRleCBhMmMwNGZjLi42MzRhZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5o
IgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9C
aXRtYXBJbWFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgpAQCAtNTE4LDEzICs1
MTksMjEgQEAgaW50NjRfdCBMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdT
dG9yZShJbWFnZSogaW1hZ2UpCiAgICAgLy8gQ2hlY2sgaWYgd2Ugd2VyZSBnb2luZyB0byByZWxl
YXNlIHRoaXMgaW1hZ2UgZHVyaW5nIHRoZSBuZXh0IGZsdXNoLgogICAgIHNpemVfdCByZWxlYXNl
ZEluZGV4ID0gbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGtleSk7CiAg
ICAgaWYgKHJlbGVhc2VkSW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1h
Z2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0
bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwotICAgICAgICB7Ci0gICAgICAgICAgICBPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0
ZUdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gc3Vy
ZmFjZTsKKyAgICAgICAgaWYgKGltYWdlLT5pc0JpdG1hcEltYWdlKCkpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IGdyYXBoaWNzU3VyZmFjZSA9IHN0YXRpY19jYXN0PEJp
dG1hcEltYWdlKj4oaW1hZ2UpLT5ncmFwaGljc1N1cmZhY2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICAgICAgICAgIGlmIChncmFwaGljc1N1cmZhY2UpCisgICAgICAgICAgICAgICAgc3VyZmFjZSA9
IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShncmFwaGljc1N1cmZhY2UpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxl
U3VyZmFjZTo6Y3JlYXRlKGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxw
aGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApLCAwKTsKKyAgICAgICAg
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IHN1
cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHN1
cmZhY2UtPnNpemUoKSkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2Uo
aW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwogICAgICAgICB9
Ci0gICAgICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYml0bWFw
LT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKworICAgICAgICBTaGFyZWFibGVTdXJmYWNlOjpIYW5k
bGUgaGFuZGxlOworICAgICAgICBzdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKICAgICAg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpD
cmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRsZSkpOwogICAgIH0gZWxzZQog
ICAgICAgICBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShyZWxlYXNl
ZEluZGV4KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>