<?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>91901</bug_id>
          
          <creation_ts>2012-07-20 14:11:55 -0700</creation_ts>
          <short_desc>IndexedDB: Simplify backend interface classes</short_desc>
          <delta_ts>2012-07-20 16:55:21 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>674957</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-20 14:11:55 -0700</bug_when>
    <thetext>IndexedDB: Simplify backend interface classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674980</commentid>
    <comment_count>1</comment_count>
      <attachid>153604</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-20 14:36:16 -0700</bug_when>
    <thetext>Created attachment 153604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674982</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-20 14:40:23 -0700</bug_when>
    <thetext>This patch gets the various IDBFooBackendImpl classes out of the business of using IDBFooBackendInterface* pointers except in implementations of the interface methods themselves, which reduces the surface area slightly.

Looking around, it seemed as though the static FooImpl* from(FooInterface*); pattern was used in WebCore for this purpose. tony@, any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674993</commentid>
    <comment_count>3</comment_count>
      <attachid>153604</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-20 14:45:51 -0700</bug_when>
    <thetext>Comment on attachment 153604
Patch

Seems fine.  It guess it reduces the interface size and means there are less virtual function calls so might be a bit faster.  If you guys all like this style, it&apos;s fine with me too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675009</commentid>
    <comment_count>4</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-20 15:07:19 -0700</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675088</commentid>
    <comment_count>5</comment_count>
      <attachid>153604</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-20 16:55:18 -0700</bug_when>
    <thetext>Comment on attachment 153604
Patch

Clearing flags on attachment: 153604

Committed r123276: &lt;http://trac.webkit.org/changeset/123276&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675089</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-20 16:55:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153604</attachid>
            <date>2012-07-20 14:36:16 -0700</date>
            <delta_ts>2012-07-20 16:55:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91901-20120720143612.patch</filename>
            <type>text/plain</type>
            <size>54711</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjljOTNjZjRlNGIwZmUz
OTljZWUyZTJhYzVjZDY0OWViNDk3MDI5Ni4uOThlZTU4MWQ1M2EyODQ4N2FlMGVjYTEzMjdmYjYz
ZTljYzhjN2M3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDEyLTA3LTIwICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBTaW1w
bGlmeSBiYWNrZW5kIGludGVyZmFjZSBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTkwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Ug
aW5jbHVkZWQgc2V2ZXJhbCBtZXRob2RzIG9ubHkgdXNlZCBieSB0aGUKKyAgICAgICAgcmVhbCBp
bXBsZW1lbnRhdGlvbiBvYmplY3RzLCBub3QgdmlhIHRoZSBpbnRlcmZhY2VzLiBFeHBvc2UgYSBz
dGF0aWMgSW1wbDo6ZnJvbShJbnRlcmZhY2UpCisgICAgICAgIG1ldGhvZCBmb3IgdHJhbnNhY3Rp
b24sIGFuZCBtaWdyYXRlIGFsbCBvZiB0aGUgYmFja2VuZC1pbnRlcm5hbCB1c2VzIGZyb20gSW50
ZXJmYWNlIHRvIEltcGwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gbm8gZnVuY3Rpb25hbCBj
aGFuZ2VzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZElt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNv
ckJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tlbmRJbXBsKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9i
amVjdFN0b3JlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlv
bik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCk6IERyb3Ag
dW51c2VkIHRyYW5zYWN0aW9uIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhC
YWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1w
bDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmdldEtleSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oOgorICAg
ICAgICAoSURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRl
eEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCk6IERyb3AgdW51c2VkIHRyYW5z
YWN0aW9uIGFyZ3VtZW50LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpvYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSk6CisgICAgICAgIChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om1vZGUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZS5oOgorICAgICAgICAoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKToKKwogMjAxMi0w
Ny0yMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMzE4Mi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggY2ExODM1YTVlNzA2N2Q1YzQ3OTc0OGQ4M2IzZDUxMjllMGFjOGFlYy4uNDFkNGMy
ZThjMTNmMjA1ZTJmZTQ3MWFmNjhlYjdjYTdkM2Y3MDA3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNy0yMCAgSm9zaHVhIEJlbGwgIDxqc2JlbGxA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogU2ltcGxpZnkgYmFja2VuZCBpbnRl
cmZhY2UgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE5MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgbWV0aG9kIHN0dWJzIGZyb20gcHJveHkgY2xhc3MuCisK
KyAgICAgICAgKiBzcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAq
IHNyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oOgorICAgICAgICAoSURCVHJhbnNhY3Rp
b25CYWNrZW5kUHJveHkpOgorCiAyMDEyLTA3LTE5ICBMdWtlIE1hY3BoZXJzb24gICA8bWFjcGhl
cnNvbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRW5hYmxlIENTUyB2YXJpYWJsZXMgY29tcGls
ZSB0aW1lIGZsYWcgaW4gQ2hyb21lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IGI3NGM5NTg1MTBj
ODU2ZThlYmRhYTQxNTRiMDkxNThhYTc0NTk1OTQuLmFlMjdhZjhhMzJjNmJiNjk0OTJiZmYwODY2
ZTJkMDI4NTI0NDY2MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTM3LDEyICszNywxMiBAQAog
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1JREJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24sIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlKiBv
YmplY3RTdG9yZSkKK0lEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIElEQkN1cnNvcjo6RGly
ZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0
U3RvcmUpCiAgICAgOiBtX2N1cnNvcihjdXJzb3IpCiAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rp
b24pCiAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4IDE1
MzAxNmYxMjY3MGRkYjI3ZGY5YTcyZGE3ODliNmJjYTA4NzFlYjEuLjA0M2M0MDM1MmNkZDNhM2Zk
NjNmOTk3MmQxNjcyMWYwNDhlMmIwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaApAQCAtNDEsMTggKzQxLDE5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CiBj
bGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwogY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOworY2xhc3MgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogY2xh
c3MgSURCQ3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIElEQkN1
cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2UqIG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNv
ckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
Y3Vyc29yLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJREJDdXJzb3JCYWNrZW5kSW1wbChjdXJzb3IsIGRpcmVjdGlvbiwgY3Vyc29yVHlw
ZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfklEQkN1
cnNvckJhY2tlbmRJbXBsKCk7CiAKKyAgICAvLyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3Q7CkBAIC02MiwxMSArNjMs
MTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0
Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQ
cmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcyk7Ci0gICAgdm9pZCBjbG9zZSgpOwogICAg
IHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KIAorICAgIHZvaWQgY2xvc2UoKTsKKwogcHJpdmF0ZToKLSAgICBJREJDdXJz
b3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24sIEN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSopOworICAgIElEQkN1cnNvckJhY2tl
bmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBJREJDdXJzb3I6OkRp
cmVjdGlvbiwgQ3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCosIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwqKTsKIAogICAgIHN0YXRpYyB2b2lkIGFkdmFuY2VJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4s
IHVuc2lnbmVkIGxvbmcsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgc3RhdGljIHZv
aWQgY29udGludWVGdW5jdGlvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOwpAQCAtNzYsOSArNzgsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNvcjsKICAgICBJREJDdXJzb3I6
OkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKICAgICBDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwot
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fb2JqZWN0U3RvcmU7
Ci0gICAgCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rp
b247CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7
CisKICAgICBib29sIG1fY2xvc2VkOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA1
MDViYTc1N2JlNDhmYzFhZmNhNDVjNTk2NmZmYmZhMDA0ZDQ3NWU4Li42OWM5YTY2YzYyMWM2MmQ4
N2QwNGM1N2NiN2IwNmNkZjhhZDU2NDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTQ0
LDE2ICsxNDQsMTggQEAgSURCRGF0YWJhc2VNZXRhZGF0YSBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjptZXRhZGF0YSgpIGNvbnN0CiAKIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVu
dCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURC
VHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKICAgICBBU1NFUlQoIW1fb2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG5hbWUpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBu
YW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5h
bWUoKSA9PSBuYW1lKTsKIAorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0
cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25Q
dHIpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpW
RVJTSU9OX0NIQU5HRSk7CisKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UgPSB0aGlzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3Jl
YXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlv
biksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwLCBkYXRh
YmFzZSwgb2JqZWN0U3RvcmUpKSkgeworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
aygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFu
c2FjdGlvbiksCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3Jl
KSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5B
Q1RJVkVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNjIsNyArMTY0LDcgQEAg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNyZWF0ZU9iamVjdFMKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgp
OwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUsICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
dHJhbnNhY3Rpb24pCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0
b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUsICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZDsKIApAQCAtMTc1LDI4
ICsxNzcsMzAgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9y
ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAogICAgIHRyYW5zYWN0aW9uLT5kaWRD
b21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSkKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAg
IHJldHVybiBtX29iamVjdFN0b3Jlcy5nZXQobmFtZSk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb25QdHItPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlv
bjo6VkVSU0lPTl9DSEFOR0UpOwogICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhu
YW1lKSk7CiAKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0
aGlzOwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9
IG1fb2JqZWN0U3RvcmVzLmdldChuYW1lKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOwotICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBvYmplY3RTdG9y
ZSwgdHJhbnNhY3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlVG9N
YXAsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpKSB7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJv
bSh0cmFuc2FjdGlvblB0cik7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURC
VHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0
b3JlLCB0cmFuc2FjdGlvbiksCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXAsIGRhdGFiYXNlLCBvYmplY3RT
dG9yZSkpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9O
X0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX29iamVjdFN0b3Jl
cy5yZW1vdmUobmFtZSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRl
T2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIGRhdGFiYXNlLT5tX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlT2JqZWN0U3RvcmUoZGF0YWJhc2UtPmlkKCksIG9iamVjdFN0b3JlLT5pZCgpKTsK
ICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CkBAIC0yMzAsMTggKzIz
NCwyMSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbAogICAgIH0KIAogICAgIFJlZlB0cjxET01T
dHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0
aGlzLT50cmFuc2FjdGlvbihvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6
VkVSU0lPTl9DSEFOR0UsIGVjKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiB0cmFuc2FjdGlvbkludGVyZmFjZSA9IHRoaXMtPnRyYW5zYWN0aW9uKG9iamVjdFN0
b3JlTmFtZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgZWMpOworICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25JbnRlcmZhY2UuZ2V0KCkpOwogICAg
IEFTU0VSVCghZWMpOwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFi
YXNlID0gdGhpczsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwsIGRh
dGFiYXNlLCB2ZXJzaW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpyZXNldFZlcnNpb24sIGRhdGFiYXNlLCBtX3ZlcnNpb24pKSkgeworICAgIGlmICgh
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsLCBkYXRhYmFzZSwg
dmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCisgICAgICAgICAgICBjcmVhdGVDYWxs
YmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbiwgZGF0YWJhc2Us
IG1fdmVyc2lvbikpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5T
QUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICB9CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247
CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0YWJhc2UtPmlkKCk7CiAgICAgZGF0YWJhc2Ut
Pm1fdmVyc2lvbiA9IHZlcnNpb247CiAgICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUt
PnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoZGF0YWJhc2VJZCwgZGF0YWJhc2UtPm1fdmVyc2lv
bikpIHsKQEAgLTI0OSwyMSArMjU2LDIxIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmCiAgICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKHRyYW5zYWN0aW9uKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4odHJhbnNhY3Rpb24p
KTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQo
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHBycFRyYW5zYWN0aW9u
KQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHBycFRy
YW5zYWN0aW9uOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2Fj
dGlvbiA9IHBycFRyYW5zYWN0aW9uOwogICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewogICAgICAgICBBU1NFUlQoIW1fcnVubmlu
Z1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CiAgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwogICAgIH0KIH0KIAotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247
CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLmdldCgpKSk7
CiAgICAgbV90cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLmdldCgpKTsKICAgICBpZiAo
dHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsK
QEAgLTMzOCw3ICszNDUsNyBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNh
Y3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUob2JqZWN0U3RvcmVOYW1l
cywgbW9kZSwgdGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3Jl
TmFtZXMsIG1vZGUsIHRoaXMpOwogICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbi5n
ZXQoKSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuaAppbmRleCAyMWY0ZjkzYzFiM2ViMWM2OTZiMzI5NGRjY2U2YjA5MTdhMmVjNWJkLi44MDVl
YjYxN2ZiMzIxNGQwYmJiMjU3NWYzMmJmODk1YTQ1ZjEwZDFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
CkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIElEQkJhY2tpbmdTdG9yZTsKIGNsYXNzIElEQkRhdGFi
YXNlOwogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwogY2xhc3MgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7CiBjbGFzcyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOwogCkBAIC01OCwxOCArNTksMTggQEAgcHVibGljOgogICAgIHZvaWQgb3BlbkNvbm5lY3Rp
b24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICB2b2lkIGRlbGV0ZURhdGFiYXNlKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKKyAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UKICAgICB2aXJ0dWFsIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdDsK
LQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYs
IGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RTdG9y
ZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVh
bCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKIAotICAgIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9Ci0gICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQo
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICB2b2lkIHRy
YW5zYWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+KTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAKIHByaXZhdGU6CiAgICAgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogZGF0YWJh
c2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBj
b25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwpAQCAtNzksOSArODAsOSBAQCBwcml2YXRl
OgogICAgIGludDMyX3QgY29ubmVjdGlvbkNvdW50KCk7CiAgICAgdm9pZCBwcm9jZXNzUGVuZGlu
Z0NhbGxzKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVj
dFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgc3RhdGlj
IHZvaWQgc2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+KTsKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVPYmplY3RTdG9yZUlu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRWZXJz
aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKIAogICAgIC8v
IFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCiAg
ICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKQEAgLTEwMSw5ICsxMDIsOSBAQCBwcml2YXRlOgog
ICAgIE9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVzOwogCiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcjsKLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb247CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fcnVubmlu
Z1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKIAotICAgIHR5cGVkZWYgSGFzaFNldDxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqPiBUcmFuc2FjdGlvblNldDsKKyAgICB0eXBlZGVmIEhh
c2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCo+IFRyYW5zYWN0aW9uU2V0OwogICAgIFRy
YW5zYWN0aW9uU2V0IG1fdHJhbnNhY3Rpb25zOwogCiAgICAgY2xhc3MgUGVuZGluZ1NldFZlcnNp
b25DYWxsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCBhZmRiN2VjM2M2ZDQ1ZWQ3M2ZmNzU3MTVkNjQ1
YjJhZmI0NzBhZjNiLi45ZjVmZjNiYWZjYTI1NDk3NWE0M2M0MzBlYmNhNWUyMTg2OTBlYzY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tl
bmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIklEQk1ldGFkYXRh
LmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklE
QlRyYWNpbmcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzMsNyArNzQsNyBAQCBJREJJbmRleE1ldGFkYXRhIElE
QkluZGV4QmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKICAgICByZXR1cm4gSURCSW5kZXhN
ZXRhZGF0YShtX25hbWUsIG1fa2V5UGF0aCwgbV91bmlxdWUsIG1fbXVsdGlFbnRyeSk7CiB9CiAK
LXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdW50eXBlZERpcmVjdGlv
biwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6
Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2Us
IHVuc2lnbmVkIHNob3J0IHVudHlwZWREaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikK
IHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5h
bCIpOwogICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PElE
QkN1cnNvcjo6RGlyZWN0aW9uPih1bnR5cGVkRGlyZWN0aW9uKTsKQEAgLTEwOCw4ICsxMDksOSBA
QCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2lnbgogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtl
eVJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNr
czsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
biA9IHRyYW5zYWN0aW9uUHRyOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhj
cmVhdGVDYWxsYmFja1Rhc2soJm9wZW5DdXJzb3JJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBk
aXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yLCBjYWxsYmFj
a3MsIHRyYW5zYWN0aW9uKSkpCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlv
blB0cik7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAg
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuQ3Vyc29ySW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwg
ZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvciwgY2FsbGJh
Y2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKQEAgLTExOSwxMiArMTIxLDEzIEBAIHZvaWQg
SURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBwcnBLZXlSYW5nZSwgdW5zCiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
ID0gdGhpczsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7
CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJh
bnNhY3Rpb25QdHI7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNh
bGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlv
biwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IsIGNhbGxiYWNrcywg
dHJhbnNhY3Rpb24pKSkKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRy
KTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJm9wZW5DdXJzb3JJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBkaXJl
Y3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yLCBjYWxsYmFj
a3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRS
QU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpj
b3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+KQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6
OmNvdW50SW50ZXJuYWwiKTsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7CkBAIC0xNDUsNyArMTQ4
LDggQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkkKIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6
Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5k
SW1wbDo6Y291bnQiKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRl
Q2FsbGJhY2tUYXNrKCZjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFu
c2FjdGlvbikpKQorICAgIGlmICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvbiktPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygm
Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcykpKQogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKQEAgLTIw
NSw3ICsyMDksOCBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJRAogICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiBpbmRleCA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9
IHBycENhbGxiYWNrczsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRl
Q2FsbGJhY2tUYXNrKCZnZXRJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkK
KyAgICBpZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb24pLT5z
Y2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVybmFs
LCBpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKQEAgLTIxNSw3ICsyMjAs
OCBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleShQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cgogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPiBpbmRleCA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBy
cEtleVJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tU
YXNrKCZnZXRLZXlJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKKyAgICBp
ZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb24pLT5zY2hlZHVs
ZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEtleUludGVybmFsLCBp
bmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAppbmRleCBm
ODQxYTk1ODM3MjQ0YzJmZDA4Mjg4MDRhNjkwMTM0NGQ4NWE1MjVjLi5lMTE3NDU3OWQ2MTczYWNl
NTg0MDdkYzJiZjUzMzlmMmJmMzliNDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCkBAIC02MSwxNSArNjEsMTQg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0SWQoaW50NjRfdCBpZCkgeyBtX2lkID0gaWQ7IH0KICAg
ICBib29sIGhhc1ZhbGlkSWQoKSBjb25zdCB7IHJldHVybiBtX2lkICE9IEludmFsaWRJZDsgfTsK
IAotICAgIC8vIEltcGxlbWVudHMgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLgotICAgIHZpcnR1
YWwgSURCSW5kZXhNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwotCisgICAgLy8gSURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlCiAgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7
CiAgICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIElEQkluZGV4TWV0YWRhdGEgbWV0YWRhdGEoKSBj
b25zdDsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgeyByZXR1cm4gbV9rZXlQYXRoOyB9CiAgICAgY29u
c3QgYm9vbCYgdW5pcXVlKCkgeyByZXR1cm4gbV91bmlxdWU7IH0KQEAgLTc5LDggKzc4LDggQEAg
cHJpdmF0ZToKICAgICBJREJJbmRleEJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgaW50NjRfdCBpZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSk7CiAgICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOwogCi0gICAgc3RhdGlj
IHZvaWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWdu
ZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPik7Ci0gICAgc3RhdGljIHZvaWQgY291bnRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICBzdGF0aWMgdm9pZCBvcGVuQ3Vyc29y
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAg
c3RhdGljIHZvaWQgY291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHN0YXRp
YyB2b2lkIGdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBjY2Fk
ODg5MjBmN2RiYmJhMmYzNzUwZjcwZjM4YmM5NGU5NjIxN2VmLi44ZDNiODAzY2I5NGQxMGVmZjhk
MTVmNWIxNTI1YjNlOTQ5NTJlODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAt
NzgsMTMgKzc4LDE1IEBAIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAogICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIAotdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
cHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0Iik7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
ID0gdGhpczsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7
CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2Us
IGNhbGxiYWNrcykpKQorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIp
OworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwsIG9i
amVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIApAQCAtMTQ1LDEzICsx
NDcsMTIgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7CiAKLSAgICBBU1NFUlQodHJhbnNhY3Rpb25Q
dHItPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKLQogICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CiAgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBSZWZQdHI8SURC
S2V5PiBrZXkgPSBwcnBLZXk7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJv
bSh0cmFuc2FjdGlvblB0cik7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURC
VHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAKICAgICAvLyBOdWxsIHBvaW50ZXJzIGhlcmUgc2ln
bmlmeSB0aGF0IGluZGV4IGtleXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBhcyBhIHBhcnQgb2YgdGhp
cyBwdXQuCiAgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbnVsbEluZGV4TmFtZXM7CkBAIC0x
NjUsMTMgKzE2NiwxMiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJ
bmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdQogewogICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyIpOwogCi0gICAg
QVNTRVJUKHRyYW5zYWN0aW9uUHRyLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05M
WSk7Ci0KICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUg
PSB0aGlzOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFs
dWU7CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwogICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIEFTU0VSVCh0cmFuc2Fj
dGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogCiAgICAgT3duUHRy
PFZlY3RvcjxTdHJpbmc+ID4gbmV3SW5kZXhOYW1lcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3Ry
aW5nPihpbmRleE5hbWVzKSk7CiAgICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbmV3SW5k
ZXhLZXlzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxJbmRleEtleXM+KGluZGV4S2V5cykpOwpAQCAt
MjcxLDcgKzI3MSw3IEBAIHByaXZhdGU6CiB9OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1
dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uLCBQYXNzT3du
UHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5k
ZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBQYXNzT3duUHRyPFZlY3RvcjxTdHJp
bmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcElu
ZGV4S2V5cykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dEludGVybmFsIik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNh
Y3Rpb246OlJFQURfT05MWSk7CkBAIC0zODgsMTMgKzM4OCwxNCBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBy
cEtleVJhbgogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVs
ZXRlIik7CiAKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlv
bjo6UkVBRF9PTkxZKTsKKyAgICBBU1NFUlQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJv
bSh0cmFuc2FjdGlvbiktPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKIAog
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7
CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKIAotICAgIGlmICgh
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNh
bGxiYWNrcykpKQorICAgIGlmICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvbiktPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwsIG9iamVjdFN0b3JlLCBr
ZXlSYW5nZSwgY2FsbGJhY2tzKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIApAQCAtNDMxLDEyICs0MzIsMTMgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzLCBJREIKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNsZWFyIik7CiAKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJ
REJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKyAgICBBU1NFUlQoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVB
RF9PTkxZKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSA9IHRoaXM7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2Fs
bGJhY2tzOwogCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCwgb2JqZWN0
U3RvcmUsIGNhbGxiYWNrcykpKQorICAgIGlmICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
ZnJvbSh0cmFuc2FjdGlvbiktPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCwgb2JqZWN0
U3RvcmUsIGNhbGxiYWNrcykpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKQEAgLTQ4NCwyMSArNDg2LDIwIEBAIGJvb2wg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUm
IGJhY2tpbmdTdG9yZSwgaW50CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wg
dW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJv
b2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
blB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKICAgICBBU1NFUlQoIW1faW5k
ZXhlcy5jb250YWlucyhuYW1lKSk7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgbmFt
ZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKICAgICBBU1NFUlQoaW5kZXgtPm5hbWUo
KSA9PSBuYW1lKTsKIAorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIp
OworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJT
SU9OX0NIQU5HRSk7CisKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uUHRyID0gdHJhbnNhY3Rpb247CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgsIHRyYW5zYWN0aW9uUHRyKSwKLSAg
ICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpyZW1vdmVJbmRleEZyb21NYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3RTdG9yZSwgaW5kZXgpKSkgeworICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwsIG9iamVjdFN0
b3JlLCBpbmRleCwgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCwgb2JqZWN0
U3RvcmUsIGluZGV4KSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC01MDcs
NyArNTA4LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnMKICAgICByZXR1cm4gaW5kZXgucmVs
ZWFzZSgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikK
IHsKICAgICBpbnQ2NF90IGlkOwogICAgIGlmICghb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgp
LT5jcmVhdGVJbmRleChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQo
KSwgaW5kZXgtPm5hbWUoKSwgaW5kZXgtPmtleVBhdGgoKSwgaW5kZXgtPnVuaXF1ZSgpLCBpbmRl
eC0+bXVsdGlFbnRyeSgpLCBpZCkpIHsKQEAgLTUzNSw0NiArNTM2LDQ0IEBAIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRl
eChjb25zdCBTdHJpCiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25Q
dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgp
ID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAgICAgQVNTRVJUKG1faW5kZXhl
cy5jb250YWlucyhuYW1lKSk7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUgPSB0aGlzOwogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCA9IG1faW5kZXhlcy5nZXQobmFtZSk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCiAgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgsIHRyYW5zYWN0
aW9uUHRyKSwKLSAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0U3RvcmUsIGluZGV4KSkpIHsKKyAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVybmFsLCBv
YmplY3RTdG9yZSwgaW5kZXgsIHRyYW5zYWN0aW9uKSwKKyAgICAgICAgICAgICAgY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwLCBvYmpl
Y3RTdG9yZSwgaW5kZXgpKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9p
bmRleGVzLnJlbW92ZShuYW1lKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRl
bGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24pCiB7CiAgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJ
bmRleChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgt
PmlkKCkpOwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAot
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHBycFJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycFJhbmdlLCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6b3BlbkN1cnNvciIpOwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSA9IHBy
cFJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNr
czsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
blB0ciA9IHRyYW5zYWN0aW9uOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rp
b25QdHIpOwogICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAg
IGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNv
ckludGVybmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBy
YW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uUHRyKSkpIHsKKyAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1
cnNvckludGVybmFsLCBvYmplY3RTdG9yZSwgcmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0
cmFuc2FjdGlvbikpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5T
QUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdG1wRGlyZWN0aW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IHRtcERpcmVjdGlvbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOwogICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRp
cmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPih0bXBEaXJlY3Rpb24p
OwpAQCAtNTkyLDExICs1OTEsMTIgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpv
cGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3MKIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElE
Ql9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQiKTsKLSAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFu
c2FjdGlvbikpKQorICAgIGlmICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvbiktPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNh
bGxiYWNrcykpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElP
Tl9JTkFDVElWRV9FUlI7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291
bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7CiAgICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CiAgICAg
dWludDMyX3QgY291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IGEzN2M2N2U3
ZjY4MjI2MWMzMDM0MDNlZTAzNTk1NzJlZDlkMjhmMzYuLjY0N2JjMjk3ODQ5ZDY0ZjkxNzU5Y2Y4
NWMzYjE0NGExZTFjNjRjNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTM5LDYgKzM5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OwogY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Owogc3RydWN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGE7CkBAIC02
Myw4ICs2NCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdm9pZCBzZXRJZChpbnQ2NF90IGlkKSB7
IG1faWQgPSBpZDsgfQogCi0gICAgdmlydHVhbCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFk
YXRhKCkgY29uc3Q7Ci0KKyAgICAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtODAs
NiArODAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBwb3B1bGF0ZUluZGV4KElEQkJh
Y2tpbmdTdG9yZSYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKIAorICAgIElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgbWV0YWRhdGEoKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSB7IHJldHVy
biBtX25hbWU7IH0KICAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9rZXlQYXRoOyB9CiAgICAgY29uc3QgYm9vbCYgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXV0b0luY3JlbWVudDsgfQpAQCAtOTMsMTMgKzk0LDEzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB1cGRhdGVLZXlHZW5lcmF0b3IoY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJl
bnQpOwogCiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHN0YXRpYyB2b2lkIHB1
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIFBhc3NPd25QdHI8VmVjdG9yPFN0
cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4pOwor
ICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBQYXNzT3du
UHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5k
ZXhLZXlzPiA+KTsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgc3RhdGlj
IHZvaWQgY2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAg
ICBzdGF0aWMgdm9pZCBjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4pOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPik7Ci0gICAgc3RhdGljIHZvaWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPik7Ci0gICAgc3RhdGljIHZvaWQgY291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVJ
bmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxl
dGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBv
cGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25l
ZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgY291bnRJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
Pik7CiAKICAgICAvLyBUaGVzZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFi
b3J0IHRhc2tzLgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
CmluZGV4IDk0ZDMwZGM5MzY5OWViOTEzNmY2YWJkNzFiYjA2NzNlYmJhYmJkZmMuLjcwZjMzNjdh
YmZiYzFhMDRhOWZlY2ExY2FiNGU0MzMwZGQ2MzczNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwu
aCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0
YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgi
CiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCIKIApAQCAtNzYsNyArNzcsNyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcgogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKG5hbWUpOwor
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IG1fZGF0
YWJhc2UtPm9iamVjdFN0b3JlKG5hbWUpOwogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgbmVj
ZXNzYXJ5IHJpZ2h0IG5vdyBiZWFjdXNlIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBjb3VsZCBt
b2RpZnkgdGhpbmdzCiAgICAgLy8gICAgICAgIGJldHdlZW4gaXRzIGNyZWF0aW9uICh3aGVyZSBh
bm90aGVyIGNoZWNrIG9jY3VycykgYW5kIHRoZSAub2JqZWN0U3RvcmUgY2FsbC4KICAgICAvLyAg
ICAgICAgVGhlcmUncyBhIGJ1ZyB0byBtYWtlIHRoaXMgaW1wb3NzaWJsZSBpbiB0aGUgc3BlYy4g
V2hlbiB3ZSBtYWtlIGl0IGltcG9zc2libGUgaGVyZSwgd2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aAppbmRleCA0ZWEzYmZkNDM3MTNhZGQ0OWE4MTc3NzE0NGQxNjI1Y2QxNmQxZWZkLi5kYWEzOWUx
YzM5MmM1MmNmMjU5ODVhZTc1M2Q1YjZjZWE5YWViYTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5oCkBAIC00NCwxOSArNDQsMjQgQEAgY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKIGNs
YXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAgc3RhdGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIGZyb20oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiBpbnRlcmZhY2UpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCo+KGludGVyZmFjZSk7CisgICAgfQogICAgIHZpcnR1YWwgfklE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKTsKIAorICAgIC8vIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+IGFib3J0VGFzayk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2
ZW50cygpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRD
YWxsYmFja3MoSURCVHJhbnNhY3Rpb25DYWxsYmFja3MqIGNhbGxiYWNrcykgeyBtX2NhbGxiYWNr
cyA9IGNhbGxiYWNrczsgfQotICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURC
Q3Vyc29yQmFja2VuZEltcGwqKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUGVuZGluZ0V2
ZW50cyhpbnQpOwogCiAgICAgdm9pZCBydW4oKTsKKyAgICB1bnNpZ25lZCBzaG9ydCBtb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2sgPSBudWxscHRyKTsKKyAgICB2b2lkIHJlZ2lzdGVy
T3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCopOworICAgIHZvaWQgdW5yZWdpc3Rlck9w
ZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKTsKKyAgICB2b2lkIGFkZFBlbmRpbmdFdmVu
dHMoaW50KTsKIAogcHJpdmF0ZToKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0
cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBkOGY0
OGFiNTA4NTcxMmVlMDhlNGZjM2Q5NTQ5MjljMGYzYTdmYmZiLi5iZGM1MmZmZTNlMzhiYTdhZGQw
NmU1Y2M1OWIxYmY5NTY3MjhlNWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uu
aApAQCAtNTAsMTUgKzUwLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gYWJvcnRUYXNrID0gbnVsbHB0cikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dENhbGxiYWNrcyhJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyopID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCopID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUGVuZGluZ0V2ZW50cyhpbnQpID0gMDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcAppbmRleCAzYTIxYTc4MWIwNTY1
YjExZDQ3NTNlMzcyNzI5NzE2OTlhOTlhODA1Li44OGY5ODUyYWNlZjRjNmU4OWE1ODllNDUyNTll
MjJiMWYzODZiMWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJU
cmFuc2FjdGlvbkJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwCkBAIC03MiwyNCArNzIsNiBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjphYm9ydCgpCiAgICAgbV93ZWJJREJUcmFuc2Fj
dGlvbi0+YWJvcnQoKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6cmVn
aXN0ZXJPcGVuQ3Vyc29yKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsKikKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94
eTo6dW5yZWdpc3Rlck9wZW5DdXJzb3IoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGwqKQot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5OjpzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPikKLXsKLSAg
ICAvLyBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkIGFzIGl0J3MgdGhlIGltcGwgb2JqZWN0
cyB3aG8gZ2V0IHRvCi0gICAgLy8gZXhlY3V0ZSB0YXNrcyBpbiB0aGUgYnJvd3NlciBwcm9jZXNz
LgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9p
ZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkKIHsK
ICAgICBtX3dlYklEQlRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQ
cm94eS5oCmluZGV4IDU4OTE4ZjY4Y2YzZDQ4ODA2ZGM1MzVhNTIzNDFmZjc2YmZlZjkxNmQuLjdl
NzQ4NmJkN2MzMjA2NmNjMDJkNjc2MWM4MDk3YzliY2RmNTMzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaApA
QCAtNDIsMTkgKzQyLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBtb2Rl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOwogICAgIHZpcnR1YWwg
dm9pZCBhYm9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgUGFzc093blB0cjxXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CiAgICAgdmlydHVhbCB2b2lkIGRpZENv
bXBsZXRlVGFza0V2ZW50cygpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3MoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25DYWxsYmFja3MqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJP
cGVuQ3Vyc29yKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB2
b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsKik7
Ci0gICAgdmlydHVhbCB2b2lkIGFkZFBlbmRpbmdFdmVudHMoaW50KSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CiAKICAgICBXZWJJREJUcmFuc2FjdGlvbiogZ2V0V2ViSURCVHJhbnNhY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3dlYklEQlRyYW5zYWN0aW9uLmdldCgpOyB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>