<?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>70157</bug_id>
          
          <creation_ts>2011-10-14 16:43:04 -0700</creation_ts>
          <short_desc>FunctionExecutable should expose the ability to create unattached FunctionCodeBlocks</short_desc>
          <delta_ts>2011-10-15 14:44:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>69996</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>484404</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-14 16:43:04 -0700</bug_when>
    <thetext>Inlining requires being able to create a CodeBlock that is populated with bytecode for any callee that constitutes an inlining candidate.  Currently this is not possible without a non-trivial amount of code duplication.  Since FunctionExecutable already has the code for creating FunctionCodeBlocks that are populated with bytecode (in fact it has this functionality twice), this should simply be exposed as a method.  This will also provide an opportunity to reduce some of the redundant code in FunctionExecutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484407</commentid>
    <comment_count>1</comment_count>
      <attachid>111107</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-14 16:48:22 -0700</bug_when>
    <thetext>Created attachment 111107
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484408</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-14 16:50:52 -0700</bug_when>
    <thetext>Attachment 111107 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/runtime/Executable.h:465:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:465:  The parameter name &quot;scopeChainNode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:465:  The parameter name &quot;compilationKind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:465:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484409</commentid>
    <comment_count>3</comment_count>
      <attachid>111108</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-14 16:54:43 -0700</bug_when>
    <thetext>Created attachment 111108
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484420</commentid>
    <comment_count>4</comment_count>
      <attachid>111108</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-14 17:10:57 -0700</bug_when>
    <thetext>Comment on attachment 111108
the patch - fix style

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

r=me

&gt; Source/JavaScriptCore/runtime/Executable.cpp:416
&gt; +        return PassOwnPtr&lt;FunctionCodeBlock&gt;();

I think you can just return nullptr here.

&gt; Source/JavaScriptCore/runtime/Executable.cpp:427
&gt; +    result = adoptPtr(new FunctionCodeBlock(this, FunctionCode, globalObject, source().provider(), source().startOffset(), specializationKind == CodeForConstruct, PassOwnPtr&lt;FunctionCodeBlock&gt;()));

nullptr, or maybe just make that the default function argument.

&gt; Source/JavaScriptCore/runtime/Executable.cpp:432
&gt; +        return PassOwnPtr&lt;FunctionCodeBlock&gt;();

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484652</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-15 14:44:23 -0700</bug_when>
    <thetext>Landed in r97564.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111107</attachid>
            <date>2011-10-14 16:48:22 -0700</date>
            <delta_ts>2011-10-14 16:54:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>producecb_patch_1.diff</filename>
            <type>text/plain</type>
            <size>16626</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc1MzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMTAtMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUgc2hvdWxkIGV4cG9zZSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgdW5h
dHRhY2hlZCBGdW5jdGlvbkNvZGVCbG9ja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcwMTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1
Y2VDb2RlQmxvY2tGb3IoKSBhbmQgcmV3aXJlZCBjb21waWxlRm9yQ2FsbEludGVybmFsKCkKKyAg
ICAgICAgYW5kIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbCgpIHRvIHVzZSB0aGlzIG1ldGhv
ZC4gVGhpcyByZXF1aXJlZCBtb3JlIGNsZWFubHkKKyAgICAgICAgZXhwb3Npbmcgc29tZSBvZiBD
b2RlQmxvY2sncyB0aWVyaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIG1vdmluZyB0aGUgQ29tcGlsYXRp
b25LaW5kCisgICAgICAgIGVudW0gdG8gRXhlY3V0YWJsZS5oLCBhcyB0aGlzIHdhcyB0aGUgZWFz
aWVzdCB3YXkgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlCisgICAgICAgIGRlY2xhcmF0aW9u
cy9kZWZpbml0aW9ucyBvZiBDb2RlQmxvY2ssIEZ1bmN0aW9uRXhlY3V0YWJsZSwgYW5kIEJ5dGVj
b2RlR2VuZXJhdG9yLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb20pOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRBbHRlcm5hdGl2ZSk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3Ip
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJu
YWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1
Y3RJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrRm9yKToKKwogMjAxMS0xMC0xMyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmxlY3RpdmUgQXJndW1l
bnRzIHJldHJpZXZhbCBzaG91bGQgYmUgaGFyZGVuZWQgZm9yIHRoZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk3NTMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MDgsMTQgKzE4MDgsMTkgQEAgaW5saW5lIHZvaWQgcmVwbGFjZUV4aXN0aW5n
RW50cmllcyhWZWN0bwogICAgICAgICB0YXJnZXRbaV0gPSBzb3VyY2VbaV07CiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpCit2b2lkIENvZGVCbG9jazo6Y29w
eURhdGFGcm9tKENvZGVCbG9jayogYWx0ZXJuYXRpdmUpCiB7Ci0gICAgaWYgKCFtX2FsdGVybmF0
aXZlKQorICAgIGlmICghYWx0ZXJuYXRpdmUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBy
ZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fY29uc3RhbnRSZWdpc3RlcnMsIG1fYWx0ZXJuYXRpdmUt
Pm1fY29uc3RhbnRSZWdpc3RlcnMpOwotICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMobV9mdW5j
dGlvbkRlY2xzLCBtX2FsdGVybmF0aXZlLT5tX2Z1bmN0aW9uRGVjbHMpOwotICAgIHJlcGxhY2VF
eGlzdGluZ0VudHJpZXMobV9mdW5jdGlvbkV4cHJzLCBtX2FsdGVybmF0aXZlLT5tX2Z1bmN0aW9u
RXhwcnMpOworICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMobV9jb25zdGFudFJlZ2lzdGVycywg
YWx0ZXJuYXRpdmUtPm1fY29uc3RhbnRSZWdpc3RlcnMpOworICAgIHJlcGxhY2VFeGlzdGluZ0Vu
dHJpZXMobV9mdW5jdGlvbkRlY2xzLCBhbHRlcm5hdGl2ZS0+bV9mdW5jdGlvbkRlY2xzKTsKKyAg
ICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fZnVuY3Rpb25FeHBycywgYWx0ZXJuYXRpdmUtPm1f
ZnVuY3Rpb25FeHBycyk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5h
dGl2ZSgpCit7CisgICAgY29weURhdGFGcm9tKG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOwogfQogCiAj
aWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDk3NTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyBy
ZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9j
az4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7
IH0KKyAgICAgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0
ZXJuYXRpdmUpIHsgbV9hbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlOyB9CiAgICAgICAgIAogICAg
ICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKQEAgLTczMiw2ICs3MzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHNocmlua1RvRml0KCk7CiAgICAg
ICAgIAorICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbShDb2RlQmxvY2sqIGFsdGVybmF0aXZlKTsK
ICAgICAgICAgdm9pZCBjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogICAgICAgICAKICAgICAg
ICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIHRpZXJlZCBjb21waWxhdGlvbiBr
aWNrcyBpbi4gVGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTc1MzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDggKzkyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldER1bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBz
R2VuZXJhdGVkQ29kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBzR2VuZXJhdGVkQ29kZSgp
OwogCi0gICAgICAgIGVudW0gQ29tcGlsYXRpb25LaW5kIHsgRmlyc3RDb21waWxhdGlvbiwgT3B0
aW1pemluZ0NvbXBpbGF0aW9uIH07Ci0gICAgICAgIAogICAgICAgICBCeXRlY29kZUdlbmVyYXRv
cihQcm9ncmFtTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29k
ZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKICAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVu
Y3Rpb25Cb2R5Tm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sq
LCBDb21waWxhdGlvbktpbmQpOwogICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2NrKiwgQ29tcGlsYXRp
b25LaW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiA5NzUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgSlNPYmpl
Y3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogICAgIE93blB0cjxDb2RlQmxvY2s+
IHByZXZpb3VzQ29kZUJsb2NrID0gbV9ldmFsQ29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICBBU1NF
UlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2Rl
QmxvY2spOwogICAgIG1fZXZhbENvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2Nr
KHRoaXMsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVDaGFpbk5vZGUt
PmxvY2FsRGVwdGgoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgT3duUHRy
PEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJh
dG9yKGV2YWxOb2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1i
b2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksICEhbV9ldmFsQ29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5
dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOworICAgIE93blB0cjxCeXRlY29k
ZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihldmFs
Tm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fZXZhbENvZGVCbG9jay0+c3ltYm9sVGFibGUo
KSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCAhIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYg
KChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7CiAgICAgICAgIG1fZXZhbENv
ZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJs
b2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0
YSgpOwpAQCAtMjk4LDcgKzI5OCw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29t
cGlsZUludGUKICAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fcHJv
Z3JhbUNvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKICAgICBtX3Byb2dyYW1D
b2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2Rl
LCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHByZXZpb3VzQ29kZUJsb2NrLnJl
bGVhc2UoKSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0
UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5v
ZGUsICZnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQo
KSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRv
cjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGls
YXRpb24pKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHByb2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWluTm9k
ZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgp
LCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IE9wdGltaXppbmdDb21waWxh
dGlvbiA6IEZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0
b3ItPmdlbmVyYXRlKCkpKSB7CiAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNl
QWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOwpAQCAt
NDA2LDE3ICs0MDYsMTQgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9w
dAogICAgIHJldHVybiBlcnJvcjsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlw
ZSBqaXRUeXBlKQorUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeGVjdXRh
YmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24p
CiB7Ci0jaWYgIUVOQUJMRShKSVQpCi0gICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwotI2VuZGlm
Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CisgICAgZXhjZXB0aW9uID0gMDsKICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKICAg
ICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFy
c2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBt
X3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJp
Y3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoIWJvZHkpIHsKICAgICAg
ICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgICAg
IHJldHVybiBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPigpOwogICAgIH0KICAgICBpZiAo
bV9mb3JjZVVzZXNBcmd1bWVudHMpCiAgICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsK
QEAgLTQyNSwyNiArNDIyLDQyIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9k
ZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXND
b2RlQmxvY2sgPSBtX2NvZGVCbG9ja0ZvckNhbGwucmVsZWFzZSgpOwotICAgIEFTU0VSVCgoaml0
VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7
Ci0gICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2Nr
KHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBz
b3VyY2UoKS5zdGFydE9mZnNldCgpLCBmYWxzZSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgp
KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3
IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9j
a0ZvckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgISFtX2Nv
ZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1p
emluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7
Ci0gICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAg
IG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxv
Y2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgICAgICBi
b2R5LT5kZXN0cm95RGF0YSgpOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0
OworICAgIEFTU0VSVCgoY29tcGlsYXRpb25LaW5kID09IEZpcnN0Q29tcGlsYXRpb24pID09ICFj
b2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKSk7CisgICAgcmVzdWx0ID0gYWRvcHRQdHIo
bmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBz
b3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBzcGVjaWFsaXphdGlv
bktpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4o
KSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5l
dyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwgcmVzdWx0LT5z
eW1ib2xUYWJsZSgpLCByZXN1bHQuZ2V0KCksIGNvbXBpbGF0aW9uS2luZCkpKTsKKyAgICBleGNl
cHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CisgICAgYm9keS0+ZGVzdHJveURhdGEoKTsK
KyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4oKTsKKworICAgIHJlc3VsdC0+Y29weURhdGFGcm9tKGNvZGVCbG9ja0ZvcihzcGVj
aWFsaXphdGlvbktpbmQpLmdldCgpKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30K
KworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbChF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRl
KiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQoreworI2lmICFFTkFC
TEUoSklUKQorICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKKyNlbmRpZgorICAgIEpTT2JqZWN0
KiBleGNlcHRpb247CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5v
ZGUtPmdsb2JhbERhdGE7CisgICAgCisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJv
dHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgT3duUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxhdGlv
biA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOworICAgIGlmICgh
bmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgIH0KIAorICAgIG5l
d0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+
KG1fY29kZUJsb2NrRm9yQ2FsbC5yZWxlYXNlKCkpKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwg
PSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNh
bGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPm1fbnVtUGFyYW1ldGVyczsKICAgICBBU1NFUlQobV9u
dW1QYXJhbWV0ZXJzRm9yQ2FsbCk7CiAgICAgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyA9IG1fY29k
ZUJsb2NrRm9yQ2FsbC0+bV9udW1DYXB0dXJlZFZhcnM7CiAgICAgbV9zeW1ib2xUYWJsZSA9IG1f
Y29kZUJsb2NrRm9yQ2FsbC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKIAotICAgIGJvZHktPmRlc3Ry
b3lEYXRhKCk7Ci0gICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2
ZSgpOwotCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVz
ZUpJVCgpKSB7CisgICAgaWYgKGdsb2JhbERhdGEtPmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGJv
b2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6
REZHSklUKQogICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGVGdW5jdGlv
bihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENv
ZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwpAQCAtNDU3LDcgKzQ3
MCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICAgICAg
ICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xU
YWJsZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xv
YmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrKTsKKyAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6OmNvbXBpbGUo
Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrKTsKICAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQog
ICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKQEAg
LTQ4OCw0MCArNTAxLDI0IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVG
b3IKIHsKICAgICBVTlVTRURfUEFSQU0oaml0VHlwZSk7CiAgICAgCi0gICAgSlNPYmplY3QqIGV4
Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKLSAgICBSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25C
b2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9w
YXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNl
Tm9ybWFsLCAmZXhjZXB0aW9uKTsKLSAgICBpZiAoIWJvZHkpIHsKLSAgICAgICAgQVNTRVJUKGV4
Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgfQotICAgIGlmIChtX2Zv
cmNlVXNlc0FyZ3VtZW50cykKLSAgICAgICAgYm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOwotICAg
IGJvZHktPmZpbmlzaFBhcnNpbmcobV9wYXJhbWV0ZXJzLCBtX25hbWUpOwotICAgIHJlY29yZFBh
cnNlKGJvZHktPmZlYXR1cmVzKCksIGJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGJvZHkt
PmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwotCi0gICAgT3du
UHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC5yZWxlYXNlKCk7Ci0gICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJK
SVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKLSAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGds
b2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwg
dHJ1ZSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2Rl
R2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHku
Z2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFi
bGUoKSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCksICEhbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QtPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBp
bGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7Ci0gICAgaWYg
KChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4o
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAg
Ym9keS0+ZGVzdHJveURhdGEoKTsKKyAgICAKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29k
ZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIE93
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0Zv
cihleGVjLCBzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA/IE9wdGlt
aXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDb25zdHJ1Y3QsIGV4
Y2VwdGlvbik7CisgICAgaWYgKCFuZXdDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBleGNlcHRp
b247Ci0gICAgfQogCisgICAgbmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9p
bnRlcl9jYXN0PENvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QucmVsZWFzZSgpKSk7
CisgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOwor
ICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5tX251bVBhcmFtZXRlcnM7CiAgICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNv
bnN0cnVjdCk7CiAgICAgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyA9IG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5tX251bUNhcHR1cmVkVmFyczsKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKLSAgICBib2R5LT5kZXN0cm95
RGF0YSgpOwotICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5jb3B5RGF0YUZyb21BbHRlcm5h
dGl2ZSgpOwotCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
blVzZUpJVCgpKSB7CisgICAgaWYgKGdsb2JhbERhdGEtPmNhblVzZUpJVCgpKSB7CiAgICAgICAg
IGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29k
ZTo6REZHSklUKQogICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGVGdW5j
dGlvbihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCks
IG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hl
Y2spOwpAQCAtNTM0LDcgKzUzMSw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
bXBpbGVGb3IKICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBKSVQ6
OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LmdldCgpLCAmbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAg
ICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUOjpjb21waWxlKGdsb2JhbERhdGEsIG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCAmbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2spOwogICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAg
ICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTc1
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IEV4
Y2VwdGlvbkluZm87CiAgICAgCiAgICAgZW51bSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHsgQ29k
ZUZvckNhbGwsIENvZGVGb3JDb25zdHJ1Y3QgfTsKKyAgICBlbnVtIENvbXBpbGF0aW9uS2luZCB7
IEZpcnN0Q29tcGlsYXRpb24sIE9wdGltaXppbmdDb21waWxhdGlvbiB9OwogCiAgICAgY2xhc3Mg
RXhlY3V0YWJsZUJhc2UgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VDsKQEAgLTQ2MCw2ICs0NjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VS
VChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgICAgICAgICByZXR1cm4gKm1fY29kZUJs
b2NrRm9yQ29uc3RydWN0OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBQYXNzT3duUHRy
PEZ1bmN0aW9uQ29kZUJsb2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRp
b25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9u
KTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMg
PSAwKQogICAgICAgICB7CkBAIC02MDYsNiArNjA5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OkpJVFR5cGUpOwog
ICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklU
VHlwZSk7CiAgICAgICAgIAorICAgICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2Rl
QmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9j
b2RlQmxvY2tGb3JDYWxsOworICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0
cnVjdCk7CisgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1
cmVGbGFnczsKICAgICAgICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyA6IDMxOwog
ICAgICAgICBib29sIG1fZm9yY2VVc2VzQXJndW1lbnRzIDogMTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111108</attachid>
            <date>2011-10-14 16:54:43 -0700</date>
            <delta_ts>2011-10-14 17:10:57 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>producecb_patch_2.diff</filename>
            <type>text/plain</type>
            <size>16585</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc1MzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMTAtMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUgc2hvdWxkIGV4cG9zZSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgdW5h
dHRhY2hlZCBGdW5jdGlvbkNvZGVCbG9ja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcwMTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1
Y2VDb2RlQmxvY2tGb3IoKSBhbmQgcmV3aXJlZCBjb21waWxlRm9yQ2FsbEludGVybmFsKCkKKyAg
ICAgICAgYW5kIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbCgpIHRvIHVzZSB0aGlzIG1ldGhv
ZC4gVGhpcyByZXF1aXJlZCBtb3JlIGNsZWFubHkKKyAgICAgICAgZXhwb3Npbmcgc29tZSBvZiBD
b2RlQmxvY2sncyB0aWVyaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIG1vdmluZyB0aGUgQ29tcGlsYXRp
b25LaW5kCisgICAgICAgIGVudW0gdG8gRXhlY3V0YWJsZS5oLCBhcyB0aGlzIHdhcyB0aGUgZWFz
aWVzdCB3YXkgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlCisgICAgICAgIGRlY2xhcmF0aW9u
cy9kZWZpbml0aW9ucyBvZiBDb2RlQmxvY2ssIEZ1bmN0aW9uRXhlY3V0YWJsZSwgYW5kIEJ5dGVj
b2RlR2VuZXJhdG9yLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb20pOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRBbHRlcm5hdGl2ZSk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3Ip
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJu
YWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1
Y3RJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrRm9yKToKKwogMjAxMS0xMC0xMyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmxlY3RpdmUgQXJndW1l
bnRzIHJldHJpZXZhbCBzaG91bGQgYmUgaGFyZGVuZWQgZm9yIHRoZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk3NTMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MDgsMTQgKzE4MDgsMTkgQEAgaW5saW5lIHZvaWQgcmVwbGFjZUV4aXN0aW5n
RW50cmllcyhWZWN0bwogICAgICAgICB0YXJnZXRbaV0gPSBzb3VyY2VbaV07CiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpCit2b2lkIENvZGVCbG9jazo6Y29w
eURhdGFGcm9tKENvZGVCbG9jayogYWx0ZXJuYXRpdmUpCiB7Ci0gICAgaWYgKCFtX2FsdGVybmF0
aXZlKQorICAgIGlmICghYWx0ZXJuYXRpdmUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBy
ZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fY29uc3RhbnRSZWdpc3RlcnMsIG1fYWx0ZXJuYXRpdmUt
Pm1fY29uc3RhbnRSZWdpc3RlcnMpOwotICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMobV9mdW5j
dGlvbkRlY2xzLCBtX2FsdGVybmF0aXZlLT5tX2Z1bmN0aW9uRGVjbHMpOwotICAgIHJlcGxhY2VF
eGlzdGluZ0VudHJpZXMobV9mdW5jdGlvbkV4cHJzLCBtX2FsdGVybmF0aXZlLT5tX2Z1bmN0aW9u
RXhwcnMpOworICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMobV9jb25zdGFudFJlZ2lzdGVycywg
YWx0ZXJuYXRpdmUtPm1fY29uc3RhbnRSZWdpc3RlcnMpOworICAgIHJlcGxhY2VFeGlzdGluZ0Vu
dHJpZXMobV9mdW5jdGlvbkRlY2xzLCBhbHRlcm5hdGl2ZS0+bV9mdW5jdGlvbkRlY2xzKTsKKyAg
ICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fZnVuY3Rpb25FeHBycywgYWx0ZXJuYXRpdmUtPm1f
ZnVuY3Rpb25FeHBycyk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5h
dGl2ZSgpCit7CisgICAgY29weURhdGFGcm9tKG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOwogfQogCiAj
aWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDk3NTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyBy
ZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9j
az4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7
IH0KKyAgICAgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0
ZXJuYXRpdmUpIHsgbV9hbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlOyB9CiAgICAgICAgIAogICAg
ICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKQEAgLTczMiw2ICs3MzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHNocmlua1RvRml0KCk7CiAgICAg
ICAgIAorICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbShDb2RlQmxvY2sqIGFsdGVybmF0aXZlKTsK
ICAgICAgICAgdm9pZCBjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogICAgICAgICAKICAgICAg
ICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIHRpZXJlZCBjb21waWxhdGlvbiBr
aWNrcyBpbi4gVGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTc1MzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDggKzkyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldER1bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBz
R2VuZXJhdGVkQ29kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBzR2VuZXJhdGVkQ29kZSgp
OwogCi0gICAgICAgIGVudW0gQ29tcGlsYXRpb25LaW5kIHsgRmlyc3RDb21waWxhdGlvbiwgT3B0
aW1pemluZ0NvbXBpbGF0aW9uIH07Ci0gICAgICAgIAogICAgICAgICBCeXRlY29kZUdlbmVyYXRv
cihQcm9ncmFtTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29k
ZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKICAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVu
Y3Rpb25Cb2R5Tm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sq
LCBDb21waWxhdGlvbktpbmQpOwogICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2NrKiwgQ29tcGlsYXRp
b25LaW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiA5NzUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgSlNPYmpl
Y3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogICAgIE93blB0cjxDb2RlQmxvY2s+
IHByZXZpb3VzQ29kZUJsb2NrID0gbV9ldmFsQ29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICBBU1NF
UlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2Rl
QmxvY2spOwogICAgIG1fZXZhbENvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2Nr
KHRoaXMsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVDaGFpbk5vZGUt
PmxvY2FsRGVwdGgoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgT3duUHRy
PEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJh
dG9yKGV2YWxOb2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1i
b2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksICEhbV9ldmFsQ29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5
dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOworICAgIE93blB0cjxCeXRlY29k
ZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihldmFs
Tm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fZXZhbENvZGVCbG9jay0+c3ltYm9sVGFibGUo
KSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCAhIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYg
KChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7CiAgICAgICAgIG1fZXZhbENv
ZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJs
b2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0
YSgpOwpAQCAtMjk4LDcgKzI5OCw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29t
cGlsZUludGUKICAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fcHJv
Z3JhbUNvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKICAgICBtX3Byb2dyYW1D
b2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2Rl
LCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHByZXZpb3VzQ29kZUJsb2NrLnJl
bGVhc2UoKSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0
UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5v
ZGUsICZnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQo
KSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRv
cjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGls
YXRpb24pKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHByb2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWluTm9k
ZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgp
LCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IE9wdGltaXppbmdDb21waWxh
dGlvbiA6IEZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0
b3ItPmdlbmVyYXRlKCkpKSB7CiAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNl
QWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOwpAQCAt
NDA2LDE3ICs0MDYsMTQgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9w
dAogICAgIHJldHVybiBlcnJvcjsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlw
ZSBqaXRUeXBlKQorUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeGVjdXRh
YmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24p
CiB7Ci0jaWYgIUVOQUJMRShKSVQpCi0gICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwotI2VuZGlm
Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CisgICAgZXhjZXB0aW9uID0gMDsKICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKICAg
ICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFy
c2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBt
X3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJp
Y3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoIWJvZHkpIHsKICAgICAg
ICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgICAg
IHJldHVybiBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPigpOwogICAgIH0KICAgICBpZiAo
bV9mb3JjZVVzZXNBcmd1bWVudHMpCiAgICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsK
QEAgLTQyNSwyNiArNDIyLDQyIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9k
ZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXND
b2RlQmxvY2sgPSBtX2NvZGVCbG9ja0ZvckNhbGwucmVsZWFzZSgpOwotICAgIEFTU0VSVCgoaml0
VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7
Ci0gICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2Nr
KHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBz
b3VyY2UoKS5zdGFydE9mZnNldCgpLCBmYWxzZSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgp
KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3
IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9j
a0ZvckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgISFtX2Nv
ZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1p
emluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7
Ci0gICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAg
IG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxv
Y2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgICAgICBi
b2R5LT5kZXN0cm95RGF0YSgpOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0
OworICAgIEFTU0VSVCgoY29tcGlsYXRpb25LaW5kID09IEZpcnN0Q29tcGlsYXRpb24pID09ICFj
b2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKSk7CisgICAgcmVzdWx0ID0gYWRvcHRQdHIo
bmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBz
b3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBzcGVjaWFsaXphdGlv
bktpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4o
KSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5l
dyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwgcmVzdWx0LT5z
eW1ib2xUYWJsZSgpLCByZXN1bHQuZ2V0KCksIGNvbXBpbGF0aW9uS2luZCkpKTsKKyAgICBleGNl
cHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CisgICAgYm9keS0+ZGVzdHJveURhdGEoKTsK
KyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4oKTsKKworICAgIHJlc3VsdC0+Y29weURhdGFGcm9tKGNvZGVCbG9ja0ZvcihzcGVj
aWFsaXphdGlvbktpbmQpLmdldCgpKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30K
KworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbChF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRl
KiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQoreworI2lmICFFTkFC
TEUoSklUKQorICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKKyNlbmRpZgorICAgIEpTT2JqZWN0
KiBleGNlcHRpb247CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5v
ZGUtPmdsb2JhbERhdGE7CisgICAgCisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJv
dHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgT3duUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxhdGlv
biA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOworICAgIGlmICgh
bmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgIH0KIAorICAgIG5l
d0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+
KG1fY29kZUJsb2NrRm9yQ2FsbC5yZWxlYXNlKCkpKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwg
PSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNh
bGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPm1fbnVtUGFyYW1ldGVyczsKICAgICBBU1NFUlQobV9u
dW1QYXJhbWV0ZXJzRm9yQ2FsbCk7CiAgICAgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyA9IG1fY29k
ZUJsb2NrRm9yQ2FsbC0+bV9udW1DYXB0dXJlZFZhcnM7CiAgICAgbV9zeW1ib2xUYWJsZSA9IG1f
Y29kZUJsb2NrRm9yQ2FsbC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKIAotICAgIGJvZHktPmRlc3Ry
b3lEYXRhKCk7Ci0gICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2
ZSgpOwotCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVz
ZUpJVCgpKSB7CisgICAgaWYgKGdsb2JhbERhdGEtPmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGJv
b2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6
REZHSklUKQogICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGVGdW5jdGlv
bihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENv
ZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwpAQCAtNDU3LDcgKzQ3
MCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICAgICAg
ICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xU
YWJsZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xv
YmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrKTsKKyAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6OmNvbXBpbGUo
Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrKTsKICAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQog
ICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKQEAg
LTQ4OCw0MCArNTAxLDI0IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVG
b3IKIHsKICAgICBVTlVTRURfUEFSQU0oaml0VHlwZSk7CiAgICAgCi0gICAgSlNPYmplY3QqIGV4
Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKLSAgICBSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25C
b2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9w
YXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNl
Tm9ybWFsLCAmZXhjZXB0aW9uKTsKLSAgICBpZiAoIWJvZHkpIHsKLSAgICAgICAgQVNTRVJUKGV4
Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgfQotICAgIGlmIChtX2Zv
cmNlVXNlc0FyZ3VtZW50cykKLSAgICAgICAgYm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOwotICAg
IGJvZHktPmZpbmlzaFBhcnNpbmcobV9wYXJhbWV0ZXJzLCBtX25hbWUpOwotICAgIHJlY29yZFBh
cnNlKGJvZHktPmZlYXR1cmVzKCksIGJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGJvZHkt
PmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwotCi0gICAgT3du
UHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC5yZWxlYXNlKCk7Ci0gICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJK
SVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKLSAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGds
b2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwg
dHJ1ZSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2Rl
R2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHku
Z2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFi
bGUoKSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCksICEhbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QtPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBp
bGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7Ci0gICAgaWYg
KChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4o
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAg
Ym9keS0+ZGVzdHJveURhdGEoKTsKKyAgICAKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29k
ZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIE93
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0Zv
cihleGVjLCBzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA/IE9wdGlt
aXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDb25zdHJ1Y3QsIGV4
Y2VwdGlvbik7CisgICAgaWYgKCFuZXdDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBleGNlcHRp
b247Ci0gICAgfQogCisgICAgbmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9p
bnRlcl9jYXN0PENvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QucmVsZWFzZSgpKSk7
CisgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOwor
ICAgIAogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5tX251bVBhcmFtZXRlcnM7CiAgICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNv
bnN0cnVjdCk7CiAgICAgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyA9IG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5tX251bUNhcHR1cmVkVmFyczsKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKLSAgICBib2R5LT5kZXN0cm95
RGF0YSgpOwotICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5jb3B5RGF0YUZyb21BbHRlcm5h
dGl2ZSgpOwotCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
blVzZUpJVCgpKSB7CisgICAgaWYgKGdsb2JhbERhdGEtPmNhblVzZUpJVCgpKSB7CiAgICAgICAg
IGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29k
ZTo6REZHSklUKQogICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGVGdW5j
dGlvbihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCks
IG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hl
Y2spOwpAQCAtNTM0LDcgKzUzMSw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
bXBpbGVGb3IKICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBKSVQ6
OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LmdldCgpLCAmbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAg
ICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUOjpjb21waWxlKGdsb2JhbERhdGEsIG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCAmbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2spOwogICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAg
ICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTc1
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IEV4
Y2VwdGlvbkluZm87CiAgICAgCiAgICAgZW51bSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHsgQ29k
ZUZvckNhbGwsIENvZGVGb3JDb25zdHJ1Y3QgfTsKKyAgICBlbnVtIENvbXBpbGF0aW9uS2luZCB7
IEZpcnN0Q29tcGlsYXRpb24sIE9wdGltaXppbmdDb21waWxhdGlvbiB9OwogCiAgICAgY2xhc3Mg
RXhlY3V0YWJsZUJhc2UgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VDsKQEAgLTQ2MCw2ICs0NjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VS
VChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgICAgICAgICByZXR1cm4gKm1fY29kZUJs
b2NrRm9yQ29uc3RydWN0OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBQYXNzT3duUHRy
PEZ1bmN0aW9uQ29kZUJsb2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKiwgQ29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09i
amVjdComIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsKEV4
ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUq
IGNhbGxlZUFyZ3NFeGVjID0gMCkKICAgICAgICAgewpAQCAtNjA2LDYgKzYwOSwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhl
Y1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRD
b2RlOjpKSVRUeXBlKTsKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRl
cm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4
ZWMsIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAgICAKKyAgICAgICAgT3duUHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiYgY29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICAgICAgICAgIEFTU0VSVChraW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhl
Y3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRW
YXJpYWJsZXMgOiAzMTsKICAgICAgICAgYm9vbCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyA6IDE7Cg==
</data>
<flag name="review"
          id="108822"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>