<?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>138657</bug_id>
          
          <creation_ts>2014-11-12 06:31:57 -0800</creation_ts>
          <short_desc>Video as image</short_desc>
          <delta_ts>2015-01-21 13:55:34 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1048147</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-12 06:31:57 -0800</bug_when>
    <thetext>Support real video formats wherever images are allowed (&lt;img&gt;, CSS backgrounds, etc.) Semantics like animated GIF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048148</commentid>
    <comment_count>1</comment_count>
      <attachid>241422</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-12 06:32:40 -0800</bug_when>
    <thetext>Created attachment 241422
wip patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048186</commentid>
    <comment_count>2</comment_count>
      <attachid>241422</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-11-12 10:17:48 -0800</bug_when>
    <thetext>Comment on attachment 241422
wip patch

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

Nice!

&gt; Source/WebCore/platform/graphics/VideoImage.cpp:84
&gt; +    if (m_player-&gt;readyState() &gt;= MediaPlayer::HaveEnoughData)
&gt; +        m_frameTimer.startOneShot(16_ms);
&gt; +
&gt; +    if (m_player-&gt;duration() &gt; MediaTime::zeroTime() &amp;&amp; m_player-&gt;currentTime() &gt;= m_player-&gt;duration()) {
&gt; +        fprintf(stderr, &quot;seeking %d\n&quot;, m_player-&gt;readyState());
&gt; +        m_player-&gt;seek(MediaTime::zeroTime());
&gt; +    }

It seems like we should seek to the next frame if possible instead of using a hard coded interval. How about adding MediaPlayer::step(int numberOfFrames) - and have the default MediaPlayerPrivate implementation seek 16_ms * numberOfFrames so it works like this does until ports implement stepping logic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048281</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-12 15:28:21 -0800</bug_when>
    <thetext>&gt; It seems like we should seek to the next frame if possible instead of using
&gt; a hard coded interval. How about adding MediaPlayer::step(int
&gt; numberOfFrames) - and have the default MediaPlayerPrivate implementation
&gt; seek 16_ms * numberOfFrames so it works like this does until ports implement
&gt; stepping logic?

Makes sense. I was actually trying to find a &quot;new frame available&quot; callback so the media player could drive the paints. MediaPlayerClient::mediaPlayerRepaint sounded like it but it didn&apos;t seem to actually get called. The timer was more of a hack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048288</commentid>
    <comment_count>4</comment_count>
      <attachid>241448</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-12 15:42:16 -0800</bug_when>
    <thetext>Created attachment 241448
wip, rebased and with actual mime type handling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063155</commentid>
    <comment_count>5</comment_count>
      <attachid>245080</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-21 13:55:34 -0800</bug_when>
    <thetext>Created attachment 245080
attempt to use media source extensions</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241422</attachid>
            <date>2014-11-12 06:32:40 -0800</date>
            <delta_ts>2014-11-12 15:42:16 -0800</delta_ts>
            <desc>wip patch</desc>
            <filename>image-video-3.patch</filename>
            <type>text/plain</type>
            <size>20352</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE3NDM0MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjE0Niw2ICs2MTQ2LDggQEAK
IAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0I0QkU3MEU3
MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi87IH07CiAJCUU0N0Uy
NzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NDE2MDM2
RUQyMDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0N0UyNzY4MTYwMzZFREMw
MEVFMkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY3MTYwMzZFREMwMEVFMkFG
QiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCAqLzsgfTsKKwkJRTQ3RkEwRjkx
OURCRkJDOTAwNTc4MkRFIC8qIFZpZGVvSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RkEwRjgxOURCRkJDOTAwNTc4MkRFIC8qIFZpZGVv
SW1hZ2UuY3BwICovOyB9OworCQlFNDdGQTBGQjE5REJGQkQzMDA1NzgyREUgLyogVmlkZW9JbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RkEw
RkExOURCRkJEMzAwNTc4MkRFIC8qIFZpZGVvSW1hZ2UuaCAqLzsgfTsKIAkJRTQ4OTQ0QTIxODBC
NTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OTQ0QTAxODBCNTdEODAwRjE2NUQ4IC8qIFNp
bXBsZUxpbmVMYXlvdXQuY3BwICovOyB9OwogCQlFNDg5NDRBMzE4MEI1N0Q4MDBGMTY1RDggLyog
U2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDkxNkZG
NzE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OTE2RkY2MTk1REY2QTAwMDVB
QjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzY0Niw2ICsxMzY0OCw4IEBACiAJCUU0N0I0
QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0UyNzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0N0ZBMEY4MTlEQkZCQzkwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZGVvSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFNDdGQTBGQTE5REJGQkQzMDA1NzgyREUgLyogVmlkZW9JbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0ltYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODk0NEEwMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVM
aW5lTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBs
ZUxpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5NDRBMTE4
MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0OTE2RkY2MTk1REY2QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXllckZsdXNoVGhyb3R0bGVT
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA1MjcsNiArMjA1MzEsOCBA
QAogCQkJCUJFOTEzRDdGMTgxRUY4RTUwMERDQjA5RSAvKiBUcmFja1ByaXZhdGVCYXNlLmggKi8s
CiAJCQkJMzdDMjhBNjcxMEY2NTlDQzAwOEM3ODEzIC8qIFR5cGVzZXR0aW5nRmVhdHVyZXMuaCAq
LywKIAkJCQlFNEFGQ0ZBNDBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5oICovLAorCQkJ
CUU0N0ZBMEY4MTlEQkZCQzkwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmNwcCAqLywKKwkJCQlFNDdG
QTBGQTE5REJGQkQzMDA1NzgyREUgLyogVmlkZW9JbWFnZS5oICovLAogCQkJCUJFRjI5RUVBMTcx
NUREMDkwMEM0QjRDOSAvKiBWaWRlb1RyYWNrUHJpdmF0ZS5oICovLAogCQkJCTE0MTFEQ0IwMTY0
QzM5QTgwMEQ0OUJDMSAvKiBXaWR0aENhY2hlLmggKi8sCiAJCQkJOTM5QjAyRUMwRUEyREJDNDAw
QzU0NTcwIC8qIFdpZHRoSXRlcmF0b3IuY3BwICovLApAQCAtMjY1OTUsNiArMjY2MDEsNyBAQAog
CQkJCTk3QUFCRDIzMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRj
aGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTVBMkFEQzE2MUU3RTAwMDA1ODg5REQgLyogV2Vi
U29ja2V0RXh0ZW5zaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQyNDE0RkEw
OUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0RXh0ZW5zaW9uUHJvY2Vzc29yLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNDdGQTBGQjE5REJGQkQzMDA1NzgyREUgLyogVmlkZW9JbWFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTdBQUJEMjUxNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldEZyYW1lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQyNzE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
SGFuZHNoYWtlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDgg
LyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjc4ODQsNiArMjc4
OTEsNyBAQAogCQkJCUE4MTM2OUUxMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MTGVnZW5kRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBNzlGQzBBMTkxNkRGMDBBOEVGNUYgLyogSFRN
TExJRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODcxREMyMTBBMTUyMDU3MDBCMTJB
NjggLyogSFRNTExpbmtFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0N0ZBMEY5MTlE
QkZCQzkwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE3
RDMyMEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MTWFwRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEVBN0NBQzBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNDNDODVGMTg5RTE1QTYwMDAxOUFFMiAvKiBKU1BlcmZvcm1h
bmNlVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxNzQzNDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlZpZGVvSW1hZ2Uu
aCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0zMjksNiArMzMwLDcg
QEAgdm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQogCiBpbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6
Y3JlYXRlSW1hZ2UoKQogeworICAgIGZwcmludGYoc3RkZXJyLCAiY3JlYXRlSW1hZ2UgJXNcbiIs
IG1fcmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCkuZGF0YSgpKTsKICAgICAvLyBDcmVhdGUgdGhl
IGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0LgogICAgIGlmIChtX2ltYWdlKQogICAgICAg
ICByZXR1cm47CkBAIC0zNDEsNiArMzQzLDEwIEBAIGlubGluZSB2b2lkIENhY2hlZEltYWdlOjpj
cmVhdGVJbWFnZSgpCiAgICAgICAgIFJlZlB0cjxTVkdJbWFnZT4gc3ZnSW1hZ2UgPSBTVkdJbWFn
ZTo6Y3JlYXRlKHRoaXMpOwogICAgICAgICBtX3N2Z0ltYWdlQ2FjaGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPFNWR0ltYWdlQ2FjaGU+KHN2Z0ltYWdlLmdldCgpKTsKICAgICAgICAgbV9pbWFnZSA9IHN2
Z0ltYWdlLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9
PSAidmlkZW8vbXA0IikgeworICAgICAgICBSZWZQdHI8VmlkZW9JbWFnZT4gdmlkZW9JbWFnZSA9
IFZpZGVvSW1hZ2U6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgdmlkZW9JbWFnZS0+bG9hZCh1cmwo
KSk7CisgICAgICAgIG1faW1hZ2UgPSB2aWRlb0ltYWdlOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHRoaXMpOwogICAgICAgICB0b0JpdG1hcElt
YWdlKG1faW1hZ2UuZ2V0KCkpLT5zZXRBbGxvd1N1YnNhbXBsaW5nKG1fbG9hZGVyICYmIG1fbG9h
ZGVyLT5mcmFtZUxvYWRlcigpLT5mcmFtZSgpLnNldHRpbmdzKCkuaW1hZ2VTdWJzYW1wbGluZ0Vu
YWJsZWQoKSk7CkBAIC00MTIsNiArNDE4LDggQEAgdm9pZCBDYWNoZWRJbWFnZTo6YWRkRGF0YShj
b25zdCBjaGFyKiBkYQogCiB2b2lkIENhY2hlZEltYWdlOjpmaW5pc2hMb2FkaW5nKFJlc291cmNl
QnVmZmVyKiBkYXRhKQogeworICAgIGZwcmludGYoc3RkZXJyLCAiZmluaXNoTG9hZGluZyAlc1xu
IiwgbV9yZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKS5kYXRhKCkpOworCiAgICAgbV9kYXRhID0g
ZGF0YTsKICAgICBpZiAoIW1faW1hZ2UgJiYgZGF0YSkKICAgICAgICAgY3JlYXRlSW1hZ2UoKTsK
QEAgLTQxOSw2ICs0MjcsMTEgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZmluaXNoTG9hZGluZyhSZXNv
dXJjZQogICAgIGlmIChtX2ltYWdlKQogICAgICAgICBtX2ltYWdlLT5zZXREYXRhKG1fZGF0YS0+
c2hhcmVkQnVmZmVyKCksIHRydWUpOwogCisgICAgaWYgKG1faW1hZ2UgJiYgbV9pbWFnZS0+aXNW
aWRlb0ltYWdlKCkpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0
YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIW1faW1hZ2UgfHwgbV9pbWFn
ZS0+aXNOdWxsKCkpIHsKICAgICAgICAgLy8gSW1hZ2UgZGVjb2RpbmcgZmFpbGVkOyB0aGUgaW1h
Z2UgZGF0YSBpcyBtYWxmb3JtZWQuCiAgICAgICAgIGVycm9yKGVycm9yT2NjdXJyZWQoKSA/IHN0
YXR1cygpIDogRGVjb2RlRXJyb3IpOwpAQCAtNDMzLDYgKzQ0NiwzMiBAQCB2b2lkIENhY2hlZElt
YWdlOjpmaW5pc2hMb2FkaW5nKFJlc291cmNlCiAgICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExv
YWRpbmcoZGF0YSk7CiB9CiAKK3ZvaWQgQ2FjaGVkSW1hZ2U6OnZpZGVvTWV0YURhdGFBdmFpbGFi
bGUoKQoreworICAgIGZwcmludGYoc3RkZXJyLCAidmlkZW9NZXRhRGF0YUF2YWlsYWJsZVxuIik7
CisKKyAgICBpZiAoIW1faW1hZ2UgfHwgbV9pbWFnZS0+aXNOdWxsKCkpIHsKKyAgICAgICAgLy8g
SW1hZ2UgZGVjb2RpbmcgZmFpbGVkOyB0aGUgaW1hZ2UgZGF0YSBpcyBtYWxmb3JtZWQuCisgICAg
ICAgIGVycm9yKGVycm9yT2NjdXJyZWQoKSA/IHN0YXR1cygpIDogRGVjb2RlRXJyb3IpOworICAg
ICAgICBpZiAoaW5DYWNoZSgpKQorICAgICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmVtb3ZlKHRo
aXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAibm90aWZ5
T2JzZXJ2ZXJzXG4iKTsKKworICAgIG5vdGlmeU9ic2VydmVycygpOworfQorCitib29sIENhY2hl
ZEltYWdlOjpzaG91bGRQbGF5QW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBDYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFnZUNsaWVudD4gY2xpZW50V2Fsa2VyKG1fY2xpZW50cyk7
CisgICAgd2hpbGUgKENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQgPSBjbGllbnRXYWxrZXIubmV4
dCgpKSB7CisgICAgICAgIGlmIChjbGllbnQtPnNob3VsZFBsYXlJbWFnZUFuaW1hdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwog
dm9pZCBDYWNoZWRJbWFnZTo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0dXMpCiB7
CiAgICAgY2hlY2tTaG91bGRQYWludEJyb2tlbkltYWdlKCk7CkBAIC00NDMsNiArNDgyLDggQEAg
dm9pZCBDYWNoZWRJbWFnZTo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OgogCiB2b2lkIENhY2hlZElt
YWdlOjpyZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQog
eworICAgIGZwcmludGYoc3RkZXJyLCAicmVzcG9uc2VSZWNlaXZlZCAlc1xuIiwgcmVzcG9uc2Uu
bWltZVR5cGUoKS51dGY4KCkuZGF0YSgpKTsKKwogICAgIGlmICghbV9yZXNwb25zZS5pc051bGwo
KSkKICAgICAgICAgY2xlYXIoKTsKICAgICBDYWNoZWRSZXNvdXJjZTo6cmVzcG9uc2VSZWNlaXZl
ZChyZXNwb25zZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuaAkocmV2aXNpb24gMTc0MzQwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHZpZGVvTWV0YURhdGFBdmFpbGFi
bGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGxheUFuaW1hdGlvbigpIGNv
bnN0OwogCiAgICAgdm9pZCBhZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoUmVzb3VyY2VCdWZmZXIq
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
Q2xpZW50LmgJKHJldmlzaW9uIDE3NDM0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIENhbGxlZCB3aGVuIEdJRiBhbmltYXRpb24gcHJvZ3Jlc3Nlcy4KICAg
ICB2aXJ0dWFsIHZvaWQgbmV3SW1hZ2VBbmltYXRpb25GcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFn
ZSYgaW1hZ2UpIHsgaW1hZ2VDaGFuZ2VkKCZpbWFnZSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkUGxheUltYWdlQW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIH07CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNpb24g
MTc0MzQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
Qml0bWFwSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c1ZpZGVvSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1BERkRvY3VtZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgJKHJldmlzaW9u
IDE3NDM0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKikgPSAwOwogCiAgICAgdmlydHVh
bCB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0JikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHZpZGVvTWV0YURhdGFBdmFpbGFibGUoKSB7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkUGxheUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1ZpZGVvSW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1ZpZGVv
SW1hZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVmlkZW9JbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmlkZW9JbWFnZS5oIgorCisj
aW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVmUHRyPFZpZGVvSW1hZ2U+IFZpZGVvSW1hZ2U6OmNyZWF0ZShJbWFn
ZU9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZpZGVvSW1h
Z2Uob2JzZXJ2ZXIpKTsKK30KKworVmlkZW9JbWFnZTo6VmlkZW9JbWFnZShJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKKyAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwgbV9wbGF5ZXIoTWVkaWFQ
bGF5ZXI6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fZnJhbWVUaW1lcih0aGlzLCAmVmlkZW9JbWFn
ZTo6ZnJhbWVUaW1lckZpcmVkKQorICAgICwgbV9kaWROb3RpZnlNZXRhRGF0YUF2YWlsYWJsZShm
YWxzZSkKK3sKK30KKworVmlkZW9JbWFnZTo6flZpZGVvSW1hZ2UoKQoreworfQorCit2b2lkIFZp
ZGVvSW1hZ2U6OmxvYWQoY29uc3QgVVJMJiB1cmwpCit7CisgICAgbV9wbGF5ZXItPmxvYWQodXJs
LCBDb250ZW50VHlwZSgidmlkZW8vbXA0IiksICIiKTsKK30KKwordm9pZCBWaWRlb0ltYWdlOjpj
b21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgm
IGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbykKK3sKKyAgICBhdXRv
IHNpemUgPSBtX3BsYXllci0+bmF0dXJhbFNpemUoKTsKKyAgICBpbnRyaW5zaWNXaWR0aCA9IExl
bmd0aChzaXplLndpZHRoKCksIEZpeGVkKTsKKyAgICBpbnRyaW5zaWNIZWlnaHQgPSBMZW5ndGgo
c2l6ZS5oZWlnaHQoKSwgRml4ZWQpOworICAgIGludHJpbnNpY1JhdGlvID0gc2l6ZTsKK30KKwor
RmxvYXRTaXplIFZpZGVvSW1hZ2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXll
ci0+bmF0dXJhbFNpemUoKTsKK30KKworYm9vbCBWaWRlb0ltYWdlOjpkYXRhQ2hhbmdlZChib29s
IC8qYWxsRGF0YVJlY2VpdmVkKi8pCit7CisgICAgcmV0dXJuIG1fcGxheWVyLT5yZWFkeVN0YXRl
KCkgPj0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsKK30KKwordm9pZCBWaWRlb0ltYWdlOjph
ZHZhbmNlKCkKK3sKKyAgICBpZiAobV9wbGF5ZXItPnJlYWR5U3RhdGUoKSA+PSBNZWRpYVBsYXll
cjo6SGF2ZUVub3VnaERhdGEpCisgICAgICAgIG1fZnJhbWVUaW1lci5zdGFydE9uZVNob3QoMTZf
bXMpOworCisgICAgaWYgKG1fcGxheWVyLT5kdXJhdGlvbigpID4gTWVkaWFUaW1lOjp6ZXJvVGlt
ZSgpICYmIG1fcGxheWVyLT5jdXJyZW50VGltZSgpID49IG1fcGxheWVyLT5kdXJhdGlvbigpKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2Vla2luZyAlZFxuIiwgbV9wbGF5ZXItPnJlYWR5
U3RhdGUoKSk7CisgICAgICAgIG1fcGxheWVyLT5zZWVrKE1lZGlhVGltZTo6emVyb1RpbWUoKSk7
CisgICAgfQorfQorCit2b2lkIFZpZGVvSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uKQoreworICAgIC8vICAgIGZwcmludGYoc3RkZXJyLCAiZHJhdyAlZFxuIiwg
bV9wbGF5ZXItPnJlYWR5U3RhdGUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpjb250ZXh0KTsKKyAgICBjb250ZXh0LT5jbGlwKGRzdFJlY3QpOworICAgIGNv
bnRleHQtPnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOworICAgIGNvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZShkc3RSZWN0LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJl
Y3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpKSk7CisgICAgY29udGV4dC0+dHJhbnNsYXRl
KC1zcmNSZWN0LngoKSwgLXNyY1JlY3QueSgpKTsKKyAgICBtX3BsYXllci0+cGFpbnRDdXJyZW50
RnJhbWVJbkNvbnRleHQoY29udGV4dCwgSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKHNpemUo
KSkpKTsKKyAgICBzdGF0ZVNhdmVyLnJlc3RvcmUoKTsKKworICAgIGFkdmFuY2UoKTsKK30KKwor
dm9pZCBWaWRlb0ltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUp
Cit7CisvLyAgICBmcHJpbnRmKHN0ZGVyciwgImRyYXcgcGF0dGVybiAlZFxuIiwgbV9wbGF5ZXIt
PnJlYWR5U3RhdGUoKSk7CisgICAgSW1hZ2U6OmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wZXJh
dG9yLCBkZXN0UmVjdCwgYmxlbmRNb2RlKTsKKworICAgIGFkdmFuY2UoKTsKK30KKwordm9pZCBW
aWRlb0ltYWdlOjptZWRpYVBsYXllck5ldHdvcmtTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQor
eworICAgIGZwcmludGYoc3RkZXJyLCAibmV0d29ya1N0YXRlICVkXG4iLCBtX3BsYXllci0+bmV0
d29ya1N0YXRlKCkpOworCisgICAgaWYgKG1fcGxheWVyLT5uZXR3b3JrU3RhdGUoKSA+PSBNZWRp
YVBsYXllcjo6Rm9ybWF0RXJyb3IgJiYgIW1fZGlkTm90aWZ5TWV0YURhdGFBdmFpbGFibGUpIHsK
KyAgICAgICAgbV9kaWROb3RpZnlNZXRhRGF0YUF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+dmlkZW9NZXRhRGF0YUF2YWlsYWJsZSgpOworICAgIH0KK30KKwordm9p
ZCBWaWRlb0ltYWdlOjptZWRpYVBsYXllclJlYWR5U3RhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKikK
K3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgInJlYWR5U3RhdGUgJWRcbiIsIG1fcGxheWVyLT5yZWFk
eVN0YXRlKCkpOworICAgIGlmIChtX3BsYXllci0+cmVhZHlTdGF0ZSgpID49IE1lZGlhUGxheWVy
OjpIYXZlRW5vdWdoRGF0YSkKKyAgICAgICAgbV9mcmFtZVRpbWVyLnN0YXJ0T25lU2hvdCgwX21z
KTsKKyAgICBpZiAobV9wbGF5ZXItPnJlYWR5U3RhdGUoKSA+PSBNZWRpYVBsYXllcjo6SGF2ZU1l
dGFkYXRhICYmICFtX2RpZE5vdGlmeU1ldGFEYXRhQXZhaWxhYmxlKSB7CisgICAgICAgIG1fZGlk
Tm90aWZ5TWV0YURhdGFBdmFpbGFibGUgPSB0cnVlOworICAgICAgICBpbWFnZU9ic2VydmVyKCkt
PnZpZGVvTWV0YURhdGFBdmFpbGFibGUoKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlkZW9JbWFnZTo6
bWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZChNZWRpYVBsYXllciopCit7CisvLyAgICBmcHJpbnRmKHN0
ZGVyciwgIm1lZGlhUGxheWVyVGltZUNoYW5nZWQgJWZcbiIsIG1fcGxheWVyLT5jdXJyZW50VGlt
ZSgpLnRvRmxvYXQoKSk7CisgICAgbV9mcmFtZVRpbWVyLnN0YXJ0T25lU2hvdCgwX21zKTsKK30K
Kwordm9pZCBWaWRlb0ltYWdlOjpmcmFtZVRpbWVyRmlyZWQoVGltZXI8VmlkZW9JbWFnZT4mKQor
eworICAgIGltYWdlT2JzZXJ2ZXIoKS0+YW5pbWF0aW9uQWR2YW5jZWQodGhpcyk7CisKKyAgICBp
ZiAoIWltYWdlT2JzZXJ2ZXIoKS0+c2hvdWxkUGxheUFuaW1hdGlvbigpKSB7CisgICAgICAgIG1f
cGxheWVyLT5wYXVzZSgpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBhdXNpbmdcbiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BsYXllci0+cGF1c2VkKCkpIHsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJwbGF5aW5nXG4iKTsKKyAgICAgICAgbV9wbGF5ZXItPnNl
dE11dGVkKHRydWUpOworICAgICAgICBtX3BsYXllci0+cGxheSgpOworICAgIH0KK30KKworYm9v
bCBWaWRlb0ltYWdlOjppc01ldGFEYXRhQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wbGF5ZXItPnJlYWR5U3RhdGUoKSA+PSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworfQor
CitQYXNzTmF0aXZlSW1hZ2VQdHIgVmlkZW9JbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKQoreworLy8gICAgZnByaW50ZihzdGRlcnIsICJuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSAlZFxuIiwgISFtX3BsYXllci0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpKTsKKyAgICBy
ZXR1cm4gbV9wbGF5ZXItPm5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKTsKK30KKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVmlkZW9JbWFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1ZpZGVvSW1hZ2UuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1ZpZGVvSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBW
aWRlb0ltYWdlX2gKKyNkZWZpbmUgVmlkZW9JbWFnZV9oCisKKyNpbmNsdWRlICJJbWFnZS5oIgor
I2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
VmlkZW9JbWFnZSA6IHB1YmxpYyBJbWFnZSwgcHVibGljIE1lZGlhUGxheWVyQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFZpZGVvSW1hZ2U+IGNyZWF0ZShJbWFnZU9ic2VydmVy
Kik7CisKKyAgICB2b2lkIGxvYWQoY29uc3QgVVJMJik7CisKKyAgICBib29sIGlzTWV0YURhdGFB
dmFpbGFibGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9y
aWdpbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3Ro
JiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pIG92ZXJyaWRlOwor
CisgICAgdmlydHVhbCBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCAvKmRlc3Ryb3lBbGwqLyA9IHRydWUpIG92
ZXJyaWRlIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9y
aWVudGF0aW9uRGVzY3JpcHRpb24pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlKSBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgUGFzc05hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgLyph
bGxEYXRhUmVjZWl2ZWQqLyk7CisKK3ByaXZhdGU6CisgICAgVmlkZW9JbWFnZShJbWFnZU9ic2Vy
dmVyKik7CisgICAgdmlydHVhbCB+VmlkZW9JbWFnZSgpOworCisgICAgdm9pZCBhZHZhbmNlKCk7
CisgICAgdm9pZCBmcmFtZVRpbWVyRmlyZWQoVGltZXI8VmlkZW9JbWFnZT4mKTsKKworICAgIHZp
cnR1YWwgYm9vbCBpc1ZpZGVvSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJOZXR3b3JrU3RhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyUmVhZHlTdGF0ZUNoYW5nZWQo
TWVkaWFQbGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJUaW1l
Q2hhbmdlZChNZWRpYVBsYXllciopIG92ZXJyaWRlOworCisgICAgT3duUHRyPE1lZGlhUGxheWVy
PiBtX3BsYXllcjsKKyAgICBUaW1lcjxWaWRlb0ltYWdlPiBtX2ZyYW1lVGltZXI7CisgICAgYm9v
bCBtX2RpZE5vdGlmeU1ldGFEYXRhQXZhaWxhYmxlOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkocmV2aXNpb24gMTc0MzQw
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIyLDYgKzIyMiw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyU3R5bGUqIGNhY2hl
ZEZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbmV3SW1hZ2VBbmlt
YXRpb25GcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYpIGZpbmFsIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRQbGF5SW1hZ2VBbmltYXRpb24oKSBjb25zdCBmaW5hbCBvdmVycmlk
ZSB7IHJldHVybiAhbV9oYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnM7IH0KIAogICAgIHVuc2lnbmVk
IG1fYmFzZVR5cGVGbGFncyA6IDY7CiAgICAgYm9vbCBtX2FuY2VzdG9yTGluZUJveERpcnR5IDog
MTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241448</attachid>
            <date>2014-11-12 15:42:16 -0800</date>
            <delta_ts>2014-11-12 15:42:16 -0800</delta_ts>
            <desc>wip, rebased and with actual mime type handling</desc>
            <filename>image-video-4.patch</filename>
            <type>text/plain</type>
            <size>20641</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE3NjAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjE0Niw2ICs2MTQ2LDggQEAK
IAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0I0QkU3MEU3
MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi87IH07CiAJCUU0N0Uy
NzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NDE2MDM2
RUQyMDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0N0UyNzY4MTYwMzZFREMw
MEVFMkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY3MTYwMzZFREMwMEVFMkFG
QiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCAqLzsgfTsKKwkJRTQ3RkEwRjkx
OURCRkJDOTAwNTc4MkRFIC8qIFZpZGVvSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RkEwRjgxOURCRkJDOTAwNTc4MkRFIC8qIFZpZGVv
SW1hZ2UuY3BwICovOyB9OworCQlFNDdGQTBGQjE5REJGQkQzMDA1NzgyREUgLyogVmlkZW9JbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RkEw
RkExOURCRkJEMzAwNTc4MkRFIC8qIFZpZGVvSW1hZ2UuaCAqLzsgfTsKIAkJRTQ4OTQ0QTIxODBC
NTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OTQ0QTAxODBCNTdEODAwRjE2NUQ4IC8qIFNp
bXBsZUxpbmVMYXlvdXQuY3BwICovOyB9OwogCQlFNDg5NDRBMzE4MEI1N0Q4MDBGMTY1RDggLyog
U2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDkxNkZG
NzE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OTE2RkY2MTk1REY2QTAwMDVB
QjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzY0OCw2ICsxMzY1MCw4IEBACiAJCUU0N0I0
QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0UyNzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0N0ZBMEY4MTlEQkZCQzkwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZGVvSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFNDdGQTBGQTE5REJGQkQzMDA1NzgyREUgLyogVmlkZW9JbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0ltYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODk0NEEwMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVM
aW5lTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBs
ZUxpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5NDRBMTE4
MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0OTE2RkY2MTk1REY2QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXllckZsdXNoVGhyb3R0bGVT
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA1MzQsNiArMjA1MzgsOCBA
QAogCQkJCUJFOTEzRDdGMTgxRUY4RTUwMERDQjA5RSAvKiBUcmFja1ByaXZhdGVCYXNlLmggKi8s
CiAJCQkJMzdDMjhBNjcxMEY2NTlDQzAwOEM3ODEzIC8qIFR5cGVzZXR0aW5nRmVhdHVyZXMuaCAq
LywKIAkJCQlFNEFGQ0ZBNDBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5oICovLAorCQkJ
CUU0N0ZBMEY4MTlEQkZCQzkwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmNwcCAqLywKKwkJCQlFNDdG
QTBGQTE5REJGQkQzMDA1NzgyREUgLyogVmlkZW9JbWFnZS5oICovLAogCQkJCUJFRjI5RUVBMTcx
NUREMDkwMEM0QjRDOSAvKiBWaWRlb1RyYWNrUHJpdmF0ZS5oICovLAogCQkJCTE0MTFEQ0IwMTY0
QzM5QTgwMEQ0OUJDMSAvKiBXaWR0aENhY2hlLmggKi8sCiAJCQkJOTM5QjAyRUMwRUEyREJDNDAw
QzU0NTcwIC8qIFdpZHRoSXRlcmF0b3IuY3BwICovLApAQCAtMjY2MjQsNiArMjY2MzAsNyBAQAog
CQkJCTk3QUFCRDIzMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRj
aGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTVBMkFEQzE2MUU3RTAwMDA1ODg5REQgLyogV2Vi
U29ja2V0RXh0ZW5zaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQyNDE0RkEw
OUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0RXh0ZW5zaW9uUHJvY2Vzc29yLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNDdGQTBGQjE5REJGQkQzMDA1NzgyREUgLyogVmlkZW9JbWFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTdBQUJEMjUxNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldEZyYW1lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQyNzE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0
SGFuZHNoYWtlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDgg
LyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjc4OTEsNiArMjc4
OTgsNyBAQAogCQkJCUE4MTM2OUUxMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MTGVnZW5kRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBNzlGQzBBMTkxNkRGMDBBOEVGNUYgLyogSFRN
TExJRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODcxREMyMTBBMTUyMDU3MDBCMTJB
NjggLyogSFRNTExpbmtFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0N0ZBMEY5MTlE
QkZCQzkwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE3
RDMyMEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MTWFwRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEVBN0NBQzBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNDNDODVGMTg5RTE1QTYwMDAxOUFFMiAvKiBKU1BlcmZvcm1h
bmNlVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxNzYwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2
ICs0Miw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlZpZGVvSW1hZ2Uu
aCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0zMjgsNiArMzI5LDcg
QEAgdm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQogCiBpbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6
Y3JlYXRlSW1hZ2UoKQogeworICAgIGZwcmludGYoc3RkZXJyLCAiY3JlYXRlSW1hZ2UgJXNcbiIs
IG1fcmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCkuZGF0YSgpKTsKICAgICAvLyBDcmVhdGUgdGhl
IGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0LgogICAgIGlmIChtX2ltYWdlKQogICAgICAg
ICByZXR1cm47CkBAIC0zNDAsNiArMzQyLDEwIEBAIGlubGluZSB2b2lkIENhY2hlZEltYWdlOjpj
cmVhdGVJbWFnZSgpCiAgICAgICAgIFJlZlB0cjxTVkdJbWFnZT4gc3ZnSW1hZ2UgPSBTVkdJbWFn
ZTo6Y3JlYXRlKHRoaXMpOwogICAgICAgICBtX3N2Z0ltYWdlQ2FjaGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPFNWR0ltYWdlQ2FjaGU+KHN2Z0ltYWdlLmdldCgpKTsKICAgICAgICAgbV9pbWFnZSA9IHN2
Z0ltYWdlLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgaWYgKFZpZGVvSW1hZ2U6OnNob3VsZFVzZUZv
ck1JTUVUeXBlKG1fcmVzcG9uc2UubWltZVR5cGUoKSkpIHsKKyAgICAgICAgUmVmUHRyPFZpZGVv
SW1hZ2U+IHZpZGVvSW1hZ2UgPSBWaWRlb0ltYWdlOjpjcmVhdGUodGhpcyk7CisgICAgICAgIHZp
ZGVvSW1hZ2UtPmxvYWQodXJsKCksIG1fcmVzcG9uc2UubWltZVR5cGUoKSk7CisgICAgICAgIG1f
aW1hZ2UgPSB2aWRlb0ltYWdlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faW1hZ2UgPSBCaXRt
YXBJbWFnZTo6Y3JlYXRlKHRoaXMpOwogICAgICAgICBkb3duY2FzdDxCaXRtYXBJbWFnZT4oKm1f
aW1hZ2UpLnNldEFsbG93U3Vic2FtcGxpbmcobV9sb2FkZXIgJiYgbV9sb2FkZXItPmZyYW1lTG9h
ZGVyKCktPmZyYW1lKCkuc2V0dGluZ3MoKS5pbWFnZVN1YnNhbXBsaW5nRW5hYmxlZCgpKTsKQEAg
LTQxMSw2ICs0MTcsOCBAQCB2b2lkIENhY2hlZEltYWdlOjphZGREYXRhKGNvbnN0IGNoYXIqIGRh
CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQog
eworICAgIGZwcmludGYoc3RkZXJyLCAiZmluaXNoTG9hZGluZyAlc1xuIiwgbV9yZXNwb25zZS5t
aW1lVHlwZSgpLnV0ZjgoKS5kYXRhKCkpOworCiAgICAgbV9kYXRhID0gZGF0YTsKICAgICBpZiAo
IW1faW1hZ2UgJiYgZGF0YSkKICAgICAgICAgY3JlYXRlSW1hZ2UoKTsKQEAgLTQxOCw2ICs0MjYs
MTEgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdQogICAgIGlmICht
X2ltYWdlKQogICAgICAgICBtX2ltYWdlLT5zZXREYXRhKGRhdGEsIHRydWUpOwogCisgICAgaWYg
KG1faW1hZ2UgJiYgbV9pbWFnZS0+aXNWaWRlb0ltYWdlKCkpIHsKKyAgICAgICAgQ2FjaGVkUmVz
b3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBpZiAoIW1faW1hZ2UgfHwgbV9pbWFnZS0+aXNOdWxsKCkpIHsKICAgICAgICAgLy8gSW1hZ2Ug
ZGVjb2RpbmcgZmFpbGVkOyB0aGUgaW1hZ2UgZGF0YSBpcyBtYWxmb3JtZWQuCiAgICAgICAgIGVy
cm9yKGVycm9yT2NjdXJyZWQoKSA/IHN0YXR1cygpIDogRGVjb2RlRXJyb3IpOwpAQCAtNDMyLDYg
KzQ0NSwzMiBAQCB2b2lkIENhY2hlZEltYWdlOjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1CiAgICAg
Q2FjaGVkUmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0YSk7CiB9CiAKK3ZvaWQgQ2FjaGVkSW1h
Z2U6OnZpZGVvTWV0YURhdGFBdmFpbGFibGUoKQoreworICAgIGZwcmludGYoc3RkZXJyLCAidmlk
ZW9NZXRhRGF0YUF2YWlsYWJsZVxuIik7CisKKyAgICBpZiAoIW1faW1hZ2UgfHwgbV9pbWFnZS0+
aXNOdWxsKCkpIHsKKyAgICAgICAgLy8gSW1hZ2UgZGVjb2RpbmcgZmFpbGVkOyB0aGUgaW1hZ2Ug
ZGF0YSBpcyBtYWxmb3JtZWQuCisgICAgICAgIGVycm9yKGVycm9yT2NjdXJyZWQoKSA/IHN0YXR1
cygpIDogRGVjb2RlRXJyb3IpOworICAgICAgICBpZiAoaW5DYWNoZSgpKQorICAgICAgICAgICAg
bWVtb3J5Q2FjaGUoKS0+cmVtb3ZlKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGZwcmludGYoc3RkZXJyLCAibm90aWZ5T2JzZXJ2ZXJzXG4iKTsKKworICAgIG5vdGlmeU9ic2Vy
dmVycygpOworfQorCitib29sIENhY2hlZEltYWdlOjpzaG91bGRQbGF5QW5pbWF0aW9uKCkgY29u
c3QKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFnZUNsaWVudD4g
Y2xpZW50V2Fsa2VyKG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZEltYWdlQ2xpZW50KiBj
bGllbnQgPSBjbGllbnRXYWxrZXIubmV4dCgpKSB7CisgICAgICAgIGlmIChjbGllbnQtPnNob3Vs
ZFBsYXlJbWFnZUFuaW1hdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBDYWNoZWRJbWFnZTo6ZXJyb3IoQ2FjaGVkUmVz
b3VyY2U6OlN0YXR1cyBzdGF0dXMpCiB7CiAgICAgY2hlY2tTaG91bGRQYWludEJyb2tlbkltYWdl
KCk7CkBAIC00NDIsNiArNDgxLDggQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZXJyb3IoQ2FjaGVkUmVz
b3VyY2U6OgogCiB2b2lkIENhY2hlZEltYWdlOjpyZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogeworICAgIGZwcmludGYoc3RkZXJyLCAicmVzcG9uc2VS
ZWNlaXZlZCAlc1xuIiwgcmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCkuZGF0YSgpKTsKKwogICAg
IGlmICghbV9yZXNwb25zZS5pc051bGwoKSkKICAgICAgICAgY2xlYXIoKTsKICAgICBDYWNoZWRS
ZXNvdXJjZTo6cmVzcG9uc2VSZWNlaXZlZChyZXNwb25zZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMTc2MDM0KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
MSw2ICsxMjEsOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFu
Y2VkKGNvbnN0IEltYWdlKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNoYW5nZWRJblJl
Y3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHZpZGVvTWV0YURhdGFBdmFpbGFibGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkUGxheUFuaW1hdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBhZGRJbmNyZW1lbnRhbERh
dGFCdWZmZXIoU2hhcmVkQnVmZmVyJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRJbWFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZUNsaWVudC5oCShyZXZpc2lvbiAxNzYwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxsZWQgd2hlbiBHSUYgYW5p
bWF0aW9uIHByb2dyZXNzZXMuCiAgICAgdmlydHVhbCB2b2lkIG5ld0ltYWdlQW5pbWF0aW9uRnJh
bWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmIGltYWdlKSB7IGltYWdlQ2hhbmdlZCgmaW1hZ2UpOyB9
CisgICAgdmlydHVhbCBib29sIHNob3VsZFBsYXlJbWFnZUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgJKHJldmlzaW9uIDE3NjAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGlzU1ZHSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWRlb0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQREZEb2N1bWVudEltYWdlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkg
PSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2Vy
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VPYnNlcnZlci5oCShyZXZpc2lvbiAxNzYwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDkg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BZHZhbmNlZChjb25zdCBJbWFn
ZSopID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkSW5SZWN0KGNvbnN0IEltYWdlKiwg
Y29uc3QgSW50UmVjdCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2aWRlb01ldGFEYXRhQXZh
aWxhYmxlKCkgeyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZFBsYXlBbmltYXRpb24oKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9WaWRlb0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9WaWRlb0ltYWdlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1ZpZGVvSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlZpZGVvSW1hZ2UuaCIKKworI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUg
Ikxlbmd0aC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWZQdHI8VmlkZW9JbWFnZT4gVmlkZW9JbWFnZTo6Y3JlYXRlKEltYWdlT2Jz
ZXJ2ZXIqIG9ic2VydmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlkZW9JbWFnZShv
YnNlcnZlcikpOworfQorCitWaWRlb0ltYWdlOjpWaWRlb0ltYWdlKEltYWdlT2JzZXJ2ZXIqIG9i
c2VydmVyKQorICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCisgICAgLCBtX3BsYXllcihNZWRpYVBsYXll
cjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZnJhbWVUaW1lcih0aGlzLCAmVmlkZW9JbWFnZTo6
ZnJhbWVUaW1lckZpcmVkKQorICAgICwgbV9kaWROb3RpZnlNZXRhRGF0YUF2YWlsYWJsZShmYWxz
ZSkKK3sKK30KKworVmlkZW9JbWFnZTo6flZpZGVvSW1hZ2UoKQoreworfQorCitib29sIFZpZGVv
SW1hZ2U6OnNob3VsZFVzZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7Cisg
ICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVkaWFNSU1FVHlwZShtaW1l
VHlwZSk7Cit9CisKK3ZvaWQgVmlkZW9JbWFnZTo6bG9hZChjb25zdCBVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBtX3BsYXllci0+bG9hZCh1cmwsIENvbnRlbnRUeXBl
KG1pbWVUeXBlKSwgIiIpOworfQorCit2b2lkIFZpZGVvSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNE
aW1lbnNpb25zKExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0
LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKQoreworICAgIGF1dG8gc2l6ZSA9IG1fcGxheWVy
LT5uYXR1cmFsU2l6ZSgpOworICAgIGludHJpbnNpY1dpZHRoID0gTGVuZ3RoKHNpemUud2lkdGgo
KSwgRml4ZWQpOworICAgIGludHJpbnNpY0hlaWdodCA9IExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCk7CisgICAgaW50cmluc2ljUmF0aW8gPSBzaXplOworfQorCitGbG9hdFNpemUgVmlkZW9J
bWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWVyLT5uYXR1cmFsU2l6ZSgp
OworfQorCitib29sIFZpZGVvSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgLyphbGxEYXRhUmVjZWl2
ZWQqLykKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXItPnJlYWR5U3RhdGUoKSA+PSBNZWRpYVBsYXll
cjo6SGF2ZU1ldGFkYXRhOworfQorCit2b2lkIFZpZGVvSW1hZ2U6OmFkdmFuY2UoKQoreworICAg
IGlmIChtX3BsYXllci0+cmVhZHlTdGF0ZSgpID49IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0
YSkKKyAgICAgICAgbV9mcmFtZVRpbWVyLnN0YXJ0T25lU2hvdCgxNl9tcyk7CisKKyAgICBpZiAo
bV9wbGF5ZXItPmR1cmF0aW9uKCkgPiBNZWRpYVRpbWU6Onplcm9UaW1lKCkgJiYgbV9wbGF5ZXIt
PmN1cnJlbnRUaW1lKCkgPj0gbV9wbGF5ZXItPmR1cmF0aW9uKCkpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJzZWVraW5nICVkXG4iLCBtX3BsYXllci0+cmVhZHlTdGF0ZSgpKTsKKyAgICAg
ICAgbV9wbGF5ZXItPnNlZWsoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKTsKKyAgICB9Cit9CisKK3Zv
aWQgVmlkZW9JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pCit7
CisgICAgLy8gICAgZnByaW50ZihzdGRlcnIsICJkcmF3ICVkXG4iLCBtX3BsYXllci0+cmVhZHlT
dGF0ZSgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRl
eHQpOworICAgIGNvbnRleHQtPmNsaXAoZHN0UmVjdCk7CisgICAgY29udGV4dC0+dHJhbnNsYXRl
KGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7CisgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXpl
KGRzdFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSAvIHNy
Y1JlY3QuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0LT50cmFuc2xhdGUoLXNyY1JlY3QueCgpLCAt
c3JjUmVjdC55KCkpOworICAgIG1fcGxheWVyLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChj
b250ZXh0LCBJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoc2l6ZSgpKSkpOworICAgIHN0YXRl
U2F2ZXIucmVzdG9yZSgpOworCisgICAgYWR2YW5jZSgpOworfQorCit2b2lkIFZpZGVvSW1hZ2U6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKy8vICAgIGZwcmlu
dGYoc3RkZXJyLCAiZHJhdyBwYXR0ZXJuICVkXG4iLCBtX3BsYXllci0+cmVhZHlTdGF0ZSgpKTsK
KyAgICBJbWFnZTo6ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3BlcmF0b3IsIGRlc3RSZWN0LCBi
bGVuZE1vZGUpOworCisgICAgYWR2YW5jZSgpOworfQorCit2b2lkIFZpZGVvSW1hZ2U6Om1lZGlh
UGxheWVyTmV0d29ya1N0YXRlQ2hhbmdlZChNZWRpYVBsYXllciopCit7CisgICAgZnByaW50Zihz
dGRlcnIsICJuZXR3b3JrU3RhdGUgJWRcbiIsIG1fcGxheWVyLT5uZXR3b3JrU3RhdGUoKSk7CisK
KyAgICBpZiAobV9wbGF5ZXItPm5ldHdvcmtTdGF0ZSgpID49IE1lZGlhUGxheWVyOjpGb3JtYXRF
cnJvciAmJiAhbV9kaWROb3RpZnlNZXRhRGF0YUF2YWlsYWJsZSkgeworICAgICAgICBtX2RpZE5v
dGlmeU1ldGFEYXRhQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT52
aWRlb01ldGFEYXRhQXZhaWxhYmxlKCk7CisgICAgfQorfQorCit2b2lkIFZpZGVvSW1hZ2U6Om1l
ZGlhUGxheWVyUmVhZHlTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQoreworICAgIGZwcmludGYo
c3RkZXJyLCAicmVhZHlTdGF0ZSAlZFxuIiwgbV9wbGF5ZXItPnJlYWR5U3RhdGUoKSk7CisgICAg
aWYgKG1fcGxheWVyLT5yZWFkeVN0YXRlKCkgPj0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRh
KQorICAgICAgICBtX2ZyYW1lVGltZXIuc3RhcnRPbmVTaG90KDBfbXMpOworICAgIGlmIChtX3Bs
YXllci0+cmVhZHlTdGF0ZSgpID49IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEgJiYgIW1fZGlk
Tm90aWZ5TWV0YURhdGFBdmFpbGFibGUpIHsKKyAgICAgICAgbV9kaWROb3RpZnlNZXRhRGF0YUF2
YWlsYWJsZSA9IHRydWU7CisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+dmlkZW9NZXRhRGF0YUF2
YWlsYWJsZSgpOworICAgIH0KK30KKwordm9pZCBWaWRlb0ltYWdlOjptZWRpYVBsYXllclRpbWVD
aGFuZ2VkKE1lZGlhUGxheWVyKikKK3sKKy8vICAgIGZwcmludGYoc3RkZXJyLCAibWVkaWFQbGF5
ZXJUaW1lQ2hhbmdlZCAlZlxuIiwgbV9wbGF5ZXItPmN1cnJlbnRUaW1lKCkudG9GbG9hdCgpKTsK
KyAgICBtX2ZyYW1lVGltZXIuc3RhcnRPbmVTaG90KDBfbXMpOworfQorCit2b2lkIFZpZGVvSW1h
Z2U6OmZyYW1lVGltZXJGaXJlZChUaW1lciYpCit7CisgICAgaW1hZ2VPYnNlcnZlcigpLT5hbmlt
YXRpb25BZHZhbmNlZCh0aGlzKTsKKworICAgIGlmICghaW1hZ2VPYnNlcnZlcigpLT5zaG91bGRQ
bGF5QW5pbWF0aW9uKCkpIHsKKyAgICAgICAgbV9wbGF5ZXItPnBhdXNlKCk7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAicGF1c2luZ1xuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKG1fcGxheWVyLT5wYXVzZWQoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBsYXlp
bmdcbiIpOworICAgICAgICBtX3BsYXllci0+c2V0TXV0ZWQodHJ1ZSk7CisgICAgICAgIG1fcGxh
eWVyLT5wbGF5KCk7CisgICAgfQorfQorCitib29sIFZpZGVvSW1hZ2U6OmlzTWV0YURhdGFBdmFp
bGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXllci0+cmVhZHlTdGF0ZSgpID49IE1l
ZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7Cit9CisKK1Bhc3NOYXRpdmVJbWFnZVB0ciBWaWRlb0lt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCit7CisvLyAgICBmcHJpbnRmKHN0ZGVy
ciwgIm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lICVkXG4iLCAhIW1fcGxheWVyLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRUaW1lKCkpOworICAgIHJldHVybiBtX3BsYXllci0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50VGltZSgpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9WaWRlb0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVmlkZW9JbWFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVmlkZW9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFZpZGVvSW1hZ2VfaAorI2RlZmluZSBWaWRlb0lt
YWdlX2gKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNp
bmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFZpZGVvSW1h
Z2UgOiBwdWJsaWMgSW1hZ2UsIHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZlB0cjxWaWRlb0ltYWdlPiBjcmVhdGUoSW1hZ2VPYnNlcnZlciopOworCisg
ICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSk7CisKKyAgICB2b2lkIGxvYWQoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7
CisKKyAgICBib29sIGlzTWV0YURhdGFBdmFpbGFibGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwg
Ym9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVuZ3Ro
JiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50
cmluc2ljUmF0aW8pIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBGbG9hdFNpemUgc2l6ZSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCAv
KmRlc3Ryb3lBbGwqLyA9IHRydWUpIG92ZXJyaWRlIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
KyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRN
b2RlKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUGFzc05hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBi
b29sIGRhdGFDaGFuZ2VkKGJvb2wgLyphbGxEYXRhUmVjZWl2ZWQqLyk7CisKK3ByaXZhdGU6Cisg
ICAgVmlkZW9JbWFnZShJbWFnZU9ic2VydmVyKik7CisgICAgdmlydHVhbCB+VmlkZW9JbWFnZSgp
OworCisgICAgdm9pZCBhZHZhbmNlKCk7CisgICAgdm9pZCBmcmFtZVRpbWVyRmlyZWQoVGltZXIm
KTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJOZXR3b3JrU3RhdGVDaGFuZ2VkKE1l
ZGlhUGxheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyUmVhZHlT
dGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbWVk
aWFQbGF5ZXJUaW1lQ2hhbmdlZChNZWRpYVBsYXllciopIG92ZXJyaWRlOworCisgICAgT3duUHRy
PE1lZGlhUGxheWVyPiBtX3BsYXllcjsKKyAgICBUaW1lciBtX2ZyYW1lVGltZXI7CisgICAgYm9v
bCBtX2RpZE5vdGlmeU1ldGFEYXRhQXZhaWxhYmxlOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkocmV2aXNpb24gMTc2MDM0
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQ2LDYgKzI0Niw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyU3R5bGUqIGNhY2hl
ZEZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbmV3SW1hZ2VBbmlt
YXRpb25GcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYpIGZpbmFsIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRQbGF5SW1hZ2VBbmltYXRpb24oKSBjb25zdCBmaW5hbCBvdmVycmlk
ZSB7IHJldHVybiAhbV9oYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnM7IH0KIAogICAgIHVuc2lnbmVk
IG1fYmFzZVR5cGVGbGFncyA6IDY7CiAgICAgdW5zaWduZWQgbV9hbmNlc3RvckxpbmVCb3hEaXJ0
eSA6IDE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245080</attachid>
            <date>2015-01-21 13:55:34 -0800</date>
            <delta_ts>2015-01-21 13:55:34 -0800</delta_ts>
            <desc>attempt to use media source extensions</desc>
            <filename>image-video-4-source.patch</filename>
            <type>text/plain</type>
            <size>27802</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmgJKHJldmlzaW9uIDE3NjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvTWVkaWFTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdlbmVyaWNFdmVudFF1ZXVlOwogCi1jbGFzcyBNZWRp
YVNvdXJjZSA6IHB1YmxpYyBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQsIHB1YmxpYyBBY3RpdmVE
T01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgU2NyaXB0
V3JhcHBhYmxlLCBwdWJsaWMgVVJMUmVnaXN0cmFibGUgeworY2xhc3MgTWVkaWFTb3VyY2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxNZWRpYVNvdXJjZT4sIHB1YmxpYyBNZWRpYVNvdXJjZVByaXZhdGVD
bGllbnQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxp
bmVEYXRhLCBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgVVJMUmVnaXN0cmFibGUgewog
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFJlZ2lzdHJ5KFVSTFJlZ2lzdHJ5Kik7CiAgICAg
c3RhdGljIE1lZGlhU291cmNlKiBsb29rdXAoY29uc3QgU3RyaW5nJiB1cmwpIHsgcmV0dXJuIHNf
cmVnaXN0cnkgPyBzdGF0aWNfY2FzdDxNZWRpYVNvdXJjZSo+KHNfcmVnaXN0cnktPmxvb2t1cCh1
cmwpKSA6IDA7IH0KQEAgLTExMiw4ICsxMTIsOCBAQCBwdWJsaWM6CiAgICAgLy8gVVJMUmVnaXN0
cmFibGUgaW50ZXJmYWNlCiAgICAgdmlydHVhbCBVUkxSZWdpc3RyeSYgcmVnaXN0cnkoKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VQcml2YXRlQ2xp
ZW50Pjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50
Pjo6ZGVyZWY7CisgICAgdmlydHVhbCB2b2lkIHJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxN
ZWRpYVNvdXJjZT46OnJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgb3ZlcnJpZGUg
eyBSZWZDb3VudGVkPE1lZGlhU291cmNlPjo6ZGVyZWYoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAg
ZXhwbGljaXQgTWVkaWFTb3VyY2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTc2MTk4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTUyLDYgKzYxNTIsOCBAQAogCQlFNDdCNEJF
OTBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QjRCRTcwRTcxMjQxNjAwMDM4
ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsKIAkJRTQ3RTI3NjUxNjAzNkVE
MjAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY0MTYwMzZFRDIwMEVFMkFG
QiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3RTI3NjgxNjAzNkVEQzAwRUUyQUZCIC8q
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwICovOyB9OworCQlFNDdGQTBGOTE5REJGQkM5MDA1
NzgyREUgLyogVmlkZW9JbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDdGQTBGODE5REJGQkM5MDA1NzgyREUgLyogVmlkZW9JbWFnZS5jcHAg
Ki87IH07CisJCUU0N0ZBMEZCMTlEQkZCRDMwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdGQTBGQTE5REJGQkQz
MDA1NzgyREUgLyogVmlkZW9JbWFnZS5oICovOyB9OwogCQlFNDg5NDRBMjE4MEI1N0Q4MDBGMTY1
RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxh
eW91dC5jcHAgKi87IH07CiAJCUU0ODk0NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5l
TGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDg5NDRBMTE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OTE2RkY3MTk1REY2QTAw
MDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5MTZGRjYxOTVERjZBMDAwNUFCMzQ5IC8qIExh
eWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTEzNjU5LDYgKzEzNjYxLDggQEAKIAkJRTQ3QjRCRTcwRTcxMjQx
NjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJlc291cmNlSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3NjQxNjAzNkVEMjAwRUUyQUZCIC8qIERvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDdFMjc2NzE2MDM2RURDMDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3RkEw
RjgxOURCRkJDOTAwNTc4MkRFIC8qIFZpZGVvSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmlkZW9JbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0N0ZBMEZBMTlEQkZCRDMwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ4OTQ0QTAxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODk0NEExMTgwQjU3RDgwMEYx
NjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNpbXBsZUxpbmVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5
MTZGRjYxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU1NSw2ICsyMDU1OSw4IEBACiAJCQkJQkU5
MTNEN0YxODFFRjhFNTAwRENCMDlFIC8qIFRyYWNrUHJpdmF0ZUJhc2UuaCAqLywKIAkJCQkzN0My
OEE2NzEwRjY1OUNDMDA4Qzc4MTMgLyogVHlwZXNldHRpbmdGZWF0dXJlcy5oICovLAogCQkJCUU0
QUZDRkE0MERBRjI5QTMwMEY1RjU1QyAvKiBVbml0QmV6aWVyLmggKi8sCisJCQkJRTQ3RkEwRjgx
OURCRkJDOTAwNTc4MkRFIC8qIFZpZGVvSW1hZ2UuY3BwICovLAorCQkJCUU0N0ZBMEZBMTlEQkZC
RDMwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmggKi8sCiAJCQkJQkVGMjlFRUExNzE1REQwOTAwQzRC
NEM5IC8qIFZpZGVvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJMTQxMURDQjAxNjRDMzlBODAwRDQ5
QkMxIC8qIFdpZHRoQ2FjaGUuaCAqLywKIAkJCQk5MzlCMDJFQzBFQTJEQkM0MDBDNTQ1NzAgLyog
V2lkdGhJdGVyYXRvci5jcHAgKi8sCkBAIC0yNjY1Nyw2ICsyNjY2Myw3IEBACiAJCQkJOTdBQUJE
MjMxNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTRBNUEyQURDMTYxRTdFMDAwMDU4ODlERCAvKiBXZWJTb2NrZXRFeHRl
bnNpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QUFCRDI0MTRGQTA5RDUwMDc0NTdB
RSAvKiBXZWJTb2NrZXRFeHRlbnNpb25Qcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0
N0ZBMEZCMTlEQkZCRDMwMDU3ODJERSAvKiBWaWRlb0ltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5N0FBQkQyNTE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0RnJhbWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QUFCRDI3MTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRIYW5kc2hha2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxl
ZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzkxNiw2ICsyNzkyMyw3IEBACiAJ
CQkJQTgxMzY5RTEwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxMZWdlbmRFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4RUE3OUZDMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MTElFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFEQzIxMEExNTIwNTcwMEIxMkE2OCAvKiBIVE1M
TGlua0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ3RkEwRjkxOURCRkJDOTAwNTc4
MkRFIC8qIFZpZGVvSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTdEMzIwQTE5Mzg1
NTAwQThFRjVGIC8qIEhUTUxNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE3
Q0FDMEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MTWFycXVlZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTQ0NjEzQTQwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDE3NjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
IlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiVmlkZW9JbWFnZS5oIgogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTMyOCw2ICszMjksNyBAQCB2b2lkIENhY2hl
ZEltYWdlOjpjbGVhcigpCiAKIGlubGluZSB2b2lkIENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgp
CiB7CisgICAgZnByaW50ZihzdGRlcnIsICJjcmVhdGVJbWFnZSAlc1xuIiwgbV9yZXNwb25zZS5t
aW1lVHlwZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2UgaWYgaXQg
ZG9lc24ndCB5ZXQgZXhpc3QuCiAgICAgaWYgKG1faW1hZ2UpCiAgICAgICAgIHJldHVybjsKQEAg
LTM0MCw2ICszNDIsMTAgQEAgaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNyZWF0ZUltYWdlKCkK
ICAgICAgICAgUmVmUHRyPFNWR0ltYWdlPiBzdmdJbWFnZSA9IFNWR0ltYWdlOjpjcmVhdGUodGhp
cyk7CiAgICAgICAgIG1fc3ZnSW1hZ2VDYWNoZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHSW1hZ2VD
YWNoZT4oc3ZnSW1hZ2UuZ2V0KCkpOwogICAgICAgICBtX2ltYWdlID0gc3ZnSW1hZ2UucmVsZWFz
ZSgpOworICAgIH0gZWxzZSBpZiAoVmlkZW9JbWFnZTo6c2hvdWxkVXNlRm9yTUlNRVR5cGUobV9y
ZXNwb25zZS5taW1lVHlwZSgpKSkgeworICAgICAgICBSZWZQdHI8VmlkZW9JbWFnZT4gdmlkZW9J
bWFnZSA9IFZpZGVvSW1hZ2U6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgdmlkZW9JbWFnZS0+bG9h
ZCh1cmwoKSwgbV9yZXNwb25zZS5taW1lVHlwZSgpKTsKKyAgICAgICAgbV9pbWFnZSA9IHZpZGVv
SW1hZ2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVh
dGUodGhpcyk7CiAgICAgICAgIGRvd25jYXN0PEJpdG1hcEltYWdlPigqbV9pbWFnZSkuc2V0QWxs
b3dTdWJzYW1wbGluZyhtX2xvYWRlciAmJiBtX2xvYWRlci0+ZnJhbWVMb2FkZXIoKS0+ZnJhbWUo
KS5zZXR0aW5ncygpLmltYWdlU3Vic2FtcGxpbmdFbmFibGVkKCkpOwpAQCAtNDExLDYgKzQxNyw4
IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmFkZERhdGEoY29uc3QgY2hhciogZGEKIAogdm9pZCBDYWNo
ZWRJbWFnZTo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCiB7CisgICAgZnByaW50
ZihzdGRlcnIsICJmaW5pc2hMb2FkaW5nICVzXG4iLCBtX3Jlc3BvbnNlLm1pbWVUeXBlKCkudXRm
OCgpLmRhdGEoKSk7CisKICAgICBtX2RhdGEgPSBkYXRhOwogICAgIGlmICghbV9pbWFnZSAmJiBk
YXRhKQogICAgICAgICBjcmVhdGVJbWFnZSgpOwpAQCAtNDE4LDYgKzQyNiwxMSBAQCB2b2lkIENh
Y2hlZEltYWdlOjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1CiAgICAgaWYgKG1faW1hZ2UpCiAgICAg
ICAgIG1faW1hZ2UtPnNldERhdGEoZGF0YSwgdHJ1ZSk7CiAKKyAgICBpZiAobV9pbWFnZSAmJiBt
X2ltYWdlLT5pc1ZpZGVvSW1hZ2UoKSkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZTo6ZmluaXNo
TG9hZGluZyhkYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmICghbV9pbWFn
ZSB8fCBtX2ltYWdlLT5pc051bGwoKSkgewogICAgICAgICAvLyBJbWFnZSBkZWNvZGluZyBmYWls
ZWQ7IHRoZSBpbWFnZSBkYXRhIGlzIG1hbGZvcm1lZC4KICAgICAgICAgZXJyb3IoZXJyb3JPY2N1
cnJlZCgpID8gc3RhdHVzKCkgOiBEZWNvZGVFcnJvcik7CkBAIC00MzIsNiArNDQ1LDMyIEBAIHZv
aWQgQ2FjaGVkSW1hZ2U6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnUKICAgICBDYWNoZWRSZXNvdXJj
ZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKIH0KIAordm9pZCBDYWNoZWRJbWFnZTo6dmlkZW9NZXRh
RGF0YUF2YWlsYWJsZSgpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJ2aWRlb01ldGFEYXRhQXZh
aWxhYmxlXG4iKTsKKworICAgIGlmICghbV9pbWFnZSB8fCBtX2ltYWdlLT5pc051bGwoKSkgewor
ICAgICAgICAvLyBJbWFnZSBkZWNvZGluZyBmYWlsZWQ7IHRoZSBpbWFnZSBkYXRhIGlzIG1hbGZv
cm1lZC4KKyAgICAgICAgZXJyb3IoZXJyb3JPY2N1cnJlZCgpID8gc3RhdHVzKCkgOiBEZWNvZGVF
cnJvcik7CisgICAgICAgIGlmIChpbkNhY2hlKCkpCisgICAgICAgICAgICBtZW1vcnlDYWNoZSgp
LT5yZW1vdmUodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZnByaW50ZihzdGRl
cnIsICJub3RpZnlPYnNlcnZlcnNcbiIpOworCisgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7Cit9CisK
K2Jvb2wgQ2FjaGVkSW1hZ2U6OnNob3VsZFBsYXlBbmltYXRpb24oKSBjb25zdAoreworICAgIENh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiBjbGllbnRXYWxrZXIo
bV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkSW1hZ2VDbGllbnQqIGNsaWVudCA9IGNsaWVu
dFdhbGtlci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGNsaWVudC0+c2hvdWxkUGxheUltYWdlQW5p
bWF0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB2b2lkIENhY2hlZEltYWdlOjplcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVz
IHN0YXR1cykKIHsKICAgICBjaGVja1Nob3VsZFBhaW50QnJva2VuSW1hZ2UoKTsKQEAgLTQ0Miw2
ICs0ODEsOCBAQCB2b2lkIENhY2hlZEltYWdlOjplcnJvcihDYWNoZWRSZXNvdXJjZTo6CiAKIHZv
aWQgQ2FjaGVkSW1hZ2U6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCiB7CisgICAgZnByaW50ZihzdGRlcnIsICJyZXNwb25zZVJlY2VpdmVkICVzXG4i
LCByZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKS5kYXRhKCkpOworCiAgICAgaWYgKCFtX3Jlc3Bv
bnNlLmlzTnVsbCgpKQogICAgICAgICBjbGVhcigpOwogICAgIENhY2hlZFJlc291cmNlOjpyZXNw
b25zZVJlY2VpdmVkKHJlc3BvbnNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiAxNzYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCw4IEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1h
Z2UqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFn
ZSosIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlkZW9NZXRh
RGF0YUF2YWlsYWJsZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQbGF5QW5p
bWF0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFy
ZWRCdWZmZXImKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZElt
YWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlQ2xpZW50LmgJKHJldmlzaW9uIDE3NjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0
Miw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENhbGxlZCB3aGVuIEdJRiBhbmltYXRpb24gcHJvZ3Jl
c3Nlcy4KICAgICB2aXJ0dWFsIHZvaWQgbmV3SW1hZ2VBbmltYXRpb25GcmFtZUF2YWlsYWJsZShD
YWNoZWRJbWFnZSYgaW1hZ2UpIHsgaW1hZ2VDaGFuZ2VkKCZpbWFnZSk7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkUGxheUltYWdlQW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAko
cmV2aXNpb24gMTc2MTk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1ZpZGVvSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1BERkRvY3VtZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSA9IDA7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgJ
KHJldmlzaW9uIDE3NjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKikgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0
JikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHZpZGVvTWV0YURhdGFBdmFpbGFibGUoKSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGxheUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oCShyZXZpc2lvbiAxNzYx
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIE1lZGlhU291cmNlUHJpdmF0ZTsKIAotY2xhc3MgTWVkaWFTb3VyY2VQ
cml2YXRlQ2xpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50
PiB7CitjbGFzcyBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1
YWwgfk1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCgpIHsgfQogCkBAIC00Myw2ICs0Myw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9UaW1lKGNvbnN0IE1lZGlhVGltZSYpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZWYoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcmVm
KCkgPSAwOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VmlkZW9JbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvVmlkZW9JbWFnZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9WaWRlb0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWaWRlb0lt
YWdlLmgiCisKKyNpbmNsdWRlICJDb250ZW50VHlwZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJMZW5ndGguaCIK
KyNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGUuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVy
UHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxWaWRlb0ltYWdlPiBW
aWRlb0ltYWdlOjpjcmVhdGUoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBWaWRlb0ltYWdlKG9ic2VydmVyKSk7Cit9CisKK1ZpZGVvSW1hZ2U6OlZp
ZGVvSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCisgICAgOiBJbWFnZShvYnNlcnZlcikK
KyAgICAsIG1fY29udGVudFR5cGUoIiIpCisgICAgLCBtX3BsYXllcihNZWRpYVBsYXllcjo6Y3Jl
YXRlKCp0aGlzKSkKKyAgICAsIG1fZnJhbWVUaW1lcih0aGlzLCAmVmlkZW9JbWFnZTo6ZnJhbWVU
aW1lckZpcmVkKQorICAgICwgbV9kaWROb3RpZnlNZXRhRGF0YUF2YWlsYWJsZShmYWxzZSkKKyAg
ICAsIG1fbGFzdEFwcGVuZFBvc2l0aW9uKDApCit7Cit9CisKK1ZpZGVvSW1hZ2U6On5WaWRlb0lt
YWdlKCkKK3sKK30KKworYm9vbCBWaWRlb0ltYWdlOjpzaG91bGRVc2VGb3JNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZE1lZGlhTUlNRVR5cGUobWltZVR5cGUpOworfQorCit2b2lkIFZpZGVvSW1hZ2U6Omxv
YWQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgbV9jb250
ZW50VHlwZSA9IENvbnRlbnRUeXBlKG1pbWVUeXBlKTsKKyAgICBtX3BsYXllci0+bG9hZCh1cmws
IG1fY29udGVudFR5cGUsIHRoaXMpOworfQorCit2b2lkIFZpZGVvSW1hZ2U6OmNvbXB1dGVJbnRy
aW5zaWNEaW1lbnNpb25zKExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2lj
SGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKQoreworICAgIGF1dG8gc2l6ZSA9IG1f
cGxheWVyLT5uYXR1cmFsU2l6ZSgpOworICAgIGludHJpbnNpY1dpZHRoID0gTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpOworICAgIGludHJpbnNpY0hlaWdodCA9IExlbmd0aChzaXplLmhlaWdo
dCgpLCBGaXhlZCk7CisgICAgaW50cmluc2ljUmF0aW8gPSBzaXplOworfQorCitGbG9hdFNpemUg
VmlkZW9JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWVyLT5uYXR1cmFs
U2l6ZSgpOworfQorCitib29sIFZpZGVvSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKQoreworICAgIGlmICghYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBTaGFyZWRCdWZmZXIqIGJ1ZmZlcmVkRGF0YSA9IGRhdGEoKTsKKyAgICBpZiAo
IWJ1ZmZlcmVkRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6ZV90IG5ld0Rh
dGFTaXplID0gYnVmZmVyZWREYXRhLT5zaXplKCkgLSBtX2xhc3RBcHBlbmRQb3NpdGlvbjsKKwor
ICAgIGZwcmludGYoc3RkZXJyLCAiZGF0YUNoYW5nZWQgYXBwZW5kaW5nICV6dSAlZCBhbGxEYXRh
UmVjZWl2ZWQgJWRcbiIsIG5ld0RhdGFTaXplLCBtX3BsYXllci0+cmVhZHlTdGF0ZSgpLCBhbGxE
YXRhUmVjZWl2ZWQpOworCisgICAgaWYgKG5ld0RhdGFTaXplKSB7CisgICAgICAgIG1fc291cmNl
QnVmZmVyUHJpdmF0ZS0+YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1
ZmZlcmVkRGF0YS0+ZGF0YSgpKSArIG1fbGFzdEFwcGVuZFBvc2l0aW9uLCBuZXdEYXRhU2l6ZSk7
CisgICAgICAgIG1fbGFzdEFwcGVuZFBvc2l0aW9uICs9IG5ld0RhdGFTaXplOworICAgIH0KKwor
Ly8gICAgbV9tZWRpYVNvdXJjZVByaXZhdGUtPm1hcmtFbmRPZlN0cmVhbShNZWRpYVNvdXJjZVBy
aXZhdGU6OkVvc05vRXJyb3IpOworCisgICAgZnByaW50ZihzdGRlcnIsICJtX3BsYXllci0+cmVh
ZHlTdGF0ZSAlZFxuIiwgbV9wbGF5ZXItPnJlYWR5U3RhdGUoKSk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBWaWRlb0ltYWdlOjphZHZhbmNlKCkKK3sKKyAgICBpZiAobV9wbGF5ZXIt
PnJlYWR5U3RhdGUoKSA+PSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCisgICAgICAgIG1f
ZnJhbWVUaW1lci5zdGFydE9uZVNob3QoMTZfbXMpOworCisgICAgaWYgKG1fcGxheWVyLT5kdXJh
dGlvbigpID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmIG1fcGxheWVyLT5jdXJyZW50VGltZSgp
ID49IG1fcGxheWVyLT5kdXJhdGlvbigpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2Vl
a2luZyAlZFxuIiwgbV9wbGF5ZXItPnJlYWR5U3RhdGUoKSk7CisgICAgICAgIG1fcGxheWVyLT5z
ZWVrKE1lZGlhVGltZTo6emVyb1RpbWUoKSk7CisgICAgfQorfQorCit2b2lkIFZpZGVvSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKQoreworICAgIC8vICAgIGZw
cmludGYoc3RkZXJyLCAiZHJhdyAlZFxuIiwgbV9wbGF5ZXItPnJlYWR5U3RhdGUoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKKyAgICBjb250
ZXh0LT5jbGlwKGRzdFJlY3QpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZShkc3RSZWN0LngoKSwg
ZHN0UmVjdC55KCkpOworICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShkc3RSZWN0LndpZHRo
KCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgp
KSk7CisgICAgY29udGV4dC0+dHJhbnNsYXRlKC1zcmNSZWN0LngoKSwgLXNyY1JlY3QueSgpKTsK
KyAgICBtX3BsYXllci0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoY29udGV4dCwgSW50UmVj
dChJbnRQb2ludCgpLCBJbnRTaXplKHNpemUoKSkpKTsKKyAgICBzdGF0ZVNhdmVyLnJlc3RvcmUo
KTsKKworICAgIGFkdmFuY2UoKTsKK30KKwordm9pZCBWaWRlb0ltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisvLyAgICBmcHJpbnRmKHN0ZGVyciwgImRy
YXcgcGF0dGVybiAlZFxuIiwgbV9wbGF5ZXItPnJlYWR5U3RhdGUoKSk7CisgICAgSW1hZ2U6OmRy
YXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHls
ZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wZXJhdG9yLCBkZXN0UmVjdCwgYmxlbmRNb2RlKTsKKwor
ICAgIGFkdmFuY2UoKTsKK30KKwordm9pZCBWaWRlb0ltYWdlOjptZWRpYVBsYXllck5ldHdvcmtT
dGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQoreworICAgIGZwcmludGYoc3RkZXJyLCAibmV0d29y
a1N0YXRlICVkXG4iLCBtX3BsYXllci0+bmV0d29ya1N0YXRlKCkpOworCisgICAgaWYgKG1fcGxh
eWVyLT5uZXR3b3JrU3RhdGUoKSA+PSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IgJiYgIW1fZGlk
Tm90aWZ5TWV0YURhdGFBdmFpbGFibGUpIHsKKyAgICAgICAgbV9kaWROb3RpZnlNZXRhRGF0YUF2
YWlsYWJsZSA9IHRydWU7CisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+dmlkZW9NZXRhRGF0YUF2
YWlsYWJsZSgpOworICAgIH0KK30KKwordm9pZCBWaWRlb0ltYWdlOjptZWRpYVBsYXllclJlYWR5
U3RhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKikKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgInJlYWR5
U3RhdGUgJWRcbiIsIG1fcGxheWVyLT5yZWFkeVN0YXRlKCkpOworICAgIGlmIChtX3BsYXllci0+
cmVhZHlTdGF0ZSgpID49IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YSkKKyAgICAgICAgbV9m
cmFtZVRpbWVyLnN0YXJ0T25lU2hvdCgwX21zKTsKKyAgICBpZiAobV9wbGF5ZXItPnJlYWR5U3Rh
dGUoKSA+PSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhICYmICFtX2RpZE5vdGlmeU1ldGFEYXRh
QXZhaWxhYmxlKSB7CisgICAgICAgIG1fZGlkTm90aWZ5TWV0YURhdGFBdmFpbGFibGUgPSB0cnVl
OworICAgICAgICBpbWFnZU9ic2VydmVyKCktPnZpZGVvTWV0YURhdGFBdmFpbGFibGUoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVmlkZW9JbWFnZTo6bWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZChNZWRpYVBs
YXllciopCit7CisvLyAgICBmcHJpbnRmKHN0ZGVyciwgIm1lZGlhUGxheWVyVGltZUNoYW5nZWQg
JWZcbiIsIG1fcGxheWVyLT5jdXJyZW50VGltZSgpLnRvRmxvYXQoKSk7CisgICAgbV9mcmFtZVRp
bWVyLnN0YXJ0T25lU2hvdCgwX21zKTsKK30KKwordm9pZCBWaWRlb0ltYWdlOjptZWRpYVBsYXll
ckRpZEFkZFZpZGVvVHJhY2soUGFzc1JlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZT4gdmlkZW9UcmFj
aykKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIm1lZGlhUGxheWVyRGlkQWRkVmlkZW9UcmFjayAl
ZFxuIiwgdmlkZW9UcmFjay0+c2VsZWN0ZWQoKSk7Cit9CisKK3ZvaWQgVmlkZW9JbWFnZTo6ZnJh
bWVUaW1lckZpcmVkKFRpbWVyJikKK3sKKyAgICBpbWFnZU9ic2VydmVyKCktPmFuaW1hdGlvbkFk
dmFuY2VkKHRoaXMpOworCisgICAgaWYgKCFpbWFnZU9ic2VydmVyKCktPnNob3VsZFBsYXlBbmlt
YXRpb24oKSkgeworICAgICAgICBtX3BsYXllci0+cGF1c2UoKTsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJwYXVzaW5nXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9w
bGF5ZXItPnBhdXNlZCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicGxheWluZ1xuIik7
CisgICAgICAgIG1fcGxheWVyLT5zZXRNdXRlZCh0cnVlKTsKKyAgICAgICAgbV9wbGF5ZXItPnBs
YXkoKTsKKyAgICB9Cit9CisKK2Jvb2wgVmlkZW9JbWFnZTo6aXNNZXRhRGF0YUF2YWlsYWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWVyLT5yZWFkeVN0YXRlKCkgPj0gTWVkaWFQbGF5
ZXI6OkhhdmVNZXRhZGF0YTsKK30KKworUGFzc05hdGl2ZUltYWdlUHRyIFZpZGVvSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKK3sKKy8vICAgIGZwcmludGYoc3RkZXJyLCAibmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUgJWRcbiIsICEhbV9wbGF5ZXItPm5hdGl2ZUltYWdlRm9y
Q3VycmVudFRpbWUoKSk7CisgICAgcmV0dXJuIG1fcGxheWVyLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRUaW1lKCk7Cit9CisKK3ZvaWQgVmlkZW9JbWFnZTo6c2V0UHJpdmF0ZUFuZE9wZW4oUGFzc1Jl
ZjxNZWRpYVNvdXJjZVByaXZhdGU+IG1lZGlhU291cmNlUHJpdmF0ZSkKK3sKKyAgICBBU1NFUlQo
IW1fbWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICBtX21lZGlhU291cmNlUHJpdmF0ZSA9IFdURjo6
bW92ZShtZWRpYVNvdXJjZVByaXZhdGUpOworCisvLyAgICBtX21lZGlhU291cmNlUHJpdmF0ZS0+
Y2xlYXIoKTsKKworICAgIGlmIChtX21lZGlhU291cmNlUHJpdmF0ZS0+YWRkU291cmNlQnVmZmVy
KG1fY29udGVudFR5cGUsIG1fc291cmNlQnVmZmVyUHJpdmF0ZSkgIT0gTWVkaWFTb3VyY2VQcml2
YXRlOjpPaykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCBhZGRTb3VyY2VCdWZm
ZXJcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fc291cmNlQnVmZmVyUHJpdmF0
ZS0+c2V0Q2xpZW50KHRoaXMpOworCisgICAgZnByaW50ZihzdGRlcnIsICJkaWQgYWRkU291cmNl
QnVmZmVyXG4iKTsKKy8vICAgIHNldFJlYWR5U3RhdGUob3BlbktleXdvcmQoKSk7Cit9CisKK01l
ZGlhVGltZSBWaWRlb0ltYWdlOjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgZnByaW50ZihzdGRl
cnIsICJkdXJhdGlvblxuIik7CisgICAgcmV0dXJuIE1lZGlhVGltZSgpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBWaWRlb0ltYWdlOjpidWZmZXJlZCgpIGNvbnN0
Cit7CisgICAgZnByaW50ZihzdGRlcnIsICJidWZmZXJlZFxuIik7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3ZvaWQgVmlkZW9JbWFnZTo6c2Vla1RvVGltZShjb25zdCBNZWRpYVRpbWUmKQor
eworICAgIGZwcmludGYoc3RkZXJyLCAic2Vla1RvVGltZVxuIik7Cit9CisKK3ZvaWQgVmlkZW9J
bWFnZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZEVuZFN0cmVhbShTb3VyY2VCdWZmZXJQcml2YXRl
KiwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKQoreworICAgIGZwcmludGYoc3RkZXJyLCAic291
cmNlQnVmZmVyUHJpdmF0ZURpZEVuZFN0cmVhbVxuIik7Cit9CisKK3ZvaWQgVmlkZW9JbWFnZTo6
c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291cmNl
QnVmZmVyUHJpdmF0ZSosIGNvbnN0IEluaXRpYWxpemF0aW9uU2VnbWVudCYpCit7CisgICAgZnBy
aW50ZihzdGRlcnIsICJzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9u
U2VnbWVudFxuIik7Cit9CisKK3ZvaWQgVmlkZW9JbWFnZTo6c291cmNlQnVmZmVyUHJpdmF0ZURp
ZFJlY2VpdmVTYW1wbGUoU291cmNlQnVmZmVyUHJpdmF0ZSosIFBhc3NSZWZQdHI8TWVkaWFTYW1w
bGU+KQoreworICAgIGZwcmludGYoc3RkZXJyLCAic291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2Vp
dmVTYW1wbGVcbiIpOworfQorCitib29sIFZpZGVvSW1hZ2U6OnNvdXJjZUJ1ZmZlclByaXZhdGVI
YXNBdWRpbyhjb25zdCBTb3VyY2VCdWZmZXJQcml2YXRlKikgY29uc3QKK3sKKyAgICBmcHJpbnRm
KHN0ZGVyciwgInNvdXJjZUJ1ZmZlclByaXZhdGVIYXNBdWRpb1xuIik7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFZpZGVvSW1hZ2U6OnNvdXJjZUJ1ZmZlclByaXZhdGVIYXNWaWRlbyhj
b25zdCBTb3VyY2VCdWZmZXJQcml2YXRlKikgY29uc3QKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwg
InNvdXJjZUJ1ZmZlclByaXZhdGVIYXNWaWRlb1xuIik7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgVmlkZW9JbWFnZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZEJlY29tZVJlYWR5Rm9yTW9y
ZVNhbXBsZXMoU291cmNlQnVmZmVyUHJpdmF0ZSosIEF0b21pY1N0cmluZyB0cmFja0lEKQorewor
ICAgIGZwcmludGYoc3RkZXJyLCAic291cmNlQnVmZmVyUHJpdmF0ZURpZEJlY29tZVJlYWR5Rm9y
TW9yZVNhbXBsZXMgJXNcbiIsIHRyYWNrSUQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisK
K3ZvaWQgVmlkZW9JbWFnZTo6c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKFNvdXJj
ZUJ1ZmZlclByaXZhdGUqLCBBcHBlbmRSZXN1bHQgcmVzdWx0KQoreworICAgIGZwcmludGYoc3Rk
ZXJyLCAic291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlICVkXG4iLCByZXN1bHQpOwor
fQorCit2b2lkIFZpZGVvSW1hZ2U6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlUmVuZGVy
aW5nRXJyb3IoU291cmNlQnVmZmVyUHJpdmF0ZSosIGludCBlcnJvY0NvZGUpCit7CisgICAgZnBy
aW50ZihzdGRlcnIsICJzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVJlbmRlcmluZ0Vycm9y
ICVkXG4iLCBlcnJvY0NvZGUpOworfQorCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1ZpZGVvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9WaWRlb0ltYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9WaWRlb0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFZpZGVvSW1hZ2VfaAorI2RlZmluZSBW
aWRlb0ltYWdlX2gKKworI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCisjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0
ZUNsaWVudC5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNvdXJjZUJ1ZmZl
clByaXZhdGU7CisKK2NsYXNzIFZpZGVvSW1hZ2UgZmluYWwgOiBwdWJsaWMgSW1hZ2UsIHB1Ymxp
YyBNZWRpYVBsYXllckNsaWVudCwgcHVibGljIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCwgcHVi
bGljIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQ
dHI8VmlkZW9JbWFnZT4gY3JlYXRlKEltYWdlT2JzZXJ2ZXIqKTsKKworICAgIHN0YXRpYyBib29s
IHNob3VsZFVzZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgdm9p
ZCBsb2FkKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgYm9vbCBp
c01ldGFEYXRhQXZhaWxhYmxlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2luZ2xl
U2VjdXJpdHlPcmlnaW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKExlbmd0aCYgaW50cmluc2ljV2lk
dGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKSBv
dmVycmlkZTsKKworICAgIHZpcnR1YWwgRmxvYXRTaXplIHNpemUoKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgLypkZXN0cm95QWxsKi8g
PSB0cnVlKSBvdmVycmlkZSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7
CisKKyAgICB2aXJ0dWFsIFBhc3NOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOworCisgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgp
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdl
ZChib29sIC8qYWxsRGF0YVJlY2VpdmVkKi8pIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lk
IHJlZigpIG92ZXJyaWRlIHsgSW1hZ2U6OnJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVm
KCkgb3ZlcnJpZGUgeyBJbWFnZTo6ZGVyZWYoKTsgfQorCitwcml2YXRlOgorICAgIFZpZGVvSW1h
Z2UoSW1hZ2VPYnNlcnZlciopOworICAgIHZpcnR1YWwgflZpZGVvSW1hZ2UoKTsKKworICAgIHZv
aWQgYWR2YW5jZSgpOworICAgIHZvaWQgZnJhbWVUaW1lckZpcmVkKFRpbWVyJik7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNWaWRlb0ltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyTmV0d29ya1N0YXRlQ2hhbmdlZChNZWRp
YVBsYXllciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclJlYWR5U3Rh
dGVDaGFuZ2VkKE1lZGlhUGxheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1lZGlh
UGxheWVyVGltZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgbWVkaWFQbGF5ZXJEaWRBZGRWaWRlb1RyYWNrKFBhc3NSZWZQdHI8VmlkZW9UcmFja1ByaXZh
dGU+KSBvdmVycmlkZTsKKworICAgIC8vIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudAorICAgIHZp
cnR1YWwgdm9pZCBzZXRQcml2YXRlQW5kT3BlbihQYXNzUmVmPE1lZGlhU291cmNlUHJpdmF0ZT4p
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZm
ZXJlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9UaW1lKGNvbnN0
IE1lZGlhVGltZSYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHNvdXJjZUJ1ZmZlclBy
aXZhdGVEaWRFbmRTdHJlYW0oU291cmNlQnVmZmVyUHJpdmF0ZSosIGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
SW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBjb25zdCBJbml0aWFs
aXphdGlvblNlZ21lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZURp
ZFJlY2VpdmVTYW1wbGUoU291cmNlQnVmZmVyUHJpdmF0ZSosIFBhc3NSZWZQdHI8TWVkaWFTYW1w
bGU+KTsKKyAgICB2aXJ0dWFsIGJvb2wgc291cmNlQnVmZmVyUHJpdmF0ZUhhc0F1ZGlvKGNvbnN0
IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc291cmNlQnVm
ZmVyUHJpdmF0ZUhhc1ZpZGVvKGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZURpZEJlY29tZVJlYWR5Rm9yTW9yZVNh
bXBsZXMoU291cmNlQnVmZmVyUHJpdmF0ZSosIEF0b21pY1N0cmluZyB0cmFja0lEKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKFNvdXJjZUJ1ZmZl
clByaXZhdGUqLCBBcHBlbmRSZXN1bHQpOworICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VCdWZmZXJQ
cml2YXRlRGlkUmVjZWl2ZVJlbmRlcmluZ0Vycm9yKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBpbnQg
ZXJyb2NDb2RlKTsKKworICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7CisKKyAgICBPd25Q
dHI8TWVkaWFQbGF5ZXI+IG1fcGxheWVyOworICAgIFRpbWVyIG1fZnJhbWVUaW1lcjsKKyAgICBi
b29sIG1fZGlkTm90aWZ5TWV0YURhdGFBdmFpbGFibGU7CisKKyAgICBSZWZQdHI8TWVkaWFTb3Vy
Y2VQcml2YXRlPiBtX21lZGlhU291cmNlUHJpdmF0ZTsKKyAgICBSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZT4gbV9zb3VyY2VCdWZmZXJQcml2YXRlOworCisgICAgc2l6ZV90IG1fbGFzdEFwcGVu
ZFBvc2l0aW9uOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaAkocmV2aXNpb24gMTc2MTk4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0Niw3
IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyU3R5bGUqIGNhY2hlZEZpcnN0TGluZVN0eWxlKCkgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbmV3SW1hZ2VBbmltYXRpb25GcmFtZUF2YWlsYWJsZShD
YWNoZWRJbWFnZSYpIGZpbmFsIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQbGF5
SW1hZ2VBbmltYXRpb24oKSBjb25zdCBmaW5hbCBvdmVycmlkZSB7IHJldHVybiAhbV9oYXNQYXVz
ZWRJbWFnZUFuaW1hdGlvbnM7IH0KIAogICAgIHVuc2lnbmVkIG1fYmFzZVR5cGVGbGFncyA6IDY7
CiAgICAgdW5zaWduZWQgbV9hbmNlc3RvckxpbmVCb3hEaXJ0eSA6IDE7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>