<?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>71761</bug_id>
          
          <creation_ts>2011-11-07 19:42:43 -0800</creation_ts>
          <short_desc>Towards 8 Bit Strings: Templatize JSC::Parser class by Lexer type</short_desc>
          <delta_ts>2011-11-08 15:04:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>71337</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497689</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-07 19:42:43 -0800</bug_when>
    <thetext>This is a follow on to https://bugs.webkit.org/show_bug.cgi?id=71331, where the Lexer was templatized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497690</commentid>
    <comment_count>1</comment_count>
      <attachid>113982</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-07 19:53:37 -0800</bug_when>
    <thetext>Created attachment 113982
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498255</commentid>
    <comment_count>2</comment_count>
      <attachid>114117</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-08 10:50:11 -0800</bug_when>
    <thetext>Created attachment 114117
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498314</commentid>
    <comment_count>3</comment_count>
      <attachid>114117</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-11-08 12:04:11 -0800</bug_when>
    <thetext>Comment on attachment 114117
Updated patch

Can you rename T to LexerType, also could you break out the Lexer&lt;UChar&gt;* to OwnPtr&lt;Lexer&lt;UChar&gt; &gt; change into a separate patch? there&apos;s a bug covering that leak that i&apos;d like to keep separate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498392</commentid>
    <comment_count>4</comment_count>
      <attachid>114142</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-08 13:21:00 -0800</bug_when>
    <thetext>Created attachment 114142
Updated Patch

Split out the memory leak fix to https://bugs.webkit.org/show_bug.cgi?id=71847 and changed the template type name to LexerType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498457</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-08 15:04:12 -0800</bug_when>
    <thetext>Committed r99618: &lt;http://trac.webkit.org/changeset/99618&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113982</attachid>
            <date>2011-11-07 19:53:37 -0800</date>
            <delta_ts>2011-11-08 10:50:11 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>71761.patch</filename>
            <type>text/plain</type>
            <size>26672</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk1MTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMTEtMTEtMDcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVG93YXJkcyA4IEJpdCBTdHJpbmdzOiBUZW1wbGF0aXplIEpTQzo6UGFyc2VyIGNsYXNzIGJ5
IExleGVyIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxNzYxCisKKyAgICAgICAgVGVtcGxhdGl6ZWQgUGFyc2VyIGJhc2VkIG9uIExleGVyPFQ+
LiBNb3ZlZCB0d28gZW51bXMsCisgICAgICAgIFNvdXJjZUVsZW1lbnRzTW9kZSBhbmQgRnVuY3Rp
b25SZXF1aXJlbWVudHMgb3V0IG9mIFBhcnNlciBkZWZpbml0aW9uCisgICAgICAgIHRvIHdvcmsg
YXJvdW5kIGEgY2xhbmcgY29tcGlsZXIgZGVmZWN0LgorCisgICAgICAgIFRvIGtlZXAgY29kZSBp
biBQYXJzZXIuY3BwIGFuZCBrZWVwIFBhcnNlci5oIHNtYWxsLCB0aGUgdHdvIGZsYXZvcnMKKyAg
ICAgICAgb2YgUGFyc2VyIGFyZSBleHBsaWNpdGx5IGluc3RhbnRpYXRlZCBhdCB0aGUgZW5kIG9m
IFBhcnNlci5jcHAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQYXJzZXIpOgorICAg
ICAgICAoSlNDOjo6On5QYXJzZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAg
ICAgICAoSlNDOjo6OmRpZEZpbmlzaFBhcnNpbmcpOgorICAgICAgICAoSlNDOjo6OmFsbG93QXV0
b21hdGljU2VtaWNvbG9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVNvdXJjZUVsZW1lbnRzKToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6Ojpw
YXJzZUNvbnN0RGVjbGFyYXRpb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlRG9XaGlsZVN0YXRl
bWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VXaGlsZVN0YXRlbWVudCk6CisgICAgICAgIChK
U0M6Ojo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQ29u
c3REZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlNDOjo6OnBhcnNlRm9yU3RhdGVtZW50KToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZUJyZWFrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6Ojpw
YXJzZUNvbnRpbnVlU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVJldHVyblN0YXRl
bWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VUaHJvd1N0YXRlbWVudCk6CisgICAgICAgIChK
U0M6Ojo6cGFyc2VXaXRoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN3aXRjaFN0
YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTd2l0Y2hDbGF1c2VzKToKKyAgICAgICAg
KEpTQzo6OjpwYXJzZVN3aXRjaERlZmF1bHRDbGF1c2UpOgorICAgICAgICAoSlNDOjo6OnBhcnNl
VHJ5U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZURlYnVnZ2VyU3RhdGVtZW50KToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZUJsb2NrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6Ojpw
YXJzZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlv
bik6CisgICAgICAgIChKU0M6Ojo6cGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6
OjpwYXJzZUlmU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUV4cHJlc3Npb24pOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOgorICAgICAgICAoSlND
Ojo6OnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6Ojppc0JpbmFy
eU9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJpbmFyeUV4cHJlc3Npb24pOgorICAg
ICAgICAoSlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlT2JqZWN0
TGl0ZXJhbCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdHJpY3RPYmplY3RMaXRlcmFsKToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZUFycmF5TGl0ZXJhbCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VQ
cmltYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Ojo6cGFyc2VBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAg
KEpTQzo6OjpwYXJzZSk6CisgICAgICAgIChKU0M6OnBhcnNlKToKKwogMjAxMS0xMS0wNyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFN3aXRjaCBiYWNrIHRvIDEr
MSB2YWx1ZSBwcm9maWxpbmcgYnVja2V0cywgc2luY2UgaXQgZGlkbid0IGhlbHAgb24gYXJld2Vm
YXN0eWV0LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2
aXNpb24gOTk1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLVBhcnNlcjo6UGFyc2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRl
cnMsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorUGFyc2VyPFQ+OjpQYXJzZXIoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVy
cyogcGFyYW1ldGVycywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9k
ZSBwYXJzZXJNb2RlKQogICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX3Nv
dXJjZSgmc291cmNlKQogICAgICwgbV9zdGFjayhnbG9iYWxEYXRhLT5zdGFjaygpKQpAQCAtNTcs
NyArNTgsNyBAQCBQYXJzZXI6OlBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsCiAgICAg
LCBtX2xhc3RJZGVudGlmaWVyKDApCiAgICAgLCBtX3NvdXJjZUVsZW1lbnRzKDApCiB7Ci0gICAg
bV9sZXhlciA9IG5ldyBMZXhlcjxVQ2hhcj4oZ2xvYmFsRGF0YSk7CisgICAgbV9sZXhlciA9IG5l
dyBUKGdsb2JhbERhdGEpOwogICAgIG1fYXJlbmEgPSBtX2dsb2JhbERhdGEtPnBhcnNlckFyZW5h
OwogICAgIG1fbGV4ZXItPnNldENvZGUoc291cmNlLCBtX2FyZW5hKTsKIApAQCAtNzUsMTIgKzc2
LDEzIEBAIFBhcnNlcjo6UGFyc2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwKICAgICBtX2xl
eGVyLT5zZXRMYXN0TGluZU51bWJlcih0b2tlbkxpbmUoKSk7CiB9CiAKLVBhcnNlcjo6flBhcnNl
cigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1BhcnNlcjxUPjo6flBhcnNlcigpCiB7CiB9CiAK
LQotVVN0cmluZyBQYXJzZXI6OnBhcnNlSW5uZXIoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitV
U3RyaW5nIFBhcnNlcjxUPjo6cGFyc2VJbm5lcigpCiB7CiAgICAgVVN0cmluZyBwYXJzZUVycm9y
ID0gVVN0cmluZygpOwogICAgIApAQCAtMTEwLDcgKzExMiw4IEBAIFVTdHJpbmcgUGFyc2VyOjpw
YXJzZUlubmVyKCkKICAgICByZXR1cm4gcGFyc2VFcnJvcjsKIH0KIAotdm9pZCBQYXJzZXI6OmRp
ZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1lbnRzLCBQYXJzZXJBcmVu
YURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFyU3RhY2ssIAordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Cit2b2lkIFBhcnNlcjxUPjo6ZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVt
ZW50cyogc291cmNlRWxlbWVudHMsIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6
VmFyU3RhY2s+KiB2YXJTdGFjaywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJz
ZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiBmdW5jU3RhY2ss
IENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IGxhc3RMaW5lLCBpbnQgbnVtQ29uc3RhbnRzLCBJ
ZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcnMpCiB7CiAgICAgbV9zb3VyY2VFbGVtZW50cyA9IHNv
dXJjZUVsZW1lbnRzOwpAQCAtMTIyLDEyICsxMjUsMTQgQEAgdm9pZCBQYXJzZXI6OmRpZEZpbmlz
aFBhcnNpbmcoU291cmNlRWxlbQogICAgIG1fbnVtQ29uc3RhbnRzID0gbnVtQ29uc3RhbnRzOwog
fQogCi1ib29sIFBhcnNlcjo6YWxsb3dBdXRvbWF0aWNTZW1pY29sb24oKQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Citib29sIFBhcnNlcjxUPjo6YWxsb3dBdXRvbWF0aWNTZW1pY29sb24oKQogewog
ICAgIHJldHVybiBtYXRjaChDTE9TRUJSQUNFKSB8fCBtYXRjaChFT0ZUT0spIHx8IG1fbGV4ZXIt
PnByZXZUZXJtaW5hdG9yKCk7CiB9CiAKLXRlbXBsYXRlIDxQYXJzZXI6OlNvdXJjZUVsZW1lbnRz
TW9kZSBtb2RlLCBjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjo6
cGFyc2VTb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgordGVtcGxhdGUgPFNvdXJjZUVsZW1lbnRzTW9kZSBtb2RlLCBjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxUPjo6cGFyc2VTb3VyY2VFbGVtZW50cyhU
cmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBUcmVlU291cmNlRWxlbWVudHMgc291cmNlRWxl
bWVudHMgPSBjb250ZXh0LmNyZWF0ZVNvdXJjZUVsZW1lbnRzKCk7CiAgICAgYm9vbCBzZWVuTm9u
RGlyZWN0aXZlID0gZmFsc2U7CkBAIC0xNjEsNyArMTY2LDggQEAgdGVtcGxhdGUgPFBhcnNlcjo6
U291cmNlRWxlbWVudHNNb2RlIG1vZAogICAgIHJldHVybiBzb3VyY2VFbGVtZW50czsKIH0KIAot
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VW
YXJEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6
cGFyc2VWYXJEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQo
bWF0Y2goVkFSKSk7CiAgICAgaW50IHN0YXJ0ID0gdG9rZW5MaW5lKCk7CkBAIC0xNzcsNyArMTgz
LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZVZhclN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCB2
YXJEZWNscywgc3RhcnQsIGVuZCk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlQ29uc3REZWNsYXJhdGlvbihUcmVlQnVpbGRlciYg
Y29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6cGFyc2VDb25zdERlY2xhcmF0aW9uKFRyZWVC
dWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChDT05TVFRPS0VOKSk7CiAgICAg
aW50IHN0YXJ0ID0gdG9rZW5MaW5lKCk7CkBAIC0xODksNyArMTk2LDggQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNv
bnN0U3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGNvbnN0RGVjbHMsIHN0YXJ0
LCBlbmQpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
UGFyc2VyOjpwYXJzZURvV2hpbGVTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWVudCBQYXJzZXI8VD46OnBhcnNlRG9XaGlsZVN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4
dCkKIHsKICAgICBBU1NFUlQobWF0Y2goRE8pKTsKICAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5M
aW5lKCk7CkBAIC0yMTAsNyArMjE4LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQobV9s
ZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgc3RhdGVtZW50LCBleHByLCBzdGFydExpbmUsIGVuZExp
bmUpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFy
c2VyOjpwYXJzZVdoaWxlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
UGFyc2VyPFQ+OjpwYXJzZVdoaWxlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewog
ICAgIEFTU0VSVChtYXRjaChXSElMRSkpOwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUo
KTsKQEAgLTIyOCw3ICsyMzcsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlV2hpbGVTdGF0ZW1lbnQobV9sZXhlci0+
bGFzdExpbmVOdW1iZXIoKSwgZXhwciwgc3RhdGVtZW50LCBzdGFydExpbmUsIGVuZExpbmUpOwog
fQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6
cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGludCYgZGVjbGFy
YXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFz
dEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGluaXRF
bmQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3Npb24gUGFyc2VyPFQ+OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVp
bGRlciYgY29udGV4dCwgaW50JiBkZWNsYXJhdGlvbnMsIGNvbnN0IElkZW50aWZpZXIqJiBsYXN0
SWRlbnQsIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIGludCYgaWRlbnRTdGFydCwg
aW50JiBpbml0U3RhcnQsIGludCYgaW5pdEVuZCkKIHsKICAgICBUcmVlRXhwcmVzc2lvbiB2YXJE
ZWNscyA9IDA7CiAgICAgZG8gewpAQCAtMjY0LDcgKzI3NCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICByZXR1cm4gdmFyRGVjbHM7CiB9CiAKLXRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNvbnN0RGVjbExpc3QgUGFyc2VyOjpwYXJzZUNv
bnN0RGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDb25zdERlY2xMaXN0IFBh
cnNlcjxUPjo6cGFyc2VDb25zdERlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYgY29udGV4dCkK
IHsKICAgICBmYWlsSWZUcnVlKHN0cmljdE1vZGUoKSk7CiAgICAgVHJlZUNvbnN0RGVjbExpc3Qg
Y29uc3REZWNscyA9IDA7CkBAIC0yODksNyArMzAwLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlQ29uc3REZQogICAgIHJldHVybiBjb25zdERlY2xzOwogfQogCi10ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUZvclN0YXRl
bWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6cGFyc2VGb3JT
dGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKEZPUikp
OwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKQEAgLTM5Nyw3ICs0MDksOCBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlRm9ySW5Mb29wKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGRlY2xzLCBleHBy
LCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQsIGRlY2xzRW5kLCBleHByRW5kLCBzdGFydExpbmUsIGVu
ZExpbmUpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
UGFyc2VyOjpwYXJzZUJyZWFrU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
bnQgUGFyc2VyPFQ+OjpwYXJzZUJyZWFrU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQog
ewogICAgIEFTU0VSVChtYXRjaChCUkVBSykpOwogICAgIGludCBzdGFydENvbCA9IHRva2VuU3Rh
cnQoKTsKQEAgLTQyMCw3ICs0MzMsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobV9sZXhl
ci0+bGFzdExpbmVOdW1iZXIoKSwgaWRlbnQsIHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwg
ZW5kTGluZSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVu
dCBQYXJzZXI6OnBhcnNlQ29udGludWVTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlQ29udGludWVTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKENPTlRJTlVFKSk7CiAgICAgaW50IHN0YXJ0Q29s
ID0gdG9rZW5TdGFydCgpOwpAQCAtNDQ1LDcgKzQ1OSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250aW51ZVN0
YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBpZGVudCwgc3RhcnRDb2wsIGVuZENv
bCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQoVHJlZUJ1aWxkZXIm
IGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlUmV0dXJuU3RhdGVtZW50KFRyZWVC
dWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChSRVRVUk4pKTsKICAgICBmYWls
SWZGYWxzZShjdXJyZW50U2NvcGUoKS0+aXNGdW5jdGlvbigpKTsKQEAgLTQ3MCw3ICs0ODUsOCBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4
cHIsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlVGhyb3dTdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlVGhyb3dTdGF0
ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKFRIUk9XKSk7
CiAgICAgaW50IGVTdGFydCA9IHRva2VuU3RhcnQoKTsKQEAgLTQ4OCw3ICs1MDQsOCBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlVGhyb3dTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwciwgZVN0
YXJ0LCBlRW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVdpdGhTdGF0ZW1lbnQoVHJlZUJ1
aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlV2l0aFN0YXRlbWVudChU
cmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0Y2goV0lUSCkpOwogICAgIGZh
aWxJZlRydWVXaXRoTWVzc2FnZShzdHJpY3RNb2RlKCksICInd2l0aCcgc3RhdGVtZW50cyBhcmUg
bm90IHZhbGlkIGluIHN0cmljdCBtb2RlIik7CkBAIC01MTAsNyArNTI3LDggQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZVdpdGhTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwciwgc3RhdGVtZW50
LCBzdGFydCwgZW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudChU
cmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6cGFyc2VTd2l0Y2hTdGF0
ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKFNXSVRDSCkp
OwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKQEAgLTUzNyw3ICs1NTUsOCBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgCiB9CiAKLXRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVzZUxpc3QgUGFyc2VyOjpwYXJzZVN3aXRj
aENsYXVzZXMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3Rl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVzZUxpc3QgUGFyc2VyPFQ+OjpwYXJz
ZVN3aXRjaENsYXVzZXMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgaWYgKCFtYXRjaChD
QVNFKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC01NjQsNyArNTgzLDggQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhdXNlTAogICAgIHJldHVybiBjbGF1c2VMaXN0OwogfQog
Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2UgUGFyc2VyOjpwYXJzZVN3
aXRjaERlZmF1bHRDbGF1c2UoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVzZSBQYXJzZXI8VD46
OnBhcnNlU3dpdGNoRGVmYXVsdENsYXVzZShUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBp
ZiAoIW1hdGNoKERFRkFVTFQpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTU3NSw3ICs1OTUsOCBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2UgCiAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlQ2xhdXNlKDAsIHN0YXRlbWVudHMpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVRyeVN0YXRlbWVudChUcmVl
QnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6cGFyc2VUcnlTdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKFRSWSkpOwogICAgIFRy
ZWVTdGF0ZW1lbnQgdHJ5QmxvY2sgPSAwOwpAQCAtNjIwLDcgKzY0MSw4IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVU
cnlTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgdHJ5QmxvY2ssIGlkZW50LCBj
YXRjaEhhc0V2YWwsIGNhdGNoQmxvY2ssIGZpbmFsbHlCbG9jaywgZmlyc3RMaW5lLCBsYXN0TGlu
ZSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJz
ZXI6OnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVu
dCBQYXJzZXI8VD46OnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQp
CiB7CiAgICAgQVNTRVJUKG1hdGNoKERFQlVHR0VSKSk7CiAgICAgaW50IHN0YXJ0TGluZSA9IHRv
a2VuTGluZSgpOwpAQCAtNjMyLDcgKzY1NCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVEZWJ1Z2dlcihtX2xleGVy
LT5sYXN0TGluZU51bWJlcigpLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCi10ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUJsb2NrU3RhdGVt
ZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPFQ+OjpwYXJzZUJsb2Nr
U3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChPUEVO
QlJBQ0UpKTsKICAgICBpbnQgc3RhcnQgPSB0b2tlbkxpbmUoKTsKQEAgLTY0OCw3ICs2NzEsOCBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlQmxvY2tTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgc3Vi
dHJlZSwgc3RhcnQsIG1fbGFzdExpbmUpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVN0YXRlbWVudChUcmVlQnVpbGRlciYgY29u
dGV4dCwgY29uc3QgSWRlbnRpZmllciomIGRpcmVjdGl2ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6
cGFyc2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElkZW50aWZpZXIqJiBk
aXJlY3RpdmUpCiB7CiAgICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVu
dERlcHRoKTsKICAgICBtX3N0YXRlbWVudERlcHRoKys7CkBAIC03MTEsNyArNzM1LDggQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIH0KIH0KIAotdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBQYXJzZXI6OnBh
cnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRm9ybWFsUGFyYW1ldGVy
TGlzdCBQYXJzZXI8VD46OnBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4
dCkKIHsKICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdp
dGhOYW1lQW5kTWVzc2FnZShkZWNsYXJlUGFyYW1ldGVyKG1fdG9rZW4ubV9kYXRhLmlkZW50KSwg
IkNhbm5vdCBkZWNsYXJlIGEgcGFyYW1ldGVyIG5hbWVkIiwgbV90b2tlbi5tX2RhdGEuaWRlbnQt
PmltcGwoKSwgIiBpbiBzdHJpY3QgbW9kZSIpOwpAQCAtNzI5LDcgKzc1NCw4IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZvcm1hbFAKICAgICByZXR1cm4gbGlzdDsKIH0KIAot
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjo6cGFy
c2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8
VD46OnBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGlmICht
YXRjaChDTE9TRUJSQUNFKSkKICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25C
b2R5KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHN0cmljdE1vZGUoKSk7CkBAIC03NDAsNyAr
NzY2LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3RpbwogICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShtX2xleGVyLT5sYXN0TGluZU51bWJlcigp
LCBzdHJpY3RNb2RlKCkpOwogfQogCi10ZW1wbGF0ZSA8UGFyc2VyOjpGdW5jdGlvblJlcXVpcmVt
ZW50cyByZXF1aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzIFRy
ZWVCdWlsZGVyPiBib29sIFBhcnNlcjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNv
bnRleHQsIGNvbnN0IElkZW50aWZpZXIqJiBuYW1lLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYg
cGFyYW1ldGVycywgVHJlZUZ1bmN0aW9uQm9keSYgYm9keSwgaW50JiBvcGVuQnJhY2VQb3MsIGlu
dCYgY2xvc2VCcmFjZVBvcywgaW50JiBib2R5U3RhcnRMaW5lKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Cit0ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBib29sIG5h
bWVJc0luQ29udGFpbmluZ1Njb3BlLCBjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8VD46
OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVy
KiYgbmFtZSwgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsIFRyZWVGdW5jdGlv
bkJvZHkmIGJvZHksIGludCYgb3BlbkJyYWNlUG9zLCBpbnQmIGNsb3NlQnJhY2VQb3MsIGludCYg
Ym9keVN0YXJ0TGluZSkKIHsKICAgICBBdXRvUG9wU2NvcGVSZWYgZnVuY3Rpb25TY29wZSh0aGlz
LCBwdXNoU2NvcGUoKSk7CiAgICAgZnVuY3Rpb25TY29wZS0+c2V0SXNGdW5jdGlvbigpOwpAQCAt
ODEzLDcgKzg0MCw4IEBAIHRlbXBsYXRlIDxQYXJzZXI6OkZ1bmN0aW9uUmVxdWlyZW1lbnRzIHIK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZW50IFBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJiBj
b250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPFQ+OjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oVHJl
ZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKEZVTkNUSU9OKSk7CiAgICAg
bmV4dCgpOwpAQCAtODQyLDcgKzg3MCw4IEBAIHN0cnVjdCBMYWJlbEluZm8gewogICAgIGludCBt
X2VuZDsKIH07CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQ
YXJzZXI6OnBhcnNlRXhwcmVzc2lvbk9yTGFiZWxTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRl
eHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlRXhwcmVzc2lvbk9yTGFiZWxTdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgCiAgICAgLyogRXhwcmVzc2lvbiBhbmQgTGFi
ZWwgc3RhdGVtZW50cyBhcmUgYW1iaWd1b3VzIGF0IExMKDEpLCBzbyB3ZSBoYXZlIGEKQEAgLTkw
NCw3ICs5MzMsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAg
ICAgcmV0dXJuIHN0YXRlbWVudDsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KFRyZWVCdWlsZGVy
JiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPFQ+OjpwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgp
OwogICAgIFRyZWVFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4
dCk7CkBAIC05MTMsNyArOTQzLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUV4cHJTdGF0ZW1lbnQobV9sZXhlci0+
bGFzdExpbmVOdW1iZXIoKSwgZXhwcmVzc2lvbiwgc3RhcnRMaW5lLCBtX2xhc3RMaW5lKTsKIH0K
IAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFy
c2VJZlN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6
cGFyc2VJZlN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0
Y2goSUYpKTsKICAgICAKQEAgLTk5MCw3ICsxMDIxLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUlmU3RhdGVtZW50
KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBzdGF0ZW1l
bnRTdGFjay5sYXN0KCksIHN0YXJ0LCBlbmQpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VFeHByZXNzaW9uKFRyZWVCdWlsZGVy
JiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxUPjo6cGFyc2VFeHByZXNzaW9uKFRyZWVCdWls
ZGVyJiBjb250ZXh0KQogewogICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKICAgICBUcmVlRXhw
cmVzc2lvbiBub2RlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKQEAgLTEw
MTIsOCArMTA0NCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MK
ICAgICByZXR1cm4gY29tbWFOb2RlOwogfQogCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRy
ZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxUPjo6cGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBmYWlsSWZTdGFja092
ZXJmbG93KCk7CiAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwpAQCAtMTA3NCw3ICsxMTA2
LDggQEAgZW5kOgogICAgIHJldHVybiBsaHM7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihU
cmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8VD46OnBhcnNlQ29uZGl0aW9u
YWxFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIFRyZWVFeHByZXNzaW9u
IGNvbmQgPSBwYXJzZUJpbmFyeUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgZmFpbElmRmFsc2Uo
Y29uZCk7CkBAIC0xMDk2LDE0ICsxMTI5LDE2IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wg
aXNVbmFyeU9wKEpTVG8KICAgICByZXR1cm4gdG9rZW4gJiBVbmFyeU9wVG9rZW5GbGFnOwogfQog
Ci1pbnQgUGFyc2VyOjppc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5UeXBlIHRva2VuKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitpbnQgUGFyc2VyPFQ+Ojppc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5U
eXBlIHRva2VuKQogewogICAgIGlmIChtX2FsbG93c0luKQogICAgICAgICByZXR1cm4gdG9rZW4g
JiAoQmluYXJ5T3BUb2tlblByZWNlZGVuY2VNYXNrIDw8IEJpbmFyeU9wVG9rZW5BbGxvd3NJblBy
ZWNlZGVuY2VBZGRpdGlvbmFsU2hpZnQpOwogICAgIHJldHVybiB0b2tlbiAmIEJpbmFyeU9wVG9r
ZW5QcmVjZWRlbmNlTWFzazsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlQmluYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29u
dGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8VD46OnBhcnNlQmluYXJ5RXhwcmVzc2lvbihUcmVlQnVp
bGRlciYgY29udGV4dCkKIHsKICAgICAKICAgICBpbnQgb3BlcmFuZFN0YWNrRGVwdGggPSAwOwpA
QCAtMTE0Nyw4ICsxMTgyLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzcwogICAgIHJldHVybiBjb250ZXh0LnBvcE9wZXJhbmRTdGFjayhvcGVyYW5kU3RhY2tEZXB0
aCk7CiB9CiAKLQotdGVtcGxhdGUgPGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlUHJvcGVydHkgUGFyc2VyOjpwYXJzZVByb3BlcnR5KFRyZWVCdWlsZGVyJiBjb250ZXh0KQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI8VD46OnBhcnNlUHJvcGVydHkoVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCiB7CiAgICAgYm9vbCB3YXNJZGVudCA9IGZhbHNlOwogICAgIHN3aXRjaCAo
bV90b2tlbi5tX3R5cGUpIHsKQEAgLTEyMDAsNyArMTIzNSw4IEBAIHRlbXBsYXRlIDxib29sIGNv
bXBsZXRlLCBjbGFzcyBUcmVlQnVpbGQKICAgICB9CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZU9iamVjdExpdGVyYWwoVHJlZUJ1
aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPFQ+OjpwYXJzZU9iamVjdExpdGVyYWwo
VHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbV90b2tlbi5t
X2RhdGEuaW50VmFsdWU7CiAgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0UsIFRy
ZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsKQEAgLTEyMzksNyArMTI3NSw4IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVPYmplY3RMaXRlcmFsKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHByb3BlcnR5TGlz
dCk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFy
c2VyOjpwYXJzZVN0cmljdE9iamVjdExpdGVyYWwoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3Npb24gUGFyc2VyPFQ+OjpwYXJzZVN0cmljdE9iamVjdExpdGVyYWwoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCiB7CiAgICAgY29uc3VtZU9yRmFpbChPUEVOQlJBQ0UpOwogICAgIApAQCAtMTI4Myw3
ICsxMzIwLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZU9iamVjdExpdGVyYWwobV9sZXhlci0+bGFzdExpbmVOdW1i
ZXIoKSwgcHJvcGVydHlMaXN0KTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlQXJyYXlMaXRlcmFsKFRyZWVCdWlsZGVyJiBjb250
ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxUPjo6cGFyc2VBcnJheUxpdGVyYWwoVHJlZUJ1aWxkZXIm
IGNvbnRleHQpCiB7CiAgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0tFVCwgVHJl
ZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAgIApAQCAtMTMyNSw3ICsxMzYzLDggQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUFycmF5KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGVsZW1lbnRMaXN0KTsK
IH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6
OnBhcnNlUHJpbWFyeUV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24g
UGFyc2VyPFQ+OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQog
ewogICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBl
KSB7CkBAIC0xNDAzLDcgKzE0NDIsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByZXNzCiAgICAgfQogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVB
cmd1bWVudHMgUGFyc2VyOjpwYXJzZUFyZ3VtZW50cyhUcmVlQnVpbGRlciYgY29udGV4dCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQXJn
dW1lbnRzIFBhcnNlcjxUPjo6cGFyc2VBcmd1bWVudHMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7
CiAgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOUEFSRU4sIFRyZWVCdWlsZGVyOjpEb250
QnVpbGRTdHJpbmdzKTsKICAgICBpZiAobWF0Y2goQ0xPU0VQQVJFTikpIHsKQEAgLTE0MjUsNyAr
MTQ2NSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUFyZ3VtZW4KICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVBcmd1bWVudHMoYXJnTGlzdCk7CiB9CiAKLXRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZU1lbWJlckV4cHJl
c3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPFQ+OjpwYXJzZU1l
bWJlckV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgVHJlZUV4cHJlc3Np
b24gYmFzZSA9IDA7CiAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwpAQCAtMTUwNSw3ICsx
NTQ2LDggQEAgZW5kTWVtYmVyRXhwcmVzc2lvbjoKICAgICByZXR1cm4gYmFzZTsKIH0KIAotdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlVW5h
cnlFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxUPjo6
cGFyc2VVbmFyeUV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgdHlwZW5h
bWUgVHJlZUJ1aWxkZXI6OlVuYXJ5RXhwckNvbnRleHQgdW5hcnlFeHByQ29udGV4dChjb250ZXh0
KTsKICAgICBBbGxvd0luT3ZlcnJpZGUgYWxsb3dJbk92ZXJyaWRlKHRoaXMpOwpAQCAtMTYxOCw0
ICsxNjYwLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAg
IHJldHVybiBleHByOwogfQogCisvLyBJbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgUGFy
c2VyIHdlIG5lZWQgaW5zdGVhZCBvZiBwdXR0aW5nIG1vc3Qgb2YgdGhpcyBmaWxlIGluIFBhcnNl
ci5oCit0ZW1wbGF0ZSBjbGFzcyBQYXJzZXI8IExleGVyPExDaGFyPiA+OwordGVtcGxhdGUgY2xh
c3MgUGFyc2VyPCBMZXhlcjxVQ2hhcj4gPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDk5NTA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNiBAQCBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOwogY2xhc3MgRnVuY3Rpb25QYXJhbWV0
ZXJzOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpTR2xvYmFsRGF0YTsKLWNsYXNzIFBhcnNl
cjsKIGNsYXNzIFByb2dyYW1Ob2RlOwogY2xhc3MgU291cmNlQ29kZTsKIGNsYXNzIFVTdHJpbmc7
CkBAIC04Nyw2ICs4Niw5IEBAIGNsYXNzIFVTdHJpbmc7CiAKIENPTVBJTEVfQVNTRVJUKExhc3RV
bnRhZ2dlZFRva2VuIDwgNjQsIExlc3NUaGFuNjRVbnRhZ2dlZFRva2Vucyk7CiAKK2VudW0gU291
cmNlRWxlbWVudHNNb2RlIHsgQ2hlY2tGb3JTdHJpY3RNb2RlLCBEb250Q2hlY2tGb3JTdHJpY3RN
b2RlIH07CitlbnVtIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHsgRnVuY3Rpb25Ob1JlcXVpcmVtZW50
cywgRnVuY3Rpb25OZWVkc05hbWUgfTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBi
b29sIGlzRXZhbE5vZGUoKSB7IHJldHVybiBmYWxzZTsgfQogdGVtcGxhdGUgPD4gaW5saW5lIGJv
b2wgaXNFdmFsTm9kZTxFdmFsTm9kZT4oKSB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTM2Niw3ICsz
NjgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiB9OwogCi0KK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgogY2xhc3MgUGFyc2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQ
YXJzZXIpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtODU0LDcgKzg1Niw2IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIGVudW0g
U291cmNlRWxlbWVudHNNb2RlIHsgQ2hlY2tGb3JTdHJpY3RNb2RlLCBEb250Q2hlY2tGb3JTdHJp
Y3RNb2RlIH07CiAgICAgdGVtcGxhdGUgPFNvdXJjZUVsZW1lbnRzTW9kZSBtb2RlLCBjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNlU291cmNlRWxlbWVudHMoVHJlZUJ1
aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
cGFyc2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImLCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZl
KTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJik7CkBAIC04OTMsNyArODk0LDYgQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJl
ZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJik7
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHBy
ZXNzaW9uIHBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiwgaW50JiBkZWNsYXJh
dGlvbnMsIGNvbnN0IElkZW50aWZpZXIqJiBsYXN0SWRlbnQsIFRyZWVFeHByZXNzaW9uJiBsYXN0
SW5pdGlhbGl6ZXIsIGludCYgaWRlbnRTdGFydCwgaW50JiBpbml0U3RhcnQsIGludCYgaW5pdEVu
ZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVD
b25zdERlY2xMaXN0IHBhcnNlQ29uc3REZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRl
eHQpOwotICAgIGVudW0gRnVuY3Rpb25SZXF1aXJlbWVudHMgeyBGdW5jdGlvbk5vUmVxdWlyZW1l
bnRzLCBGdW5jdGlvbk5lZWRzTmFtZSB9OwogICAgIHRlbXBsYXRlIDxGdW5jdGlvblJlcXVpcmVt
ZW50cywgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IGJv
b2wgcGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImLCBjb25zdCBJZGVudGlmaWVyKiYsIFRy
ZWVGb3JtYWxQYXJhbWV0ZXJMaXN0JiwgVHJlZUZ1bmN0aW9uQm9keSYsIGludCYgb3BlbkJyYWNl
LCBpbnQmIGNsb3NlQnJhY2UsIGludCYgYm9keVN0YXJ0TGluZSk7CiAgICAgQUxXQVlTX0lOTElO
RSBpbnQgaXNCaW5hcnlPcGVyYXRvcihKU1Rva2VuVHlwZSk7CiAgICAgYm9vbCBhbGxvd0F1dG9t
YXRpY1NlbWljb2xvbigpOwpAQCAtOTIwLDcgKzkyMCw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBjb25zdCBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICBjb25zdCBTb3VyY2VDb2Rl
KiBtX3NvdXJjZTsKICAgICBQYXJzZXJBcmVuYSogbV9hcmVuYTsKLSAgICBMZXhlcjxVQ2hhcj4q
IG1fbGV4ZXI7CisgICAgVCogbV9sZXhlcjsKICAgICAKICAgICBTdGFja0JvdW5kcyBtX3N0YWNr
OwogICAgIGJvb2wgbV9lcnJvcjsKQEAgLTk2MSw4ICs5NjEsOSBAQCBwcml2YXRlOgogICAgIH07
CiB9OwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2Rl
PgotUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI6OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZGVidWdn
ZXJFeGVjU3RhdGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQorUGFzc1JlZlB0cjxQYXJzZWROb2Rl
PiBQYXJzZXI8VD46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBE
ZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZGVidWdnZXJFeGVjU3RhdGUsIEpTT2JqZWN0
KiogZXhjZXB0aW9uKQogewogICAgIEFTU0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uICYmICEqZXhjZXB0aW9uKTsKQEAgLTEwMzAsOSArMTAzMSwxNSBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2Uo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2Vy
TW9kZSwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVjU3RhdGUqIGV4ZWNTdGF0ZSwgSlNPYmplY3Qq
KiBleGNlcHRpb24pCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIlBhcnNp
bmciKTsKLSAgICBQYXJzZXIgcGFyc2VyKGdsb2JhbERhdGEsIHNvdXJjZSwgcGFyYW1ldGVycywg
c3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7CisKKyAgICBpZiAoc291cmNlLnByb3ZpZGVyKCktPnN0
cmluZ0RhdGEoKS0+aXM4Qml0KCkpIHsKKyAgICAgICAgUGFyc2VyPCBMZXhlcjxMQ2hhcj4gPiBw
YXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBzdHJpY3RuZXNzLCBwYXJzZXJN
b2RlKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBkZWJ1Z2dlciwgZXhlY1N0YXRlLCBleGNlcHRpb24pOworICAgIH0KKyAgICBQ
YXJzZXI8IExleGVyPFVDaGFyPiA+IHBhcnNlcihnbG9iYWxEYXRhLCBzb3VyY2UsIHBhcmFtZXRl
cnMsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwogICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFy
c2VkTm9kZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgZGVidWdnZXIsIGV4ZWNTdGF0ZSwgZXhjZXB0
aW9uKTsKIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBQYXJzZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114117</attachid>
            <date>2011-11-08 10:50:11 -0800</date>
            <delta_ts>2011-11-08 13:21:00 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>71761-3.patch</filename>
            <type>text/plain</type>
            <size>38458</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk1NzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAK
KzIwMTEtMTEtMDggIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVG93YXJkcyA4IEJpdCBTdHJpbmdzOiBUZW1wbGF0aXplIEpTQzo6UGFyc2VyIGNsYXNzIGJ5
IExleGVyIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxNzYxCisKKyAgICAgICAgVGVtcGxhdGl6ZWQgUGFyc2VyIGJhc2VkIG9uIExleGVyPFQ+
LiBNb3ZlZCB0d28gZW51bXMsCisgICAgICAgIFNvdXJjZUVsZW1lbnRzTW9kZSBhbmQgRnVuY3Rp
b25SZXF1aXJlbWVudHMgb3V0IG9mIFBhcnNlciBkZWZpbml0aW9uCisgICAgICAgIHRvIHdvcmsg
YXJvdW5kIGEgY2xhbmcgY29tcGlsZXIgZGVmZWN0LgorCisgICAgICAgIENoYW5nZWQgbV9sZXhl
ciBtZW1iZXIgb2YgUGFyc2VyIHRvIGJlIE93blB0ciB0byBmaXggYSBtZW1vcnkgbGVhay4KKwor
ICAgICAgICBDbGVhbmVkIHVwIFNvdXJjZUNvZGUgZGF0YSgpIHRvIHJldHVybiBTdHJpbmdJbXBs
KiBhbmQgZWxpbWluYXRlZAorICAgICAgICB0aGUgcmVjZW50bHkgYWRkZWQgc3RyaW5nRGF0YSgp
IHZpcnR1YWwgbWV0aG9kLgorCisgICAgICAgIFRvIGtlZXAgY29kZSBpbiBQYXJzZXIuY3BwIGFu
ZCBrZWVwIFBhcnNlci5oIHNtYWxsLCB0aGUgdHdvIGZsYXZvcnMKKyAgICAgICAgb2YgUGFyc2Vy
IGFyZSBleHBsaWNpdGx5IGluc3RhbnRpYXRlZCBhdCB0aGUgZW5kIG9mIFBhcnNlci5jcHAuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmFwcGVuZFNvdXJjZVRvRXJyb3Ip
OgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6Ojo6c2V0Q29kZSk6
CisgICAgICAgIChKU0M6Ojo6c291cmNlQ29kZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5j
cHA6CisgICAgICAgIChKU0M6Ojo6UGFyc2VyKToKKyAgICAgICAgKEpTQzo6Ojp+UGFyc2VyKToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZUlubmVyKToKKyAgICAgICAgKEpTQzo6OjpkaWRGaW5pc2hQ
YXJzaW5nKToKKyAgICAgICAgKEpTQzo6OjphbGxvd0F1dG9tYXRpY1NlbWljb2xvbik6CisgICAg
ICAgIChKU0M6Ojo6cGFyc2VTb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VW
YXJEZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6Ojo6cGFyc2VDb25zdERlY2xhcmF0aW9uKToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZURvV2hpbGVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlV2hpbGVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVmFyRGVjbGFyYXRp
b25MaXN0KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZUZvclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VC
cmVha1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VDb250aW51ZVN0YXRlbWVudCk6
CisgICAgICAgIChKU0M6Ojo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlVGhyb3dTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlV2l0aFN0YXRlbWVu
dCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTd2l0Y2hTdGF0ZW1lbnQpOgorICAgICAgICAoSlND
Ojo6OnBhcnNlU3dpdGNoQ2xhdXNlcyk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTd2l0Y2hEZWZh
dWx0Q2xhdXNlKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVRyeVN0YXRlbWVudCk6CisgICAgICAg
IChKU0M6Ojo6cGFyc2VEZWJ1Z2dlclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VC
bG9ja1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlRm9ybWFsUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VG
dW5jdGlvbkJvZHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlRnVuY3Rpb25JbmZvKToKKyAgICAg
ICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24pOgorICAgICAgICAoSlNDOjo6OnBh
cnNlRXhwcmVzc2lvbk9yTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlRXhw
cmVzc2lvblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VJZlN0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUNvbmRpdGlvbmFsRXhw
cmVzc2lvbik6CisgICAgICAgIChKU0M6Ojo6aXNCaW5hcnlPcGVyYXRvcik6CisgICAgICAgIChK
U0M6Ojo6cGFyc2VCaW5hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU9iamVjdExpdGVyYWwpOgorICAgICAgICAoSlND
Ojo6OnBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VBcnJh
eUxpdGVyYWwpOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOgorICAg
ICAgICAoSlNDOjo6OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU1lbWJl
ckV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlVW5hcnlFeHByZXNzaW9uKToKKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6Ojo6cGFyc2UpOgorICAgICAg
ICAoSlNDOjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAg
KEpTQzo6U291cmNlQ29kZTo6ZGF0YSk6CisgICAgICAgIChKU0M6OlNvdXJjZUNvZGU6OnN1YkV4
cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oOgorICAgICAgICAo
SlNDOjpVU3RyaW5nU291cmNlUHJvdmlkZXI6OmRhdGEpOgorCiAyMDExLTExLTA4ICBZdXFpYW5n
IFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgogCiAgICAgICAgIEVuYWJsZSBERkcgSklU
IGJ5IGRlZmF1bHQgb24gWDg2IExpbnV4IGFuZCBNYWMgcGxhdGZvcm1zCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlz
aW9uIDk5NTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY3LDE5ICs2NjcsMTkgQEAgc3RhdGljIHZvaWQg
YXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbQogICAgICAgICBtZXNzYWdlID0gIG1ha2VVU3Ry
aW5nKG1lc3NhZ2UsICIgKGV2YWx1YXRpbmcgJyIsIGNvZGVCbG9jay0+c291cmNlKCktPmdldFJh
bmdlKGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvblN0b3ApLCAiJykiKTsKICAgICBlbHNlIHsK
ICAgICAgICAgLy8gTm8gcmFuZ2UgaW5mb3JtYXRpb24sIHNvIGdpdmUgYSBmZXcgY2hhcmFjdGVy
cyBvZiBjb250ZXh0Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gY29kZUJsb2NrLT5zb3Vy
Y2UoKS0+ZGF0YSgpOworICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBkYXRhID0gY29kZUJsb2Nr
LT5zb3VyY2UoKS0+ZGF0YSgpOwogICAgICAgICBpbnQgZGF0YUxlbmd0aCA9IGNvZGVCbG9jay0+
c291cmNlKCktPmxlbmd0aCgpOwogICAgICAgICBpbnQgc3RhcnQgPSBleHByZXNzaW9uU3RhcnQ7
CiAgICAgICAgIGludCBzdG9wID0gZXhwcmVzc2lvblN0YXJ0OwogICAgICAgICAvLyBHZXQgdXAg
dG8gMjAgY2hhcmFjdGVycyBvZiBjb250ZXh0IHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUg
ZGl2b3QsIGNsYW1waW5nIHRvIHRoZSBsaW5lLgogICAgICAgICAvLyB0aGVuIHN0cmlwIHdoaXRl
c3BhY2UuCi0gICAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgKGV4cHJlc3Npb25TdGFydCAtIHN0
YXJ0IDwgMjApICYmIGRhdGFbc3RhcnQgLSAxXSAhPSAnXG4nKQorICAgICAgICB3aGlsZSAoc3Rh
cnQgPiAwICYmIChleHByZXNzaW9uU3RhcnQgLSBzdGFydCA8IDIwKSAmJiAoKmRhdGEpW3N0YXJ0
IC0gMV0gIT0gJ1xuJykKICAgICAgICAgICAgIHN0YXJ0LS07Ci0gICAgICAgIHdoaWxlIChzdGFy
dCA8IChleHByZXNzaW9uU3RhcnQgLSAxKSAmJiBpc1N0cldoaXRlU3BhY2UoZGF0YVtzdGFydF0p
KQorICAgICAgICB3aGlsZSAoc3RhcnQgPCAoZXhwcmVzc2lvblN0YXJ0IC0gMSkgJiYgaXNTdHJX
aGl0ZVNwYWNlKCgqZGF0YSlbc3RhcnRdKSkKICAgICAgICAgICAgIHN0YXJ0Kys7Ci0gICAgICAg
IHdoaWxlIChzdG9wIDwgZGF0YUxlbmd0aCAmJiAoc3RvcCAtIGV4cHJlc3Npb25TdGFydCA8IDIw
KSAmJiBkYXRhW3N0b3BdICE9ICdcbicpCisgICAgICAgIHdoaWxlIChzdG9wIDwgZGF0YUxlbmd0
aCAmJiAoc3RvcCAtIGV4cHJlc3Npb25TdGFydCA8IDIwKSAmJiAoKmRhdGEpW3N0b3BdICE9ICdc
bicpCiAgICAgICAgICAgICBzdG9wKys7Ci0gICAgICAgIHdoaWxlIChzdG9wID4gZXhwcmVzc2lv
blN0YXJ0ICYmIGlzU3RyV2hpdGVTcGFjZShkYXRhW3N0b3AgLSAxXSkpCisgICAgICAgIHdoaWxl
IChzdG9wID4gZXhwcmVzc2lvblN0YXJ0ICYmIGlzU3RyV2hpdGVTcGFjZSgoKmRhdGEpW3N0b3Ag
LSAxXSkpCiAgICAgICAgICAgICBzdG9wLS07CiAgICAgICAgIG1lc3NhZ2UgPSBtYWtlVVN0cmlu
ZyhtZXNzYWdlLCAiIChuZWFyICcuLi4iLCBjb2RlQmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShz
dGFydCwgc3RvcCksICIuLi4nKSIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiA5OTUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNyArMjc3LDcgQEAgdm9p
ZCBMZXhlcjxUPjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJgogICAgIG1fZGVsaW1pdGVkID0g
ZmFsc2U7CiAgICAgbV9sYXN0VG9rZW4gPSAtMTsKICAgICAKLSAgICBjb25zdCBTdHJpbmdJbXBs
KiBzb3VyY2VTdHJpbmcgPSBzb3VyY2UucHJvdmlkZXIoKS0+c3RyaW5nRGF0YSgpOworICAgIGNv
bnN0IFN0cmluZ0ltcGwqIHNvdXJjZVN0cmluZyA9IHNvdXJjZS5wcm92aWRlcigpLT5kYXRhKCk7
CiAKICAgICBpZiAoc291cmNlU3RyaW5nKQogICAgICAgICBzZXRDb2RlU3RhcnQoc291cmNlU3Ry
aW5nKTsKQEAgLTE1MzksOCArMTUzOSw4IEBAIHZvaWQgTGV4ZXI8VD46OmNsZWFyKCkKIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgogU291cmNlQ29kZSBMZXhlcjxUPjo6c291cmNlQ29kZShpbnQgb3Bl
bkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKIHsKLSAgICBBU1NFUlQobV9z
b3VyY2UtPnByb3ZpZGVyKCktPmRhdGEoKVtvcGVuQnJhY2VdID09ICd7Jyk7Ci0gICAgQVNTRVJU
KG1fc291cmNlLT5wcm92aWRlcigpLT5kYXRhKClbY2xvc2VCcmFjZV0gPT0gJ30nKTsKKyAgICBB
U1NFUlQoKCptX3NvdXJjZS0+cHJvdmlkZXIoKS0+ZGF0YSgpKVtvcGVuQnJhY2VdID09ICd7Jyk7
CisgICAgQVNTRVJUKCgqbV9zb3VyY2UtPnByb3ZpZGVyKCktPmRhdGEoKSlbY2xvc2VCcmFjZV0g
PT0gJ30nKTsKICAgICByZXR1cm4gU291cmNlQ29kZShtX3NvdXJjZS0+cHJvdmlkZXIoKSwgb3Bl
bkJyYWNlLCBjbG9zZUJyYWNlICsgMSwgZmlyc3RMaW5lKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gOTk1MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVBhcnNl
cjo6UGFyc2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIEpTUGFyc2VyU3RyaWN0bmVzcyBz
dHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorUGFyc2VyPFQ+OjpQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgSlNQYXJzZXJT
dHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQogICAgIDogbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX3NvdXJjZSgmc291cmNlKQogICAgICwgbV9z
dGFjayhnbG9iYWxEYXRhLT5zdGFjaygpKQpAQCAtNTcsNyArNTgsNyBAQCBQYXJzZXI6OlBhcnNl
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsCiAgICAgLCBtX2xhc3RJZGVudGlmaWVyKDApCiAg
ICAgLCBtX3NvdXJjZUVsZW1lbnRzKDApCiB7Ci0gICAgbV9sZXhlciA9IG5ldyBMZXhlcjxVQ2hh
cj4oZ2xvYmFsRGF0YSk7CisgICAgbV9sZXhlciA9IGFkb3B0UHRyKG5ldyBUKGdsb2JhbERhdGEp
KTsKICAgICBtX2FyZW5hID0gbV9nbG9iYWxEYXRhLT5wYXJzZXJBcmVuYTsKICAgICBtX2xleGVy
LT5zZXRDb2RlKHNvdXJjZSwgbV9hcmVuYSk7CiAKQEAgLTc1LDEyICs3NiwxMyBAQCBQYXJzZXI6
OlBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsCiAgICAgbV9sZXhlci0+c2V0TGFzdExp
bmVOdW1iZXIodG9rZW5MaW5lKCkpOwogfQogCi1QYXJzZXI6On5QYXJzZXIoKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitQYXJzZXI8VD46On5QYXJzZXIoKQogewogfQogCi0KLVVTdHJpbmcgUGFy
c2VyOjpwYXJzZUlubmVyKCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorVVN0cmluZyBQYXJzZXI8
VD46OnBhcnNlSW5uZXIoKQogewogICAgIFVTdHJpbmcgcGFyc2VFcnJvciA9IFVTdHJpbmcoKTsK
ICAgICAKQEAgLTExMCw3ICsxMTIsOCBAQCBVU3RyaW5nIFBhcnNlcjo6cGFyc2VJbm5lcigpCiAg
ICAgcmV0dXJuIHBhcnNlRXJyb3I7CiB9CiAKLXZvaWQgUGFyc2VyOjpkaWRGaW5pc2hQYXJzaW5n
KFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cywgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0
aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZhclN0YWNrLCAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
dm9pZCBQYXJzZXI8VD46OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJjZUVs
ZW1lbnRzLCBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFy
U3RhY2ssIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERl
Y2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiogZnVuY1N0YWNrLCBDb2RlRmVhdHVyZXMg
ZmVhdHVyZXMsIGludCBsYXN0TGluZSwgaW50IG51bUNvbnN0YW50cywgSWRlbnRpZmllclNldCYg
Y2FwdHVyZWRWYXJzKQogewogICAgIG1fc291cmNlRWxlbWVudHMgPSBzb3VyY2VFbGVtZW50czsK
QEAgLTEyMiwxMiArMTI1LDE0IEBAIHZvaWQgUGFyc2VyOjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJj
ZUVsZW0KICAgICBtX251bUNvbnN0YW50cyA9IG51bUNvbnN0YW50czsKIH0KIAotYm9vbCBQYXJz
ZXI6OmFsbG93QXV0b21hdGljU2VtaWNvbG9uKCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYm9v
bCBQYXJzZXI8VD46OmFsbG93QXV0b21hdGljU2VtaWNvbG9uKCkKIHsKICAgICByZXR1cm4gbWF0
Y2goQ0xPU0VCUkFDRSkgfHwgbWF0Y2goRU9GVE9LKSB8fCBtX2xleGVyLT5wcmV2VGVybWluYXRv
cigpOwogfQogCi10ZW1wbGF0ZSA8UGFyc2VyOjpTb3VyY2VFbGVtZW50c01vZGUgbW9kZSwgY2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI6OnBhcnNlU291cmNlRWxl
bWVudHMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlIDxTb3VyY2VFbGVtZW50c01vZGUgbW9kZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3Vy
Y2VFbGVtZW50cyBQYXJzZXI8VD46OnBhcnNlU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCiB7CiAgICAgVHJlZVNvdXJjZUVsZW1lbnRzIHNvdXJjZUVsZW1lbnRzID0gY29udGV4
dC5jcmVhdGVTb3VyY2VFbGVtZW50cygpOwogICAgIGJvb2wgc2Vlbk5vbkRpcmVjdGl2ZSA9IGZh
bHNlOwpAQCAtMTYxLDcgKzE2Niw4IEBAIHRlbXBsYXRlIDxQYXJzZXI6OlNvdXJjZUVsZW1lbnRz
TW9kZSBtb2QKICAgICByZXR1cm4gc291cmNlRWxlbWVudHM7CiB9CiAKLXRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlVmFyRGVjbGFyYXRpb24o
VHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlVmFyRGVjbGFy
YXRpb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKFZBUikpOwog
ICAgIGludCBzdGFydCA9IHRva2VuTGluZSgpOwpAQCAtMTc3LDcgKzE4Myw4IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVWYXJTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgdmFyRGVjbHMsIHN0YXJ0
LCBlbmQpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
UGFyc2VyOjpwYXJzZUNvbnN0RGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWVudCBQYXJzZXI8VD46OnBhcnNlQ29uc3REZWNsYXJhdGlvbihUcmVlQnVpbGRlciYgY29udGV4
dCkKIHsKICAgICBBU1NFUlQobWF0Y2goQ09OU1RUT0tFTikpOwogICAgIGludCBzdGFydCA9IHRv
a2VuTGluZSgpOwpAQCAtMTg5LDcgKzE5Niw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb25zdFN0YXRlbWVudCht
X2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBjb25zdERlY2xzLCBzdGFydCwgZW5kKTsKIH0KIAot
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VE
b1doaWxlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPFQ+
OjpwYXJzZURvV2hpbGVTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNT
RVJUKG1hdGNoKERPKSk7CiAgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwpAQCAtMjEw
LDcgKzIxOCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVEb1doaWxlU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5l
TnVtYmVyKCksIHN0YXRlbWVudCwgZXhwciwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAotdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VXaGls
ZVN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6cGFy
c2VXaGlsZVN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0
Y2goV0hJTEUpKTsKICAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CkBAIC0yMjgsNyAr
MjM3LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZVdoaWxlU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVy
KCksIGV4cHIsIHN0YXRlbWVudCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAotdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlVmFyRGVjbGFy
YXRpb25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBpbnQmIGRlY2xhcmF0aW9ucywgY29uc3Qg
SWRlbnRpZmllciomIGxhc3RJZGVudCwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwg
aW50JiBpZGVudFN0YXJ0LCBpbnQmIGluaXRTdGFydCwgaW50JiBpbml0RW5kKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9u
IFBhcnNlcjxUPjo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQs
IGludCYgZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhw
cmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0
LCBpbnQmIGluaXRFbmQpCiB7CiAgICAgVHJlZUV4cHJlc3Npb24gdmFyRGVjbHMgPSAwOwogICAg
IGRvIHsKQEAgLTI2NCw3ICsyNzQsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByZXNzCiAgICAgcmV0dXJuIHZhckRlY2xzOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVDb25zdERlY2xMaXN0IFBhcnNlcjo6cGFyc2VDb25zdERlY2xhcmF0aW9u
TGlzdChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ29uc3REZWNsTGlzdCBQYXJzZXI8VD46OnBhcnNl
Q29uc3REZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgZmFpbElm
VHJ1ZShzdHJpY3RNb2RlKCkpOwogICAgIFRyZWVDb25zdERlY2xMaXN0IGNvbnN0RGVjbHMgPSAw
OwpAQCAtMjg5LDcgKzMwMCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNv
bnN0RGUKICAgICByZXR1cm4gY29uc3REZWNsczsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VGb3JTdGF0ZW1lbnQoVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlRm9yU3RhdGVtZW50KFRyZWVC
dWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChGT1IpKTsKICAgICBpbnQgc3Rh
cnRMaW5lID0gdG9rZW5MaW5lKCk7CkBAIC0zOTcsNyArNDA5LDggQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZvcklu
TG9vcChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBkZWNscywgZXhwciwgc3RhdGVtZW50LCBk
ZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAot
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VC
cmVha1N0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6
cGFyc2VCcmVha1N0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQo
bWF0Y2goQlJFQUspKTsKICAgICBpbnQgc3RhcnRDb2wgPSB0b2tlblN0YXJ0KCk7CkBAIC00MjAs
NyArNDMzLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVt
YmVyKCksIGlkZW50LCBzdGFydENvbCwgZW5kQ29sLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQog
Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJz
ZUNvbnRpbnVlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2Vy
PFQ+OjpwYXJzZUNvbnRpbnVlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAg
IEFTU0VSVChtYXRjaChDT05USU5VRSkpOwogICAgIGludCBzdGFydENvbCA9IHRva2VuU3RhcnQo
KTsKQEAgLTQ0NSw3ICs0NTksOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobV9sZXhl
ci0+bGFzdExpbmVOdW1iZXIoKSwgaWRlbnQsIHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwg
ZW5kTGluZSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVu
dCBQYXJzZXI6OnBhcnNlUmV0dXJuU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lbnQgUGFyc2VyPFQ+OjpwYXJzZVJldHVyblN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4
dCkKIHsKICAgICBBU1NFUlQobWF0Y2goUkVUVVJOKSk7CiAgICAgZmFpbElmRmFsc2UoY3VycmVu
dFNjb3BlKCktPmlzRnVuY3Rpb24oKSk7CkBAIC00NzAsNyArNDg1LDggQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJl
dHVyblN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByLCBzdGFydCwgZW5k
LCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVRocm93U3RhdGVtZW50KFRyZWVCdWlsZGVyJiBj
b250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPFQ+OjpwYXJzZVRocm93U3RhdGVtZW50KFRyZWVCdWls
ZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChUSFJPVykpOwogICAgIGludCBlU3Rh
cnQgPSB0b2tlblN0YXJ0KCk7CkBAIC00ODgsNyArNTA0LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVRocm93U3Rh
dGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIsIGVTdGFydCwgZUVuZCwgc3Rh
cnRMaW5lLCBlbmRMaW5lKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZW50IFBhcnNlcjo6cGFyc2VXaXRoU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0
KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lbnQgUGFyc2VyPFQ+OjpwYXJzZVdpdGhTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKFdJVEgpKTsKICAgICBmYWlsSWZUcnVlV2l0aE1l
c3NhZ2Uoc3RyaWN0TW9kZSgpLCAiJ3dpdGgnIHN0YXRlbWVudHMgYXJlIG5vdCB2YWxpZCBpbiBz
dHJpY3QgbW9kZSIpOwpAQCAtNTEwLDcgKzUyNyw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVXaXRoU3RhdGVtZW50
KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIsIHN0YXRlbWVudCwgc3RhcnQsIGVuZCwg
c3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VTd2l0Y2hTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlU3dpdGNoU3RhdGVtZW50KFRyZWVCdWls
ZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChTV0lUQ0gpKTsKICAgICBpbnQgc3Rh
cnRMaW5lID0gdG9rZW5MaW5lKCk7CkBAIC01MzcsNyArNTU1LDggQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIAogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVDbGF1c2VMaXN0IFBhcnNlcjo6cGFyc2VTd2l0Y2hDbGF1c2VzKFRyZWVC
dWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2VMaXN0IFBhcnNlcjxUPjo6cGFyc2VTd2l0Y2hDbGF1c2Vz
KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGlmICghbWF0Y2goQ0FTRSkpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtNTY0LDcgKzU4Myw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZUNsYXVzZUwKICAgICByZXR1cm4gY2xhdXNlTGlzdDsKIH0KIAotdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhdXNlIFBhcnNlcjo6cGFyc2VTd2l0Y2hEZWZhdWx0Q2xh
dXNlKFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2UgUGFyc2VyPFQ+OjpwYXJzZVN3aXRjaERl
ZmF1bHRDbGF1c2UoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgaWYgKCFtYXRjaChERUZB
VUxUKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC01NzUsNyArNTk1LDggQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhdXNlIAogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNs
YXVzZSgwLCBzdGF0ZW1lbnRzKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VUcnlTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRl
eHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlVHJ5U3RhdGVtZW50KFRyZWVCdWlsZGVyJiBj
b250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChUUlkpKTsKICAgICBUcmVlU3RhdGVtZW50IHRy
eUJsb2NrID0gMDsKQEAgLTYyMCw3ICs2NDEsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlVHJ5U3RhdGVtZW50KG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHRyeUJsb2NrLCBpZGVudCwgY2F0Y2hIYXNFdmFsLCBj
YXRjaEJsb2NrLCBmaW5hbGx5QmxvY2ssIGZpcnN0TGluZSwgbGFzdExpbmUpOwogfQogCi10ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZURlYnVn
Z2VyU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPFQ+Ojpw
YXJzZURlYnVnZ2VyU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VS
VChtYXRjaChERUJVR0dFUikpOwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKQEAg
LTYzMiw3ICs2NTQsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRGVidWdnZXIobV9sZXhlci0+bGFzdExpbmVOdW1i
ZXIoKSwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VCbG9ja1N0YXRlbWVudChUcmVlQnVpbGRl
ciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6cGFyc2VCbG9ja1N0YXRlbWVudChUcmVl
QnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0Y2goT1BFTkJSQUNFKSk7CiAgICAg
aW50IHN0YXJ0ID0gdG9rZW5MaW5lKCk7CkBAIC02NDgsNyArNjcxLDggQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJs
b2NrU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHN1YnRyZWUsIHN0YXJ0LCBt
X2xhc3RMaW5lKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZW50IFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElk
ZW50aWZpZXIqJiBkaXJlY3RpdmUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlU3RhdGVtZW50
KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlKQogewog
ICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAg
bV9zdGF0ZW1lbnREZXB0aCsrOwpAQCAtNzExLDcgKzczNSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICB9CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgUGFyc2VyOjpwYXJzZUZvcm1hbFBhcmFt
ZXRlcnMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgUGFyc2VyPFQ+
OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgbWF0
Y2hPckZhaWwoSURFTlQpOwogICAgIGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3Nh
Z2UoZGVjbGFyZVBhcmFtZXRlcihtX3Rva2VuLm1fZGF0YS5pZGVudCksICJDYW5ub3QgZGVjbGFy
ZSBhIHBhcmFtZXRlciBuYW1lZCIsIG1fdG9rZW4ubV9kYXRhLmlkZW50LT5pbXBsKCksICIgaW4g
c3RyaWN0IG1vZGUiKTsKQEAgLTcyOSwxOCArNzU0LDIwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUZvcm1hbFAKICAgICByZXR1cm4gbGlzdDsKIH0KIAotdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjo6cGFyc2VGdW5jdGlvbkJv
ZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8VD46OnBhcnNlRnVu
Y3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGlmIChtYXRjaChDTE9TRUJS
QUNFKSkKICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KG1fbGV4ZXIt
Pmxhc3RMaW5lTnVtYmVyKCksIHN0cmljdE1vZGUoKSk7CiAgICAgRGVwdGhNYW5hZ2VyIHN0YXRl
bWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRoKTsKICAgICBtX3N0YXRlbWVudERlcHRoID0gMDsK
LSAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6RnVuY3Rpb25Cb2R5QnVpbGRlciBib2R5QnVpbGRl
cihjb25zdF9jYXN0PEpTR2xvYmFsRGF0YSo+KG1fZ2xvYmFsRGF0YSksIG1fbGV4ZXIpOworICAg
IHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyKGNv
bnN0X2Nhc3Q8SlNHbG9iYWxEYXRhKj4obV9nbG9iYWxEYXRhKSwgbV9sZXhlci5nZXQoKSk7CiAg
ICAgZmFpbElmRmFsc2UocGFyc2VTb3VyY2VFbGVtZW50czxDaGVja0ZvclN0cmljdE1vZGU+KGJv
ZHlCdWlsZGVyKSk7CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KG1fbGV4
ZXItPmxhc3RMaW5lTnVtYmVyKCksIHN0cmljdE1vZGUoKSk7CiB9CiAKLXRlbXBsYXRlIDxQYXJz
ZXI6OkZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywgYm9vbCBuYW1lSXNJbkNvbnRh
aW5pbmdTY29wZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyOjpwYXJzZUZ1bmN0aW9u
SW5mbyhUcmVlQnVpbGRlciYgY29udGV4dCwgY29uc3QgSWRlbnRpZmllciomIG5hbWUsIFRyZWVG
b3JtYWxQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLCBUcmVlRnVuY3Rpb25Cb2R5JiBib2R5LCBp
bnQmIG9wZW5CcmFjZVBvcywgaW50JiBjbG9zZUJyYWNlUG9zLCBpbnQmIGJvZHlTdGFydExpbmUp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxGdW5jdGlvblJlcXVpcmVtZW50cyBy
ZXF1aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzIFRyZWVCdWls
ZGVyPiBib29sIFBhcnNlcjxUPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRl
eHQsIGNvbnN0IElkZW50aWZpZXIqJiBuYW1lLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYgcGFy
YW1ldGVycywgVHJlZUZ1bmN0aW9uQm9keSYgYm9keSwgaW50JiBvcGVuQnJhY2VQb3MsIGludCYg
Y2xvc2VCcmFjZVBvcywgaW50JiBib2R5U3RhcnRMaW5lKQogewogICAgIEF1dG9Qb3BTY29wZVJl
ZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKICAgICBmdW5jdGlvblNjb3BlLT5z
ZXRJc0Z1bmN0aW9uKCk7CkBAIC04MTMsNyArODQwLDggQEAgdGVtcGxhdGUgPFBhcnNlcjo6RnVu
Y3Rpb25SZXF1aXJlbWVudHMgcgogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFy
YXRpb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNlRnVu
Y3Rpb25EZWNsYXJhdGlvbihUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0
Y2goRlVOQ1RJT04pKTsKICAgICBuZXh0KCk7CkBAIC04NDIsNyArODcwLDggQEAgc3RydWN0IExh
YmVsSW5mbyB7CiAgICAgaW50IG1fZW5kOwogfTsKIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVu
dChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxUPjo6cGFyc2VFeHByZXNz
aW9uT3JMYWJlbFN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICAKICAgICAv
KiBFeHByZXNzaW9uIGFuZCBMYWJlbCBzdGF0ZW1lbnRzIGFyZSBhbWJpZ3VvdXMgYXQgTEwoMSks
IHNvIHdlIGhhdmUgYQpAQCAtOTA0LDcgKzkzMyw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gc3RhdGVtZW50OwogfQogCi10ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25T
dGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3Rl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8VD46OnBhcnNl
RXhwcmVzc2lvblN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBpbnQgc3Rh
cnRMaW5lID0gdG9rZW5MaW5lKCk7CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBh
cnNlRXhwcmVzc2lvbihjb250ZXh0KTsKQEAgLTkxMyw3ICs5NDMsOCBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhw
clN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByZXNzaW9uLCBzdGFydExp
bmUsIG1fbGFzdExpbmUpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUlmU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lbnQgUGFyc2VyPFQ+OjpwYXJzZUlmU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0
KQogewogICAgIEFTU0VSVChtYXRjaChJRikpOwogICAgIApAQCAtOTkwLDcgKzEwMjEsOCBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlSWZTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgY29uZGl0aW9u
LCB0cnVlQmxvY2ssIHN0YXRlbWVudFN0YWNrLmxhc3QoKSwgc3RhcnQsIGVuZCk7CiB9CiAKLXRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZUV4
cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3Rl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPFQ+OjpwYXJz
ZUV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgZmFpbElmU3RhY2tPdmVy
ZmxvdygpOwogICAgIFRyZWVFeHByZXNzaW9uIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKGNvbnRleHQpOwpAQCAtMTAxMiw4ICsxMDQ0LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIHJldHVybiBjb21tYU5vZGU7CiB9CiAKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFy
c2VyPFQ+OjpwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQog
ewogICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKICAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0
KCk7CkBAIC0xMDc0LDcgKzExMDYsOCBAQCBlbmQ6CiAgICAgcmV0dXJuIGxoczsKIH0KIAotdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlQ29u
ZGl0aW9uYWxFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNl
cjxUPjo6cGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7
CiAgICAgVHJlZUV4cHJlc3Npb24gY29uZCA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbihjb250ZXh0
KTsKICAgICBmYWlsSWZGYWxzZShjb25kKTsKQEAgLTEwOTYsMTQgKzExMjksMTYgQEAgQUxXQVlT
X0lOTElORSBzdGF0aWMgYm9vbCBpc1VuYXJ5T3AoSlNUbwogICAgIHJldHVybiB0b2tlbiAmIFVu
YXJ5T3BUb2tlbkZsYWc7CiB9CiAKLWludCBQYXJzZXI6OmlzQmluYXJ5T3BlcmF0b3IoSlNUb2tl
blR5cGUgdG9rZW4pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2ludCBQYXJzZXI8VD46OmlzQmlu
YXJ5T3BlcmF0b3IoSlNUb2tlblR5cGUgdG9rZW4pCiB7CiAgICAgaWYgKG1fYWxsb3dzSW4pCiAg
ICAgICAgIHJldHVybiB0b2tlbiAmIChCaW5hcnlPcFRva2VuUHJlY2VkZW5jZU1hc2sgPDwgQmlu
YXJ5T3BUb2tlbkFsbG93c0luUHJlY2VkZW5jZUFkZGl0aW9uYWxTaGlmdCk7CiAgICAgcmV0dXJu
IHRva2VuICYgQmluYXJ5T3BUb2tlblByZWNlZGVuY2VNYXNrOwogfQogCi10ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VCaW5hcnlFeHByZXNz
aW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxUPjo6cGFyc2VCaW5h
cnlFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIAogICAgIGludCBvcGVy
YW5kU3RhY2tEZXB0aCA9IDA7CkBAIC0xMTQ3LDggKzExODIsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgcmV0dXJuIGNvbnRleHQucG9wT3BlcmFuZFN0
YWNrKG9wZXJhbmRTdGFja0RlcHRoKTsKIH0KIAotCi10ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwg
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI6OnBhcnNlUHJvcGVydHkoVHJl
ZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxib29s
IGNvbXBsZXRlLCBjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxUPjo6cGFy
c2VQcm9wZXJ0eShUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBib29sIHdhc0lkZW50ID0g
ZmFsc2U7CiAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewpAQCAtMTIwMCw3ICsxMjM1LDgg
QEAgdGVtcGxhdGUgPGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZAogICAgIH0KIH0KIAot
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNl
T2JqZWN0TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8VD46
OnBhcnNlT2JqZWN0TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBpbnQgc3Rh
cnRPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5pbnRWYWx1ZTsKICAgICBjb25zdW1lT3JGYWlsV2l0
aEZsYWdzKE9QRU5CUkFDRSwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwpAQCAtMTIz
OSw3ICsxMjc1LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwog
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZU9iamVjdExpdGVyYWwobV9sZXhlci0+bGFzdExpbmVO
dW1iZXIoKSwgcHJvcGVydHlMaXN0KTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbChUcmVlQnVp
bGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8VD46OnBhcnNlU3RyaWN0T2JqZWN0TGl0
ZXJhbChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBjb25zdW1lT3JGYWlsKE9QRU5CUkFD
RSk7CiAgICAgCkBAIC0xMjgzLDcgKzEzMjAsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVFeHByZXNzCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlT2JqZWN0TGl0ZXJhbCht
X2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBwcm9wZXJ0eUxpc3QpOwogfQogCi10ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VBcnJheUxpdGVy
YWwoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPFQ+OjpwYXJzZUFycmF5
TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBjb25zdW1lT3JGYWlsV2l0aEZs
YWdzKE9QRU5CUkFDS0VULCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CiAgICAgCkBA
IC0xMzI1LDcgKzEzNjMsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQXJyYXkobV9sZXhlci0+bGFzdExpbmVOdW1i
ZXIoKSwgZWxlbWVudExpc3QpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYg
Y29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8VD46OnBhcnNlUHJpbWFyeUV4cHJlc3Npb24oVHJl
ZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgZmFpbElmU3RhY2tPdmVyZmxvdygpOwogICAgIHN3
aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKQEAgLTE0MDMsNyArMTQ0Miw4IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICB9CiB9CiAKLXRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUFyZ3VtZW50cyBQYXJzZXI6OnBhcnNlQXJndW1lbnRzKFRyZWVC
dWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVBcmd1bWVudHMgUGFyc2VyPFQ+OjpwYXJzZUFyZ3VtZW50cyhUcmVl
QnVpbGRlciYgY29udGV4dCkKIHsKICAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKE9QRU5QQVJF
TiwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAgIGlmIChtYXRjaChDTE9TRVBB
UkVOKSkgewpAQCAtMTQyNSw3ICsxNDY1LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlQXJndW1lbgogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUFyZ3VtZW50cyhhcmdMaXN0
KTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJz
ZXI6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lv
biBQYXJzZXI8VD46OnBhcnNlTWVtYmVyRXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkK
IHsKICAgICBUcmVlRXhwcmVzc2lvbiBiYXNlID0gMDsKICAgICBpbnQgc3RhcnQgPSB0b2tlblN0
YXJ0KCk7CkBAIC0xNTA1LDcgKzE1NDYsOCBAQCBlbmRNZW1iZXJFeHByZXNzaW9uOgogICAgIHJl
dHVybiBiYXNlOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
aW9uIFBhcnNlcjo6cGFyc2VVbmFyeUV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4
cHJlc3Npb24gUGFyc2VyPFQ+OjpwYXJzZVVuYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29u
dGV4dCkKIHsKICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6VW5hcnlFeHByQ29udGV4dCB1bmFy
eUV4cHJDb250ZXh0KGNvbnRleHQpOwogICAgIEFsbG93SW5PdmVycmlkZSBhbGxvd0luT3ZlcnJp
ZGUodGhpcyk7CkBAIC0xNjE4LDQgKzE2NjAsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVFeHByZXNzCiAgICAgcmV0dXJuIGV4cHI7CiB9CiAKKy8vIEluc3RhbnRpYXRlIHRo
ZSB0d28gZmxhdm9ycyBvZiBQYXJzZXIgd2UgbmVlZCBpbnN0ZWFkIG9mIHB1dHRpbmcgbW9zdCBv
ZiB0aGlzIGZpbGUgaW4gUGFyc2VyLmgKK3RlbXBsYXRlIGNsYXNzIFBhcnNlcjwgTGV4ZXI8TENo
YXI+ID47Cit0ZW1wbGF0ZSBjbGFzcyBQYXJzZXI8IExleGVyPFVDaGFyPiA+OworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2
aXNpb24gOTk1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7CiBj
bGFzcyBGdW5jdGlvblBhcmFtZXRlcnM7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNHbG9i
YWxEYXRhOwotY2xhc3MgUGFyc2VyOwogY2xhc3MgUHJvZ3JhbU5vZGU7CiBjbGFzcyBTb3VyY2VD
b2RlOwogY2xhc3MgVVN0cmluZzsKQEAgLTg3LDYgKzg2LDkgQEAgY2xhc3MgVVN0cmluZzsKIAog
Q09NUElMRV9BU1NFUlQoTGFzdFVudGFnZ2VkVG9rZW4gPCA2NCwgTGVzc1RoYW42NFVudGFnZ2Vk
VG9rZW5zKTsKIAorZW51bSBTb3VyY2VFbGVtZW50c01vZGUgeyBDaGVja0ZvclN0cmljdE1vZGUs
IERvbnRDaGVja0ZvclN0cmljdE1vZGUgfTsKK2VudW0gRnVuY3Rpb25SZXF1aXJlbWVudHMgeyBG
dW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBGdW5jdGlvbk5lZWRzTmFtZSB9OworCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaXNFdmFsTm9kZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiB0
ZW1wbGF0ZSA8PiBpbmxpbmUgYm9vbCBpc0V2YWxOb2RlPEV2YWxOb2RlPigpIHsgcmV0dXJuIHRy
dWU7IH0KIApAQCAtMzY2LDcgKzM2OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRl
eDsKIH07CiAKLQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjbGFzcyBQYXJzZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBhcnNlcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC04NTQsNyArODU2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAgICAgCi0gICAgZW51bSBTb3VyY2VFbGVtZW50c01vZGUgeyBDaGVja0ZvclN0cmljdE1v
ZGUsIERvbnRDaGVja0ZvclN0cmljdE1vZGUgfTsKICAgICB0ZW1wbGF0ZSA8U291cmNlRWxlbWVu
dHNNb2RlIG1vZGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgcGFyc2VT
b3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZVN0YXRlbWVudChUcmVlQnVpbGRlciYsIGNvbnN0IElk
ZW50aWZpZXIqJiBkaXJlY3RpdmUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWVudCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKQEAg
LTg5Myw3ICs4OTQsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJzZUZvcm1hbFBhcmFt
ZXRlcnMoVHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFM
V0FZU19JTkxJTkUgVHJlZUV4cHJlc3Npb24gcGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1
aWxkZXImLCBpbnQmIGRlY2xhcmF0aW9ucywgY29uc3QgSWRlbnRpZmllciomIGxhc3RJZGVudCwg
VHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwgaW50JiBpZGVudFN0YXJ0LCBpbnQmIGlu
aXRTdGFydCwgaW50JiBpbml0RW5kKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IEFMV0FZU19JTkxJTkUgVHJlZUNvbnN0RGVjbExpc3QgcGFyc2VDb25zdERlY2xhcmF0aW9uTGlz
dChUcmVlQnVpbGRlciYgY29udGV4dCk7Ci0gICAgZW51bSBGdW5jdGlvblJlcXVpcmVtZW50cyB7
IEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9uTmVlZHNOYW1lIH07CiAgICAgdGVtcGxh
dGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBj
bGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYsIGNv
bnN0IElkZW50aWZpZXIqJiwgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QmLCBUcmVlRnVuY3Rpb25C
b2R5JiwgaW50JiBvcGVuQnJhY2UsIGludCYgY2xvc2VCcmFjZSwgaW50JiBib2R5U3RhcnRMaW5l
KTsKICAgICBBTFdBWVNfSU5MSU5FIGludCBpc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5UeXBlKTsK
ICAgICBib29sIGFsbG93QXV0b21hdGljU2VtaWNvbG9uKCk7CkBAIC05MjAsNyArOTIwLDcgQEAg
cHJpdmF0ZToKICAgICBtdXRhYmxlIGNvbnN0IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwog
ICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwogICAgIFBhcnNlckFyZW5hKiBtX2FyZW5h
OwotICAgIExleGVyPFVDaGFyPiogbV9sZXhlcjsKKyAgICBPd25QdHI8VD4gbV9sZXhlcjsKICAg
ICAKICAgICBTdGFja0JvdW5kcyBtX3N0YWNrOwogICAgIGJvb2wgbV9lcnJvcjsKQEAgLTk2MSw4
ICs5NjEsOSBAQCBwcml2YXRlOgogICAgIH07CiB9OwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
IHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJz
ZXI6OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciog
ZGVidWdnZXIsIEV4ZWNTdGF0ZSogZGVidWdnZXJFeGVjU3RhdGUsIEpTT2JqZWN0KiogZXhjZXB0
aW9uKQorUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8VD46OnBhcnNlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSog
ZGVidWdnZXJFeGVjU3RhdGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQogewogICAgIEFTU0VSVChs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoZXhjZXB0aW9uICYmICEqZXhjZXB0aW9u
KTsKQEAgLTEwMzAsOSArMTAzMSwxNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KIFBh
c3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJp
Y3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVj
U3RhdGUqIGV4ZWNTdGF0ZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCiB7CiAgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIlBhcnNpbmciKTsKLSAgICBQYXJzZXIgcGFyc2VyKGdsb2Jh
bERhdGEsIHNvdXJjZSwgcGFyYW1ldGVycywgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7CisKKyAg
ICBBU1NFUlQoc291cmNlLnByb3ZpZGVyKCktPmRhdGEoKSk7CisKKyAgICBpZiAoc291cmNlLnBy
b3ZpZGVyKCktPmRhdGEoKS0+aXM4Qml0KCkpIHsKKyAgICAgICAgUGFyc2VyPCBMZXhlcjxMQ2hh
cj4gPiBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBzdHJpY3RuZXNzLCBw
YXJzZXJNb2RlKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBkZWJ1Z2dlciwgZXhlY1N0YXRlLCBleGNlcHRpb24pOworICAgIH0K
KyAgICBQYXJzZXI8IExleGVyPFVDaGFyPiA+IHBhcnNlcihnbG9iYWxEYXRhLCBzb3VyY2UsIHBh
cmFtZXRlcnMsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwogICAgIHJldHVybiBwYXJzZXIucGFy
c2U8UGFyc2VkTm9kZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgZGVidWdnZXIsIGV4ZWNTdGF0ZSwg
ZXhjZXB0aW9uKTsKIH0KLX0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gUGFyc2VyX2gK
K30gLy8gbmFtZXNwYWNlIAorI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1NvdXJjZUNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1NvdXJjZUNvZGUuaAkocmV2aXNpb24gOTk1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1NvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBmaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBt
X2ZpcnN0TGluZTsgfQogICAgICAgICBpbnQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0Q2hhcjsgfQogICAgICAgICBpbnQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9l
bmRDaGFyOyB9Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9w
cm92aWRlci0+ZGF0YSgpICsgbV9zdGFydENoYXI7IH0KKyAgICAgICAgY29uc3QgVUNoYXIqIGRh
dGEoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9wcm92aWRlci0+ZGF0
YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb3ZpZGVyLT5kYXRhKCktPmNoYXJhY3RlcnMx
NigpICsgbV9zdGFydENoYXI7CisgICAgICAgIH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kQ2hhciAtIG1fc3RhcnRDaGFyOyB9CiAgICAgICAgIAogICAgICAgICBT
b3VyY2VDb2RlIHN1YkV4cHJlc3Npb24odW5zaWduZWQgb3BlbkJyYWNlLCB1bnNpZ25lZCBjbG9z
ZUJyYWNlLCBpbnQgZmlyc3RMaW5lKTsKQEAgLTkxLDggKzk1LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBpbmxpbmUgU291cmNlQ29kZSBTb3VyY2VDb2RlOjpzdWJFeHByZXNzaW9uKHVuc2ln
bmVkIG9wZW5CcmFjZSwgdW5zaWduZWQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChwcm92aWRlcigpLT5kYXRhKClbb3BlbkJyYWNlXSA9PSAneycpOwot
ICAgICAgICBBU1NFUlQocHJvdmlkZXIoKS0+ZGF0YSgpW2Nsb3NlQnJhY2VdID09ICd9Jyk7Cisg
ICAgICAgIEFTU0VSVCgoKnByb3ZpZGVyKCktPmRhdGEoKSlbb3BlbkJyYWNlXSA9PSAneycpOwor
ICAgICAgICBBU1NFUlQoKCpwcm92aWRlcigpLT5kYXRhKCkpW2Nsb3NlQnJhY2VdID09ICd9Jyk7
CiAgICAgICAgIHJldHVybiBTb3VyY2VDb2RlKHByb3ZpZGVyKCksIG9wZW5CcmFjZSwgY2xvc2VC
cmFjZSArIDEsIGZpcnN0TGluZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTUwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsOCArNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgVVN0cmluZyBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0ID0gMDsKLSAg
ICAgICAgdmlydHVhbCBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmly
dHVhbCBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgPSAwOworICAgICAgICB2
aXJ0dWFsIGNvbnN0IFN0cmluZ0ltcGwqIGRhdGEoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgaW50IGxlbmd0aCgpIGNvbnN0ID0gMDsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IFVTdHJp
bmcmIHVybCgpIHsgcmV0dXJuIG1fdXJsOyB9CkBAIC05MSw4ICs5MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2Uuc3Vic3RyaW5nU2hh
cmluZ0ltcGwoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAgfQotICAgICAgICBjb25zdCBV
Q2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQotICAgICAgICBjb25zdCBTdHJp
bmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuaW1wbCgpOyB9Cisg
ICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5p
bXBsKCk7IH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxl
bmd0aCgpOyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk1NzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MSBAQAorMjAxMS0xMS0wOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKwor
ICAgICAgICBUb3dhcmRzIDggQml0IFN0cmluZ3M6IFRlbXBsYXRpemUgSlNDOjpQYXJzZXIgY2xh
c3MgYnkgTGV4ZXIgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzE3NjEKKworICAgICAgICBDbGVhbmVkIHVwIFNvdXJjZUNvZGUgZGF0YSgpIHRv
IHJldHVybiBTdHJpbmdJbXBsKiBhbmQgZWxpbWluYXRlZAorICAgICAgICB0aGUgcmVjZW50bHkg
YWRkZWQgc3RyaW5nRGF0YSgpIHZpcnR1YWwgbWV0aG9kLgorCisgICAgICAgIE5vIHRlc3RzIGFk
ZGVkIC0gcmVmYWN0b3JlZCBiYXNlIGNsYXNzIFNvdXJjZUNvZGUgYW5kIGl0cyBzdWJjbGFzc2Vz
LgorCisgICAgICAgICogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyOjpkYXRhKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nU291cmNlUHJvdmlkZXI6OmRhdGEpOgorCiAyMDExLTExLTA4ICBB
bmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW0V4dGVuc2lvbiBBUEldW0Nocm9taXVtXSBpbmplY3RlZCBleHRlbnNpb24gQVBJIG5l
ZWRzIHRvIHJldHVybiBhbiBvYmplY3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gOTk1
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92
aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgfQogCiAgICAgICAgIEpTQzo6VVN0cmluZyBnZXRSYW5nZShpbnQgc3RhcnQs
IGludCBlbmQpIGNvbnN0IHsgcmV0dXJuIEpTQzo6VVN0cmluZyhtX2NhY2hlZFNjcmlwdC0+c2Ny
aXB0KCkuY2hhcmFjdGVycygpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTsgfQotICAgICAgICBjb25z
dCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5j
aGFyYWN0ZXJzKCk7IH0KLSAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5pbXBsKCk7IH0KKyAgICAgICAg
Y29uc3QgU3RyaW5nSW1wbCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5z
Y3JpcHQoKS5pbXBsKCk7IH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5sZW5ndGgoKTsgfQogICAgICAgICBjb25zdCBTdHJpbmcm
IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKTsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwCShyZXZpc2lvbiA5OTUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2UKIAogICAgIFNjcmlwdERlYnVnTGlz
dGVuZXI6OlNjcmlwdCBzY3JpcHQ7CiAgICAgc2NyaXB0LnVybCA9IHVzdHJpbmdUb1N0cmluZyhz
b3VyY2VQcm92aWRlci0+dXJsKCkpOwotICAgIHNjcmlwdC5zb3VyY2UgPSB1c3RyaW5nVG9TdHJp
bmcoSlNDOjpVU3RyaW5nKHNvdXJjZVByb3ZpZGVyLT5kYXRhKCksIHNvdXJjZVByb3ZpZGVyLT5s
ZW5ndGgoKSkpOworICAgIHNjcmlwdC5zb3VyY2UgPSB1c3RyaW5nVG9TdHJpbmcoSlNDOjpVU3Ry
aW5nKGNvbnN0X2Nhc3Q8U3RyaW5nSW1wbCo+KHNvdXJjZVByb3ZpZGVyLT5kYXRhKCkpKSk7CiAg
ICAgc2NyaXB0LnN0YXJ0TGluZSA9IHNvdXJjZVByb3ZpZGVyLT5zdGFydFBvc2l0aW9uKCkubV9s
aW5lLnplcm9CYXNlZEludCgpOwogICAgIHNjcmlwdC5zdGFydENvbHVtbiA9IHNvdXJjZVByb3Zp
ZGVyLT5zdGFydFBvc2l0aW9uKCkubV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7CiAgICAgc2NyaXB0
LmlzQ29udGVudFNjcmlwdCA9IGlzQ29udGVudFNjcmlwdDsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlCiB2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxp
c3RlbmVycywgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBpbnQgZXJyb3JMaW5lLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKICAgICBTdHJpbmcgdXJsID0gdXN0cmluZ1Rv
U3RyaW5nKHNvdXJjZVByb3ZpZGVyLT51cmwoKSk7Ci0gICAgU3RyaW5nIGRhdGEgPSB1c3RyaW5n
VG9TdHJpbmcoSlNDOjpVU3RyaW5nKHNvdXJjZVByb3ZpZGVyLT5kYXRhKCksIHNvdXJjZVByb3Zp
ZGVyLT5sZW5ndGgoKSkpOworICAgIFN0cmluZyBkYXRhID0gdXN0cmluZ1RvU3RyaW5nKEpTQzo6
VVN0cmluZyhjb25zdF9jYXN0PFN0cmluZ0ltcGwqPihzb3VyY2VQcm92aWRlci0+ZGF0YSgpKSkp
OwogICAgIGludCBmaXJzdExpbmUgPSBzb3VyY2VQcm92aWRlci0+c3RhcnRQb3NpdGlvbigpLm1f
bGluZS5vbmVCYXNlZEludCgpOwogCiAgICAgVmVjdG9yPFNjcmlwdERlYnVnTGlzdGVuZXIqPiBj
b3B5OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3Vy
Y2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICAgICAgSlNDOjpVU3RyaW5n
IGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QgeyByZXR1cm4gSlNDOjpVU3RyaW5n
KG1fc291cmNlLmNoYXJhY3RlcnMoKSArIHN0YXJ0LCBlbmQgLSBzdGFydCk7IH0KLSAgICAgICAg
Y29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0ZXJzKCk7
IH0KLSAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nRGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlLmltcGwoKTsgfQorICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2UuaW1wbCgpOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZS5sZW5ndGgoKTsgfQogICAgICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDk5NTc2KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMTEtMDggIE1pY2hhZWwgU2Fib2ZmICA8bXNh
Ym9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgVG93YXJkcyA4IEJpdCBTdHJpbmdzOiBUZW1wbGF0
aXplIEpTQzo6UGFyc2VyIGNsYXNzIGJ5IExleGVyIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNzYxCisKKyAgICAgICAgQ2hhbmdlZCBXS1BD
RXZhbHVhdGUoKSB0byB1c2UgZW1wdHlTdHJpbmcoKSB3aGVuIHRoZSBzb3VyY2UgaXMKKyAgICAg
ICAgemVybyBsZW5ndGguCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbToKKyAg
ICAgICAgKFdLUENFdmFsdWF0ZSk6CisKIDIwMTEtMTEtMDcgIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW4gc2No
ZW1lIHJlZ2lzdHJ5IHRvIFNjaGVtZVJlZ2lzdHJ5CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5t
bQkocmV2aXNpb24gOTk1MDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTY2LDcgKzU2Niw3
IEBAIGtlcm5fcmV0dXJuX3QgV0tQQ0V2YWx1YXRlKG1hY2hfcG9ydF90IGMKIAogICAgIFBsdWdp
bkRlc3Ryb3lEZWZlcnJlciBkZWZlcnJlcihpbnN0YW5jZVByb3h5KTsKICAgICAKLSAgICBTdHJp
bmcgc2NyaXB0ID0gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzY3JpcHREYXRh
LCBzY3JpcHRMZW5ndGgpOworICAgIFN0cmluZyBzY3JpcHQgPSBzY3JpcHRMZW5ndGggPyBTdHJp
bmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHNjcmlwdERhdGEsIHNjcmlwdExlbmd0aCkg
OiBlbXB0eVN0cmluZygpOwogICAgIAogICAgIGRhdGFfdCByZXN1bHREYXRhID0gMDsKICAgICBt
YWNoX21zZ190eXBlX251bWJlcl90IHJlc3VsdExlbmd0aCA9IDA7Cg==
</data>
<flag name="review"
          id="112681"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114142</attachid>
            <date>2011-11-08 13:21:00 -0800</date>
            <delta_ts>2011-11-08 13:23:10 -0800</delta_ts>
            <desc>Updated Patch</desc>
            <filename>71761-5.patch</filename>
            <type>text/plain</type>
            <size>38946</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk2MTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAK
KzIwMTEtMTEtMDggIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVG93YXJkcyA4IEJpdCBTdHJpbmdzOiBUZW1wbGF0aXplIEpTQzo6UGFyc2VyIGNsYXNzIGJ5
IExleGVyIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxNzYxCisKKyAgICAgICAgVGVtcGxhdGl6ZWQgUGFyc2VyIGJhc2VkIG9uIExleGVyPFQ+
LiBNb3ZlZCB0d28gZW51bXMsCisgICAgICAgIFNvdXJjZUVsZW1lbnRzTW9kZSBhbmQgRnVuY3Rp
b25SZXF1aXJlbWVudHMgb3V0IG9mIFBhcnNlciBkZWZpbml0aW9uCisgICAgICAgIHRvIHdvcmsg
YXJvdW5kIGEgY2xhbmcgY29tcGlsZXIgZGVmZWN0LgorCisgICAgICAgIENsZWFuZWQgdXAgU291
cmNlQ29kZSBkYXRhKCkgdG8gcmV0dXJuIFN0cmluZ0ltcGwqIGFuZCBlbGltaW5hdGVkCisgICAg
ICAgIHRoZSByZWNlbnRseSBhZGRlZCBzdHJpbmdEYXRhKCkgdmlydHVhbCBtZXRob2QuCisKKyAg
ICAgICAgVG8ga2VlcCBjb2RlIGluIFBhcnNlci5jcHAgYW5kIGtlZXAgUGFyc2VyLmggc21hbGws
IHRoZSB0d28gZmxhdm9ycworICAgICAgICBvZiBQYXJzZXIgYXJlIGV4cGxpY2l0bHkgaW5zdGFu
dGlhdGVkIGF0IHRoZSBlbmQgb2YgUGFyc2VyLmNwcC4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6YXBwZW5kU291cmNlVG9FcnJvcik6CisgICAgICAgICogcGFyc2VyL0xl
eGVyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpzZXRDb2RlKToKKyAgICAgICAgKEpTQzo6Ojpzb3Vy
Y2VDb2RlKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQ
YXJzZXIpOgorICAgICAgICAoSlNDOjo6On5QYXJzZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNl
SW5uZXIpOgorICAgICAgICAoSlNDOjo6OmRpZEZpbmlzaFBhcnNpbmcpOgorICAgICAgICAoSlND
Ojo6OmFsbG93QXV0b21hdGljU2VtaWNvbG9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVNvdXJj
ZUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6OjpwYXJzZUNvbnN0RGVjbGFyYXRpb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNl
RG9XaGlsZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VXaGlsZVN0YXRlbWVudCk6
CisgICAgICAgIChKU0M6Ojo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlND
Ojo6OnBhcnNlQ29uc3REZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlNDOjo6OnBhcnNlRm9y
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJyZWFrU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6OjpwYXJzZUNvbnRpbnVlU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJz
ZVJldHVyblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VUaHJvd1N0YXRlbWVudCk6
CisgICAgICAgIChKU0M6Ojo6cGFyc2VXaXRoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6Ojpw
YXJzZVN3aXRjaFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTd2l0Y2hDbGF1c2Vz
KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN3aXRjaERlZmF1bHRDbGF1c2UpOgorICAgICAgICAo
SlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZURlYnVnZ2Vy
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJsb2NrU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6OjpwYXJzZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGb3JtYWxQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAg
IChKU0M6Ojo6cGFyc2VGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlRnVuY3Rp
b25EZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6Ojo6cGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0
YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZUlmU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUV4
cHJlc3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKToKKyAgICAgICAgKEpT
Qzo6Ojppc0JpbmFyeU9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJpbmFyeUV4cHJl
c3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlT2JqZWN0TGl0ZXJhbCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdHJpY3RPYmplY3RM
aXRlcmFsKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUFycmF5TGl0ZXJhbCk6CisgICAgICAgIChK
U0M6Ojo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Ojo6cGFyc2VBcmd1
bWVudHMpOgorICAgICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAg
IChKU0M6Ojo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIu
aDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZSk6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAg
ICAgKiBwYXJzZXIvU291cmNlQ29kZS5oOgorICAgICAgICAoSlNDOjpTb3VyY2VDb2RlOjpkYXRh
KToKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZTo6c3ViRXhwcmVzc2lvbik6CisgICAgICAgICog
cGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChKU0M6OlVTdHJpbmdTb3VyY2VQcm92
aWRlcjo6ZGF0YSk6CisKIDIwMTEtMTEtMDggIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBs
ZS5jb20+CiAKICAgICAgICAgSlNDOjpQYXJzZXI6OlBhcnNlciBsZWFrcyBMZXhlciBtZW1iZXIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gOTk2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsMTkgKzY2NywxOSBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtCiAgICAgICAgIG1lc3Nh
Z2UgPSAgbWFrZVVTdHJpbmcobWVzc2FnZSwgIiAoZXZhbHVhdGluZyAnIiwgY29kZUJsb2NrLT5z
b3VyY2UoKS0+Z2V0UmFuZ2UoZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uU3RvcCksICInKSIp
OwogICAgIGVsc2UgewogICAgICAgICAvLyBObyByYW5nZSBpbmZvcm1hdGlvbiwgc28gZ2l2ZSBh
IGZldyBjaGFyYWN0ZXJzIG9mIGNvbnRleHQKLSAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEgPSBj
b2RlQmxvY2stPnNvdXJjZSgpLT5kYXRhKCk7CisgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGRh
dGEgPSBjb2RlQmxvY2stPnNvdXJjZSgpLT5kYXRhKCk7CiAgICAgICAgIGludCBkYXRhTGVuZ3Ro
ID0gY29kZUJsb2NrLT5zb3VyY2UoKS0+bGVuZ3RoKCk7CiAgICAgICAgIGludCBzdGFydCA9IGV4
cHJlc3Npb25TdGFydDsKICAgICAgICAgaW50IHN0b3AgPSBleHByZXNzaW9uU3RhcnQ7CiAgICAg
ICAgIC8vIEdldCB1cCB0byAyMCBjaGFyYWN0ZXJzIG9mIGNvbnRleHQgdG8gdGhlIGxlZnQgYW5k
IHJpZ2h0IG9mIHRoZSBkaXZvdCwgY2xhbXBpbmcgdG8gdGhlIGxpbmUuCiAgICAgICAgIC8vIHRo
ZW4gc3RyaXAgd2hpdGVzcGFjZS4KLSAgICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiAoZXhwcmVz
c2lvblN0YXJ0IC0gc3RhcnQgPCAyMCkgJiYgZGF0YVtzdGFydCAtIDFdICE9ICdcbicpCisgICAg
ICAgIHdoaWxlIChzdGFydCA+IDAgJiYgKGV4cHJlc3Npb25TdGFydCAtIHN0YXJ0IDwgMjApICYm
ICgqZGF0YSlbc3RhcnQgLSAxXSAhPSAnXG4nKQogICAgICAgICAgICAgc3RhcnQtLTsKLSAgICAg
ICAgd2hpbGUgKHN0YXJ0IDwgKGV4cHJlc3Npb25TdGFydCAtIDEpICYmIGlzU3RyV2hpdGVTcGFj
ZShkYXRhW3N0YXJ0XSkpCisgICAgICAgIHdoaWxlIChzdGFydCA8IChleHByZXNzaW9uU3RhcnQg
LSAxKSAmJiBpc1N0cldoaXRlU3BhY2UoKCpkYXRhKVtzdGFydF0pKQogICAgICAgICAgICAgc3Rh
cnQrKzsKLSAgICAgICAgd2hpbGUgKHN0b3AgPCBkYXRhTGVuZ3RoICYmIChzdG9wIC0gZXhwcmVz
c2lvblN0YXJ0IDwgMjApICYmIGRhdGFbc3RvcF0gIT0gJ1xuJykKKyAgICAgICAgd2hpbGUgKHN0
b3AgPCBkYXRhTGVuZ3RoICYmIChzdG9wIC0gZXhwcmVzc2lvblN0YXJ0IDwgMjApICYmICgqZGF0
YSlbc3RvcF0gIT0gJ1xuJykKICAgICAgICAgICAgIHN0b3ArKzsKLSAgICAgICAgd2hpbGUgKHN0
b3AgPiBleHByZXNzaW9uU3RhcnQgJiYgaXNTdHJXaGl0ZVNwYWNlKGRhdGFbc3RvcCAtIDFdKSkK
KyAgICAgICAgd2hpbGUgKHN0b3AgPiBleHByZXNzaW9uU3RhcnQgJiYgaXNTdHJXaGl0ZVNwYWNl
KCgqZGF0YSlbc3RvcCAtIDFdKSkKICAgICAgICAgICAgIHN0b3AtLTsKICAgICAgICAgbWVzc2Fn
ZSA9IG1ha2VVU3RyaW5nKG1lc3NhZ2UsICIgKG5lYXIgJy4uLiIsIGNvZGVCbG9jay0+c291cmNl
KCktPmdldFJhbmdlKHN0YXJ0LCBzdG9wKSwgIi4uLicpIik7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHJldmlzaW9uIDk5NjEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3
ICsyNzcsNyBAQCB2b2lkIExleGVyPFQ+OjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmCiAgICAg
bV9kZWxpbWl0ZWQgPSBmYWxzZTsKICAgICBtX2xhc3RUb2tlbiA9IC0xOwogICAgIAotICAgIGNv
bnN0IFN0cmluZ0ltcGwqIHNvdXJjZVN0cmluZyA9IHNvdXJjZS5wcm92aWRlcigpLT5zdHJpbmdE
YXRhKCk7CisgICAgY29uc3QgU3RyaW5nSW1wbCogc291cmNlU3RyaW5nID0gc291cmNlLnByb3Zp
ZGVyKCktPmRhdGEoKTsKIAogICAgIGlmIChzb3VyY2VTdHJpbmcpCiAgICAgICAgIHNldENvZGVT
dGFydChzb3VyY2VTdHJpbmcpOwpAQCAtMTUzOSw4ICsxNTM5LDggQEAgdm9pZCBMZXhlcjxUPjo6
Y2xlYXIoKQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBTb3VyY2VDb2RlIExleGVyPFQ+Ojpzb3Vy
Y2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKQogewot
ICAgIEFTU0VSVChtX3NvdXJjZS0+cHJvdmlkZXIoKS0+ZGF0YSgpW29wZW5CcmFjZV0gPT0gJ3sn
KTsKLSAgICBBU1NFUlQobV9zb3VyY2UtPnByb3ZpZGVyKCktPmRhdGEoKVtjbG9zZUJyYWNlXSA9
PSAnfScpOworICAgIEFTU0VSVCgoKm1fc291cmNlLT5wcm92aWRlcigpLT5kYXRhKCkpW29wZW5C
cmFjZV0gPT0gJ3snKTsKKyAgICBBU1NFUlQoKCptX3NvdXJjZS0+cHJvdmlkZXIoKS0+ZGF0YSgp
KVtjbG9zZUJyYWNlXSA9PSAnfScpOwogICAgIHJldHVybiBTb3VyY2VDb2RlKG1fc291cmNlLT5w
cm92aWRlcigpLCBvcGVuQnJhY2UsIGNsb3NlQnJhY2UgKyAxLCBmaXJzdExpbmUpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiA5OTYx
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotUGFyc2VyOjpQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgSlNQYXJz
ZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQordGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK1BhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFy
YW1ldGVycyogcGFyYW1ldGVycywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFy
c2VyTW9kZSBwYXJzZXJNb2RlKQogICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAg
LCBtX3NvdXJjZSgmc291cmNlKQogICAgICwgbV9zdGFjayhnbG9iYWxEYXRhLT5zdGFjaygpKQpA
QCAtNTcsNyArNTgsNyBAQCBQYXJzZXI6OlBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
CiAgICAgLCBtX2xhc3RJZGVudGlmaWVyKDApCiAgICAgLCBtX3NvdXJjZUVsZW1lbnRzKDApCiB7
Ci0gICAgbV9sZXhlciA9IGFkb3B0UHRyKG5ldyBMZXhlcjxVQ2hhcj4oZ2xvYmFsRGF0YSkpOwor
ICAgIG1fbGV4ZXIgPSBhZG9wdFB0cihuZXcgTGV4ZXJUeXBlKGdsb2JhbERhdGEpKTsKICAgICBt
X2FyZW5hID0gbV9nbG9iYWxEYXRhLT5wYXJzZXJBcmVuYTsKICAgICBtX2xleGVyLT5zZXRDb2Rl
KHNvdXJjZSwgbV9hcmVuYSk7CiAKQEAgLTc1LDEyICs3NiwxMyBAQCBQYXJzZXI6OlBhcnNlcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsCiAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIo
dG9rZW5MaW5lKCkpOwogfQogCi1QYXJzZXI6On5QYXJzZXIoKQordGVtcGxhdGUgPHR5cGVuYW1l
IExleGVyVHlwZT4KK1BhcnNlcjxMZXhlclR5cGU+Ojp+UGFyc2VyKCkKIHsKIH0KIAotCi1VU3Ry
aW5nIFBhcnNlcjo6cGFyc2VJbm5lcigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgor
VVN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcigpCiB7CiAgICAgVVN0cmluZyBw
YXJzZUVycm9yID0gVVN0cmluZygpOwogICAgIApAQCAtMTEwLDcgKzExMiw4IEBAIFVTdHJpbmcg
UGFyc2VyOjpwYXJzZUlubmVyKCkKICAgICByZXR1cm4gcGFyc2VFcnJvcjsKIH0KIAotdm9pZCBQ
YXJzZXI6OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1lbnRzLCBQ
YXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFyU3RhY2ssIAor
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3ZvaWQgUGFyc2VyPExleGVyVHlwZT46OmRp
ZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1lbnRzLCBQYXJzZXJBcmVu
YURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFyU3RhY2ssIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpG
dW5jdGlvblN0YWNrPiogZnVuY1N0YWNrLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBsYXN0
TGluZSwgaW50IG51bUNvbnN0YW50cywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJzKQogewog
ICAgIG1fc291cmNlRWxlbWVudHMgPSBzb3VyY2VFbGVtZW50czsKQEAgLTEyMiwxMiArMTI1LDE0
IEBAIHZvaWQgUGFyc2VyOjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW0KICAgICBtX251bUNv
bnN0YW50cyA9IG51bUNvbnN0YW50czsKIH0KIAotYm9vbCBQYXJzZXI6OmFsbG93QXV0b21hdGlj
U2VtaWNvbG9uKCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Citib29sIFBhcnNlcjxM
ZXhlclR5cGU+OjphbGxvd0F1dG9tYXRpY1NlbWljb2xvbigpCiB7CiAgICAgcmV0dXJuIG1hdGNo
KENMT1NFQlJBQ0UpIHx8IG1hdGNoKEVPRlRPSykgfHwgbV9sZXhlci0+cHJldlRlcm1pbmF0b3Io
KTsKIH0KIAotdGVtcGxhdGUgPFBhcnNlcjo6U291cmNlRWxlbWVudHNNb2RlIG1vZGUsIGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyOjpwYXJzZVNvdXJjZUVsZW1l
bnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4K
K3RlbXBsYXRlIDxTb3VyY2VFbGVtZW50c01vZGUgbW9kZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTb3VyY2VFbGVtZW50cyhU
cmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGhPZlVzZVN0
cmljdExpdGVyYWwgPSAxMjsgLy8gInVzZSBzdHJpY3QiLmxlbmd0aAogICAgIFRyZWVTb3VyY2VF
bGVtZW50cyBzb3VyY2VFbGVtZW50cyA9IGNvbnRleHQuY3JlYXRlU291cmNlRWxlbWVudHMoKTsK
QEAgLTE2NCw3ICsxNjksOCBAQCB0ZW1wbGF0ZSA8UGFyc2VyOjpTb3VyY2VFbGVtZW50c01vZGUg
bW9kCiAgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVZhckRlY2xhcmF0aW9uKFRyZWVC
dWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VWYXJEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0
Y2goVkFSKSk7CiAgICAgaW50IHN0YXJ0ID0gdG9rZW5MaW5lKCk7CkBAIC0xODAsNyArMTg2LDgg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZVZhclN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCB2YXJE
ZWNscywgc3RhcnQsIGVuZCk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlQ29uc3REZWNsYXJhdGlvbihUcmVlQnVpbGRlciYgY29u
dGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ29uc3REZWNs
YXJhdGlvbihUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0Y2goQ09OU1RU
T0tFTikpOwogICAgIGludCBzdGFydCA9IHRva2VuTGluZSgpOwpAQCAtMTkyLDcgKzE5OSw4IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVDb25zdFN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBjb25z
dERlY2xzLCBzdGFydCwgZW5kKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VEb1doaWxlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBj
b250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VEb1doaWxl
U3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChETykp
OwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKQEAgLTIxMyw3ICsyMjEsOCBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlRG9XaGlsZVN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBzdGF0
ZW1lbnQsIGV4cHIsIHN0YXJ0TGluZSwgZW5kTGluZSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlV2hpbGVTdGF0ZW1lbnQoVHJl
ZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZVdoaWxlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVCht
YXRjaChXSElMRSkpOwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKQEAgLTIzMSw3
ICsyNDAsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlV2hpbGVTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1i
ZXIoKSwgZXhwciwgc3RhdGVtZW50LCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCi10ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VWYXJEZWNs
YXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGludCYgZGVjbGFyYXRpb25zLCBjb25z
dCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVy
LCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGluaXRFbmQpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJl
ZUJ1aWxkZXImIGNvbnRleHQsIGludCYgZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYg
bGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3Rh
cnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGluaXRFbmQpCiB7CiAgICAgVHJlZUV4cHJlc3Npb24g
dmFyRGVjbHMgPSAwOwogICAgIGRvIHsKQEAgLTI2Nyw3ICsyNzcsOCBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgcmV0dXJuIHZhckRlY2xzOwogfQogCi10
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDb25zdERlY2xMaXN0IFBhcnNlcjo6cGFy
c2VDb25zdERlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDb25z
dERlY2xMaXN0IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KFRy
ZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGZhaWxJZlRydWUoc3RyaWN0TW9kZSgpKTsKICAg
ICBUcmVlQ29uc3REZWNsTGlzdCBjb25zdERlY2xzID0gMDsKQEAgLTI5Miw3ICszMDMsOCBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDb25zdERlCiAgICAgcmV0dXJuIGNvbnN0
RGVjbHM7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQ
YXJzZXI6OnBhcnNlRm9yU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUg
PHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JTdGF0ZW1lbnQoVHJlZUJ1aWxkZXIm
IGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKEZPUikpOwogICAgIGludCBzdGFydExpbmUg
PSB0b2tlbkxpbmUoKTsKQEAgLTQwMCw3ICs0MTIsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRm9ySW5Mb29wKG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGRlY2xzLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3Rh
cnQsIGRlY2xzRW5kLCBleHByRW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCi10ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUJyZWFrU3Rh
dGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlw
ZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VCcmVha1N0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAg
ICBBU1NFUlQobWF0Y2goQlJFQUspKTsKICAgICBpbnQgc3RhcnRDb2wgPSB0b2tlblN0YXJ0KCk7
CkBAIC00MjMsNyArNDM2LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG1fbGV4ZXItPmxh
c3RMaW5lTnVtYmVyKCksIGlkZW50LCBzdGFydENvbCwgZW5kQ29sLCBzdGFydExpbmUsIGVuZExp
bmUpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFy
c2VyOjpwYXJzZUNvbnRpbnVlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDb250aW51ZVN0YXRlbWVudChUcmVl
QnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0Y2goQ09OVElOVUUpKTsKICAgICBp
bnQgc3RhcnRDb2wgPSB0b2tlblN0YXJ0KCk7CkBAIC00NDgsNyArNDYyLDggQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUNvbnRpbnVlU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGlkZW50LCBzdGFy
dENvbCwgZW5kQ29sLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVJldHVyblN0YXRlbWVudChU
cmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Cit0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46
OnBhcnNlUmV0dXJuU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VS
VChtYXRjaChSRVRVUk4pKTsKICAgICBmYWlsSWZGYWxzZShjdXJyZW50U2NvcGUoKS0+aXNGdW5j
dGlvbigpKTsKQEAgLTQ3Myw3ICs0ODgsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5k
TGluZSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQ
YXJzZXI6OnBhcnNlVGhyb3dTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVRocm93U3RhdGVtZW50KFRyZWVCdWls
ZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChUSFJPVykpOwogICAgIGludCBlU3Rh
cnQgPSB0b2tlblN0YXJ0KCk7CkBAIC00OTEsNyArNTA3LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVRocm93U3Rh
dGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIsIGVTdGFydCwgZUVuZCwgc3Rh
cnRMaW5lLCBlbmRMaW5lKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZW50IFBhcnNlcjo6cGFyc2VXaXRoU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0
KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VXaXRoU3RhdGVtZW50
KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChXSVRIKSk7CiAgICAg
ZmFpbElmVHJ1ZVdpdGhNZXNzYWdlKHN0cmljdE1vZGUoKSwgIid3aXRoJyBzdGF0ZW1lbnRzIGFy
ZSBub3QgdmFsaWQgaW4gc3RyaWN0IG1vZGUiKTsKQEAgLTUxMyw3ICs1MzAsOCBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlV2l0aFN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByLCBzdGF0ZW1l
bnQsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlU3dpdGNoU3RhdGVtZW50
KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3Rl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VTd2l0Y2hTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNT
RVJUKG1hdGNoKFNXSVRDSCkpOwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKQEAg
LTU0MCw3ICs1NTgsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
CiAgICAgCiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVzZUxpc3Qg
UGFyc2VyOjpwYXJzZVN3aXRjaENsYXVzZXMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
Q2xhdXNlTGlzdCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTd2l0Y2hDbGF1c2VzKFRyZWVCdWls
ZGVyJiBjb250ZXh0KQogewogICAgIGlmICghbWF0Y2goQ0FTRSkpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtNTY3LDcgKzU4Niw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNs
YXVzZUwKICAgICByZXR1cm4gY2xhdXNlTGlzdDsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlQ2xhdXNlIFBhcnNlcjo6cGFyc2VTd2l0Y2hEZWZhdWx0Q2xhdXNlKFRyZWVC
dWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVzZSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VT
d2l0Y2hEZWZhdWx0Q2xhdXNlKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGlmICghbWF0
Y2goREVGQVVMVCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTc4LDcgKzU5OCw4IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVzZSAKICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVDbGF1c2UoMCwgc3RhdGVtZW50cyk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlVHJ5U3RhdGVtZW50KFRyZWVCdWlsZGVy
JiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VUcnlT
dGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKFRSWSkp
OwogICAgIFRyZWVTdGF0ZW1lbnQgdHJ5QmxvY2sgPSAwOwpAQCAtNjIzLDcgKzY0NCw4IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVUcnlTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgdHJ5QmxvY2ss
IGlkZW50LCBjYXRjaEhhc0V2YWwsIGNhdGNoQmxvY2ssIGZpbmFsbHlCbG9jaywgZmlyc3RMaW5l
LCBsYXN0TGluZSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWVudCBQYXJzZXI6OnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZURlYnVnZ2VyU3RhdGVt
ZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIEFTU0VSVChtYXRjaChERUJVR0dFUikp
OwogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKQEAgLTYzNSw3ICs2NTcsOCBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlRGVidWdnZXIobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgc3RhcnRMaW5lLCBl
bmRMaW5lKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50
IFBhcnNlcjo6cGFyc2VCbG9ja1N0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQmxvY2tTdGF0ZW1lbnQoVHJlZUJ1
aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKE9QRU5CUkFDRSkpOwogICAgIGlu
dCBzdGFydCA9IHRva2VuTGluZSgpOwpAQCAtNjUxLDcgKzY3NCw4IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCbG9j
a1N0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBzdWJ0cmVlLCBzdGFydCwgbV9s
YXN0TGluZSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVu
dCBQYXJzZXI6OnBhcnNlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVu
dGlmaWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJhbExlbmd0aCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RhdGVtZW50KFRyZWVCdWls
ZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGly
ZWN0aXZlTGl0ZXJhbExlbmd0aCkKIHsKICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgo
Jm1fc3RhdGVtZW50RGVwdGgpOwogICAgIG1fc3RhdGVtZW50RGVwdGgrKzsKQEAgLTcxNiw3ICs3
NDAsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgfQog
fQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0
IFBhcnNlcjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRm9ybWFsUGFy
YW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBtYXRjaE9yRmFpbChJREVOVCk7
CiAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShkZWNsYXJlUGFyYW1l
dGVyKG1fdG9rZW4ubV9kYXRhLmlkZW50KSwgIkNhbm5vdCBkZWNsYXJlIGEgcGFyYW1ldGVyIG5h
bWVkIiwgbV90b2tlbi5tX2RhdGEuaWRlbnQtPmltcGwoKSwgIiBpbiBzdHJpY3QgbW9kZSIpOwpA
QCAtNzM0LDcgKzc1OSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZvcm1h
bFAKICAgICByZXR1cm4gbGlzdDsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjo6cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0
aW9uQm9keShUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBpZiAobWF0Y2goQ0xPU0VCUkFD
RSkpCiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShtX2xleGVyLT5s
YXN0TGluZU51bWJlcigpLCBzdHJpY3RNb2RlKCkpOwpAQCAtNzQ1LDcgKzc3MSw4IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW8KICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVGdW5jdGlvbkJvZHkobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgc3RyaWN0TW9kZSgp
KTsKIH0KIAotdGVtcGxhdGUgPFBhcnNlcjo6RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1l
bnRzLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBjbGFzcyBUcmVlQnVpbGRlcj4gYm9v
bCBQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJ
ZGVudGlmaWVyKiYgbmFtZSwgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsIFRy
ZWVGdW5jdGlvbkJvZHkmIGJvZHksIGludCYgb3BlbkJyYWNlUG9zLCBpbnQmIGNsb3NlQnJhY2VQ
b3MsIGludCYgYm9keVN0YXJ0TGluZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Cit0
ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBib29sIG5hbWVJc0lu
Q29udGFpbmluZ1Njb3BlLCBjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElkZW50aWZp
ZXIqJiBuYW1lLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVycywgVHJlZUZ1bmN0
aW9uQm9keSYgYm9keSwgaW50JiBvcGVuQnJhY2VQb3MsIGludCYgY2xvc2VCcmFjZVBvcywgaW50
JiBib2R5U3RhcnRMaW5lKQogewogICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRo
aXMsIHB1c2hTY29wZSgpKTsKICAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CkBA
IC04MTgsNyArODQ1LDggQEAgdGVtcGxhdGUgPFBhcnNlcjo6RnVuY3Rpb25SZXF1aXJlbWVudHMg
cgogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oVHJlZUJ1aWxkZXIm
IGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0
aW9uRGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNo
KEZVTkNUSU9OKSk7CiAgICAgbmV4dCgpOwpAQCAtODQ3LDcgKzg3NSw4IEBAIHN0cnVjdCBMYWJl
bEluZm8gewogICAgIGludCBtX2VuZDsKIH07CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbk9yTGFiZWxTdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUV4cHJlc3Npb25PckxhYmVsU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQog
ewogICAgIAogICAgIC8qIEV4cHJlc3Npb24gYW5kIExhYmVsIHN0YXRlbWVudHMgYXJlIGFtYmln
dW91cyBhdCBMTCgxKSwgc28gd2UgaGF2ZSBhCkBAIC05MDksNyArOTM4LDggQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBzdGF0ZW1lbnQ7CiB9
CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBh
cnNlRXhwcmVzc2lvblN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChUcmVlQnVp
bGRlciYgY29udGV4dCkKIHsKICAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CiAgICAg
VHJlZUV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKQEAg
LTkxOCw3ICs5NDgsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVudChtX2xleGVyLT5sYXN0TGlu
ZU51bWJlcigpLCBleHByZXNzaW9uLCBzdGFydExpbmUsIG1fbGFzdExpbmUpOwogfQogCi10ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUlmU3Rh
dGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlw
ZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VJZlN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBB
U1NFUlQobWF0Y2goSUYpKTsKICAgICAKQEAgLTk5NSw3ICsxMDI2LDggQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUlm
U3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGNvbmRpdGlvbiwgdHJ1ZUJsb2Nr
LCBzdGF0ZW1lbnRTdGFjay5sYXN0KCksIHN0YXJ0LCBlbmQpOwogfQogCi10ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VFeHByZXNzaW9uKFRy
ZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46
OnBhcnNlRXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBmYWlsSWZTdGFj
a092ZXJmbG93KCk7CiAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oY29udGV4dCk7CkBAIC0xMDE3LDggKzEwNDksOCBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgcmV0dXJuIGNvbW1hTm9kZTsKIH0KIAotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVF
eHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRy
ZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKICAgICBp
bnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7CkBAIC0xMDc5LDcgKzExMTEsOCBAQCBlbmQ6CiAgICAg
cmV0dXJuIGxoczsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
c2lvbiBQYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250
ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ29uZGl0aW9u
YWxFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIFRyZWVFeHByZXNzaW9u
IGNvbmQgPSBwYXJzZUJpbmFyeUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgZmFpbElmRmFsc2Uo
Y29uZCk7CkBAIC0xMTAxLDE0ICsxMTM0LDE2IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wg
aXNVbmFyeU9wKEpTVG8KICAgICByZXR1cm4gdG9rZW4gJiBVbmFyeU9wVG9rZW5GbGFnOwogfQog
Ci1pbnQgUGFyc2VyOjppc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5UeXBlIHRva2VuKQordGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK2ludCBQYXJzZXI8TGV4ZXJUeXBlPjo6aXNCaW5hcnlP
cGVyYXRvcihKU1Rva2VuVHlwZSB0b2tlbikKIHsKICAgICBpZiAobV9hbGxvd3NJbikKICAgICAg
ICAgcmV0dXJuIHRva2VuICYgKEJpbmFyeU9wVG9rZW5QcmVjZWRlbmNlTWFzayA8PCBCaW5hcnlP
cFRva2VuQWxsb3dzSW5QcmVjZWRlbmNlQWRkaXRpb25hbFNoaWZ0KTsKICAgICByZXR1cm4gdG9r
ZW4gJiBCaW5hcnlPcFRva2VuUHJlY2VkZW5jZU1hc2s7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZUJpbmFyeUV4cHJlc3Npb24o
VHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VCaW5hcnlFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIAog
ICAgIGludCBvcGVyYW5kU3RhY2tEZXB0aCA9IDA7CkBAIC0xMTUyLDggKzExODcsOCBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgcmV0dXJuIGNvbnRleHQu
cG9wT3BlcmFuZFN0YWNrKG9wZXJhbmRTdGFja0RlcHRoKTsKIH0KIAotCi10ZW1wbGF0ZSA8Ym9v
bCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI6OnBhcnNl
UHJvcGVydHkoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJU
eXBlPgordGVtcGxhdGUgPGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJv
cGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImIGNvbnRl
eHQpCiB7CiAgICAgYm9vbCB3YXNJZGVudCA9IGZhbHNlOwogICAgIHN3aXRjaCAobV90b2tlbi5t
X3R5cGUpIHsKQEAgLTEyMDUsNyArMTI0MCw4IEBAIHRlbXBsYXRlIDxib29sIGNvbXBsZXRlLCBj
bGFzcyBUcmVlQnVpbGQKICAgICB9CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZU9iamVjdExpdGVyYWwoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VPYmplY3RM
aXRlcmFsKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGludCBzdGFydE9mZnNldCA9IG1f
dG9rZW4ubV9kYXRhLmludFZhbHVlOwogICAgIGNvbnN1bWVPckZhaWxXaXRoRmxhZ3MoT1BFTkJS
QUNFLCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CkBAIC0xMjQ0LDcgKzEyODAsOCBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlT2JqZWN0TGl0ZXJhbChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBwcm9w
ZXJ0eUxpc3QpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
aW9uIFBhcnNlcjo6cGFyc2VTdHJpY3RPYmplY3RMaXRlcmFsKFRyZWVCdWlsZGVyJiBjb250ZXh0
KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RyaWN0T2JqZWN0
TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBjb25zdW1lT3JGYWlsKE9QRU5C
UkFDRSk7CiAgICAgCkBAIC0xMjg4LDcgKzEzMjUsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlT2JqZWN0TGl0ZXJh
bChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBwcm9wZXJ0eUxpc3QpOwogfQogCi10ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VBcnJheUxp
dGVyYWwoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBl
PgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VBcnJheUxpdGVyYWwoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAg
Y29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0tFVCwgVHJlZUJ1aWxkZXI6OkRvbnRCdWls
ZFN0cmluZ3MpOwogICAgIApAQCAtMTMzMCw3ICsxMzY4LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUFycmF5KG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGVsZW1lbnRMaXN0KTsKIH0KIAotdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlUHJpbWFyeUV4cHJl
c3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBl
PgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKIHsK
ICAgICBmYWlsSWZTdGFja092ZXJmbG93KCk7CiAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkg
ewpAQCAtMTQwOCw3ICsxNDQ3LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzcwogICAgIH0KIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQXJn
dW1lbnRzIFBhcnNlcjo6cGFyc2VBcmd1bWVudHMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlQXJndW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFyZ3VtZW50cyhUcmVlQnVpbGRl
ciYgY29udGV4dCkKIHsKICAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKE9QRU5QQVJFTiwgVHJl
ZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAgIGlmIChtYXRjaChDTE9TRVBBUkVOKSkg
ewpAQCAtMTQzMCw3ICsxNDcwLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
QXJndW1lbgogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUFyZ3VtZW50cyhhcmdMaXN0KTsKIH0K
IAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBh
cnNlTWVtYmVyRXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBMZXhlclR5cGU+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
aW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24oVHJlZUJ1aWxkZXIm
IGNvbnRleHQpCiB7CiAgICAgVHJlZUV4cHJlc3Npb24gYmFzZSA9IDA7CiAgICAgaW50IHN0YXJ0
ID0gdG9rZW5TdGFydCgpOwpAQCAtMTUxMCw3ICsxNTUxLDggQEAgZW5kTWVtYmVyRXhwcmVzc2lv
bjoKICAgICByZXR1cm4gYmFzZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlVW5hcnlFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBj
b250ZXh0KQordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlVW5hcnlF
eHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIHR5cGVuYW1lIFRyZWVCdWls
ZGVyOjpVbmFyeUV4cHJDb250ZXh0IHVuYXJ5RXhwckNvbnRleHQoY29udGV4dCk7CiAgICAgQWxs
b3dJbk92ZXJyaWRlIGFsbG93SW5PdmVycmlkZSh0aGlzKTsKQEAgLTE2MjMsNCArMTY2NSw4IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICByZXR1cm4gZXhw
cjsKIH0KIAorLy8gSW5zdGFudGlhdGUgdGhlIHR3byBmbGF2b3JzIG9mIFBhcnNlciB3ZSBuZWVk
IGluc3RlYWQgb2YgcHV0dGluZyBtb3N0IG9mIHRoaXMgZmlsZSBpbiBQYXJzZXIuaAordGVtcGxh
dGUgY2xhc3MgUGFyc2VyPCBMZXhlcjxMQ2hhcj4gPjsKK3RlbXBsYXRlIGNsYXNzIFBhcnNlcjwg
TGV4ZXI8VUNoYXI+ID47CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTYxMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAg
Y2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKIGNsYXNzIEZ1bmN0aW9uUGFyYW1ldGVyczsKIGNsYXNz
IElkZW50aWZpZXI7CiBjbGFzcyBKU0dsb2JhbERhdGE7Ci1jbGFzcyBQYXJzZXI7CiBjbGFzcyBQ
cm9ncmFtTm9kZTsKIGNsYXNzIFNvdXJjZUNvZGU7CiBjbGFzcyBVU3RyaW5nOwpAQCAtODcsNiAr
ODYsOSBAQCBjbGFzcyBVU3RyaW5nOwogCiBDT01QSUxFX0FTU0VSVChMYXN0VW50YWdnZWRUb2tl
biA8IDY0LCBMZXNzVGhhbjY0VW50YWdnZWRUb2tlbnMpOwogCitlbnVtIFNvdXJjZUVsZW1lbnRz
TW9kZSB7IENoZWNrRm9yU3RyaWN0TW9kZSwgRG9udENoZWNrRm9yU3RyaWN0TW9kZSB9OworZW51
bSBGdW5jdGlvblJlcXVpcmVtZW50cyB7IEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9u
TmVlZHNOYW1lIH07CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBpc0V2YWxO
b2RlKCkgeyByZXR1cm4gZmFsc2U7IH0KIHRlbXBsYXRlIDw+IGlubGluZSBib29sIGlzRXZhbE5v
ZGU8RXZhbE5vZGU+KCkgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0zNjYsNyArMzY4LDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGV4OwogfTsKIAotCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGV4ZXJUeXBlPgogY2xhc3MgUGFyc2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYXJz
ZXIpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtODU0LDcgKzg1Niw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIGVudW0gU291
cmNlRWxlbWVudHNNb2RlIHsgQ2hlY2tGb3JTdHJpY3RNb2RlLCBEb250Q2hlY2tGb3JTdHJpY3RN
b2RlIH07CiAgICAgdGVtcGxhdGUgPFNvdXJjZUVsZW1lbnRzTW9kZSBtb2RlLCBjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNlU291cmNlRWxlbWVudHMoVHJlZUJ1aWxk
ZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFy
c2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImLCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlLCB1
bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJhbExlbmd0aCA9IDApOwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oVHJl
ZUJ1aWxkZXImKTsKQEAgLTg5Myw3ICs4OTQsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBw
YXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUV4cHJlc3Npb24gcGFyc2VWYXJEZWNsYXJh
dGlvbkxpc3QoVHJlZUJ1aWxkZXImLCBpbnQmIGRlY2xhcmF0aW9ucywgY29uc3QgSWRlbnRpZmll
ciomIGxhc3RJZGVudCwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwgaW50JiBpZGVu
dFN0YXJ0LCBpbnQmIGluaXRTdGFydCwgaW50JiBpbml0RW5kKTsKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUNvbnN0RGVjbExpc3QgcGFyc2VDb25z
dERlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYgY29udGV4dCk7Ci0gICAgZW51bSBGdW5jdGlv
blJlcXVpcmVtZW50cyB7IEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9uTmVlZHNOYW1l
IH07CiAgICAgdGVtcGxhdGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBib29sIG5hbWVJc0luQ29u
dGFpbmluZ1Njb3BlLCBjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhU
cmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiwgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3Qm
LCBUcmVlRnVuY3Rpb25Cb2R5JiwgaW50JiBvcGVuQnJhY2UsIGludCYgY2xvc2VCcmFjZSwgaW50
JiBib2R5U3RhcnRMaW5lKTsKICAgICBBTFdBWVNfSU5MSU5FIGludCBpc0JpbmFyeU9wZXJhdG9y
KEpTVG9rZW5UeXBlKTsKICAgICBib29sIGFsbG93QXV0b21hdGljU2VtaWNvbG9uKCk7CkBAIC05
MjAsNyArOTIwLDcgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIGNvbnN0IEpTR2xvYmFsRGF0YSog
bV9nbG9iYWxEYXRhOwogICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwogICAgIFBhcnNl
ckFyZW5hKiBtX2FyZW5hOwotICAgIE93blB0cjwgTGV4ZXI8VUNoYXI+ID4gbV9sZXhlcjsKKyAg
ICBPd25QdHI8TGV4ZXJUeXBlPiBtX2xleGVyOwogICAgIAogICAgIFN0YWNrQm91bmRzIG1fc3Rh
Y2s7CiAgICAgYm9vbCBtX2Vycm9yOwpAQCAtOTYxLDggKzk2MSw5IEBAIHByaXZhdGU6CiAgICAg
fTsKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3Mg
UGFyc2VkTm9kZT4KLVBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyOjpwYXJzZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVjU3Rh
dGUqIGRlYnVnZ2VyRXhlY1N0YXRlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKK1Bhc3NSZWZQdHI8
UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZGVidWdnZXJF
eGVjU3RhdGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQogewogICAgIEFTU0VSVChsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBBU1NFUlQoZXhjZXB0aW9uICYmICEqZXhjZXB0aW9uKTsKQEAgLTEw
MzAsOSArMTAzMSwxNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KIFBhc3NSZWZQdHI8
UGFyc2VkTm9kZT4gcGFyc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlv
blBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBK
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVjU3RhdGUqIGV4
ZWNTdGF0ZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIlBhcnNpbmciKTsKLSAgICBQYXJzZXIgcGFyc2VyKGdsb2JhbERhdGEsIHNv
dXJjZSwgcGFyYW1ldGVycywgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7CisKKyAgICBBU1NFUlQo
c291cmNlLnByb3ZpZGVyKCktPmRhdGEoKSk7CisKKyAgICBpZiAoc291cmNlLnByb3ZpZGVyKCkt
PmRhdGEoKS0+aXM4Qml0KCkpIHsKKyAgICAgICAgUGFyc2VyPCBMZXhlcjxMQ2hhcj4gPiBwYXJz
ZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBzdHJpY3RuZXNzLCBwYXJzZXJNb2Rl
KTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBkZWJ1Z2dlciwgZXhlY1N0YXRlLCBleGNlcHRpb24pOworICAgIH0KKyAgICBQYXJz
ZXI8IExleGVyPFVDaGFyPiA+IHBhcnNlcihnbG9iYWxEYXRhLCBzb3VyY2UsIHBhcmFtZXRlcnMs
IHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwogICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2Vk
Tm9kZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgZGVidWdnZXIsIGV4ZWNTdGF0ZSwgZXhjZXB0aW9u
KTsKIH0KLX0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gUGFyc2VyX2gKK30gLy8gbmFt
ZXNwYWNlIAorI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZUNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZUNvZGUuaAkocmV2aXNpb24gOTk2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGludCBmaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGlu
ZTsgfQogICAgICAgICBpbnQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q2hh
cjsgfQogICAgICAgICBpbnQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRDaGFyOyB9
Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlci0+
ZGF0YSgpICsgbV9zdGFydENoYXI7IH0KKyAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9wcm92aWRlci0+ZGF0YSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3Byb3ZpZGVyLT5kYXRhKCktPmNoYXJhY3RlcnMxNigpICsgbV9z
dGFydENoYXI7CisgICAgICAgIH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fZW5kQ2hhciAtIG1fc3RhcnRDaGFyOyB9CiAgICAgICAgIAogICAgICAgICBTb3VyY2VDb2Rl
IHN1YkV4cHJlc3Npb24odW5zaWduZWQgb3BlbkJyYWNlLCB1bnNpZ25lZCBjbG9zZUJyYWNlLCBp
bnQgZmlyc3RMaW5lKTsKQEAgLTkxLDggKzk1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBp
bmxpbmUgU291cmNlQ29kZSBTb3VyY2VDb2RlOjpzdWJFeHByZXNzaW9uKHVuc2lnbmVkIG9wZW5C
cmFjZSwgdW5zaWduZWQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChwcm92aWRlcigpLT5kYXRhKClbb3BlbkJyYWNlXSA9PSAneycpOwotICAgICAgICBB
U1NFUlQocHJvdmlkZXIoKS0+ZGF0YSgpW2Nsb3NlQnJhY2VdID09ICd9Jyk7CisgICAgICAgIEFT
U0VSVCgoKnByb3ZpZGVyKCktPmRhdGEoKSlbb3BlbkJyYWNlXSA9PSAneycpOworICAgICAgICBB
U1NFUlQoKCpwcm92aWRlcigpLT5kYXRhKCkpW2Nsb3NlQnJhY2VdID09ICd9Jyk7CiAgICAgICAg
IHJldHVybiBTb3VyY2VDb2RlKHByb3ZpZGVyKCksIG9wZW5CcmFjZSwgY2xvc2VCcmFjZSArIDEs
IGZpcnN0TGluZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Tb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTYxMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCAr
NTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgVVN0
cmluZyBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0ID0gMDsKLSAgICAgICAgdmly
dHVhbCBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBjb25z
dCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGNv
bnN0IFN0cmluZ0ltcGwqIGRhdGEoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgaW50IGxl
bmd0aCgpIGNvbnN0ID0gMDsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIHVybCgp
IHsgcmV0dXJuIG1fdXJsOyB9CkBAIC05MSw4ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2Uuc3Vic3RyaW5nU2hhcmluZ0ltcGwo
c3RhcnQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAgfQotICAgICAgICBjb25zdCBVQ2hhciogZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQotICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBz
dHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuaW1wbCgpOyB9CisgICAgICAgIGNv
bnN0IFN0cmluZ0ltcGwqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5pbXBsKCk7IH0K
ICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0aCgpOyB9
CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAx
MS0xMS0wOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBU
b3dhcmRzIDggQml0IFN0cmluZ3M6IFRlbXBsYXRpemUgSlNDOjpQYXJzZXIgY2xhc3MgYnkgTGV4
ZXIgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzE3NjEKKworICAgICAgICBDbGVhbmVkIHVwIFNvdXJjZUNvZGUgZGF0YSgpIHRvIHJldHVybiBT
dHJpbmdJbXBsKiBhbmQgZWxpbWluYXRlZAorICAgICAgICB0aGUgcmVjZW50bHkgYWRkZWQgc3Ry
aW5nRGF0YSgpIHZpcnR1YWwgbWV0aG9kLgorCisgICAgICAgIE5vIHRlc3RzIGFkZGVkIC0gcmVm
YWN0b3JlZCBiYXNlIGNsYXNzIFNvdXJjZUNvZGUgYW5kIGl0cyBzdWJjbGFzc2VzLgorCisgICAg
ICAgICogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyOjpkYXRhKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nU291cmNlUHJvdmlkZXI6OmRhdGEpOgorCiAyMDExLTExLTA4ICBWaW5lZXQgQ2hh
dWRoYXJ5ICA8dmluZWV0LmNoYXVkaGFyeUBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgRG9jdW1l
bnQuaW1wb3J0Tm9kZSdzICdkZWVwJyBhcmd1bWVudCBzaG91bGQgZGVmYXVsdCB0byB0cnVlLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3Jp
cHRTb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTYxMikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDggKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICAgICAg
SlNDOjpVU3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QgeyByZXR1cm4g
SlNDOjpVU3RyaW5nKG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5jaGFyYWN0ZXJzKCkgKyBzdGFy
dCwgZW5kIC0gc3RhcnQpOyB9Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmNoYXJhY3RlcnMoKTsgfQotICAgICAgICBj
b25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3Jp
cHQtPnNjcmlwdCgpLmltcGwoKTsgfQorICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmltcGwoKTsgfQogICAgICAg
ICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmxl
bmd0aCgpOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDk5NjEyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0
Y2hEaWRQYXJzZQogCiAgICAgU2NyaXB0RGVidWdMaXN0ZW5lcjo6U2NyaXB0IHNjcmlwdDsKICAg
ICBzY3JpcHQudXJsID0gdXN0cmluZ1RvU3RyaW5nKHNvdXJjZVByb3ZpZGVyLT51cmwoKSk7Ci0g
ICAgc2NyaXB0LnNvdXJjZSA9IHVzdHJpbmdUb1N0cmluZyhKU0M6OlVTdHJpbmcoc291cmNlUHJv
dmlkZXItPmRhdGEoKSwgc291cmNlUHJvdmlkZXItPmxlbmd0aCgpKSk7CisgICAgc2NyaXB0LnNv
dXJjZSA9IHVzdHJpbmdUb1N0cmluZyhKU0M6OlVTdHJpbmcoY29uc3RfY2FzdDxTdHJpbmdJbXBs
Kj4oc291cmNlUHJvdmlkZXItPmRhdGEoKSkpKTsKICAgICBzY3JpcHQuc3RhcnRMaW5lID0gc291
cmNlUHJvdmlkZXItPnN0YXJ0UG9zaXRpb24oKS5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CiAgICAg
c2NyaXB0LnN0YXJ0Q29sdW1uID0gc291cmNlUHJvdmlkZXItPnN0YXJ0UG9zaXRpb24oKS5tX2Nv
bHVtbi56ZXJvQmFzZWRJbnQoKTsKICAgICBzY3JpcHQuaXNDb250ZW50U2NyaXB0ID0gaXNDb250
ZW50U2NyaXB0OwpAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkUGFyc2UKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRmFpbGVkVG9Q
YXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBTb3VyY2VQcm92aWRlciog
c291cmNlUHJvdmlkZXIsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KQogewogICAgIFN0cmluZyB1cmwgPSB1c3RyaW5nVG9TdHJpbmcoc291cmNlUHJvdmlkZXItPnVy
bCgpKTsKLSAgICBTdHJpbmcgZGF0YSA9IHVzdHJpbmdUb1N0cmluZyhKU0M6OlVTdHJpbmcoc291
cmNlUHJvdmlkZXItPmRhdGEoKSwgc291cmNlUHJvdmlkZXItPmxlbmd0aCgpKSk7CisgICAgU3Ry
aW5nIGRhdGEgPSB1c3RyaW5nVG9TdHJpbmcoSlNDOjpVU3RyaW5nKGNvbnN0X2Nhc3Q8U3RyaW5n
SW1wbCo+KHNvdXJjZVByb3ZpZGVyLT5kYXRhKCkpKSk7CiAgICAgaW50IGZpcnN0TGluZSA9IHNv
dXJjZVByb3ZpZGVyLT5zdGFydFBvc2l0aW9uKCkubV9saW5lLm9uZUJhc2VkSW50KCk7CiAKICAg
ICBWZWN0b3I8U2NyaXB0RGVidWdMaXN0ZW5lcio+IGNvcHk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDk5
NjEyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIH0KIAogICAgICAgICBKU0M6OlVTdHJpbmcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdCB7IHJldHVybiBKU0M6OlVTdHJpbmcobV9zb3VyY2UuY2hhcmFjdGVycygpICsg
c3RhcnQsIGVuZCAtIHN0YXJ0KTsgfQotICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlLmNoYXJhY3RlcnMoKTsgfQotICAgICAgICBjb25zdCBTdHJpbmdJ
bXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuaW1wbCgpOyB9CisgICAg
ICAgIGNvbnN0IFN0cmluZ0ltcGwqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5pbXBs
KCk7IH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0
aCgpOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2U7IH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gOTk2MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAor
MjAxMS0xMS0wOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAg
ICBUb3dhcmRzIDggQml0IFN0cmluZ3M6IFRlbXBsYXRpemUgSlNDOjpQYXJzZXIgY2xhc3MgYnkg
TGV4ZXIgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzE3NjEKKworICAgICAgICBDaGFuZ2VkIFdLUENFdmFsdWF0ZSgpIHRvIHVzZSBlbXB0eVN0
cmluZygpIHdoZW4gdGhlIHNvdXJjZSBpcworICAgICAgICB6ZXJvIGxlbmd0aC4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tOgorICAgICAgICAoV0tQQ0V2YWx1YXRlKToKKwog
MjAxMS0xMS0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIE1v
dmUgRG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbiBzY2hlbWUgcmVnaXN0cnkgdG8gU2NoZW1lUmVn
aXN0cnkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSG9zdFByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCShyZXZpc2lvbiA5OTYxMikKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01NjYsNyArNTY2LDcgQEAga2Vybl9yZXR1cm5fdCBXS1BDRXZh
bHVhdGUobWFjaF9wb3J0X3QgYwogCiAgICAgUGx1Z2luRGVzdHJveURlZmVycmVyIGRlZmVycmVy
KGluc3RhbmNlUHJveHkpOwogICAgIAotICAgIFN0cmluZyBzY3JpcHQgPSBTdHJpbmc6OmZyb21V
VEY4V2l0aExhdGluMUZhbGxiYWNrKHNjcmlwdERhdGEsIHNjcmlwdExlbmd0aCk7CisgICAgU3Ry
aW5nIHNjcmlwdCA9IHNjcmlwdExlbmd0aCA/IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFs
bGJhY2soc2NyaXB0RGF0YSwgc2NyaXB0TGVuZ3RoKSA6IGVtcHR5U3RyaW5nKCk7CiAgICAgCiAg
ICAgZGF0YV90IHJlc3VsdERhdGEgPSAwOwogICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcmVz
dWx0TGVuZ3RoID0gMDsK
</data>
<flag name="review"
          id="112716"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>