<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">Hello all!<br>I am trying to replicate this ffmpeg command: <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">ffmpeg -i <input> -vn -acodec copy <output></code>, using the libav APIs.</p>
<p style="margin:0px 0px 1.2em!important">There seems to be a lack of updated examples and i really struggled to find any resources.<br>I was able to open the file both input and output, allocate format contexts for each, and copy general stream information, but not the packets themselves.</p>
<p style="margin:0px 0px 1.2em!important">Here is the code that i gathered with some comments i have added,btw im running it on android :</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">void ffmpeg(
const char *in_filename,
const char *out_filename
) {
//Libraries init
SSL_load_error_strings();
SSL_library_init();
av_register_all ();
avformat_network_init ();
//Set avlog to log on locat
av_log_set_callback(log_callback_android);
AVOutputFormat *ofmt = NULL;
AVFormatContext *ifmt_ctx = NULL, *ofmt_ctx = NULL;
AVPacket pkt;
int ret, i;
// Opening input file, and checking stream info
if ((ret = avformat_open_input(&ifmt_ctx, in_filename, 0, 0)) < 0) {
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "Could not open input file '%s'.Error %s", in_filename, av_err2str(ret));
goto end;
}
if ((ret = avformat_find_stream_info(ifmt_ctx, 0)) < 0) {
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "Failed to retrieve input stream information");
goto end;
}
//Print stream info
av_dump_format(ifmt_ctx, 0, in_filename, 0);
//Allocate new contex for output file
avformat_alloc_output_context2(&ofmt_ctx, NULL, NULL, out_filename);
if (!ofmt_ctx) {
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "Could not create output context\n");
ret = AVERROR_UNKNOWN;
goto end;
}
//Setting output format to inhereted format
ofmt = ofmt_ctx->oformat;
// Iterate over all streams in input file
for (i = 0; i < ifmt_ctx->nb_streams; i++) {
//Stream input
AVStream *in_stream = ifmt_ctx->streams[i];
//Filter non audio streams
if(in_stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO){
__android_log_print(ANDROID_LOG_INFO,APPNAME,"Audio stream found");
//in_stream->codec is deprecated, no idea how to get it otherway
//Making new stream in the output format context, based on the input stream
AVStream *out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec);
if (!out_stream) {
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "Failed allocating output stream\n");
ret = AVERROR_UNKNOWN;
goto end;
}
//Copying stream information to new contex
ret = avcodec_parameters_copy(out_stream->codecpar,in_stream->codecpar);
if (ret < 0) {
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "Failed to copy context from input to output stream codec context\n");
goto end;
}
}
}
//Print output format
av_dump_format(ofmt_ctx, 0, out_filename, 1);
//Open output file
if (!(ofmt->flags & AVFMT_NOFILE)) {
ret = avio_open(&ofmt_ctx->pb, out_filename, AVIO_FLAG_WRITE);
if (ret < 0) {
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "Could not open output file '%s'", out_filename);
goto end;
}
}
//Writing output header
ret = avformat_write_header(ofmt_ctx, NULL);
if (ret < 0) {
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "Error occurred when opening output file\n");
goto end;
}
//Mux packets - dont know what is happening here, assuming its copying the real data to the streams.
while (1) {
AVStream *in_stream, *out_stream;
ret = av_read_frame(ifmt_ctx, &pkt);
if (ret < 0)
break;
in_stream = ifmt_ctx->streams[pkt.stream_index];
out_stream = ofmt_ctx->streams[pkt.stream_index];
log_packet(ifmt_ctx, &pkt, "in");
//copy packet
pkt.pts = av_rescale_q_rnd(pkt.pts, in_stream->time_base, out_stream->time_base, AV_ROUND_PASS_MINMAX);
pkt.dts = av_rescale_q_rnd(pkt.dts, in_stream->time_base, out_stream->time_base, AV_ROUND_PASS_MINMAX);
pkt.duration = av_rescale_q(pkt.duration, in_stream->time_base, out_stream->time_base);
pkt.pos = -1;
log_packet(ofmt_ctx, &pkt, "out");
ret = av_interleaved_write_frame(ofmt_ctx, &pkt);
if (ret < 0) {
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "Error muxing packet\n");
break;
}
av_packet_unref(&pkt);
}
av_write_trailer(ofmt_ctx);
end:
avformat_close_input(&ifmt_ctx);
//close output
if (ofmt_ctx && !(ofmt->flags & AVFMT_NOFILE))
avio_closep(&ofmt_ctx->pb);
//free output alloc
avformat_free_context(ofmt_ctx);
if (ret < 0 && ret != AVERROR_EOF) {
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "Error occurred: %s\n", av_err2str(ret));
}
}
</code></pre><p style="margin:0px 0px 1.2em!important">The muxing packets part,doesnt work, as it failed with signal error, after few iterations - probably error in this code, nothing to do with the libs themselves. </p>
<p style="margin:0px 0px 1.2em!important">Here is an ouput of a run:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">===Input Information===
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '<input>':
Metadata:
major_brand :
isom
minor_version :
512
compatible_brands:
isomiso2avc1mp41
encoder :
Lavf57.25.100
Duration:
00:00:58.82
, start:
0.000000
, bitrate:
7369 kb/s
Stream #0:0
(eng)
Audio: aac (mp4a / 0x6134706D), 44100 Hz, 2 channels, 160 kb/s
(default)
Metadata:
handler_name :
SoundHandler
Stream #0:1
(eng)
Video: h264 (avc1 / 0x31637661), none, 640x640, 7213 kb/s
30 fps,
30 tbr,
15360 tbn,
15360 tbc
(default)
Metadata:
handler_name :
VideoHandler
===Ouput Information===
Audio stream found
Output #0, adts, to 'out.aac':
Stream #0:0
Audio: aac (mp4a / 0x6134706D), 44100 Hz, 2 channels, 160 kb/s
==Packet Logging==
in: pts:-2048 pts_time:-0.0464399 dts:-2048 dts_time:-0.0464399 duration:1024 duration_time:0.02322 stream_index:0
out: pts:-2048 pts_time:-0.0464399 dts:-2048 dts_time:-0.0464399 duration:1024 duration_time:0.02322 stream_index:0
in: pts:-1024 pts_time:-0.02322 dts:-1024 dts_time:-0.02322 duration:1024 duration_time:0.02322 stream_index:0
out: pts:-1024 pts_time:-0.02322 dts:-1024 dts_time:-0.02322 duration:1024 duration_time:0.02322 stream_index:0
in: pts:0 pts_time:0 dts:0 dts_time:0 duration:1024 duration_time:0.02322 stream_index:0
out: pts:0 pts_time:0 dts:0 dts_time:0 duration:1024 duration_time:0.02322 stream_index:0
in: pts:0 pts_time:0 dts:0 dts_time:0 duration:512 duration_time:0.0333333 stream_index:1
Error is
Signal: SIGSEGV (signal SIGSEGV: invalid address (fault address: 0x29))
</code></pre><p style="margin:0px 0px 1.2em!important">I would like to get some help for the last part, how to correctly copy the packets, and also how to not use <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">in_stream->codec->codec</code>,since it is deprecated, but i couldn’t find a way to use with <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">codecpar</code></p>
<p style="margin:0px 0px 1.2em!important">Cheers.<br>David Barishev.</p>
<div title="MDH:SGVsbG8gYWxsITxkaXY+SSBhbSB0cnlpbmcgdG8gcmVwbGljYXRlIHRoaXMgZmZtcGVnIGNvbW1h
bmQ6IGBmZm1wZWcgLWkgJmx0O2lucHV0Jmd0OyAtdm4gLWFjb2RlYyBjb3B5ICZsdDtvdXRwdXQm
Z3Q7YCwgdXNpbmcgdGhlIGxpYmF2IEFQSXMuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGVy
ZSBzZWVtcyB0byBiZSBhIGxhY2sgb2YgdXBkYXRlZCBleGFtcGxlcyBhbmQgaSByZWFsbHkgc3Ry
dWdnbGVkIHRvIGZpbmQgYW55IHJlc291cmNlcy48L2Rpdj48ZGl2Pkkgd2FzIGFibGUgdG8gb3Bl
biB0aGUgZmlsZSBib3RoIGlucHV0IGFuZCBvdXRwdXQsIGFsbG9jYXRlIGZvcm1hdCBjb250ZXh0
cyBmb3IgZWFjaCwgYW5kIGNvcHkgZ2VuZXJhbCBzdHJlYW0gaW5mb3JtYXRpb24sIGJ1dCBub3Qg
dGhlIHBhY2tldHMgdGhlbXNlbHZlcy48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkhlcmUgaXMg
dGhlIGNvZGUgdGhhdCBpIGdhdGhlcmVkIHdpdGggc29tZSBjb21tZW50cyBpIGhhdmUgYWRkZWQs
YnR3IGltIHJ1bm5pbmcgaXQgb24gYW5kcm9pZCA6PC9kaXY+PGRpdj5gYGA8L2Rpdj48ZGl2Pjxk
aXY+dm9pZCBmZm1wZWcoPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyBjb25zdCBjaGFyICppbl9maWxlbmFtZSw8L2Rpdj48ZGl2PiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGNvbnN0IGNoYXIgKm91dF9maWxlbmFtZSZu
YnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyApIHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsm
bmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAvL0xpYnJhcmllcyBp
bml0PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgU1NMX2xvYWRfZXJyb3Jf
c3RyaW5ncygpOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFNTTF9saWJy
YXJ5X2luaXQoKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBhdl9yZWdpc3Rlcl9hbGwgKCk7PC9kaXY+PGRpdj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgYXZmb3JtYXRfbmV0d29ya19pbml0ICgpOzwvZGl2Pjxk
aXY+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IC8vU2V0IGF2bG9nIHRvIGxvZyBvbiBsb2NhdDwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IGF2X2xvZ19zZXRfY2FsbGJhY2sobG9nX2NhbGxiYWNrX2FuZHJvaWQpOzwv
ZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IEFWT3V0cHV0Rm9ybWF0ICpvZm10ID0gTlVMTDs8L2Rpdj48ZGl2PiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyBBVkZvcm1hdENvbnRleHQgKmlmbXRfY3R4ID0gTlVMTCwgKm9m
bXRfY3R4ID0gTlVMTDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBBVlBh
Y2tldCBwa3Q7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgaW50IHJldCwg
aTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAvLyBPcGVuaW5nIGlucHV0IGZpbGUsIGFuZCBjaGVja2luZyBzdHJlYW0g
aW5mbzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGlmICgocmV0ID0gYXZm
b3JtYXRfb3Blbl9pbnB1dCgmYW1wO2lmbXRfY3R4LCBpbl9maWxlbmFtZSwgMCwgMCkpICZsdDsg
MCkgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
X19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgQVBQTkFNRSwgIkNvdWxkIG5v
dCBvcGVuIGlucHV0IGZpbGUgJyVzJy5FcnJvciAlcyIsIGluX2ZpbGVuYW1lLCBhdl9lcnIyc3Ry
KHJldCkpOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgZ290byBlbmQ7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfTwvZGl2
PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGlmICgocmV0ID0gYXZmb3JtYXRfZmlu
ZF9zdHJlYW1faW5mbyhpZm10X2N0eCwgMCkpICZsdDsgMCkgezwvZGl2PjxkaXY+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgX19hbmRyb2lkX2xvZ19wcmludChBTkRS
T0lEX0xPR19FUlJPUiwgQVBQTkFNRSwgIkZhaWxlZCB0byByZXRyaWV2ZSBpbnB1dCBzdHJlYW0g
aW5mb3JtYXRpb24iKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IGdvdG8gZW5kOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IH08L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAvL1ByaW50IHN0cmVhbSBpbmZvPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgYXZfZHVtcF9mb3JtYXQoaWZtdF9jdHgsIDAsIGluX2ZpbGVuYW1lLCAw
KTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsm
bmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAvL0FsbG9jYXRlIG5l
dyBjb250ZXggZm9yIG91dHB1dCBmaWxlPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgYXZmb3JtYXRfYWxsb2Nfb3V0cHV0X2NvbnRleHQyKCZhbXA7b2ZtdF9jdHgsIE5VTEws
IE5VTEwsIG91dF9maWxlbmFtZSk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgaWYgKCFvZm10X2N0eCkgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgQVBQ
TkFNRSwgIkNvdWxkIG5vdCBjcmVhdGUgb3V0cHV0IGNvbnRleHRcbiIpOzwvZGl2PjxkaXY+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmV0ID0gQVZFUlJPUl9VTktO
T1dOOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Z290byBlbmQ7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfTwvZGl2Pjxk
aXY+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IC8vU2V0dGluZyBvdXRwdXQgZm9ybWF0IHRvIGluaGVyZXRlZCBmb3JtYXQ8L2Rpdj48ZGl2
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBvZm10ID0gb2ZtdF9jdHgtJmd0O29mb3JtYXQ7
PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7Jm5ic3A7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgLy8gSXRlcmF0ZSBvdmVyIGFsbCBzdHJlYW1zIGluIGlucHV0IGZpbGU8L2Rp
dj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBmb3IgKGkgPSAwOyBpICZsdDsgaWZt
dF9jdHgtJmd0O25iX3N0cmVhbXM7IGkrKykgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLy9TdHJlYW0gaW5wdXQ8L2Rpdj48ZGl2PiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IEFWU3RyZWFtICppbl9zdHJlYW0gPSBp
Zm10X2N0eC0mZ3Q7c3RyZWFtc1tpXTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rp
dj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8vRmlsdGVy
IG5vbiBhdWRpbyBzdHJlYW1zPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyBpZihpbl9zdHJlYW0tJmd0O2NvZGVjcGFyLSZndDtjb2RlY190eXBlID09
IEFWTUVESUFfVFlQRV9BVURJTyl7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9J
RF9MT0dfSU5GTyxBUFBOQU1FLCJBdWRpbyBzdHJlYW0gZm91bmQiKTs8L2Rpdj48ZGl2PiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbmJzcDs8
L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgLy9pbl9zdHJlYW0tJmd0O2NvZGVjIGlzIGRlcHJlY2F0ZWQsIG5vIGlkZWEgaG93
IHRvIGdldCBpdCBvdGhlcndheTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAvL01ha2luZyBuZXcgc3RyZWFtIGluIHRoZSBv
dXRwdXQgZm9ybWF0IGNvbnRleHQsIGJhc2VkIG9uIHRoZSBpbnB1dCBzdHJlYW08L2Rpdj48ZGl2
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
QVZTdHJlYW0gKm91dF9zdHJlYW0gPSBhdmZvcm1hdF9uZXdfc3RyZWFtKG9mbXRfY3R4LCBpbl9z
dHJlYW0tJmd0O2NvZGVjLSZndDtjb2RlYyk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGlmICghb3V0X3N0cmVhbSkgezwv
ZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJS
T1IsIEFQUE5BTUUsICJGYWlsZWQgYWxsb2NhdGluZyBvdXRwdXQgc3RyZWFtXG4iKTs8L2Rpdj48
ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyByZXQgPSBBVkVSUk9SX1VOS05PV047PC9kaXY+PGRpdj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgZ290byBlbmQ7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH08L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLy9Db3B5
aW5nIHN0cmVhbSBpbmZvcm1hdGlvbiB0byBuZXcgY29udGV4Jm5ic3A7PC9kaXY+PGRpdj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHJldCA9
IGF2Y29kZWNfcGFyYW1ldGVyc19jb3B5KG91dF9zdHJlYW0tJmd0O2NvZGVjcGFyLGluX3N0cmVh
bS0mZ3Q7Y29kZWNwYXIpOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBpZiAocmV0ICZsdDsgMCkgezwvZGl2PjxkaXY+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsIEFQUE5BTUUs
ICJGYWlsZWQgdG8gY29weSBjb250ZXh0IGZyb20gaW5wdXQgdG8gb3V0cHV0IHN0cmVhbSBjb2Rl
YyBjb250ZXh0XG4iKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBnb3RvIGVuZDs8L2Rpdj48ZGl2
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
fTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgfTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvZGl2PjxkaXY+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH08L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAvL1ByaW50IG91dHB1dCBmb3JtYXQ8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyBhdl9kdW1wX2Zvcm1hdChvZm10X2N0eCwgMCwgb3V0X2ZpbGVuYW1lLCAxKTs8
L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAvL09wZW4gb3V0cHV0IGZpbGU8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyBpZiAoIShvZm10LSZndDtmbGFncyAmYW1wOyBBVkZNVF9OT0ZJTEUpKSB7PC9k
aXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyByZXQgPSBh
dmlvX29wZW4oJmFtcDtvZm10X2N0eC0mZ3Q7cGIsIG91dF9maWxlbmFtZSwgQVZJT19GTEFHX1dS
SVRFKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IGlmIChyZXQgJmx0OyAwKSB7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9M
T0dfRVJST1IsIEFQUE5BTUUsICJDb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSAnJXMnIiwgb3V0
X2ZpbGVuYW1lKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgZ290byBlbmQ7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB9PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgfTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8vV3JpdGluZyBvdXRwdXQgaGVhZGVyPC9kaXY+PGRpdj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmV0ID0gYXZmb3JtYXRfd3JpdGVfaGVhZGVyKG9m
bXRfY3R4LCBOVUxMKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBpZiAo
cmV0ICZsdDsgMCkgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgQVBQTkFNRSwg
IkVycm9yIG9jY3VycmVkIHdoZW4gb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7PC9kaXY+PGRpdj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBnb3RvIGVuZDs8L2Rpdj48
ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB9PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7
Jm5ic3A7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLy9NdXggcGFja2V0
cyAtIGRvbnQga25vdyB3aGF0IGlzIGhhcHBlbmluZyBoZXJlLCBhc3N1bWluZyBpdHMgY29weWlu
ZyB0aGUgcmVhbCBkYXRhIHRvIHRoZSBzdHJlYW1zLjwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IHdoaWxlICgxKSB7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyBBVlN0cmVhbSAqaW5fc3RyZWFtLCAqb3V0X3N0cmVhbTs8L2Rp
dj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHJldCA9IGF2
X3JlYWRfZnJhbWUoaWZtdF9jdHgsICZhbXA7cGt0KTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGlmIChyZXQgJmx0OyAwKTwvZGl2PjxkaXY+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBicmVh
azs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGluX3N0cmVhbSAmbmJzcDs9IGlmbXRfY3R4LSZn
dDtzdHJlYW1zW3BrdC5zdHJlYW1faW5kZXhdOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgb3V0X3N0cmVhbSA9IG9mbXRfY3R4LSZndDtzdHJlYW1z
W3BrdC5zdHJlYW1faW5kZXhdOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgbG9nX3BhY2tldChpZm10X2N0eCwgJmFtcDtwa3QsICJpbiIpOzwvZGl2
PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLy9jb3B5IHBh
Y2tldDwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
cGt0LnB0cyA9IGF2X3Jlc2NhbGVfcV9ybmQocGt0LnB0cywgaW5fc3RyZWFtLSZndDt0aW1lX2Jh
c2UsIG91dF9zdHJlYW0tJmd0O3RpbWVfYmFzZSwgQVZfUk9VTkRfUEFTU19NSU5NQVgpOzwvZGl2
PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcGt0LmR0cyA9
IGF2X3Jlc2NhbGVfcV9ybmQocGt0LmR0cywgaW5fc3RyZWFtLSZndDt0aW1lX2Jhc2UsIG91dF9z
dHJlYW0tJmd0O3RpbWVfYmFzZSwgQVZfUk9VTkRfUEFTU19NSU5NQVgpOzwvZGl2PjxkaXY+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcGt0LmR1cmF0aW9uID0gYXZf
cmVzY2FsZV9xKHBrdC5kdXJhdGlvbiwgaW5fc3RyZWFtLSZndDt0aW1lX2Jhc2UsIG91dF9zdHJl
YW0tJmd0O3RpbWVfYmFzZSk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyBwa3QucG9zID0gLTE7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBsb2dfcGFja2V0KG9mbXRfY3R4LCAmYW1wO3BrdCwgIm91
dCIpOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
cmV0ID0gYXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUob2ZtdF9jdHgsICZhbXA7cGt0KTs8L2Rp
dj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGlmIChyZXQg
Jmx0OyAwKSB7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1Is
IEFQUE5BTUUsICJFcnJvciBtdXhpbmcgcGFja2V0XG4iKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgYnJlYWs7PC9kaXY+
PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB9PC9kaXY+PGRp
dj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBhdl9wYWNrZXRfdW5y
ZWYoJmFtcDtwa3QpOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH08L2Rp
dj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBhdl93cml0ZV90cmFpbGVyKG9mbXRf
Y3R4KTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyBlbmQ6PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgYXZmb3JtYXRfY2xvc2VfaW5wdXQoJmFtcDtpZm10X2N0eCk7PC9kaXY+PGRpdj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgLy9jbG9zZSBvdXRwdXQ8L2Rpdj48ZGl2PiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyBpZiAob2ZtdF9jdHggJmFtcDsmYW1wOyAhKG9mbXQtJmd0O2ZsYWdz
ICZhbXA7IEFWRk1UX05PRklMRSkpPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyBhdmlvX2Nsb3NlcCgmYW1wO29mbXRfY3R4LSZndDtwYik7PC9kaXY+
PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLy9mcmVlIG91dHB1dCBhbGxvYzwvZGl2
PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGF2Zm9ybWF0X2ZyZWVfY29udGV4dChv
Zm10X2N0eCk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgaWYgKHJldCAm
bHQ7IDAgJmFtcDsmYW1wOyByZXQgIT0gQVZFUlJPUl9FT0YpIHs8L2Rpdj48ZGl2PiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5E
Uk9JRF9MT0dfRVJST1IsIEFQUE5BTUUsICJFcnJvciBvY2N1cnJlZDogJXNcbiIsIGF2X2VycjJz
dHIocmV0KSk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7Jm5ic3A7PC9kaXY+PGRpdj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgfTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyB9PC9kaXY+PGRp
dj5gYGA8L2Rpdj48ZGl2PlRoZSBtdXhpbmcgcGFja2V0cyBwYXJ0LGRvZXNudCB3b3JrLCBhcyBp
dCBmYWlsZWQgd2l0aCBzaWduYWwgZXJyb3IsIGFmdGVyIGZldyBpdGVyYXRpb25zIC0gcHJvYmFi
bHkgZXJyb3IgaW4gdGhpcyBjb2RlLCBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxpYnMgdGhlbXNl
bHZlcy4mbmJzcDs8L2Rpdj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkhlcmUgaXMgYW4gb3Vw
dXQgb2YgYSBydW46PC9kaXY+PGRpdj5gYGA8L2Rpdj48ZGl2PjxkaXY+PT09SW5wdXQgSW5mb3Jt
YXRpb249PT08L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAm
bmJzcDsgSW5wdXQgIzAsIG1vdixtcDQsbTRhLDNncCwzZzIsbWoyLCBmcm9tICcmbHQ7aW5wdXQm
Z3Q7Jzo8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7IE1ldGFkYXRhOjwvZGl2PjxkaXY+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IG1ham9yX2JyYW5kICZuYnNwOyAmbmJzcDsgOiZu
YnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
aXNvbTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IG1pbm9yX3ZlcnNpb24g
Jm5ic3A7IDombmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IDUxMjwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGNvbXBh
dGlibGVfYnJhbmRzOiZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgaXNvbWlzbzJhdmMxbXA0MTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IGVuY29kZXIgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDombmJzcDs8
L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IExhdmY1
Ny4yNS4xMDA8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBEdXJhdGlvbjom
bmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IDAwOjAwOjU4LjgyPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAsIHN0YXJ0OiZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgMC4wMDAwMDA8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICwgYml0cmF0ZTombmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyA3MzY5IGtiL3M8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFN0cmVhbSAjMDowPC9kaXY+PGRpdj4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IChlbmcpPC9kaXY+
PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgQXVkaW86IGFhYyAobXA0YSAvIDB4NjEzNDcwNkQpLCA0NDEwMCBI
eiwgMiBjaGFubmVscywgMTYwIGtiL3M8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgKGRlZmF1bHQpPC9kaXY+PGRpdj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBNZXRhZGF0YTo8L2Rpdj48ZGl2
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGhhbmRsZXJfbmFtZSAm
bmJzcDsgJm5ic3A7OiZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBTb3VuZEhhbmRsZXI8L2Rpdj48ZGl2PiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFN0cmVhbSAjMDoxPC9kaXY+PGRp
dj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IChlbmcpPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgVmlkZW86IGgyNjQgKGF2YzEgLyAweDMxNjM3
NjYxKSwgbm9uZSwgNjQweDY0MCwgNzIxMyBrYi9zPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7Jm5i
c3A7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IDMwIGZwcywmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMzAgdGJyLCZuYnNwOzwvZGl2Pjxk
aXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAxNTM2MCB0Ym4sJm5ic3A7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDE1MzYwIHRiYzwvZGl2PjxkaXY+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAoZGVmYXVsdCk8
L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IE1ldGFk
YXRhOjwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
aGFuZGxlcl9uYW1lICZuYnNwOyAmbmJzcDs6Jm5ic3A7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBWaWRlb0hhbmRsZXI8L2Rpdj48ZGl2PiZuYnNw
OyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgPT09T3VwdXQgSW5mb3JtYXRp
b249PT08L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsmbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJz
cDsgQXVkaW8gc3RyZWFtIGZvdW5kPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7IE91dHB1dCAjMCwg
YWR0cywgdG8gJ291dC5hYWMnOjwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IFN0cmVhbSAjMDowPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7IEF1ZGlvOiBhYWMgKG1wNGEgLyAw
eDYxMzQ3MDZEKSwgNDQxMDAgSHosIDIgY2hhbm5lbHMsIDE2MCBrYi9zPC9kaXY+PGRpdj4mbmJz
cDsgJm5ic3A7Jm5ic3A7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ID09UGFja2V0IExvZ2dpbmc9
PTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBp
bjogcHRzOi0yMDQ4IHB0c190aW1lOi0wLjA0NjQzOTkgZHRzOi0yMDQ4IGR0c190aW1lOi0wLjA0
NjQzOTkgZHVyYXRpb246MTAyNCBkdXJhdGlvbl90aW1lOjAuMDIzMjIgc3RyZWFtX2luZGV4OjA8
L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgb3V0OiBwdHM6LTIwNDggcHRzX3RpbWU6LTAuMDQ2NDM5
OSBkdHM6LTIwNDggZHRzX3RpbWU6LTAuMDQ2NDM5OSBkdXJhdGlvbjoxMDI0IGR1cmF0aW9uX3Rp
bWU6MC4wMjMyMiBzdHJlYW1faW5kZXg6MDwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBpbjogcHRz
Oi0xMDI0IHB0c190aW1lOi0wLjAyMzIyIGR0czotMTAyNCBkdHNfdGltZTotMC4wMjMyMiBkdXJh
dGlvbjoxMDI0IGR1cmF0aW9uX3RpbWU6MC4wMjMyMiBzdHJlYW1faW5kZXg6MDwvZGl2PjxkaXY+
Jm5ic3A7ICZuYnNwOyBvdXQ6IHB0czotMTAyNCBwdHNfdGltZTotMC4wMjMyMiBkdHM6LTEwMjQg
ZHRzX3RpbWU6LTAuMDIzMjIgZHVyYXRpb246MTAyNCBkdXJhdGlvbl90aW1lOjAuMDIzMjIgc3Ry
ZWFtX2luZGV4OjA8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgaW46IHB0czowIHB0c190aW1lOjAg
ZHRzOjAgZHRzX3RpbWU6MCBkdXJhdGlvbjoxMDI0IGR1cmF0aW9uX3RpbWU6MC4wMjMyMiBzdHJl
YW1faW5kZXg6MDwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBvdXQ6IHB0czowIHB0c190aW1lOjAg
ZHRzOjAgZHRzX3RpbWU6MCBkdXJhdGlvbjoxMDI0IGR1cmF0aW9uX3RpbWU6MC4wMjMyMiBzdHJl
YW1faW5kZXg6MDwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBpbjogcHRzOjAgcHRzX3RpbWU6MCBk
dHM6MCBkdHNfdGltZTowIGR1cmF0aW9uOjUxMiBkdXJhdGlvbl90aW1lOjAuMDMzMzMzMyBzdHJl
YW1faW5kZXg6MTwvZGl2PjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+RXJyb3IgaXMmbmJzcDs8
L2Rpdj48ZGl2PlNpZ25hbDogU0lHU0VHViAoc2lnbmFsIFNJR1NFR1Y6IGludmFsaWQgYWRkcmVz
cyAoZmF1bHQgYWRkcmVzczogMHgyOSkpPGJyPjwvZGl2PjxkaXY+YGBgPC9kaXY+PGRpdj48YnI+
PC9kaXY+PGRpdj5JIHdvdWxkIGxpa2UgdG8gZ2V0IHNvbWUgaGVscCBmb3IgdGhlIGxhc3QgcGFy
dCwgaG93IHRvIGNvcnJlY3RseSBjb3B5IHRoZSBwYWNrZXRzLCBhbmQgYWxzbyBob3cgdG8gbm90
IHVzZSBgaW5fc3RyZWFtLSZndDtjb2RlYy0mZ3Q7Y29kZWNgLHNpbmNlIGl0IGlzIGRlcHJlY2F0
ZWQsIGJ1dCBpIGNvdWxkbid0IGZpbmQgYSB3YXkgdG8gdXNlIHdpdGggYGNvZGVjcGFyYDwvZGl2
PjxkaXY+PGJyPjwvZGl2PjxkaXY+Q2hlZXJzLjwvZGl2PjxkaXY+RGF2aWQgQmFyaXNoZXYuPC9k
aXY+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0"></div></div></div>