<?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>179202</bug_id>
          
          <creation_ts>2017-11-02 14:55:39 -0700</creation_ts>
          <short_desc>Only cage double butterfly accesses</short_desc>
          <delta_ts>2017-11-15 12:20:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Safari Technology Preview</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1367566</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-11-02 14:55:39 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369141</commentid>
    <comment_count>1</comment_count>
      <attachid>326240</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-11-07 12:43:47 -0800</bug_when>
    <thetext>Created attachment 326240
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369272</commentid>
    <comment_count>2</comment_count>
      <attachid>326240</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-07 16:50:44 -0800</bug_when>
    <thetext>Comment on attachment 326240
patch

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

r=me with issues addressed.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1238
&gt;  macro storePropertyAtVariableOffset(propertyOffsetAsInt, objectAndStorage, value, scratch)

It doesn&apos;t hurt to leave it but scratch is now unused.

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:3250
&gt; +    return Butterfly::createOrGrowPropertyStorage(butterfly(), vm, this, structure(vm), oldSize, newSize);

Why is this case not caged?  I see that Butterfly::createOrGrowPropertyStorage() does mem copying.  Either Butterfly::createOrGrowPropertyStorage() should always cage the butterfly if not null, or it we should do a null check + caging here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369325</commentid>
    <comment_count>3</comment_count>
      <attachid>326298</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-11-07 20:47:38 -0800</bug_when>
    <thetext>Created attachment 326298
patch for landing

Thanks for the review. I&apos;ve removed the scratch register and I&apos;ve made Butterfly:createOrGrowPropertyStorage cage when oldButterfly is non-null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369344</commentid>
    <comment_count>4</comment_count>
      <attachid>326298</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-07 22:29:34 -0800</bug_when>
    <thetext>Comment on attachment 326298
patch for landing

Clearing flags on attachment: 326298

Committed r224564: &lt;https://trac.webkit.org/changeset/224564&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369345</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-07 22:29:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369397</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-11-08 05:04:12 -0800</bug_when>
    <thetext>Oh, this improves ARES-6 by 4.4% at AWFY.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372123</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-15 12:20:32 -0800</bug_when>
    <thetext>&lt;rdar://problem/35567338&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326240</attachid>
            <date>2017-11-07 12:43:47 -0800</date>
            <delta_ts>2017-11-07 20:47:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>30810</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0NTQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDE3LTExLTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE9ubHkgY2FnZSBkb3VibGUgYnV0dGVyZmx5IGFjY2Vzc2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkyMDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgY2FnaW5nIGZy
b20gYWxsIGJ1dHRlcmZseSBhY2Nlc3NlcyBleGNlcHQgZG91YmxlIGxvYWRzL3N0b3Jlcy4KKyAg
ICAgICAgVGhpcyBpcyBhIHBlcmZvcm1hbmNlIHZzIHNlY3VyaXR5IHRyYWRlb2ZmLiBEb3VibGUg
bG9hZHMvc3RvcmVzIGFyZSB0aGUgb25seSBidXR0ZXJmbHkKKyAgICAgICAgbG9hZHMvc3RvcmVz
IHRoYXQgY2FuIHdyaXRlIGFyYml0cmFyeSBiaXQgcGF0dGVybnMsIHNvIHdlIGNob29zZSB0byBr
ZWVwIHRoZW0gc2FmZQorICAgICAgICBieSBjYWdpbmcuIFRoZSBvdGhlciBsb2FkL3N0b3JlcyB3
ZSBhcmUgbm8gbG9uZ2VyIGNhZ2luZyB0byBnZXQgYmFjayBwZXJmb3JtYW5jZSBvbgorICAgICAg
ICB2YXJpb3VzIGJlbmNobWFya3MuCisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmR1
bXBDYWNoZVNpemVzQW5kQ3Jhc2gpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlQXJyYXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdGaXhlZEJ1dHRlcmZseUFjY2Vz
c1VuY2FnaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVSZXN0KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXREaXJlY3RQbmFtZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c0xvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRBcnJheVN0b3JhZ2VMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0Nv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0F1eGlsaWFyeUJh
cnJpZXIuaDoKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6b3BlcmF0b3ItPiBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVy
Zmx5OjpjYWdlZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91c0RvdWJsZSk6
CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpK
U0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1
bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUlubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6cHVzaElubGluZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpoZWFwU25hcHNob3QpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkVG9JbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVMZW5n
dGhTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0
ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3Rv
cmFnZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldElu
ZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0cnlHZXRJbmRleFF1aWNrbHkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSBjb25zdCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpidXR0ZXJmbHkpOgorCiAyMDE3LTExLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KIAogICAgICAgICBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoKSBzaG91bGQgZXhj
bHVkZSB0aGUgcmVzdWx0IHJlZ2lzdGVyIHdoZW4gcmVzdG9yaW5nIHJlZ2lzdGVycyBhZnRlciBh
IGNhbGwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCShyZXZpc2lvbiAyMjQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNCw3ICs2MjQsNiBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
Rm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAogICAgICAgICAgICAg
ICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgaml0LmNhZ2UoR2lnYWNh
Z2U6OkpTVmFsdWUsIGxvYWRlZFZhbHVlR1BSKTsKICAgICAgICAgICAgICAgICBzdG9yYWdlR1BS
ID0gbG9hZGVkVmFsdWVHUFI7CiAgICAgICAgICAgICB9CiAKQEAgLTk3NSw3ICs5NzQsNiBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogCiAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5jYWdlKEdpZ2FjYWdlOjpKU1ZhbHVlLCBzY3JhdGNoR1BSMyk7CiAKICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNj
cmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hH
UFIyID0gYXZhaWxhYmxlCkBAIC0xMDU0LDEwICsxMDUyLDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgKwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGlu
ZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoIWFsbG9jYXRpbmcpIHsKKyAgICAgICAgICAgIGlmICghYWxsb2Nh
dGluZykKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgaml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAg
dmFsdWVSZWdzLAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKQEAg
LTEwOTMsNyArMTA4OSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmUKICAgICAgICAgCiAgICAgY2FzZSBBcnJheUxlbmd0aDogewogICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGppdC5jYWdlKEdpZ2FjYWdlOjpKU1ZhbHVlLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAg
ICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZCgKICAgICAgICAgICAgIGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw2IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXMKICAgICAgICAg
aml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgdmFsdWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1b3Vz
U2hhcGUpKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHZhbHVlKTsKLSAgICAgICAgaml0LmNhZ2Uo
R2lnYWNhZ2U6OkpTVmFsdWUsIHZhbHVlKTsKICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3ModmFsdWUsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCB2YWx1ZSk7
CiAgICAgICAgIGppdC5ib3hJbnQzMihzY3JhdGNoR1BSLCByZWdzKTsKIApAQCAtNzQsNyArNzMs
NiBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzCiAgICAgICAgIGpp
dC5sb2FkUHRyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksCiAgICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgIGpp
dC5jYWdlKEdpZ2FjYWdlOjpKU1ZhbHVlLCB2YWx1ZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSID0gdmFsdWU7CiAgICAgICAgIGppdC5sb2FkVmFsdWUoCiAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgMHgwMDBhYjIxY2EpLCByZWdzKTsKQEAgLTExOCw3
ICsxMTYsNiBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzCiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MDAwYWIyMWNhKSk7CiAKICAg
ICAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUpOwotICAgICAgICBqaXQuY2FnZShHaWdhY2FnZTo6
SlNWYWx1ZSwgdmFsdWUpOwogICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAgIHJl
Z3MsCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCAxMjAzNDIpKTsK
QEAgLTE3Myw3ICsxNzAsNiBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVy
dHlBCiAgICAgICAgIHN0b3JhZ2UgPSBiYXNlOwogICAgIGVsc2UgewogICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgdmFsdWUucGF5bG9hZEdQUigpKTsKLSAgICAgICAgaml0LmNhZ2UoR2lnYWNhZ2U6OkpT
VmFsdWUsIHZhbHVlLnBheWxvYWRHUFIoKSk7CiAgICAgICAgIHN0b3JhZ2UgPSB2YWx1ZS5wYXls
b2FkR1BSKCk7CiAgICAgfQogICAgIApAQCAtMjM1LDcgKzIzMSw2IEBAIGJvb2wgSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVIKICAgICAgICAgc3RvcmFnZSA9IGdldFNjcmF0Y2hS
ZWdpc3RlcihzdHViSW5mbyk7CiAgICAgICAgIEFTU0VSVChzdG9yYWdlICE9IEludmFsaWRHUFJS
ZWcpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZSk7Ci0gICAgICAgIGppdC5jYWdlKEdp
Z2FjYWdlOjpKU1ZhbHVlLCBzdG9yYWdlKTsKICAgICB9CiAKICAgICBqaXQuc3RvcmVWYWx1ZSgK
QEAgLTI3NCw3ICsyNjksNiBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0
aChTCiAgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAog
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihhcnJheS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFs
dWUucGF5bG9hZEdQUigpKTsKLSAgICBqaXQuY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgdmFsdWUu
cGF5bG9hZEdQUigpKTsKICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyh2YWx1
ZS5wYXlsb2FkR1BSKCksIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCB2YWx1ZS5wYXls
b2FkR1BSKCkpOwogICAgIGppdC5ib3hJbnQzMih2YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXhlZEJ1dHRlcmZseUFjY2Vz
c1VuY2FnaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4ZWRCdXR0ZXJmbHlBY2Nlc3NVbmNhZ2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMjI0
NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXhlZEJ1dHRlcmZseUFjY2Vz
c1VuY2FnaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMzggQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NDkyNgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2Nl
c3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgSGVhcCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB0b0V4Y2x1ZGUgPSBudWxscHRyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0FycmF5TW9kZSgpICYmIG5vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6RG91YmxlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
RXhjbHVkZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFycmF5SW5kZXhPZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9F
eGNsdWRlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5udW1DaGlsZHJlbigpID09
IDMgPyAyIDogMykubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b0V4Y2x1ZGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b0V4Y2x1ZGUgPSBub2RlLT5jaGlsZDMoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRXhj
bHVkZSA9IG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9FeGNsdWRlID0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAzKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBuZWVkQ2FnaW5nLmFkZChlZGdlLm5v
ZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLm5vZGUoKSAh
PSB0b0V4Y2x1ZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5lZWRDYWdpbmcuYWRkKGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3ODMsNyAr
NTc4Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICAgICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsoJm1faml0KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7
Ci0gICAgICAgIG1faml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHNjcmF0Y2gyR1BSKTsKICAg
ICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaDFHUFIpOwogICAgICAgICBtX2ppdC5z
dWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7
CiAgICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2gxR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjQ0OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzI2OSw3ICs3MjY5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVJlc3QoTgogICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5
LmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YXJyYXlSZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQ
Uik7Ci0gICAgICAgIG1faml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIGJ1dHRlcmZseUdQUik7
CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNraXBMb29wID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhcnJheUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDApKTsK
ICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoYXJyYXlMZW5ndGhHUFIsIGN1cnJlbnRM
ZW5ndGhHUFIpOwpAQCAtNzMzOSw3ICs3MzM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVNwcmVhZChOb2RlKgogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzY3JhdGNoMUdQUiwgVHJ1c3RlZEltbTMyKENvbnRpZ3Vv
dXNTaGFwZSAtIEludDMyU2hhcGUpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
bGVuZ3RoR1BSKTsKLSAgICAgICAgbV9qaXQuY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgbGVuZ3Ro
R1BSKTsKKyAgICAgICAgbV9qaXQuY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgbGVuZ3RoR1BSKTsg
Ly8gV2UgbWF5IGRvIGEgZG91YmxlIG1lbWNweSBsb29wIGJlbG93LCBzbyB3ZSBjb25zZXJ2YXRp
dmVseSBjYWdlLgogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bGVuZ3RoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBsZW5ndGhHUFIp
OwogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihKU1ZhbHVlKSA9PSA4ICYmIDEgPDwgMyA9
PSA4LCAiVGhpcyBpcyBzdHJvbmdseSBhc3N1bWVkIGluIHRoZSBjb2RlIGJlbG93LiIpOwogICAg
ICAgICBtX2ppdC5tb3ZlKGxlbmd0aEdQUiwgc2NyYXRjaDFHUFIpOwpAQCAtNzM1MCw3ICs3MzQ5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKgogICAgICAgICBt
X2ppdC5zdG9yZTMyKGxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBKU0ZpeGVkQXJyYXk6Om9mZnNldE9mU2l6ZSgpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaDFHUFIpOwotICAgICAgICBtX2ppdC5jYWdlKEdpZ2FjYWdlOjpKU1Zh
bHVlLCBzY3JhdGNoMUdQUik7CisgICAgICAgIG1faml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUs
IHNjcmF0Y2gxR1BSKTsgLy8gV2UgbWF5IGRvIGEgZG91YmxlIG1lbWNweSBsb29wIGJlbG93LCBz
byB3ZSBjb25zZXJ2YXRpdmVseSBjYWdlLgogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBkb25lOwogCkBAIC03MzczLDcgKzczNzIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU3ByZWFkKE5vZGUqCiAKICAgICAgICAgaXNEb3VibGVBcnJheS5saW5rKCZtX2ppdCk7
CiAgICAgICAgIHsKLQogICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBsZW5ndGhHUFIpKTsKICAgICAgICAgICAgIGF1dG8gbG9v
cFN0YXJ0ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgbGVuZ3RoR1BSKTsKQEAgLTc0NjAsNyArNzQ1OCw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGgKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgaW5kZXhHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFn
ZUdQUik7Ci0gICAgICAgIG1faml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHN0b3JhZ2VHUFIp
OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigp
OyArK2kpIHsKICAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCBpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM0OSw3ICs5MzQ5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIG1fb3V0
LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNo
ZWRJbmxpbmVDYXBhY2l0eSkpKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0Lmxv
YWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGNh
Z2VkKEdpZ2FjYWdlOjpKU1ZhbHVlLCBzdG9yYWdlKSwgcmVhbEluZGV4LCBTY2FsZUVpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpKSk7CisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQu
YmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBzdG9yYWdlLCByZWFs
SW5kZXgsIFNjYWxlRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSkpKTsKICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNl
LCBjb250aW51YXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcs
NyArMTg3LDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzTG9hZChJbgogICAg
IAogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0
ZWRJbW0zMihleHBlY3RlZFNoYXBlKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY2FnZShHaWdhY2FnZTo6SlNW
YWx1ZSwgcmVnVDIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwogICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVn
VDApOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKSk7CkBA
IC0yMDMsNyArMjAyLDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2Fk
KAogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihBYm92ZSwgcmVnVDMsIFRydXN0ZWRJ
bW0zMihTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgLSBBcnJheVN0b3JhZ2VTaGFwZSkpOwogCiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMik7Ci0gICAgY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgcmVnVDIpOwogICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
KSwgcmVnVDApOwpAQCAtMzQ1LDcgKzM0Myw4IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXMKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwogICAgIAogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHJlZ1QyKTsKKyAgICBpZiAoaW5kZXhpbmdTaGFwZSA9
PSBEb3VibGVTaGFwZSkKKyAgICAgICAgY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgcmVnVDIpOwog
ICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAgIExh
YmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKQEAgLTQwMSw3ICs0MDAsNiBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAgICAgCiAgICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNo
YXBlKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMik7Ci0gICAgY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgcmVnVDIpOwogICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIEp1bXAg
ZW1wdHkgPSBicmFuY2hUZXN0NjQoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNF
aWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwpAQCAtODc3LDcgKzg3NSw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWMKICAgICAgICAgICAgICAg
ICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gp
OwotICAgICAgICAgICAgY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgc2NyYXRjaCk7CiAgICAgICAg
ICAgICBuZWczMihvZmZzZXQpOwogICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0
LCBvZmZzZXQpOwogICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdCk7CkBAIC05OTcsNyArOTk0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHJlZ1QwKTsKICAgICAgICAgICAgIGxvYWRQdHIo
b3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAg
ICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwg
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjI0NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyMjQs
NyArMTIyNCw3IEBAIF9sbGludF9vcF9pc19vYmplY3Q6CiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0
VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFs
dWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwg
LmlzSW5saW5lCi0gICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6
QmFzZVB0cnM6OmpzVmFsdWUsIGNvbnN0ZXhwciBKU1ZBTFVFX0dJR0FDQUdFX01BU0ssIEpTT2Jq
ZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgdmFs
dWUpCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBv
YmplY3RBbmRTdG9yYWdlCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgc3hpMnEg
cHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkK
QEAgLTEyMzcsNyArMTIzNyw3IEBAIGVuZAogCiBtYWNybyBzdG9yZVByb3BlcnR5QXRWYXJpYWJs
ZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSwgc2Ny
YXRjaCkKICAgICBiaWx0IHByb3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
LCAuaXNJbmxpbmUKLSAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdl
OjpCYXNlUHRyczo6anNWYWx1ZSwgY29uc3RleHByIEpTVkFMVUVfR0lHQUNBR0VfTUFTSywgSlNP
YmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlLCBz
Y3JhdGNoKQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdl
XSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4
aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJl
YWR5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5
QmFycmllci5oCShyZXZpc2lvbiAyMjQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDggQEAg
cHVibGljOgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CiAgICAgdm9pZCBzZXRXaXRo
b3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV92YWx1ZSA9IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSk7
IH0KKworICAgIFQgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAgICAgCiBw
cml2YXRlOgogICAgIFQgbV92YWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAyMjQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2Uu
aCIKKyNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMDIsNiArMTAzLDcgQEAgcHVibGljOgogICAgIH0K
ICAgICAKICAgICBjaGFyKiBwb2ludGVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odGhpcyk7IH0KKyAgICBCdXR0ZXJmbHkqIGNhZ2VkKCkgeyByZXR1cm4gR2lnYWNhZ2U6OmNh
Z2VkKEdpZ2FjYWdlOjpKU1ZhbHVlLCB0aGlzKTsgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZz
ZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJy
YXlCdWZmZXIoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hl
YWRlcjo6b2Zmc2V0T2ZBcnJheUJ1ZmZlcigpOyB9CkBAIC0xMjksNyArMTMxLDcgQEAgcHVibGlj
OgogICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXls
b2FkPEFycmF5U3RvcmFnZT4oKTsgfQogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjb250aWd1b3Vz
SW50MzIoKSB7IHJldHVybiBDb250aWd1b3VzSlNWYWx1ZXMoaW5kZXhpbmdQYXlsb2FkPFdyaXRl
QmFycmllcjxVbmtub3duPj4oKSwgdmVjdG9yTGVuZ3RoKCkpOyB9CiAKLSAgICBDb250aWd1b3Vz
RG91YmxlcyBjb250aWd1b3VzRG91YmxlKCkgeyByZXR1cm4gQ29udGlndW91c0RvdWJsZXMoaW5k
ZXhpbmdQYXlsb2FkPGRvdWJsZT4oKSwgdmVjdG9yTGVuZ3RoKCkpOyB9CisgICAgQ29udGlndW91
c0RvdWJsZXMgY29udGlndW91c0RvdWJsZSgpIHsgcmV0dXJuIENvbnRpZ3VvdXNEb3VibGVzKGNh
Z2VkKCktPmluZGV4aW5nUGF5bG9hZDxkb3VibGU+KCksIHZlY3Rvckxlbmd0aCgpKTsgfQogICAg
IENvbnRpZ3VvdXNKU1ZhbHVlcyBjb250aWd1b3VzKCkgeyByZXR1cm4gQ29udGlndW91c0pTVmFs
dWVzKGluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+KCksIHZlY3Rvckxlbmd0
aCgpKTsgfQogICAgIAogICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21Db250aWd1b3VzKFdyaXRl
QmFycmllcjxVbmtub3duPiogY29udGlndW91cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMjQ0OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU4LDcgKzU1
OCw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxs
KCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKICAgICBz
d2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICBp
ZiAoIW5ld0xlbmd0aCkKQEAgLTYyOCw3ICs2MjgsNyBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
dGhpcy0+YnV0dGVyZmx5KCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewog
ICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTg3OSw3ICs4NzksNyBAQCBib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBS
RUxFQVNFX0FTU0VSVChjb3VudCA+IDApOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRo
aXMtPmJ1dHRlcmZseSgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAg
ICBjYXNlIEFycmF5Q2xhc3M6CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5
cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTEwNTgsNyArMTA1OCw3IEBAIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7
CisgICAgICAgIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwogCiAgICAgICAgIC8vIFdl
IGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhpbmdzIGFy
b3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJvdWdoIHNo
aWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJheVN0b3Jh
Z2UgbW9kZS4KQEAgLTExMDIsNyArMTEwMiw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
V2l0aEFueUluZGV4aW4KICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CisgICAgICAgIGJ1dHRlcmZseSA9
IHRoaXMtPmJ1dHRlcmZseSgpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVj
ayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0aGluZ3MgYXJvdW5kIHNvIHRoYXQg
d2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRocm91Z2ggc2hpZnRpbmcgYW5kIHRo
ZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFycmF5U3RvcmFnZSBtb2RlLgpAQCAt
MTE0NSw3ICsxMTQ1LDcgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4
ZQogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvcjsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVO
dWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKICAg
ICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpA
QCAtMTIxOCw3ICsxMjE4LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0
YXRlKgogICAgIC8vIEZJWE1FOiBXaGF0IHByZXZlbnRzIHRoaXMgZnJvbSBiZWluZyBjYWxsZWQg
d2l0aCBhIFJ1bnRpbWVBcnJheT8gVGhlIGxlbmd0aCBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1
cm4gMCBpbiB0aGF0IGNhc2UuCiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgoKSk7
CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgp
OworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CiAgICAgc3dp
dGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5s
aW5lcy5oCShyZXZpc2lvbiAyMjQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKU0FycmF5OjpwdXNoSW5saW5lKEUKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKIAogICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6IHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYyLDcgKzQ2Miw3IEBAIHZvaWQgSlNPYmplY3Q6OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNl
bGwKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kUHJvcGVydHlOYW1lRWRnZSh0aGlzT2JqZWN0
LCB0b1ZhbHVlLmFzQ2VsbCgpLCBlbnRyeS5rZXkpOwogICAgIH0KIAotICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CisgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKICAgICBpZiAo
YnV0dGVyZmx5KSB7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZGF0YSA9IG51bGxw
dHI7CiAgICAgICAgIHVpbnQzMl90IGNvdW50ID0gMDsKQEAgLTEwMjYsNyArMTAyNiw3IEBAIEJ1
dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGUKICAgICB1bnNpZ25lZCBwcm9w
ZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5n
dGgocHJvcGVydHlDYXBhY2l0eSwgbGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKLSAgICAgICAgbV9idXR0ZXJm
bHkuZ2V0TWF5QmVOdWxsKCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIHByb3BlcnR5Q2FwYWNpdHks
IGZhbHNlLCAwLAorICAgICAgICBidXR0ZXJmbHkoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgcHJv
cGVydHlDYXBhY2l0eSwgZmFsc2UsIDAsCiAgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
KiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0
aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKQEAg
LTExMTQsNyArMTExNCw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3Rv
cmEKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGluZGV4aW5nVHlwZSgpOwogICAgIEFTU0VS
VF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsKIAotICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlTdG9yYWdlQnV0dGVyZmx5KHZt
LCB0aGlzLCBvbGRTdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yTGVuZ3RoLCBtX2J1dHRlcmZseS5n
ZXRNYXlCZU51bGwoKSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJh
eVN0b3JhZ2VCdXR0ZXJmbHkodm0sIHRoaXMsIG9sZFN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JM
ZW5ndGgsIGJ1dHRlcmZseSgpKTsKICAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJlLCBzdWdnZXN0ZWRB
cnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogICAgIG51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJm
bHkodm0sIG9sZFN0cnVjdHVyZUlELCBuZXdCdXR0ZXJmbHkpOwpAQCAtMTEzMiw3ICsxMTMyLDcg
QEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZQogewogICAgIEFTU0VS
VChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQz
MigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKIApAQCAtMzE3Myw3ICsz
MTczLDcgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogCiBib29s
IEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogewot
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKS0+Y2FnZWQoKTsKICAgICAKICAgICBB
U1NFUlQobGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIEFTU0VSVCho
YXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkg
fHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBl
KCkpKTsKQEAgLTMyMzMsNyArMzIzMyw3IEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRT
aHJpbmtCdXR0ZXIKICAgICBBU1NFUlQoIW1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUoKSkpOwogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPnJlc2l6ZUFycmF5
KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkp
OworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCktPmNhZ2VkKCktPnJl
c2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KGxlbmd0aCkpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CiAg
ICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwpAQCAtMzI0Nyw3ICszMjQ3LDcgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6
YWxsb2NhdGVNb3JlT3V0T2ZMaQogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5j
dGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQogICAgIC8vIGNh
cGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJl
IGluLXBsYWNlLgogCi0gICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlT
dG9yYWdlKG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpLCB2bSwgdGhpcywgc3RydWN0dXJlKHZt
KSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93
UHJvcGVydHlTdG9yYWdlKGJ1dHRlcmZseSgpLCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xk
U2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIHN0YXRpYyBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
KiBnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEN1c3RvbUdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyLCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpUeXBlIHR5cGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIyNDQ5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1NSw3ICsyNTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjYW5HZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBl
KCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNh
c2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKQEAgLTI4MSw3ICsyODEsNyBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAg
ICAgewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwor
ICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwogICAgICAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGJ1dHRlcmZseS0+Y29udGln
dW91cygpW2ldLmdldCgpLmFzSW50MzIoKSk7CkBAIC0yOTksNyArMjk5LDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICBKU1ZhbHVlIHRyeUdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKSBjb25z
dAogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRN
YXlCZU51bGwoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyktPmJ1dHRlcmZseSgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBj
YXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CkBAIC0zNTMsNyArMzUzLDcgQEAgcHVi
bGljOgogICAgICAgICAKICAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQog
ICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlC
ZU51bGwoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHko
KTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9C
TEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5H
X1RZUEVTOgpAQCAtNjY5LDggKzY2OSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGlubGlu
ZVN0b3JhZ2VVbnNhZmUoKTsKICAgICB9CiAgICAgICAgIAotICAgIGNvbnN0IEJ1dHRlcmZseSog
YnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7IH0K
LSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldE1heUJl
TnVsbCgpOyB9CisgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVy
biBtX2J1dHRlcmZseS5nZXQoKTsgfQorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KICAgICAKICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBv
dXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpOyB9CiAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVy
biBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KQEAgLTEwNTIsNyArMTA1Miw3IEBA
IHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgcHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFN0cnVjdHVy
ZUlELCBTdHJ1Y3R1cmUqKTsKIAogcHJvdGVjdGVkOgotICAgIENhZ2VkQmFycmllclB0cjxHaWdh
Y2FnZTo6SlNWYWx1ZSwgQnV0dGVyZmx5PiBtX2J1dHRlcmZseTsKKyAgICBBdXhpbGlhcnlCYXJy
aWVyPEJ1dHRlcmZseSo+IG1fYnV0dGVyZmx5OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2
YXRlOgogICAgIHVpbnQzMl90IG1fcGFkZGluZzsK
</data>
<flag name="review"
          id="345580"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326298</attachid>
            <date>2017-11-07 20:47:38 -0800</date>
            <delta_ts>2017-11-07 22:29:34 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>32294</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0NTQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDE3LTExLTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE9ubHkgY2FnZSBkb3VibGUgYnV0dGVyZmx5IGFjY2Vzc2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkyMDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBNYXJrIExhbS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgY2FnaW5nIGZyb20gYWxs
IGJ1dHRlcmZseSBhY2Nlc3NlcyBleGNlcHQgZG91YmxlIGxvYWRzL3N0b3Jlcy4KKyAgICAgICAg
VGhpcyBpcyBhIHBlcmZvcm1hbmNlIHZzIHNlY3VyaXR5IHRyYWRlb2ZmLiBEb3VibGUgbG9hZHMv
c3RvcmVzIGFyZSB0aGUgb25seSBidXR0ZXJmbHkKKyAgICAgICAgbG9hZHMvc3RvcmVzIHRoYXQg
Y2FuIHdyaXRlIGFyYml0cmFyeSBiaXQgcGF0dGVybnMsIHNvIHdlIGNob29zZSB0byBrZWVwIHRo
ZW0gc2FmZQorICAgICAgICBieSBjYWdpbmcuIFRoZSBvdGhlciBsb2FkL3N0b3JlcyB3ZSBhcmUg
bm8gbG9uZ2VyIGNhZ2luZyB0byBnZXQgYmFjayBwZXJmb3JtYW5jZSBvbgorICAgICAgICB2YXJp
b3VzIGJlbmNobWFya3MuCisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmR1bXBDYWNo
ZVNpemVzQW5kQ3Jhc2gpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdGaXhlZEJ1dHRlcmZseUFjY2Vzc1VuY2Fn
aW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVSZXN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXREaXJl
Y3RQbmFtZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0Q29udGlndW91c0xvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3Vv
dXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIu
aDoKKyAgICAgICAgKEpTQzo6QXV4aWxpYXJ5QmFycmllcjo6b3BlcmF0b3ItPiBjb25zdCk6Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpj
YWdlZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91c0RvdWJsZSk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5
Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6cHVzaElubGluZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpoZWFwU25hcHNob3QpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5k
ZWNpZGVkVG9JbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXJmbHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVp
Y2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0cnlHZXRJbmRleFF1aWNrbHkgY29uc3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpidXR0ZXJmbHkpOgorCiAyMDE3LTExLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoKSBzaG91bGQgZXhjbHVkZSB0
aGUgcmVzdWx0IHJlZ2lzdGVyIHdoZW4gcmVzdG9yaW5nIHJlZ2lzdGVycyBhZnRlciBhIGNhbGwu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
CShyZXZpc2lvbiAyMjQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNCw3ICs2MjQsNiBAQCB2b2lkIEFjY2Vz
c0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgaml0LmxvYWRQ
dHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9yQWNj
ZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgICAg
ICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgaml0LmNhZ2UoR2lnYWNhZ2U6OkpT
VmFsdWUsIGxvYWRlZFZhbHVlR1BSKTsKICAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gbG9h
ZGVkVmFsdWVHUFI7CiAgICAgICAgICAgICB9CiAKQEAgLTk3NSw3ICs5NzQsNiBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgogCiAgICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5jYWdlKEdpZ2FjYWdlOjpKU1ZhbHVlLCBzY3JhdGNoR1BSMyk7CiAKICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hH
UFIzID0gb2xkIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0g
YXZhaWxhYmxlCkBAIC0xMDU0LDEwICsxMDUyLDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0
ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3Jh
Z2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoIWFsbG9jYXRpbmcpIHsKKyAgICAgICAgICAgIGlmICghYWxsb2NhdGluZykK
ICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgaml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVS
ZWdzLAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBv
ZmZzZXRJbkJ1dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKQEAgLTEwOTMs
NyArMTA4OSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgCiAgICAgY2FzZSBBcnJheUxlbmd0aDogewogICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIGppdC5jYWdlKEdpZ2FjYWdlOjpKU1ZhbHVlLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBz
dGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZCgKICAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw2IEBA
IHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXMKICAgICAgICAgaml0LnBh
dGNoYWJsZUJyYW5jaDMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgdmFs
dWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1b3VzU2hhcGUp
KTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHZhbHVlKTsKLSAgICAgICAgaml0LmNhZ2UoR2lnYWNh
Z2U6OkpTVmFsdWUsIHZhbHVlKTsKICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3ModmFsdWUsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAg
ICAgIGppdC5ib3hJbnQzMihzY3JhdGNoR1BSLCByZWdzKTsKIApAQCAtNzQsNyArNzMsNiBAQCB2
b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzCiAgICAgICAgIGppdC5sb2Fk
UHRyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksCiAgICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgIGppdC5jYWdl
KEdpZ2FjYWdlOjpKU1ZhbHVlLCB2YWx1ZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
dmFsdWU7CiAgICAgICAgIGppdC5sb2FkVmFsdWUoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgMHgwMDBhYjIxY2EpLCByZWdzKTsKQEAgLTExOCw3ICsxMTYs
NiBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MDAwYWIyMWNhKSk7CiAKICAgICAgICAg
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgdmFsdWUpOwotICAgICAgICBqaXQuY2FnZShHaWdhY2FnZTo6SlNWYWx1
ZSwgdmFsdWUpOwogICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAgIHJlZ3MsCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCAxMjAzNDIpKTsKQEAgLTE3
Myw3ICsxNzAsNiBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBCiAg
ICAgICAgIHN0b3JhZ2UgPSBiYXNlOwogICAgIGVsc2UgewogICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
dmFsdWUucGF5bG9hZEdQUigpKTsKLSAgICAgICAgaml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUs
IHZhbHVlLnBheWxvYWRHUFIoKSk7CiAgICAgICAgIHN0b3JhZ2UgPSB2YWx1ZS5wYXlsb2FkR1BS
KCk7CiAgICAgfQogICAgIApAQCAtMjM1LDcgKzIzMSw2IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVIKICAgICAgICAgc3RvcmFnZSA9IGdldFNjcmF0Y2hSZWdpc3Rl
cihzdHViSW5mbyk7CiAgICAgICAgIEFTU0VSVChzdG9yYWdlICE9IEludmFsaWRHUFJSZWcpOwog
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZSk7Ci0gICAgICAgIGppdC5jYWdlKEdpZ2FjYWdl
OjpKU1ZhbHVlLCBzdG9yYWdlKTsKICAgICB9CiAKICAgICBqaXQuc3RvcmVWYWx1ZSgKQEAgLTI3
NCw3ICsyNjksNiBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTCiAg
ICAgYXV0byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihhcnJheS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUucGF5
bG9hZEdQUigpKTsKLSAgICBqaXQuY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgdmFsdWUucGF5bG9h
ZEdQUigpKTsKICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyh2YWx1ZS5wYXls
b2FkR1BSKCksIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BS
KCkpOwogICAgIGppdC5ib3hJbnQzMih2YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXhlZEJ1dHRlcmZseUFjY2Vzc1VuY2Fn
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4ZWRCdXR0ZXJmbHlBY2Nlc3NVbmNhZ2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMjI0NDk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXhlZEJ1dHRlcmZseUFjY2Vzc1VuY2Fn
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMzggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDkyNgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3Nlc092
ZXJsYXAobV9ncmFwaCwgbm9kZSwgSGVhcCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB0b0V4Y2x1ZGUgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0FycmF5TW9kZSgpICYmIG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6RG91YmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcnJheVB1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRXhjbHVk
ZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEFycmF5SW5kZXhPZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9FeGNsdWRl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5udW1DaGlsZHJlbigpID09IDMgPyAy
IDogMykubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b0V4Y2x1ZGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b0V4Y2x1ZGUgPSBub2RlLT5jaGlsZDMoKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgR2V0QnlWYWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRXhjbHVkZSA9
IG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9FeGNsdWRlID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAzKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBuZWVkQ2FnaW5nLmFkZChlZGdlLm5vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLm5vZGUoKSAhPSB0b0V4
Y2x1ZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG5l
ZWRDYWdpbmcuYWRkKGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3ODMsNyArNTc4Myw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8g
T3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
Jm1faml0KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7Ci0gICAg
ICAgIG1faml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAg
bV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaDFHUFIpOwogICAgICAgICBtX2ppdC5zdWIzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7CiAgICAg
ICAgIG1faml0Lm5lZzMyKHNjcmF0Y2gxR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjQ0OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzI2OSw3ICs3MjY5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNy
ZWF0ZVJlc3QoTgogICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5Lmdwcigp
OwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJyYXlS
ZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7Ci0g
ICAgICAgIG1faml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIGJ1dHRlcmZseUdQUik7CiAKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNraXBMb29wID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCBhcnJheUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICAg
ICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoYXJyYXlMZW5ndGhHUFIsIGN1cnJlbnRMZW5ndGhH
UFIpOwpAQCAtNzMzOSw3ICs3MzM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNw
cmVhZChOb2RlKgogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlLCBzY3JhdGNoMUdQUiwgVHJ1c3RlZEltbTMyKENvbnRpZ3VvdXNTaGFw
ZSAtIEludDMyU2hhcGUpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhhcmd1bWVudCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgbGVuZ3Ro
R1BSKTsKLSAgICAgICAgbV9qaXQuY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgbGVuZ3RoR1BSKTsK
KyAgICAgICAgbV9qaXQuY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgbGVuZ3RoR1BSKTsgLy8gV2Ug
bWF5IGRvIGEgZG91YmxlIG1lbWNweSBsb29wIGJlbG93LCBzbyB3ZSBjb25zZXJ2YXRpdmVseSBj
YWdlLgogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGVuZ3Ro
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBsZW5ndGhHUFIpOwogICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihKU1ZhbHVlKSA9PSA4ICYmIDEgPDwgMyA9PSA4LCAi
VGhpcyBpcyBzdHJvbmdseSBhc3N1bWVkIGluIHRoZSBjb2RlIGJlbG93LiIpOwogICAgICAgICBt
X2ppdC5tb3ZlKGxlbmd0aEdQUiwgc2NyYXRjaDFHUFIpOwpAQCAtNzM1MCw3ICs3MzQ5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKgogICAgICAgICBtX2ppdC5z
dG9yZTMyKGxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0Zp
eGVkQXJyYXk6Om9mZnNldE9mU2l6ZSgpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaDFHUFIpOwotICAgICAgICBtX2ppdC5jYWdlKEdpZ2FjYWdlOjpKU1ZhbHVlLCBz
Y3JhdGNoMUdQUik7CisgICAgICAgIG1faml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHNjcmF0
Y2gxR1BSKTsgLy8gV2UgbWF5IGRvIGEgZG91YmxlIG1lbWNweSBsb29wIGJlbG93LCBzbyB3ZSBj
b25zZXJ2YXRpdmVseSBjYWdlLgogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBk
b25lOwogCkBAIC03MzczLDcgKzczNzIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
U3ByZWFkKE5vZGUqCiAKICAgICAgICAgaXNEb3VibGVBcnJheS5saW5rKCZtX2ppdCk7CiAgICAg
ICAgIHsKLQogICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBsZW5ndGhHUFIpKTsKICAgICAgICAgICAgIGF1dG8gbG9vcFN0YXJ0
ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgbGVuZ3RoR1BSKTsKQEAgLTc0NjAsNyArNzQ1OCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOZXdBcnJheVdpdGgKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigw
KSwgaW5kZXhHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7
Ci0gICAgICAgIG1faml0LmNhZ2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHN0b3JhZ2VHUFIpOwogCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigpOyArK2kp
IHsKICAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCBpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM0OSw3ICs5MzQ5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIG1fb3V0LmxvYWQz
MihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRJbmxp
bmVDYXBhY2l0eSkpKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG91
dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCht
X291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGNhZ2VkKEdp
Z2FjYWdlOjpKU1ZhbHVlLCBzdG9yYWdlKSwgcmVhbEluZGV4LCBTY2FsZUVpZ2h0LCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkpKSk7CisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUlu
ZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBzdG9yYWdlLCByZWFsSW5kZXgs
IFNjYWxlRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSkpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250
aW51YXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3
LDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzTG9hZChJbgogICAgIAogICAg
IGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0z
MihleHBlY3RlZFNoYXBlKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwg
cmVnVDIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwog
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwog
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKSk7CkBAIC0yMDMs
NyArMjAyLDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKAogICAg
IGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihBYm92ZSwgcmVnVDMsIFRydXN0ZWRJbW0zMihT
bG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgLSBBcnJheVN0b3JhZ2VTaGFwZSkpOwogCiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgcmVnVDIpOwogICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVn
VDApOwpAQCAtMzQ1LDcgKzM0Myw4IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0Nv
bnRpZ3VvdXMKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qy
LCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNhZ2Uo
R2lnYWNhZ2U6OkpTVmFsdWUsIHJlZ1QyKTsKKyAgICBpZiAoaW5kZXhpbmdTaGFwZSA9PSBEb3Vi
bGVTaGFwZSkKKyAgICAgICAgY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgcmVnVDIpOwogICAgIEp1
bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAgIExhYmVsIHN0
b3JlUmVzdWx0ID0gbGFiZWwoKTsKQEAgLTQwMSw3ICs0MDAsNiBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAgICAgCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgcmVnVDIpOwogICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIEp1bXAgZW1wdHkg
PSBicmFuY2hUZXN0NjQoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwpAQCAtODc3LDcgKzg3NSw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWMKICAgICAgICAgICAgICAgICBpc091
dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAg
ICAgICAgICAgY2FnZShHaWdhY2FnZTo6SlNWYWx1ZSwgc2NyYXRjaCk7CiAgICAgICAgICAgICBu
ZWczMihvZmZzZXQpOwogICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZz
ZXQpOwogICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlc3VsdCk7CkBAIC05OTcsNyArOTk0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGNh
Z2UoR2lnYWNhZ2U6OkpTVmFsdWUsIHJlZ1QwKTsKICAgICAgICAgICAgIGxvYWRQdHIob3BlcmFu
ZFNsb3QsIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAgICAgICBz
dG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMjI0NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyMjQsNyArMTIy
NCw3IEBAIF9sbGludF9vcF9pc19vYmplY3Q6CiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFi
bGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAg
ICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5s
aW5lCi0gICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0
cnM6OmpzVmFsdWUsIGNvbnN0ZXhwciBKU1ZBTFVFX0dJR0FDQUdFX01BU0ssIEpTT2JqZWN0Ojpt
X2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCisg
ICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RB
bmRTdG9yYWdlCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgc3hpMnEgcHJvcGVy
dHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkKQEAgLTEy
MzUsOSArMTIzNSw5IEBAIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGUK
IGVuZAogCiAKLW1hY3JvIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zm
c2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlLCBzY3JhdGNoKQorbWFjcm8gc3RvcmVQ
cm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3Rv
cmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGlu
ZU9mZnNldCwgLmlzSW5saW5lCi0gICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBH
aWdhY2FnZTo6QmFzZVB0cnM6OmpzVmFsdWUsIGNvbnN0ZXhwciBKU1ZBTFVFX0dJR0FDQUdFX01B
U0ssIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3Rv
cmFnZSwgc2NyYXRjaCkKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5k
U3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQK
ICAgICBzeGkycSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAg
am1wIC5yZWFkeQpAQCAtMTQ2MCw3ICsxNDYwLDcgQEAgX2xsaW50X29wX3B1dF9ieV9pZDoKICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZSh0MSwgdDIpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDUsIHQxKQotICAgIHN0b3JlUHJv
cGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIsIHQzKQorICAgIHN0b3JlUHJvcGVydHlB
dFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIpCiAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcygx
LCAzKQogICAgIGRpc3BhdGNoKGNvbnN0ZXhwciBvcF9wdXRfYnlfaWRfbGVuZ3RoKQogCkBAIC0y
MzIxLDcgKzIzMjEsNyBAQCBtYWNybyBwdXRQcm9wZXJ0eSgpCiAgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDMsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQogICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKLSAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9m
ZnNldCh0MSwgdDAsIHQyLCB0MykKKyAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0
MSwgdDAsIHQyKQogZW5kCiAKIG1hY3JvIHB1dEdsb2JhbFZhcmlhYmxlKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKHJldmlz
aW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJh
cnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KICAgICB2b2lkIHNldFdpdGhvdXRCYXJyaWVyKFUmJiB2
YWx1ZSkgeyBtX3ZhbHVlID0gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsgfQorCisgICAgVCBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgVCBt
X3ZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJ
KHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRl
cmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJJbmRl
eGluZ0hlYWRlci5oIgogI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0
Zi9HaWdhY2FnZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTEwMiw2ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIGNoYXIq
IHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQorICAg
IEJ1dHRlcmZseSogY2FnZWQoKSB7IHJldHVybiBHaWdhY2FnZTo6Y2FnZWQoR2lnYWNhZ2U6OkpT
VmFsdWUsIHRoaXMpOyB9CiAgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4
aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFk
ZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheUJ1ZmZlcigpIHsgcmV0
dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkFy
cmF5QnVmZmVyKCk7IH0KQEAgLTEyOSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgQXJyYXlTdG9y
YWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdl
PigpOyB9CiAgICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnRpZ3VvdXNJbnQzMigpIHsgcmV0dXJu
IENvbnRpZ3VvdXNKU1ZhbHVlcyhpbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+
PigpLCB2ZWN0b3JMZW5ndGgoKSk7IH0KIAotICAgIENvbnRpZ3VvdXNEb3VibGVzIGNvbnRpZ3Vv
dXNEb3VibGUoKSB7IHJldHVybiBDb250aWd1b3VzRG91YmxlcyhpbmRleGluZ1BheWxvYWQ8ZG91
YmxlPigpLCB2ZWN0b3JMZW5ndGgoKSk7IH0KKyAgICBDb250aWd1b3VzRG91YmxlcyBjb250aWd1
b3VzRG91YmxlKCkgeyByZXR1cm4gQ29udGlndW91c0RvdWJsZXMoY2FnZWQoKS0+aW5kZXhpbmdQ
YXlsb2FkPGRvdWJsZT4oKSwgdmVjdG9yTGVuZ3RoKCkpOyB9CiAgICAgQ29udGlndW91c0pTVmFs
dWVzIGNvbnRpZ3VvdXMoKSB7IHJldHVybiBDb250aWd1b3VzSlNWYWx1ZXMoaW5kZXhpbmdQYXls
b2FkPFdyaXRlQmFycmllcjxVbmtub3duPj4oKSwgdmVjdG9yTGVuZ3RoKCkpOyB9CiAgICAgCiAg
ICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUNvbnRpZ3VvdXMoV3JpdGVCYXJyaWVyPFVua25vd24+
KiBjb250aWd1b3VzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjI0NDk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcs
NiArMTA3LDggQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVPckdybwogICAg
IGlmICghb2xkQnV0dGVyZmx5KQogICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBpbnRlbmRlZE93
bmVyLCAwLCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBmYWxzZSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7
CiAKKyAgICBvbGRCdXR0ZXJmbHkgPSBvbGRCdXR0ZXJmbHktPmNhZ2VkKCk7CisKICAgICBzaXpl
X3QgcHJlQ2FwYWNpdHkgPSBvbGRCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFj
aXR5KHN0cnVjdHVyZSk7CiAgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0g
b2xkQnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyhzdHJ1Y3R1cmUpOwogICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBzdHJ1Y3R1cmUtPmhh
c0luZGV4aW5nSGVhZGVyKGludGVuZGVkT3duZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsNyAr
NTU4LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51
bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwogICAg
IHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAg
IGlmICghbmV3TGVuZ3RoKQpAQCAtNjI4LDcgKzYyOCw3IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9w
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzLT5idXR0ZXJmbHkoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7
CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtODc5LDcgKzg3OSw3IEBAIGJvb2wgSlNBcnJheTo6
c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IFJFTEVBU0VfQVNTRVJUKGNvdW50ID4gMCk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
dGhpcy0+YnV0dGVyZmx5KCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewog
ICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTEwMzUsNyArMTAzNSw3IEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5n
VHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtMTA1OCw3ICsxMDU4LDcgQEAgYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbgogICAgICAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQotICAgICAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwo
KTsKKyAgICAgICAgYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CiAKICAgICAgICAgLy8g
V2UgaGF2ZSB0byBjaGVjayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0aGluZ3Mg
YXJvdW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRocm91Z2gg
c2hpZnRpbmcgYW5kIHRoZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFycmF5U3Rv
cmFnZSBtb2RlLgpAQCAtMTEwMiw3ICsxMTAyLDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnRXaXRoQW55SW5kZXhpbgogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMs
IHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBi
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKKyAgICAgICAgYnV0dGVyZmx5
ID0gdGhpcy0+YnV0dGVyZmx5KCk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBoYXZlIHRvIGNo
ZWNrIGZvciBob2xlcyBiZWZvcmUgd2Ugc3RhcnQgbW92aW5nIHRoaW5ncyBhcm91bmQgc28gdGhh
dCB3ZSBkb24ndCBnZXQgaGFsZndheSAKICAgICAgICAgLy8gdGhyb3VnaCBzaGlmdGluZyBhbmQg
dGhlbiByZWFsaXplIHdlIHNob3VsZCBoYXZlIGJlZW4gaW4gQXJyYXlTdG9yYWdlIG1vZGUuCkBA
IC0xMTQ1LDcgKzExNDUsNyBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSog
ZXhlCiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlC
ZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwog
ICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6
CkBAIC0xMjE4LDcgKzEyMTgsNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVj
U3RhdGUqCiAgICAgLy8gRklYTUU6IFdoYXQgcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGNhbGxl
ZCB3aXRoIGEgUnVudGltZUFycmF5PyBUaGUgbGVuZ3RoIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJl
dHVybiAwIGluIHRoYXQgY2FzZS4KICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0aCgp
KTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxs
KCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKICAgICBz
d2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
bmxpbmVzLmgJKHJldmlzaW9uIDIyNDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1c2hJbmxpbmUoRQogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKKyAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwogCiAgICAgc3dpdGNoIChp
bmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjI0NDk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NjIsNyArNDYyLDcgQEAgdm9pZCBKU09iamVjdDo6aGVhcFNuYXBzaG90KEpTQ2VsbCog
Y2VsbAogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRQcm9wZXJ0eU5hbWVFZGdlKHRoaXNPYmpl
Y3QsIHRvVmFsdWUuYXNDZWxsKCksIGVudHJ5LmtleSk7CiAgICAgfQogCi0gICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwogICAgIGlm
IChidXR0ZXJmbHkpIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBkYXRhID0gbnVs
bHB0cjsKICAgICAgICAgdWludDMyX3QgY291bnQgPSAwOwpAQCAtMTAyNiw3ICsxMDI2LDcgQEAg
QnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZQogICAgIHVuc2lnbmVkIHBy
b3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxl
bmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBsZW5ndGgpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAotICAgICAgICBtX2J1dHRl
cmZseS5nZXRNYXlCZU51bGwoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgcHJvcGVydHlDYXBhY2l0
eSwgZmFsc2UsIDAsCisgICAgICAgIGJ1dHRlcmZseSgpLCB2bSwgdGhpcywgc3RydWN0dXJlLCBw
cm9wZXJ0eUNhcGFjaXR5LCBmYWxzZSwgMCwKICAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSAqIHZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVu
Z3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwpA
QCAtMTExNCw3ICsxMTE0LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlT
dG9yYQogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gaW5kZXhpbmdUeXBlKCk7CiAgICAgQVNT
RVJUX1VOVVNFRChvbGRUeXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOwogCi0g
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJheVN0b3JhZ2VCdXR0ZXJmbHko
dm0sIHRoaXMsIG9sZFN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIG1fYnV0dGVyZmx5
LmdldE1heUJlTnVsbCgpKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUFy
cmF5U3RvcmFnZUJ1dHRlcmZseSh2bSwgdGhpcywgb2xkU3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rv
ckxlbmd0aCwgYnV0dGVyZmx5KCkpOwogICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0gbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIHN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRl
cmZseSh2bSwgb2xkU3RydWN0dXJlSUQsIG5ld0J1dHRlcmZseSk7CkBAIC0xMTMyLDcgKzExMzIs
NyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlCiB7CiAgICAgQVNT
RVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0lu
dDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogCkBAIC0zMTczLDcg
KzMxNzMsNyBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAKIGJv
b2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpLT5jYWdlZCgpOwogICAgIAogICAg
IEFTU0VSVChsZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgQVNTRVJU
KGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSgp
KSB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5
cGUoKSkpOwpAQCAtMzIzMyw3ICszMjMzLDcgQEAgdm9pZCBKU09iamVjdDo6cmVhbGxvY2F0ZUFu
ZFNocmlua0J1dHRlcgogICAgIEFTU0VSVCghbV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkt
PnByZUNhcGFjaXR5KHN0cnVjdHVyZSgpKSk7CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+cmVzaXplQXJy
YXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3Ro
KSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKS0+Y2FnZWQoKS0+
cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IobGVuZ3RoKSk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsK
ICAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CkBAIC0zMjQ3LDcgKzMyNDcsNyBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0
OjphbGxvY2F0ZU1vcmVPdXRPZkxpCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1
bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5CiAgICAgLy8g
Y2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1
cmUgaW4tcGxhY2UuCiAKLSAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dQcm9wZXJ0
eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUo
dm0pLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdy
b3dQcm9wZXJ0eVN0b3JhZ2UoYnV0dGVyZmx5KCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBv
bGRTaXplLCBuZXdTaXplKTsKIH0KIAogc3RhdGljIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24qIGdldEN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uRm9yR2V0dGVyU2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBn
ZXR0ZXJTZXR0ZXIsIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjI0
NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU1LDcgKzI1NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGNhbkdl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5
cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAg
Y2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgpAQCAtMjgxLDcgKzI4MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkK
ICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CiAgICAg
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCkuYXNJbnQzMigpKTsKQEAgLTI5OSw3ICsyOTksNyBAQCBwdWJsaWM6
CiAgICAgICAgIAogICAgIEpTVmFsdWUgdHJ5R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpIGNv
bnN0CiAgICAgewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dE1heUJlTnVsbCgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNvbnN0X2Nhc3Q8
SlNPYmplY3QqPih0aGlzKS0+YnV0dGVyZmx5KCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdU
eXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
IGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKQEAgLTM1Myw3ICszNTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkp
CiAgICAgewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1h
eUJlTnVsbCgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZs
eSgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJ
TkdfVFlQRVM6CkBAIC02NjksOCArNjY5LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5s
aW5lU3RvcmFnZVVuc2FmZSgpOwogICAgIH0KICAgICAgICAgCi0gICAgY29uc3QgQnV0dGVyZmx5
KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsg
fQotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0TWF5
QmVOdWxsKCk7IH0KKyAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJl
dHVybiBtX2J1dHRlcmZseS5nZXQoKTsgfQogICAgIAogICAgIENvbnN0UHJvcGVydHlTdG9yYWdl
IG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCk7IH0KICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0
dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQpAQCAtMTA1Miw3ICsxMDUyLDcg
QEAgcHJpdmF0ZToKICAgICBQcm9wZXJ0eU9mZnNldCBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgU3RydWN0
dXJlSUQsIFN0cnVjdHVyZSopOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ2FnZWRCYXJyaWVyUHRyPEdp
Z2FjYWdlOjpKU1ZhbHVlLCBCdXR0ZXJmbHk+IG1fYnV0dGVyZmx5OworICAgIEF1eGlsaWFyeUJh
cnJpZXI8QnV0dGVyZmx5Kj4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHBy
aXZhdGU6CiAgICAgdWludDMyX3QgbV9wYWRkaW5nOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>