<?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>42873</bug_id>
          
          <creation_ts>2010-07-23 00:00:20 -0700</creation_ts>
          <short_desc>Web Inspector: error info propagation in InspectorBackendDispatch should be improved</short_desc>
          <delta_ts>2010-07-23 04:59:28 -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>Web Inspector (Deprecated)</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>255221</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-07-23 00:00:20 -0700</bug_when>
    <thetext>it would be better to push a detailed error description back 
to the caller if some argument required by function spec is missed or has incorrect type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255270</commentid>
    <comment_count>1</comment_count>
      <attachid>62398</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-23 02:23:03 -0700</bug_when>
    <thetext>Created attachment 62398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255273</commentid>
    <comment_count>2</comment_count>
      <attachid>62398</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-07-23 02:36:38 -0700</bug_when>
    <thetext>Comment on attachment 62398
Patch


WebCore/inspector/CodeGeneratorInspector.pm:245
 +      push(@function, &quot;    if (args-&gt;length() != &quot; . $expectedParametersCount . &quot;) {&quot;);

can be simplified a bit.
push(@function, &quot;    if (args-&gt;length() != $expectedParametersCount) {&quot;);


WebCore/inspector/CodeGeneratorInspector.pm:246
 +      push(@function, &quot;        *exception = String::format(\&quot;Wrong number of parameters: %d (expected: $expectedParametersCount)\&quot;, args-&gt;length());&quot;);
It would be better to also print the parameter name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255274</commentid>
    <comment_count>3</comment_count>
      <attachid>62399</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-23 02:39:45 -0700</bug_when>
    <thetext>Created attachment 62399
InspectorBackendDispatcher.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255320</commentid>
    <comment_count>4</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-23 04:59:08 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/inspector/CodeGeneratorInspector.pm
Committed r63962</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255322</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-23 04:59:28 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 62398 [details])
&gt; 
&gt; WebCore/inspector/CodeGeneratorInspector.pm:245
&gt;  +      push(@function, &quot;    if (args-&gt;length() != &quot; . $expectedParametersCount . &quot;) {&quot;);
&gt; 
&gt; can be simplified a bit.
&gt; push(@function, &quot;    if (args-&gt;length() != $expectedParametersCount) {&quot;);
&gt; 
&gt; 
&gt; WebCore/inspector/CodeGeneratorInspector.pm:246
&gt;  +      push(@function, &quot;        *exception = String::format(\&quot;Wrong number of parameters: %d (expected: $expectedParametersCount)\&quot;, args-&gt;length());&quot;);
&gt; It would be better to also print the parameter name.

All comments have been addressed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62398</attachid>
            <date>2010-07-23 02:23:03 -0700</date>
            <delta_ts>2010-07-23 02:46:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42873-20100723132301.patch</filename>
            <type>text/plain</type>
            <size>4717</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWI1Y2ZhOTBjYjkyODM3YjExYTg1NTFhODQzZTlmMzQ2NDhiYmJiZS4uZjZlNmVhNDM2ZDViZWIz
ZTRiMDU1Njk4MmQxMmYzOWRmZjk3M2Q3MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNy0yMyAgWXVy
eSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBlcnJvciBpbmZvIHBy
b3BhZ2F0aW9uIGluIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaCBzaG91bGQgYmUgaW1wcm92ZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyODczCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbTogcmVwb3J0IHdy
b25nIHBhcmFtZXRlciBjb3VudCBhbmQgd3JvbmcKKyAgICAgICAgcGFyYW1ldGVyZSB0eXBlIGVy
cnJvciB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kIGNhbGxlcgorCiAyMDEwLTA3LTIyICBJbHlhIFRp
a2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZ
dXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucG0KaW5kZXggNWFkZTRhNjdlOTYxNzE2MjUzY2Q4ZTAwYTNjMmI5ZWYyNDczNDgxOC4uZDQx
NzJkNzE0MTMwNjgzYWI4MWIzZDI3MDkzNTNiOGE2YzJlNDRlZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0yMzMsMTggKzIzMywyNiBAQCBzdWIg
Z2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24KICAgICBtYXAoJGJhY2tlbmRUeXBlc3skXy0+dHlwZX0g
PSAxLCBAYXJnc0ZpbHRlcmVkKTsgIyByZWdpc3RlciByZXF1aXJlZCB0eXBlcwogICAgIG15ICRh
cmd1bWVudHMgPSBqb2luKCIsICIsIG1hcCgkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsicGFy
YW0ifSAuICIgIiAuICRfLT5uYW1lLCBAYXJnc0ZpbHRlcmVkKSk7CiAKLSAgICBteSAkc2lnbmF0
dXJlID0gIiAgICB2b2lkICR7ZnVuY3Rpb25OYW1lfShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmdzKTsiOworICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdW5jdGlvbk5hbWV9
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKTsiOwog
ICAgICEkYmFja2VuZE1ldGhvZHN7JHtzaWduYXR1cmV9fSB8fCBkaWUgIkR1cGxpY2F0ZSBmdW5j
dGlvbiB3YXMgZGV0ZWN0ZWQgZm9yIHNpZ25hdHVyZSAnJHNpZ25hdHVyZScuIjsKICAgICAkYmFj
a2VuZE1ldGhvZHN7JHtzaWduYXR1cmV9fSA9ICRmdW5jdGlvbk5hbWU7CiAKICAgICBteSBAZnVu
Y3Rpb247Ci0gICAgIyBTa2lwIHBhcmFtZXRlciBuYW1lIGlmIG5vIGFyZ3VtZW50cyBpbiB0aGUg
YXJyYXkuIEp1c3QgdG8gYXZvaWQgdW51c2VkIHBhcmFtZXRlciB3YXJuaW5nLgotICAgIHB1c2go
QGZ1bmN0aW9uLCAidm9pZCAke2JhY2tlbmRDbGFzc05hbWV9Ojoke2Z1bmN0aW9uTmFtZX0oUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4iIC4gKCBzY2FsYXIoQGFyZ3NGaWx0ZXJlZCkgPyAiIGFy
Z3MpIiA6ICIpIikpOworICAgIHB1c2goQGZ1bmN0aW9uLCAidm9pZCAke2JhY2tlbmRDbGFzc05h
bWV9Ojoke2Z1bmN0aW9uTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3Ry
aW5nKiBleGNlcHRpb24pIik7CiAgICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7CiAgICAgbXkgJGkg
PSAxOyAjIHplcm8gZWxlbWVudCBpcyB0aGUgbWV0aG9kIG5hbWUuCisgICAgbXkgJGV4cGVjdGVk
UGFyYW1ldGVyc0NvdW50ID0gc2NhbGFyKEBhcmdzRmlsdGVyZWQpOworICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAiIC4gJGV4cGVjdGVkUGFyYW1ldGVyc0Nv
dW50IC4gIikgeyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAqZXhjZXB0aW9uID0g
U3RyaW5nOjpmb3JtYXQoXCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVk
OiAkZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnQpXCIsIGFyZ3MtPmxlbmd0aCgpKTsiKTsKKyAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Iik7CisgICAgcHVz
aChAZnVuY3Rpb24sICIgICAgICAgIHJldHVybjsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICB9Iik7CisKICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEBhcmdzRmlsdGVyZWQpIHsKLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICR0eXBlVHJhbnNmb3JteyRwYXJhbWV0ZXIt
PnR5cGV9LT57InJldFZhbCJ9IC4gIiAiIC4gJHBhcmFtZXRlci0+bmFtZSAuICI7Iik7Ci0gICAg
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghYXJncy0+Z2V0KCIgLiAkaSAuICIpLT5hcyIg
LiAkdHlwZVRyYW5zZm9ybXskcGFyYW1ldGVyLT50eXBlfS0+eyJhY2Nlc3NvclN1ZmZpeCJ9IC4g
IigmIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKSkgeyIpOworICAgICAgICBteSAkcGFyYW1ldGVy
VHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICIg
LiAkdHlwZVRyYW5zZm9ybXskcGFyYW1ldGVyVHlwZX0tPnsicmV0VmFsIn0gLiAiICIgLiAkcGFy
YW1ldGVyLT5uYW1lIC4gIjsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKCFh
cmdzLT5nZXQoIiAuICRpIC4gIiktPmFzIiAuICR0eXBlVHJhbnNmb3JteyRwYXJhbWV0ZXJUeXBl
fS0+eyJhY2Nlc3NvclN1ZmZpeCJ9IC4gIigmIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKSkgeyIp
OworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgKmV4Y2VwdGlvbiA9IFwiRmFpbGVk
IHRvIGNvbnZlcnQgcGFyYW1ldGVyICRpIHRvICRwYXJhbWV0ZXJUeXBlXCI7Iik7CiAgICAgICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKICAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJldHVybjsiKTsKICAgICAgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgfSIpOwpAQCAtMjY0LDcgKzI3Miw3IEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmRE
aXNwYXRjaGVyCiAKICAgICBwdXNoKEBib2R5LCAidm9pZCAke2JhY2tlbmRDbGFzc05hbWV9Ojpk
aXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogZXhjZXB0aW9uKSIpOwogICAg
IHB1c2goQGJvZHksICJ7Iik7Ci0gICAgcHVzaChAYm9keSwgIiAgICB0eXBlZGVmIHZvaWQgKCR7
YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxlcikoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncyk7Iik7CisgICAgcHVzaChAYm9keSwgIiAgICB0eXBlZGVmIHZvaWQgKCR7YmFja2Vu
ZENsYXNzTmFtZX06OipDYWxsSGFuZGxlcikoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJn
cywgU3RyaW5nKiBleGNlcHRpb24pOyIpOwogICAgIHB1c2goQGJvZHksICIgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOyIpOwogICAgIHB1c2goQGJv
ZHksICIgICAgREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7
Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7Iik7
CkBAIC0zMDEsMTEgKzMwOSwxMSBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcgogICAg
IHB1c2goQGJvZHksICIgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3Ig
aXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZE5hbWUpOyIpOwogICAgIHB1c2goQGJvZHksICIg
ICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7Iik7CiAgICAgcHVzaChAYm9keSwgIiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Iik7Ci0gICAgcHVzaChAYm9keSwgIiAgICAgICAg
U3RyaW5nOjpmb3JtYXQoXCJFcnJvcjogSW52YWxpZCBtZXRob2QgbmFtZS4gJyVzJyB3YXNuJ3Qg
Zm91bmQuXCIsIG1ldGhvZE5hbWUudXRmOCgpLmRhdGEoKSk7Iik7CisgICAgcHVzaChAYm9keSwg
IiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KFwiRXJyb3I6IEludmFsaWQgbWV0
aG9kIG5hbWUuICclcycgd2Fzbid0IGZvdW5kLlwiLCBtZXRob2ROYW1lLnV0ZjgoKS5kYXRhKCkp
OyIpOwogICAgIHB1c2goQGJvZHksICIgICAgICAgIHJldHVybjsiKTsKICAgICBwdXNoKEBib2R5
LCAiICAgIH0iKTsKICAgICBwdXNoKEBib2R5LCAiIik7Ci0gICAgcHVzaChAYm9keSwgIiAgICAo
KCp0aGlzKS4qaXQtPnNlY29uZCkobWVzc2FnZUFycmF5KTsiKTsKKyAgICBwdXNoKEBib2R5LCAi
ICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShtZXNzYWdlQXJyYXksIGV4Y2VwdGlvbik7Iik7CiAg
ICAgcHVzaChAYm9keSwgIn0iKTsKICAgICByZXR1cm4gQGJvZHk7CiB9Cg==
</data>
<flag name="review"
          id="50584"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>62399</attachid>
            <date>2010-07-23 02:39:45 -0700</date>
            <delta_ts>2010-07-23 02:39:45 -0700</delta_ts>
            <desc>InspectorBackendDispatcher.cpp</desc>
            <filename>InspectorBackendDispatcher.cpp</filename>
            <type>application/octet-stream</type>
            <size>58110</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
I2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCIKCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIK
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgojaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
Cm5hbWVzcGFjZSBXZWJDb3JlIHsKCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0
b3JlTGFzdEFjdGl2ZVBhbmVsKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmlu
ZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgICpl
eGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVk
IChleHBlY3RlZDogMSkiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIHBhbmVsTmFtZTsKICAgIGlm
ICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmcGFuZWxOYW1lKSkgewogICAgICAgICpleGNlcHRp
b24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEgdG8gU3RyaW5nIjsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3Rv
ckJhY2tlbmQtPnN0b3JlTGFzdEFjdGl2ZVBhbmVsKHBhbmVsTmFtZSk7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+
bGVuZ3RoKCkgIT0gMSkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3Jv
bmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMSkiLCBhcmdzLT5sZW5ndGgo
KSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgU3RyaW5nIHNldHRpbmdzOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzU3RyaW5nKCZzZXR0
aW5ncykpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRl
ciAxIHRvIFN0cmluZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0
dXJuOwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5zYXZlQXBwbGljYXRpb25TZXR0aW5n
cyhzZXR0aW5ncyk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNhdmVTZXNz
aW9uU2V0dGluZ3MoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNl
cHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgKmV4Y2VwdGlv
biA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVj
dGVkOiAxKSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICByZXR1cm47CiAgICB9CiAgICBTdHJpbmcgc2V0dGluZ3M7CiAgICBpZiAoIWFyZ3Mt
PmdldCgxKS0+YXNTdHJpbmcoJnNldHRpbmdzKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFp
bGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEgdG8gU3RyaW5nIjsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQt
PnNhdmVTZXNzaW9uU2V0dGluZ3Moc2V0dGluZ3MpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjplbmFibGVTZWFyY2hpbmdGb3JOb2RlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0g
MCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9m
IHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbV9pbnNwZWN0
b3JCYWNrZW5kLT5lbmFibGVTZWFyY2hpbmdGb3JOb2RlKCk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmRpc2FibGVTZWFyY2hpbmdGb3JOb2RlKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3Ro
KCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVt
YmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBhcmdzLT5sZW5ndGgoKSk7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbV9p
bnNwZWN0b3JCYWNrZW5kLT5kaXNhYmxlU2VhcmNoaW5nRm9yTm9kZSgpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVNb25pdG9yaW5nWEhSKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVu
Z3RoKCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3Jvbmcg
bnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBhcmdzLT5sZW5ndGgoKSk7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg
bV9pbnNwZWN0b3JCYWNrZW5kLT5lbmFibGVNb25pdG9yaW5nWEhSKCk7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGVNb25pdG9yaW5nWEhSKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVu
Z3RoKCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3Jvbmcg
bnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBhcmdzLT5sZW5ndGgoKSk7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg
bV9pbnNwZWN0b3JCYWNrZW5kLT5kaXNhYmxlTW9uaXRvcmluZ1hIUigpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVSZXNvdXJjZVRyYWNraW5nKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+
bGVuZ3RoKCkgIT0gMSkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3Jv
bmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMSkiLCBhcmdzLT5sZW5ndGgo
KSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgYm9vbCBhbHdheXM7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNCb29sKCZhbHdheXMpKSB7
CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBi
b29sZWFuIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAg
ICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPmVuYWJsZVJlc291cmNlVHJhY2tpbmcoYWx3YXlz
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZVJlc291cmNlVHJh
Y2tpbmcoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24p
CnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0
cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAx
KSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICByZXR1cm47CiAgICB9CiAgICBib29sIGFsd2F5czsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5h
c0Jvb2woJmFsd2F5cykpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0
IHBhcmFtZXRlciAxIHRvIGJvb2xlYW4iOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+ZGlzYWJsZVJlc291
cmNlVHJhY2tpbmcoYWx3YXlzKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0UmVzb3VyY2VDb250ZW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmlu
ZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgICpl
eGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVk
IChleHBlY3RlZDogMikiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBjYWxsSWQ7CiAgICBpZiAoIWFy
Z3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZh
aWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllcjsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmaWRlbnRpZmllcikpIHsKICAg
ICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAyIHRvIHVuc2ln
bmVkIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsK
ICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+Z2V0UmVzb3VyY2VDb250ZW50KGNhbGxJZCwg
aWRlbnRpZmllcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbG9hZFBh
Z2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAwKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmlu
Zzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAwKSIs
IGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPnJlbG9hZFBhZ2UoKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAo
YXJncy0+bGVuZ3RoKCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1h
dCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBhcmdzLT5s
ZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5zdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlm
IChhcmdzLT5sZW5ndGgoKSAhPSAwKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9y
bWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAwKSIsIGFyZ3Mt
Pmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47
CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPnN0b3BUaW1lbGluZVByb2ZpbGVyKCk7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZURlYnVnZ2VyKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJn
cy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgi
V3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMSkiLCBhcmdzLT5sZW5n
dGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAg
fQogICAgYm9vbCBhbHdheXM7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNCb29sKCZhbHdheXMp
KSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0
byBib29sZWFuIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47
CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPmVuYWJsZURlYnVnZ2VyKGFsd2F5cyk7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGVEZWJ1Z2dlcihQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFy
Z3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQo
Ildyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDEpIiwgYXJncy0+bGVu
Z3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAg
IH0KICAgIGJvb2wgYWx3YXlzOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzQm9vbCgmYWx3YXlz
KSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEg
dG8gYm9vbGVhbiI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJu
OwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5kaXNhYmxlRGVidWdnZXIoYWx3YXlzKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0QnJlYWtwb2ludChQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFy
Z3MtPmxlbmd0aCgpICE9IDUpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQo
Ildyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDUpIiwgYXJncy0+bGVu
Z3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAg
IH0KICAgIGxvbmcgY2FsbElkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxs
SWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIg
MSB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47
CiAgICB9CiAgICBTdHJpbmcgc291cmNlSUQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJp
bmcoJnNvdXJjZUlEKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQg
cGFyYW1ldGVyIDIgdG8gU3RyaW5nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXR1cm47CiAgICB9CiAgICB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXI7CiAgICBpZiAo
IWFyZ3MtPmdldCgzKS0+YXNOdW1iZXIoJmxpbmVOdW1iZXIpKSB7CiAgICAgICAgKmV4Y2VwdGlv
biA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMyB0byB1bnNpZ25lZCBsb25nIjsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBib29s
IGVuYWJsZWQ7CiAgICBpZiAoIWFyZ3MtPmdldCg0KS0+YXNCb29sKCZlbmFibGVkKSkgewogICAg
ICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDQgdG8gYm9vbGVh
biI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgU3RyaW5nIGNvbmRpdGlvbjsKICAgIGlmICghYXJncy0+Z2V0KDUpLT5hc1N0cmluZygmY29u
ZGl0aW9uKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1l
dGVyIDUgdG8gU3RyaW5nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPnNldEJyZWFrcG9pbnQoY2FsbElk
LCBzb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlQnJlYWtwb2ludChQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0
aCgpICE9IDIpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51
bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDIpIiwgYXJncy0+bGVuZ3RoKCkpOwog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIFN0
cmluZyBzb3VyY2VJRDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmc291cmNlSUQp
KSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0
byBTdHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsK
ICAgIH0KICAgIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcjsKICAgIGlmICghYXJncy0+Z2V0KDIp
LT5hc051bWJlcigmbGluZU51bWJlcikpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0
byBjb252ZXJ0IHBhcmFtZXRlciAyIHRvIHVuc2lnbmVkIGxvbmciOwogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2Vu
ZC0+cmVtb3ZlQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmFjdGl2YXRlQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5n
dGgoKSAhPSAwKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBu
dW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAwKSIsIGFyZ3MtPmxlbmd0aCgpKTsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBt
X2luc3BlY3RvckJhY2tlbmQtPmFjdGl2YXRlQnJlYWtwb2ludHMoKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVu
Z3RoKCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3Jvbmcg
bnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBhcmdzLT5sZW5ndGgoKSk7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg
bV9pbnNwZWN0b3JCYWNrZW5kLT5kZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cGF1c2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAwKSB7
CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFy
YW1ldGVyczogJWQgKGV4cGVjdGVkOiAwKSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJh
Y2tlbmQtPnBhdXNlKCk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlc3Vt
ZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewog
ICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDApIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5n
Ojpmb3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDApIiwg
YXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJl
dHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+cmVzdW1lKCk7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdmVyU3RhdGVtZW50KFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVu
Z3RoKCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3Jvbmcg
bnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBhcmdzLT5sZW5ndGgoKSk7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg
bV9pbnNwZWN0b3JCYWNrZW5kLT5zdGVwT3ZlclN0YXRlbWVudCgpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpzdGVwSW50b1N0YXRlbWVudChQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgp
ICE9IDApIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJl
ciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDApIiwgYXJncy0+bGVuZ3RoKCkpOwogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5z
cGVjdG9yQmFja2VuZC0+c3RlcEludG9TdGF0ZW1lbnQoKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6c3RlcE91dE9mRnVuY3Rpb24oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAw
KSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2Yg
cGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAwKSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3Rv
ckJhY2tlbmQtPnN0ZXBPdXRPZkZ1bmN0aW9uKCk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAh
PSAxKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIg
b2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAxKSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIHBh
dXNlT25FeGNlcHRpb25zU3RhdGU7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJnBh
dXNlT25FeGNlcHRpb25zU3RhdGUpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8g
Y29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPnNldFBhdXNl
T25FeGNlcHRpb25zU3RhdGUocGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmVkaXRTY3JpcHRTb3VyY2UoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgo
KSAhPSAzKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1i
ZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAzKSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25n
IGNhbGxJZDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAg
ICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEgdG8gbG9uZyI7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg
U3RyaW5nIHNvdXJjZUlEOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzU3RyaW5nKCZzb3VyY2VJ
RCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAy
IHRvIFN0cmluZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJu
OwogICAgfQogICAgU3RyaW5nIG5ld0NvbnRlbnQ7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNT
dHJpbmcoJm5ld0NvbnRlbnQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29u
dmVydCBwYXJhbWV0ZXIgMyB0byBTdHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+ZWRpdFNjcmlw
dFNvdXJjZShjYWxsSWQsIHNvdXJjZUlELCBuZXdDb250ZW50KTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U2NyaXB0U291cmNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0g
MikgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9m
IHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMikiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBjYWxs
SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICAq
ZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmciOwogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIFN0cmlu
ZyBzb3VyY2VJRDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc1N0cmluZygmc291cmNlSUQpKSB7
CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMiB0byBT
dHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAg
IH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+Z2V0U2NyaXB0U291cmNlKGNhbGxJZCwgc291cmNl
SUQpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVQcm9maWxlcihQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAg
aWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpm
b3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDEpIiwgYXJn
cy0+bGVuZ3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVy
bjsKICAgIH0KICAgIGJvb2wgYWx3YXlzOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzQm9vbCgm
YWx3YXlzKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1l
dGVyIDEgdG8gYm9vbGVhbiI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cmV0dXJuOwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5lbmFibGVQcm9maWxlcihhbHdh
eXMpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlUHJvZmlsZXIo
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAg
IGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6
Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAxKSIsIGFy
Z3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1
cm47CiAgICB9CiAgICBib29sIGFsd2F5czsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc0Jvb2wo
JmFsd2F5cykpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFt
ZXRlciAxIHRvIGJvb2xlYW4iOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+ZGlzYWJsZVByb2ZpbGVyKGFs
d2F5cyk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0YXJ0UHJvZmlsaW5n
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAg
ICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6
OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBh
cmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0
dXJuOwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5zdGFydFByb2ZpbGluZygpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdG9wUHJvZmlsaW5nKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+
bGVuZ3RoKCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3Jv
bmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBhcmdzLT5sZW5ndGgo
KSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5zdG9wUHJvZmlsaW5nKCk7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldFByb2ZpbGVIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkg
IT0gMSkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVy
IG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMSkiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBj
YWxsSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAg
ICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmciOwog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1f
aW5zcGVjdG9yQmFja2VuZC0+Z2V0UHJvZmlsZUhlYWRlcnMoY2FsbElkKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJvZmlsZShQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9
IDIpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBv
ZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDIpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgY2Fs
bElkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAg
KmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICB1bnNp
Z25lZCBsb25nIHVpZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmdWlkKSkgewog
ICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gdW5z
aWduZWQgbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJu
OwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5nZXRQcm9maWxlKGNhbGxJZCwgdWlkKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlUHJvZmlsZShQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFy
Z3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQo
Ildyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDEpIiwgYXJncy0+bGVu
Z3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAg
IH0KICAgIHVuc2lnbmVkIGxvbmcgdWlkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVy
KCZ1aWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0
ZXIgMSB0byB1bnNpZ25lZCBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPnJlbW92ZVByb2ZpbGUo
dWlkKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y2xlYXJQcm9maWxlcyhQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAg
aWYgKGFyZ3MtPmxlbmd0aCgpICE9IDApIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpm
b3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDApIiwgYXJn
cy0+bGVuZ3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVy
bjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+Y2xlYXJQcm9maWxlcygpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjp0YWtlSGVhcFNuYXBzaG90KFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+
bGVuZ3RoKCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3Jv
bmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCkiLCBhcmdzLT5sZW5ndGgo
KSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgbV9pbnNwZWN0b3JCYWNrZW5kLT50YWtlSGVhcFNuYXBzaG90KCk7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnNldEluamVjdGVkU2NyaXB0U291cmNlKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+
bGVuZ3RoKCkgIT0gMSkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3Jv
bmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMSkiLCBhcmdzLT5sZW5ndGgo
KSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgU3RyaW5nIHNjcmlwdFNvdXJjZTsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygm
c2NyaXB0U291cmNlKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQg
cGFyYW1ldGVyIDEgdG8gU3RyaW5nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPnNldEluamVjdGVkU2Ny
aXB0U291cmNlKHNjcmlwdFNvdXJjZSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsK
ICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJh
bWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDUpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgY2FsbElkOwog
ICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgKmV4Y2Vw
dGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIGluamVj
dGVkU2NyaXB0SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJmluamVjdGVkU2Ny
aXB0SWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0
ZXIgMiB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1
cm47CiAgICB9CiAgICBTdHJpbmcgbWV0aG9kTmFtZTsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5h
c1N0cmluZygmbWV0aG9kTmFtZSkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBj
b252ZXJ0IHBhcmFtZXRlciAzIHRvIFN0cmluZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIGFyZ3VtZW50czsKICAgIGlmICgh
YXJncy0+Z2V0KDQpLT5hc1N0cmluZygmYXJndW1lbnRzKSkgewogICAgICAgICpleGNlcHRpb24g
PSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDQgdG8gU3RyaW5nIjsKICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBib29sIGFzeW5jOwog
ICAgaWYgKCFhcmdzLT5nZXQoNSktPmFzQm9vbCgmYXN5bmMpKSB7CiAgICAgICAgKmV4Y2VwdGlv
biA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgNSB0byBib29sZWFuIjsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3Rv
ckJhY2tlbmQtPmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdChjYWxsSWQsIGluamVjdGVkU2NyaXB0
SWQsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXN5bmMpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3Ro
KCkgIT0gMSkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVt
YmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMSkiLCBhcmdzLT5sZW5ndGgoKSk7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3Ry
aW5nIHNjcmlwdFNvdXJjZTsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmc2NyaXB0
U291cmNlKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1l
dGVyIDEgdG8gU3RyaW5nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPmFkZFNjcmlwdFRvRXZhbHVhdGVP
bkxvYWQoc2NyaXB0U291cmNlKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAw
KSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2Yg
cGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAwKSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3Rv
ckJhY2tlbmQtPnJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENoaWxkTm9kZXMoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgo
KSAhPSAyKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1i
ZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAyKSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25n
IGNhbGxJZDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAg
ICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEgdG8gbG9uZyI7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg
bG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsK
ICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAyIHRvIGxv
bmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0K
ICAgIG1faW5zcGVjdG9yQmFja2VuZC0+Z2V0Q2hpbGROb2RlcyhjYWxsSWQsIG5vZGVJZCk7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldEF0dHJpYnV0ZShQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3Mt
Pmxlbmd0aCgpICE9IDQpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldy
b25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDQpIiwgYXJncy0+bGVuZ3Ro
KCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0K
ICAgIGxvbmcgY2FsbElkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQp
KSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0
byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAg
ICB9CiAgICBsb25nIGVsZW1lbnRJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigm
ZWxlbWVudElkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFy
YW1ldGVyIDIgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cmV0dXJuOwogICAgfQogICAgU3RyaW5nIG5hbWU7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNT
dHJpbmcoJm5hbWUpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBw
YXJhbWV0ZXIgMyB0byBTdHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHJldHVybjsKICAgIH0KICAgIFN0cmluZyB2YWx1ZTsKICAgIGlmICghYXJncy0+Z2V0KDQp
LT5hc1N0cmluZygmdmFsdWUpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29u
dmVydCBwYXJhbWV0ZXIgNCB0byBTdHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+c2V0QXR0cmli
dXRlKGNhbGxJZCwgZWxlbWVudElkLCBuYW1lLCB2YWx1ZSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OnJlbW92ZUF0dHJpYnV0ZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMp
IHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBw
YXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDMpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgY2FsbElk
OwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgKmV4
Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIGVs
ZW1lbnRJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmZWxlbWVudElkKSkgewog
ICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gbG9u
ZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgU3RyaW5nIG5hbWU7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJpbmcoJm5hbWUpKSB7
CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMyB0byBT
dHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAg
IH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+cmVtb3ZlQXR0cmlidXRlKGNhbGxJZCwgZWxlbWVu
dElkLCBuYW1lKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0VGV4dE5v
ZGVWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlv
bikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICAqZXhjZXB0aW9uID0g
U3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6
IDMpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgY2FsbElkOwogICAgaWYgKCFhcmdzLT5nZXQoMSkt
PmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29u
dmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0
KDIpLT5hc051bWJlcigmbm9kZUlkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRv
IGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIHZhbHVlOwogICAgaWYgKCFhcmdz
LT5nZXQoMyktPmFzU3RyaW5nKCZ2YWx1ZSkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxl
ZCB0byBjb252ZXJ0IHBhcmFtZXRlciAzIHRvIFN0cmluZyI7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5z
ZXRUZXh0Tm9kZVZhbHVlKGNhbGxJZCwgbm9kZUlkLCB2YWx1ZSk7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxl
bmd0aCgpICE9IDIpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25n
IG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDIpIiwgYXJncy0+bGVuZ3RoKCkp
OwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAg
IGxvbmcgY2FsbElkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7
CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBs
b25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9
CiAgICBsb25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmbm9kZUlk
KSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDIg
dG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5nZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoY2Fs
bElkLCBub2RlSWQpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjb3B5Tm9k
ZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewog
ICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5n
Ojpmb3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDEpIiwg
YXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJl
dHVybjsKICAgIH0KICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVt
YmVyKCZub2RlSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBw
YXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPmNvcHlOb2RlKG5vZGVJZCk7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZU5vZGUoUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdz
LT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJX
cm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAyKSIsIGFyZ3MtPmxlbmd0
aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9
CiAgICBsb25nIGNhbGxJZDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElk
KSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEg
dG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5v
ZGVJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRl
ciAyIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVy
bjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+cmVtb3ZlTm9kZShjYWxsSWQsIG5vZGVJ
ZCk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNoYW5nZVRhZ05hbWUoUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlm
IChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9y
bWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAzKSIsIGFyZ3Mt
Pmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47
CiAgICB9CiAgICBsb25nIGNhbGxJZDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigm
Y2FsbElkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1l
dGVyIDEgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0
dXJuOwogICAgfQogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1i
ZXIoJm5vZGVJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBh
cmFtZXRlciAyIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHJldHVybjsKICAgIH0KICAgIFN0cmluZyBuZXdUYWdOYW1lOwogICAgaWYgKCFhcmdzLT5nZXQo
MyktPmFzU3RyaW5nKCZuZXdUYWdOYW1lKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVk
IHRvIGNvbnZlcnQgcGFyYW1ldGVyIDMgdG8gU3RyaW5nIjsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPmNo
YW5nZVRhZ05hbWUoY2FsbElkLCBub2RlSWQsIG5ld1RhZ05hbWUpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPdXRlckhUTUwoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAy
KSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2Yg
cGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAyKSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIGNhbGxJ
ZDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgICpl
eGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEgdG8gbG9uZyI7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBu
b2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAg
ICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAyIHRvIGxvbmciOwog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1f
aW5zcGVjdG9yQmFja2VuZC0+Z2V0T3V0ZXJIVE1MKGNhbGxJZCwgbm9kZUlkKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0T3V0ZXJIVE1MKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3Ro
KCkgIT0gMykgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVt
YmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMykiLCBhcmdzLT5sZW5ndGgoKSk7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9u
ZyBjYWxsSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAg
ICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmci
OwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAg
IGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZub2RlSWQpKSB7
CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMiB0byBs
b25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9
CiAgICBTdHJpbmcgb3V0ZXJIVE1MOwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZv
dXRlckhUTUwpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJh
bWV0ZXIgMyB0byBTdHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+c2V0T3V0ZXJIVE1MKGNhbGxJ
ZCwgbm9kZUlkLCBvdXRlckhUTUwpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjphZGRJbnNwZWN0ZWROb2RlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmlu
ZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgICpl
eGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVk
IChleHBlY3RlZDogMSkiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFy
Z3MtPmdldCgxKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZh
aWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+
YWRkSW5zcGVjdGVkTm9kZShub2RlSWQpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpwZXJmb3JtU2VhcmNoKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmlu
ZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgICpl
eGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVk
IChleHBlY3RlZDogMikiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIHF1ZXJ5OwogICAgaWYgKCFh
cmdzLT5nZXQoMSktPmFzU3RyaW5nKCZxdWVyeSkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZh
aWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIFN0cmluZyI7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgYm9vbCBydW5TeW5jaHJvbm91
c2x5OwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzQm9vbCgmcnVuU3luY2hyb25vdXNseSkpIHsK
ICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAyIHRvIGJv
b2xlYW4iOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAg
IH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+cGVyZm9ybVNlYXJjaChxdWVyeSwgcnVuU3luY2hy
b25vdXNseSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNlYXJjaENhbmNl
bGVkKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7
CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMCkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJp
bmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMCki
LCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cmV0dXJuOwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5zZWFyY2hDYW5jZWxlZCgpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRl
bmQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmlu
Zzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAyKSIs
IGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CiAgICBsb25nIGNhbGxJZDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051
bWJlcigmY2FsbElkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQg
cGFyYW1ldGVyIDEgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIHBhdGg7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+
YXNTdHJpbmcoJnBhdGgpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVy
dCBwYXJhbWV0ZXIgMiB0byBTdHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+cHVzaE5vZGVCeVBh
dGhUb0Zyb250ZW5kKGNhbGxJZCwgcGF0aCk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewog
ICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFt
ZXRlcnM6ICVkIChleHBlY3RlZDogMSkiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBjYWxsSWQ7CiAg
ICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICAqZXhjZXB0
aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmciOwogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9y
QmFja2VuZC0+Y2xlYXJDb25zb2xlTWVzc2FnZXMoY2FsbElkKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6aGlnaGxpZ2h0RE9NTm9kZShQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9
IDEpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBv
ZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDEpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgbm9k
ZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAg
KmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2lu
c3BlY3RvckJhY2tlbmQtPmhpZ2hsaWdodERPTU5vZGUobm9kZUlkKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6aGlkZURPTU5vZGVIaWdobGlnaHQoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5n
dGgoKSAhPSAwKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBu
dW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAwKSIsIGFyZ3MtPmxlbmd0aCgpKTsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBt
X2luc3BlY3RvckJhY2tlbmQtPmhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0eWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMp
IHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBw
YXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDMpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgY2FsbElk
OwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgKmV4
Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIG5v
ZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmbm9kZUlkKSkgewogICAgICAg
ICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gbG9uZyI7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgYm9v
bCBhdXRoT25seTsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc0Jvb2woJmF1dGhPbmx5KSkgewog
ICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDMgdG8gYm9v
bGVhbiI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAg
fQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5nZXRTdHlsZXMoY2FsbElkLCBub2RlSWQsIGF1dGhP
bmx5KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QWxsU3R5bGVzKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBp
ZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZv
cm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMSkiLCBhcmdz
LT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJu
OwogICAgfQogICAgbG9uZyBjYWxsSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIo
JmNhbGxJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFt
ZXRlciAxIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJl
dHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+Z2V0QWxsU3R5bGVzKGNhbGxJZCk7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldElubGluZVN0eWxlKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAo
YXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1h
dCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMikiLCBhcmdzLT5s
ZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQogICAgbG9uZyBjYWxsSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNh
bGxJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRl
ciAxIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVy
bjsKICAgIH0KICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVy
KCZub2RlSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJh
bWV0ZXIgMiB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPmdldElubGluZVN0eWxlKGNhbGxJ
ZCwgbm9kZUlkKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29tcHV0
ZWRTdHlsZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlv
bikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICAqZXhjZXB0aW9uID0g
U3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6
IDIpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgY2FsbElkOwogICAgaWYgKCFhcmdzLT5nZXQoMSkt
PmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29u
dmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0
KDIpLT5hc051bWJlcigmbm9kZUlkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRv
IGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5nZXRDb21w
dXRlZFN0eWxlKGNhbGxJZCwgbm9kZUlkKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3R5bGVTaGVldChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJp
bmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICAq
ZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAl
ZCAoZXhwZWN0ZWQ6IDIpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgY2FsbElkOwogICAgaWYgKCFh
cmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJG
YWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIHN0eWxlU2hlZXRJZDsK
ICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmc3R5bGVTaGVldElkKSkgewogICAgICAg
ICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gbG9uZyI7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbV9p
bnNwZWN0b3JCYWNrZW5kLT5nZXRTdHlsZVNoZWV0KGNhbGxJZCwgc3R5bGVTaGVldElkKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UnVsZVJhbmdlcyhQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3Mt
Pmxlbmd0aCgpICE9IDIpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldy
b25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDIpIiwgYXJncy0+bGVuZ3Ro
KCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0K
ICAgIGxvbmcgY2FsbElkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQp
KSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0
byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAg
ICB9CiAgICBsb25nIHN0eWxlU2hlZXRJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJl
cigmc3R5bGVTaGVldElkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZl
cnQgcGFyYW1ldGVyIDIgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5nZXRSdWxlUmFuZ2Vz
KGNhbGxJZCwgc3R5bGVTaGVldElkKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6YXBwbHlTdHlsZVRleHQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5n
KiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAgICAgKmV4
Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQg
KGV4cGVjdGVkOiA0KSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIGNhbGxJZDsKICAgIGlmICghYXJn
cy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFp
bGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBzdHlsZUlkOwogICAgaWYg
KCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZzdHlsZUlkKSkgewogICAgICAgICpleGNlcHRpb24g
PSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIHN0eWxlVGV4
dDsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc1N0cmluZygmc3R5bGVUZXh0KSkgewogICAgICAg
ICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDMgdG8gU3RyaW5nIjsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBT
dHJpbmcgcHJvcGVydHlOYW1lOwogICAgaWYgKCFhcmdzLT5nZXQoNCktPmFzU3RyaW5nKCZwcm9w
ZXJ0eU5hbWUpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJh
bWV0ZXIgNCB0byBTdHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+YXBwbHlTdHlsZVRleHQoY2Fs
bElkLCBzdHlsZUlkLCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSk7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnNldFN0eWxlVGV4dChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMp
IHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBw
YXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDMpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgY2FsbElk
OwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgKmV4
Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIHN0
eWxlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJnN0eWxlSWQpKSB7CiAgICAg
ICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMiB0byBsb25nIjsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBT
dHJpbmcgc3R5bGVUZXh0OwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZzdHlsZVRl
eHQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIg
MyB0byBTdHJpbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVy
bjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+c2V0U3R5bGVUZXh0KGNhbGxJZCwgc3R5
bGVJZCwgc3R5bGVUZXh0KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0
U3R5bGVQcm9wZXJ0eShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4
Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDQpIHsKICAgICAgICAqZXhjZXB0
aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhw
ZWN0ZWQ6IDQpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgY2FsbElkOwogICAgaWYgKCFhcmdzLT5n
ZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQg
dG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIHN0eWxlSWQ7CiAgICBpZiAoIWFy
Z3MtPmdldCgyKS0+YXNOdW1iZXIoJnN0eWxlSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJG
YWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMiB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBTdHJpbmcgbmFtZTsKICAgIGlm
ICghYXJncy0+Z2V0KDMpLT5hc1N0cmluZygmbmFtZSkpIHsKICAgICAgICAqZXhjZXB0aW9uID0g
IkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAzIHRvIFN0cmluZyI7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIHZhbHVlOwog
ICAgaWYgKCFhcmdzLT5nZXQoNCktPmFzU3RyaW5nKCZ2YWx1ZSkpIHsKICAgICAgICAqZXhjZXB0
aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciA0IHRvIFN0cmluZyI7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbV9pbnNwZWN0
b3JCYWNrZW5kLT5zZXRTdHlsZVByb3BlcnR5KGNhbGxJZCwgc3R5bGVJZCwgbmFtZSwgdmFsdWUp
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjp0b2dnbGVTdHlsZUVuYWJsZWQo
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAg
IGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6
Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiA0KSIsIGFy
Z3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1
cm47CiAgICB9CiAgICBsb25nIGNhbGxJZDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJl
cigmY2FsbElkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFy
YW1ldGVyIDEgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cmV0dXJuOwogICAgfQogICAgbG9uZyBzdHlsZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFz
TnVtYmVyKCZzdHlsZUlkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZl
cnQgcGFyYW1ldGVyIDIgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIHByb3BlcnR5TmFtZTsKICAgIGlmICghYXJn
cy0+Z2V0KDMpLT5hc1N0cmluZygmcHJvcGVydHlOYW1lKSkgewogICAgICAgICpleGNlcHRpb24g
PSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDMgdG8gU3RyaW5nIjsKICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBib29sIGRpc2FibGVk
OwogICAgaWYgKCFhcmdzLT5nZXQoNCktPmFzQm9vbCgmZGlzYWJsZWQpKSB7CiAgICAgICAgKmV4
Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgNCB0byBib29sZWFuIjsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2lu
c3BlY3RvckJhY2tlbmQtPnRvZ2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIHN0eWxlSWQsIHByb3Bl
cnR5TmFtZSwgZGlzYWJsZWQpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpz
ZXRSdWxlU2VsZWN0b3IoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBl
eGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAgICAgKmV4Y2Vw
dGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4
cGVjdGVkOiA0KSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIGNhbGxJZDsKICAgIGlmICghYXJncy0+
Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVk
IHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBydWxlSWQ7CiAgICBpZiAoIWFy
Z3MtPmdldCgyKS0+YXNOdW1iZXIoJnJ1bGVJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZh
aWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAyIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIFN0cmluZyBzZWxlY3RvcjsKICAg
IGlmICghYXJncy0+Z2V0KDMpLT5hc1N0cmluZygmc2VsZWN0b3IpKSB7CiAgICAgICAgKmV4Y2Vw
dGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMyB0byBTdHJpbmciOwogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgc2Vs
ZWN0ZWROb2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCg0KS0+YXNOdW1iZXIoJnNlbGVjdGVkTm9k
ZUlkKSkgewogICAgICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVy
IDQgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJu
OwogICAgfQogICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5zZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBy
dWxlSWQsIHNlbGVjdG9yLCBzZWxlY3RlZE5vZGVJZCk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmFkZFJ1bGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3Ry
aW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAg
KmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczog
JWQgKGV4cGVjdGVkOiAzKSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIGNhbGxJZDsKICAgIGlmICgh
YXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgICpleGNlcHRpb24gPSAi
RmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIHNlbGVjdG9yOwog
ICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzU3RyaW5nKCZzZWxlY3RvcikpIHsKICAgICAgICAqZXhj
ZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAyIHRvIFN0cmluZyI7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBz
ZWxlY3RlZE5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc051bWJlcigmc2VsZWN0ZWRO
b2RlSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0
ZXIgMyB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1
cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPmFkZFJ1bGUoY2FsbElkLCBzZWxlY3Rv
ciwgc2VsZWN0ZWROb2RlSWQpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRDb29raWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0
aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgICpleGNlcHRpb24g
PSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3Rl
ZDogMSkiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBjYWxsSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgx
KS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBj
b252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9yQmFja2VuZC0+Z2V0Q29va2ll
cyhjYWxsSWQpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkZWxldGVDb29r
aWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmlu
Zzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAyKSIs
IGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CiAgICBTdHJpbmcgY29va2llTmFtZTsKICAgIGlmICghYXJncy0+Z2V0KDEp
LT5hc1N0cmluZygmY29va2llTmFtZSkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0
byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIFN0cmluZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIGRvbWFpbjsKICAgIGlmICgh
YXJncy0+Z2V0KDIpLT5hc1N0cmluZygmZG9tYWluKSkgewogICAgICAgICpleGNlcHRpb24gPSAi
RmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gU3RyaW5nIjsKICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tl
bmQtPmRlbGV0ZUNvb2tpZShjb29raWVOYW1lLCBkb21haW4pOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRBcHBsaWNhdGlvbkNhY2hlcyhQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikKewogICAgaWYgKGFyZ3MtPmxlbmd0aCgp
ICE9IDEpIHsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJl
ciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6IDEpIiwgYXJncy0+bGVuZ3RoKCkpOwogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcg
Y2FsbElkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAg
ICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBt
X2luc3BlY3RvckJhY2tlbmQtPmdldEFwcGxpY2F0aW9uQ2FjaGVzKGNhbGxJZCk7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlm
IChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9y
bWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAyKSIsIGFyZ3Mt
Pmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47
CiAgICB9CiAgICBsb25nIGluamVjdGVkU2NyaXB0SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+
YXNOdW1iZXIoJmluamVjdGVkU2NyaXB0SWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWls
ZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMSB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBTdHJpbmcgb2JqZWN0R3JvdXA7CiAg
ICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJpbmcoJm9iamVjdEdyb3VwKSkgewogICAgICAgICpl
eGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gU3RyaW5nIjsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBtX2lu
c3BlY3RvckJhY2tlbmQtPnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoaW5qZWN0ZWRTY3JpcHRJ
ZCwgb2JqZWN0R3JvdXApOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaWRF
dmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3Ms
IFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAg
ICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRl
cnM6ICVkIChleHBlY3RlZDogMikiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBjYWxsSWQ7CiAgICBp
ZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICAqZXhjZXB0aW9u
ID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmciOwogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIFN0cmluZyBqc29uUmVz
dWx0OwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzU3RyaW5nKCZqc29uUmVzdWx0KSkgewogICAg
ICAgICpleGNlcHRpb24gPSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDIgdG8gU3RyaW5n
IjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAg
ICBtX2luc3BlY3RvckJhY2tlbmQtPmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY2FsbElk
LCBqc29uUmVzdWx0KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RGF0
YWJhc2VUYWJsZU5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyog
ZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgICpleGNl
cHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChl
eHBlY3RlZDogMikiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBjYWxsSWQ7CiAgICBpZiAoIWFyZ3Mt
PmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxl
ZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgZGF0YWJhc2VJZDsKICAgIGlm
ICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmZGF0YWJhc2VJZCkpIHsKICAgICAgICAqZXhjZXB0
aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAyIHRvIGxvbmciOwogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9y
QmFja2VuZC0+Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKGNhbGxJZCwgZGF0YWJhc2VJZCk7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERPTVN0b3JhZ2VFbnRyaWVzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKQp7CiAgICBpZiAo
YXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgICpleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1h
dCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChleHBlY3RlZDogMikiLCBhcmdzLT5s
ZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQogICAgbG9uZyBjYWxsSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNh
bGxJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRl
ciAxIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVy
bjsKICAgIH0KICAgIGxvbmcgc3RvcmFnZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVt
YmVyKCZzdG9yYWdlSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJGYWlsZWQgdG8gY29udmVy
dCBwYXJhbWV0ZXIgMiB0byBsb25nIjsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXR1cm47CiAgICB9CiAgICBtX2luc3BlY3RvckJhY2tlbmQtPmdldERPTVN0b3JhZ2VF
bnRyaWVzKGNhbGxJZCwgc3RvcmFnZUlkKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6c2V0RE9NU3RvcmFnZUl0ZW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywg
U3RyaW5nKiBleGNlcHRpb24pCnsKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAg
ICAgKmV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVy
czogJWQgKGV4cGVjdGVkOiA0KSIsIGFyZ3MtPmxlbmd0aCgpKTsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsb25nIGNhbGxJZDsKICAgIGlm
ICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgICpleGNlcHRpb24g
PSAiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEgdG8gbG9uZyI7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBzdG9yYWdlSWQ7
CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJnN0b3JhZ2VJZCkpIHsKICAgICAgICAq
ZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAyIHRvIGxvbmciOwogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIFN0cmlu
ZyBrZXk7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJpbmcoJmtleSkpIHsKICAgICAgICAq
ZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAzIHRvIFN0cmluZyI7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgU3Ry
aW5nIHZhbHVlOwogICAgaWYgKCFhcmdzLT5nZXQoNCktPmFzU3RyaW5nKCZ2YWx1ZSkpIHsKICAg
ICAgICAqZXhjZXB0aW9uID0gIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciA0IHRvIFN0cmlu
ZyI7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5zZXRET01TdG9yYWdlSXRlbShjYWxsSWQsIHN0b3JhZ2VJ
ZCwga2V5LCB2YWx1ZSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92
ZURPTVN0b3JhZ2VJdGVtKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyog
ZXhjZXB0aW9uKQp7CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgICpleGNl
cHRpb24gPSBTdHJpbmc6OmZvcm1hdCgiV3JvbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnM6ICVkIChl
eHBlY3RlZDogMykiLCBhcmdzLT5sZW5ndGgoKSk7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbG9uZyBjYWxsSWQ7CiAgICBpZiAoIWFyZ3Mt
PmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICAqZXhjZXB0aW9uID0gIkZhaWxl
ZCB0byBjb252ZXJ0IHBhcmFtZXRlciAxIHRvIGxvbmciOwogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxvbmcgc3RvcmFnZUlkOwogICAgaWYg
KCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZzdG9yYWdlSWQpKSB7CiAgICAgICAgKmV4Y2VwdGlv
biA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMiB0byBsb25nIjsKICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBTdHJpbmcga2V5Owog
ICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZrZXkpKSB7CiAgICAgICAgKmV4Y2VwdGlv
biA9ICJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgMyB0byBTdHJpbmciOwogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1faW5zcGVjdG9y
QmFja2VuZC0+cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oY2FsbElkLCBzdG9yYWdlSWQsIGtleSk7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgU3RyaW5nKiBleGNlcHRpb24pCnsKICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pOwogICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
Q2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRj
aE1hcCwgZGlzcGF0Y2hNYXAsICk7CiAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRQcm9maWxlSGVhZGVycyIsICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0UHJvZmlsZUhlYWRlcnMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZCgic2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImFkZFJ1
bGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFkZFJ1bGUpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZCgiYWN0aXZhdGVCcmVha3BvaW50cyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6YWN0aXZhdGVCcmVha3BvaW50cyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJkZWxl
dGVDb29raWUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRlbGV0ZUNvb2tpZSk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRDb29raWVzIiwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRDb29raWVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUF0dHJp
YnV0ZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlQXR0cmlidXRlKTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZU5vZGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnJlbW92ZU5vZGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0SW5saW5lU3R5
bGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldElubGluZVN0eWxlKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoImVuYWJsZVJlc291cmNlVHJhY2tpbmciLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmVuYWJsZVJlc291cmNlVHJhY2tpbmcpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZCgicHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kIiwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZCgic3RvcFRpbWVsaW5lUHJvZmlsZXIiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0
b3BUaW1lbGluZVByb2ZpbGVyKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInN0YXJ0VGltZWxp
bmVQcm9maWxlciIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RhcnRUaW1lbGluZVBy
b2ZpbGVyKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldEV2ZW50TGlzdGVuZXJzRm9yTm9k
ZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInN0YXJ0UHJvZmlsaW5nIiwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpzdGFydFByb2ZpbGluZyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRk
KCJlbmFibGVNb25pdG9yaW5nWEhSIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFi
bGVNb25pdG9yaW5nWEhSKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImFwcGx5U3R5bGVUZXh0
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphcHBseVN0eWxlVGV4dCk7CiAgICAgICAg
ZGlzcGF0Y2hNYXAuYWRkKCJnZXRBbGxTdHlsZXMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldEFsbFN0eWxlcyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJlbmFibGVEZWJ1Z2dl
ciIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlRGVidWdnZXIpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZCgic3RvcFByb2ZpbGluZyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6c3RvcFByb2ZpbGluZyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzYXZlU2Vzc2lv
blNldHRpbmdzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzYXZlU2Vzc2lvblNldHRp
bmdzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldFNjcmlwdFNvdXJjZSIsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U2NyaXB0U291cmNlKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoInBlcmZvcm1TZWFyY2giLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnBlcmZv
cm1TZWFyY2gpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0QXBwbGljYXRpb25DYWNoZXMi
LCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFwcGxpY2F0aW9uQ2FjaGVzKTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoImNsZWFyQ29uc29sZU1lc3NhZ2VzIiwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpjbGVhckNvbnNvbGVNZXNzYWdlcyk7CiAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKCJnZXRET01TdG9yYWdlRW50cmllcyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0RE9NU3RvcmFnZUVudHJpZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0SW5q
ZWN0ZWRTY3JpcHRTb3VyY2UiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldEluamVj
dGVkU2NyaXB0U291cmNlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImRpc2FibGVEZWJ1Z2dl
ciIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZURlYnVnZ2VyKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoImRpc2FibGVSZXNvdXJjZVRyYWNraW5nIiwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlUmVzb3VyY2VUcmFja2luZyk7CiAgICAgICAgZGlzcGF0
Y2hNYXAuYWRkKCJhZGRJbnNwZWN0ZWROb2RlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjphZGRJbnNwZWN0ZWROb2RlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUFsbFNj
cmlwdHNUb0V2YWx1YXRlT25Mb2FkIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZW1v
dmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJy
ZWxvYWRQYWdlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZWxvYWRQYWdlKTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoInJlc3VtZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6cmVzdW1lKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImVkaXRTY3JpcHRTb3VyY2UiLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVkaXRTY3JpcHRTb3VyY2UpOwogICAgICAgIGRp
c3BhdGNoTWFwLmFkZCgiZ2V0UHJvZmlsZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0UHJvZmlsZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRTdHlsZXMiLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0eWxlcyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRk
KCJhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInNl
dFJ1bGVTZWxlY3RvciIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0UnVsZVNlbGVj
dG9yKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInN0b3JlTGFzdEFjdGl2ZVBhbmVsIiwgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbCk7CiAgICAgICAg
ZGlzcGF0Y2hNYXAuYWRkKCJzdGVwT3V0T2ZGdW5jdGlvbiIsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6c3RlcE91dE9mRnVuY3Rpb24pOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0
UmVzb3VyY2VDb250ZW50IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRSZXNvdXJj
ZUNvbnRlbnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiY2xlYXJQcm9maWxlcyIsICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y2xlYXJQcm9maWxlcyk7CiAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKCJnZXRDaGlsZE5vZGVzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRD
aGlsZE5vZGVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUJyZWFrcG9pbnQiLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZUJyZWFrcG9pbnQpOwogICAgICAgIGRp
c3BhdGNoTWFwLmFkZCgidG9nZ2xlU3R5bGVFbmFibGVkIiwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjp0b2dnbGVTdHlsZUVuYWJsZWQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZGlk
RXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJn
ZXRTdHlsZVNoZWV0IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHlsZVNoZWV0
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldENvbXB1dGVkU3R5bGUiLCAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldENvbXB1dGVkU3R5bGUpOwogICAgICAgIGRpc3BhdGNoTWFw
LmFkZCgiZW5hYmxlU2VhcmNoaW5nRm9yTm9kZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6ZW5hYmxlU2VhcmNoaW5nRm9yTm9kZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJkaXNh
YmxlU2VhcmNoaW5nRm9yTm9kZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJs
ZVNlYXJjaGluZ0Zvck5vZGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0T3V0ZXJIVE1M
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRPdXRlckhUTUwpOwogICAgICAgIGRp
c3BhdGNoTWFwLmFkZCgiZGVhY3RpdmF0ZUJyZWFrcG9pbnRzIiwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpkZWFjdGl2YXRlQnJlYWtwb2ludHMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZCgic3RlcE92ZXJTdGF0ZW1lbnQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBP
dmVyU3RhdGVtZW50KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInRha2VIZWFwU25hcHNob3Qi
LCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnRha2VIZWFwU25hcHNob3QpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZCgic2V0U3R5bGVQcm9wZXJ0eSIsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6c2V0U3R5bGVQcm9wZXJ0eSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzZXRC
cmVha3BvaW50IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRCcmVha3BvaW50KTsK
ICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInBhdXNlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpwYXVzZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzdGVwSW50b1N0YXRlbWVudCIs
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RlcEludG9TdGF0ZW1lbnQpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZCgiZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0IiwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZCgiY29weU5vZGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNvcHlO
b2RlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInNldFRleHROb2RlVmFsdWUiLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnNldFRleHROb2RlVmFsdWUpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZCgic2V0U3R5bGVUZXh0IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRT
dHlsZVRleHQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0RGF0YWJhc2VUYWJsZU5hbWVz
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXREYXRhYmFzZVRhYmxlTmFtZXMpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiaGlkZURPTU5vZGVIaWdobGlnaHQiLCAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmhpZGVET01Ob2RlSGlnaGxpZ2h0KTsKICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoInNldEF0dHJpYnV0ZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0
QXR0cmlidXRlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbGVhc2VXcmFwcGVyT2JqZWN0
R3JvdXAiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbGVhc2VXcmFwcGVyT2JqZWN0
R3JvdXApOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgicmVtb3ZlRE9NU3RvcmFnZUl0ZW0iLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoInNldERPTVN0b3JhZ2VJdGVtIiwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpzZXRET01TdG9yYWdlSXRlbSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJz
ZWFyY2hDYW5jZWxlZCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VhcmNoQ2FuY2Vs
ZWQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZGlzYWJsZU1vbml0b3JpbmdYSFIiLCAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGVNb25pdG9yaW5nWEhSKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoInNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUiLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZCgiY2hhbmdlVGFnTmFtZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Y2hhbmdlVGFnTmFtZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJoaWdobGlnaHRET01Ob2Rl
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpoaWdobGlnaHRET01Ob2RlKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZVByb2ZpbGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnJlbW92ZVByb2ZpbGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0UnVsZVJh
bmdlcyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UnVsZVJhbmdlcyk7CiAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKCJlbmFibGVQcm9maWxlciIsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6ZW5hYmxlUHJvZmlsZXIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZGlzYWJs
ZVByb2ZpbGVyIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlUHJvZmlsZXIp
OwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0T3V0ZXJIVE1MIiwgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRPdXRlckhUTUwpOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7
CiAgICBpZiAoIXBhcnNlZE1lc3NhZ2UpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAqZXhjZXB0aW9uID0gIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBNZXNz
YWdlIHNob3VsZCBiZSBpbiBKU09OIGZvcm1hdC4iOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2VBcnJheSA9IHBhcnNlZE1lc3NhZ2UtPmFz
QXJyYXkoKTsKICAgIGlmICghbWVzc2FnZUFycmF5KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgKmV4Y2VwdGlvbiA9ICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1h
dC4gVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGEgSlNPTmlmaWVkIGFycmF5IG9mIGFyZ3VtZW50cy4i
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1lc3NhZ2VBcnJheS0+bGVuZ3RoKCkp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAqZXhjZXB0aW9uID0gIkVy
cm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBFbXB0eSBtZXNzYWdlIHdhcyByZWNlaXZlZC4i
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgbWV0aG9kTmFtZTsKICAgIGlmICgh
bWVzc2FnZUFycmF5LT5nZXQoMCktPmFzU3RyaW5nKCZtZXRob2ROYW1lKSkgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICpleGNlcHRpb24gPSAiRXJyb3I6IEludmFsaWQg
bWVzc2FnZSBmb3JtYXQuIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBtZXNzYWdlIHNob3VsZCBi
ZSBtZXRob2QgbmFtZS4iOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBIYXNoTWFwPFN0cmlu
ZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kTmFt
ZSk7CiAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAqZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQoIkVycm9yOiBJ
bnZhbGlkIG1ldGhvZCBuYW1lLiAnJXMnIHdhc24ndCBmb3VuZC4iLCBtZXRob2ROYW1lLnV0Zjgo
KS5kYXRhKCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAoKCp0aGlzKS4qaXQtPnNlY29u
ZCkobWVzc2FnZUFycmF5LCBleGNlcHRpb24pOwp9Cgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgoj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
</data>

          </attachment>
      

    </bug>

</bugzilla>