<?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>104422</bug_id>
          
          <creation_ts>2012-12-07 18:06:49 -0800</creation_ts>
          <short_desc>IndexedDB: Propagate more leveldb errors to script</short_desc>
          <delta_ts>2012-12-10 16:22:18 -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>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="David Grogan">dgrogan</reporter>
          <assigned_to name="David Grogan">dgrogan</assigned_to>
          <cc>alecflett</cc>
    
    <cc>jsbell</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>786332</commentid>
    <comment_count>0</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-07 18:06:49 -0800</bug_when>
    <thetext>IndexedDB: Propagate all leveldb errors to script</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786333</commentid>
    <comment_count>1</comment_count>
      <attachid>178314</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-07 18:07:02 -0800</bug_when>
    <thetext>Created attachment 178314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786336</commentid>
    <comment_count>2</comment_count>
      <attachid>178316</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-07 18:11:07 -0800</bug_when>
    <thetext>Created attachment 178316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786340</commentid>
    <comment_count>3</comment_count>
      <attachid>178318</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-07 18:16:09 -0800</bug_when>
    <thetext>Created attachment 178318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786341</commentid>
    <comment_count>4</comment_count>
      <attachid>178319</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-07 18:22:45 -0800</bug_when>
    <thetext>Created attachment 178319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786343</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-07 18:29:19 -0800</bug_when>
    <thetext>Attachment 178319 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786353</commentid>
    <comment_count>6</comment_count>
      <attachid>178321</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-07 18:37:55 -0800</bug_when>
    <thetext>Created attachment 178321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786355</commentid>
    <comment_count>7</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-07 18:43:26 -0800</bug_when>
    <thetext>Josh or Alec, could you take a look?

Everything remaining is a consistency error, rather than a leveldb IO error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787611</commentid>
    <comment_count>8</comment_count>
      <attachid>178321</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-10 11:52:13 -0800</bug_when>
    <thetext>Comment on attachment 178321
Patch

Overall LGTM (s/good/awesome/)

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        Nothing called getBool, so it is deleted.

Yeah, I had a FIXME to add it but I don&apos;t think anything was converted over to use it. :P

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:378
&gt; +                InternalError(IDBLevelDBBackingStoreReadErrorSetupMetadata);

Other places in open() eschew InternalError and increment a specific histogram (since we&apos;d hope to catch most errors here). Do the same thing here, or stick with InternalError?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:471
&gt; +        transaction-&gt;abort(error);

Use error.release()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787728</commentid>
    <comment_count>9</comment_count>
      <attachid>178321</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-10 14:39:25 -0800</bug_when>
    <thetext>Comment on attachment 178321
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:378
&gt;&gt; +                InternalError(IDBLevelDBBackingStoreReadErrorSetupMetadata);
&gt; 
&gt; Other places in open() eschew InternalError and increment a specific histogram (since we&apos;d hope to catch most errors here). Do the same thing here, or stick with InternalError?

Changed.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:471
&gt;&gt; +        transaction-&gt;abort(error);
&gt; 
&gt; Use error.release()

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787738</commentid>
    <comment_count>10</comment_count>
      <attachid>178638</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-10 14:55:25 -0800</bug_when>
    <thetext>Created attachment 178638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787792</commentid>
    <comment_count>11</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-10 15:45:45 -0800</bug_when>
    <thetext>Tony, could you review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787833</commentid>
    <comment_count>12</comment_count>
      <attachid>178638</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-10 16:22:14 -0800</bug_when>
    <thetext>Comment on attachment 178638
Patch

Clearing flags on attachment: 178638

Committed r137223: &lt;http://trac.webkit.org/changeset/137223&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787835</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-10 16:22:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178314</attachid>
            <date>2012-12-07 18:07:02 -0800</date>
            <delta_ts>2012-12-07 18:11:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104422-20121207180426.patch</filename>
            <type>text/plain</type>
            <size>23643</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM2ZTlhNjg4ZWM5ZjU5
YTE5NjIyYjc0MmY1ZGJjNzQxMmZiODk1Yi4uZTI5M2Q3ZTVlZWMxZTcxZTkzNTBlZDg3ZDY4OTI5
MWViMDg1ODJhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTEyLTA3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBhbGwgbGV2ZWxkYiBlcnJvcnMgdG8gc2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ0MjIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRo
ZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5j
dGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTYWZlSW50KToKKyAgICAgICAgKFdlYkNvcmU6Omlz
U2NoZW1hS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0VXBNZXRhZGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRNYXhPYmplY3RTdG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Omdl
dElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmV3RGF0YWJhc2VJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNl
TWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4T2JqZWN0U3RvcmVJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXROZXdWZXJzaW9uTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldE1heEluZGV4
SWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAg
ICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVy
YXRpb246OnBlcmZvcm0pOgorCiAyMDEyLTEyLTA3ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBDaGVjayBTU1YgdmVyc2lvbiB3aGVuIG9w
ZW5pbmcgZGF0YWJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjI2MDhlYzE0MDRi
MmJjMzc2NDdhMDM1MTI5YjJhNTdhYjU4MGMzMC4uOGVmOTI0ZWU5NjNmZDdkYjk2NmJhNmI5ZjU4
OTA4MThiYzA4NGI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxMi0xMi0wNyAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgSW5kZXhlZERCOiBQcm9wYWdhdGUgYWxsIGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NDIyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25h
bCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4g
UGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAg
ICAgICAgKiB0ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmg6CisKIDIwMTItMTItMDcgIE1hcmsg
UGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92
ZSBXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSBvdXQgb2YgUGxhdGZvcm1TdXBwb3J0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNw
cAppbmRleCAzZTExMGI2OTVmMDAxNWI1NjkzYTkwNDYxNGExOGYxMzM1NDc1ZTQxLi5lMGQ4YmMw
ZmY2OGNmMjhhZDk1NGYzNTAyNjJmODdiMDM5NjIzZThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTY4LDYgKzY4
LDEwIEBAIGVudW0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHsKICAg
ICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yS2V5RXhpc3RzSW5JbmRleCwKICAgICBJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yVmVyc2lvbkV4aXN0cywKICAgICBJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yRGVsZXRlT2JqZWN0U3RvcmUsCisgICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heE9iamVjdFN0b3JlSWQsCisgICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heEluZGV4SWQsCisgICAgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvckdldE5ld0RhdGFiYXNlSWQsCisgICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVJlYWRFcnJvckdldE5ld1ZlcnNpb25OdW1iZXIsCiAgICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZUludGVybmFsRXJyb3JNYXgsCiB9Owogc3RhdGljIGlubGluZSB2b2lkIHJlY29yZEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHR5cGUpCkBA
IC0xMDEsMTUgKzEwNSwxNCBAQCBzdGF0aWMgdm9pZCBwdXRCb29sKExldmVsREJUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBibwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3RhdGljIGJvb2wgZ2V0SW50KERCT3JUcmFu
c2FjdGlvbiogZGIsIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkK
K3N0YXRpYyBib29sIGdldFNhZmVJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgTGV2ZWxE
QlNsaWNlJiBrZXksIGludDY0X3QmIGZvdW5kSW50LCBib29sJiBmb3VuZCkKIHsKICAgICBWZWN0
b3I8Y2hhcj4gcmVzdWx0OwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICBib29sIG9rID0g
ZGItPnNhZmVHZXQoa2V5LCByZXN1bHQsIGZvdW5kKTsKLSAgICAvLyBGSVhNRTogTm90aWZ5IHRo
ZSBjYWxsZXIgaWYgIW9rLgotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICBpZiAoIWZv
dW5kKQorICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5k
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvdW5kSW50ID0gZGVjb2RlSW50KHJlc3Vs
dC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTg1LDIyICsx
ODgsMzggQEAgcHVibGljOgogLy8gMSAtIEFkZHMgVXNlckludFZlcnNpb24gdG8gRGF0YWJhc2VN
ZXRhRGF0YS4KIC8vIDIgLSBBZGRzIERhdGFWZXJzaW9uIHRvIHRvIGdsb2JhbCBtZXRhZGF0YS4K
IGNvbnN0IGludDY0X3QgbGF0ZXN0S25vd25TY2hlbWFWZXJzaW9uID0gMjsKLXN0YXRpYyBib29s
IGlzU2NoZW1hS25vd24oTGV2ZWxEQkRhdGFiYXNlKiBkYikKK3N0YXRpYyBib29sIGlzU2NoZW1h
S25vd24oTGV2ZWxEQkRhdGFiYXNlKiBkYiwgYm9vbCYga25vd24pCiB7CiAgICAgaW50NjRfdCBk
YlNjaGVtYVZlcnNpb24gPSAwOwotICAgIGlmICghZ2V0SW50KGRiLCBTY2hlbWFWZXJzaW9uS2V5
OjplbmNvZGUoKSwgZGJTY2hlbWFWZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKGRiU2NoZW1hVmVyc2lvbiA+IGxhdGVzdEtub3duU2NoZW1hVmVyc2lvbikKKyAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGdldFNhZmVJbnQoZGIsIFNjaGVtYVZlcnNp
b25LZXk6OmVuY29kZSgpLCBkYlNjaGVtYVZlcnNpb24sIGZvdW5kKTsKKyAgICBpZiAoIW9rKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBrbm93biA9
IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoZGJTY2hlbWFWZXJz
aW9uID4gbGF0ZXN0S25vd25TY2hlbWFWZXJzaW9uKSB7CisgICAgICAgIGtub3duID0gZmFsc2U7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIGNvbnN0IHVpbnQzMl90IGxhdGVz
dEtub3duRGF0YVZlcnNpb24gPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndpcmVGb3JtYXRWZXJz
aW9uKCk7CiAgICAgaW50NjRfdCBkYkRhdGFWZXJzaW9uID0gMDsKLSAgICBpZiAoIWdldEludChk
YiwgRGF0YVZlcnNpb25LZXk6OmVuY29kZSgpLCBkYkRhdGFWZXJzaW9uKSkKKyAgICBvayA9IGdl
dFNhZmVJbnQoZGIsIERhdGFWZXJzaW9uS2V5OjplbmNvZGUoKSwgZGJEYXRhVmVyc2lvbiwgZm91
bmQpOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5k
KSB7CisgICAgICAgIGtub3duID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
Ci0gICAgaWYgKGRiRGF0YVZlcnNpb24gPiBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGRiRGF0YVZlcnNpb24gPiBsYXRlc3RLbm93bkRhdGFW
ZXJzaW9uKSB7CisgICAgICAgIGtub3duID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAorICAgIGtub3duID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjE0
LDcgKzIzMywxMyBAQCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSog
ZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogCiAgICAgaW50NjRfdCBkYlNjaGVtYVZlcnNpb24g
PSAwOwogICAgIGludDY0X3QgZGJEYXRhVmVyc2lvbiA9IDA7Ci0gICAgaWYgKCFnZXRJbnQodHJh
bnNhY3Rpb24uZ2V0KCksIHNjaGVtYVZlcnNpb25LZXksIGRiU2NoZW1hVmVyc2lvbikpIHsKKyAg
ICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGdldFNhZmVJbnQodHJhbnNhY3Rp
b24uZ2V0KCksIHNjaGVtYVZlcnNpb25LZXksIGRiU2NoZW1hVmVyc2lvbiwgZm91bmQpOworICAg
IGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
UmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKCFmb3VuZCkgewogICAgICAgICAvLyBJbml0aWFsaXplIG5ldyBiYWNraW5nIHN0b3Jl
LgogICAgICAgICBkYlNjaGVtYVZlcnNpb24gPSBsYXRlc3RLbm93blNjaGVtYVZlcnNpb247CiAg
ICAgICAgIHB1dEludCh0cmFuc2FjdGlvbi5nZXQoKSwgc2NoZW1hVmVyc2lvbktleSwgZGJTY2hl
bWFWZXJzaW9uKTsKQEAgLTIzMSwxMCArMjU2LDE2IEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRh
dGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgICAgICAg
ICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOwogICAg
ICAgICAgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFy
ZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKICAgICAgICAgICAg
ICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSAwOwotICAgICAgICAgICAgICAgIGlmICghZ2V0SW50
KHRyYW5zYWN0aW9uLmdldCgpLCBpdC0+a2V5KCksIGRhdGFiYXNlSWQpKSB7CisgICAgICAgICAg
ICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBib29sIG9rID0gZ2V0U2FmZUlu
dCh0cmFuc2FjdGlvbi5nZXQoKSwgaXQtPmtleSgpLCBkYXRhYmFzZUlkLCBmb3VuZCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFvaykgewogICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JTZXR1cE1ldGFkYXRhKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFZlY3Rv
cjxjaGFyPiBpbnRWZXJzaW9uS2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKTsKICAgICAgICAgICAg
ICAgICBwdXRWYXJJbnQodHJhbnNhY3Rpb24uZ2V0KCksIGludFZlcnNpb25LZXksIElEQkRhdGFi
YXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uKTsKICAgICAgICAgICAgIH0KQEAgLTI0OCw4
ICsyNzksMTQgQEAgc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRi
LCBjb25zdCBTdHJpbmcmIG9yaWdpbikKICAgICB9CiAKICAgICAvLyBBbGwgbmV3IHZhbHVlcyB3
aWxsIGJlIHdyaXR0ZW4gdXNpbmcgdGhpcyBzZXJpYWxpemF0aW9uIHZlcnNpb24uCi0gICAgaWYg
KCFnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFWZXJzaW9uS2V5LCBkYkRhdGFWZXJzaW9u
KSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJy
b3IpOworICAgIGZvdW5kID0gZmFsc2U7CisgICAgb2sgPSBnZXRTYWZlSW50KHRyYW5zYWN0aW9u
LmdldCgpLCBkYXRhVmVyc2lvbktleSwgZGJEYXRhVmVyc2lvbiwgZm91bmQpOworICAgIGlmICgh
b2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yU2V0dXBNZXRhZGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYg
KCFmb3VuZCkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVD
b25zaXN0ZW5jeUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAo
ZGJEYXRhVmVyc2lvbiA8IGxhdGVzdEtub3duRGF0YVZlcnNpb24pIHsKQEAgLTI2OCwyMSArMzA1
LDI2IEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29u
c3QgU3RyaW5nJiBvcmlnaW4pCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rp
b24+Ci1zdGF0aWMgaW50NjRfdCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiog
ZGIsIGludDY0X3QgZGF0YWJhc2VJZCkKK3N0YXRpYyBib29sIGdldE1heE9iamVjdFN0b3JlSWQo
REJPclRyYW5zYWN0aW9uKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90JiBtYXhPYmpl
Y3RTdG9yZUlkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhPYmplY3RTdG9yZUlkS2V5
ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURh
dGFLZXk6Ok1heE9iamVjdFN0b3JlSWQpOwotICAgIHJldHVybiBnZXRNYXhPYmplY3RTdG9yZUlk
KGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5KTsKKyAgICBib29sIG9rID0gZ2V0TWF4T2JqZWN0U3Rv
cmVJZChkYiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCk7CisgICAgcmV0
dXJuIG9rOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3RhdGlj
IGludDY0X3QgZ2V0TWF4T2JqZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIG1heE9iamVjdFN0b3JlSWRLZXkpCitzdGF0aWMgYm9vbCBnZXRNYXhPYmpl
Y3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbWF4T2Jq
ZWN0U3RvcmVJZEtleSwgaW50NjRfdCYgbWF4T2JqZWN0U3RvcmVJZCkKIHsKLSAgICBpbnQ2NF90
IG1heE9iamVjdFN0b3JlSWQgPSAtMTsKLSAgICBpZiAoIWdldEludChkYiwgbWF4T2JqZWN0U3Rv
cmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCkpCisgICAgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOwor
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gZ2V0U2FmZUludChkYiwgbWF4
T2JqZWN0U3RvcmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCwgZm91bmQpOworICAgIGlmICghb2sp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5kKQogICAgICAgICBtYXhPYmpl
Y3RTdG9yZUlkID0gMDsKIAogICAgIEFTU0VSVChtYXhPYmplY3RTdG9yZUlkID49IDApOwotICAg
IHJldHVybiBtYXhPYmplY3RTdG9yZUlkOworICAgIHJldHVybiB0cnVlOwogfQogCiBJREJCYWNr
aW5nU3RvcmU6OklEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRi
KQpAQCAtMzQwLDEwICszODIsMTggQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkJh
Y2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4KICAgICAgICAg
U3RyaW5nIHBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5
T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRiLmxldmVsZGIiKTsKIAog
ICAgICAgICBkYiA9IExldmVsREJEYXRhYmFzZTo6b3BlbihwYXRoLCBjb21wYXJhdG9yLmdldCgp
KTsKLSAgICAgICAgaWYgKGRiICYmICFpc1NjaGVtYUtub3duKGRiLmdldCgpKSkgewotICAgICAg
ICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBoYWQgdW5rbm93biBzY2hl
bWEsIHRyZWF0aW5nIGl0IGFzIGZhaWx1cmUgdG8gb3BlbiIpOwotICAgICAgICAgICAgSGlzdG9n
cmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tp
bmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWRVbmtu
b3duU2NoZW1hLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7Ci0gICAgICAgICAgICBk
Yi5jbGVhcigpOworICAgICAgICBpZiAoZGIpIHsKKyAgICAgICAgICAgIGJvb2wga25vd24gPSBm
YWxzZTsKKyAgICAgICAgICAgIGJvb2wgb2sgPSBpc1NjaGVtYUtub3duKGRiLmdldCgpLCBrbm93
bik7CisgICAgICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCFrbm93bikgeworICAgICAgICAgICAgICAgIExPR19FUlJP
UigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgaGFkIHVua25vd24gc2NoZW1hLCB0cmVhdGluZyBp
dCBhcyBmYWlsdXJlIHRvIG9wZW4iKTsKKyAgICAgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0
OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9w
ZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEs
IElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgICAgICAgICBkYi5jbGVh
cigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRiKQpAQCAtNDA5
LDExICs0NTksMTUgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGEKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsK
ICAgICBmb3VuZCA9IGZhbHNlOwogCi0gICAgZm91bmQgPSBnZXRJbnQobV9kYi5nZXQoKSwga2V5
LCBtZXRhZGF0YS0+aWQpOworICAgIGJvb2wgb2sgPSBnZXRTYWZlSW50KG1fZGIuZ2V0KCksIGtl
eSwgbWV0YWRhdGEtPmlkLCBmb3VuZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5h
bEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJREJEYXRhYmFzZU1ldGFE
YXRhKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBpZiAoIWZvdW5kKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgb2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKG1ldGFkYXRhLT5pZCwgRGF0YWJhc2VNZXRhRGF0
YUtleTo6VXNlclZlcnNpb24pLCBtZXRhZGF0YS0+dmVyc2lvbiwgZm91bmQpOworICAgIG9rID0g
Z2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShtZXRhZGF0
YS0+aWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgbWV0YWRhdGEtPnZlcnNp
b24sIGZvdW5kKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldElEQkRhdGFiYXNlTWV0YURhdGEpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC00MzYsMTcgKzQ5MCwyOCBAQCBib29sIElEQkJhY2tpbmdTdG9y
ZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNl
TWV0YQogICAgIGlmIChtZXRhZGF0YS0+aW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRh
OjpEZWZhdWx0SW50VmVyc2lvbikKICAgICAgICAgbWV0YWRhdGEtPmludFZlcnNpb24gPSBJREJE
YXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb247CiAKLSAgICBtZXRhZGF0YS0+bWF4T2JqZWN0
U3RvcmVJZCA9IGdldE1heE9iamVjdFN0b3JlSWQobV9kYi5nZXQoKSwgbWV0YWRhdGEtPmlkKTsK
KyAgICBvayA9IGdldE1heE9iamVjdFN0b3JlSWQobV9kYi5nZXQoKSwgbWV0YWRhdGEtPmlkLCBt
ZXRhZGF0YS0+bWF4T2JqZWN0U3RvcmVJZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJREJEYXRhYmFzZU1l
dGFEYXRhKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgaW50NjRfdCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSog
ZGIpCitzdGF0aWMgYm9vbCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSogZGIsIGlu
dDY0X3QmIG5ld0lkKQogewogICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IHRyYW5zYWN0
aW9uID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUoZGIpOwogCisgICAgbmV3SWQgPSAtMTsK
ICAgICBpbnQ2NF90IG1heERhdGFiYXNlSWQgPSAtMTsKLSAgICBpZiAoIWdldEludCh0cmFuc2Fj
dGlvbi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIG1heERhdGFiYXNlSWQpKQor
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gZ2V0U2FmZUludCh0cmFuc2Fj
dGlvbi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIG1heERhdGFiYXNlSWQsIGZv
dW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld0RhdGFiYXNlSWQpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICghZm91bmQpCiAgICAgICAgIG1heERhdGFiYXNlSWQgPSAwOwog
CiAgICAgQVNTRVJUKG1heERhdGFiYXNlSWQgPj0gMCk7CkBAIC00NTUsMTYgKzUyMCwxOCBAQCBz
dGF0aWMgaW50NjRfdCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSogZGIpCiAgICAg
cHV0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgZGF0
YWJhc2VJZCk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+Y29tbWl0KCkpIHsKICAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAgICAgIHJl
dHVybiAtMTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gZGF0YWJh
c2VJZDsKKyAgICBuZXdJZCA9IGRhdGFiYXNlSWQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJv
b2wgSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0
X3QmIHJvd0lkKQogewotICAgIHJvd0lkID0gZ2V0TmV3RGF0YWJhc2VJZChtX2RiLmdldCgpKTsK
LSAgICBpZiAocm93SWQgPCAwKQorICAgIGJvb2wgb2sgPSBnZXROZXdEYXRhYmFzZUlkKG1fZGIu
Z2V0KCksIHJvd0lkKTsKKyAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
QVNTRVJUKHJvd0lkID49IDApOwogCiAgICAgaWYgKGludFZlcnNpb24gPT0gSURCRGF0YWJhc2VN
ZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQogICAgICAgICBpbnRWZXJzaW9uID0gSURCRGF0YWJhc2VN
ZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb247CkBAIC02MzcsNyArNzA0LDEyIEBAIFZlY3RvcjxJ
REJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jlcyhp
bnQ2NF90IGRhdGFiYXNlCiBzdGF0aWMgYm9vbCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhPYmplY3RTdG9yZUlkS2V5
ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURh
dGFLZXk6Ok1heE9iamVjdFN0b3JlSWQpOwotICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCA9
IGdldE1heE9iamVjdFN0b3JlSWQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXkpOwor
ICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOworICAgIGJvb2wgb2sgPSBnZXRNYXhP
YmplY3RTdG9yZUlkKHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBtYXhPYmplY3RT
dG9yZUlkKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heE9iamVjdFN0b3JlSWQpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKG9iamVjdFN0b3JlSWQgPD0gbWF4T2JqZWN0U3Rv
cmVJZCkgewogICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVDb25z
aXN0ZW5jeUVycm9yKTsKQEAgLTczMiwxMiArODA0LDE5IEBAIGJvb2wgSURCQmFja2luZ1N0b3Jl
OjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25O
dW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitzdGF0aWMgYm9vbCBnZXROZXdWZXJzaW9uTnVtYmVy
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBuZXdWZXJzaW9uTnVtYmVyKQogewogICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
OjpMYXN0VmVyc2lvbik7CiAKKyAgICBuZXdWZXJzaW9uTnVtYmVyID0gLTE7CiAgICAgaW50NjRf
dCBsYXN0VmVyc2lvbiA9IC0xOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVy
c2lvbktleSwgbGFzdFZlcnNpb24pKQorICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29s
IG9rID0gZ2V0U2FmZUludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIGxhc3RWZXJzaW9u
LCBmb3VuZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVs
REJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXROZXdWZXJzaW9uTnVtYmVyKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZvdW5kKQogICAgICAgICBsYXN0VmVyc2lvbiA9
IDA7CiAKICAgICBBU1NFUlQobGFzdFZlcnNpb24gPj0gMCk7CkBAIC03NDcsMTUgKzgyNiwyMCBA
QCBzdGF0aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YQogCiAgICAgQVNTRVJUKHZlcnNpb24gPiBsYXN0VmVy
c2lvbik7IC8vIEZJWE1FOiBUaGluayBhYm91dCBob3cgd2Ugd2FudCB0byBoYW5kbGUgdGhlIG92
ZXJmbG93IHNjZW5hcmlvLgogCi0gICAgcmV0dXJuIHZlcnNpb247CisgICAgbmV3VmVyc2lvbk51
bWJlciA9IHZlcnNpb247CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCQmFja2luZ1N0
b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
IGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRp
ZmllcikKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3Jk
SWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklEQkJhY2tp
bmdTdG9yZTo6cHV0UmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwogICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgaW50
NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihsZXZlbERCVHJhbnNhY3Rpb24sIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOworICAgIGludDY0X3QgdmVyc2lvbiA9IC0xOworICAg
IGJvb2wgb2sgPSBnZXROZXdWZXJzaW9uTnVtYmVyKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgdmVyc2lvbik7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIEFTU0VSVCh2ZXJzaW9uID49IDApOwogICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBvYmplY3RTdG9yZWRhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogCiAgICAgVmVjdG9yPGNoYXI+IHY7CkBAIC03
NjgsNiArODUyLDcgQEAgdm9pZCBJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjQKICAgICBsZXZlbERCVHJhbnNh
Y3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKTsKIAogICAgIHJl
Y29yZElkZW50aWZpZXItPnJlc2V0KGVuY29kZUlEQktleShrZXkpLCB2ZXJzaW9uKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQpAQCAtOTU4LDcgKzEwNDMsMTMgQEAgc3RhdGlj
IGJvb2wgc2V0TWF4SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGkKIHsKICAgICBpbnQ2NF90IG1heEluZGV4SWQgPSAtMTsKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
OjpNYXhJbmRleElkKTsKLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtl
eSwgbWF4SW5kZXhJZCkpCisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBn
ZXRTYWZlSW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5LCBtYXhJbmRleElkLCBmb3VuZCk7
CisgICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5n
U3RvcmVSZWFkRXJyb3JTZXRNYXhJbmRleElkKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoIWZvdW5kKQogICAgICAgICBtYXhJbmRleElkID0gTWluaW11bUluZGV4SWQ7
CiAKICAgICBpZiAoaW5kZXhJZCA8PSBtYXhJbmRleElkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGU2ZWQ0ZDgwNTE4
MDZkZTFmYjBiNzdkOTI2Njk2ZTQzMWVkZmU4ZWMuLjVkMWFhY2M0ZjBlNzg0MzIwMmRhYTZiY2Qy
NzA0NzFjYjJlZTYzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB9Owog
CiAgICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIFN0cmluZyYgcmVjb3JkKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCB2b2lk
IHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIFJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3Jk
SWRlbnRpZmllciopIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJP
YmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZWNv
cmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyJik7CiAgICAgdmlydHVh
bCBib29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90JiBjdXJyZW50TnVtYmVyKSBXQVJOX1VOVVNFRF9SRVRVUk47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwCmluZGV4IGVjYjYxZWUxZjkyOWEyMDE2MjBhZjZmYTI3ZGQzYmU1Y2NiYTE5MzAuLjYyM2Ez
ZTBmYzFiMzA1ZDI2Njg0MTEyNzBhNjYwODE2OTc1MmJkNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwCkBAIC0yOTMsNyArMjkzLDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkIKIHsKICAgICBJ
REJfVFJBQ0UoIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7CiAgICAgaWYgKCFtX2RhdGFi
YXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2UtPmlkKCksIG1fb2JqZWN0U3RvcmUtPmlk
KCksIG1fb2JqZWN0U3RvcmUtPm5hbWUoKSwgbV9vYmplY3RTdG9yZS0+a2V5UGF0aCgpLCBtX29i
amVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9y
dCgpOworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yIGNyZWF0aW5nIG9iamVjdCBzdG9yZS4iKTsKKyAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwCmluZGV4IGJlMDQ3Mzk4ZDg1ZTk0MWU5NTljMWY1MTc5ZTZiNDViNDYxNTAwZmIuLmVlODMy
ZTkwZDA0ZDU1ZGY5ODczYzJlNTUyNzhmZjliMmI0MzI5Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cApAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNv
bnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBpbnQ2NF90IHRyCiAgICAgaWYgKGl0
ID09IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CiAgICAgICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4s
IGRhdGFEaXJlY3RvcnkpOwogICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBiYWNraW5n
IHN0b3JlLiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCmluZGV4IDJhZGE1MjUzOWQ2MDZjYTZiZWU1MThhNjMxMzc3MDk5ZTY3
YWViN2UuLmViYWQ5NTlhYmJmY2Q2YTI3YmUxOGI4MmE2ZWY3ZWEyNzEyMjMyYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC00NjcsNyArNDY3LDggQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1h
cnlLZXksIGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWZvdW5kKSB7Ci0gICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5k
ZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlICVzLiIsIG5hbWUoKS51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTU2MCw3ICs1NjEsMTEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpP
YmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3QKIAogICAgIC8v
IEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBv
aW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KIAotICAgIG1f
b2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmpl
Y3RTdG9yZS0+aWQoKSwgKm1fa2V5LCBtX3ZhbHVlLT50b1dpcmVTdHJpbmcoKSwgJnJlY29yZElk
ZW50aWZpZXIpOworICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX29iamVjdFN0b3JlLT5iYWNr
aW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICpt
X2tleSwgbV92YWx1ZS0+dG9XaXJlU3RyaW5nKCksICZyZWNvcmRJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJy
b3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1dC9h
ZGQuIikpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSW5kZXhXcml0ZXIqIGlu
ZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCA5YjE3YWRkMTE1OTdh
MzFhMmJkNWRlN2QyYTg4NGFiZTFlNjEyNmUzLi5mOTY1MDczYzBhZjNlYzJhZmY3MzQzODBlMjRk
Nzg1ZjY2MTE5ODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkZha2VCYWNraW5nU3RvcmUuaApAQCAtNDIsNyArNDIsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3Qg
ZGF0YWJhc2VJZCkgT1ZFUlJJREUgeyByZXR1cm4gVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRh
dGE+KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KSBPVkVSUklERSB7
IHJldHVybiBmYWxzZTsgfTsKIAotICAgIHZpcnR1YWwgdm9pZCBwdXRSZWNvcmQoVHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYpIE9WRVJSSURF
IHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QmIGN1cnJlbnROdW1iZXIpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178316</attachid>
            <date>2012-12-07 18:11:07 -0800</date>
            <delta_ts>2012-12-07 18:16:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104422-20121207180830.patch</filename>
            <type>text/plain</type>
            <size>23599</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM2ZTlhNjg4ZWM5ZjU5
YTE5NjIyYjc0MmY1ZGJjNzQxMmZiODk1Yi4uZTI5M2Q3ZTVlZWMxZTcxZTkzNTBlZDg3ZDY4OTI5
MWViMDg1ODJhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTEyLTA3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBhbGwgbGV2ZWxkYiBlcnJvcnMgdG8gc2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ0MjIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRo
ZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5j
dGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTYWZlSW50KToKKyAgICAgICAgKFdlYkNvcmU6Omlz
U2NoZW1hS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0VXBNZXRhZGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRNYXhPYmplY3RTdG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Omdl
dElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmV3RGF0YWJhc2VJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNl
TWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4T2JqZWN0U3RvcmVJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXROZXdWZXJzaW9uTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldE1heEluZGV4
SWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAg
ICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVy
YXRpb246OnBlcmZvcm0pOgorCiAyMDEyLTEyLTA3ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBDaGVjayBTU1YgdmVyc2lvbiB3aGVuIG9w
ZW5pbmcgZGF0YWJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjI2MDhlYzE0MDRi
MmJjMzc2NDdhMDM1MTI5YjJhNTdhYjU4MGMzMC4uOGVmOTI0ZWU5NjNmZDdkYjk2NmJhNmI5ZjU4
OTA4MThiYzA4NGI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxMi0xMi0wNyAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgSW5kZXhlZERCOiBQcm9wYWdhdGUgYWxsIGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NDIyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25h
bCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4g
UGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAg
ICAgICAgKiB0ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmg6CisKIDIwMTItMTItMDcgIE1hcmsg
UGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92
ZSBXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSBvdXQgb2YgUGxhdGZvcm1TdXBwb3J0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNw
cAppbmRleCAzZTExMGI2OTVmMDAxNWI1NjkzYTkwNDYxNGExOGYxMzM1NDc1ZTQxLi42YjFkOWEx
NDQwMWRjN2I4N2RhNTMyNGQ2OTlmYzQ0MGQwMWQ0MjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTY4LDYgKzY4
LDEwIEBAIGVudW0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHsKICAg
ICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yS2V5RXhpc3RzSW5JbmRleCwKICAgICBJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yVmVyc2lvbkV4aXN0cywKICAgICBJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yRGVsZXRlT2JqZWN0U3RvcmUsCisgICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heE9iamVjdFN0b3JlSWQsCisgICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heEluZGV4SWQsCisgICAgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvckdldE5ld0RhdGFiYXNlSWQsCisgICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVJlYWRFcnJvckdldE5ld1ZlcnNpb25OdW1iZXIsCiAgICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZUludGVybmFsRXJyb3JNYXgsCiB9Owogc3RhdGljIGlubGluZSB2b2lkIHJlY29yZEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHR5cGUpCkBA
IC0xMDEsMTUgKzEwNSwxNCBAQCBzdGF0aWMgdm9pZCBwdXRCb29sKExldmVsREJUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBibwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3RhdGljIGJvb2wgZ2V0SW50KERCT3JUcmFu
c2FjdGlvbiogZGIsIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkK
K3N0YXRpYyBib29sIGdldEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBMZXZlbERCU2xp
Y2UmIGtleSwgaW50NjRfdCYgZm91bmRJbnQsIGJvb2wmIGZvdW5kKQogewogICAgIFZlY3Rvcjxj
aGFyPiByZXN1bHQ7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIGJvb2wgb2sgPSBkYi0+
c2FmZUdldChrZXksIHJlc3VsdCwgZm91bmQpOwotICAgIC8vIEZJWE1FOiBOb3RpZnkgdGhlIGNh
bGxlciBpZiAhb2suCi0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotICAgIGlmICghZm91bmQp
CisgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZm91bmQpCisg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZm91bmRJbnQgPSBkZWNvZGVJbnQocmVzdWx0LmJl
Z2luKCksIHJlc3VsdC5lbmQoKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xODUsMjIgKzE4OCwz
OCBAQCBwdWJsaWM6CiAvLyAxIC0gQWRkcyBVc2VySW50VmVyc2lvbiB0byBEYXRhYmFzZU1ldGFE
YXRhLgogLy8gMiAtIEFkZHMgRGF0YVZlcnNpb24gdG8gdG8gZ2xvYmFsIG1ldGFkYXRhLgogY29u
c3QgaW50NjRfdCBsYXRlc3RLbm93blNjaGVtYVZlcnNpb24gPSAyOwotc3RhdGljIGJvb2wgaXNT
Y2hlbWFLbm93bihMZXZlbERCRGF0YWJhc2UqIGRiKQorc3RhdGljIGJvb2wgaXNTY2hlbWFLbm93
bihMZXZlbERCRGF0YWJhc2UqIGRiLCBib29sJiBrbm93bikKIHsKICAgICBpbnQ2NF90IGRiU2No
ZW1hVmVyc2lvbiA9IDA7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIFNjaGVtYVZlcnNpb25LZXk6OmVu
Y29kZSgpLCBkYlNjaGVtYVZlcnNpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
ZGJTY2hlbWFWZXJzaW9uID4gbGF0ZXN0S25vd25TY2hlbWFWZXJzaW9uKQorICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gZ2V0SW50KGRiLCBTY2hlbWFWZXJzaW9uS2V5Ojpl
bmNvZGUoKSwgZGJTY2hlbWFWZXJzaW9uLCBmb3VuZCk7CisgICAgaWYgKCFvaykKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZm91bmQpIHsKKyAgICAgICAga25vd24gPSB0cnVlOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGRiU2NoZW1hVmVyc2lvbiA+IGxh
dGVzdEtub3duU2NoZW1hVmVyc2lvbikgeworICAgICAgICBrbm93biA9IGZhbHNlOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBjb25zdCB1aW50MzJfdCBsYXRlc3RLbm93bkRh
dGFWZXJzaW9uID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3aXJlRm9ybWF0VmVyc2lvbigpOwog
ICAgIGludDY0X3QgZGJEYXRhVmVyc2lvbiA9IDA7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIERhdGFW
ZXJzaW9uS2V5OjplbmNvZGUoKSwgZGJEYXRhVmVyc2lvbikpCisgICAgb2sgPSBnZXRJbnQoZGIs
IERhdGFWZXJzaW9uS2V5OjplbmNvZGUoKSwgZGJEYXRhVmVyc2lvbiwgZm91bmQpOworICAgIGlm
ICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5kKSB7CisgICAgICAg
IGtub3duID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgaWYgKGRi
RGF0YVZlcnNpb24gPiBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGRiRGF0YVZlcnNpb24gPiBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKSB7Cisg
ICAgICAgIGtub3duID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAorICAg
IGtub3duID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjE0LDcgKzIzMywxMyBA
QCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0
cmluZyYgb3JpZ2luKQogCiAgICAgaW50NjRfdCBkYlNjaGVtYVZlcnNpb24gPSAwOwogICAgIGlu
dDY0X3QgZGJEYXRhVmVyc2lvbiA9IDA7Ci0gICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24uZ2V0
KCksIHNjaGVtYVZlcnNpb25LZXksIGRiU2NoZW1hVmVyc2lvbikpIHsKKyAgICBib29sIGZvdW5k
ID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwgc2NoZW1h
VmVyc2lvbktleSwgZGJTY2hlbWFWZXJzaW9uLCBmb3VuZCk7CisgICAgaWYgKCFvaykgeworICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JTZXR1cE1l
dGFkYXRhKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZvdW5kKSB7
CiAgICAgICAgIC8vIEluaXRpYWxpemUgbmV3IGJhY2tpbmcgc3RvcmUuCiAgICAgICAgIGRiU2No
ZW1hVmVyc2lvbiA9IGxhdGVzdEtub3duU2NoZW1hVmVyc2lvbjsKICAgICAgICAgcHV0SW50KHRy
YW5zYWN0aW9uLmdldCgpLCBzY2hlbWFWZXJzaW9uS2V5LCBkYlNjaGVtYVZlcnNpb24pOwpAQCAt
MjMxLDEwICsyNTYsMTYgQEAgc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJh
c2UqIGRiLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKICAgICAgICAgICAgIE93blB0cjxMZXZlbERC
SXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgICAgICAgICBmb3IgKGl0
LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCks
IHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGludDY0X3QgZGF0
YWJhc2VJZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24uZ2V0
KCksIGl0LT5rZXkoKSwgZGF0YWJhc2VJZCkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGJvb2wgb2sgPSBnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCks
IGl0LT5rZXkoKSwgZGF0YWJhc2VJZCwgZm91bmQpOworICAgICAgICAgICAgICAgIGlmICghb2sp
IHsKICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgewor
ICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVD
b25zaXN0ZW5jeUVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gaW50VmVyc2lvbktl
eSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFE
YXRhS2V5OjpVc2VySW50VmVyc2lvbik7CiAgICAgICAgICAgICAgICAgcHV0VmFySW50KHRyYW5z
YWN0aW9uLmdldCgpLCBpbnRWZXJzaW9uS2V5LCBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0
SW50VmVyc2lvbik7CiAgICAgICAgICAgICB9CkBAIC0yNDgsOCArMjc5LDE0IEBAIHN0YXRpYyBi
b29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmln
aW4pCiAgICAgfQogCiAgICAgLy8gQWxsIG5ldyB2YWx1ZXMgd2lsbCBiZSB3cml0dGVuIHVzaW5n
IHRoaXMgc2VyaWFsaXphdGlvbiB2ZXJzaW9uLgotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9u
LmdldCgpLCBkYXRhVmVyc2lvbktleSwgZGJEYXRhVmVyc2lvbikpIHsKLSAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICBmb3VuZCA9IGZh
bHNlOworICAgIG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBkYXRhVmVyc2lvbktleSwg
ZGJEYXRhVmVyc2lvbiwgZm91bmQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoZGJEYXRhVmVyc2lvbiA8IGxhdGVzdEtu
b3duRGF0YVZlcnNpb24pIHsKQEAgLTI2OCwyMSArMzA1LDI2IEBAIHN0YXRpYyBib29sIHNldFVw
TWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgaW50NjRfdCBnZXRN
YXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiogZGIsIGludDY0X3QgZGF0YWJhc2VJZCkK
K3N0YXRpYyBib29sIGdldE1heE9iamVjdFN0b3JlSWQoREJPclRyYW5zYWN0aW9uKiBkYiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90JiBtYXhPYmplY3RTdG9yZUlkKQogewogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBtYXhPYmplY3RTdG9yZUlkS2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6Ok1heE9iamVjdFN0b3JlSWQp
OwotICAgIHJldHVybiBnZXRNYXhPYmplY3RTdG9yZUlkKGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5
KTsKKyAgICBib29sIG9rID0gZ2V0TWF4T2JqZWN0U3RvcmVJZChkYiwgbWF4T2JqZWN0U3RvcmVJ
ZEtleSwgbWF4T2JqZWN0U3RvcmVJZCk7CisgICAgcmV0dXJuIG9rOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3RhdGljIGludDY0X3QgZ2V0TWF4T2JqZWN0U3Rv
cmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIG1heE9iamVjdFN0
b3JlSWRLZXkpCitzdGF0aWMgYm9vbCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlv
biogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbWF4T2JqZWN0U3RvcmVJZEtleSwgaW50NjRfdCYg
bWF4T2JqZWN0U3RvcmVJZCkKIHsKLSAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSAtMTsK
LSAgICBpZiAoIWdldEludChkYiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJ
ZCkpCisgICAgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
KyAgICBib29sIG9rID0gZ2V0SW50KGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBtYXhPYmplY3RT
dG9yZUlkLCBmb3VuZCk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghZm91bmQpCiAgICAgICAgIG1heE9iamVjdFN0b3JlSWQgPSAwOwogCiAgICAgQVNTRVJU
KG1heE9iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1heE9iamVjdFN0b3JlSWQ7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIElEQkJhY2tpbmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBQ
YXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIpCkBAIC0zNDAsMTAgKzM4MiwxOCBAQCBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbgogICAgICAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigp
ICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOwogCiAgICAgICAgIGRiID0gTGV2ZWxEQkRhdGFiYXNl
OjpvcGVuKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwotICAgICAgICBpZiAoZGIgJiYgIWlzU2No
ZW1hS25vd24oZGIuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBi
YWNraW5nIHN0b3JlIGhhZCB1bmtub3duIHNjaGVtYSwgdHJlYXRpbmcgaXQgYXMgZmFpbHVyZSB0
byBvcGVuIik7Ci0gICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJh
dGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZl
bERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEsIElEQkxldmVsREJCYWNraW5n
U3RvcmVPcGVuTWF4KTsKLSAgICAgICAgICAgIGRiLmNsZWFyKCk7CisgICAgICAgIGlmIChkYikg
eworICAgICAgICAgICAgYm9vbCBrbm93biA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBvayA9
IGlzU2NoZW1hS25vd24oZGIuZ2V0KCksIGtub3duKTsKKyAgICAgICAgICAgIGlmICghb2spIHsK
KyAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFk
RXJyb3JTZXR1cE1ldGFkYXRhKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWtub3du
KSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBo
YWQgdW5rbm93biBzY2hlbWEsIHRyZWF0aW5nIGl0IGFzIGZhaWx1cmUgdG8gb3BlbiIpOworICAg
ICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJD
b3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5n
U3RvcmVPcGVuRmFpbGVkVW5rbm93blNjaGVtYSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5N
YXgpOworICAgICAgICAgICAgICAgIGRiLmNsZWFyKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoZGIpCkBAIC00MDksMTEgKzQ1OSwxNSBAQCBib29sIElEQkJhY2tp
bmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRh
dGFiYXNlTWV0YQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6
OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwogICAgIGZvdW5kID0gZmFsc2U7CiAKLSAgICBm
b3VuZCA9IGdldEludChtX2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5pZCk7CisgICAgYm9vbCBv
ayA9IGdldEludChtX2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5pZCwgZm91bmQpOworICAgIGlm
ICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVh
ZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIG9r
ID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShtZXRh
ZGF0YS0+aWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgbWV0YWRhdGEtPnZl
cnNpb24sIGZvdW5kKTsKKyAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjplbmNvZGUobWV0YWRhdGEtPmlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2Vy
VmVyc2lvbiksIG1ldGFkYXRhLT52ZXJzaW9uLCBmb3VuZCk7CiAgICAgaWYgKCFvaykgewogICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJREJE
YXRhYmFzZU1ldGFEYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDM2LDE3ICs0OTAs
MjggQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGEKICAgICBpZiAobWV0YWRhdGEtPmludFZlcnNp
b24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pCiAgICAgICAgIG1l
dGFkYXRhLT5pbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwog
Ci0gICAgbWV0YWRhdGEtPm1heE9iamVjdFN0b3JlSWQgPSBnZXRNYXhPYmplY3RTdG9yZUlkKG1f
ZGIuZ2V0KCksIG1ldGFkYXRhLT5pZCk7CisgICAgb2sgPSBnZXRNYXhPYmplY3RTdG9yZUlkKG1f
ZGIuZ2V0KCksIG1ldGFkYXRhLT5pZCwgbWV0YWRhdGEtPm1heE9iamVjdFN0b3JlSWQpOworICAg
IGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
UmVhZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludDY0X3QgZ2V0TmV3RGF0
YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQorc3RhdGljIGJvb2wgZ2V0TmV3RGF0YWJhc2VJ
ZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90JiBuZXdJZCkKIHsKICAgICBSZWZQdHI8TGV2
ZWxEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRl
KGRiKTsKIAorICAgIG5ld0lkID0gLTE7CiAgICAgaW50NjRfdCBtYXhEYXRhYmFzZUlkID0gLTE7
Ci0gICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIE1heERhdGFiYXNlSWRLZXk6OmVu
Y29kZSgpLCBtYXhEYXRhYmFzZUlkKSkKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9v
bCBvayA9IGdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2Rl
KCksIG1heERhdGFiYXNlSWQsIGZvdW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld0RhdGFiYXNlSWQp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghZm91bmQpCiAgICAgICAg
IG1heERhdGFiYXNlSWQgPSAwOwogCiAgICAgQVNTRVJUKG1heERhdGFiYXNlSWQgPj0gMCk7CkBA
IC00NTUsMTYgKzUyMCwxOCBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdEYXRhYmFzZUlkKExldmVs
REJEYXRhYmFzZSogZGIpCiAgICAgcHV0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBNYXhEYXRhYmFz
ZUlkS2V5OjplbmNvZGUoKSwgZGF0YWJhc2VJZCk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+Y29t
bWl0KCkpIHsKICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3Jp
dGVFcnJvcik7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICByZXR1cm4gZGF0YWJhc2VJZDsKKyAgICBuZXdJZCA9IGRhdGFiYXNlSWQ7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2
NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKQogewotICAgIHJvd0lkID0gZ2V0TmV3RGF0
YWJhc2VJZChtX2RiLmdldCgpKTsKLSAgICBpZiAocm93SWQgPCAwKQorICAgIGJvb2wgb2sgPSBn
ZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCksIHJvd0lkKTsKKyAgICBpZiAoIW9rKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKHJvd0lkID49IDApOwogCiAgICAgaWYgKGludFZl
cnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQogICAgICAgICBpbnRW
ZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb247CkBAIC02Mzcs
NyArNzA0LDEyIEBAIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3Rv
cmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlCiBzdGF0aWMgYm9vbCBzZXRNYXhP
YmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBtYXhPYmplY3RTdG9yZUlkS2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6Ok1heE9iamVjdFN0b3JlSWQpOwotICAgIGludDY0
X3QgbWF4T2JqZWN0U3RvcmVJZCA9IGdldE1heE9iamVjdFN0b3JlSWQodHJhbnNhY3Rpb24sIG1h
eE9iamVjdFN0b3JlSWRLZXkpOworICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOwor
ICAgIGJvb2wgb2sgPSBnZXRNYXhPYmplY3RTdG9yZUlkKHRyYW5zYWN0aW9uLCBtYXhPYmplY3RT
dG9yZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heE9iamVjdFN0
b3JlSWQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKG9iamVjdFN0
b3JlSWQgPD0gbWF4T2JqZWN0U3RvcmVJZCkgewogICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKQEAgLTczMiwxMiArODA0LDE5IEBA
IGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBp
bnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitzdGF0aWMgYm9v
bCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBuZXdWZXJz
aW9uTnVtYmVyKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjpMYXN0VmVyc2lvbik7CiAKKyAgICBuZXdWZXJzaW9uTnVt
YmVyID0gLTE7CiAgICAgaW50NjRfdCBsYXN0VmVyc2lvbiA9IC0xOwotICAgIGlmICghZ2V0SW50
KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgbGFzdFZlcnNpb24pKQorICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lv
bktleSwgbGFzdFZlcnNpb24sIGZvdW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld1ZlcnNpb25OdW1i
ZXIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghZm91bmQpCiAgICAg
ICAgIGxhc3RWZXJzaW9uID0gMDsKIAogICAgIEFTU0VSVChsYXN0VmVyc2lvbiA+PSAwKTsKQEAg
LTc0NywxNSArODI2LDIwIEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2
ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhCiAKICAgICBBU1NFUlQo
dmVyc2lvbiA+IGxhc3RWZXJzaW9uKTsgLy8gRklYTUU6IFRoaW5rIGFib3V0IGhvdyB3ZSB3YW50
IHRvIGhhbmRsZSB0aGUgb3ZlcmZsb3cgc2NlbmFyaW8uCiAKLSAgICByZXR1cm4gdmVyc2lvbjsK
KyAgICBuZXdWZXJzaW9uTnVtYmVyID0gdmVyc2lvbjsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlm
aWVyKiByZWNvcmRJZGVudGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQogewogICAgIElE
Ql9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQiKTsKICAgICBBU1NFUlQoa2V5Lmlz
VmFsaWQoKSk7CiAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKLSAgICBpbnQ2NF90IHZlcnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKGxldmVs
REJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgaW50NjRfdCB2
ZXJzaW9uID0gLTE7CisgICAgYm9vbCBvayA9IGdldE5ld1ZlcnNpb25OdW1iZXIobGV2ZWxEQlRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCB2ZXJzaW9uKTsKKyAgICBpZiAo
IW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKHZlcnNpb24gPj0gMCk7CiAg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlZGF0YUtleSA9IE9iamVjdFN0b3JlRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAKICAgICBWZWN0
b3I8Y2hhcj4gdjsKQEAgLTc2OCw2ICs4NTIsNyBAQCB2b2lkIElEQkJhY2tpbmdTdG9yZTo6cHV0
UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NAog
ICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVy
c2lvbikpOwogCiAgICAgcmVjb3JkSWRlbnRpZmllci0+cmVzZXQoZW5jb2RlSURCS2V5KGtleSks
IHZlcnNpb24pOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIElEQkJhY2tpbmdTdG9yZTo6
Y2xlYXJPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCkBAIC05NTgsNyAr
MTA0MywxMyBAQCBzdGF0aWMgYm9vbCBzZXRNYXhJbmRleElkKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaQogewogICAgIGludDY0X3QgbWF4SW5k
ZXhJZCA9IC0xOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhJbmRleElkS2V5ID0gT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6Ok1heEluZGV4SWQpOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0
aW9uLCBtYXhJbmRleElkS2V5LCBtYXhJbmRleElkKSkKKyAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgYm9vbCBvayA9IGdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgbWF4SW5k
ZXhJZCwgZm91bmQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJM
ZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0TWF4SW5kZXhJZCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgbWF4SW5kZXhJZCA9IE1p
bmltdW1JbmRleElkOwogCiAgICAgaWYgKGluZGV4SWQgPD0gbWF4SW5kZXhJZCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAppbmRl
eCBlNmVkNGQ4MDUxODA2ZGUxZmIwYjc3ZDkyNjY5NmU0MzFlZGZlOGVjLi41ZDFhYWNjNGYwZTc4
NDMyMDJkYWE2YmNkMjcwNDcxY2IyZWU2M2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApAQCAtNzgsNyArNzgsNyBAQCBwdWJs
aWM6CiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmLCBTdHJpbmcmIHJlY29yZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAg
IHZpcnR1YWwgdm9pZCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBib29s
IHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIFJlY29yZElkZW50aWZpZXIqKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdmlydHVh
bCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYp
OwogICAgIHZpcnR1YWwgYm9vbCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCYgY3VycmVudE51bWJlcikgV0FSTl9VTlVTRURfUkVUVVJOOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcAppbmRleCBlY2I2MWVlMWY5MjlhMjAxNjIwYWY2ZmEyN2RkM2JlNWNj
YmExOTMwLi42MjNhM2UwZmMxYjMwNWQyNjY4NDExMjcwYTY2MDgxNjk3NTJiZDZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcApAQCAtMjkzLDcgKzI5Myw4IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CCiB7CiAgICAgSURCX1RSQUNFKCJDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwogICAg
IGlmICghbV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlLT5pZCgpLCBtX29i
amVjdFN0b3JlLT5pZCgpLCBtX29iamVjdFN0b3JlLT5uYW1lKCksIG1fb2JqZWN0U3RvcmUtPmtl
eVBhdGgoKSwgbV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpKSkgewotICAgICAgICB0cmFu
c2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9y
ID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsICJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3RvcmUuIik7CisgICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmNwcAppbmRleCBiZTA0NzM5OGQ4NWU5NDFlOTU5YzFmNTE3OWU2YjQ1YjQ2
MTUwMGZiLi5lZTgzMmU5MGQwNGQ1NWRmOTg3M2MyZTU1Mjc4ZmY5YjJiNDMyOWNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgdmVyc2lvbiwgaW50NjRfdCB0
cgogICAgIGlmIChpdCA9PSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewogICAgICAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNl
Y3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUp
IHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yLiIp
KTsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIG9w
ZW5pbmcgYmFja2luZyBzdG9yZS4iKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAyYWRhNTI1MzlkNjA2Y2E2YmVlNTE4
YTYzMTM3NzA5OWU2N2FlYjdlLi5lYmFkOTU5YWJiZmNkNmEyN2JlMThiODJhNmVmN2VhMjcxMjIz
MmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNDY3LDcgKzQ2Nyw4IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBQcmltYXJ5S2V5LCBjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFm
b3VuZCkgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAgUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJv
ciBzZXR0aW5nIGluZGV4IGtleXMgZm9yIG9iamVjdCBzdG9yZSAlcy4iLCBuYW1lKCkudXRmOCgp
LmRhdGEoKSkpOworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC01NjAsNyArNTYxLDExIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0CiAKICAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAg
QWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJy
b3IuCiAKLSAgICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFz
ZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJlU3RyaW5n
KCksICZyZWNvcmRJZGVudGlmaWVyKTsKKyAgICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV9vYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0
b3JlLT5pZCgpLCAqbV9rZXksIG1fdmFsdWUtPnRvV2lyZVN0cmluZygpLCAmcmVjb3JkSWRlbnRp
Zmllcik7CisgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVy
Zm9ybWluZyBwdXQvYWRkLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIElu
ZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5kZXgg
OWIxN2FkZDExNTk3YTMxYTJiZDVkZTdkMmE4ODRhYmUxZTYxMjZlMy4uZjk2NTA3M2MwYWYzZWMy
YWZmNzM0MzgwZTI0ZDc4NWY2NjExOTg2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTQyLDcgKzQyLDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IGdldE9iamVjdFN0
b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpIE9WRVJSSURFIHsgcmV0dXJuIFZlY3RvcjxJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhPigpOyB9CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3Jl
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVu
dCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH07CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHV0UmVj
b3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIq
KSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklE
RSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZp
ZXImKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90JiBjdXJyZW50TnVtYmVyKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178318</attachid>
            <date>2012-12-07 18:16:09 -0800</date>
            <delta_ts>2012-12-07 18:22:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104422-20121207181332.patch</filename>
            <type>text/plain</type>
            <size>24947</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM2ZTlhNjg4ZWM5ZjU5
YTE5NjIyYjc0MmY1ZGJjNzQxMmZiODk1Yi4uZTI5M2Q3ZTVlZWMxZTcxZTkzNTBlZDg3ZDY4OTI5
MWViMDg1ODJhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTEyLTA3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBhbGwgbGV2ZWxkYiBlcnJvcnMgdG8gc2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ0MjIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRo
ZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5j
dGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTYWZlSW50KToKKyAgICAgICAgKFdlYkNvcmU6Omlz
U2NoZW1hS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0VXBNZXRhZGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRNYXhPYmplY3RTdG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Omdl
dElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmV3RGF0YWJhc2VJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNl
TWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4T2JqZWN0U3RvcmVJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXROZXdWZXJzaW9uTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldE1heEluZGV4
SWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAg
ICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVy
YXRpb246OnBlcmZvcm0pOgorCiAyMDEyLTEyLTA3ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBDaGVjayBTU1YgdmVyc2lvbiB3aGVuIG9w
ZW5pbmcgZGF0YWJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjI2MDhlYzE0MDRi
MmJjMzc2NDdhMDM1MTI5YjJhNTdhYjU4MGMzMC4uOGVmOTI0ZWU5NjNmZDdkYjk2NmJhNmI5ZjU4
OTA4MThiYzA4NGI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxMi0xMi0wNyAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgSW5kZXhlZERCOiBQcm9wYWdhdGUgYWxsIGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NDIyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25h
bCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4g
UGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAg
ICAgICAgKiB0ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmg6CisKIDIwMTItMTItMDcgIE1hcmsg
UGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92
ZSBXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSBvdXQgb2YgUGxhdGZvcm1TdXBwb3J0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNw
cAppbmRleCAzZTExMGI2OTVmMDAxNWI1NjkzYTkwNDYxNGExOGYxMzM1NDc1ZTQxLi45Y2MwNDBk
YjE0YmUyY2NhZTMyMGFlYWNhNDBlODUwNjNhNjc0MjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTY4LDYgKzY4
LDEwIEBAIGVudW0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHsKICAg
ICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yS2V5RXhpc3RzSW5JbmRleCwKICAgICBJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yVmVyc2lvbkV4aXN0cywKICAgICBJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yRGVsZXRlT2JqZWN0U3RvcmUsCisgICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heE9iamVjdFN0b3JlSWQsCisgICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heEluZGV4SWQsCisgICAgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvckdldE5ld0RhdGFiYXNlSWQsCisgICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVJlYWRFcnJvckdldE5ld1ZlcnNpb25OdW1iZXIsCiAgICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZUludGVybmFsRXJyb3JNYXgsCiB9Owogc3RhdGljIGlubGluZSB2b2lkIHJlY29yZEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHR5cGUpCkBA
IC04NCwzMiArODgsMjAgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlY29yZEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHQKICAgICAgICAgcmVjb3Jk
SW50ZXJuYWxFcnJvcih0eXBlKTsgXAogICAgIH0gd2hpbGUgKDApCiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgYm9vbCBnZXRCb29sKERCT3JUcmFuc2FjdGlv
biogZGIsIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBib29sJiBmb3VuZEJvb2wpCi17Ci0gICAg
VmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3VuZEJvb2wgPSBkZWNvZGVCb29sKHJlc3VsdC5i
ZWdpbigpLCByZXN1bHQuZW5kKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgdm9p
ZCBwdXRCb29sKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IExldmVsREJT
bGljZSYga2V5LCBib29sIHZhbHVlKQogewogICAgIHRyYW5zYWN0aW9uLT5wdXQoa2V5LCBlbmNv
ZGVCb29sKHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+
Ci1zdGF0aWMgYm9vbCBnZXRJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgTGV2ZWxEQlNs
aWNlJiBrZXksIGludDY0X3QmIGZvdW5kSW50KQorc3RhdGljIGJvb2wgZ2V0SW50KERCT3JUcmFu
c2FjdGlvbiogZGIsIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBpbnQ2NF90JiBmb3VuZEludCwg
Ym9vbCYgZm91bmQpCiB7CiAgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBib29sIGZvdW5k
ID0gZmFsc2U7CiAgICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwgcmVzdWx0LCBmb3VuZCk7
Ci0gICAgLy8gRklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIGlmICFvay4KLSAgICBBU1NFUlRfVU5V
U0VEKG9rLCBvayk7Ci0gICAgaWYgKCFmb3VuZCkKKyAgICBpZiAoIW9rKQogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBm
b3VuZEludCA9IGRlY29kZUludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTE4NSwyNiArMTc3LDQyIEBAIHB1YmxpYzoKIC8vIDEgLSBBZGRzIFVz
ZXJJbnRWZXJzaW9uIHRvIERhdGFiYXNlTWV0YURhdGEuCiAvLyAyIC0gQWRkcyBEYXRhVmVyc2lv
biB0byB0byBnbG9iYWwgbWV0YWRhdGEuCiBjb25zdCBpbnQ2NF90IGxhdGVzdEtub3duU2NoZW1h
VmVyc2lvbiA9IDI7Ci1zdGF0aWMgYm9vbCBpc1NjaGVtYUtub3duKExldmVsREJEYXRhYmFzZSog
ZGIpCitXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgaXNTY2hlbWFLbm93bihMZXZlbERC
RGF0YWJhc2UqIGRiLCBib29sJiBrbm93bikKIHsKICAgICBpbnQ2NF90IGRiU2NoZW1hVmVyc2lv
biA9IDA7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIFNjaGVtYVZlcnNpb25LZXk6OmVuY29kZSgpLCBk
YlNjaGVtYVZlcnNpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoZGJTY2hlbWFW
ZXJzaW9uID4gbGF0ZXN0S25vd25TY2hlbWFWZXJzaW9uKQorICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKKyAgICBib29sIG9rID0gZ2V0SW50KGRiLCBTY2hlbWFWZXJzaW9uS2V5OjplbmNvZGUoKSwg
ZGJTY2hlbWFWZXJzaW9uLCBmb3VuZCk7CisgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZm91bmQpIHsKKyAgICAgICAga25vd24gPSB0cnVlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGRiU2NoZW1hVmVyc2lvbiA+IGxhdGVzdEtub3du
U2NoZW1hVmVyc2lvbikgeworICAgICAgICBrbm93biA9IGZhbHNlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CiAKICAgICBjb25zdCB1aW50MzJfdCBsYXRlc3RLbm93bkRhdGFWZXJzaW9u
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3aXJlRm9ybWF0VmVyc2lvbigpOwogICAgIGludDY0
X3QgZGJEYXRhVmVyc2lvbiA9IDA7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIERhdGFWZXJzaW9uS2V5
OjplbmNvZGUoKSwgZGJEYXRhVmVyc2lvbikpCisgICAgb2sgPSBnZXRJbnQoZGIsIERhdGFWZXJz
aW9uS2V5OjplbmNvZGUoKSwgZGJEYXRhVmVyc2lvbiwgZm91bmQpOworICAgIGlmICghb2spCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgIGtub3duID0g
dHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgaWYgKGRiRGF0YVZlcnNp
b24gPiBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGRiRGF0YVZlcnNpb24gPiBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKSB7CisgICAgICAgIGtu
b3duID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAorICAgIGtub3duID0g
dHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShM
ZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKK1dBUk5fVU5VU0VEX1JF
VFVSTiBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0
IFN0cmluZyYgb3JpZ2luKQogewogICAgIGNvbnN0IHVpbnQzMl90IGxhdGVzdEtub3duRGF0YVZl
cnNpb24gPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndpcmVGb3JtYXRWZXJzaW9uKCk7CiAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHNjaGVtYVZlcnNpb25LZXkgPSBTY2hlbWFWZXJzaW9uS2V5Ojpl
bmNvZGUoKTsKQEAgLTIxNCw3ICsyMjIsMTMgQEAgc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShM
ZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKIAogICAgIGludDY0X3Qg
ZGJTY2hlbWFWZXJzaW9uID0gMDsKICAgICBpbnQ2NF90IGRiRGF0YVZlcnNpb24gPSAwOwotICAg
IGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBzY2hlbWFWZXJzaW9uS2V5LCBkYlNjaGVt
YVZlcnNpb24pKSB7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBnZXRJ
bnQodHJhbnNhY3Rpb24uZ2V0KCksIHNjaGVtYVZlcnNpb25LZXksIGRiU2NoZW1hVmVyc2lvbiwg
Zm91bmQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAvLyBJbml0aWFsaXplIG5ldyBi
YWNraW5nIHN0b3JlLgogICAgICAgICBkYlNjaGVtYVZlcnNpb24gPSBsYXRlc3RLbm93blNjaGVt
YVZlcnNpb247CiAgICAgICAgIHB1dEludCh0cmFuc2FjdGlvbi5nZXQoKSwgc2NoZW1hVmVyc2lv
bktleSwgZGJTY2hlbWFWZXJzaW9uKTsKQEAgLTIzMSwxMCArMjQ1LDE2IEBAIHN0YXRpYyBib29s
IHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4p
CiAgICAgICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJdGVy
YXRvcigpOwogICAgICAgICAgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlk
KCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsK
ICAgICAgICAgICAgICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSAwOwotICAgICAgICAgICAgICAg
IGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBpdC0+a2V5KCksIGRhdGFiYXNlSWQpKSB7
CisgICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBib29sIG9r
ID0gZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBpdC0+a2V5KCksIGRhdGFiYXNlSWQsIGZvdW5k
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgICAgICAgICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldHVwTWV0YWRhdGEpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IGludFZlcnNpb25LZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pOwogICAg
ICAgICAgICAgICAgIHB1dFZhckludCh0cmFuc2FjdGlvbi5nZXQoKSwgaW50VmVyc2lvbktleSwg
SURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pOwogICAgICAgICAgICAgfQpA
QCAtMjQ4LDggKzI2OCwxNCBAQCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRh
YmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogICAgIH0KIAogICAgIC8vIEFsbCBuZXcg
dmFsdWVzIHdpbGwgYmUgd3JpdHRlbiB1c2luZyB0aGlzIHNlcmlhbGl6YXRpb24gdmVyc2lvbi4K
LSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwgZGF0YVZlcnNpb25LZXksIGRiRGF0
YVZlcnNpb24pKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZVJlYWRFcnJvcik7CisgICAgZm91bmQgPSBmYWxzZTsKKyAgICBvayA9IGdldEludCh0cmFuc2Fj
dGlvbi5nZXQoKSwgZGF0YVZlcnNpb25LZXksIGRiRGF0YVZlcnNpb24sIGZvdW5kKTsKKyAgICBp
ZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJl
YWRFcnJvclNldHVwTWV0YWRhdGEpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGlmICghZm91bmQpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlQ29uc2lzdGVuY3lFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
aWYgKGRiRGF0YVZlcnNpb24gPCBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKSB7CkBAIC0yNjgsMjEg
KzI5NCwyNiBAQCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIs
IGNvbnN0IFN0cmluZyYgb3JpZ2luKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5z
YWN0aW9uPgotc3RhdGljIGludDY0X3QgZ2V0TWF4T2JqZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rp
b24qIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQpCitXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJv
b2wgZ2V0TWF4T2JqZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3QmIG1heE9iamVjdFN0b3JlSWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNo
YXI+IG1heE9iamVjdFN0b3JlSWRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6TWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgcmV0
dXJuIGdldE1heE9iamVjdFN0b3JlSWQoZGIsIG1heE9iamVjdFN0b3JlSWRLZXkpOworICAgIGJv
b2wgb2sgPSBnZXRNYXhPYmplY3RTdG9yZUlkKGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBtYXhP
YmplY3RTdG9yZUlkKTsKKyAgICByZXR1cm4gb2s7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBE
Qk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgaW50NjRfdCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JU
cmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbWF4T2JqZWN0U3RvcmVJZEtleSkK
K1dBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JU
cmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbWF4T2JqZWN0U3RvcmVJZEtleSwg
aW50NjRfdCYgbWF4T2JqZWN0U3RvcmVJZCkKIHsKLSAgICBpbnQ2NF90IG1heE9iamVjdFN0b3Jl
SWQgPSAtMTsKLSAgICBpZiAoIWdldEludChkYiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgbWF4T2Jq
ZWN0U3RvcmVJZCkpCisgICAgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOworICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKKyAgICBib29sIG9rID0gZ2V0SW50KGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBt
YXhPYmplY3RTdG9yZUlkLCBmb3VuZCk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZm91bmQpCiAgICAgICAgIG1heE9iamVjdFN0b3JlSWQgPSAwOwogCiAg
ICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1heE9iamVjdFN0
b3JlSWQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIElEQkJhY2tpbmdTdG9yZTo6SURCQmFja2lu
Z1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBm
YWN0b3J5LCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIpCkBAIC0zNDAsMTAgKzM3MSwx
OCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3JlOjpvcGVuKFNl
Y3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbgogICAgICAgICBTdHJpbmcgcGF0aCA9IHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRl
bnRpZmllcigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOwogCiAgICAgICAgIGRiID0gTGV2ZWxE
QkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwotICAgICAgICBpZiAoZGIg
JiYgIWlzU2NoZW1hS25vd24oZGIuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIklu
ZGV4ZWREQiBiYWNraW5nIHN0b3JlIGhhZCB1bmtub3duIHNjaGVtYSwgdHJlYXRpbmcgaXQgYXMg
ZmFpbHVyZSB0byBvcGVuIik7Ci0gICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dy
YW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMi
LCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEsIElEQkxldmVs
REJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAgICAgICAgICAgIGRiLmNsZWFyKCk7CisgICAgICAg
IGlmIChkYikgeworICAgICAgICAgICAgYm9vbCBrbm93biA9IGZhbHNlOworICAgICAgICAgICAg
Ym9vbCBvayA9IGlzU2NoZW1hS25vd24oZGIuZ2V0KCksIGtub3duKTsKKyAgICAgICAgICAgIGlm
ICghb2spIHsKKyAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5n
U3RvcmVSZWFkRXJyb3JTZXR1cE1ldGFkYXRhKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIWtub3duKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2lu
ZyBzdG9yZSBoYWQgdW5rbm93biBzY2hlbWEsIHRyZWF0aW5nIGl0IGFzIGZhaWx1cmUgdG8gb3Bl
biIpOworICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0
aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVs
REJCYWNraW5nU3RvcmVPcGVuRmFpbGVkVW5rbm93blNjaGVtYSwgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZU9wZW5NYXgpOworICAgICAgICAgICAgICAgIGRiLmNsZWFyKCk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZGIpCkBAIC00MDksMTEgKzQ0OCwxNSBAQCBib29s
IElEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkRhdGFiYXNlTWV0YQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFz
ZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwogICAgIGZvdW5kID0gZmFsc2U7
CiAKLSAgICBmb3VuZCA9IGdldEludChtX2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5pZCk7Cisg
ICAgYm9vbCBvayA9IGdldEludChtX2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5pZCwgZm91bmQp
OworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBib29sIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVu
Y29kZShtZXRhZGF0YS0+aWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgbWV0
YWRhdGEtPnZlcnNpb24sIGZvdW5kKTsKKyAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBE
YXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUobWV0YWRhdGEtPmlkLCBEYXRhYmFzZU1ldGFEYXRh
S2V5OjpVc2VyVmVyc2lvbiksIG1ldGFkYXRhLT52ZXJzaW9uLCBmb3VuZCk7CiAgICAgaWYgKCFv
aykgewogICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJy
b3JHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDM2
LDE3ICs0NzksMjggQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGEKICAgICBpZiAobWV0YWRhdGEt
PmludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pCiAg
ICAgICAgIG1ldGFkYXRhLT5pbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRW
ZXJzaW9uOwogCi0gICAgbWV0YWRhdGEtPm1heE9iamVjdFN0b3JlSWQgPSBnZXRNYXhPYmplY3RT
dG9yZUlkKG1fZGIuZ2V0KCksIG1ldGFkYXRhLT5pZCk7CisgICAgb2sgPSBnZXRNYXhPYmplY3RT
dG9yZUlkKG1fZGIuZ2V0KCksIG1ldGFkYXRhLT5pZCwgbWV0YWRhdGEtPm1heE9iamVjdFN0b3Jl
SWQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludDY0X3Qg
Z2V0TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQorV0FSTl9VTlVTRURfUkVUVVJO
IHN0YXRpYyBib29sIGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRf
dCYgbmV3SWQpCiB7CiAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24g
PSBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZShkYik7CiAKKyAgICBuZXdJZCA9IC0xOwogICAg
IGludDY0X3QgbWF4RGF0YWJhc2VJZCA9IC0xOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9u
LmdldCgpLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgbWF4RGF0YWJhc2VJZCkpCisgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBnZXRJbnQodHJhbnNhY3Rpb24uZ2V0
KCksIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBtYXhEYXRhYmFzZUlkLCBmb3VuZCk7Cisg
ICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVSZWFkRXJyb3JHZXROZXdEYXRhYmFzZUlkKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoIWZvdW5kKQogICAgICAgICBtYXhEYXRhYmFzZUlkID0gMDsKIAogICAgIEFT
U0VSVChtYXhEYXRhYmFzZUlkID49IDApOwpAQCAtNDU1LDE2ICs1MDksMTggQEAgc3RhdGljIGlu
dDY0X3QgZ2V0TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQogICAgIHB1dEludCh0
cmFuc2FjdGlvbi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIGRhdGFiYXNlSWQp
OwogICAgIGlmICghdHJhbnNhY3Rpb24tPmNvbW1pdCgpKSB7CiAgICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIGRhdGFiYXNlSWQ7Cisg
ICAgbmV3SWQgPSBkYXRhYmFzZUlkOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIElEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJ
ZCkKIHsKLSAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5nZXQoKSk7Ci0gICAgaWYg
KHJvd0lkIDwgMCkKKyAgICBib29sIG9rID0gZ2V0TmV3RGF0YWJhc2VJZChtX2RiLmdldCgpLCBy
b3dJZCk7CisgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChy
b3dJZCA+PSAwKTsKIAogICAgIGlmIChpbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6
Ok5vSW50VmVyc2lvbikKICAgICAgICAgaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6
OkRlZmF1bHRJbnRWZXJzaW9uOwpAQCAtNjM0LDEwICs2OTAsMTUgQEAgVmVjdG9yPElEQk9iamVj
dFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3Qg
ZGF0YWJhc2UKICAgICByZXR1cm4gb2JqZWN0U3RvcmVzOwogfQogCi1zdGF0aWMgYm9vbCBzZXRN
YXhPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorV0FSTl9VTlVTRURfUkVUVVJOIHN0
YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IG1heE9iamVjdFN0b3JlSWRLZXkgPSBEYXRhYmFzZU1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6TWF4T2JqZWN0U3Rv
cmVJZCk7Ci0gICAgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkID0gZ2V0TWF4T2JqZWN0U3RvcmVJ
ZCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSk7CisgICAgaW50NjRfdCBtYXhPYmpl
Y3RTdG9yZUlkID0gLTE7CisgICAgYm9vbCBvayA9IGdldE1heE9iamVjdFN0b3JlSWQodHJhbnNh
Y3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXksIG1heE9iamVjdFN0b3JlSWQpOworICAgIGlmICgh
b2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yU2V0TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAK
ICAgICBpZiAob2JqZWN0U3RvcmVJZCA8PSBtYXhPYmplY3RTdG9yZUlkKSB7CiAgICAgICAgIElu
dGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IpOwpAQCAt
NzMyLDEyICs3OTMsMTkgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjQKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKK1dBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdWZXJzaW9uTnVtYmVy
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBuZXdWZXJzaW9uTnVtYmVyKQogewogICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
OjpMYXN0VmVyc2lvbik7CiAKKyAgICBuZXdWZXJzaW9uTnVtYmVyID0gLTE7CiAgICAgaW50NjRf
dCBsYXN0VmVyc2lvbiA9IC0xOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVy
c2lvbktleSwgbGFzdFZlcnNpb24pKQorICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29s
IG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgbGFzdFZlcnNpb24sIGZv
dW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld1ZlcnNpb25OdW1iZXIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGlmICghZm91bmQpCiAgICAgICAgIGxhc3RWZXJzaW9uID0gMDsK
IAogICAgIEFTU0VSVChsYXN0VmVyc2lvbiA+PSAwKTsKQEAgLTc0NywxNSArODE1LDIwIEBAIHN0
YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhCiAKICAgICBBU1NFUlQodmVyc2lvbiA+IGxhc3RWZXJzaW9u
KTsgLy8gRklYTUU6IFRoaW5rIGFib3V0IGhvdyB3ZSB3YW50IHRvIGhhbmRsZSB0aGUgb3ZlcmZs
b3cgc2NlbmFyaW8uCiAKLSAgICByZXR1cm4gdmVyc2lvbjsKKyAgICBuZXdWZXJzaW9uTnVtYmVy
ID0gdmVyc2lvbjsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJCYWNraW5nU3RvcmU6
OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVy
KQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVu
dGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQogewogICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0
b3JlOjpwdXRSZWNvcmQiKTsKICAgICBBU1NFUlQoa2V5LmlzVmFsaWQoKSk7CiAgICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBpbnQ2NF90
IHZlcnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgaW50NjRfdCB2ZXJzaW9uID0gLTE7CisgICAgYm9v
bCBvayA9IGdldE5ld1ZlcnNpb25OdW1iZXIobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCB2ZXJzaW9uKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgQVNTRVJUKHZlcnNpb24gPj0gMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IG9iamVjdFN0b3JlZGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gdjsKQEAgLTc2OCw2
ICs4NDEsNyBAQCB2b2lkIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NAogICAgIGxldmVsREJUcmFuc2FjdGlv
bi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpOwogCiAgICAgcmVjb3Jk
SWRlbnRpZmllci0+cmVzZXQoZW5jb2RlSURCS2V5KGtleSksIHZlcnNpb24pOworICAgIHJldHVy
biB0cnVlOwogfQogCiB2b2lkIElEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCkBAIC05NTQsMTEgKzEwMjgsMTcgQEAgVmVjdG9yPElE
QkluZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3QKICAgICByZXR1cm4gaW5kZXhlczsKIH0KIAotc3RhdGljIGJvb2wgc2V0
TWF4SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorV0FSTl9VTlVT
RURfUkVUVVJOIHN0YXRpYyBib29sIHNldE1heEluZGV4SWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCkKIHsKICAgICBpbnQ2NF90IG1heEluZGV4SWQgPSAtMTsKICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpN
YXhJbmRleElkKTsKLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwg
bWF4SW5kZXhJZCkpCisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBnZXRJ
bnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIG1heEluZGV4SWQsIGZvdW5kKTsKKyAgICBp
ZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJl
YWRFcnJvclNldE1heEluZGV4SWQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGlmICghZm91bmQpCiAgICAgICAgIG1heEluZGV4SWQgPSBNaW5pbXVtSW5kZXhJZDsKIAogICAg
IGlmIChpbmRleElkIDw9IG1heEluZGV4SWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggZTZlZDRkODA1MTgwNmRlMWZi
MGI3N2Q5MjY2OTZlNDMxZWRmZThlYy4uNWQxYWFjYzRmMGU3ODQzMjAyZGFhNmJjZDI3MDQ3MWNi
MmVlNjNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICB2
aXJ0dWFsIGJvb2wgZ2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgU3Ry
aW5nJiByZWNvcmQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0UmVj
b3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
UmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlm
aWVyKikgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGN1
cnJlbnROdW1iZXIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5k
ZXggZWNiNjFlZTFmOTI5YTIwMTYyMGFmNmZhMjdkZDNiZTVjY2JhMTkzMC4uNjIzYTNlMGZjMWIz
MDVkMjY2ODQxMTI3MGE2NjA4MTY5NzUyYmQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAg
LTI5Myw3ICsyOTMsOCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQgogewogICAgIElEQl9UUkFD
RSgiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKICAgICBpZiAoIW1fZGF0YWJhc2UtPm1f
YmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZS0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9v
YmplY3RTdG9yZS0+bmFtZSgpLCBtX29iamVjdFN0b3JlLT5rZXlQYXRoKCksIG1fb2JqZWN0U3Rv
cmUtPmF1dG9JbmNyZW1lbnQoKSkpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Cisg
ICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgY3JlYXRpbmcgb2JqZWN0IHN0b3JlLiIpOworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQo
ZXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5k
ZXggYmUwNDczOThkODVlOTQxZTk1OWMxZjUxNzllNmI0NWI0NjE1MDBmYi4uZWU4MzJlOTBkMDRk
NTVkZjk4NzNjMmU1NTI3OGZmOWIyYjQzMjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0x
NTEsNyArMTUxLDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHIKICAgICBpZiAoaXQgPT0gbV9k
YXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKICAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURp
cmVjdG9yeSk7CiAgICAgICAgIGlmICghYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUu
IikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5jcHAKaW5kZXggMmFkYTUyNTM5ZDYwNmNhNmJlZTUxOGE2MzEzNzcwOTllNjdhZWI3ZS4u
ZWJhZDk1OWFiYmZjZDZhMjdiZTE4YjgyYTZlZjdlYTI3MTIyMzJiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAKQEAgLTQ2Nyw3ICs0NjcsOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwg
YwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgdHJh
bnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
ciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBpbmRleCBrZXlz
IGZvciBvYmplY3Qgc3RvcmUgJXMuIiwgbmFtZSgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAg
dHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NTYwLDcgKzU2MSwxMSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0
b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdAogCiAgICAgLy8gQmVmb3Jl
IHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMgcG9pbnQsIHJv
bGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgogCi0gICAgbV9vYmplY3RT
dG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3Jl
LT5pZCgpLCAqbV9rZXksIG1fdmFsdWUtPnRvV2lyZVN0cmluZygpLCAmcmVjb3JkSWRlbnRpZmll
cik7CisgICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9y
ZSgpLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
b2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKm1fa2V5LCBt
X3ZhbHVlLT50b1dpcmVTdHJpbmcoKSwgJnJlY29yZElkZW50aWZpZXIpOworICAgIGlmICghYmFj
a2luZ1N0b3JlU3VjY2VzcykgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
ZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewogICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0
ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IDliMTdhZGQxMTU5N2EzMWEyYmQ1
ZGU3ZDJhODg0YWJlMWU2MTI2ZTMuLmY5NjUwNzNjMGFmM2VjMmFmZjczNDM4MGUyNGQ3ODVmNjYx
MTk4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJh
Y2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJh
Y2tpbmdTdG9yZS5oCkBAIC00Miw3ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZlY3Rv
cjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFz
ZUlkKSBPVkVSUklERSB7IHJldHVybiBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4oKTsg
fQogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpIE9WRVJSSURFIHsgcmV0dXJu
IGZhbHNlOyB9OwogCi0gICAgdmlydHVhbCB2b2lkIHB1dFJlY29yZChUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyJikgT1ZFUlJJREUgeyB9CiAg
ICAgdmlydHVhbCBib29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCYgY3Vy
cmVudE51bWJlcikgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178319</attachid>
            <date>2012-12-07 18:22:45 -0800</date>
            <delta_ts>2012-12-07 18:37:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104422-20121207182009.patch</filename>
            <type>text/plain</type>
            <size>22723</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM2ZTlhNjg4ZWM5ZjU5
YTE5NjIyYjc0MmY1ZGJjNzQxMmZiODk1Yi4uNDdlNWY4ZWJjM2I5MDZkZDMyYmVmOWVkMmRmMTVl
OWUzZDE5YTA5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTEyLTA3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBhbGwgbGV2ZWxkYiBlcnJvcnMgdG8gc2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ0MjIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKwkKKyAgICAgICAgVGhlc2UgYXJlIHRoZSBsYXN0IHBsYWNlcyB0
aGF0IGlnbm9yZSBsZXZlbGRiIGVycm9ycy4gTW9yZSBvZiB0aGUKKyAgICAgICAgdXN1YWwgb2sv
Zm91bmQgdHJlYXRtZW50LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2NoZW1hS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6
c2V0VXBNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRNYXhPYmplY3RTdG9yZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0TmV3RGF0YWJhc2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
TWF4T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXdWZXJzaW9uTnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldE1heEluZGV4SWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0
b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorCiAyMDEyLTEyLTA3ICBKb3NodWEgQmVsbCAgPGpz
YmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBDaGVjayBTU1YgdmVyc2lv
biB3aGVuIG9wZW5pbmcgZGF0YWJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjI2
MDhlYzE0MDRiMmJjMzc2NDdhMDM1MTI5YjJhNTdhYjU4MGMzMC4uZTIxNmIxYmQzZjFhNDMyMzNi
M2JkODYwMmQ0MTE0NGE5M2FkNzY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxMi0xMi0wNyAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBQcm9wYWdhdGUgYWxsIGxldmVsZGIgZXJyb3JzIHRv
IHNjcmlwdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA0NDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB0ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmg6CisgICAgICAgICAgRGVsZXRlIG1ldGhvZCBv
dmVycmlkZSB0aGF0IGRvZXNuJ3QgbWF0Y2ggbmV3IHNpZ25hdHVyZS4KKwogMjAxMi0xMi0wNyAg
TWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVt
XSBNb3ZlIFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlIG91dCBvZiBQbGF0Zm9ybVN1cHBvcnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuY3BwCmluZGV4IDNlMTEwYjY5NWYwMDE1YjU2OTNhOTA0NjE0YTE4ZjEzMzU0NzVlNDEuLjlj
YzA0MGRiMTRiZTJjY2FlMzIwYWVhY2E0MGU4NTA2M2E2NzQyMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAtNjgs
NiArNjgsMTAgQEAgZW51bSBJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUg
ewogICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JLZXlFeGlzdHNJbkluZGV4LAog
ICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JWZXJzaW9uRXhpc3RzLAogICAgIElE
QkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JEZWxldGVPYmplY3RTdG9yZSwKKyAgICBJREJM
ZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0TWF4T2JqZWN0U3RvcmVJZCwKKyAgICBJREJM
ZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0TWF4SW5kZXhJZCwKKyAgICBJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yR2V0TmV3RGF0YWJhc2VJZCwKKyAgICBJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yR2V0TmV3VmVyc2lvbk51bWJlciwKICAgICBJREJMZXZlbERCQmFj
a2luZ1N0b3JlSW50ZXJuYWxFcnJvck1heCwKIH07CiBzdGF0aWMgaW5saW5lIHZvaWQgcmVjb3Jk
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgdHlw
ZSkKQEAgLTg0LDMyICs4OCwyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVjb3JkSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgdAogICAgICAgICBy
ZWNvcmRJbnRlcm5hbEVycm9yKHR5cGUpOyBcCiAgICAgfSB3aGlsZSAoMCkKIAotdGVtcGxhdGUg
PHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBib29sIGdldEJvb2woREJPclRyYW5z
YWN0aW9uKiBkYiwgY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGJvb2wmIGZvdW5kQm9vbCkKLXsK
LSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvdW5kQm9vbCA9IGRlY29kZUJvb2wocmVz
dWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRp
YyB2b2lkIHB1dEJvb2woTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgTGV2
ZWxEQlNsaWNlJiBrZXksIGJvb2wgdmFsdWUpCiB7CiAgICAgdHJhbnNhY3Rpb24tPnB1dChrZXks
IGVuY29kZUJvb2wodmFsdWUpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2Fj
dGlvbj4KLXN0YXRpYyBib29sIGdldEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBMZXZl
bERCU2xpY2UmIGtleSwgaW50NjRfdCYgZm91bmRJbnQpCitzdGF0aWMgYm9vbCBnZXRJbnQoREJP
clRyYW5zYWN0aW9uKiBkYiwgY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGludDY0X3QmIGZvdW5k
SW50LCBib29sJiBmb3VuZCkKIHsKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKICAgICBib29sIG9rID0gZGItPnNhZmVHZXQoa2V5LCByZXN1bHQsIGZv
dW5kKTsKLSAgICAvLyBGSVhNRTogTm90aWZ5IHRoZSBjYWxsZXIgaWYgIW9rLgotICAgIEFTU0VS
VF9VTlVTRUQob2ssIG9rKTsKLSAgICBpZiAoIWZvdW5kKQorICAgIGlmICghb2spCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGZvdW5kSW50ID0gZGVjb2RlSW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMTg1LDI2ICsxNzcsNDIgQEAgcHVibGljOgogLy8gMSAtIEFk
ZHMgVXNlckludFZlcnNpb24gdG8gRGF0YWJhc2VNZXRhRGF0YS4KIC8vIDIgLSBBZGRzIERhdGFW
ZXJzaW9uIHRvIHRvIGdsb2JhbCBtZXRhZGF0YS4KIGNvbnN0IGludDY0X3QgbGF0ZXN0S25vd25T
Y2hlbWFWZXJzaW9uID0gMjsKLXN0YXRpYyBib29sIGlzU2NoZW1hS25vd24oTGV2ZWxEQkRhdGFi
YXNlKiBkYikKK1dBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBpc1NjaGVtYUtub3duKExl
dmVsREJEYXRhYmFzZSogZGIsIGJvb2wmIGtub3duKQogewogICAgIGludDY0X3QgZGJTY2hlbWFW
ZXJzaW9uID0gMDsKLSAgICBpZiAoIWdldEludChkYiwgU2NoZW1hVmVyc2lvbktleTo6ZW5jb2Rl
KCksIGRiU2NoZW1hVmVyc2lvbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChkYlNj
aGVtYVZlcnNpb24gPiBsYXRlc3RLbm93blNjaGVtYVZlcnNpb24pCisgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOworICAgIGJvb2wgb2sgPSBnZXRJbnQoZGIsIFNjaGVtYVZlcnNpb25LZXk6OmVuY29k
ZSgpLCBkYlNjaGVtYVZlcnNpb24sIGZvdW5kKTsKKyAgICBpZiAoIW9rKQogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBrbm93biA9IHRydWU7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoZGJTY2hlbWFWZXJzaW9uID4gbGF0ZXN0
S25vd25TY2hlbWFWZXJzaW9uKSB7CisgICAgICAgIGtub3duID0gZmFsc2U7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KIAogICAgIGNvbnN0IHVpbnQzMl90IGxhdGVzdEtub3duRGF0YVZl
cnNpb24gPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndpcmVGb3JtYXRWZXJzaW9uKCk7CiAgICAg
aW50NjRfdCBkYkRhdGFWZXJzaW9uID0gMDsKLSAgICBpZiAoIWdldEludChkYiwgRGF0YVZlcnNp
b25LZXk6OmVuY29kZSgpLCBkYkRhdGFWZXJzaW9uKSkKKyAgICBvayA9IGdldEludChkYiwgRGF0
YVZlcnNpb25LZXk6OmVuY29kZSgpLCBkYkRhdGFWZXJzaW9uLCBmb3VuZCk7CisgICAgaWYgKCFv
aykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZm91bmQpIHsKKyAgICAgICAga25v
d24gPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKLSAgICBpZiAoZGJEYXRh
VmVyc2lvbiA+IGxhdGVzdEtub3duRGF0YVZlcnNpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoZGJEYXRhVmVyc2lvbiA+IGxhdGVzdEtub3duRGF0YVZlcnNpb24pIHsKKyAgICAg
ICAga25vd24gPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCisgICAga25v
d24gPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBzZXRVcE1ldGFk
YXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQorV0FSTl9VTlVT
RURfUkVUVVJOIHN0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwg
Y29uc3QgU3RyaW5nJiBvcmlnaW4pCiB7CiAgICAgY29uc3QgdWludDMyX3QgbGF0ZXN0S25vd25E
YXRhVmVyc2lvbiA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6d2lyZUZvcm1hdFZlcnNpb24oKTsK
ICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc2NoZW1hVmVyc2lvbktleSA9IFNjaGVtYVZlcnNpb25L
ZXk6OmVuY29kZSgpOwpAQCAtMjE0LDcgKzIyMiwxMyBAQCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFk
YXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogCiAgICAgaW50
NjRfdCBkYlNjaGVtYVZlcnNpb24gPSAwOwogICAgIGludDY0X3QgZGJEYXRhVmVyc2lvbiA9IDA7
Ci0gICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIHNjaGVtYVZlcnNpb25LZXksIGRi
U2NoZW1hVmVyc2lvbikpIHsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9
IGdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwgc2NoZW1hVmVyc2lvbktleSwgZGJTY2hlbWFWZXJz
aW9uLCBmb3VuZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JTZXR1cE1ldGFkYXRhKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgIC8vIEluaXRpYWxpemUg
bmV3IGJhY2tpbmcgc3RvcmUuCiAgICAgICAgIGRiU2NoZW1hVmVyc2lvbiA9IGxhdGVzdEtub3du
U2NoZW1hVmVyc2lvbjsKICAgICAgICAgcHV0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBzY2hlbWFW
ZXJzaW9uS2V5LCBkYlNjaGVtYVZlcnNpb24pOwpAQCAtMjMxLDEwICsyNDUsMTYgQEAgc3RhdGlj
IGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmIG9y
aWdpbikKICAgICAgICAgICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0
ZUl0ZXJhdG9yKCk7CiAgICAgICAgICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlz
VmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQo
KSkgewogICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IDA7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIGl0LT5rZXkoKSwgZGF0YWJhc2VJ
ZCkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJv
b2wgb2sgPSBnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIGl0LT5rZXkoKSwgZGF0YWJhc2VJZCwg
Zm91bmQpOworICAgICAgICAgICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgICAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0
YSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gaW50VmVyc2lvbktleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbik7
CiAgICAgICAgICAgICAgICAgcHV0VmFySW50KHRyYW5zYWN0aW9uLmdldCgpLCBpbnRWZXJzaW9u
S2V5LCBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbik7CiAgICAgICAgICAg
ICB9CkBAIC0yNDgsOCArMjY4LDE0IEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxE
QkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgfQogCiAgICAgLy8gQWxs
IG5ldyB2YWx1ZXMgd2lsbCBiZSB3cml0dGVuIHVzaW5nIHRoaXMgc2VyaWFsaXphdGlvbiB2ZXJz
aW9uLgotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBkYXRhVmVyc2lvbktleSwg
ZGJEYXRhVmVyc2lvbikpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yKTsKKyAgICBmb3VuZCA9IGZhbHNlOworICAgIG9rID0gZ2V0SW50KHRy
YW5zYWN0aW9uLmdldCgpLCBkYXRhVmVyc2lvbktleSwgZGJEYXRhVmVyc2lvbiwgZm91bmQpOwor
ICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICBpZiAoZGJEYXRhVmVyc2lvbiA8IGxhdGVzdEtub3duRGF0YVZlcnNpb24pIHsKQEAgLTI2
OCwyMSArMjk0LDI2IEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNl
KiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9y
VHJhbnNhY3Rpb24+Ci1zdGF0aWMgaW50NjRfdCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFu
c2FjdGlvbiogZGIsIGludDY0X3QgZGF0YWJhc2VJZCkKK1dBUk5fVU5VU0VEX1JFVFVSTiBzdGF0
aWMgYm9vbCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiogZGIsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCYgbWF4T2JqZWN0U3RvcmVJZCkKIHsKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpNYXhPYmplY3RTdG9yZUlkKTsKLSAg
ICByZXR1cm4gZ2V0TWF4T2JqZWN0U3RvcmVJZChkYiwgbWF4T2JqZWN0U3RvcmVJZEtleSk7Cisg
ICAgYm9vbCBvayA9IGdldE1heE9iamVjdFN0b3JlSWQoZGIsIG1heE9iamVjdFN0b3JlSWRLZXks
IG1heE9iamVjdFN0b3JlSWQpOworICAgIHJldHVybiBvazsKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBpbnQ2NF90IGdldE1heE9iamVjdFN0b3JlSWQo
REJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBtYXhPYmplY3RTdG9yZUlk
S2V5KQorV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIGdldE1heE9iamVjdFN0b3JlSWQo
REJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBtYXhPYmplY3RTdG9yZUlk
S2V5LCBpbnQ2NF90JiBtYXhPYmplY3RTdG9yZUlkKQogewotICAgIGludDY0X3QgbWF4T2JqZWN0
U3RvcmVJZCA9IC0xOwotICAgIGlmICghZ2V0SW50KGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBt
YXhPYmplY3RTdG9yZUlkKSkKKyAgICBtYXhPYmplY3RTdG9yZUlkID0gLTE7CisgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBnZXRJbnQoZGIsIG1heE9iamVjdFN0b3JlSWRL
ZXksIG1heE9iamVjdFN0b3JlSWQsIGZvdW5kKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgbWF4T2JqZWN0U3RvcmVJZCA9IDA7
CiAKICAgICBBU1NFUlQobWF4T2JqZWN0U3RvcmVJZCA+PSAwKTsKLSAgICByZXR1cm4gbWF4T2Jq
ZWN0U3RvcmVJZDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogSURCQmFja2luZ1N0b3JlOjpJREJC
YWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZElt
cGwqIGZhY3RvcnksIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYikKQEAgLTM0MCwxMCAr
MzcxLDE4IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6Om9w
ZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luCiAgICAgICAgIFN0cmluZyBwYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZlbGRiIik7CiAKICAgICAgICAgZGIgPSBM
ZXZlbERCRGF0YWJhc2U6Om9wZW4ocGF0aCwgY29tcGFyYXRvci5nZXQoKSk7Ci0gICAgICAgIGlm
IChkYiAmJiAhaXNTY2hlbWFLbm93bihkYi5nZXQoKSkpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgaGFkIHVua25vd24gc2NoZW1hLCB0cmVhdGluZyBp
dCBhcyBmYWlsdXJlIHRvIG9wZW4iKTsKLSAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhp
c3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0
YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkVW5rbm93blNjaGVtYSwgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwotICAgICAgICAgICAgZGIuY2xlYXIoKTsKKyAg
ICAgICAgaWYgKGRiKSB7CisgICAgICAgICAgICBib29sIGtub3duID0gZmFsc2U7CisgICAgICAg
ICAgICBib29sIG9rID0gaXNTY2hlbWFLbm93bihkYi5nZXQoKSwga25vd24pOworICAgICAgICAg
ICAgaWYgKCFvaykgeworICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZVJlYWRFcnJvclNldHVwTWV0YWRhdGEpOworICAgICAgICAgICAgICAgIHJldHVy
biBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICgha25vd24pIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBi
YWNraW5nIHN0b3JlIGhhZCB1bmtub3duIHNjaGVtYSwgdHJlYXRpbmcgaXQgYXMgZmFpbHVyZSB0
byBvcGVuIik7CisgICAgICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51
bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWRVbmtub3duU2NoZW1hLCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgICAgICAgICAgZGIuY2xlYXIoKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChkYikKQEAgLTQwOSwxMSArNDQ4LDE1IEBA
IGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERh
dGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7CiAgICAgZm91bmQgPSBm
YWxzZTsKIAotICAgIGZvdW5kID0gZ2V0SW50KG1fZGIuZ2V0KCksIGtleSwgbWV0YWRhdGEtPmlk
KTsKKyAgICBib29sIG9rID0gZ2V0SW50KG1fZGIuZ2V0KCksIGtleSwgbWV0YWRhdGEtPmlkLCBm
b3VuZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJC
YWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KICAgICBpZiAoIWZvdW5kKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGJvb2wgb2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtl
eTo6ZW5jb2RlKG1ldGFkYXRhLT5pZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24p
LCBtZXRhZGF0YS0+dmVyc2lvbiwgZm91bmQpOworICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0
KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShtZXRhZGF0YS0+aWQsIERhdGFiYXNlTWV0
YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgbWV0YWRhdGEtPnZlcnNpb24sIGZvdW5kKTsKICAgICBp
ZiAoIW9rKSB7CiAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJl
YWRFcnJvckdldElEQkRhdGFiYXNlTWV0YURhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC00MzYsMTcgKzQ3OSwyOCBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YQogICAgIGlmIChtZXRh
ZGF0YS0+aW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lv
bikKICAgICAgICAgbWV0YWRhdGEtPmludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpO
b0ludFZlcnNpb247CiAKLSAgICBtZXRhZGF0YS0+bWF4T2JqZWN0U3RvcmVJZCA9IGdldE1heE9i
amVjdFN0b3JlSWQobV9kYi5nZXQoKSwgbWV0YWRhdGEtPmlkKTsKKyAgICBvayA9IGdldE1heE9i
amVjdFN0b3JlSWQobV9kYi5nZXQoKSwgbWV0YWRhdGEtPmlkLCBtZXRhZGF0YS0+bWF4T2JqZWN0
U3RvcmVJZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVs
REJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50
NjRfdCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSogZGIpCitXQVJOX1VOVVNFRF9S
RVRVUk4gc3RhdGljIGJvb2wgZ2V0TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBp
bnQ2NF90JiBuZXdJZCkKIHsKICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiB0cmFuc2Fj
dGlvbiA9IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGRiKTsKIAorICAgIG5ld0lkID0gLTE7
CiAgICAgaW50NjRfdCBtYXhEYXRhYmFzZUlkID0gLTE7Ci0gICAgaWYgKCFnZXRJbnQodHJhbnNh
Y3Rpb24uZ2V0KCksIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBtYXhEYXRhYmFzZUlkKSkK
KyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGdldEludCh0cmFuc2FjdGlv
bi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIG1heERhdGFiYXNlSWQsIGZvdW5k
KTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvckdldE5ld0RhdGFiYXNlSWQpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGlmICghZm91bmQpCiAgICAgICAgIG1heERhdGFiYXNlSWQgPSAwOwogCiAg
ICAgQVNTRVJUKG1heERhdGFiYXNlSWQgPj0gMCk7CkBAIC00NTUsMTYgKzUwOSwxOCBAQCBzdGF0
aWMgaW50NjRfdCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSogZGIpCiAgICAgcHV0
SW50KHRyYW5zYWN0aW9uLmdldCgpLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgZGF0YWJh
c2VJZCk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+Y29tbWl0KCkpIHsKICAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gZGF0YWJhc2VJ
ZDsKKyAgICBuZXdJZCA9IGRhdGFiYXNlSWQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
SURCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3Qm
IHJvd0lkKQogewotICAgIHJvd0lkID0gZ2V0TmV3RGF0YWJhc2VJZChtX2RiLmdldCgpKTsKLSAg
ICBpZiAocm93SWQgPCAwKQorICAgIGJvb2wgb2sgPSBnZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0
KCksIHJvd0lkKTsKKyAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNT
RVJUKHJvd0lkID49IDApOwogCiAgICAgaWYgKGludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6Tm9JbnRWZXJzaW9uKQogICAgICAgICBpbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6RGVmYXVsdEludFZlcnNpb247CkBAIC02MzQsMTAgKzY5MCwxNSBAQCBWZWN0b3I8SURC
T2JqZWN0U3RvcmVNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50
NjRfdCBkYXRhYmFzZQogICAgIHJldHVybiBvYmplY3RTdG9yZXM7CiB9CiAKLXN0YXRpYyBib29s
IHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitXQVJOX1VOVVNFRF9SRVRV
Uk4gc3RhdGljIGJvb2wgc2V0TWF4T2JqZWN0U3RvcmVJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsK
ICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFiYXNlTWV0
YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpNYXhPYmpl
Y3RTdG9yZUlkKTsKLSAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSBnZXRNYXhPYmplY3RT
dG9yZUlkKHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5KTsKKyAgICBpbnQ2NF90IG1h
eE9iamVjdFN0b3JlSWQgPSAtMTsKKyAgICBib29sIG9rID0gZ2V0TWF4T2JqZWN0U3RvcmVJZCh0
cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCk7CisgICAg
aWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3JTZXRNYXhPYmplY3RTdG9yZUlkKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KIAogICAgIGlmIChvYmplY3RTdG9yZUlkIDw9IG1heE9iamVjdFN0b3JlSWQpIHsKICAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7
CkBAIC03MzIsMTIgKzc5MywxOSBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NAogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKQorV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIGdldE5ld1ZlcnNpb25O
dW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIG5ld1ZlcnNpb25OdW1iZXIpCiB7CiAg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6Okxhc3RWZXJzaW9uKTsKIAorICAgIG5ld1ZlcnNpb25OdW1iZXIgPSAtMTsKICAgICBp
bnQ2NF90IGxhc3RWZXJzaW9uID0gLTE7Ci0gICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIGxh
c3RWZXJzaW9uS2V5LCBsYXN0VmVyc2lvbikpCisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAg
IGJvb2wgb2sgPSBnZXRJbnQodHJhbnNhY3Rpb24sIGxhc3RWZXJzaW9uS2V5LCBsYXN0VmVyc2lv
biwgZm91bmQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0TmV3VmVyc2lvbk51bWJlcik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgbGFzdFZlcnNpb24g
PSAwOwogCiAgICAgQVNTRVJUKGxhc3RWZXJzaW9uID49IDApOwpAQCAtNzQ3LDE1ICs4MTUsMjAg
QEAgc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGEKIAogICAgIEFTU0VSVCh2ZXJzaW9uID4gbGFzdFZl
cnNpb24pOyAvLyBGSVhNRTogVGhpbmsgYWJvdXQgaG93IHdlIHdhbnQgdG8gaGFuZGxlIHRoZSBv
dmVyZmxvdyBzY2VuYXJpby4KIAotICAgIHJldHVybiB2ZXJzaW9uOworICAgIG5ld1ZlcnNpb25O
dW1iZXIgPSB2ZXJzaW9uOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQkJhY2tpbmdT
dG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50
aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29y
ZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgSURCX1RSQUNFKCJJREJCYWNr
aW5nU3RvcmU6OnB1dFJlY29yZCIpOwogICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKICAgICBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAgIGlu
dDY0X3QgdmVyc2lvbiA9IGdldE5ld1ZlcnNpb25OdW1iZXIobGV2ZWxEQlRyYW5zYWN0aW9uLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICBpbnQ2NF90IHZlcnNpb24gPSAtMTsKKyAg
ICBib29sIG9rID0gZ2V0TmV3VmVyc2lvbk51bWJlcihsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24pOworICAgIGlmICghb2spCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBBU1NFUlQodmVyc2lvbiA+PSAwKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gb2JqZWN0U3RvcmVkYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKIAogICAgIFZlY3RvcjxjaGFyPiB2OwpAQCAt
NzY4LDYgKzg0MSw3IEBAIHZvaWQgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAgICAgbGV2ZWxEQlRyYW5z
YWN0aW9uLT5wdXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSk7CiAKICAgICBy
ZWNvcmRJZGVudGlmaWVyLT5yZXNldChlbmNvZGVJREJLZXkoa2V5KSwgdmVyc2lvbik7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3Jl
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKQEAgLTk1NCwxMSArMTAyOCwxNyBAQCBWZWN0
b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdAogICAgIHJldHVybiBpbmRleGVzOwogfQogCi1zdGF0aWMgYm9v
bCBzZXRNYXhJbmRleElkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCitXQVJO
X1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgc2V0TWF4SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKQogewogICAgIGludDY0X3QgbWF4SW5kZXhJZCA9IC0xOwogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhJbmRleElkS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6Ok1heEluZGV4SWQpOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElk
S2V5LCBtYXhJbmRleElkKSkKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9
IGdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgbWF4SW5kZXhJZCwgZm91bmQpOwor
ICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yU2V0TWF4SW5kZXhJZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgbWF4SW5kZXhJZCA9IE1pbmltdW1JbmRleElkOwog
CiAgICAgaWYgKGluZGV4SWQgPD0gbWF4SW5kZXhJZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAppbmRleCBlNmVkNGQ4MDUxODA2
ZGUxZmIwYjc3ZDkyNjY5NmU0MzFlZGZlOGVjLi41ZDFhYWNjNGYwZTc4NDMyMDJkYWE2YmNkMjcw
NDcxY2IyZWU2M2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
LCBTdHJpbmcmIHJlY29yZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwgdm9pZCBw
dXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElk
ZW50aWZpZXIqKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyT2Jq
ZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVjb3Jk
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYpOwogICAgIHZpcnR1YWwg
Ym9vbCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCYgY3VycmVudE51bWJlcikgV0FSTl9VTlVTRURfUkVUVVJOOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAppbmRleCAyYWRhNTI1MzlkNjA2Y2E2YmVlNTE4YTYzMTM3NzA5OWU2N2FlYjdlLi5l
YmFkOTU5YWJiZmNkNmEyN2JlMThiODJhNmVmN2VhMjcxMjIzMmI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcApAQCAtNDY3LDcgKzQ2Nyw4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBj
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICB0cmFu
c2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9y
ID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMg
Zm9yIG9iamVjdCBzdG9yZSAlcy4iLCBuYW1lKCkudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB0
cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01
NjAsNyArNTYxLDExIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3Rv
cmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0CiAKICAgICAvLyBCZWZvcmUg
dGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBwb2ludCwgcm9s
bGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCiAKLSAgICBtX29iamVjdFN0
b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUt
PmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJlU3RyaW5nKCksICZyZWNvcmRJZGVudGlmaWVy
KTsKKyAgICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCktPnB1dFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9v
YmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqbV9rZXksIG1f
dmFsdWUtPnRvV2lyZVN0cmluZygpLCAmcmVjb3JkSWRlbnRpZmllcik7CisgICAgaWYgKCFiYWNr
aW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50
ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVyZm9ybWluZyBwdXQvYWRkLiIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5k
ZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEluZGV4V3JpdGVyKiBpbmRleFdyaXRl
ciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5kZXggOWIxN2FkZDExNTk3YTMxYTJiZDVk
ZTdkMmE4ODRhYmUxZTYxMjZlMy4uZjk2NTA3M2MwYWYzZWMyYWZmNzM0MzgwZTI0ZDc4NWY2NjEx
OTg2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFj
a2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFj
a2luZ1N0b3JlLmgKQEAgLTQyLDcgKzQyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9y
PElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNl
SWQpIE9WRVJSSURFIHsgcmV0dXJuIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPigpOyB9
CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCkgT1ZFUlJJREUgeyByZXR1cm4g
ZmFsc2U7IH07CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHV0UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKSBPVkVSUklERSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKSBPVkVSUklERSB7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBjdXJy
ZW50TnVtYmVyKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178321</attachid>
            <date>2012-12-07 18:37:55 -0800</date>
            <delta_ts>2012-12-10 14:55:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104422-20121207183519.patch</filename>
            <type>text/plain</type>
            <size>22781</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM2ZTlhNjg4ZWM5ZjU5
YTE5NjIyYjc0MmY1ZGJjNzQxMmZiODk1Yi4uOTIxNDRlNTkxZmUwMzVmYTdlOWQ3ZDJhMjZkMmI2
OTY0NzZmOWE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTEyLTA3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBtb3JlIGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NDIyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgYXJlIHRoZSBsYXN0IHBsYWNlcyB0
aGF0IGlnbm9yZSBsZXZlbGRiIGVycm9ycyB0aGF0IGNhbiBnZXQgdGhlCisgICAgICAgIHVzdWFs
IG9rL2ZvdW5kIHRyZWF0bWVudC4KKworICAgICAgICBOb3RoaW5nIGNhbGxlZCBnZXRCb29sLCBz
byBpdCBpcyBkZWxldGVkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2NoZW1hS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6
c2V0VXBNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRNYXhPYmplY3RTdG9yZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0TmV3RGF0YWJhc2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
TWF4T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXdWZXJzaW9uTnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldE1heEluZGV4SWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0
b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorCiAyMDEyLTEyLTA3ICBKb3NodWEgQmVsbCAgPGpz
YmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBDaGVjayBTU1YgdmVyc2lv
biB3aGVuIG9wZW5pbmcgZGF0YWJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjI2
MDhlYzE0MDRiMmJjMzc2NDdhMDM1MTI5YjJhNTdhYjU4MGMzMC4uMDk0OTUzZDI2YzA4NjhlM2U5
ZDdhNDU5NTk1ZGQxZGJkOTI4N2ZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxMi0xMi0wNyAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBQcm9wYWdhdGUgbW9yZSBsZXZlbGRiIGVycm9ycyB0
byBzY3JpcHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNDQyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorICAgICAgICAgIERlbGV0ZSBtZXRob2Qg
b3ZlcnJpZGUgdGhhdCBkb2Vzbid0IG1hdGNoIG5ldyBzaWduYXR1cmUuCisKIDIwMTItMTItMDcg
IE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gTW92ZSBXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSBvdXQgb2YgUGxhdGZvcm1TdXBwb3J0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0
b3JlLmNwcAppbmRleCAzZTExMGI2OTVmMDAxNWI1NjkzYTkwNDYxNGExOGYxMzM1NDc1ZTQxLi45
Y2MwNDBkYjE0YmUyY2NhZTMyMGFlYWNhNDBlODUwNjNhNjc0MjI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTY4
LDYgKzY4LDEwIEBAIGVudW0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBl
IHsKICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yS2V5RXhpc3RzSW5JbmRleCwK
ICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yVmVyc2lvbkV4aXN0cywKICAgICBJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yRGVsZXRlT2JqZWN0U3RvcmUsCisgICAgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heE9iamVjdFN0b3JlSWQsCisgICAgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heEluZGV4SWQsCisgICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld0RhdGFiYXNlSWQsCisgICAgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld1ZlcnNpb25OdW1iZXIsCiAgICAgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZUludGVybmFsRXJyb3JNYXgsCiB9Owogc3RhdGljIGlubGluZSB2b2lkIHJlY29y
ZEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHR5
cGUpCkBAIC04NCwzMiArODgsMjAgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlY29yZEludGVybmFs
RXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHQKICAgICAgICAg
cmVjb3JkSW50ZXJuYWxFcnJvcih0eXBlKTsgXAogICAgIH0gd2hpbGUgKDApCiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgYm9vbCBnZXRCb29sKERCT3JUcmFu
c2FjdGlvbiogZGIsIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBib29sJiBmb3VuZEJvb2wpCi17
Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3VuZEJvb2wgPSBkZWNvZGVCb29sKHJl
c3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0
aWMgdm9pZCBwdXRCb29sKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IExl
dmVsREJTbGljZSYga2V5LCBib29sIHZhbHVlKQogewogICAgIHRyYW5zYWN0aW9uLT5wdXQoa2V5
LCBlbmNvZGVCb29sKHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNh
Y3Rpb24+Ci1zdGF0aWMgYm9vbCBnZXRJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgTGV2
ZWxEQlNsaWNlJiBrZXksIGludDY0X3QmIGZvdW5kSW50KQorc3RhdGljIGJvb2wgZ2V0SW50KERC
T3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBpbnQ2NF90JiBmb3Vu
ZEludCwgYm9vbCYgZm91bmQpCiB7CiAgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBib29s
IGZvdW5kID0gZmFsc2U7CiAgICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwgcmVzdWx0LCBm
b3VuZCk7Ci0gICAgLy8gRklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIGlmICFvay4KLSAgICBBU1NF
UlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgaWYgKCFmb3VuZCkKKyAgICBpZiAoIW9rKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBmb3VuZEludCA9IGRlY29kZUludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4NSwyNiArMTc3LDQyIEBAIHB1YmxpYzoKIC8vIDEgLSBB
ZGRzIFVzZXJJbnRWZXJzaW9uIHRvIERhdGFiYXNlTWV0YURhdGEuCiAvLyAyIC0gQWRkcyBEYXRh
VmVyc2lvbiB0byB0byBnbG9iYWwgbWV0YWRhdGEuCiBjb25zdCBpbnQ2NF90IGxhdGVzdEtub3du
U2NoZW1hVmVyc2lvbiA9IDI7Ci1zdGF0aWMgYm9vbCBpc1NjaGVtYUtub3duKExldmVsREJEYXRh
YmFzZSogZGIpCitXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgaXNTY2hlbWFLbm93bihM
ZXZlbERCRGF0YWJhc2UqIGRiLCBib29sJiBrbm93bikKIHsKICAgICBpbnQ2NF90IGRiU2NoZW1h
VmVyc2lvbiA9IDA7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIFNjaGVtYVZlcnNpb25LZXk6OmVuY29k
ZSgpLCBkYlNjaGVtYVZlcnNpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoZGJT
Y2hlbWFWZXJzaW9uID4gbGF0ZXN0S25vd25TY2hlbWFWZXJzaW9uKQorICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKKyAgICBib29sIG9rID0gZ2V0SW50KGRiLCBTY2hlbWFWZXJzaW9uS2V5OjplbmNv
ZGUoKSwgZGJTY2hlbWFWZXJzaW9uLCBmb3VuZCk7CisgICAgaWYgKCFvaykKICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZm91bmQpIHsKKyAgICAgICAga25vd24gPSB0cnVlOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGRiU2NoZW1hVmVyc2lvbiA+IGxhdGVz
dEtub3duU2NoZW1hVmVyc2lvbikgeworICAgICAgICBrbm93biA9IGZhbHNlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBjb25zdCB1aW50MzJfdCBsYXRlc3RLbm93bkRhdGFW
ZXJzaW9uID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3aXJlRm9ybWF0VmVyc2lvbigpOwogICAg
IGludDY0X3QgZGJEYXRhVmVyc2lvbiA9IDA7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIERhdGFWZXJz
aW9uS2V5OjplbmNvZGUoKSwgZGJEYXRhVmVyc2lvbikpCisgICAgb2sgPSBnZXRJbnQoZGIsIERh
dGFWZXJzaW9uS2V5OjplbmNvZGUoKSwgZGJEYXRhVmVyc2lvbiwgZm91bmQpOworICAgIGlmICgh
b2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgIGtu
b3duID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgaWYgKGRiRGF0
YVZlcnNpb24gPiBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKGRiRGF0YVZlcnNpb24gPiBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKSB7CisgICAg
ICAgIGtub3duID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAorICAgIGtu
b3duID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgc2V0VXBNZXRh
ZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKK1dBUk5fVU5V
U0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIs
IGNvbnN0IFN0cmluZyYgb3JpZ2luKQogewogICAgIGNvbnN0IHVpbnQzMl90IGxhdGVzdEtub3du
RGF0YVZlcnNpb24gPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndpcmVGb3JtYXRWZXJzaW9uKCk7
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHNjaGVtYVZlcnNpb25LZXkgPSBTY2hlbWFWZXJzaW9u
S2V5OjplbmNvZGUoKTsKQEAgLTIxNCw3ICsyMjIsMTMgQEAgc3RhdGljIGJvb2wgc2V0VXBNZXRh
ZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKIAogICAgIGlu
dDY0X3QgZGJTY2hlbWFWZXJzaW9uID0gMDsKICAgICBpbnQ2NF90IGRiRGF0YVZlcnNpb24gPSAw
OwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBzY2hlbWFWZXJzaW9uS2V5LCBk
YlNjaGVtYVZlcnNpb24pKSB7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sg
PSBnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIHNjaGVtYVZlcnNpb25LZXksIGRiU2NoZW1hVmVy
c2lvbiwgZm91bmQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJM
ZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAvLyBJbml0aWFsaXpl
IG5ldyBiYWNraW5nIHN0b3JlLgogICAgICAgICBkYlNjaGVtYVZlcnNpb24gPSBsYXRlc3RLbm93
blNjaGVtYVZlcnNpb247CiAgICAgICAgIHB1dEludCh0cmFuc2FjdGlvbi5nZXQoKSwgc2NoZW1h
VmVyc2lvbktleSwgZGJTY2hlbWFWZXJzaW9uKTsKQEAgLTIzMSwxMCArMjQ1LDE2IEBAIHN0YXRp
YyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBv
cmlnaW4pCiAgICAgICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVh
dGVJdGVyYXRvcigpOwogICAgICAgICAgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5p
c1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0
KCkpIHsKICAgICAgICAgICAgICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSAwOwotICAgICAgICAg
ICAgICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBpdC0+a2V5KCksIGRhdGFiYXNl
SWQpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBi
b29sIG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBpdC0+a2V5KCksIGRhdGFiYXNlSWQs
IGZvdW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgICAgICAgICAgICAg
IEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldHVwTWV0YWRh
dGEpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IGludFZlcnNpb25LZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24p
OwogICAgICAgICAgICAgICAgIHB1dFZhckludCh0cmFuc2FjdGlvbi5nZXQoKSwgaW50VmVyc2lv
bktleSwgSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pOwogICAgICAgICAg
ICAgfQpAQCAtMjQ4LDggKzI2OCwxNCBAQCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVs
REJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogICAgIH0KIAogICAgIC8vIEFs
bCBuZXcgdmFsdWVzIHdpbGwgYmUgd3JpdHRlbiB1c2luZyB0aGlzIHNlcmlhbGl6YXRpb24gdmVy
c2lvbi4KLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwgZGF0YVZlcnNpb25LZXks
IGRiRGF0YVZlcnNpb24pKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvcik7CisgICAgZm91bmQgPSBmYWxzZTsKKyAgICBvayA9IGdldEludCh0
cmFuc2FjdGlvbi5nZXQoKSwgZGF0YVZlcnNpb25LZXksIGRiRGF0YVZlcnNpb24sIGZvdW5kKTsK
KyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVJlYWRFcnJvclNldHVwTWV0YWRhdGEpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgaWYgKGRiRGF0YVZlcnNpb24gPCBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKSB7CkBAIC0y
NjgsMjEgKzI5NCwyNiBAQCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFz
ZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgREJP
clRyYW5zYWN0aW9uPgotc3RhdGljIGludDY0X3QgZ2V0TWF4T2JqZWN0U3RvcmVJZChEQk9yVHJh
bnNhY3Rpb24qIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQpCitXQVJOX1VOVVNFRF9SRVRVUk4gc3Rh
dGljIGJvb2wgZ2V0TWF4T2JqZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3QmIG1heE9iamVjdFN0b3JlSWQpCiB7CiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IG1heE9iamVjdFN0b3JlSWRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6TWF4T2JqZWN0U3RvcmVJZCk7Ci0g
ICAgcmV0dXJuIGdldE1heE9iamVjdFN0b3JlSWQoZGIsIG1heE9iamVjdFN0b3JlSWRLZXkpOwor
ICAgIGJvb2wgb2sgPSBnZXRNYXhPYmplY3RTdG9yZUlkKGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5
LCBtYXhPYmplY3RTdG9yZUlkKTsKKyAgICByZXR1cm4gb2s7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgaW50NjRfdCBnZXRNYXhPYmplY3RTdG9yZUlk
KERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbWF4T2JqZWN0U3RvcmVJ
ZEtleSkKK1dBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXRNYXhPYmplY3RTdG9yZUlk
KERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbWF4T2JqZWN0U3RvcmVJ
ZEtleSwgaW50NjRfdCYgbWF4T2JqZWN0U3RvcmVJZCkKIHsKLSAgICBpbnQ2NF90IG1heE9iamVj
dFN0b3JlSWQgPSAtMTsKLSAgICBpZiAoIWdldEludChkYiwgbWF4T2JqZWN0U3RvcmVJZEtleSwg
bWF4T2JqZWN0U3RvcmVJZCkpCisgICAgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOworICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gZ2V0SW50KGRiLCBtYXhPYmplY3RTdG9yZUlk
S2V5LCBtYXhPYmplY3RTdG9yZUlkLCBmb3VuZCk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZm91bmQpCiAgICAgICAgIG1heE9iamVjdFN0b3JlSWQgPSAw
OwogCiAgICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1heE9i
amVjdFN0b3JlSWQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIElEQkJhY2tpbmdTdG9yZTo6SURC
QmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsKiBmYWN0b3J5LCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIpCkBAIC0zNDAsMTAg
KzM3MSwxOCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3JlOjpv
cGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbgogICAgICAgICBTdHJpbmcgcGF0aCA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFi
YXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOwogCiAgICAgICAgIGRiID0g
TGV2ZWxEQkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwotICAgICAgICBp
ZiAoZGIgJiYgIWlzU2NoZW1hS25vd24oZGIuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBMT0dfRVJS
T1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGhhZCB1bmtub3duIHNjaGVtYSwgdHJlYXRpbmcg
aXQgYXMgZmFpbHVyZSB0byBvcGVuIik7Ci0gICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0Ojpo
aXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5T
dGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEsIElE
QkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAgICAgICAgICAgIGRiLmNsZWFyKCk7Cisg
ICAgICAgIGlmIChkYikgeworICAgICAgICAgICAgYm9vbCBrbm93biA9IGZhbHNlOworICAgICAg
ICAgICAgYm9vbCBvayA9IGlzU2NoZW1hS25vd24oZGIuZ2V0KCksIGtub3duKTsKKyAgICAgICAg
ICAgIGlmICghb2spIHsKKyAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJC
YWNraW5nU3RvcmVSZWFkRXJyb3JTZXR1cE1ldGFkYXRhKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIWtub3duKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIg
YmFja2luZyBzdG9yZSBoYWQgdW5rbm93biBzY2hlbWEsIHRyZWF0aW5nIGl0IGFzIGZhaWx1cmUg
dG8gb3BlbiIpOworICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVu
dW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElE
QkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkVW5rbm93blNjaGVtYSwgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZU9wZW5NYXgpOworICAgICAgICAgICAgICAgIGRiLmNsZWFyKCk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZGIpCkBAIC00MDksMTEgKzQ0OCwxNSBA
QCBib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBE
YXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwogICAgIGZvdW5kID0g
ZmFsc2U7CiAKLSAgICBmb3VuZCA9IGdldEludChtX2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5p
ZCk7CisgICAgYm9vbCBvayA9IGdldEludChtX2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5pZCwg
Zm91bmQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBib29sIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFL
ZXk6OmVuY29kZShtZXRhZGF0YS0+aWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9u
KSwgbWV0YWRhdGEtPnZlcnNpb24sIGZvdW5kKTsKKyAgICBvayA9IGdldFN0cmluZyhtX2RiLmdl
dCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUobWV0YWRhdGEtPmlkLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIG1ldGFkYXRhLT52ZXJzaW9uLCBmb3VuZCk7CiAgICAg
aWYgKCFvaykgewogICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3JHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNDM2LDE3ICs0NzksMjggQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNl
TWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGEKICAgICBpZiAobWV0
YWRhdGEtPmludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNp
b24pCiAgICAgICAgIG1ldGFkYXRhLT5pbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6
Tm9JbnRWZXJzaW9uOwogCi0gICAgbWV0YWRhdGEtPm1heE9iamVjdFN0b3JlSWQgPSBnZXRNYXhP
YmplY3RTdG9yZUlkKG1fZGIuZ2V0KCksIG1ldGFkYXRhLT5pZCk7CisgICAgb2sgPSBnZXRNYXhP
YmplY3RTdG9yZUlkKG1fZGIuZ2V0KCksIG1ldGFkYXRhLT5pZCwgbWV0YWRhdGEtPm1heE9iamVj
dFN0b3JlSWQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlu
dDY0X3QgZ2V0TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQorV0FSTl9VTlVTRURf
UkVUVVJOIHN0YXRpYyBib29sIGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwg
aW50NjRfdCYgbmV3SWQpCiB7CiAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gdHJhbnNh
Y3Rpb24gPSBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZShkYik7CiAKKyAgICBuZXdJZCA9IC0x
OwogICAgIGludDY0X3QgbWF4RGF0YWJhc2VJZCA9IC0xOwotICAgIGlmICghZ2V0SW50KHRyYW5z
YWN0aW9uLmdldCgpLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgbWF4RGF0YWJhc2VJZCkp
CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBnZXRJbnQodHJhbnNhY3Rp
b24uZ2V0KCksIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBtYXhEYXRhYmFzZUlkLCBmb3Vu
ZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3JHZXROZXdEYXRhYmFzZUlkKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAoIWZvdW5kKQogICAgICAgICBtYXhEYXRhYmFzZUlkID0gMDsKIAog
ICAgIEFTU0VSVChtYXhEYXRhYmFzZUlkID49IDApOwpAQCAtNDU1LDE2ICs1MDksMTggQEAgc3Rh
dGljIGludDY0X3QgZ2V0TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQogICAgIHB1
dEludCh0cmFuc2FjdGlvbi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIGRhdGFi
YXNlSWQpOwogICAgIGlmICghdHJhbnNhY3Rpb24tPmNvbW1pdCgpKSB7CiAgICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIGRhdGFiYXNl
SWQ7CisgICAgbmV3SWQgPSBkYXRhYmFzZUlkOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29s
IElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90
JiByb3dJZCkKIHsKLSAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5nZXQoKSk7Ci0g
ICAgaWYgKHJvd0lkIDwgMCkKKyAgICBib29sIG9rID0gZ2V0TmV3RGF0YWJhc2VJZChtX2RiLmdl
dCgpLCByb3dJZCk7CisgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFT
U0VSVChyb3dJZCA+PSAwKTsKIAogICAgIGlmIChpbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbikKICAgICAgICAgaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0
YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uOwpAQCAtNjM0LDEwICs2OTAsMTUgQEAgVmVjdG9yPElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGlu
dDY0X3QgZGF0YWJhc2UKICAgICByZXR1cm4gb2JqZWN0U3RvcmVzOwogfQogCi1zdGF0aWMgYm9v
bCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorV0FSTl9VTlVTRURfUkVU
VVJOIHN0YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heE9iamVjdFN0b3JlSWRLZXkgPSBEYXRhYmFzZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6TWF4T2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkID0gZ2V0TWF4T2JqZWN0
U3RvcmVJZCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSk7CisgICAgaW50NjRfdCBt
YXhPYmplY3RTdG9yZUlkID0gLTE7CisgICAgYm9vbCBvayA9IGdldE1heE9iamVjdFN0b3JlSWQo
dHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXksIG1heE9iamVjdFN0b3JlSWQpOworICAg
IGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
UmVhZEVycm9yU2V0TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKICAgICBpZiAob2JqZWN0U3RvcmVJZCA8PSBtYXhPYmplY3RTdG9yZUlkKSB7CiAgICAg
ICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3Ip
OwpAQCAtNzMyLDEyICs3OTMsMTkgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjQKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKK1dBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdWZXJzaW9u
TnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBuZXdWZXJzaW9uTnVtYmVyKQogewog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjpMYXN0VmVyc2lvbik7CiAKKyAgICBuZXdWZXJzaW9uTnVtYmVyID0gLTE7CiAgICAg
aW50NjRfdCBsYXN0VmVyc2lvbiA9IC0xOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBs
YXN0VmVyc2lvbktleSwgbGFzdFZlcnNpb24pKQorICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICBib29sIG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgbGFzdFZlcnNp
b24sIGZvdW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld1ZlcnNpb25OdW1iZXIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghZm91bmQpCiAgICAgICAgIGxhc3RWZXJzaW9u
ID0gMDsKIAogICAgIEFTU0VSVChsYXN0VmVyc2lvbiA+PSAwKTsKQEAgLTc0NywxNSArODE1LDIw
IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhCiAKICAgICBBU1NFUlQodmVyc2lvbiA+IGxhc3RW
ZXJzaW9uKTsgLy8gRklYTUU6IFRoaW5rIGFib3V0IGhvdyB3ZSB3YW50IHRvIGhhbmRsZSB0aGUg
b3ZlcmZsb3cgc2NlbmFyaW8uCiAKLSAgICByZXR1cm4gdmVyc2lvbjsKKyAgICBuZXdWZXJzaW9u
TnVtYmVyID0gdmVyc2lvbjsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJCYWNraW5n
U3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVu
dGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNv
cmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQogewogICAgIElEQl9UUkFDRSgiSURCQmFj
a2luZ1N0b3JlOjpwdXRSZWNvcmQiKTsKICAgICBBU1NFUlQoa2V5LmlzVmFsaWQoKSk7CiAgICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBp
bnQ2NF90IHZlcnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKGxldmVsREJUcmFuc2FjdGlvbiwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgaW50NjRfdCB2ZXJzaW9uID0gLTE7Cisg
ICAgYm9vbCBvayA9IGdldE5ld1ZlcnNpb25OdW1iZXIobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCB2ZXJzaW9uKTsKKyAgICBpZiAoIW9rKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKHZlcnNpb24gPj0gMCk7CiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IG9iamVjdFN0b3JlZGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gdjsKQEAg
LTc2OCw2ICs4NDEsNyBAQCB2b2lkIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NAogICAgIGxldmVsREJUcmFu
c2FjdGlvbi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpOwogCiAgICAg
cmVjb3JkSWRlbnRpZmllci0+cmVzZXQoZW5jb2RlSURCS2V5KGtleSksIHZlcnNpb24pOworICAg
IHJldHVybiB0cnVlOwogfQogCiB2b2lkIElEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCkBAIC05NTQsMTEgKzEwMjgsMTcgQEAgVmVj
dG9yPElEQkluZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3QKICAgICByZXR1cm4gaW5kZXhlczsKIH0KIAotc3RhdGljIGJv
b2wgc2V0TWF4SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorV0FS
Tl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIHNldE1heEluZGV4SWQoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCkKIHsKICAgICBpbnQ2NF90IG1heEluZGV4SWQgPSAtMTsKICAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjpNYXhJbmRleElkKTsKLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJ
ZEtleSwgbWF4SW5kZXhJZCkpCisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sg
PSBnZXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIG1heEluZGV4SWQsIGZvdW5kKTsK
KyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVJlYWRFcnJvclNldE1heEluZGV4SWQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGlmICghZm91bmQpCiAgICAgICAgIG1heEluZGV4SWQgPSBNaW5pbXVtSW5kZXhJZDsK
IAogICAgIGlmIChpbmRleElkIDw9IG1heEluZGV4SWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggZTZlZDRkODA1MTgw
NmRlMWZiMGI3N2Q5MjY2OTZlNDMxZWRmZThlYy4uNWQxYWFjYzRmMGU3ODQzMjAyZGFhNmJjZDI3
MDQ3MWNiMmVlNjNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIH07CiAK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiwgU3RyaW5nJiByZWNvcmQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIHZvaWQg
cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJ
ZGVudGlmaWVyKikgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9i
amVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QmIGN1cnJlbnROdW1iZXIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5jcHAKaW5kZXggMmFkYTUyNTM5ZDYwNmNhNmJlZTUxOGE2MzEzNzcwOTllNjdhZWI3ZS4u
ZWJhZDk1OWFiYmZjZDZhMjdiZTE4YjgyYTZlZjdlYTI3MTIyMzJiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAKQEAgLTQ2Nyw3ICs0NjcsOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwg
YwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgdHJh
bnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
ciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBpbmRleCBrZXlz
IGZvciBvYmplY3Qgc3RvcmUgJXMuIiwgbmFtZSgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAg
dHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NTYwLDcgKzU2MSwxMSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0
b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdAogCiAgICAgLy8gQmVmb3Jl
IHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMgcG9pbnQsIHJv
bGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgogCi0gICAgbV9vYmplY3RT
dG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3Jl
LT5pZCgpLCAqbV9rZXksIG1fdmFsdWUtPnRvV2lyZVN0cmluZygpLCAmcmVjb3JkSWRlbnRpZmll
cik7CisgICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9y
ZSgpLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
b2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKm1fa2V5LCBt
X3ZhbHVlLT50b1dpcmVTdHJpbmcoKSwgJnJlY29yZElkZW50aWZpZXIpOworICAgIGlmICghYmFj
a2luZ1N0b3JlU3VjY2VzcykgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
ZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewogICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0
ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IDliMTdhZGQxMTU5N2EzMWEyYmQ1
ZGU3ZDJhODg0YWJlMWU2MTI2ZTMuLmY5NjUwNzNjMGFmM2VjMmFmZjczNDM4MGUyNGQ3ODVmNjYx
MTk4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJh
Y2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJh
Y2tpbmdTdG9yZS5oCkBAIC00Miw3ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZlY3Rv
cjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFz
ZUlkKSBPVkVSUklERSB7IHJldHVybiBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4oKTsg
fQogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpIE9WRVJSSURFIHsgcmV0dXJu
IGZhbHNlOyB9OwogCi0gICAgdmlydHVhbCB2b2lkIHB1dFJlY29yZChUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyJikgT1ZFUlJJREUgeyB9CiAg
ICAgdmlydHVhbCBib29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCYgY3Vy
cmVudE51bWJlcikgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178638</attachid>
            <date>2012-12-10 14:55:25 -0800</date>
            <delta_ts>2012-12-10 16:22:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104422-20121210145247.patch</filename>
            <type>text/plain</type>
            <size>23238</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU5ZmY5NzQzMzc3NGE0
ODg1OWE3OTAyNWRkODkwYzgyNjQxYzg5OC4uNTE5YzUzODgxMTFkMDNlNzZlNWJmOGZjNDNhZjQ1
ZTY5MzcwODMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTEyLTA3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBtb3JlIGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NDIyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgYXJlIHRoZSBsYXN0IHBsYWNlcyB0
aGF0IGlnbm9yZSBsZXZlbGRiIGVycm9ycyB0aGF0IGNhbiBnZXQgdGhlCisgICAgICAgIHVzdWFs
IG9rL2ZvdW5kIHRyZWF0bWVudC4KKworICAgICAgICBOb3RoaW5nIGNhbGxlZCBnZXRCb29sLCBz
byBpdCBpcyBkZWxldGVkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2NoZW1hS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6
c2V0VXBNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRNYXhPYmplY3RTdG9yZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0TmV3RGF0YWJhc2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
TWF4T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXdWZXJzaW9uTnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldE1heEluZGV4SWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0
b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorCiAyMDEyLTEyLTEwICBNYXJrIFBpbGdyaW0gIDxw
aWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dW1dpbl0gUmVtb3ZlIHRo
ZW1lLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGYzNTc1ZDliZTM3NzhmYjQzNTFlOWZkOGMzZjE0ZWQ3NjE5OGY3Njgu
LmJiNzA0MGZlYzNkMDFhYmVmMjk5OGUxY2MyZGYwNWY2NGZkMGEzZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTItMDcgIERhdmlkIEdyb2dhbiAg
PGRncm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUHJvcGFnYXRlIG1v
cmUgbGV2ZWxkYiBlcnJvcnMgdG8gc2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgICBEZWxldGUgbWV0aG9kIG92ZXJyaWRlIHRoYXQgZG9lc24ndCBtYXRjaCBuZXcgc2lnbmF0
dXJlLgorCiAyMDEyLTEyLTEwICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbQ2hyb21pdW1dW1dpbl0gUmVtb3ZlIHRoZW1lLXJlbGF0ZWQgZnVuY3Rpb25z
IGZyb20gUGxhdGZvcm1TdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAzZTExMGI2OTVmMDAxNWI1NjkzYTkw
NDYxNGExOGYxMzM1NDc1ZTQxLi40YjFhMWE3ZDAxNzliYjkxYjdiYjg1Mzc5YzBmYjU5N2U0YTJm
ZjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5jcHAKQEAgLTY4LDYgKzY4LDEwIEBAIGVudW0gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZUludGVybmFsRXJyb3JUeXBlIHsKICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yS2V5RXhpc3RzSW5JbmRleCwKICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
VmVyc2lvbkV4aXN0cywKICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yRGVsZXRl
T2JqZWN0U3RvcmUsCisgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heE9i
amVjdFN0b3JlSWQsCisgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heElu
ZGV4SWQsCisgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld0RhdGFiYXNl
SWQsCisgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld1ZlcnNpb25OdW1i
ZXIsCiAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JNYXgsCiB9Owogc3Rh
dGljIGlubGluZSB2b2lkIHJlY29yZEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZUludGVybmFsRXJyb3JUeXBlIHR5cGUpCkBAIC04NCwzMiArODgsMjAgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIHJlY29yZEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFs
RXJyb3JUeXBlIHQKICAgICAgICAgcmVjb3JkSW50ZXJuYWxFcnJvcih0eXBlKTsgXAogICAgIH0g
d2hpbGUgKDApCiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMg
Ym9vbCBnZXRCb29sKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IExldmVsREJTbGljZSYga2V5
LCBib29sJiBmb3VuZEJvb2wpCi17Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAo
IWRiLT5nZXQoa2V5LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3Vu
ZEJvb2wgPSBkZWNvZGVCb29sKHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCiBzdGF0aWMgdm9pZCBwdXRCb29sKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBib29sIHZhbHVlKQogewogICAg
IHRyYW5zYWN0aW9uLT5wdXQoa2V5LCBlbmNvZGVCb29sKHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgYm9vbCBnZXRJbnQoREJPclRyYW5z
YWN0aW9uKiBkYiwgY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGludDY0X3QmIGZvdW5kSW50KQor
c3RhdGljIGJvb2wgZ2V0SW50KERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IExldmVsREJTbGlj
ZSYga2V5LCBpbnQ2NF90JiBmb3VuZEludCwgYm9vbCYgZm91bmQpCiB7CiAgICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgYm9vbCBvayA9IGRiLT5z
YWZlR2V0KGtleSwgcmVzdWx0LCBmb3VuZCk7Ci0gICAgLy8gRklYTUU6IE5vdGlmeSB0aGUgY2Fs
bGVyIGlmICFvay4KLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgaWYgKCFmb3VuZCkK
KyAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFmb3VuZCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3VuZEludCA9IGRlY29kZUludChyZXN1bHQuYmVn
aW4oKSwgcmVzdWx0LmVuZCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4NSwyNiArMTc3LDQy
IEBAIHB1YmxpYzoKIC8vIDEgLSBBZGRzIFVzZXJJbnRWZXJzaW9uIHRvIERhdGFiYXNlTWV0YURh
dGEuCiAvLyAyIC0gQWRkcyBEYXRhVmVyc2lvbiB0byB0byBnbG9iYWwgbWV0YWRhdGEuCiBjb25z
dCBpbnQ2NF90IGxhdGVzdEtub3duU2NoZW1hVmVyc2lvbiA9IDI7Ci1zdGF0aWMgYm9vbCBpc1Nj
aGVtYUtub3duKExldmVsREJEYXRhYmFzZSogZGIpCitXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGlj
IGJvb2wgaXNTY2hlbWFLbm93bihMZXZlbERCRGF0YWJhc2UqIGRiLCBib29sJiBrbm93bikKIHsK
ICAgICBpbnQ2NF90IGRiU2NoZW1hVmVyc2lvbiA9IDA7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIFNj
aGVtYVZlcnNpb25LZXk6OmVuY29kZSgpLCBkYlNjaGVtYVZlcnNpb24pKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBpZiAoZGJTY2hlbWFWZXJzaW9uID4gbGF0ZXN0S25vd25TY2hlbWFWZXJz
aW9uKQorICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gZ2V0SW50KGRiLCBT
Y2hlbWFWZXJzaW9uS2V5OjplbmNvZGUoKSwgZGJTY2hlbWFWZXJzaW9uLCBmb3VuZCk7CisgICAg
aWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZm91bmQpIHsKKyAgICAg
ICAga25vd24gPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGRi
U2NoZW1hVmVyc2lvbiA+IGxhdGVzdEtub3duU2NoZW1hVmVyc2lvbikgeworICAgICAgICBrbm93
biA9IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBjb25zdCB1aW50
MzJfdCBsYXRlc3RLbm93bkRhdGFWZXJzaW9uID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3aXJl
Rm9ybWF0VmVyc2lvbigpOwogICAgIGludDY0X3QgZGJEYXRhVmVyc2lvbiA9IDA7Ci0gICAgaWYg
KCFnZXRJbnQoZGIsIERhdGFWZXJzaW9uS2V5OjplbmNvZGUoKSwgZGJEYXRhVmVyc2lvbikpCisg
ICAgb2sgPSBnZXRJbnQoZGIsIERhdGFWZXJzaW9uS2V5OjplbmNvZGUoKSwgZGJEYXRhVmVyc2lv
biwgZm91bmQpOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWZvdW5kKSB7CisgICAgICAgIGtub3duID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQogCi0gICAgaWYgKGRiRGF0YVZlcnNpb24gPiBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGRiRGF0YVZlcnNpb24gPiBsYXRlc3RLbm93
bkRhdGFWZXJzaW9uKSB7CisgICAgICAgIGtub3duID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KIAorICAgIGtub3duID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJp
bmcmIG9yaWdpbikKK1dBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRh
KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogewogICAgIGNvbnN0
IHVpbnQzMl90IGxhdGVzdEtub3duRGF0YVZlcnNpb24gPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OndpcmVGb3JtYXRWZXJzaW9uKCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHNjaGVtYVZlcnNp
b25LZXkgPSBTY2hlbWFWZXJzaW9uS2V5OjplbmNvZGUoKTsKQEAgLTIxNCw3ICsyMjIsMTMgQEAg
c3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJp
bmcmIG9yaWdpbikKIAogICAgIGludDY0X3QgZGJTY2hlbWFWZXJzaW9uID0gMDsKICAgICBpbnQ2
NF90IGRiRGF0YVZlcnNpb24gPSAwOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgp
LCBzY2hlbWFWZXJzaW9uS2V5LCBkYlNjaGVtYVZlcnNpb24pKSB7CisgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOworICAgIGJvb2wgb2sgPSBnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIHNjaGVtYVZl
cnNpb25LZXksIGRiU2NoZW1hVmVyc2lvbiwgZm91bmQpOworICAgIGlmICghb2spIHsKKyAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRh
ZGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkgewog
ICAgICAgICAvLyBJbml0aWFsaXplIG5ldyBiYWNraW5nIHN0b3JlLgogICAgICAgICBkYlNjaGVt
YVZlcnNpb24gPSBsYXRlc3RLbm93blNjaGVtYVZlcnNpb247CiAgICAgICAgIHB1dEludCh0cmFu
c2FjdGlvbi5nZXQoKSwgc2NoZW1hVmVyc2lvbktleSwgZGJTY2hlbWFWZXJzaW9uKTsKQEAgLTIz
MSwxMCArMjQ1LDE2IEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNl
KiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgICAgICAgICBPd25QdHI8TGV2ZWxEQkl0
ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOwogICAgICAgICAgICAgZm9yIChpdC0+
c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBz
dG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpbnQ2NF90IGRhdGFi
YXNlSWQgPSAwOwotICAgICAgICAgICAgICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgp
LCBpdC0+a2V5KCksIGRhdGFiYXNlSWQpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBib29sIG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBp
dC0+a2V5KCksIGRhdGFiYXNlSWQsIGZvdW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIW9rKSB7
CiAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZVJlYWRFcnJvclNldHVwTWV0YWRhdGEpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29u
c2lzdGVuY3lFcnJvcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGludFZlcnNpb25LZXkg
PSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0
YUtleTo6VXNlckludFZlcnNpb24pOwogICAgICAgICAgICAgICAgIHB1dFZhckludCh0cmFuc2Fj
dGlvbi5nZXQoKSwgaW50VmVyc2lvbktleSwgSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdElu
dFZlcnNpb24pOwogICAgICAgICAgICAgfQpAQCAtMjQ4LDggKzI2OCwxNCBAQCBzdGF0aWMgYm9v
bCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
KQogICAgIH0KIAogICAgIC8vIEFsbCBuZXcgdmFsdWVzIHdpbGwgYmUgd3JpdHRlbiB1c2luZyB0
aGlzIHNlcmlhbGl6YXRpb24gdmVyc2lvbi4KLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbi5n
ZXQoKSwgZGF0YVZlcnNpb25LZXksIGRiRGF0YVZlcnNpb24pKSB7Ci0gICAgICAgIEludGVybmFs
RXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CisgICAgZm91bmQgPSBmYWxz
ZTsKKyAgICBvayA9IGdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwgZGF0YVZlcnNpb25LZXksIGRi
RGF0YVZlcnNpb24sIGZvdW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldHVwTWV0YWRhdGEpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKGRiRGF0YVZlcnNpb24gPCBsYXRlc3RLbm93
bkRhdGFWZXJzaW9uKSB7CkBAIC0yNjgsMjEgKzI5NCwyNiBAQCBzdGF0aWMgYm9vbCBzZXRVcE1l
dGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3RhdGljIGludDY0X3QgZ2V0TWF4
T2JqZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQpCitX
QVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgZ2V0TWF4T2JqZWN0U3RvcmVJZChEQk9yVHJh
bnNhY3Rpb24qIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QmIG1heE9iamVjdFN0b3Jl
SWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heE9iamVjdFN0b3JlSWRLZXkgPSBEYXRh
YmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6
TWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgcmV0dXJuIGdldE1heE9iamVjdFN0b3JlSWQoZGIsIG1h
eE9iamVjdFN0b3JlSWRLZXkpOworICAgIGJvb2wgb2sgPSBnZXRNYXhPYmplY3RTdG9yZUlkKGRi
LCBtYXhPYmplY3RTdG9yZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkKTsKKyAgICByZXR1cm4gb2s7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgaW50NjRf
dCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgbWF4T2JqZWN0U3RvcmVJZEtleSkKK1dBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9v
bCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgbWF4T2JqZWN0U3RvcmVJZEtleSwgaW50NjRfdCYgbWF4T2JqZWN0U3RvcmVJZCkKIHsK
LSAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSAtMTsKLSAgICBpZiAoIWdldEludChkYiwg
bWF4T2JqZWN0U3RvcmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCkpCisgICAgbWF4T2JqZWN0U3Rv
cmVJZCA9IC0xOworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gZ2V0SW50
KGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkLCBmb3VuZCk7CisgICAg
aWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZm91bmQpCiAgICAgICAg
IG1heE9iamVjdFN0b3JlSWQgPSAwOwogCiAgICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0g
MCk7Ci0gICAgcmV0dXJuIG1heE9iamVjdFN0b3JlSWQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IElEQkJhY2tpbmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmll
ciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBQYXNzT3duUHRyPExldmVsREJEYXRh
YmFzZT4gZGIpCkBAIC0zMTYsNiArMzQ3LDcgQEAgZW51bSBJREJMZXZlbERCQmFja2luZ1N0b3Jl
T3BlblJlc3VsdCB7CiAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwRGVzdHJv
eUZhaWxlZCwKICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5GYWls
ZWQsCiAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwUmVvcGVuU3VjY2VzcywK
KyAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZElPRXJyQ2hlY2tpbmdTY2hlbWEs
CiAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgsCiB9OwogCkBAIC0zNDAsMTAgKzM3
MiwxOCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3JlOjpvcGVu
KFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbgogICAgICAgICBTdHJpbmcgcGF0aCA9IHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNl
SWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOwogCiAgICAgICAgIGRiID0gTGV2
ZWxEQkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwotICAgICAgICBpZiAo
ZGIgJiYgIWlzU2NoZW1hS25vd24oZGIuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1Io
IkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGhhZCB1bmtub3duIHNjaGVtYSwgdHJlYXRpbmcgaXQg
YXMgZmFpbHVyZSB0byBvcGVuIik7Ci0gICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0
b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0
dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEsIElEQkxl
dmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAgICAgICAgICAgIGRiLmNsZWFyKCk7CisgICAg
ICAgIGlmIChkYikgeworICAgICAgICAgICAgYm9vbCBrbm93biA9IGZhbHNlOworICAgICAgICAg
ICAgYm9vbCBvayA9IGlzU2NoZW1hS25vd24oZGIuZ2V0KCksIGtub3duKTsKKyAgICAgICAgICAg
IGlmICghb2spIHsKKyAgICAgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1F
bnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZElPRXJyQ2hlY2tpbmdTY2hlbWEsIElEQkxl
dmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
IWtub3duKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBz
dG9yZSBoYWQgdW5rbm93biBzY2hlbWEsIHRyZWF0aW5nIGl0IGFzIGZhaWx1cmUgdG8gb3BlbiIp
OworICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9u
KCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJC
YWNraW5nU3RvcmVPcGVuRmFpbGVkVW5rbm93blNjaGVtYSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZU9wZW5NYXgpOworICAgICAgICAgICAgICAgIGRiLmNsZWFyKCk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoZGIpCkBAIC00MDksMTEgKzQ0OSwxNSBAQCBib29sIElE
QkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkRhdGFiYXNlTWV0YQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5h
bWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwogICAgIGZvdW5kID0gZmFsc2U7CiAK
LSAgICBmb3VuZCA9IGdldEludChtX2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5pZCk7CisgICAg
Ym9vbCBvayA9IGdldEludChtX2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5pZCwgZm91bmQpOwor
ICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CiAgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBi
b29sIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29k
ZShtZXRhZGF0YS0+aWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgbWV0YWRh
dGEtPnZlcnNpb24sIGZvdW5kKTsKKyAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRh
YmFzZU1ldGFEYXRhS2V5OjplbmNvZGUobWV0YWRhdGEtPmlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5
OjpVc2VyVmVyc2lvbiksIG1ldGFkYXRhLT52ZXJzaW9uLCBmb3VuZCk7CiAgICAgaWYgKCFvaykg
ewogICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JH
ZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDM2LDE3
ICs0ODAsMjggQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGEKICAgICBpZiAobWV0YWRhdGEtPmlu
dFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pCiAgICAg
ICAgIG1ldGFkYXRhLT5pbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJz
aW9uOwogCi0gICAgbWV0YWRhdGEtPm1heE9iamVjdFN0b3JlSWQgPSBnZXRNYXhPYmplY3RTdG9y
ZUlkKG1fZGIuZ2V0KCksIG1ldGFkYXRhLT5pZCk7CisgICAgb2sgPSBnZXRNYXhPYmplY3RTdG9y
ZUlkKG1fZGIuZ2V0KCksIG1ldGFkYXRhLT5pZCwgbWV0YWRhdGEtPm1heE9iamVjdFN0b3JlSWQp
OworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludDY0X3QgZ2V0
TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQorV0FSTl9VTlVTRURfUkVUVVJOIHN0
YXRpYyBib29sIGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCYg
bmV3SWQpCiB7CiAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBM
ZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZShkYik7CiAKKyAgICBuZXdJZCA9IC0xOwogICAgIGlu
dDY0X3QgbWF4RGF0YWJhc2VJZCA9IC0xOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLmdl
dCgpLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgbWF4RGF0YWJhc2VJZCkpCisgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCks
IE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBtYXhEYXRhYmFzZUlkLCBmb3VuZCk7CisgICAg
aWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3JHZXROZXdEYXRhYmFzZUlkKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBpZiAoIWZvdW5kKQogICAgICAgICBtYXhEYXRhYmFzZUlkID0gMDsKIAogICAgIEFTU0VS
VChtYXhEYXRhYmFzZUlkID49IDApOwpAQCAtNDU1LDE2ICs1MTAsMTggQEAgc3RhdGljIGludDY0
X3QgZ2V0TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQogICAgIHB1dEludCh0cmFu
c2FjdGlvbi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIGRhdGFiYXNlSWQpOwog
ICAgIGlmICghdHJhbnNhY3Rpb24tPmNvbW1pdCgpKSB7CiAgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIGRhdGFiYXNlSWQ7CisgICAg
bmV3SWQgPSBkYXRhYmFzZUlkOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIElEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkK
IHsKLSAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5nZXQoKSk7Ci0gICAgaWYgKHJv
d0lkIDwgMCkKKyAgICBib29sIG9rID0gZ2V0TmV3RGF0YWJhc2VJZChtX2RiLmdldCgpLCByb3dJ
ZCk7CisgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChyb3dJ
ZCA+PSAwKTsKIAogICAgIGlmIChpbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5v
SW50VmVyc2lvbikKICAgICAgICAgaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRl
ZmF1bHRJbnRWZXJzaW9uOwpAQCAtNjM0LDEwICs2OTEsMTUgQEAgVmVjdG9yPElEQk9iamVjdFN0
b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0
YWJhc2UKICAgICByZXR1cm4gb2JqZWN0U3RvcmVzOwogfQogCi1zdGF0aWMgYm9vbCBzZXRNYXhP
YmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRp
YyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgY29u
c3QgVmVjdG9yPGNoYXI+IG1heE9iamVjdFN0b3JlSWRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6TWF4T2JqZWN0U3RvcmVJ
ZCk7Ci0gICAgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkID0gZ2V0TWF4T2JqZWN0U3RvcmVJZCh0
cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSk7CisgICAgaW50NjRfdCBtYXhPYmplY3RT
dG9yZUlkID0gLTE7CisgICAgYm9vbCBvayA9IGdldE1heE9iamVjdFN0b3JlSWQodHJhbnNhY3Rp
b24sIG1heE9iamVjdFN0b3JlSWRLZXksIG1heE9iamVjdFN0b3JlSWQpOworICAgIGlmICghb2sp
IHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
U2V0TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAg
ICBpZiAob2JqZWN0U3RvcmVJZCA8PSBtYXhPYmplY3RTdG9yZUlkKSB7CiAgICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IpOwpAQCAtNzMy
LDEyICs3OTQsMTkgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjQKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKK1dBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdWZXJzaW9uTnVtYmVyKExl
dmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBuZXdWZXJzaW9uTnVtYmVyKQogewogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpM
YXN0VmVyc2lvbik7CiAKKyAgICBuZXdWZXJzaW9uTnVtYmVyID0gLTE7CiAgICAgaW50NjRfdCBs
YXN0VmVyc2lvbiA9IC0xOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lv
bktleSwgbGFzdFZlcnNpb24pKQorICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9r
ID0gZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgbGFzdFZlcnNpb24sIGZvdW5k
KTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvckdldE5ld1ZlcnNpb25OdW1iZXIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICghZm91bmQpCiAgICAgICAgIGxhc3RWZXJzaW9uID0gMDsKIAog
ICAgIEFTU0VSVChsYXN0VmVyc2lvbiA+PSAwKTsKQEAgLTc0NywxNSArODE2LDIwIEBAIHN0YXRp
YyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhCiAKICAgICBBU1NFUlQodmVyc2lvbiA+IGxhc3RWZXJzaW9uKTsg
Ly8gRklYTUU6IFRoaW5rIGFib3V0IGhvdyB3ZSB3YW50IHRvIGhhbmRsZSB0aGUgb3ZlcmZsb3cg
c2NlbmFyaW8uCiAKLSAgICByZXR1cm4gdmVyc2lvbjsKKyAgICBuZXdWZXJzaW9uTnVtYmVyID0g
dmVyc2lvbjsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJCYWNraW5nU3RvcmU6OnB1
dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQor
Ym9vbCBJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlm
aWVyKiByZWNvcmRJZGVudGlmaWVyKQogewogICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3Jl
OjpwdXRSZWNvcmQiKTsKICAgICBBU1NFUlQoa2V5LmlzVmFsaWQoKSk7CiAgICAgTGV2ZWxEQlRy
YW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBpbnQ2NF90IHZl
cnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgaW50NjRfdCB2ZXJzaW9uID0gLTE7CisgICAgYm9vbCBv
ayA9IGdldE5ld1ZlcnNpb25OdW1iZXIobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCB2ZXJzaW9uKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgQVNTRVJUKHZlcnNpb24gPj0gMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9i
amVjdFN0b3JlZGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGtleSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gdjsKQEAgLTc2OCw2ICs4
NDIsNyBAQCB2b2lkIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NAogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+
cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpOwogCiAgICAgcmVjb3JkSWRl
bnRpZmllci0+cmVzZXQoZW5jb2RlSURCS2V5KGtleSksIHZlcnNpb24pOworICAgIHJldHVybiB0
cnVlOwogfQogCiB2b2lkIElEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCkBAIC05NTQsMTEgKzEwMjksMTcgQEAgVmVjdG9yPElEQklu
ZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3QKICAgICByZXR1cm4gaW5kZXhlczsKIH0KIAotc3RhdGljIGJvb2wgc2V0TWF4
SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorV0FSTl9VTlVTRURf
UkVUVVJOIHN0YXRpYyBib29sIHNldE1heEluZGV4SWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCkKIHsKICAgICBpbnQ2NF90IG1heEluZGV4SWQgPSAtMTsKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpNYXhJ
bmRleElkKTsKLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgbWF4
SW5kZXhJZCkpCisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBnZXRJbnQo
dHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIG1heEluZGV4SWQsIGZvdW5kKTsKKyAgICBpZiAo
IW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRF
cnJvclNldE1heEluZGV4SWQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlm
ICghZm91bmQpCiAgICAgICAgIG1heEluZGV4SWQgPSBNaW5pbXVtSW5kZXhJZDsKIAogICAgIGlm
IChpbmRleElkIDw9IG1heEluZGV4SWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggZTZlZDRkODA1MTgwNmRlMWZiMGI3
N2Q5MjY2OTZlNDMxZWRmZThlYy4uNWQxYWFjYzRmMGU3ODQzMjAyZGFhNmJjZDI3MDQ3MWNiMmVl
NjNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgU3RyaW5n
JiByZWNvcmQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0UmVjb3Jk
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVj
b3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVy
KikgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3Jl
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGN1cnJl
bnROdW1iZXIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAK
aW5kZXggMmFkYTUyNTM5ZDYwNmNhNmJlZTUxOGE2MzEzNzcwOTllNjdhZWI3ZS4uODJlYmQ0NjZi
NzRhZjg1NWU1N2ZlZWIzMzY5MzgxNjBlNmE1MDk1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAKQEAgLTQ2Nyw3ICs0NjcsOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KCk7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBT
dHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBpbmRleCBrZXlzIGZvciBvYmpl
Y3Qgc3RvcmUgJXMuIiwgbmFtZSgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgdHJhbnNhY3Rp
b24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTU2MCw3ICs1NjEsMTEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RT
dG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3QKIAogICAgIC8vIEJlZm9y
ZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCBy
b2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KIAotICAgIG1fb2JqZWN0
U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9y
ZS0+aWQoKSwgKm1fa2V5LCBtX3ZhbHVlLT50b1dpcmVTdHJpbmcoKSwgJnJlY29yZElkZW50aWZp
ZXIpOworICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwg
bV92YWx1ZS0+dG9XaXJlU3RyaW5nKCksICZyZWNvcmRJZGVudGlmaWVyKTsKKyAgICBpZiAoIWJh
Y2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1dC9hZGQuIikp
OworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3Jp
dGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCA5YjE3YWRkMTE1OTdhMzFhMmJk
NWRlN2QyYTg4NGFiZTFlNjEyNmUzLi5mOTY1MDczYzBhZjNlYzJhZmY3MzQzODBlMjRkNzg1ZjY2
MTE5ODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VC
YWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VC
YWNraW5nU3RvcmUuaApAQCAtNDIsNyArNDIsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWZWN0
b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJh
c2VJZCkgT1ZFUlJJREUgeyByZXR1cm4gVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+KCk7
IH0KICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KSBPVkVSUklERSB7IHJldHVy
biBmYWxzZTsgfTsKIAotICAgIHZpcnR1YWwgdm9pZCBwdXRSZWNvcmQoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jiwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYpIE9WRVJSSURFIHsgfQog
ICAgIHZpcnR1YWwgYm9vbCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGN1
cnJlbnROdW1iZXIpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>