From bb104fef5d745ac3a0a8c1e6fb4f1b1a9b27d8ae Mon Sep 17 00:00:00 2001 From: sr90 Date: Thu, 2 May 2024 13:25:49 -0700 Subject: [PATCH] feat: get start number from muxer and specify initial sequence number (#879) Set the start number in representation to the segment index that is sent by muxer. With this enhancement, you can now specify the initial sequence number to be used on the generated segments when calling the packager. With the old implementation, it was always starting with "1". --------- Co-authored-by: Cosmin Stejerean --- docs/source/options/chunking_options.rst | 4 + include/packager/chunking_params.h | 3 + packager/app/muxer_flags.cc | 6 + packager/app/muxer_flags.h | 1 + packager/app/packager_main.cc | 2 + packager/app/test/packager_test.py | 14 +- .../bear-640x360-audio-0.m4s | Bin 0 -> 17108 bytes .../bear-640x360-audio-1.m4s | Bin 0 -> 16365 bytes .../bear-640x360-audio-2.m4s | Bin 0 -> 9638 bytes .../bear-640x360-audio-init.mp4 | Bin 0 -> 804 bytes .../bear-640x360-video-0.m4s | Bin 0 -> 99397 bytes .../bear-640x360-video-1.m4s | Bin 0 -> 121891 bytes .../bear-640x360-video-2.m4s | Bin 0 -> 79746 bytes .../bear-640x360-video-init.mp4 | Bin 0 -> 870 bytes .../testdata/dash-start-number/output.mpd | 28 ++++ packager/hls/base/media_playlist.cc | 6 +- packager/media/base/media_handler.h | 1 + .../media/base/media_handler_test_base.cc | 4 +- packager/media/base/media_handler_test_base.h | 3 +- packager/media/base/muxer.h | 2 +- packager/media/base/muxer_util.cc | 4 +- packager/media/base/muxer_util.h | 4 +- packager/media/base/muxer_util_unittest.cc | 94 ++++---------- packager/media/base/text_muxer.cc | 15 ++- packager/media/base/text_muxer.h | 1 - packager/media/chunking/chunking_handler.cc | 6 +- packager/media/chunking/chunking_handler.h | 7 +- packager/media/chunking/text_chunker.cc | 10 +- packager/media/chunking/text_chunker.h | 7 +- .../media/chunking/text_chunker_unittest.cc | 5 +- .../crypto/encryption_handler_unittest.cc | 4 +- .../media/event/combined_muxer_listener.cc | 6 +- .../media/event/combined_muxer_listener.h | 3 +- packager/media/event/event_info.h | 1 + .../media/event/hls_notify_muxer_listener.cc | 6 +- .../media/event/hls_notify_muxer_listener.h | 3 +- .../hls_notify_muxer_listener_unittest.cc | 13 +- packager/media/event/mock_muxer_listener.h | 5 +- .../media/event/mpd_notify_muxer_listener.cc | 12 +- .../media/event/mpd_notify_muxer_listener.h | 3 +- .../mpd_notify_muxer_listener_unittest.cc | 122 +++++++++++------- .../multi_codec_muxer_listener_unittest.cc | 14 +- packager/media/event/muxer_listener.h | 4 +- .../vod_media_info_dump_muxer_listener.cc | 3 +- .../vod_media_info_dump_muxer_listener.h | 3 +- ...media_info_dump_muxer_listener_unittest.cc | 4 +- packager/media/formats/mp2t/ts_muxer.cc | 5 +- packager/media/formats/mp2t/ts_muxer.h | 3 - packager/media/formats/mp2t/ts_segmenter.h | 1 + .../formats/mp2t/ts_segmenter_unittest.cc | 3 +- packager/media/formats/mp2t/ts_writer.cc | 3 +- .../mp4/low_latency_segment_segmenter.cc | 14 +- .../mp4/low_latency_segment_segmenter.h | 6 +- packager/media/formats/mp4/mp4_muxer.cc | 3 +- .../formats/mp4/multi_segment_segmenter.cc | 17 ++- .../formats/mp4/multi_segment_segmenter.h | 5 +- packager/media/formats/mp4/segmenter.cc | 5 +- packager/media/formats/mp4/segmenter.h | 5 +- .../formats/mp4/single_segment_segmenter.cc | 8 +- .../formats/mp4/single_segment_segmenter.h | 2 +- .../packed_audio/packed_audio_writer.cc | 5 +- .../packed_audio_writer_unittest.cc | 25 ++-- .../webm/encrypted_segmenter_unittest.cc | 10 +- .../formats/webm/multi_segment_segmenter.cc | 9 +- .../formats/webm/multi_segment_segmenter.h | 3 +- .../webm/multi_segment_segmenter_unittest.cc | 32 +++-- packager/media/formats/webm/segmenter.cc | 3 +- packager/media/formats/webm/segmenter.h | 3 +- .../formats/webm/single_segment_segmenter.cc | 9 +- .../formats/webm/single_segment_segmenter.h | 3 +- .../webm/single_segment_segmenter_unittest.cc | 22 ++-- packager/media/formats/webm/webm_muxer.cc | 6 +- .../formats/webvtt/webvtt_muxer_unittest.cc | 37 +++--- .../webvtt/webvtt_to_mp4_handler_unittest.cc | 4 +- .../trick_play/trick_play_handler_unittest.cc | 4 +- packager/mpd/base/adaptation_set_unittest.cc | 42 +++--- packager/mpd/base/mock_mpd_builder.h | 7 +- packager/mpd/base/mock_mpd_notifier.h | 5 +- packager/mpd/base/mpd_builder_unittest.cc | 4 +- packager/mpd/base/mpd_notifier.h | 4 +- packager/mpd/base/representation.cc | 27 ++-- packager/mpd/base/representation.h | 12 +- packager/mpd/base/representation_unittest.cc | 17 ++- packager/mpd/base/segment_info.h | 1 + packager/mpd/base/simple_mpd_notifier.cc | 5 +- packager/mpd/base/simple_mpd_notifier.h | 3 +- .../mpd/base/simple_mpd_notifier_unittest.cc | 8 +- packager/mpd/base/xml/xml_node.cc | 5 +- packager/mpd/base/xml/xml_node.h | 1 - packager/mpd/base/xml/xml_node_unittest.cc | 55 ++++---- packager/packager.cc | 9 +- 91 files changed, 536 insertions(+), 357 deletions(-) create mode 100644 packager/app/test/testdata/dash-start-number/bear-640x360-audio-0.m4s create mode 100644 packager/app/test/testdata/dash-start-number/bear-640x360-audio-1.m4s create mode 100644 packager/app/test/testdata/dash-start-number/bear-640x360-audio-2.m4s create mode 100644 packager/app/test/testdata/dash-start-number/bear-640x360-audio-init.mp4 create mode 100644 packager/app/test/testdata/dash-start-number/bear-640x360-video-0.m4s create mode 100644 packager/app/test/testdata/dash-start-number/bear-640x360-video-1.m4s create mode 100644 packager/app/test/testdata/dash-start-number/bear-640x360-video-2.m4s create mode 100644 packager/app/test/testdata/dash-start-number/bear-640x360-video-init.mp4 create mode 100644 packager/app/test/testdata/dash-start-number/output.mpd diff --git a/docs/source/options/chunking_options.rst b/docs/source/options/chunking_options.rst index 560a2a7cc8..4bb909e043 100644 --- a/docs/source/options/chunking_options.rst +++ b/docs/source/options/chunking_options.rst @@ -21,3 +21,7 @@ Chunking options Force fragments to begin with stream access points. This flag implies *segment_sap_aligned*. Default enabled. + +--start_segment_number + + Indicates the startNumber in DASH SegmentTemplate and HLS segment name. diff --git a/include/packager/chunking_params.h b/include/packager/chunking_params.h index e12baf0b9e..ddc31675c9 100644 --- a/include/packager/chunking_params.h +++ b/include/packager/chunking_params.h @@ -31,6 +31,9 @@ struct ChunkingParams { /// and mdat atom. Each chunk is uploaded immediately upon creation, /// decoupling latency from segment duration. bool low_latency_dash_mode = false; + + /// Indicates the startNumber in DASH SegmentTemplate and HLS segment name. + int64_t start_segment_number = 1; }; } // namespace shaka diff --git a/packager/app/muxer_flags.cc b/packager/app/muxer_flags.cc index 2a68b1ee91..be6c3520b4 100644 --- a/packager/app/muxer_flags.cc +++ b/packager/app/muxer_flags.cc @@ -73,3 +73,9 @@ ABSL_FLAG( "If the first sample comes after default_text_zero_bias_ms then the start " "of the stream will not be padded as we cannot assume the start time of " "the stream."); + +ABSL_FLAG(int64_t, + start_segment_number, + 1, + "Indicates the startNumber in DASH SegmentTemplate and HLS " + "segment name."); \ No newline at end of file diff --git a/packager/app/muxer_flags.h b/packager/app/muxer_flags.h index a27aff8638..527ca77939 100644 --- a/packager/app/muxer_flags.h +++ b/packager/app/muxer_flags.h @@ -22,5 +22,6 @@ ABSL_DECLARE_FLAG(std::string, temp_dir); ABSL_DECLARE_FLAG(bool, mp4_include_pssh_in_stream); ABSL_DECLARE_FLAG(int32_t, transport_stream_timestamp_offset_ms); ABSL_DECLARE_FLAG(int32_t, default_text_zero_bias_ms); +ABSL_DECLARE_FLAG(int64_t, start_segment_number); #endif // APP_MUXER_FLAGS_H_ diff --git a/packager/app/packager_main.cc b/packager/app/packager_main.cc index 34e27256a7..8e542aeef6 100644 --- a/packager/app/packager_main.cc +++ b/packager/app/packager_main.cc @@ -360,6 +360,8 @@ std::optional GetPackagingParams() { absl::GetFlag(FLAGS_segment_sap_aligned); chunking_params.subsegment_sap_aligned = absl::GetFlag(FLAGS_fragment_sap_aligned); + chunking_params.start_segment_number = + absl::GetFlag(FLAGS_start_segment_number); int num_key_providers = 0; EncryptionParams& encryption_params = packaging_params.encryption_params; diff --git a/packager/app/test/packager_test.py b/packager/app/test/packager_test.py index 6df148c753..0bdde8e1a3 100755 --- a/packager/app/test/packager_test.py +++ b/packager/app/test/packager_test.py @@ -485,8 +485,8 @@ class PackagerAppTest(unittest.TestCase): use_fake_clock=True, allow_codec_switching=False, dash_force_segment_list=False, - force_cl_index=None): - + force_cl_index=None, + start_segment_number=None): flags = ['--single_threaded'] if not strip_parameter_set_nalus: @@ -575,6 +575,9 @@ class PackagerAppTest(unittest.TestCase): elif force_cl_index is False: flags += ['--noforce_cl_index'] + if start_segment_number is not None: + flags += ['--start_segment_number', str(start_segment_number)] + if ad_cues: flags += ['--ad_cues', ad_cues] @@ -823,6 +826,13 @@ class PackagerFunctionalTest(PackagerAppTest): output_hls=True)) self._CheckTestResults('forced-subtitle') + def testDashStartNumber(self): + audio_video_streams = self._GetStreams(['audio', 'video'], segmented=True) + streams = audio_video_streams + self.assertPackageSuccess(streams, self._GetFlags(output_dash=True, + start_segment_number=0)) + self._CheckTestResults('dash-start-number') + def testAudioVideoWithLanguageOverride(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], language='por', hls=True), diff --git a/packager/app/test/testdata/dash-start-number/bear-640x360-audio-0.m4s b/packager/app/test/testdata/dash-start-number/bear-640x360-audio-0.m4s new file mode 100644 index 0000000000000000000000000000000000000000..6e56dd8555c756cee3aab506c0bf6c812e47d5ec GIT binary patch literal 17108 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 wv9)YrYu%EyUbG(hMoCBf$}FF75692A#{d8T literal 0 HcmV?d00001 diff --git a/packager/app/test/testdata/dash-start-number/bear-640x360-audio-2.m4s b/packager/app/test/testdata/dash-start-number/bear-640x360-audio-2.m4s new file mode 100644 index 0000000000000000000000000000000000000000..d6bcbb5de8cac9e9db7d2d5f5b828ac3cf72d62a GIT binary patch literal 9638 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 literal 0 HcmV?d00001 diff --git a/packager/app/test/testdata/dash-start-number/bear-640x360-audio-init.mp4 b/packager/app/test/testdata/dash-start-number/bear-640x360-audio-init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..3176a92d7ffa0de1dc456099c79f121dcbee20e5 GIT binary patch literal 804 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
    {ob29wLUokNEW)3-v@ZW@BPJ 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 literal 0 HcmV?d00001 diff --git a/packager/app/test/testdata/dash-start-number/bear-640x360-video-1.m4s b/packager/app/test/testdata/dash-start-number/bear-640x360-video-1.m4s new file mode 100644 index 0000000000000000000000000000000000000000..c6b356a8e91bd296a177ae497fa49724ad030cd2 GIT binary patch literal 121891 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 literal 0 HcmV?d00001 diff --git a/packager/app/test/testdata/dash-start-number/bear-640x360-video-2.m4s b/packager/app/test/testdata/dash-start-number/bear-640x360-video-2.m4s new file mode 100644 index 0000000000000000000000000000000000000000..4edeba974ee718574d59fefaacc194078f720fcb GIT binary patch literal 79746 zcmYhhV~}XU&agYSjXk#QJ+^Jzwr$(CZQHhO+cS5c@4Z#$q^hfvC+SqJ^`pBh9RL6T zaz`h3J8L^;27rHJ?r6*YZ&?4wHqv)A(|0jsFtj#t{O6)}G&gelPs~371ORZR2LQOp z`akoZ4ai0d0H6XE_kV69Yg=2Be=35tiJ8&=9|QbvnUs@*{(m@z(|f|HPpEv#kICBn|(c8vuL(008mh|E&gq?gRh; z{rW%sKY5Ux|A!a<57+uH2RZsLN1XXD2W|QvPViq268v9|;rU+<%Ku-Eocv!7V)0)N zfB8SW|GykT;D5OCe>n{O|8TwkaxnG()Bk-tAj^cck^aAbC8=v176gzRfXve65XdSw zJ*T-)ec;IdG2jsRi_YAcOF%Gm8Fy5*pYaFJd)izXMx3~~x%W77Bu`aAQM2p-p9|m) zAVvRU!&x?@sP6fZdm36xiBg=rQdJsb3f#oK^+s09$Ns641Ot2B>e*OKid$d|&J2IT zBXuPpzlaHK`CDkD1iP1EYa-BiFr2Mw9VdrpP%NO?yx3H&Y%V zh;*B)u@D(AqZE(L6yu~!s+$yn{&CM4{XsT(*#uUqZdE-L z@Or)08L9;zYP)Y1`Iy+^2O+b%e0hV5*pBeryHlLn?`@Qz^a$hOO1Taq zApI}fyNIN!7L>t&6&bh*iM6vnCjQ%HIy)jf~YSrQw#}C`IoNBzR*EHJyL*R7+h>!wp{vb}dh<994^fB+$;#*R~NrPVUqC$z0+K(Q}| zF!U5(upS^+U=AUkQHPZ}qD#szOOxKD*XoSngzwUW+8wmVIf5Uk9-T(abL_|JniQE^ z#iUBrA6PLa$BtD4PMw8z-SykK^skCWONq8a(E>|=6u_g@_;OpgTZ2+?Q;~_gq+FUg z)!+t1N?dE~uIR%_s138gnr&K&L9^RQgg&-zVli!64L)p^2##d^8*UvSd%*LArB%uZ z$S%{S!0BmAT)4|J&q&adnEB|Mx?z&ooxm2<%r$1LAES ziN4kJ(4Hr*7SkuUh%w0*W^n}@ZDIfSAJx(+R&p%+8im8r@=^MGnR)T8=->_LjI&2% z(jYY`A~RblJJ?JU&IGz)_;9eCX_k+@q3NN(kvAg8dev=NJCt$Q?vkdAK;=@5j;6AB zsaJM7RwZf1B*c4?8Hg%vK$YY>aKQu;9W615D6yjCQ8jPT0f@@kcp$!%+x4ChJOf6G zxmn$FdowEG2aIFndz54+zS$U+71d~N%TN@V(% z1F3XEOB}gq2rv8s4^wG+bo)%TTKLd%jxe5>3Zy6`Sf_k4dA_V}4lETxB8H|H0pxY4 zWJ5(?kdfQJ2e_O<*_*7iXD9VxbI8M-OK%PZKaCaUOeJ%6VIy z+2)|&@QDHrToHn*))kt_PsPw=CB8ED3_6WX2V&#+9X^X$-+TPw`W1U8iAL{q+3edq zBv9!;p}Ri!%W4WRM|!|wrs>gQ_(6^CQNLsp9$3Y3y;45#fRJOJerfLsEVww1+;W{` z8G)}9hfRuO$ffB2K5vDX<#K7r+}X9n%o=?;`b&8dcfBMcrz z*h-kIHI_;hNLWoKT7NhI!qm+kgFgMiQJzY~iq^2PLa)?PJRcNPT7$RtW!W0Qk`}xA zjy@#V^lr9foG=AmWs(o1&nb86B1|@i`z-pp5twMxj|3FU^AIOe`LszzIfKw3$)5bt zK$Xrkyu@&IqUs+CaX#SSG2Q@vzXy#?1BdR4$%bo5)`YigAKUQT5SfoKe1t7ipM21d zdrc=b=CRQ-M<41jb^1fmW;sfX73R4$fdxZi`lt~T|5{t$$A^spcw~?LSoFh(Rc#0^ z<|MZv@8#CfK|EP88Dim1l&;^daRtSlAiH-*=l&p&;sxpxkQe$!R)7iKQ6cug3_pt= z^+(dQwMmEi60pTDqQt}a?5buo?p^6iT?W5_{(w zE1_o_lVxtLGjCCgc{w+!SXym3pIWgMw*TiTsoJ9vUO&x;F>3A;$+x8HO=$vXtd%7yajSimus7KIw%_t^b zJI|5V(3yG>)QW|T2Uo8pa2a`SYV9eHlSNsTT!r_U;hK ztO!4Rt!5SD46s6kyPF_h?v{FlPj*`|6|qUd0a2n=tr|}PM9L)rfT!rOSjl9XkIW6J@^SqOMx8l zcXP>PcbQMVF;aL=;AB_TX_Qz5hF`@^@k!Lg)?zwcXs!}22j>-irnAu}K%1VHZi{1z zWHw?LZ_y!;?8w(_-0ALk+_-aym21AAo(I90<9`$umBl==rUG=ewXwlBAAzds zF6VjAqr6REJU2`%ddlFX2|Vn;QT z;?4)m>@*UL2~M%V^N*E=UGX*a8&>c6#2BfYF&#VMn8ZI`-8%3q4^mEQHK4Qka=5f_ zpPnF8at6c3&$2qKi9v}p2iuG{Glo?55OPQHF5hWFLJL(LXcX!IOL!rBNqM=xJ{>Tq zuF$!OrA3lU`*2yMn=8Hp^A=>>)=iP(eBeFxwhm8kpP&@JB*+(4kT;hROD_8vYjbur zMWc4UNo~x%*9JeJ7>}WPc&K*A?*P}k5}~xG4^qQ753BrHM@693kGQ5WNR0_R-$dZ5 zYalhJ$UJ2$q;XDO!i*AJMY|syL=9z|9rW~l+!XP_iV%0b%ggzBNs7=}^YU7_A+FP% zpIKflg~#4nrR^wIhb2U$N-fx_KkP3dF^2+5k@3Q4Drq(S&gftQsGT3cNW&^Ig{VnF z7X}J;Ah!yhv)lO4kB*R1g05ROg{;VvYGYlA|E#X9o2k3eao6RW4P&f@g$Ei)x(FEQ zmK?v+&k>oK$)SGg3)HhfjK}W=(dPl}SKb9)%P=l(=PjQur7O*v)>!i?_R>afmSJ5r z1=*KYCB>5Aqr&7(a7taLMPb8}0zb&OCBdbxsCQU5?I4Dt;qUR&$MMM$%r6I39&eB4 z(LOT9xHtAF2NQZHRVJF)@Xot%G6u3$n=lD_VH1z)rVim3K;DY-LU)g11N!SkobTY5 zwW28hxi-3#POX_JVsJX(-qTBLN~7ECOYrNoU4|waK}agkELe*yXMa5a?xR{?l(@P4rC$E_9eUKtUB6lar(2g{oBwoZv3pD zM$B!~k4~^t*Bum6u5Le<=x0+VZMw_dv9T$$_!_UJR5jKqHbjxXYET1OTcww+r!suF zWbFd!sRD{-Jv>e197C@5WIY zWL3n_J_&1|Q!E`L)46n1FRB-$HARqcTsos@bqfqN=KEfDf^k}<9^tMJ3JJBWHx!Ek zw9Y};6ry38Ue|aIQ*`Q4KS%}3ftC~%^@MI#&W3^TlMzN}SRdDO0@y$kFJ@xU-Kiqy zN|Y9RzX6RYq`{EeSc_WKhCDrvdksGt{Fto}Uq^0cqg%c>_8L?^YipA}VS7;Ne_T#8 zya`r+0EA$c$^XEM-klzT3D*JYcp?~SeXuw(#T2l~`Cz1+Y&G^%S1auZYEH(HgBDPE za2@tJzOL($bdXQee0onrY!fd~Jl{N*MmCVdA?7IuNLVi1U9;U0(zR=Q8MaW<6;l>H z%`}-7QhKhy&glE|DNzUnvH$W=jKKw2n95+cfRUeM%i~BBv7+Ckm_P8i&zD1;P(}i` z?l??p?uo-9bxUf4FJyyS0D5`|H!u~T(@JyWndqed>#_KY$j^m52%HUsUfCbY^{si} zcxC1vg7<6uQgqzUY8}(B?O)iJw1T+ty$g80_eocu)}6Xn_jp2D;0n}F9nZ~?z+Aem zH$Jo03n65HjcoJ!sxR!gI5iJRv{^?+!lns-S7abhS8Dgg@Y>bQBFoCSnv*vJC*6e9 zm%sa&pd!2hZZNk#irkJTU6zf42{+%83>xF6bMECK{R3IroUyHTW87#vOeD0zN zfIIy%T9r2S|LYV^kwk#_Av+tj(M5kSFr|4KmtpFr~W259P zeLhO(wWg(9w;i#m)-<3mx=cuO)6=UFa6P^sC>=aQ$eN<=tmi9i@nzHOdcn8Qsn7XS zfVlo>>>Euv?*Yp1y36=^2bs=5EaIT~BSqa}l45fn#+K)6wpk~Y?H&Cwk4p1)VwiV6 zQ!=sks?CcDC#I4 zwb%95m56+Elw(OdTXjV?^t?p3p)l~6y^u9J5X`rl4_2^M&zEk4b@R@jp9zjbs-jI` zr<%ov7Ir_^)#T8gNx^M2oHUv!cT;#E?o-_m{yv9+Pr*PS5<}D!I!n@fmu9j`_lM4tcd}!~XP%!~3FpG5H1p0^S^l;)h1Y)A3wp~y0blFZLQ*3XyFT&HMwg1cJvmZ=6Q|zstF6< zjS>zg;8_$&?gwU{oD?KJMC$bk1W)N%X!9KWX^T}?ng?NY5^*gd>?+$3uSvTp&0Vv) z>Km!~n`!FBQ4#=sZQdKzHd_puis(Mw;rz_F&`1&Yx0tEv@`+AM!Y4>p=fnYUw@rAf z90>9KaUB+jPtU@DZl39N6Sw`d>mwT60I6#mak_F3s%afAYaq~rAq1>O@{XUx3YeRL z(9Va9XJh!;m-t>?WFEK2#OZF-Z8NAPl=5{1$5(kFt7#u!&RC#%G)vjsA!5BBXT!Cu z1t3!s(giy!z0cT8XzPPwWKrD=NznIxl3$mEZA?HUeyN>ZtRFQeqr?mMdKpQzNTh9N zKy6XLEku4rNXSUrPegK^$9^7FHaMylz{Yr3-czd zVv8XAj%uHdJp8WmloeEbrex^boRDaW$59k#BwX`N_#-DygrKSPSO@NQz^Y{T55!Y%YL0~Vbq%TH+VLYf zzTUzFoCcP6x$SQr{A4N^%e(Eu+oJ1n34SGtbRl*Risl!hiHptWRnf%1^q+*Ga^CDv z>#x{|Icc1`@jW)-+eeOS?-|fx6gfWBdUCAjAP4FWijJgbb@W$Cc4Z;kE+PP&Ke3XusNI=LYdwkWeoQ(xNc5Svv6S- zDP%9@1emCyMJk(N)s6PM2`jq3SOHyAH|3D+l@B?^hL=W4(4z%gA~Tel28!u%LrKpb zMn_epO%VxSWNQeV3~ekOFH*ISBT8JHy&$JOm27B;SMgL0u;A$5a3Kr((6fy5+3O(x z%VnUKDBe%J7REByTI~`)660FfR}tAlKV#?5WzPMR<;h?H=Va~xCh?Itb8f=TLC|=R zKLHBPnM5S-7lN*tNx%u~>4HXN$}x+4o{djUHPf*N3n~I$-yH8~fItVwB|)2{i$W0W z%|Y~fb1=XZM8*zC`VMcf)R$-xw5e!4`c!A>&qIIiaC!fz81<)AoXZhjYYmLa_lZNO z4OombfIwfmd2PbIB<;dN2;8K^hgnTPPtRRHg{?84*_%q1*I%k8aS3R4qFy-HM0DZGZ0u(!Lub)Dfxgwt!k_2V1I~xi;)Oe^37`(ygXgyATx3C=x!u|2K zJQ##Jo+l;5Gl+jB7HTO?g*fu}gl+uBz4u13MwM>3x0x9+_WoekjEk zmaVc#nj8#oK~hOar@1WER)!k_)K*SJ`2&hB3_Ro+GJ~%la-QwxYIh$@v$4S%)W2G& z&DxU}S1yxeFGa`QM6855>pT<63fjJC3#Eu$8b;$WtDd7HmgaQi@m&39%f!WszK!t=xdwUH^3;C3I^L~ zU2aNfb9~d7SlaW*5T7h}CBNrdOzND+BIcHpnN>bjH7I0^--^Btl}DRtG)griwoUP9 z+zdJaA3?2!4x)4KS+T-8w>d69aB?6iZttsh%*x8DY+|i83&BUS$2#mij6s*q39I;z z?^TKK@=11mnOLpZ0}#ttgR?)AzE`3`({zEnFC)5zL@=s3fCa0G_{CEH%2p%6POm~% zD&P(_lpVp&$JCI5>(5;}tWISbxmMwHlIn$GJ1tX3*+3-#By%vOAv=0^#;^T-3#tQbmSZH#^v3zda*+S5B21?Cl?Bl1IpX;eZZb6YC=4 zYXqJ{0w3)>WlJL95I~HGXDRbf2Izu{CGtVAC5rSiv=qDqe=ZEd;IrZpULH2sX^JUW zG8>i=4nCd+5j^kTV>(fgS=|=c0A(1caijdbNr_{t^A(Cc%OnBQM%)?$igW+J5>|OA z;5u!o39$7d#L{Ya@M)yMkHOJj4^B}#S&??_(Sx*0Km1jLbn@Gl@j*9ZlBEeE^FQMK z;#8WQp}6_AOB#6j#p+)5zrvIx4Rs(AyWWX@m=g|Ga{l;-B@G@}K7zt+=AULA`xm51 zU49vXh}fR}fvaJ5IyC4TMgr!zS9CbG#5UxA5P$*=SGc)XCpN_!k)v+3qDuRV1xaur z&dD3j5f|uBT7%5dF> zPik8vWK&>3v*B+g?fjPIC)lL8X@dm9&eEfzf}pOg%i2X-INvD|;D@??Hx1y|r_^Ar za_<)wrN6~PP-Rd(tc;8MTeNdmxSI;*Si$&&9zUrIFruOb9SmEbN}X&I?glyCz1o+* z59+**6+j7tHSPDZFTN6;_{Xm=40=pl2Ieo*vrlWrhyQ zPi;G>Y;(-<4zMEx(nF8cIEh2}ri?-3Y=yMKxF}oagb?}WKag+`0`RP5tsq_QEPp}& z5`S2xuGA|DM=0`-khN&W`=-(yrA}X`?^65VqXuGu$=8_8XtLr9h zB5Uz0=ABtNW4)XN?A;o**fHP8Cvc7xioOxjz1?9z085^Ju-`T{h__JZLt$eEHa`jh zt^Em^Zz8j1LGGJP3$%)D)o3-usx!U4wt{Cawvvw7-G;f2D^va{>jrZ*(<$~1hj?ZO zw=f{EVda0A!xc+}S3P;Z`5|eME!!Toxlg#3E)jJMbs-SGz^eYJ_r#Yf-`3Y0ezO1Bb0mwf2+Om7zaExPW28G`Ha65BIyK!0t0#FVB zV6&TK86L`bn$RmiFF|dzhc`>Ov@)GI661BdG_lws@Oowkq8vY6VjL(EQNLB)uZo(E zEYnt7_I&E4-K?@3_8U64Uj}X7v`E-+TmRCMZscnqw5=V68h!aR6dPg9wO@rI%l+Ne z~e=u>@I#VWjmZm|m*X7PA{zs)uMwt?IS6alK6U&azIy5RUY zm~AQh?BuQ+i4Liq|9E?_&Ce|Ww8mZ1IPnzNcu{{M`9VGAp4AldPZEJZc@@SSHF0Xu z#v#dp14{I{E_0p_O>3YqMY8Z?_`M{9%J3I}HRcH$@4>71PYDp=PGvgfxQA6WaZ`_u zZG%gW3k%086d!*^o?knN2;!U(O+_nJXAJbilPNtpfLNQxqc0hTGbtj-eNGhEEr6z^ zpFTUic*Mj~uR1G!WR4Jw(QT_#$5D@&>}1Kms!=)Luiw&;c+s_k{GL>viN=D3*gZQxVNM{dH}JuqFVx(`=rj`UW6InrhWr%`oEJeffb9nN#- z)U%7%wNhwpJ^=S45P4kHMMA7a-A$Fmb@yA)7NaD*0JK~O=uwkV(>_PP@Sq>;<>9^S zr6-E`8}vu?%Z-C?c+?So7V_s#Y=}{|$OggP##vdmb*B~m<}W0Zv~8b1 z5*@*QMNzwZ`y7rS=0U6l@lqiUpg0dZ_G|}tWz}rdR51tA;qh8Fgjcr+aX#n}LcG+1IqS)qqk)nbukr{9XJlSgN^E2P({<$C%Wi{i|hD%Yy(ALR&7! zlcP?oPl>Y}NgWL9j%hgL*+QO{Z^E?+-L78NSo+J8hg_C$qt%6LByU7U{|aeSc;lFL8)F#tG{r$rGf1@jQe|v>RSWIxaemogoWbe>GSW1`?~>)sfZ-A zpzgcQktzsYzxR=~Bv^G-?NbrTqI+18Z+KQ=eXjz(?~igwx6|2rm2`IV$qRcwbdK35 z|K#^SPPe6Qqlq?#p%$(O&Y;`3Q~HOekC>d+=cEF_T}MMFBD|TMwyWdaJpv{;2kYZY zUL>{qhvLeWWTz7RX~={HtPa}nikrTXxdth>xXd6w9D+*zvkhE*wiD!;lql(=Qj)Y~ z0HTaLigT*i>xr>#AE?E&g0j{vmu1bSE8w2O88?;rUJD5^ zkEru&>GhPR<=O|bhk|xK)5G(F`M}jTO%3i&zu(RCCJ zmdoi#`y?*Z-`B6felZBJ>pcxfY2T4onw-2V0E7>}l0t`qyOr+(GPDV?wtm}*VxZ53 zkYKsxRn_g^*5mX)hih=skfDNoC>kUQ93E^&K@9W_w;Dj4~Iv(yj&?31185;cxMw;8@K-hNvhEK=@2N* zkm8=(w(W>nzoi|7$iEqx3tTF-9Z&X7ofUVz<*OB%Lea8vs<3)dT*d?-)PAarV1TUB zW0NYe#b@N1-sh1F+TC_|a}V|hYeFX|j!C-^%yRIcwptn(EqRnsETrTJdxVB z;8HJ70SQeh{0hL-T=ATX_Fq-}lq+4iYQqiq3ft;g_0E09Oy-Cnyc0xy3-Rl(NhV@x zF1zEA>E}&!)YQD?NUN#*Xucc+MZ>4qi9cPhEK#VSWoKi~+B5j>&A&&JbF!8}tFtER zU1%2Dj!Xlyvl!a-Pt}Xbc9s5sFL|_j*%7omZ8gH#`5AQX-^7i#1K_w+VctJ+ZY`6X zb!m~+VdgL{sy{+496MDCq5uhuZ-%@qHNVOpmRpMwEgjSKsHqp6F;yatIBu8*h(kMN(31Sr8i9u79VJxUCW1h)iyYr6_{+fsC&&9z?F_(nA&(z7$*8kjoP2Qgacn#Z-DMV;yB;twX!KiO%wFGL z^44Nuoj|NbcTvAC`B$@1TgxU`K{||-M8Jeh*fNLB)jwU$z)Us7d8@E!eE3n)Yhw=B z8behkB#DhR=sgZypeGL~V^i%aDcOqN+Bbn6pR+h;jd$lhedl!8X}kw+0Rh2iRb8z? zAqzQ&?pOr~lrqCoNmOtVZN#e6f^$4D$oFw3e7aoq!MMDZ>>9)*(8_*44*iL|3Dy@* z8)!6m{gb6=+rmbg2fr(DCK)KtRIOlVU34@t>Kse!l)-XY!?VP&s-9^h`b0y7meZH6 zp+4Qt);&S+-r)6uz8b=Z=7U!&i~3Kw#iI0fo@5@sv?h19GU>zwuo_J6D>M;dBw0wO zV!5-7$jsq?Mlonb6S^&Wv9g~q`owp2wwYc89K4?`AYl|AykGTzbAMIv!dTzYMC(#U-g}J8z^27@zpe<;x8_jW z^9?lR;D&>0%{2B-NVK%o)>BDpY&X8@?(7uwUNp6{jk*j$N)jvT+g?!Jo7KV%|14bc z8eQ_$2=TkO(|D}gppL+eXhDhUVNk$uW!ShhjSp$xR(>PCaCH-)|46YlK<4X)sdwe~ z46hW7!-eV$EKbJP6iorOhW%FE(n%^P6L#3G$%E#xiZs#Ai zQ1vnj?zDJbCDS=?;W_k2LaR8SUfkLk;{!+P_st-^NNGlxI^~=vy3`-#s_j5p@9}{E ztogilET@kSl^2K)&qoyYB}q`%oU)6(!7;mEEJce7A{{42IVq_Q6;qP%XmvX6Ogw(j ze~_?K4DIFSWmjLFA}+1U{{8D`R2;H1ZNe?Qo0;zlGI=PKHqhi9+9laV8<$Enrc17b z5@3}|XConytlxq^;|lF}#yGc|eDD4{EQ-<^Sze2?s)o9lHf`DT*c7ai(Zws;wf<#K z?+MAC(T+>&SVjG{f75%j^NU4eVQAv@ZBP8UDNE;zY%aD454iD*;6nB^9Y%) z3ht;T$x)OCdzMr2B&&Rr9PHUCO*7*oHL+ZH?i)N?un=P|SUJc5egESknM^ppOod4o z*M!D0NJQeWU2I)LnbG#XKIGPnXzwh}zmo|{ zD|;w1t?H8=MDvq@a&f;01||t5Fw}|xKC>T zaY113?0LuRH!{Wb>8SRDg#U!H^{=>jUAd|IrXgC3TYx_u2FORR-^!!=W@9GZrO6`2 zQ(~76?%K+$zVza=0gO(Hnx}UPBsEaU?2b$5tRY!m7Vv`>_lZo6 z3n!~~rc0&yoYy{~yl?ls?VD24+J~9*$Uj2S7pJtvY53n;`Cb97#-d6?EmsC!i5`3v zv4)9FU1Ir~Zx|l?EakNr^X!?1*5wR={PG;rq$yj}Lg8jJYC7|H^ACYWoHr7w^Z0iV zy6+0VQ7U%JIwq!gjnDZ*X(oftu67u)1*!dmN}^v>%awe%n_}N;W?>*P06eW6`)RN- z(gGera&%*M5XVy=p3nK~eMH#pta>iQe{IkkV>*!;Cjtp!TAd$p%Cw$C!fLODESoJA z?qwkZwWxc`8j2i-W@{LWkgvs!2jsRC^Z8H&3I^`Z;h)7$`HHov&zhRiyhaXI8S;r~ zX~~t24P;LXve@Kvn0)CZMQ z&6lMREEx3#u{}F`Lus>EJePM^LLKTT>T@B`gPOCD8n)iDa3$H7Gw9@e;9lyt2b4SS z-v3PMb)Fi6$wE8~`I@tOy2luB3NChJJ!z$Naq`MW5Rl+Gy;OGM$lXRQ*J0%+tVu6* zsJH5x2MW-DDIXd-dyPky55OL;%q0Q$2E2eRA)+c_*bv4Q%JNizc-;k7RKJQ7O{01b z0x_Xz0kCUJ@1+e)<&IA6p0*PL^@s7_z^0hg`Xv0~Y4IlyFG zU1Gr^r(|MOy){r=Ic3yTNSM>JQ#`l4npK2%K0719xj;< z2+9r{C>DMU=(>$e!TQaO2w%~ohUE}Ucft1VC!A_Jfa`>T zhId3l<0-A!>kI;Fu^@2wVC`rfI%R%rIMab%RZC| zV|2ofxzmFY!hRSZ)OBdZVzuX^=hoab{n#e3jA3?xmWd}LOkJyOb0Q=}`lq8|+e`|l z>0wr4tRH4be4(4kxKDAf0mk7;m8|VB7Jfz`u`XDNrD^61sSiDq<1B?--F~0R4L%279+5t(Q1>u)fEKU$v2h$Tlg_%EYqC2NM*PZx!V$(yLIJ1L zEu#^l>)ztuQFze3o;Ifyx#_1JYU}zd;N0>wLKQiQ@_QNm03cIpA5Vcni;I#4sm@_7 zhplEk0#m8tkuJ(+GFfPg;u3ab!WPG&WWk8Zz3vv}Ks36%m^+_WCtmSI1$3}Wpm4k} zIxB79ndy0PD<1(ASL(P(>f(oC;fM?SZe6k)==m{96R0dhqW-7&JX~KwXA^h1{$8|f ztsNmzl6MupA&(TW`g|w!65z4vJX}S#L>^m-G&>F2XoEFjA64Z=0dcjU?m_bqAW6Fd z#YW(86(3`wFT9kTf*yf*ZUbXm8#A<^V@Mjs-U#<%VfrA8^FWH%+V&w9h;nT_{t-Fv z<*a#>N5tu7=`o$_p@cO0jtui@FOjB+25;}c-3=VP3Trz5S0n~B^;mb3HZDh~rw-rK z`jLOvLnWT-zS6Tav6&At@g&^$mT7ZddK|kLsukY&e1fSP>_j=x?9OKbi?SQQGqGVO z%?`obmh^6)ESfKH;1#lAEesTLl@wp(^95F{rg*r`yh+PkWV=7#GtHa1Y`+mGR<4NZ zHitTIsNhb8CPHDoSQvhN2Vp~8qe^dszDq#Xq@!ugNb~spIr{;uMXXbR$yuw+rK8j`C!}yexWfPQxY_{+%9?GB~XbU zy&Zzn>1L1H5is`=>XVx4vBcsDw;~jA=@g| zdxFE7s_*4W;ho_kw7*O}4vNdfIx|@#2V$qoHOyaw}CvwOOsB?-4Ism2K2!u49I$;em03M4$I-kh<$lcpQT#|7ifj5``2d>v3&}w$$)CU zvwzr-9H+&i#J;_SdwFHuC$l?YpANm*S74*z`ST|W1qb3tfEgBr53$0{u<}FXlsiFh z3hYS#u+DPYy?tM78uT(Q9h3K-F_Yk!dxPvH;Kl>U9FS^^bF@uI;C?f5x8LkppYEs` zK}CSKhF!kJv_iZ|!UlmS_z#4YMejZ&LSvse?gbLj z^u`?A%${%HuS~leW3!%>ZDBoWxihncWgW?hg7{4@9lxPDPzhQ;^;y9=r$}ZUB0?RV zj%oJdgRB&ma6n1`II*zP*QZMS1U z0cp&kT%s;+SnpUGtC2KDBj?|pm!#*P=f*6wHwb`2r+gq68fd!l!Ksnc6NinWb)SxU z?3UXH=m*bsTu9hMgz#(^4*S=M*_6qt{&j>60!e-ychc}6B$6TJW^e$xX1gbR5iR5) zqyGA@-4~h_%AaQu1)21tV6N>GHlC!N&A+)h0M!S$K_M8SNL&t?T z-27{KvClaJ1$<#P_^F!lhwKlgyiy1-6i%RW!Tk=n{WMe`U_I0$HCgh9156f4hY3Pr zJeqf4!{1{*Ta}2cpL6A;I(^o`pLiwKb)XYsNS5sRd=Rw_ibifP4`9rj-}Oyd6hNwx zU;PRR_D=ZR8`J1$mk)G8z5<2sCaC(<`SFu|Q%;4BJ1%$s6o5)%fvh1A1N-joVt(^- zBkM|D)TJsPydo<2@mz=B8o_5&+LUihH**XfmYYikrJ7osh}UKU=LVD*_{>OOcbdst z((oJEY9}Uvg-Z#?xvx9PDHihw5IPN;%uLAa<0;FrXn`zxF*}dQIg1zF`C@lT#be$A zNaAC5TxGlDZNlXW5I{FK&--C?xG9wzB+OXTB;TrTFwG5RilkL^VW}N8F#{T6-tw5B z8OkkIi9Ssug|O<+(jm$aVJuOTk$-3vUwo9Nf+FMqE`SCOZE?4P} z3Bk#dU3n%2CuUMVZF`67k%pN%XYrMn1r!>5U(ch^&@$GqVUkucVCE2Bcdg+yEfkMbJb_4=`ItiR*!pTg2<>0VgYVgp7iXbVWnF-tQO@2@4d?OM=r#*Pc_wL`1YuFrD{GiH5DuD zp_0Q(F7Sh3ugnIsm?tsyaQoz{la=BTXw#CtY%EBpKM&{JQdN&Pr-dPcrnMQGQ>u9o zgm0H!8jR3YZB>kxPK7YAcDX=_Gr6kRh(K#12^{VQ#S!|p!f&OktX@*ex)nZ$;nUrB zgocZ#VY4>jA-&k0wv|ZI6I+_c>gK-2Ig=2kc@_seWIP5ARA-AR8j4v;rFg-yu79L3 zee}z_Z9uJXhFTbLVvf73@p{P*+yT6haQ&p(Zs)B}uS48Uin5K77yUMnM9WBUH zmCnJu#K00JQCz^3s#h`GcA9!^KZm)C5`;@ma~kKJm@j-A&fL=J;`uBDFZh4`sUau> zlU0-~cX>@8T2<*Sf?OIweM&6l$TABhQ)<-jlS&2T(?y&^Z{#>XFOu)v2uVS=F=`ao z?$C_Gc4r`Zp6`NZLse9nV+~CBOz*v4h+rRwqLkp8;lCujPHRYxtBi*zj7J7zqdut= z6TQv0WGF@|Lgx0d>osh~Q#a21j@^8X&U*vBBOx-O-1m_MUe2x3B9La&gvNRpT5Dhu zT2pB-9VI{G3!8EXGC~qmoYX8lSMt|4t=)?4*c=mt$^)%{VCzz|J0T<@g4mffx*3fa zSZ<+srg&NWPWaD}_Q$~`@Vm4&`O{I$29~cnA37{JO&0@?FX#afc4MzWrO03V90#k5 zF-j8g4Tl9gHM~&YwH9Jl*h1OMlWX=IpCOn#=%WB)3Mr>a zXX_KSy#rd|%%2O1Oapgso@teMAiOdM^n%qqwqLC%npt)e@I6!MxUEbE7?-MlwwJmF z&inudXI$}CXUt_Oe_racJBN5BMT#S~Xk#uu#yM3mf9*cmr*Kpg}`pG{%~8|*1F42T=WO+^0g;#@WiLBNaYuEey7Ea%s- zzsc{?i`P$l;C-5zI&@a`!=z2&#&WBgj)cuksy9*YB|Gj@8>8|qzFQo(U4G4KggYE^v`reh)-He#Nytg zBp?SgO*jp|U6#r}h>9}@yo>P6;AVq%PCaO#Xfow|&WAk!r046dyZQe%1*|s{DsXo0 zjmg*2^Ba!PQl;r}t{wd*qJ&kAG}YvmfZp`+s4mo{nnYN;L7>gIo$Z5;==s$FKHELY&?ORVh?5{GLqjB`P_+4nq2p%BsgZ0ydB zqbi;i^@WM_0&u>fn--8nup8hvCVu@3Pl)Nm8UqLV`XvAiF*wVSS#BRb+wD~HEGRQX zaZvk_qqV4&jB>8`LB0zaP8(@|Fb9k**^(JN3~$~(ANpfDT2T+C)e>m&LSc*LVdnXc?h3;-y4qAk*6gjeBJ*6KqvJ)R>ur@+B)PDXM~@cK4}WbK)u-ER5Xs;kE@_ z225(hKGF5)ZNo{)BK#%5Qm5M3=oooIp16*nH?T!GXFH^tF>vq+r|H9KrX96Wd1z3du7Yt_sOk|cFCulzA*Pq*6x4|*@JeC_c~h%XunpIb+;J>&}w=f z-gkrQ{x@Ar_)Q361kk9Ay#{?4104lmCtC$jEG@ct^^#u63HHDWYaBk~l*Ie1@6^; z;taD`rXrLQ-%&qkW2@?^wfjY>gcn*PO@9j*IK^y&xaw@mQAFL(6}EP97k*IY0p`PK zwt+lvkcwniUatJ<1xUQ+D_6Nrq~7sQQLw>%*{pbOa2@*-=+7^YiV9fOzEo-x4RPEq z>qA`KyaS)}Zgs1#z{+0u8o^#*?g}w2>LqaI-GDOl7FV94-n>0w0N1W$92<1ip1A=0 zvWqd?;4B03u3fS2nDy_}WXTpZy={NWNey1xCTEj>v@*)n=^I#`1uRP3mr!|wrcMl3 zV$T*kyHrOV&AB5CLxLzx-i37Q`%@XcOX5v7IJ8dcI(w~mMf_M{z`rMGCY&b5JBAGi z4BR{<1tz_TSNkw;_HLyLDMHyT0jLxhdy;}hv#J*rl`MN%>>g$ij1w$ItE+=f$__P$ zS0}#zCY-joWFag=7#H5fUbBg~7rLA-&`UNhF<)iCT~W!xE{e)!?y49H*~ML)#K5mXssE&gb|^P%crO zYba7&>-2o7ZmQLXo}v}ii|lNQWSP^cY&hu->Wr~4feYoudklQg4Zs2EQjNaIQips} z9Q{uU{@OSh8f4v?7{-s?)cb_Bw=Lo;X<|eU?B$Xx*QR!dpR90WHytrdmW}C2(l2ti zfB=WumFgobu!tgmqnGyvuXIGiX&`sz*Y90tLgZCVL%uXbkz$vABU%J{d>AwhsacCJ zoNUY1O*}Hy;!Ewo*>IyPE8SE-Wf5HlegXNt^EY$EkOioBRkMI4+8z#zlEYeV2&WS4 zf|0KKZ@e;wZA99Yr6k^XzWhu1POR=ilNRuVGqnp(6Qrk(z7??Z713=%JTFlv;X}9B z?GIq+nJ055p;0mc`Z#pv!eDePw#d8s!it>PZF1u5+}nIzOT{a}qsjlrrQLa$E7ho! z5qc=JcAM)T(RI*<-(GeeM90nnxw4=uD#26?Zs+WFp>dA%+_R@oynP+4vVsLxFW$To z)yF!P*hU(Ml`*N`LK6EO_rB0`P$L6LT$YuxK|wbiG;s12-s3m^bG_=?Tv8|;z&ty2{Jj1wsWJB z19+a-c_oeF_N{m{oiVcNUMeMIn!#et&?m*Qpkow&E4VwOOdt~OnTVz}8m=nX?_k6+K{!_wSr4G{Y9;n@1io4fBNBDJbIM!k zeam0UvBd~jYRZadz3#~rYT28wa0McY4gBy@TA|*GM|LS^1O=exKBtlf5sWt%e$3t& z#5Vv@Y1{Hw##Ij~&fS-bm8Dm|{&t0!!lfX6$@wwj4!yii{*Lo0gDJBr|C6EB+or+> z|LbAu4(=zY=C`9(pDDr6 zMQC~3tg2GGS>w%RU*Q9_FmgsS+es=Y_B z2G#q-Hr|C*FuF$y_!6b>F<42>a#Q8?4aN9HBVM1x;F%S`kuh8k=}wKGW%<*X4S|p z|JpboukWJV7n~-NHhVleQ6TK%$S@3nJ~&hy=P%}XKRx#f{iSc%`e?y1ab&;YiNYc3 z%WcL?Cfii9HX}J3mK%csSDe-LX*Ih6Md!6hyrG*%27>5(bauBg?rixA{Zo%9F{n%9 z$I3aJe^2Pkoz3YxIz+&lpUp=)R&FYe1fX5W+pIDrV|L8Mc^k zX;cj*!9CA_n`92;Al6Wcvcy5QFEoM}c4@3H%(~W={ePp4eX1dZr30Z?zPPi$Ch9hm z`=O#wPlUjcxY*9SeD``+G-OOOTp%>0Us4(fi1zjH^d}eDmJBzi-dxZw(q6VT=XJIn zVKw@wmhyj$glFP-_+~EBMM>QjNpcHY(^H4x>0XH#NZhJ6QTJ3u4m4fn#t}VD350TZK z`{t007Ra`;x&5>Ry6X2-0Ai1WCwV{B7m6j)0wwalSHL!&qHKV4qv<8xXw~oL*tt4@{>mq(agrlTUSI$W0jf!}eZ0=EZ zokw-*h;SPYOs_;|Jb+|hjwX?Jm2y0bqfjoscYhVHHInu?&@-;z_b?f~m5ar{0~fxbwb@D*czLnw%tj6mr=cZDr&{{hGNeFSAYVVYhsFsZo23&Yw zul3UeyRRwyD6@@x4FW!ml=D8`xdP@(TSg8AASER413Y~R>1&Xa#-e#4J_;8Z)sHh| zZe-m+B2*Sb0-sg-ev}uYBLXNRRa=hBndm%_s9!S7N$DY@eI@^D#+zb9>B&T?DCW!S zb{<=_qK%_nM;BgL0$?rhHEx)CXpvN68gB-@SpG%^ou;dgMPpTWu{eQkQV9 zTO&Sg3FpZlW4=O|*jpx@iFTPlUA4a)zW*XJ+Jr*;Rdj?$4`@PSpYQ~v`?Vm^YsnI! zE0f)cpc4%_7Pf&RWruoT_je?TV{0HV+^bqX8&FE)A^Y2cVx8-;y`@3=rEG#{$~c}E z`cZTH5UKd~x1*0*42M-kCDagMLtd^nt8oQ*JSNXRYzbuT3GTvJ5`301%62N;hLjvG zW%K$5M}WdZ1L%(Sw@BT)xp&q^TX}%R+3Tg4xTBf=k7u`l^zR>N)#h*a1SA?y?^=qj zrrczL6H*p+C!MSZGjAXfw=<-Om9sA%dVCRMMr_Q?qqq;Fr>JP`W;wGK5Q_b$Pn$_( zS3(a;ScH%fQ)JeJwvR|9X209FO7;CO`CI+ZG_Ec;RJKL$3}WW-b9<$VXU7g`h}vkl zU&7JXu%ne6#xmg=crUB_(i{%W(-llw^{aaJKl$=x=y{I%GZD2+N6&3X`42g+uu(SO zwu=9-1ZCgf8*Xo@r&%3(`(f!e=9o%&Zug!nPb zy87%8qf3Fj!uhQy1ZH#mE(dQUdQ$Kj15tokc4_&&z6>*yMc2ckM*XCBMY9R1+pyhY z+Q+jjE8-hK+02C{N{*-cbJEjdA`@t91h_*J?dhg+uBw17=YpYHS;Uu&BIcT^I_05j z*XHQEZF@wPBY64$z)lcnnw%1$hP9~WYxC@wQSKRYYC0M)e6gelU$zh z0ex1s){%g7s8jAlcahHa!dYsW=MU74;>^(}yI#ZDP6sjVAmLF6`&#cmC_Dk+1z04R zAO2J52DXG3du8Vug6l1fpRRB(~+UBhbkTV3EVA0>_2nN^3Z_Gz9!=^q`@s&TC9?%SZH=xe)1Gf- z{toEh7{B+Y0dAzIS_DAov~Tk7lXi}Ov0t+HU|NG3{fMOY2S>C>z$Lwd8`FjuMdOts z_uT*GEhH_OE`Xy6V}=G-@TUT+x`I?=-&g~PmKN6xEz6B(+H}rI<7fuJTA8S9EzBL zqr8Ze&8`8{2Znv@TZrMmkXz(Xt`M3OgwKmK{s7O-^?N(SdS3zl2bSah?X9h>LzLUB zOTQi3%lj+1gdh>_GA|rBXQH$BWM{jw#8?qA#_sK!j4l76Kh_gnF+NHOpm0cM|&s5pY)GsK2%p zN%vNZJL1AFa|u7BZ&3H-#E#S|PaXfTcevX%^TwOb(g~}GurbzV01!SvgvA*A&X$SN z`83Po0QGjy!brkVNaOcNpaIb-jg}9NJJB3*(G9u82G%tkRBm%2lOl#o+!b1lR47o? zf6#dp!WUE(CMriehSEk_-TZg{H_Jn-AgH?{t z(vfBnX57M>I9z_uP9$X=2$Yxj+%&IZIiW1y-P9sH^GpT6XkbT6t(qO17**y?r!m>p zOZ=@ktvM{pXq^Vl1Z4_a;p%|BTE9<|GAgI_a`X-5hkf(RqZw6rD$c6_$GyUC+jnhYmAm=vL{Nop7}p$a+e&D zQWrAa`;Dr`3e+IioJ^aH`$M~ z&PQ+dV2!0?(hwO6`nA@BBv4b`-v#+>{u7y0%?b6Yo|U(8KSe%x0zWu6B3|cnX2O#w zl)bB`YaCXnNO?V0ET-nMT41Y}sDmsH=eg)i%@)vrggXX0Q#3k-<>w;U4!=IcMaNA_ z7ej^XX+jJqe&;p_CK_L}bIxVj=Dc~!i;>)m0@dLNk?L{0@a}-avG@bvzy!ks6)yhK zN~r+I6$t<87v2+Kh{|!*?eKr1bFJ|@u!;uzjb&B!0Odk#zVjZm zrHQM(mt1AS%E|*i^bxz3@Yux!AvE3cwXJi}PRO1+_ zq6<-Bj@bTCg1&z{h(b2V5)zaiXJ2y9lZld?^K z7^bI2`vuu^X9)(pQ;?3zr+yb2w2uTUZ2dKB6)nFD*8D3x>mYPdvGnW`~m?dvj`F-C4LV%$S4nZo4?M~EK@D6#Ydp-LNv`B!)T#;Yt*TE?0g+{&U90^ zn>7=}Bf#Zc&Y^i~4AylY6%fMP*yn$~X&n+?b%GyNJq}|JvANdLk9Dc-U66>|f=uG_ zuGVGZQ5`686u(V*vI}>yO`(boJDHW5N$BzXy;GMjUp_~3Hn;IboQ+CXKfq{i+g1b(GG1eCIa+Lcr0I2 zJyZA88@L&*b4HN6 z5nr=)C_&hEr!m+C`*RdZfxUPP=1xVXKh_XG^ylZ-1o7zDSW^2ffQvYqxc2U~&h^dbKt45el6y?gQjPIJjW| z1x1*nGKR=BOgcDloWz%mnepEcdz9dJfR0=T5~P-ep`Dl5e47t(}pc66N_^&yslWQNB-cdvTnJTJo14 z@W77C{I!n4@S>~MC7egQug4e~AuhWmlbSQU7I<2VXvuboEez|qj6~np))Vmw;es~Vi!!HQ_j~u7Yr+M_UNfB zpz}v5J8?FD9@|W#I`+{NDVX6z^N^!q#cOA^!KcJ5r$!&?&X1q$Ppr7{Q-72FIMD-P zN%O6scJnk&?@o!=nv*~W!IM^>B3N;U8 z{%@Y7dJq-qWcFRz87<(Ad>JXFu)feO?FNQ^`Gw;X@R`OO^Zq z<@F1pSub)AIa`gSRO9hxYO!0H(bD7+b#1lInRsf;06lRI^7!;Ww;(pKL-JorXF$#rURAt}mo1GTuX-U^R`*e6X>ZaZ6E#S$PVg*PwGjz!4h01z`-%MU_`1e6K;QD|OW{8QHdx5f96ht-^+4k?oY@g}YRBcBF7K3R1=aw5zLAO^g{T|H?p`^F5k+i(8;=fZB}-YFN7oaueX zogd(6LG!2Bm=%S6*PP0i`kqY?X?L9!X5}@K-W3VX#=h$LQgvRKbVH)#c9F)oO``w~ zPBVtAMLs^_sQ9tUI7K*I$#%8X$PCi?)OE+JOvpfeZU%4jCw=#a^hMCI_)LGboihf{ z8i)O-+?+O)wUMdUEBUgml!LY~o5wq1EWH$XGv|it3J7k%07eQfM6gAI*Sgzv#jt>wq5+Q zu{$aX4TIxce6O2*JZn+;oq?HW-0m1N&f`9LmlXeOGbt>_>O6M52t)sOXK z8Wu=g>zQkE3QE=*KAGlfayQL@E^pXKIj94Cgi^Rr+uMpry$-*soJ@X?so($9@Dy-; z5VxX;)Heu46s5b#@@000H}0iHp53V;2}jX6$zO{wsB zYJ_LpS7y(MKj_kn@rLLvFKkq?3R4bBL@4+xa#)8+K)zODpdc*wqpj)BTt@VEo1|UA z)zM^>lX-)c1|w~kM;hcR!{5^=dht-rflY_++0Wp!2Zq#r_j{1A5Ahc436|_~FQw>) z;Q?r3O$5HY4NK|mAKI|C$@rUKx52n7Lh337{6IzZ(H$w zl=aR~GpRnx_vco0I1_T)hedy#!xxs;!W-nh*tBn9c8_B<{?M$E6=)ovW8WDQ@gzx# z^(W=+U?8bV{v?f!kPO4TPV-Ez{~>9&R{mU547`^>=DlS{R}hk3lyBYQr-JF4&XSw! z+OS0eLt5gaRake0;r`#pYQ_auagRuWxim2hA_TF^AhF^*@_+M7+Jn`lc#%qLbr4l) zNQY~((L7m2%s6=ciMCT~m&iojHmVsJIo`p*rnOM(4i3uxLA^f{W6ZOL#jtGt^W}5} zATA+?xnskUt=Du|#`D3%8z=7fns%$;6ZjkXI1%e4zI)9lU7%~~*Z(dp+66T-(Z%)P=cG-@@uSU$=# zat503*a;sPajdpLK-s9BV->vY8&nlb^t?KK-)44=7W3#phVI5!TG36*p@CLhgV1cq z^#KEoJ?Z7Owc^dDuI4L+N=sVOj!TQ>Nv(Et*(8_+djCr9%xX8~x;DecKd6+|XLHfv zMgbsQhT=BY7G-TSVNuGekU;~LnzI_s!U^l#eRp-U`MqS!Aau2FiaS^!s`gNaJg(^6!kPA8ZHS|_m4=QI|!3Mgq9 zRT#%K(H2-ND{EASkssIPqh8AEP@)**FOVpx)i=zs%RZ^OcmT z%@=G1x(zzG!Er5I#2kbBlUUS1M9c9lNXtW6@MCb$z(yc0hVfW4Zs=1V_`r{Da?c^3 zF=w}hf|8uOqE@)d%?J_PR+XyG1F(a2ATZDpE7u(nae!@FD)nPo^^$DPt-@$cWjCtA=H3H0&CbZtJN7B}) z4Z%Ypkn0Ocx|^h({Tv(O5u>_H=z!WT0SdN)=rmik54H)!(+N-W2&=rZNe|-H-S{BA zZ!u>*D6WH;9(z99t}OhMn9RC+Qu@T8u;vZ5ZaTl9I+Dnwj4Fe)udrA+Rm8t;rB~77 zxl4~DA@^6ukooVt`Ym;;iBpwZNm$(zaR5KxTvz~3BBty2EchbS-1Gzbt(9eJIx*v~ z$bz0frmJkcCs&Uj*m!*u^CZ5}InxT%a9741&d}9iK%J!w<}^kmG|5yGa=r|D?9e-q zYPW&!%T8r)VPR;qGBIPX8tL8n0RZ=nfoLIfRi*Y#aKceZ$yfca&AWwD5P|b1sBkxV zyBixw15+`grE%uByxC%kZz$Bi$o*H~qb^}cSY>VS_P3v;k|M>qA7MhI9uI-MDx!(; zl%}ck#zidYB4y zX_^2#?WvHU7KB=#KrA4;>hnbXU1O64knET7!q z&@^R-000tkL7GH7A(JVDSMbp(-UnY~OFyZt^$`|2x&2g7?~|RFD`k;cNvPYPnn$cm z#ok_tgvG1F^=7^uFbc}b!{4xO0U{&8HfY;UKaUD=4@K^J{^7r@72wD110oyppd{E( zQaFFHnByfLRCU@sFiP{Nr{O@RdTbncmMe}a<34eV{KqKj_A3+z#6(SQC`#a;kVY|I zk9=qb_Y)n_uCPBxGsMp?mHS%O-7)Q9$^${Ncr=u~*rd2d7HbNO=1ELfwY{j%p0 z`sYPH0?NJPM{i3UMNaCdwF3v{EgLtfcmbTi8!Wd+ANId&$bnA1T>flknS)#$Hy69E z=fmKON~E);7Ru*PDp5f%^6Q?NCHPx&jhh~7ZUtrm>nTjBX{ct zou*)zO)gW3Ybn>IMA)D!EZa|Raokg?)8bfJ2w+xO+`B$!>TU*#+P}}o6W;_LK@ZIE*HUij+aNCU zvyp&#yL;hQyq1b+BpS zajCoVh?q{1%o1DqbL?(L;eDJU8@&4fk&XL^CpqP1uvv+ZgM}^s>d72%7lZHNh4*QS zfPEXDOOnk$xJwZY5wU)nP<#i8z16OgXgD2Stx-4YDKeYS>E*`I5$lV!sG`JZ^&hh> z=R+XimPztsc@&%9PWTK~$_V#n_Kq>XFm-VY;<0bcPrFaETPlXFWeuIJShIKUnt=AO z+3t<4YD|+!&l}w4XI%wrL;p9$`@>$Wz@Gi3fxN!8(9@NI zz&yIE7A18?<$})*dhgolOwR#`5DLD0pW5P^%)IWOIEO*75!|yci6dn#KJ^U|7-NUR#11P^V*=TR2W?B^(}YFttqM^SXn# zgZ7Qu%>o!$9w=hz+eCa{YvGzOA1U-XC z<+SBtM|y`Q-{+z?K<@DEk*GG9SeTg@-r5ESGSU3Z)`!EJ^?o(Z)+v+gshN63*|7=8 zQ@@x?A>pqV&|o|+AUslKvdt7S#rWv1#PBL0#@)Hekg?wx3YIwBMWM^G)}vBuJF-bA1WcEE z!ANzxxAr=aw(HY(KYvlHe7(Ctj_iXA3vPYa8IMP;Q9<=E3?Zw{%YdO?ZROx^dR_;! z;_FbRrfKb(rH?n)Xvz(;L-jH3W}>RcYf8X>mfM2uE3Y+_QDaiuJ8ip{+R%laak3x! z1LNYd92i<#4`11f*i9))g%&Z=cnEA=yxXZ2ua=xzP~A}2-`R_Z2&;Ezf`LXaVzlb! z1DXE=HvOKt;P$0%B1?K-)pCdI!xiBJ%CvXAxLvS>xx57WqOgIP5|aOWA5C22-}jos-Dap?Byx&kxYp@13M8g#9bj|18F z+#cHp_Mv>*VWZ^KYHt9-G^6k&_8h*MXC!)lF-us#3io)5rUrJ}&gD&@F12sbO0I61 zXmEjTc938SfDJHc8ALWWvwOy8!|sa!M&q@&HH?Z)Jh;O4bMbK^vWD=@Fvra3PIKLo z68ha|w;Asl=8rEC-Kh0zsTl5l6qo%CMdu^c0>K%WT6`Xnj7c|!NhfHHf) z@QQ#A!mC+?apf9z`XN5_j{r10F<{Ond&e)~jOv7?hTy$PGp#N8noBkS&(T68YdMl-h5K5M zN`8nuPP}dcCAT~Hmg&lUw+{s8k?r-duo|t!s143`trdLf8+9MsoXYN&%VY|f7RyFe zXFW-s2K?|Dl{SRgfY~?`W}Enl#CttrB9aLTDMu$V^QO6>7hkZmz}R!ux-U#<#ywy z_EKLP1srl8Ig~}r&__uKDe|^RcQW^N3WhjTF{>4xz|1OIh_utQ_^?rpAGinQ9C9H~ z7HY->Z2X*4O_fsLK>rYH_=5DJSYk=2G$ui1NBjMr05PUg5gqSfG3 z1Y2TtacGgC@$oT?wJjamjw)y|Y>GyCcwZl+HlAvI1Kkstk;9Zug42n50fcCWV=?P{ zVLe+RLFs)Lr?uPOCxdm1AWeuT!hgQ%j7dUS1|U>&g`cvogsS3|CF9rE4WvKTT4v2! zZ*Z1m&rh4!5QW^w_EQ9lNr8gzrV7y@9K?v=?*C_7MCnonTYk&B-4Og*o`7iJ0`>{@ z3sq>cynOgbGWv}2WQpKvXq*psDZXwiz;s~FBTn1Lk(r*0G^#6%$ zZW!v8*$>u;L~Sdu*Low{=XrLb2vpj}DX?w=T9`e{LkuST+qRIa$AW(;p8xR;T3{<` zlUqpi@aN-9`ikE9U#_V8uC7$fg% zosV3`NpS&;ZKXT8E$5nAK&X)%U9ZbiT}|~zHWj(;MH&7d3J+!-3fY&Z7+KR5eBBk2 z*U@_OvK&=Si|A@fXv`n42;1kcHK~4bP}PiKt}dZMxdiA_`*%Qcc>0rq{kC4o-1C5EeD1S&XTTGw+6xIf}>A{G`#)+f1W zISO#GLN&tEb@KCJ+ML+nHO!R$7tU#0Q%bhbfas2--7*|b>nG{V0~bZMX+eid%PF`g-wo+2e$F8>++;LOHj zS2_2a$7{xh(Txtb1Mg2(=K}R)&mckA2TgXqLoZsb96*9W+*6mEVs);XF%R zZXOd5uT>t@svHr5t2g3!H|PUFCNjC9P-cpJzp?bN)TJDguQ_+B_pZLmM7Q=znz@Fz zb0Ta;7crUQ*TJsLEj#9tD#-eAl-p<%I)aFI0Y{eRM5=#;F_!~W`^}?!fd3#5N>>X? zsiFdRD_#BPoP5Lw=#H$>!Ks0%!IFOnI;ptJZBkm9h7;DbIqlUWK{exFf9%Wq13Hul8rJ^{iOVp+sIm~Mtq2YyybFqBIvtsq9CA3%7u#5z+`|8h*)1_de}3f*ta zp2}-J#M~p)?Q&yK`ZbDs9x%M8J{vYPUMg1CJA9o z_x5CWj%HUSg!b!G?4lK`;;bjd%N6-~*~onGzneR(BdC5O<% ziSd=q0AUy;;s(v*1r;H{n*VFUhdEFo4h)P3eQ&jeRx_yN@iu)BZIlC)=o%O^2(tuE zB$qIjf-UYs5@jcYuY4?(+U+an^g+0_scyHPnLU{}eGPJwGBF_Ql1N%8zB>l%52MTv zb-%KMiiLy1KCy0+J`{aZm>2)PUQ&d*8Vu4dyvCZYkw9g6>& zgQ@Fylh#2{J-PnzI>*dG`HgzeofZ2Vb3Jl6Ja$3{Ae& z9_ysZLt$AytIXm)&wYfKg{x>!e&$6WzK5SFe0FE=dMss7?>qz1kD`$A>rNyd@kS4k z`^7P5dbwnGF0e9$TK*u^>3!Y;q|`ZEs@K6TA5_l|DvDy0p?yLpm`;h_A=aK@Y>}c8 zlP9u(Sw>cri(6G?n{$oQlD3X&%kJ;Q8VysT81nTj=h-4cgikrZ0`&dwzS1}9xc^B# zFZ6Jh%&P_GeUV2nlY71+Lc~GTyI*-{N8WC@K!f8pyqT4cu{AJ$6A!0ZzOa=g!8O+S<@M zBN99n1V96%RM{-YQ{p1SxWJ`Szh*6CL{{2}XuPfFt1t4Nl_V{NZ=JaUJH zr>xGbb8f0;*?O&6b&=P1$c5U15s_Jc&JpyEv zrT=W(N%QEuHr$qm&|X2dUNC_&um1-Vz2!@0oe+JHHuX4rQ9uaHihNtr2X#Iu+K$_z6UeH`4v3rZwG`wa_do7cHR?o&z4!q5r>##c$aH zXK%jg-UyXDb(NN>s@}n&7x~joQenZQ=Bb*tcK6FZWU2AnNaL^~QVG>rOBjG>(@^@v z1llpB7~8*9s}5xNU}i1~c;)Nea6NQ#zfr~$b%z#kd+g{KP=z?HvcLwp*kPPe5vlh7 zvDNubSi=MKVi0Ws5A$DTFI!mWiIv{-(%c*S!JC$Bv7!mt$$io8f^VHSdrepp(EJ;m z7IlZ&r~hTQ-xKZKO_t`c68lUa?KA)`^B=A6y$!slBewrOul2Ef#~>S&pQW%SSZuF1 z0m6E`e+@g_%p6iC?13pMRR>heE{W$Fk6j7AHQoh`|8LvCp(_$ss#Gpf@A#zj*8l(o zp#h#_YC@m=m60dn8&?rHy2(Git`zT(Ly+HPxw~(o*%~+2&j1oc)n!HP6#`ZrCS(zc zw0t4jhNfZK(6%z8?S{dBM5_|cm~e-goG?^_lbAoe?^uW7R?orLa2XYA^1hus#oLay zE{D!&n7OZHag|)Q_0O+*lWWLz)XrBN1f@a&rb3LU&2|PG($uYW1%7e@N&Jk%khO3; zjq;^dbYMpc(mo%f|MkaB*BP86q^Dq_t13}hoB(Z}8sy(w$({oNr_o>SvLLp2+mm9t zS;by)mz7qJm^I60(0a$}lRG(GeHC?$Cby&7OlX(Q3vNRk?Swn{6=al7M6*H{X}R=tKrUR!20XqO$|w%Lv!zPFUj-Fy z_K9QFA>Oej9uJoIq&@hH;~V@cv}Boduj{i$u`2sBW=FpW-f%Pmv3LF~3|wX=q5cAO z{>aG!OA@>MBF<-AW4M6XJ6v4c1H8QZa%+*kfC4T0@3`uAkKY?Aw#4_qu~^6@AXA#4 zqeZa8$~d>6_nq_)en)zDBLGuOSW-@PzJ%h>BV_Q7_Ux<@{Rr74VtrtAC~jr`Ib>b# zO^(||U<gM^6I|3KZ1E zOJ^N4+XHMZOWnln(0+!d&cMm9gQsEoC5dD1mXl_#`yr)6AMNhE;X~IaR zdsJtLu|D+C`bLTp|zeih|6mI ztB$dev#4~@p?r%Y>X z2C687>84I^^QR)t*>M;8?s}9BLtQB3X(!=jKaouxgBU2P&KBm~rfXO8D&M{H{PC50 zs@kPofb8~{NKb8DtGjU@b=zi9AHVRK6VJ(|8#d+m}-d= z8uUs=DWSwOUnBr*YK3i#KPrczAuroVqCkXEjUq_M-Y|`w12+Hw5?Dc+W=Y`>CQ}7G zXVhrP!Dca(CAw^7mH#+xJ(>n-^9A{{XcMBti}-GAy(89S=DoeQbj(omF^VpKXe@dt z)XI1)JEs~GGH=f2`%nvC%E+yQ^icvfn7mOZjc-A%sFf&97d=W*3CMZFT5p3~z3f{r zQ=jZ^Bo@u2&WCafg^uf&Grp^+ewt9UN_<7HA9u}qzf3HTq=o8-owx5T`Cyi9r-?J6zlo64z-i8&frYP}d z8gS7=Qim6aZgg-p0Z@GrIXi09_PiiM#nCYK5#UTAoQ|2tI_Pw!1 z(Gx8<&ALl@EGF6M9meH#Hx$fau)Mq`YRg6We@(`@$`T$T&PFPD62VAvjre7JEuUtc zFkLr3VXjyu(AGRi>X-X=#6H$YQ`CRIsuI6+-e+Deh2fEwjokjOBJMW+#9CYFmEKUK zDB!DTd53J{sg%eaE%wQbI(>a>dXFl@hA$D}TAA2{vo78qc-dKGJ{HmN6X!;HM=F4< z8i(NpZ;gqy15AQ zh`F$n-$_5W_$esdY4X48B^`PWh@2QJ++*}EMwCne>>S@2;BstlXLQN)Kb^HGXR5*@ z&>Hf}gh#l8C?t;@onxuM&@Jh9>37z0X%bH`9Q&;v#4|Xl#FmvvK9#x9)P200fgaV-x^;lMV~_ z7y)?az%yrSk35V{v;B3u(fz-vT}DM=jvQ2?4Es^;oCo2|`0f3AZXPPR^Hk}dy5z!j zp}8CwG`89(#zheBu$|w_rX4mIMn;IXh&L-7^=?&^I6NMZA2B#$F%*tDuv! z+yG)goxhsfElgogoL_~+*>F2XOvMb~L|Mun4Bqx0Oz~shpMQ%66se|?S7H3$LU$$J zc%j95`Qza8Q+kvAK1-*LDxRrJRAr^oL?+PKj12kbWfHzpuh%LKGUwT?L~Bp|GNP$b(dV=rt=REjbq#nD_z zPZ681?=uyHGfJFFln6i8idn7zLYZG+J%W!NhMcud_(%xG8!jq}(+DJ)p9l-zU%dU4b@MJbV zn*kGvQ`#~Pk8psoo02s<#sQ1AF@@E#73O1o3ZAujs3|tOixHGowiI1p*7?cLVqAC#`gpFO4{DG+SOs+n*xK_6L~{&{hW26Eo<7_ z==NzyCv2VcT$iRLM{ri$+%F`({_*!q# zuMtdZ5o5qY>2qqZs1KN0LMM$p8IOBBP^}MBrbjXA!{9mYjFTZ&U%>w23LO8QQ#SXo zK=))avGV6tNM&uN5O3+F(EMB#mO5Fz_=^$_^EI&U+!YAx6;FIjFkHz3CW^V?BN5@2 z)#E=Bz+;*U!_4gTTT`X40$ z*%+9?ue@ZdrEy&>*Lk-PCb7l^9w_aiV_}PvRv3p;ox?Nddxzy}yqys5#p|C9{P& zb!u1{G;SaKMuD=HUFw6>N-_iw_ULDrSula^7U!G9?KEdhVk2erjJG0lw5|-rsqqab ztRx2Ww83`niWeUfZvR!}4vr|o|9(qSuy)1|MJDPbl&DW?5>NTbS&izjQTEvjCiw;U z2Qopq2C1*>H`8BRAMckMGFKE}r)%kvx=mfEprq?3HYNy+$(_WV;-~S?2J}qXFw!QU zm^g-Ln>8oH^T4LL^zrrCZjH3^U~K9H7u3fUQPFs(ZniWjTtq!k<`zUqR(+co+d{gF zLlLi0YW9Pt*|k9QH4EXX z+a~S)_$O-9FBZh^?+hI8hk2H9>pEeu%%5xN1pQOKp{`W1pso`I9ih2JtHIyQE}Lu= z)IU|=-?!m$eU7(0(5vqki^HuXmdzK$~H3q7wdYinob3vi5B1Fyqa($1Z>Gfrlti_D%IrAv@7YS&IZWU#7QUDy6>4zi|(kf>~Rt6;`0zO^EA_geJ*U_v??Cu|K z_qYF#U6=_7ltEyStm&rIsAn!`{GM%o>`!->%}Xa~WWa<+bE2vAO3DmX)3n714P9^g zxb#T@SrjRt8zhkzO}0kD`0g71bper3a)TX}x>YR!MkJ0TZ{YjPBm5&ch72yn2IZ<$iQjD3fGxzjy89)fy8$M2mmORn9ltz+`5A~bc{C1gEgPpeiK!%DaN6fBxCvpm zxm)wH@*uLt29K%<$UK+~tORTMJJ!16tD3RfeaX|L1RUFEW&fI`4DK0XZ9B!_C_E$| znh9_h9b?>^D_3LeZF^ukEE&XkT~Xoweuk^=?xY4WD5SLinSmau9NvXrB(OV1s~+Mj zv8gLf6OS}lA$CiWN@De<$Q@9648UK9nNO63s;GUs92{aO-@sLRDp!~Q_Goj;#M3S zgw;i-oQ}+>xhNJsVFC;txMvtp+6hB<>{z*XVbm>Oo0Ab_iA6b%xyj^@7~m-^wTj^H zV?`r5ZNVe4!l^as-I-v)Vbo;KTYoDOXuDOe)gnurq=v7&^ePAO9w+w2n`TUYEP8?Y zBDyJZWU&Ya3~i#zSesK}fj%TIb36`km792&oxIat^%+jRb}WwRV+7X|+aR{0oggT5 zbsFjMqmQFuIv~Uli-d*{M16S~QNbptXfolM^b^jcmC#5YZETUXrztFS&?G^{0IO0V zJ{#H3#rFffJndlbcy!RY;I~>FLQRiYTb~n8bN%=cr=Y~uN*Z+{m+UDJhDEz+1%Q1c z?uZ7pjCEh}{{alaU}y_S76dj(o#iCB^(uAC3O1fhlVN`;MmEDJa9zW4-#F!m0`Xz2LhD>mM zlc6G>srE&ib`PKS_ZYQP@Q~Sx``*B69QlK0BFFHj#2H{C37u04i{3b&b?*UgzS?~7= zr-uJ}1@g|($Y;Pi_UY1KVBAk?VdCiiA4Hy^z5~_L4E_2O_TgyGqm?kj90XG>^&>v9 z2jwckoK0#)L-4}mkJ!aE-1rL=OVe`4t>9G zSz$&CXf7QOv8r+a00iIxo`q^c-{%<-*C&LQNRuwPA^lq1W+q7D8VqBJ;HhtqU>)yN zX?PL< zcr-dAxHvrwYXZIF_xa2}`V+IvAAmb;!-K*?M?0w#?y2y?|cspBe zq6o9(lY~4$p3S#mG?D5*CHleKdl?(Ig%PP+d`fDBSIOoh->q4Ev=luP?ZZ*=zvy;y zT|&D#Sd#}2X_=uZ>8DLKX*u1V&%;%HM7F_jzSm$6C`23*ruevjt$-Bk4DEOC)GUYC z(sp`STQ=UAK9xWIKqO}ft2GfQAB=?c(p%Rg(b$u$Ma{3RLMtE0-QioD>DnF^7loy4GA!Bm@Ys<>4&8Y_lhNDzD%T`= zcy>qLS72>dPJY#l7lT>*lfjl4fev&SgkU_T@~$Q5wt`T!&?lR>!rY!H&qrlopf=#3 z%XJuo?lQ=Mox*uM`$zeir|1 zzt+)HuW*6<>c!d(gUoE6Ip>%Wa%e+F&=5~%)U*P(+ceh4w39kM_zPaT1jYLG(4z2V zq}9~NZYk#~|FV z;j-u`Fd6lk=>Fj)+OaT!v8XfJkAX-FC2>kfSzOu@3IH#u#=f9MI7P zs+@Bq|N7%g{djT9o&hPp>_$>;+q*SrS_>91(xm$g32gup!?kWGjy`$8qQdx}S;j05 z{j*G2Rplus;w*LX$)Z6301?VTnutl^4<=IuJZJdNm(kmTRH%7%6%Jwp<|mlHT5p0_ zrRGP{EhzZdxgS8^7r?HD;&`rjFr2+mNX+YrtYS(+#`(L%xLs`Uy-mb};AW0|lHMgi zhr)`th)<~UaGo|YGOOD+QZQgXG8z2H1qC$y(hs3V!XVeUz3*T@Qa>f~KsGkyc3nW? z9Wz!J)K2drNgKd zkMC3Pc?uH*8BbV+k$Jj88 zC53R|_|G8s;u*yRH_z^-q547KOeg5rYQPbYm)OxJuI;$+G=QuR16|0bX`S9(>-ap6 zSca8v0kQjPISwu=wl-FzLOL8c)MH`Z_@?RHV94H}_z{7l0rR-~vfE_mgvn%TZmm?1 z>5T9OPjr4S*wTC46&XE5+)w|6(mWV)ET6G%BbljKqPliXE{jF1A-&TTxWQ|}<`kzw z%3_jEM_$OwF%_ZFLFTp_J-E-migZSSBD^?e|Lz}PE!wA4DS~`|E@VxYFWN^SBmLpi zu}A%pyhw2W%>r?^j}5CPiYWQHnFERlt|z@Rg1*X}cOJMw^^QC(pkxE4ZUFGjxofUl z!7?SR&6gi<;f_mlsNdx_$w5#Kux&|O-OysCQ>irFxKK*sVp02O)U%Qym+O7j^0_w_ zZ;qxyMPzV8ALe>Gcj?WxoP*D9R5f_gX_skL<&O3d) zv+Q#ZjJ=v!Fx+wmT#8QnZZB#+g4iJW3pH^L)I*iEB45{h-c-E#*Tjp^M&)26D%-~K z@)xR6rm3WS+29`P-1rt>_mUBOih1r7P%nJ)t5~o@iyFDj?~a+2KvnFV!B+f&PkyDJ zjU_IVA_qmWQkBrn9JHjvC<>vuf~N8m9-HQ7F0rm+`rmcEDlZ}@0+7;tvZGBk#PBud zw4QR=UxJT?>mkG62wxQTVXqVCrNAWmENH64`ME5g$hMsbWg}xzHVDA&i5Tu?q|U@R z_1WUj>%(n5ufIFL4|#&yApwa3(qZFq(xySxNp4vt#&4OD3Gho$y(M^w%RROy!8Q8p z7O6W5D{VOiJ;U*%>T8T81`T;g8y9bLoDa<>l?keaZmZZ?9c(@S}T467$NRCL2eU%@#R_q|CE5BGI>ft=rvZ)5si*(8- z?ol?Jsl5LF`!ip&4!(qEl!8pua2Mn0_l0j)Px4yMXDKN%LQTJaF^EI^S^Z^|fO1_O z-(r3mRT=U)135cXa*kJAX3svUc@U1R@j{^uKl&tATOi^p?_1n1X7i{_2m~2*JR|95 z#Ll;o-tdlvRtK<4wG~~sPX0x2!LZ-Bo?KPP9|tf{t}EH;M|Pre2U|?f*U?1SrsJM_ zqhuPHUK$YhUJVnx9WH$2%iIFg@dD4+g6Z-# z(i;-yDu*cLI;x0AFr{L^k}aTDNd)Q(Z@w6`aMk*A!}x1&Y8m3Vo<*Xhs?N(l*F?ux zdM}-ufVY-qW@-x$4v!{dxj|I{KnF=S_h!epU?vRcX~^i+MWox;`eth%1Jx%iq3m{< z`y&zu+bm#9Dc)uxkY%LR!XUZP%JqXNcu!}OQWtv|;Hq<{(hRzcC-MvgmSh@ z_liLJuQ`jF2bPQ#r}H9I0292c^GqFS8=1u51yZEFDX=7CYH^Zqa|OOtwii~uVK%A)ZuK!EMaIhcbPL| ze|!ruIMT|$?}1nG=~k?ju4kzm;@g;5r{n+al@OiQz)e_1L1}t{(kNiD$g2%2WvO(& znM6(L2*)THZLRx~X=4jLzj;a*u^$}MhNGL55O~q(*X~*Msco-)(Ciu2*63q;_WAkv zY(3RZ%p1Wae-2j9 zqvLleiG5nU);L^f1Zd1Pm4C#$1ZWvY7mgHI>xL6-Zp<6*yjaQvMQG$_x}W?9H+2tI z*5!W`ieJ66W^YRHJ$}oiwZ4cm#A-abKp!!6%84q0arFfoc)l!~tI@U~rI6z+$I!zg z6e#p|iv|xY{G27Eo0SB8qE0Vj98-6=jEe=MgmoxS{(XVa5B-E>g$Zb zQ%O_X2axNHiq>}5S%_Xxq0A?r?_ldFduuSUjh8?Q4s^}cF(`Z!$h1K|oqR8Oie^o# zdizYerK@QDF9V0u0Z7-kNv%b@A5F~{fNONKYjq&TQBpXK#QnMaY>`$avm}l>7o3=r zg^-t1*Y2L^f6~d7Exl~uvfk*UqwfUdE$(yLDOrEy_J?f!Q%MM|IiM7yk4N<;d=lpo z09serT=cUS#h}7}pH7zO?9!Y~M!B{6g{d~!8!DzKePfAkq)h(TtJvhFkCcoG{g*!b z6=I;*e|hbSEJFu1gal)Z@_sJP(U{#_(?2I{FUu3Zgv{c_iX&(9=&^UM7l7%fcIODN zX1M_GYW(3eC$`?f&n@9Sd`T~QKKLdGDsMPZZ%Qau^4)M8z z)zHXozv}aqrFf9f!s&A z>{r4QG~?ToQN82M;^xdZ&)bCnZ;s8PBA&=AF43G?Vz_V0$Yq44N50zW+6UPGy#~`y z^-O-db~h!L>q~t*WsIM&r?%}fkFUN~httc-Qc@!|Anq~v)#BRhoGTyMJ%*E}z)&+U zRJ%0Wd5vpGL3vmSflT=uCkPt!x};LpSIPki1F416IzN@$+XZi@N?yKP{-;xK|6{rO zDoQpJOzYK%5YH^g0EBgS$IRZwX&rTh{-9V%EZifq1z`DOt1;-l^RHqeHb6XRuyWO| z0{m)wCFuTXqs@s1*&6=0xuYM2&e230vG?qdF7SJ5jD@t<;W6Y*HQZU=4v$Fje~LJ- z$p_PB{qqt-C)`N0}X*j9+btC{PpXb(vp9;o#CPO z{A+*kp#^hmMgdiA-hh}5!E+K&6d6#<{s-H0W_V6T;!@#*@xNG^MRzhkZcfE$!te|H zgBX=^NrPeedj!~wQ?u@fCz{X>QQ&>Q7VWmgHrH#OV)-u;8(L@hNeTbjio0Qt(_C~A zba>u2BK8%G6ba@YohCjj&_^qshUU-F76J#iD!h#L4`o;{m)6F%PV{5;1!@)w4|$9$ zm<$!XaqO|U>g#Fs(b##Gw4ka{q9t(o0TzJ{yx-@4fuE>g2?Q3$mn}Xup;2uyU(RB* zUzG^VVe7|0p*8|7HJkGH&|GjRwi;}Ys0NIgggqKIql=IGOH&S5)nZ8dgSlbbSHndf z1sw9L;cni+ph+jdbU%0W)y zy~osKJX}l9C=tV;fPDZ4_Ak0lDp(aDv*~@{!17__B~?{Iwky@Tb}bTH1c&=#3|8YTxCdguqFAgP(4-Yx3>#MU$2bue@Jx0fuFwBNPel^rSaT; zbx&yM6I^;Pq+b?M!L!Wc!L_V9bXYnjVjpzGWh=3%p7aYP>s8tp$ihI;#2SM{&k$)0 z`7*+zJma}YpWoueJFp=9&+)*7kaEzbI83mf}6@Y=a73j7~Kg?X7WF60XaS)bz@xKyDWfXO(vLh(dO!#Fi zn5SO-?xr|aIU5s8ydT}tT@prmiRp!c*{jrT#YD*$1!+{RHg4Y1m$J@`7jKv^ui-cR zyEN$bG8z!GmB!SAxvF^zYZVTkzp(?*S7Z~bN zEta)iF_*_yTr?D&3sQs7o+$}&$(|cach~_&jx6jKhorUoH(i=4u<(#3%?at%)qC@l zKUrd|+Fdjs6dMw3ee;uEWTIl?@5|Kf7or-5p$tmkrMSJs8SOTQuGlnM9vs_&?h7Et zd^Np!{A0rY(@(5+3GNuttOTW*0Bi!}VI{KxR0}foPw1v~i3}HqwT4FaCSH?Nc}eWr z#;_dLxgg$$BE7}H6n9KA=gv+sRc>Z?`xz~fiJsmh<5lTzQN7}p4`2EIiJ?z$QIjjX zkV6Mw?p_T3YyY-c1MkQnjEo3(6CH~=dO^Mk*AT_fANK=0gfF%nT2I%|9p9=qJ<)MP z=VeyN5zpMna2||dZUcLV&EmI`((Vz>WYLd|F(QxuV)=?DKDYOL+0FwtFfN{jY=1R7^EM03EF<Gs zQe|(j6UCY#ju@@t)64vJs%#qxv^Rb1g< z!YfR`_b07FK~9v2ju96Ig*A!0af%Lz*Z8Y`*ec=&D`k?8M#Y+*@RQl5NCeO)Ec>k4k^_$d#*>))g;!F@ z2H4djoFN4*$digIY6XlMh7C{>wq*H90{f+51hlduh?N(-3M*P%eOCO_Ks)AY0id}c zt8CbJWg=LXzP2k51{(FA^^6O&`c#9(oiCzrZ3F?|RkeOwT0=GMQ6b1a5Kg{wxi}mG ztqyq~eyJEsQ`eTZLH}aKvA?h*_7x({AqTo*KNIPu&`Xa**86fqNyt`E4;g!5>ISM6 zuUOyn^Jx~y8F)tC(`!!00c7#IDQ+EXdzv>wyRW3pDkwaZrh#@04!`~#bJk2y>PvyX zh?)Q_2}Z+Au@pL*Lh{|sfSgZt;VJ0XBmA73 z`kK(x>0d8dKGVviv}2gn2Sx&lLrzly?$!rwA3G%DjW-<7A40xTr3t$yH{u)?()TEU zNDGg3lYkwyrj@=PmE74aE9ewnwI4v7!CMwzXu>G`HM*ErAJcHH9<%OLnThMQqUa5k zU$s@{|L%Bs>)z$4y{Ice8g>9X(cv0(u%lOTaQ*Az&YOtE*zN7c^_nuxAXxQ^f_i0XuNjlc?o>1j&9qIi&Y6ui&=`DyTvekg77gda zSvJ&#tA?G3Mh_1pq?rrYX~G$DrR;zEHkuxsd|W8Wkh`{s2|@yqX9zhGUi6wMTT*_s2Bd1 z<^x}0n%78FyxB5og)vBeZh}Cg)5+w&^57-JlQtXDDqiEZkZP0irtp9{y3OYpeu>hJ zu>b%O9YLC^N#PGBQw2O{$0RrDgBBcdcM0K9Rb8@OpIIHLQDN;R29)WiJpxb85c(%T zt>gWE(qz+*-K%E2Bq{_Yja*F#QS4Gn1%UfrG%w`mNSj{GWmPrmlbVi>0GU6=Wtbi8 zx4~Cm1KwA{N0CtvFXvzD{`ef9-L-bwf+ih)>6;A0MM1#adwL+&u5{(Y4EleFdokWN zjA-~s9NXb9<>%@>LqMwuf{63GD$sM^8B&W~h(6a50nL%0U?fSP)fj&9)~Pu6MJJqZ zwEki`j;11lYs>M5t1fMQ7R-6%hw~M~@m^C;1BUA*w$fg*Efsn3FsRPnEH(RP9{22# ze#Xxj{jNuX^B`?w&AuG{CyCsX^<(ga@P7NM1tTrGj&R?`#=R=A;_$9 zzN`!8ue2f2rwEwXLr=Xf1s_Ga+Pl1fa*t*}#`<+-2W;L<=G?sVZIoL#AXHw ziJnf6vb5pC=#KF;7Nq`ryNB(nOIwFo(J$&pSpP%o8X6WL2mihamsZUrJ4D0{=|zM_ z_S){NFwz{lwsq|i;Ek|QoEoqal_SWZB=UC?H3&ZxMc55mEo%^ws| zin{;j@~DI3`$R}1y}~Aa!Xc&Ek>z_O$hz|ksVYbbi```x2{ZQq{>szWl{3rh+-xV8 zkmzo&07H-iIf=+vx%s>S0|()Uh*Mm?pQJ^uhnS`?ApIpZO8EI@7$tP~itu=>&vFQV z-ca?h1lE`U1O%=uA--en6H>ISs>-;hm(!SVJ=i8A@gJSE084QM5b5}DcdCXeZvvU{ z=9MPnez}U@-DX!>sRD5&Qfxj%!8>?Gt2(jr<6g^u$34*aR=N31KivSpDdlB2!!WBt zEcZZ@;!@aXuQjhoL$;^aCFvwu&xh-z2{9+MyVmsq{GqrjVORpWVWf%IstFP-Y$w33 za2c}zfB?~G%Y=`wScSp@@>;huyLVOub$G@21@-`^dvYFk&+VL8<7h=d)QBR-H&1EQ zC0XT3@e?!_3)|s*N7^p+ek67r#iFhP@+c~PcN0J!tTN~+ku0V-; z#Ih*!81?@2y6vZUd2DO4HmS=-_FnlcW~cYaHo42O*^L>x`_<%TQQSUZIzmKrZ9ubC z$D&S&Qb*oUze6}#Qft%(2#|a~Z#z$ULMLl%g!@e__X`AU;hNmn*|#m!f{HL~pS+-> z^#|8_)g~z3i@A)8lZ(=|3d!&;dhF~~P#wm4^9R(gR9|NoXF5f;b5*jR&Zbzuifa1$ zIjWFb)3ZOjshJnTcQ9flb(7P23|%DfFfJtF^yCy?!)bZoz!fy(joM%K?#)oH+deXA z3iv9~&1)BS-$;hZKuN&H=T|WgFn{Wu5Nms{{>6kA?)ug+j}fsWIc$E$xw8oEG-0|_ zoEd&PYvR%y6U@G=3;&64;1m9BQnD+epHNn)mQxac{zfKRJd#&&>Nt7l9&|1v1Lva> zdG_nZ|I>#01~IO_Xs1eGD)dhX%yv&NY%JeaJyF~AABL>U{hKVAlC_ORh)pmwSS8uH zn20P04R?DO)x(Q%G~hLPtB9K2^*o3)Xm7Ba<7}F%oYPXSwC0*z$^gW7g$$4b9nKb7 zreqF%4bB#pV@+1-t09ZdR5#S6AOUX=cb&E3AwC|n?#juMZ>ss(6Tm-f5QxS+(@{-j z1{nf?p@G4!p_{cy$01hi zL-pb>l6)+>G+K-QrY$-ejC_!;MSc6fFyG^qLk%v=G(cXodT`;h-r*g2q>fL)ubgCW zS2#(-a+Qm}T+9IIMI$TYfSoMNlSU2|rqpzq_8=MIc45=qR1D)HVF)kg268tIAOoaM zJ-Xws^trc(7IP`V?;oRK5RHjQ_rU9m&i~P#1^_|=An|-MFSa@ENo1**#0g1lwd}NB z4BZrPA>+_!f!say4c&fKT(}=c@YAR#exco|(P>mU0IH@5?&r?XZ*Og> z)Y=P2*bG-H8-ny2fCLac=@$I=2L>W}?~?seV=J?#O6tZd4ty)+bZ)t~{jTFeZ7;7X z{+|H3JuN1$9RMAiUCVO)qFwioew|f`-OdlZK4x^ce%oWU<#|%+{z+}4#eOIwxaYFt z9e~6!g_2X5M><@Ek1~qyi^rB4XU;IS{g+55rmDa$<*!^^KF3uc_=3Ps?;#{gH%8Aj z!!t!DU?d*;=5KPk9Sylrz$4*Ppu7WTx;YbQHrkkQzua9;Xr1C?OkKK)x&5xtCbrJBBPAKeH@WQ8s%cp!LFxE>rhWe6Nxd^ICPQmY_f8$IgQaK zfwny9Ehy9SegGzzV+sj9KbYpixSkH1Dvz^C_u!mvKb%JQHKDzR-i}NQ^fhR078Yx& za(N3S=C>;@?NH=K$-BPuIV=&9ZaK-M(>qU(*ro-{ZBeH}8oqPd!*#o;$dh8ahQa+4 z7pKZPI3eFD$UYx7{(XbDBfT6&!nMJy65_$c6h>S{=G%=!GuWU#%<;L3af?WQ_vj#7 z_iqzUy4A8l5t(NMkiTOHE6wS_Z5Hgzno@ugQJLc=`Bc;yUn)+1dZ#)@>Hm=mD5N!5 zf#N8?vY7@u&c!(^m9Slr%r4Z4RW4Wtk-0*0uI+w@uVO!IdztJ0-o44cbD95=ARR10 zN0zHY9SpV}JGWnmF(sGoJs2jDSDTk9vkP#&**-bY-w?h+;g@2|4<#UamR5ynZVQ)W zCe9%5H_%5VOet6zg(7+*f$syO?rQ_QL77O1F*MH#tvDe6`^M!Dj;hPCW$+b7Quu6~ zEao@}t(=&Ml@`J$M0|S>K&bje7R1gAPidfZ*CW>~ajGLf5lq&1De$oQJs@ zQ^XX*+K*e3@a(L~J=PkEZWmfi8WZZed%Cg%nKAIMzt;w}bzv_d2kZ(hbMR`YHx1S);5op<;9`96JR2C1TSy|HaJj6Ps zph}Ta5fo3>@m0rfd{E25n`UsRe!0-IM|N4qv0F}#$RSvh==RtWgizWa1E1=@6Iw&* zSn04pfaN$URSL*l%n*454hQ-=`x{^m$%p`fNzE>k*b0?pV9DcJDeLr(OgL9Nz49*k zAnlaR|7ccHD&+ckU@_hl0QSG75ysgGQthC-CqlZdf!AQ%usyX=Qsl1nBiyyb@+9O@ z41``7Ci;N{0@de>-m{n=C=>6~4F1>%|5>vFy-`yKaM-?Q8va5Pev7#o5v?N|rgelw zVw%jN*8<*d+?wigI%mnzZC{@jJv>#EWLNm6k zRX@_nPVe^=mDuiTW3@mH9Vz?-kUVLsiUA~`fQ4>nuJdydwjNX>3^#@|yQ+$nZgs4- z?(tX!~f;v}hfy2#OEKuPFPyr(2lBF6h>>R!oza+%hfKMB;59{0-?++<(Rlu_C}4 zl<0-qy>vy$F!d40$;(~%-uO+zYN=W6Mwfz`-U02bzeOwx*EVXNBPI+=Lq@Gc02 zI_E*X>XwynZt)7wQ?=O(U6w(yn^j2L68eof&kOQV$A5qq2c!MVGt{Q|Q+>`%%>ct% zZ0DOpc2&6ROSU=A_KK=2KZQd@IJw1CmA@?T^)3a9>V}0{z-5kEWF7Xnjy`I-Ba>r z%7Dr3@fdp|T1i(y3p>{rFuvPOi7Qf&81bpU7+2d2Sr`QG;arI+UFyd7Qn`#*(GA}) zI{;4x5WfR?hz4zu`1QWDuZr#lt`J@n8@8*Kqq13?BPn}LE_qIiFJY_>CQu15=8T(e zv8itiB1W;9`^_N`(^+oGbM>?edNaLLYw`iDH9m@%KO7;s+RwCK`WDO(zHU4Y@SON! za`OG|MGQTogD!Jh`&3~sspf6knfQ?mn0J%^{xN=eE#cl&3(Rp^zVcU5VhlK`77I&x za#%PZ7#1~i)j61x9k5=DK^#FO9Ej{0t}FwAhF4WTnxJ~sFB5U_e{xg)0Az>Zz89O` z?1hKN6Dt#Jcd5kIToXZ8@jMJNc=t!mX2O<$i=p_SN2M;t7qamaucz>KNd(MJWNEhZ zuSQY)pC5HL@IVhCisp)@W;!8?iQQH%V0sQ2Zft;k1wLS1%f{izScTW*Fv0{uH4>O8 zza3?0f>(pQcynDAH!L3Otidxj;9<)d;fM%bx8xa;ikJCRFvbfRT1?k?YOl0*9ivPK zez@luPy?M##pBg@_K2ao^vN&%DoYTpoRed|;NwJK)^`iR3D;JmvW!miH-w39r0(mN z8w#nnYMG6XUJ(Hhyqly0!{RJ(DUm5sOIAalRI7A%_I&}~m4ep0M1*LGJ8v)aw^K9% z+8W@St8vbHvpTS`Ktx-#T^Iu96&u{13kZ^9XEX($L2sWNw()w$jZ zBkFZS3g0F7}k1+vuE!T)W==@6+oM1I38dz{de#3l4Bz1RVcDHa0&H8v>?0p4QD z-*qE*vx}ctF%{*XBSi|A1VZ~#7O6K6zLUG53DJO?&oISWCkST{nn^(g@g4ZV!XhJF zN`}}OFGzXXzB4QhUE;cwq zpw0EE4{;9SIit+{f?FpUJyDzvUXctK2a<%A^l=bcyEE!_c}noLU`aK0K3CSXt-ww!LhE>#ePk|6J!3+08}izli_Qk_gjQiXyE#}!3-PXtqb>mOQqHRt-L9Y&dip=} zc%$KiJ2$01yeRVd8xl?FH_ilS3r84ZBr~}&q~>$OZNmbbjz%OM80I9A5o@Z0W_Up! z-Eu^D#Yr3dB}rX=I(&O_)`M~@J6>ZB5)I0}5s~u@y-M0BUfyeb^kPY8Hnn)_&+Az& zfB*;>FK-0m5wFN*80%a$WO}TyS0*H`I>+J#)c*y*DGY7q6mU4Sc1AA$icoJ+3H!QE4S@?HzCa zmURky_e#NrgvYi5P`5-}54%MSeCKceCg2p0WnyIKr5nFG(okS;VZ@Nr)`PH=&c~PiQ)6$f_PFR^B zfFoe-FTB}NR@89P-Yv%{1udq*Kp*6v)Py=uMr zbef1th^Hu*-YGdYF7X4IU_}>9ZMsn`WM-xt+7UMDp=ar{!-HF)tp|3#dg5akF=;Z- zXU@HF+>(@S%D(RiS-%h+v5Wv_Kd;Mf$y2Hjt00vsNWP=YJ6(|;m za|~}JyO=`)(>61q<4ZyBge^Frnk%Ra#MWE_iz{1uK@_}?{o!%j#QxD~U8pbnc^i9L7w}@+3LFjHO>Ei4Z-XzytZRzI{UX@C9 zM3Cw;Vx)s&jBDS#R-JTBJNL(?;xc{+c=^yG25ilUcYiqdtT?)zGFz`Qg|_F8Acm|b zH?{iMDv*kq5(ur%>qg`J*|3@4w=g%D%TLzcNa1P@Ym#M$Xwi?_yxRU&Zj;A{z|9T` z$RvAoz-XX@d-LrP`B}*QpsAjUFl&EZ+%Np7+!^!gQ@CpV_w=UXI zh=CQHxWQyOJE?Cn!m1rh-&xFb@9@jUt|zo)?ag9sE;$weKn)?uKZ)w&HegLO-wf2{ z`t`d|v*ZtOsXwj5Ece`rSX_QLx~kzdYOg}-x*7rirmg(_f&c8#4dlSzZuj!>=NU1B z3}^HOQ_x48K7G%!ry<8)iRZDQW&mpzEo}PeEQdlB0JP*W5WMuTAw@+P#c8M2FsIr9 z6X+fvMUohgD)oD1Ysn2DT7wtr(Q<^jY`@e0X+5d2Tc$!*TQD%b)K7FgUq!V2v%_`v z0d=JgvW;I=O`)`#1}umYj|pD)PCq$kG=MR5YdVa`b9qhe_KNAYh8G!47#qM^5a2e2 zicoX~fR&5*-l+vX7*fWnk3#Xb4W!DAXvd3COS~KvAMF|7*GSXnBRc;oTIU8LOEYxU z((rJuEoE_PL}y-t#*dnDRkvw_3P&Yp$D_S%t*%-vxBD?%##r0Q!l1V>Oy8qe>}{|k zP(vfFQ@6&DB}QDDcMC8Vx&BYOzN?2btI(#UEG81e{87a2OlLFHXp5B>k{1|Z%>XZH zLYP!aeoT`Z+e5TG;oF^_6$(`Q3=uI1$YVj=5HKTZxh3wvAC;T?GWfrkd-4Z?H1`5~ zZc09}Ys%zlW;=!Jb6}Ir<0}6RKo#U&!Y^u zc17gOXNlXB8#!c9->Og8|Lv)XaLG)jlXwPjq8`L6ePi6)DGwSe!nPD`kfenT?9*Uozl2m-k`=L?lxC;I)Qe#1~VAosC4LVm5?BS{QRk; zrqe>+bhvEk!aXLCcXgTZV!XDnGe}e$(2atk7om*XGFh*M?#gGpB+|sM-r>e+8tinf zT5>IWeD#7Vcx{;3uammsFZoJob?4p`P(O0ljj^dRd}gd7rm17bp7O=(RrZJnE`a?c zi{l)H1f4pyLvq5t8no4^HsmU=ideo9ZEsRz?|P%wN$E@KTtZE0D~O8twX`<^wJGx_ zzp>(8T5X-xKr}nWxKmnUz}I>-cR6j-fyJYf-cxENyy7>XX;S29EQIm%V&5#t12~xIPhQksj0Q>2o_d z8@=qu5t)iUv~0dDbSc<{`6!RAeDBCBRYN-NTJ+GeKJZX+P-kkhY`q)kyIkesjS2!O zoT!oJKdI3$Ss84!EVFJ`!<_u?VJ%9=m(gX|k5F>?5?8A^CL6?x{2Q3^=ZI+6Fdtzp z@ci~acAl)1UOcfYe(gpL8l_}G0FX9Nc^UPyS)55bGi|-S3z( zEL&A8p?cS6URRIXFSr>6{xAmUW{*F^&XUpdcHC6X8Lock_Jb%xb0Od)@MMafH)4Pd{8fyJTACQq~Ua3fb7^Ui$54)a)Okj|ZT|^fs2)P=4P7 z0V^o$0~N+jqN)9eIpZq_9Pl?(Y*%t^j9ZT=M4MS7-EU_$`{5_`e(3B9WOHMsgTJhOz~C|N73#)|o3SBXO1foA?QCqCRZx zK8@#vbw8Hegm{sSHzTYiG;wf@qc{&NXJs?norPq>%eVDpAAKZx2uBxgngX!U`%2=` zYJlgPj@|B5ggaEf8~-IH{FL{2MTsK#=HJpn#AxJwJeJimlSWrLsMP!M4fcGVg+DiqL8OKJEmvk&;Th{bY$=oJgBvQ?J?Rg^R<@v&cS|WNWpMbE1RFNVp{9U1IKv=mO)Ue>D%)*rphXJXo)vZ%xw2t@oLcf*WSzIQD9$h)?RWS61pzQL{E_+_sr;+RI*wMf}fw!nP**G z1c>1~dA$1AHH-`)6gXStpN6ORo%+7(g!$5l3}F3Hg!d_jRxO|BUna_8>D_$4kNKyT z9TeFs%8GYDhq;`;L%Zp`JWP|btQ>RLV{hDZFMWp%k-@whnA01)>Z1ah`@g`Ppq4E1(PT#4={d=MABlvMj6_P#3d4;u=a`Ko9OT`tJ1YAQ5-i&+ zAOB8LcF4%%`HH8<4&zJj6801tm8K&6Rz$=?+Vumrf*&p;urk8OTUt632CPbK~mJ$FKiAzZMJ%(w(>z&FlX__4|-PzUiQcP+Q4NaVG1dwbR351AqBH^aoDDWFi-p z1EHJ)xGK^KIAX zC1TG_Hcco$$i-(|3dYj^=S#W%?3WNQBitp!buDn6BX+P*wO7%*?JS9TNP|c5W6w-% z64prBmY%$iYbbS?2%)Pke+nY>soa+2+gFJlmt{djLo zH*hp2NFp8qq_z-N=$@!J3XYZx5)ZRAUF#k~)PUtE#UB86!C22%&F+^-tgcrZM9VE0 zeJSN>$JO-IS2VN3hrox*)IYOTni)sDl42a~zbE{!HH4Oazwvl#V*^!IdmF~;Yp(Y;@H$)gCrs`<@OcsSpz>URQA;ikqQ zld2x*a};YCH+GJRXx(y&P;i^OFgKoMY{*Q7BPbjW>Q471ph8}!t{_IYLp7v@9Z=3y zYM{Vv?wsp3T+uETWhPZp>!C6(52t$W9S|ctM3)~(w(Ww-0y@Ni!&w0q937(Xg-y5x zcBsmxgpPFYK;En45|1<0E3Uc>)?9h~w@*k-Elr`9lA>Q_{6@v1E(+gi3Mtu1|)H7wU^30M{DV7{xhTZZo@=%R&3}Qz-qWSYvu# zjMRu_YATqpm!358q7)3Y^X}aU!2e&3+eP8_CJl&ab??HEV+5Ep*p<+UyN?H-4&eA8a|@ zvY(D%n-9vWPn;IH`d|DF6m}jz{6FqxD=O`Qp00q+zp4!keXL=Z8sGgWk53}jnnXMZYsG!2io;KIW2WM+)X(>C(tBO0fH}$@gRB} z*w~rqZ?=m#Q|&AK@wMIgCX{F!^K=D$W2SUPgcwaJ*><-76$c`1-_%;`qwu*taIEuq zhd*IrS#77J(G5=Ak#sTn{E8>5O@bj^g&z(vlK}5bQ=nB(pNS*So5>K{0g2MbfEc-A zJLG;%3!?HQNbZp8)sogA#8r@Np9`}Fa0n_%aJn)C(PA*IZVuXNLyc|<_0gEqpq}GK zEd0hLd89?L|LC!=+Y@MB`%gUv6THvvz$5JZ$aGFQdUaWP;zNi5jIsskqG^5tJno%F7l4LLQ=`)$LMO(JaBd!>*k(1X)y6rsuE2v>x|+UO;7rW*RcJ?XGAGkN^K|Uy1gvvm^eFZwUPlw{Qgl$ZsDTa zKuyC9=?OcsFCBqVojZT7s!bO4GAM1n-AL<@^+w(IH(J@p!gGv+rQ{?lQ|pldMLr(- z7a(8RtG47vPVb&1#KL(6Q|Rz}^@JVRXh5lrtT|W0p>#xb!amW#CDo^3L7r z!#Ib}g*|;NRL+Si!lA^owPOc#Sng7Y^IEtPpj71sCEKFUaa+*Z4tLGIhPg2-xS4eA zYH1vxr&acelfptu3-^N&Xn`6OM?={Vz-R?C{-*MkuaNYm27riK3keONG)zc;d#v&$nu~3W zW&N^A_l33|S3@uZVuz+}0t=&G9GlU4vkidF2+fkt)E-xk(=!$g0d!W`13?tUM{J!n z^H7k}V6%&RsOcHC_<-X;r}(%#*!9XaJRserD%11&pXK?#VA-E#QGSzfrzBJUBh>6w zlmeAwQb&qZ3$(c$S_<06Zovluo1Zw_9`nS%AtD`ab{>BlG`YS;Wtmcbg`Q{9&CMtN-^|DR;dXbG-nIb4f&w z*pZfGO9O_&eoBFN^fu<-9I+mimHb?YAp>}XBZ_y7lE})OA&xXWzlmMswSb=sDLUC0 z5A{WMw`I@Q8vp$a5}^UgUj4s!rfvb4=qk5ir7gDY2MmP|W-`aoU#(*Qgvcp`2rV}; z;?3x!iHF_dR%;PCW`I@%Kd5Yr%W@&#egOu{9_h>7v%hkR!!jatWEJpwysfqYpR9@KaM{M1VMIU-f*vI^5h^`@2+)gKIG+I2fms8Tb zVmPGt5pQpmeSgmX?Uq~#Vqk3viv_*+K5G<{rqI-`+vD7!jmYr7w#LFfiD}mKBp6tl zXbmep$VWgGrg~xdMskGpY5(v^f|y+v>9w8tL*&2J5$n?71G7J)&ET(hDgm%6nW4hI zDn4xlb_a>`_gk99!pOq4X6RdSHo;lFroWT-WaUPQdVr?9fpUpWgt1v z@XJzq{Vi2(6^BkTAc=-{d-ads%W`Wo>=!iqxgW)4(ppm9sVC-5Vm=k5DCJ;BTdeq& z*C}1mFQ~emP;!k~$MQH5>Wt#eqqJhXjxyoTD!PR@LcAc(tD8<-^;37hrLd8~!{U3m zBVqEeqq{mg9U|ucNyACWWucehwa^>)kMw6L^Mh6eaR?{YH4GGPNCAp^%KMlG?rsrI zVikx&{+%nAOl?pXj-#be$#ujuu^N-$m0HfJ$`vZ1I;RqDIu%a}@?l0f+<8op{Z_B4*RMa7N-5`H+=x&;Dt34q;e~}_@hfPp z^+e)Kn|{6zC#8b@!}K1nS*|?MVD6G|+Sg{p-`GQ++Aq`iQ%xV@#iJz=$wqQsp1aAZ z$)$*3NS^q?bVgMmI!8dz(YZ98A1RPN;QQizA=Sg#E@GP_A=L*D8u@oh>hzFpij^Yb zP4Gsi0ytVjEx2uaK#A6#4je!X)8uOoLc?9M_Wce7sd``5TD|YPF<3=eS!mjeSpB=& zU%Ss&v;WC)aq;a;0eIo5Q=KTEB^)I{9C{+zN`2ma7z#h5=#heCN{&k_jV=tgrSa$3 z@bDdd7X;0V>luD{bevI5N6!n3l!yAKvlPKK_j&x3;B}x?{W2M)^JcCZZjs-1!6Px6 zv~}sh;w7vTK&)$bq?pyW3LKFyre}4}IlEmO6${_HzsfR17b{c_pkygNJr52?Sr^EP z%6*HZJ0|&-5R~H^ba^Q_x4Q!1qrTel(s>ML0)^WE@_2VtV%2t|42TNkdd zs0_6cqQZ4RS;P)H4Y7(K1y=Luynp>cZ0D30U4j|sSO(TUaOoy1rq!2b1!umfn2%w) zw8!w!q3Vm6_dQy^BioL<3h~(}6&k+qIql5ACiP+AdM|{AY!C8jg5Q4B7M<{6QcKkk7z5+*4N&J>L$GLb1c9?XG8@A?nleTifypt?4 z)GIjJ-956kj@Zn8N^M*!zWxim%l&c(bE3Grxem-NnF( ziNnzEWTpiWan}ZarC9VmJoGc{$hDCLYCnA&AjRgy8xmoW5m6okk*BO{=-!c*alL5` zNUG($r_pJW3`)NM00lh(p6hBtpZT3>(GYmE{$h&PE;v5USH8il)OkMHr~Z%T9;t?< z3x}$UZbhatcEw(j8>cpEwkPAsr3f$@^lQ;z~+{Or+WCHwzY48jcrpQeygxN3P_VG!Oef3;2(L zEK>(pVe$Dbj&Y=WHWWV&m%Tx7?D1m9eT_95l^3&3_5txNS`&_BkW$s9IVsXi3EB5^ z32Pet^i+^gnhE0-fce7(nTBj~I)LYYSIC-EbSaSto{m9>>j)ZWfq}vLbZVzQdRZY4 zG8L5e9*X%kc=WU1ZlGJsOD%=snFlicsFrWKjzGgs z;!bfC5g&1Oq?eUeKR6V=C-+8JH{3x3fUrE1ZmVuTWQuJt8 zJBAqoSVHKsH4%26fFwrUD;yJ$*fE<)q*F#8a9mG(>skPLBM9y>lBLahbwAKl`-eq# zaDhb?@BA^GqTAI=*BYj^%|7dNe^N85s8?Y{yR&Ff36IRg62}#EYe!^B{rGl~&uOo8 z#rfAOf1fou#k&Zwl24a)AqzBB`$*hHf9A3x7xQ>0Gb!>db;5zai^pVZe`9;-00t~17F9iY4UpHIhXcEqp$Im`#OIBTJNoTjBXur zbk+#zKj}v8n4SI%0_%QDJ_Tznjwp#%ff55DBT{O8iY!>NS}twYAuttjG0^2jT^*L5N=s z2r;#J5ZBPRp~k$^n5!s&jQs;d*nNWjj$&rhz^jriv=!XdBcbD@7T%p_U)YoBdTWi+ znXgfbF^zQ5^2xIOQFjt088+w(Mt7FIJM)n)=S07VyBC}iM;i`*T*#0=NkHSoQnH^i z-R}{JqLnLUk;lel3N zM*(dAK%_Q8n8$Eggk*gSeMF3j68$KbazuVj)~HoF#+}MNV4BfGtp`sl3HQum1X_|7 zI_79hhx(tPymOu)Iy?BP>$Z)M3R2sIqdCk0CeuEFJ2n2mn=W_N6VagbYS}XKSXlrQ zl@Qg>P>J*=P*$RSj+;}yptE_|jtw~~O|hxxGtee1?7Y8WUEl)Rt8guZ zD_q)Dq`}Tfwr4S+r5@Ct>idqtbU>g|eO2@=NlD-yz4|1QGLrDmMK;bSblBRM_Jq?q z#Y{O;elq;hwnwAZm;Q`pgip&f)7uE5~iEro{<6a+YDIW7vbs zD1q=8vn=~t7K@g(*!2z>Oiq1fvqbk{;>UthHP=HpocpWbN$U#S^kwK|`2~Oos_0yy zr_-B~rB~D%1LlThf5}oQ8lN8h7*_2&exqHR&~yy%RM@?|e)k|t!mt(W9=W4u-J|VG z{*68APy&LVm>}-DFc8;InhZp48piLs9mhN$lxx zj@RPcJ=M@4$7rq(%HLDiK^8nkT+;M_-=inl!j$?i(F|{S;8~lMjL%4>v$gO0ib!9@ zJUDh$lzZj64R_$*lYn6y%Gg0zTWyRk^CUs@0k@2foS!}4GefxUo(3G!@JnUj>dHXb z%F&I9ON*l4SyJsiK5IYbCMiEHRdgkpL-Kya?cvHF}ZwXnh=Jcpcr07As<@lkIQ?MfDiZr zDfTRMq-zc1Fl-y_sGS-RVjHBFUdDqTm%dyj<$@i&x)38i~gj%Rt+?1anu^`N}>C zWU^$q7<#`+6U@cova5+7GI2q$9?&I_WQOX-N{#$LePMUA4c85gG!QAI@;FV+$-F5Y zPwk({UxmMsURa^C6g{Mj@x4>fkF;&iOH+*HseiK(kC;@$AU0q`8pnDjMF;>BOm|xT z>k(8nM=!v^y=xZ=;bxDPF*zHg<+^2rw&()Z;U1n|?tnc=eA=h%9nMYM(hF~89@K%p zZs>%i8x-o)wM=->TQ5iO;4T=AiaBF7JWDPI1Ag70cw=osr_BYiODXEdUZe~S%IZa7 zi37u2U{+j+nL6K;YX6&X^}s{YydIXmk63l%Gt`iW`=@Gk2`w^37)C^}o7`!)3xQ*3 z70~wbN2$nGgEBUdrOx4zI&nC|C4A_lK~W>ddoI=s70)>bAjfc><&8+x_K!~1Bvs`z zf)S#C&TMpRJxJ1-!y6jfi{5H6Lm_T2d=X#4gA5PUW?hNwRPE!PCE|^BV|Gl31o_&@ z;Szb|Pc|#oTv$A-Y_c3_6%Y61(vu5KO3quuY!JC-!+qQ4i@Ckaiy9`FPF{J)F{#u% ztALw`IPH)oJ3$r8uk*iX^S{OCx-N{zk6XsI(NU1 z^fHxI0@zT`#)^;^xC506MU`{ENU_p-&eXo$;%#uFt>vj!eTq1$oLYz_e5z+a)uvQN zBJcP?A@39b<|%rIv%4Ayrr|FZP>o}SqP{&t!9!9=g3*4bE0dh5UWK&(YC@+;n;J-s#A zeykq!_0^9Kc60Z{K&ta`4r-FQB2?h0Fa<&Oh~#hCmNDPp>`r{9@Ow!>jX^+T@;oK# z5y3YCVwUGIJ7wqweA}?Kq3+*~tlX=8Ewn2Z+#)`cSlqTQy8?X4Kprhy!Ptt@`R8Ss zg;KWb{uE^|*9y*i*xN>-x!W&Mhba=qeBG9j&r0Jya8&tlH0uj)^qf7XAJZ^d7`Yo& zid6;P9Na`lO8>7FGrorxD`2<5=D3?Kk{C^@m#K%Q;;;v2{m)`5Y02+Ye9-nb)9+&_ zCCmegY3jM}s<}yf_MfM*Vq!m>!O3ows1uBx0zi24g17n^=6;Ga&`xm@S{}HZKdt5>SZ5=~3b0_^A9Qr3Fzo4n9uXHmeibEiCe3x7o58 z8qR%y2Hx_=8f$xRC|s>z)3t9{oqAZHWg!ntx#msf>8#Asp5WV8z|!ky34Wb+E2`<> zpZR|L3U-TPeEQ`N*4ErI1#^4&;n{8B#y#YUHGjEJsb~j$T1)3sAyUyYLjup1s~LDs zgdssiltG!stMV=MfTfuzZBJ-`KdyU;1#?$Q_Y1x`zM%{5^P?*m%Ps)+&?^~lTJ%LN z-W>Atb5&%IWcS;cBq#E5X88-UB7QE0m1uWe7!hg`y+B$UeKgDpafrk;uXhaZMb{!Y zfXM-#wm+x!}I^ZoAzar{%FVp+ZzIz!&#p7fvuAIMX`2`n zI=(4ri*bE5(T}b;qZkx6R5FyOCs?x;GyKh`cn{j9cG!eHbm9@Jz;oEw-mh z1{2rh6!J1DGVuF#5B!78n~X;D=kR$Wh1}|>`W!MNr zz|;m6K;hgq{)5CZSutJezK_+2=RI-Y#_wg_y(_$w2M?tG-mDXxG<=6e+;C+N zUK3cD@amBFw*(Bsx*cySX7L=d=K~)pP(J+hliu*$>9Yp%Jdk@l`i@kOb#V{OcCMHr zRDFk<#CG@L!UCqG7T=W`ezlLKW9!;TKhZ|B#DGD>F zfJ=F(`8Hp^#h(I8Z|2mOE4EAp0&tKml)ua4=j_`F$Z(mGA)oTsNKZD-ju3XlI||r(mN-T`EC)us&y8{USfta-5n71hUgRw@ev4Of_^E}=FRChP^M$A zm`P^jGW6V;x#7ueL380jtX#+qbN43@&i^$OQNaBSzRH*2v7@qUJBW?9S)=Fn|62;z zYss{v?uqXlmFSb<>g++mc_I^u#{}eyoY5g;yiE!T9_PdOyGl+Up{4-pxyM2?j&16n zF)K?A#d(hDlb{<8+AEC%=&!_RWE{HBgO=&U$yR21go}+2{eJ2WU_X-TC-ntkLMtN} zmhB(E$Bc5(5c_VqA19}w@ zmFN5>{rBzpczT`h;09t`1_fv2y=CRwB@YO)4qtkLw=!1dwlIUw|NF?ZQAL1CLv@h! z;f(aJvg+*#x~Fw0dT|{cM6+n!J-~Axj{o+}VX#L?g!lJ>Cy;T&KxIRDNqz!ze;~HP z-q3GDT)nyMNpVld4cN5GI>=HR16!4I%v8W0tr#xK~t92c3pd}Iu zo!KeAqF#?gkWfbZ^4-1gW{DLFwL?(?1P#Ul^ zxr0OXmw=k1BJL`Qp=bmN7*AG>p0;38T!O{7gK=qr9pT=bN3Td_P2Ecg+@;5-x}d|> z{&S5ae=NGkiq(9lw)*SlUST|UT$Y)$PFDuzf7LR<=fs@3b)IrkuZL<*kjmXye-mY= zE^bKpL;rw7k&uoJApLc%nN$2%E_jGd(hR#%cQ}4^F}2w*iE%T|w<~v>l@sJkx;SA# ze5vQh{L%!ktSwe8QLiQfha@SuEQ+BiEqedMMqvdkn)sPQ&Yp%>vjid>qd_1aYDm7` z?t=yL3}+%2_ROaa(az;sjFiFgMsAob6s8^V!siP4Vu#}G&JCg~Dp{ihTcQR@BkAU!tIn}_`S7wC ze*?Y~?Te}@rdKPPetx!&W;BslMsbklBS~%nv`f|IkPg`+#}_xx6Eaxs;YjbHmicU^ z`AzUGhK@sL;HR9$s_h+Zj$*X&_VGIG&uRDqOG%;XHQ0W9q?9^|5nC06pz0vUrSt%= z1n0tdj3<{(2SOCX?C@HQx$Fia+5+}Tdc1Ss#{?}9s{g|9<^<>aO-kXwO*4`+7@W__V45mP-RPd%H2%8G;011K{Y6@O8 z!4AyyiqJZHt>=#>%%?~dvD`1dKAt*#^~WQvb!iWHVC1cWozJ)tG5U(|4?r9^*sRIG zx+PB}F%*oD)j3#be`TkTs zsPLry?H4jBSrAI!MiIo!`ph3(jiq6 zH~fUXjA1XBjtQ-xJXq?LNN{GKt$IyFpX|AU?Hx9U00+ypV;S#?6MC@gw>I(Y{-C;z zNceAKm8X%R-SJ=OFr)O?_oLEX($)pKli)cf{cJ4s*nhq&boSXxCLB}-Ft@#g?!Z)@ z0sH|~3or*=ej=0d?-njD#a~#BARNHjf6=*4g8IRCi$tdjMX)tsDUWgbVc&-W9tqb@ zs++_i#Jc}X(NKW9yKDxPLde!h8ZOx22zQ*%CdgndwPDK^P?)yeItZs)3(D@TK^uzQ zGVge<4CIzs=Db6gy*S6uUm9XKQNMnRiEd=Emot5Pdj;9ycV#rkKMMOc z`mQ0r8Bw2qOGkk{>d}>_Q$8jR)aYKO2IF8Frt4p3B8IIHk-7MYe=?u{lI=c4ks{nQ zk(5dOKijomx^kra7L`${g9G#n@fnJFq(BiAybEAdSv5@=Rl1UP%iFEKu(~V#vd+6U zh%cIB2k=bkonZw`GYYLJuG;3TD9C5*2+Pr#o-7R&{m#b}Ln@QgqZ>vS$8RK0M#ocx zmx`9hj*7Az^?JCedacETDk_RvZrUhZwn<$Hjj&ribb2=v?|b>AYKTmgNq4Oj~W_Y+T-L98Zv)b0|-@e8Mi zp2%2G!=Z+bFtLdTiE`{y`Q3YANQwpugrK4BtjBAA5Hl1b-8d2j2p1MgZHpLpoXj@J z+d`H#Sgau_4AevapsC+W(`T9gY|_M>DrWp6DPSBF=fq3pdB@3SCcBF!kgX zxcpdgi!;@CnV6v2h4$Id@!ruqSF;T_lA28nRoL+<{IO1i)$1)fWVTf^y?rGzAL_o1 zIpxWAO|*a}Pu;wb8c#gE+-_~gk2`Tn<>ox~E-qP>)8T+@*|KZ~3)7J;iT3?;{_v@E zAF(oIgS?I!F;p+9&oQu0;O82JCvRxVDz7M^0P64JYGlxFhpt}P@itW~pAsN5M}!CT zdnqjQHyRLp+k>`nN9mkCZz_Zkki#Cy2kXR)rQl{6&gv509MVSD{+(OYBQ2W=Djf!L zH@jBw>vBHnf=pLT0#SrWdIG6aFMsIRr8;0JV^+`lY&Sp(h{`~M2O$;*5%Og9GP^(s zEtDSMQ}S^ithq&@mFYA3^DB=H!bItA$^ZZaW&xiKYC<3R5q;_wf12f?kySBkUQumt z!zOXN^d7dh^{h{hOmGzNop5~)+kiksVxfskYTL4R7U&lU3P$iwcbUzn7V-)n@_-;C zRWvjPPb+)+kt%=!-{fhM^6d%rKY*J4JoV{{uFiLVZ>&lPc-OZpy??|bOT;Reh8G{LD?h9&@bo^MgSzavEl5zE?Fn4kds+6Nfr&!|t6sm7EIK{&8bK3; zTh}$sR+~A5JgvUacL4QGJ{-6-nVPwnKqLW0onbT%?(Oij6-oHovqcIXZ0dmZ2gZ9{ z#kA!7T*3_7u2I$qfF7Hi+Po3Z*2YVq6Qt4l12Fg zJJJV)YYO2?=RPTblo+-dxn@NJiv`ikcAaD@qExrggwA$bI#_3ZL7Pi8Z*;*N?#Nyt zIjxpEqy7a1<9Qb#tiZhClVu5Ml!azMXHb${zONNQx9asjmtJS)r#g8NEHrXzplYt~@6Gx@z{=)JDTGj@%(S26S*(6BELUl8*b9%h%?Uq0M7C&LZ6 zSAdY3hh0ylsnN4h9zRQ1iCGH{Y%Ed|u+9bc-hyfK-^`t@$k->>HO{TqiOm5Q4X_P^ z^l7RfqbPY0#aPrQPQIsiZIx&r)S4Pw|JW@`()cX@c!So0h|pWeFAb>)*smbO>T*FV zH;&ZXhSaM!9%P#+B071M(Tr1mHZd!4CsRBnTn*wx#3Vyh7mV9&ZRcpoTbg&E#ed$L zvaR+b%ti?RW7aUrK66bZYsJ{&ue|9s)UwOLdy*;9QOKmGb@}}N^JUP=gzvBMMd`8W zn@stHPm&ZTx9f+dRb=;i00$8W08t7S>#jq(wgEZFz$&&uidqflFT}&X;9XmA=+mrV zXj@wJ`RP?o^@suU@kH}o19pq29Nb}-zLGeY<6O2f5`=h~%QH>fHLl}v#N4<<==>pu z?RocFVYvpLEY>XhNzqT>)$m#GtZFw;(mCsN9oT_L-W>N=DOg+#za#&Fhr zueR~+HK59T29skW{_}by0*5F1f=X#dXKb9-QKTD#2_ri;-`1`(Yh^{fC5=N;EmqBQ)~UjeF{c_Rk_yGm&Qymmbjno-Bh zjmHTvTAq^T?@TYKEQVzJ6kUVmzlng)n-?;819D2VY zrBUo{z^@#NlcicKW+9?+{!I^cnsT2JfL-f}ADaf53ZXtOI(n=A`i+qY$tgD=`0pMM zZ90$+_ho8qEZ|lKmrq&`SCD%jV<=CDpy=P?_9Oa&ubUl2r?xP2-((v@GEmY0RGsWG zP_jr;@gNs`_`94)?eW9_rR_^m8c<`(P#SlEMO*C0JU96VNjbyKIQWi(v}x@Y>90># z(_3hG*g`kzOXP7jB8j=73d3Ls;lt%iZI!e-rR~-c~ zp>1Ljlv#FxmW?+Nbw|QuB|*!pI)S8RIIQU=KpxV@236_cy~XO&%LQg=-c5xIR`0y# z#JCwI(}UQTbHXi-YHokGdnr060$KP7kmJ2D)ByJzX~%4`eUnWF{a}i#l{yq?+^rW{ z!~E_Lq64lZTy&en#l=bBnS$M9R_!=iN_2(;rSH8h5)=8%8WGh-yRkAxLm1c*J^*pW z0rwU@T;}CCl+1<_aN4xW+LmHw%j|uNHu{g~nv$eDAHYFGoGVrP(lbCu>`56@L4rpG zvDvd+o_lErTewNRH8z;DByaIyr7g?_5?Evp9_UPddeT&*M&0OXaEAfuE7Gc4AURhE zV7trBI8Be<;_rmX;_!QjX(l_xI#GGo#mO4GIecYUH?ku(5{XX}%G`|nV_#WGI}t)z zxNU~HUBx7pAaTf+hjdB%DvaInWowTJMf*;o<2#LDxRnsd8Y(a_;D#oQ3^@YTI8a$u zm`5{z_{ZWqvT(~>)f8RVr}YrT;~X+oJTpQjF>o)$+wNS7CMQd5Uj{7t*Fv@kV2|m#p+)WH_mrgF^!Gqf&3OL)QGzEb&%^3)wkMFG6G@PQfV=qP2pn zh6CDYVEqdNt3kqZzCytzWSgw!_m?2oDlOhyjbT@xFN+ZN168YxiYKF1`$objm4%Dh zsk4s&&4b(#^&TEekLi`eH{2^kZvJ|KOZ==ZD^h<(H|1AVJc1(qXtZ{~DXWI)T< zoV=LbMejprZB!PPw%ZQ%-m8aosd03uWfHMOyi@(g!V>t};Fy}`4A1JG`649`ysGki zA?p-S=TN{(6_p||X4%Ek=xwBcAvAkUwnHKG`8EJRo~ouT3}@7PY}pr(+!aXX1m!JC ztVdetO}W#DZp)N~u#CXZ9|7E~y_>EJe9GqMk%ZzUxos@mEum9^dgc6$L!CWd`_B3H zcxHxmd!7VYiTPK$C>gfbNNEd~h})wAkQ^W7zveT7>b6L{&lz8?AsZ>S>SN^*A2Ag2 zy`*^%ieZBv2tZ&3;}k`d-M)B#RP^piLmR}I=n+J5#E4Fn(NfEl!t3CpUr6|LEJz(G z$pe<+9~XB`Xxv@Kda0)w1?rY|bRoBchEA?g)C$s8$>dHi(7cHs1Y~Em8B~nr% zaFrtj#iPEJ=u*F-w7I~h1^*(+#(rw=mFCL}{a=#SA`KqRm=T_!L>{&-Kwvx1tYd89 zXZclUU_4Ep2)+g&uEs#9FtyVh&7@7w zfcNTdYAufU_qu}IUkK>8?y=k}9oAbf_$LZ(E~0@T9kTe9;@y2^Xj?rO^a|iuXw1;v zl6PZ{rz>v8AzwDU`YmH7Rtk>+Vi}3?B>5z}T!W@LV_&M{6Kl)y0cqCsvIg7MWB}x% zK;A>O_mK=uj)I{Y2SxZFm+V%-QTMeI+8~#cKST{dp4?9}yXVt*6LP?(uV-*w?@#2j#qo%jO4`>7_Ilcl?s z-TO0FB3Zs`jh$jY3dGttSR+LV+*9<84j@_20!*&RWHLVmh#ZWi*CDf|poI`prr}wX zfdZKK5-mgwTHpq%Vf;9T>rGk4Uy0*F<)DBMe?te=Fz|zRtUbSyXq8)4=kx}NBWvk$ zj6uM=Oi@L9B9*R{jve3oVF>MBMzyisAY|5q7A{i@_X}B0l5S@Onl>1#?hWnEoiX-X zIpWncIE&z}L4lq#J)}^Z*BNi9^lUrko*x>=5_@kRGNPi>8%X?`k*((OWKSt^i4)K( zA-NtY{MQ%OH-|BqnCvK{%aJjM?6ucH?T!rtwsp%G&VQ^KnYx)0TQWqMR(g7Jx%}m& zdz-J2GIWQ4BvMPdYaLBFBbPHXO@0Dd?k|Q;IP=~G%+hhKE zK4ZC(ijFNeG@lf>LSgJ`{?Iy#JwwqQW0^1OL~5t=LXB=?XWU5E#%tG%!~ix>5Dfp<@>@mH9x{(@$k z8=TJh->c2j!ElLX^1^-AdAbo|Wwc4CC-D%DrV61O0f#ks$^qn`PZ4WRyd5TzSN~J) z)eX?-bi=f4|{_53|G8=Iy)|A{Dm;3r|M*?=cGQ z;R=-t%~PbQFS@l@6;E`(|MwC?R(=ip!|r)u0k7pLd=~c-04lPdec47BKC6S!WcXQV zh2w@uOn9`g5}q&Ss9^AV>Na_$CpJETeA{jb`56@W-3g)Q0r4K- z<#fZB{WFaBNmpXs*l~Nj8t}hIcFgO&X-G;l^1dpi@pyf(^uBLt;kSO^bVE&P7#UM| zX2;aqeMNXwlvWKV9b$I3OyVx`?kgforLMbxz1Jeo3e$$7`P7VH(0p3xnGxWH5;>p% zx5+0L1?;JVV21&Kz@$@++zh?oQte!fN_33CyP0iNmDlfcT6X= z!NGEjMrZdGeyuJ9HW!RMS1!WS`7BHX`Vu34(Ou72@1}1_!X7UpW`k~=h-b?a`mF`> zg^7j)qyzd*qn1r`Pknot}D@cLFm;g_&n~bQXvaRFkM4t?2P-{5S2zmucubCKE_$% z%t(N6_N<~itThqgpt&=7gulXODr2%r9~Q@nId{y?1#-a9oqm+CAwb=vS<4aKgWox=~kMv=oFmMH%6z zS&WyT8im^mBq?3*QgB`b4eEgbQ{v9ec`pFvxR`u__K@}k_z3}+5hvvsU)P<*hIhiY zKj!xqgA~*hy%gq^yxg9xwK5%!3%}zTv;>j)<%MxxW5)4$?%4^g9yH!NQEJ)7L4C$Z zjp{NsoNRuDEk|S!)gP*`6X?{+`nk_{ld)hmr%U;XqLBW?*@aYVl{SZIqJR~JZoDmQ+r zsOMW={}bn{b9u$`08qj#m9rVm@a+}+T0Z&hwM{mdcF6!@?K`2!H|+>x9l_Hy=xF!} zL9*FKE+XNpH67T-TXcr3!ghAa*vtq1CWxP0`;*(8_(n&N-?b=>bZt)}?MtZo@jA<4 zJRPT=z8>Y7cDT`wbNS;~(wfBh&{P}ZfO&yg;4F45kte(GypWLbPV6z@&}#*l{K^0% zNn7?ygRzn^9hHn~P0Su96ntp1`=q&}wtPV*fNr98eM&FBC&fuzN<4tB-rFW3ecaDi zPpH2cQ&s@rdefT~x|U3(e0s0YZrWCGh;ZBX#hxwuXYnst3ZdAH(TvQiQbf)W>Akk=h!8 zr18wX09Bd)!|o#~74w-M8K0sB^C`IGe9R(Mt8pB7i(8i!)sdoE)}#NVy-p%%aN>*Z zGOiNOG$d_>#GD)8r#R(vDB`Py;Jh#MVucV0I`92Z~#=mhQyI5VRwxj6pIn!yKN)I!|tOWv}+pAaq#|EL1LOnvuVg7 zs`T!r6JoY#F5}9#u%VVvgUBiPp$iH0?N&HNdGlK_)Q54eekytgR|xMI-pGg@xw~?f z1C@4*Ohi41o?i^=kLhr6F~>d?#(#sl9W$B8gUrn53FG9`vf-fwGU1w-GeV&&ljqSP zptyTgH0uQc@V3cA5}K9(5s-?zXHEvysRkdCvy3)I;X^>{>QuNJf0%i-(y9Vk_I>SQ z_X0E#ZQ{YE#M>wuH;XN%ww|ExbR4t4FsXdU(X-PEBuNjtJL8m|`yNr7E81XjvVJ3W{s{<^|9HH~aKdYAzfLu*9|&$S^K zX#UpD2;@>*)iNq4W2nqH?TQX zwj@jLL6Y^Y%JLRJB~He3bL}|C)g!ZU)!A3!)l)3Hm_GF?A~yhv%`p|+z)>QGXzsE| zYeHfcm;3BQ7uioGdEE+91-oC%TQ)STqj(k1y{(gMi_ag*&>Jm1$Z@I`VYaFLjo_s0 z8BnS}Cx8iP000m^L7Os3;SVNL1w0}D_-C-6w7+M63jf6rNy!{Wj?zfgT~uaSb7K^WjS_^+ z_7fO+blt&$g+BM@10qcqrPqpI0~73NAp@IM)#X5B(vG<8PjFdi)fV4qc#0SeD@CA9 zFj6Ud>Mu%*_l*ATf5RE)JV@nO5Z17?1&K=MJV&6?$7kQ0_9#HSs7(w`oLAoBCIY=? z{FLkKhR(47YEcDc6Ciji4*vee5Xn z8*wx@LAq@-gF*pbMeoF(3<_MJzvFC0aP7Ktz`6AluF*GT6%g7IC3I|e8(GzjP~!vp z=u<#R>Oq>`NXQz)<}eTVt-#KrX%E%Vk8&pWFvX(yjJq5Mzw(Z=A;dV4mlQ1RvZ{*~ zpVDWoYLBj@tUX-nPEFp?F(YqSSgmWfgHz!_5=?9C^SC6oK$mRfBU*t%PL{`WjTtgT z2eu?;u`VJi9O%`EmOhlrD)Y^)Ur?UnfGN@^M7zHAi$;i)BB{(${k@Mff7ynh3 zhL)Pgypf5d1jr!Ys9$`#CxQ<)*M$$be+dkQ*II3tBn!J@UwyK>8SOJF8FZaeRxCok zVa+zLq2}LgWJg%Zr{S&^i9CNnuC(FY!Pl#%1Yf(;J@VYqp(ie-k)SD2*?)^nT;ye4 z{3Z*ro1r7&mH+(bBDas$I59g#wcfF}U0guj$6ZUocE8by5R_k(9{k&08}NU&3a2>$ zr9h}n{<^c1EcvF0n4{T7)BQf;8_dcMJ1xiF3SYXwa)uG~#bbCYot|B~c08WFMd~)I zpEqQMlfEinyKEg=7UCnRh$2=Q`7S#=UEF4Zv{R}}W%K`Lx7y77ve>VsXq7(z6lgnt z4tGa`X}$ha*BXEk+y_e&T{^Ty)=h&b~75Sx-S~=BJe))Z)$>V9=OTV1I^tgTp|^^6?XnC_8WY zy)KTKPi}QvYHg-q=qgJ-@Me?^uOBxL;rz0Q1@Impw0gu2=3)c>`5;cGLrN9VCgT2N z&rgFitALb0gDV!y+aut4FteAks6qH^0BRf&KeXR=f)KZ!y`4JEYNmulPw?IDwKC%8 zSnesSc$NTq10PT$ms>fVnZ^-$1@tSPPjf0klLju)GWu33c6*-2bCYM?-q!d>s36_< zL^&Vl5IKpnBBss5(B!(iu}FWLi!B+6zR=O31CFKXCUECTg)wYLV7m+#RwPG;pk??? zt`#`>?uj31NDtY0MgpASMhWF^Ba1jy>2tUd2d*VqS<~AXz$$;lRl%a8kZ$)d~2qFUeK&>)pIu1$%w+Efx;JZ5VvYARf_18e@>S`nOXRiJZeQ}}N2 z5B*s!X=!qWUEs|e`S++#xil0Dj-VWq(6>KBMsJ)drr87LlMJS9WjMU4_PBuU{*1j6 z?VY1JbJ7W&_j?kmiDbk}h|$vfj&;^7W#V4?5p>Gx*Wqu}a!I-Z{!ie>@AX8{vq3Bd z7A+7>j^#;uQwVs*4}rcN6%533qSlV@g1`XJd(3~NnS|VV2!$d3AONL{RXoe0h_t}* zwiwcP%Fb9j3r-6gxlQQW4x;qriU=~v2MAFAnJXNJf@Yzvr`!s7k^6UQ3p8JnDKhRx zBKo_+y9EirlM~P9mh6q zfmEjJKJSWwKS5adNzBj@*1h)O{qp;r8U)|FmLxf<;ACc=Nx4LNpVz+uJ(~_5F#;>Mdm$}B~8AIvTF-Jq3ffAvBvp^Y_NlxX1X&&!St; z>n?{P=)#Q2Mi}~bqsH%En>3#iI%JGU^M_p71327BHu`e!4>?6G-!W8cG~s$iuHNxg z9v3SPdk7dfzoKwYk9{gvNZC1aOEPp#3sCBF8^abidqYjh$S6u}BP&wdu;!9SM4N;G z{nb9Q_KhSmH&M9}a2CbQcl7O=R8L&xdi~E#P~{85@?DW~<>#hVCotu`@=cqR4Jj;d zK)b$c*)*zB|AZqXc)_F@wlumw5(S474tD$Vn1acKTggHqu;l8%mR;=*!gZI31DqsM z%s%>H#Dvyr%k|3_c1a`hpo{>&%F$pDBoPH(=wx_^hJ{YmzxDzo*1D_vcU>84Gd!Jibe7WqGtTzoa16~ceOv!#{JdM$B73dMy>YgHtjSAl8&ZubKwq-_xrWF7s1%Jb7O*LJ5UBK zmLU`rmh8~1#GK$Ay_{eV4T0k3Sp1!R7?%vTF?5VhPK1KFXvdUTtEemlM3e1cXO>Iq z`fN1~OWDJQ&;%CnVCVYtZdp_0ob2Q>jz|n5=+@_Xfqg>`ECQjSi^{c%e6FFj?{%5g zB8N=e0*e$FDX2=~kY~V{!;CmGp>Xx}zm5)vRj(6iaAFg9%vh#uWMQ>gdy?T}CWRib zE!@kjFs~iVIBjYWgocKIe(aq5f!Z2F!BV^jy7Kq{`Y;Miu?a9)s0qtKHp_cM7eAu0i*Uyi-rR6xa& zmq{U~1Sa3_3L9CXK>@wgJD~8hp2#KAA#5U_+dC~$r)M5t_tZTLQ(h?=?X4t3jz$u` zI#hG-MQ<~#@I#s;A9pgXAV8qWbqMO1Gxl>7)J@O4#DDm^hmmr;jsrnUQDJD>>g|gI z)U!+5HKC)tq5$>RFN8z8FUR={iwAPjV6yE#m%^evlK1FJxz~DHFig;S0)E&zMACc4~nk`EK z2f2d{QQjjUqtYi0jC2719zL5m?gIMoW%lTi`oY#pZ>W8xwte!)2}~`K#c*s5{Cryh zvx^ZNotQSM?RkFj7wHWa;|xCYL- zt$l(G;sRGFn7(lvR5mRUB2qHV(s#92WY9R=DqV#04f7;i+SPWUzIB=51xf1Dq>qXB zpa_GVHc%dalBs>r#KJBo==+PwKh3#-QQtbzy$mK%6U|Ou%8e+^a7)W-7N>TPB62}e zI4(81b_~JM|1C8TpVV|yrCR)Aq^F-CpkshSO>%tdpRJpM9t4G#+}Bz0a!($4)EQz| zbXWo8)-LnGzlb>A$m=<0mq`ww6E?h(C7Z>&* zfS09?pq*y)s{DaX&8U&{j?np|L3wSyJF+4-lu~hjY*DDGOx>7?O?VKuh1n^Sbft+{ zBHf<1s=ocJ^{s&HI9;$Ewm|>jefscnve>IYUO@GLi80YESFvbz89+L9yP@7&W?`vD ze!cB~?Z#>aMG^q?!~lhE;$m3k*{^5F=x7BMM43o@v7ITq6s-ptOyFe8J^TO0u{zB@ z7*^|Hy>?0uN9Tu${$^}^ohCe+0UBhPeth!epEDLy#3=AKOlf#uOB3ytN5Q>v8>kB$ zI%Len|Jo*i~>*d)SC6&2|=Fj)_L!(UdNzN2#vA65-7}_Ry-bx3I`M z9i)AHyMs|MajH0A)>%CjuTlWcm?%^iq*Np6Y%z7E#&*qRx%=oM`s47W=E6Uo*`FNN zktj&8=yE~c45+a*O$PV2C3QN6EhM9s>WFf=l0D|~6)R~_R_FqGblA|Mwqw~5q!(T- z8?QpX=BmBG>J)GMF#Qjz9L?cCJUhD&;sd`bj=GprAH)GVcl)+lzyL<{{Rt`jhi|v> zKcuM1H0b~U1W^H>QEEb;=Orsi%NS)ueiu4u$ zf86IZsVy zb9UYtAGwsFy!De85{Q)n4j}Xg3QegKs92lZ=DzLSVGrOb9s$+Kl2W+4FqprCMhPtKNGL%fXWHVG}B|DtN%$5C~>5G+M=lP(jZK!7zziq4T9fo{aS z!k_KeYz>!tH-sW!*SyWFvl~?$aidMw(U#m~ZJ?g-txAYT5Pz-u4JhQuEMUQL8d%L| z9s7ir#8qj# zovm08bCdask80(~DBO!9KHuD8$=s=|RH?1*3%#wI$9VHmV$oDAh)SL$8ox6B~4JR-FS=?N^^p?fJB0E6I#kmz;oNL96FCu+eYRBY{rH9GjEM5-y%_3FEa??q;vh=G5^^M_Zs#vx@{JVJ{~tf2daHYy=I1VHfp`tME*{Dv;iCN7M0hi7`Adu?5$lZMpCRW%VNm^%a$4 zD9a@#prIu*zr9X?mFO(D`chUAR>O<2a74Oq(Sq!-{Chu_c^8I*eQ@o@(fHiTYJ5zE zJ5NJQO&chSz14Ld7~L%e6Eg%4`lATm>JeTM-=P@-s6jLcKlJpn63zbrDWub^K$>8Q z@?)1XwbDGiNbjlr<_PVKidGw?o8p$^aMZ z)^JYg6DRn>sjnoMpwuo(kfsZH$X$shQcuSazzJLlQ#3UrG?oRfqpg4Q{rutTc%NQd1bpEUnj4U5bpe*3N~+Xj-fX4|{;G-Z_Til(xq`fj!Cl-Y_RX)9rg{YoTn z01PZan^Z~R4<=IuJSG4068;^lARakTra818 zaCQ~r2n|k-+8kQwAyL^sfF8;3&>L3Bt#cO*m7h;~Lk%|*U5U*;1U^Pyh3*Le6sH}e z{TJ1!GmN~0({?n!`Zbp*NxZ&sKxy%>HgAHMgK}uuHFhX<%u3~@cw|3r0JF#K)LcRY z<;Eyb+E+4y)l5uOdX|!df2gY6MyKqcBR_Ow;hkvrPZ4%x8 z=GDq>U>MqZY1xBrFIrjCPR_m8r78&ZkO$o2Q+t$QnQ3Q-=C$mRAJi#5>VwQNCQ>5l zqNC{^a)}H^>R%L693(-mt4-V1#5{CgLiF<{EJJPdt1E7snIJQnI+rh2?zsgN`8U7q zGe{bjZJG)v``&3xP*h+BXuNCQv8L$Dwts~fMiWsVT``*P3 z0IeG9r|=#eVbOxHP%wC4oFbm5KY=-?Bxnh=HJ7F6=S{}8r=!2rZYzJDV8)lu_m_T111 z*~RGSnZUB*M3RyjpXyx`o(LzY!k^=^Pch&aU*`|9+XCEJSY_%V9-?%Qe)!Gs=Vji` zk~Pjzbb+povCguU zae&)Yk*#po2+*X)Z^;BVCED6T#=A=Psw5@j+sD2yw|PW(hTCAgF*o%R>F1`y2^f1_Z`Ax-KHSe_~k~}#<`eO~eHRh}l za8RsF@x6ozeX`jb^8Dvut4vtZYefqp^nWBG@YG#J@HcSbfe86N+}lb2Sj7L-mHm=B zx7*_73ZDxsNWu3%3jNc5r~%L60&W}-=tI}8j~pBG0x2s{~CsO zt~|XalHz~_n*vG7TiMk7?&QXDD%~Hlew+L0;&Ii2xGbk zf+^N-YKN)AB3P6|#uEFGKD06Ga0W)n?J@XQ^DDC4qj$jRcDcTB1I0RYJcn9Bv98&b ztf&yQD;#xA8QgKaLMgPu!~L_Ag=6EJyZL_K%}p6aLL}ikDq?oblp_{9-014#0$&w4Oii*R$ovPRgN)W z^ryyx$G5CKb=Srco;azi=FDsbUY`AYbizi-(th!+?USJHV!Hg!MpbUz?IC8OnhENg zX!1NKs*$cMt3tMQjW>W{ljSWoT7P zF_1z)y!WS}LBxYb+D58x2Jcq5i?l3Pcw4meN_gY;b zj$B-JU5aYzNtdVkY0*segw_i@1E*%e`of!Dw^|>}Qi`N)?L2cf=eWjTf^Ax8rMNF5 z+}O2V&N5m(Pj;=#b05%LsyD^Y9~MbP1mQC6P*+Vvz!uiyoVp)EMNoWT`+m*#1LwTb zwD&%O6hT{cPew6Q$`1em8A}7$ZwMd0b9mQT%o00>$-~q<1^35bL;a_Y0N&aF3d;Bu z->1Sh4#;7{%O##>#G-2|l@B_<YNvAO2kX}~$pI>^ z_)^4z_XzjNwb-HrvsZ{R&>Ly;VkQ8lr)MJ+)I7`P8GGOvq+Ns++GpXNHDbIDh+4Hk zie+1S(K3x;ixAbp4z)ubM_Zc6?aZ=r{yO5Aj0Np%rlSo%`%Kz=tI%gE*HtpSVljS- zVnq|~93x=)t&>^TTC6bDHEUKuw+k zaFV6)5lwy-Sn*7Y8*Yxh|1CPR#;aTgr)i9VD=NOPehl7Ac4ADUB^lPidnjhzT-@O1 z52FVh9$ng?=KMHW;^Xhpf1A8x3Pf zg>jDh6bg_mCfySRQ^R~>5h_-my^qL$Y>5B;3%;uSIo}AkSzAWNgtt5T_DYK~cu)V- z^!Y9(v^N|+@`1mqRVzX7<6`MK(u#x>p7RF0>Gd>eg}eqB53=$?CIm~3EZJh2pK|3Y zDG=x=WV5AwORqJJ4~kI!D81>5T_jQdbU z0ywIFX#d- z=_Tl0l5pP_EOe@X(@Ux1#96Z42s$x9v#Yt<*GH<8nF(&D>Bg#%q2Wqrv_Yelm8iUx zbMmUlZP9nbiUI5^R0hiPDc!9#BFztasro9ghUER#+ijo-Ce_c_JT@IbhpC=4zM}(A z_QUkY@*woUPg=CGu{lOo+!LUAKG<;p00dkCpL1$LpWWa&q)|Godu#5y1Pi+*QVaI< zq_FFFkCLqsIobw6r$e=ZtX|wp^@OVay=;Q|*sG?(RozVR=8(+eN10jE%wNNDK*@PpvxMI^5c}6b->mH0yy|Ghk{>EVd`dF_kY`ake65B zE$>m<=!cV!1G}Y?S5sr+#9X<$RvJN1@_DZ5HJu997Wk}zXw%;7+dh`AQ*vsETzBNR zLzJ=-z4~Sjs$75=InETve7(Gn#d07H;K0Y~L<;tlxwos^)pyd!aNO!U{JmAcbpOZV z_64xeLKJnEtllR9T@^O@g?izi=0J+MJqrb!K*>XBK$9s&f^QO-u1{;#f+Nzn6`Ijz zCM2U(VZ{gMG_5XW8(x&VIc(f|<)?GtHgO-7{tza9PaR!i5|Z$3NmyV-|L~a?g!Q(@ zZ!$8kc^o1|nT4RVITNtQNtMk>OL=t|s2HwOO0Abq4W_$Rx%Lgy!^plpv_T&KTF!O8 zA(H?p*wFvN_AsC>I|(n*y5>56omO7C(EIF~0)&);-LnWnZA0s(-}x$zwpqc9_G*_r z&tREU6LgD`gD^B0_i^1b;@7DJP%8cB_3a|b2h;+z3eMll3NM(E8brROS6TAnD@-O8 zYwPgEzzU;~E(@7?P1G-qfJOK8b?;&^%k@MQ${y&m>R_gZsf+IQkoq7ryKSGk9};)3 zZM2ppT@r=CfGzla#qNj-2UnE*)5rhzqewj7*8?JX>4(!a$`w+gc~K?*3&q&&mx)@3 zKpDJrCFsMapk-~!xs!D3=*=^Vt(dS~&~;wLfvmtsPJY`97BEZ{YKEDY8zRjVprMExAJlbdQirJQePa&T82_3<|5|)1NAmdjH$AwaF>x9i=ryiH)h%0E2Tmz zu_>asZmbE4(zqmnnpeWtUk-pOyIk_iD77B|Mw} z00vb-n{`Ry4<=Ir6#s@Jx3+>ufDgaR1x#7{GVLmiGO{HRV@_F;A`J1N1L_yv& zR~f2yYjf;nBrP$(n~1%7JgZy|+uklmX7ofe%a>jh&M4<;{)-6>3)UF~qYM>H0vlkTd zj(S;`r~_H?*P_{i(tTK?1gh}?ACGfZo;LKckpVo|%wo!lzV}X?^K!gPI$AcLFdjKf z4Zk|c*Ql-`cw_k-Cb%8U z(egrowR3C(tWxiUT%i>nbQottDdy0#MN+Rs68=+bY<$~v$fq7Q$jy|K=q!>C0hDQr zb#&RAuVGah4JTSb1#{!sO^8ws=MVcnd$R+a)qxLg`wNqy@I2y+R@BB&&g7;ijD=J;#afwzsU&mEsMMnix5$IiVw+W_%-UZH ze&0TxsSc3EUa<^@3&|3Tz2zx1mi1^`vkt7Z>co(g6mamZSrUR4l9XSOGlLrw8eObL z2nifx?-SG+?@7|-wvle!KN5lp969+!sv%3KtfSl7*HQ?CxlL{6dpmBd@{(L7dt-QR z#Oxi_x_`3QX`^hV=^1m(T38VO>Z;W=2)hRBg_yBA2Q)*JarUn%mTQq5w#AprUPOO| z*-L`N6oZWHTDBFYKm<8sBALq~5_6eAC4aOMS+_%7*$~a`!lay90F8)Ipz51wOw09y zCsPRfhEI9yOGfq2)8pri7p9A2D*I*Q1jp1e=mUx;4$C;YOF#ih2W{i+-1sJSj#?&Nz1JkN9 z$R|>I(_NrX3mS~CP^Ax6AV-;u8?F8NcpMv01NgCqVlwzImXAn4aiV#y%+WmH&4tMk zjGG~e3nP<8G*|a_+%3=ct?T7f?ORr0Yveg|C4Suf9seRmF@}a(Ys)qh$xs%FcE!}1 zWuXor-)Dv=pF(y6j-c>Fx&vxKGW9-1n7NfN!0JnHuInfgvt8H>78`$3pS+L>ZygQu zaFE)GpB87+s2<)QrF0NCHQRt=pDZ#rYo5d;@t*LD8XX*tzR->49Zfy$dZVfro^c-n?K=cG9nUw&BPeib&r?HZmVce=@{)o%+Ue4mogYq` zCO2^-HMebL`M6A`X3M&EsEeWqZ^m=SU1%0r!CU2$1ct6hfpn$Gp=v0~$EK$%#3x z*o$3DsOILUFiET4RHE~MYjAZd8~RO{fiO$Y3S_$j%-G^S#+!T`tLEXXpFA_haY19RPUR!;?fO&)0w~H1Q@a z&0Go-h|F8_bk74AYw0-7C?wKZAUXE^%GXm~0E1QL;Mm8)l0T5#U*+v8`5V_r`luC( z!sP}sO3Sd_?Tz&k7rQF8xo?EVt-AN>^=_9?2OvO9%!_8z4>1@VKJ#MTr1tuvk)-jF z@~~vW>kD6{u!X{JHMRm80&S=awg74lrlL;;_pxt>F!?Y9ZvQ_v>KWl}N~@jH@B+?v zPP7cUX;;gC5Bkj|$3deykSvtSs>Q2IJl+w + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packager/hls/base/media_playlist.cc b/packager/hls/base/media_playlist.cc index 3dd79e3265..ca5ac9f09c 100644 --- a/packager/hls/base/media_playlist.cc +++ b/packager/hls/base/media_playlist.cc @@ -737,9 +737,9 @@ void MediaPlaylist::RemoveOldSegment(int64_t start_time) { if (stream_type_ == MediaPlaylistStreamType::kVideoIFramesOnly) return; - segments_to_be_removed_.push_back( - media::GetSegmentName(media_info_.segment_template(), start_time, - media_sequence_number_, media_info_.bandwidth())); + segments_to_be_removed_.push_back(media::GetSegmentName( + media_info_.segment_template(), start_time, media_sequence_number_ + 1, + media_info_.bandwidth())); while (segments_to_be_removed_.size() > hls_params_.preserved_segments_outside_live_window) { VLOG(2) << "Deleting " << segments_to_be_removed_.front(); diff --git a/packager/media/base/media_handler.h b/packager/media/base/media_handler.h index e2975ad52e..9608145a2b 100644 --- a/packager/media/base/media_handler.h +++ b/packager/media/base/media_handler.h @@ -59,6 +59,7 @@ struct SegmentInfo { bool is_encrypted = false; int64_t start_timestamp = -1; int64_t duration = 0; + int64_t segment_number = 1; // This is only available if key rotation is enabled. Note that we may have // a |key_rotation_encryption_config| even if the segment is not encrypted, // which is the case for clear lead. diff --git a/packager/media/base/media_handler_test_base.cc b/packager/media/base/media_handler_test_base.cc index 0a5b28e91c..8a5a7d1e03 100644 --- a/packager/media/base/media_handler_test_base.cc +++ b/packager/media/base/media_handler_test_base.cc @@ -251,11 +251,13 @@ std::shared_ptr MediaHandlerTestBase::GetMediaSample( std::unique_ptr MediaHandlerTestBase::GetSegmentInfo( int64_t start_timestamp, int64_t duration, - bool is_subsegment) const { + bool is_subsegment, + int64_t segment_number) const { std::unique_ptr info(new SegmentInfo); info->start_timestamp = start_timestamp; info->duration = duration; info->is_subsegment = is_subsegment; + info->segment_number = segment_number; return info; } diff --git a/packager/media/base/media_handler_test_base.h b/packager/media/base/media_handler_test_base.h index 980948a5e4..6b5cf3c274 100644 --- a/packager/media/base/media_handler_test_base.h +++ b/packager/media/base/media_handler_test_base.h @@ -325,7 +325,8 @@ class MediaHandlerTestBase : public ::testing::Test { std::unique_ptr GetSegmentInfo(int64_t start_timestamp, int64_t duration, - bool is_subsegment) const; + bool is_subsegment, + int64_t segment_number) const; std::unique_ptr GetTextStreamInfo(int32_t timescale) const; diff --git a/packager/media/base/muxer.h b/packager/media/base/muxer.h index 6a622172ae..9e99762383 100644 --- a/packager/media/base/muxer.h +++ b/packager/media/base/muxer.h @@ -117,7 +117,7 @@ class Muxer : public MediaHandler { // In VOD single segment case with Ad Cues, |output_file_name| is allowed to // be a template. In this case, there will be NumAdCues + 1 files generated. std::string output_file_template_; - size_t output_file_index_ = 0; + size_t output_file_index_ = 1; }; } // namespace media diff --git a/packager/media/base/muxer_util.cc b/packager/media/base/muxer_util.cc index bd6028da6f..a928d868f9 100644 --- a/packager/media/base/muxer_util.cc +++ b/packager/media/base/muxer_util.cc @@ -110,7 +110,7 @@ Status ValidateSegmentTemplate(const std::string& segment_template) { std::string GetSegmentName(const std::string& segment_template, int64_t segment_start_time, - uint32_t segment_index, + uint32_t segment_number, uint32_t bandwidth) { DCHECK_EQ(Status::OK, ValidateSegmentTemplate(segment_template)); @@ -154,7 +154,7 @@ std::string GetSegmentName(const std::string& segment_template, absl::UntypedFormatSpec format(format_tag); if (identifier == "Number") { // SegmentNumber starts from 1. - format_args.emplace_back(static_cast(segment_index + 1)); + format_args.emplace_back(static_cast(segment_number)); } else if (identifier == "Time") { format_args.emplace_back(static_cast(segment_start_time)); } else if (identifier == "Bandwidth") { diff --git a/packager/media/base/muxer_util.h b/packager/media/base/muxer_util.h index 02473ecb51..7cf797c022 100644 --- a/packager/media/base/muxer_util.h +++ b/packager/media/base/muxer_util.h @@ -29,12 +29,12 @@ Status ValidateSegmentTemplate(const std::string& segment_template); /// @param segment_template is the segment template pattern, which should /// comply with ISO/IEC 23009-1:2012 5.3.9.4.4. /// @param segment_start_time specifies the segment start time. -/// @param segment_index specifies the segment index. +/// @param segment_number specifies the segment number. /// @param bandwidth represents the bit rate, in bits/sec, of the stream. /// @return The segment name with identifier substituted. std::string GetSegmentName(const std::string& segment_template, int64_t segment_start_time, - uint32_t segment_index, + uint32_t segment_number, uint32_t bandwidth); } // namespace media diff --git a/packager/media/base/muxer_util_unittest.cc b/packager/media/base/muxer_util_unittest.cc index 0f410ff885..58e58122b4 100644 --- a/packager/media/base/muxer_util_unittest.cc +++ b/packager/media/base/muxer_util_unittest.cc @@ -62,95 +62,57 @@ TEST(MuxerUtilTest, ValidateSegmentTemplateWithFormatTag) { TEST(MuxerUtilTest, GetSegmentName) { const int64_t kSegmentStartTime = 180180; - const uint32_t kSegmentIndex = 11; + const uint32_t kSegmentNumber = 12; const uint32_t kBandwidth = 1234; - EXPECT_EQ("12", GetSegmentName("$Number$", - kSegmentStartTime, - kSegmentIndex, + EXPECT_EQ("12", GetSegmentName("$Number$", kSegmentStartTime, kSegmentNumber, kBandwidth)); - EXPECT_EQ("012", - GetSegmentName("$Number%03d$", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); - EXPECT_EQ( - "12$foo$00012", - GetSegmentName( - "$Number%01d$$$foo$$$Number%05d$", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); + EXPECT_EQ("012", GetSegmentName("$Number%03d$", kSegmentStartTime, + kSegmentNumber, kBandwidth)); + EXPECT_EQ("12$foo$00012", + GetSegmentName("$Number%01d$$$foo$$$Number%05d$", kSegmentStartTime, + kSegmentNumber, kBandwidth)); - EXPECT_EQ("180180", - GetSegmentName("$Time$", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); + EXPECT_EQ("180180", GetSegmentName("$Time$", kSegmentStartTime, + kSegmentNumber, kBandwidth)); EXPECT_EQ("foo$_$18018000180180.m4s", GetSegmentName("foo$$_$$$Time%01d$$Time%08d$.m4s", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); + kSegmentStartTime, kSegmentNumber, kBandwidth)); // Combo values. - EXPECT_EQ("12-1234", - GetSegmentName("$Number$-$Bandwidth$", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); + EXPECT_EQ("12-1234", GetSegmentName("$Number$-$Bandwidth$", kSegmentStartTime, + kSegmentNumber, kBandwidth)); EXPECT_EQ("012-001234", - GetSegmentName("$Number%03d$-$Bandwidth%06d$", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); + GetSegmentName("$Number%03d$-$Bandwidth%06d$", kSegmentStartTime, + kSegmentNumber, kBandwidth)); // Format specifier edge cases. - EXPECT_EQ("12", - GetSegmentName("$Number%00d$", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); - EXPECT_EQ("00012", - GetSegmentName("$Number%005d$", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); + EXPECT_EQ("12", GetSegmentName("$Number%00d$", kSegmentStartTime, + kSegmentNumber, kBandwidth)); + EXPECT_EQ("00012", GetSegmentName("$Number%005d$", kSegmentStartTime, + kSegmentNumber, kBandwidth)); } TEST(MuxerUtilTest, GetSegmentNameWithIndexZero) { const int64_t kSegmentStartTime = 0; - const uint32_t kSegmentIndex = 0; + const uint32_t kSegmentNumber = 1; const uint32_t kBandwidth = 0; - EXPECT_EQ("1", GetSegmentName("$Number$", - kSegmentStartTime, - kSegmentIndex, + EXPECT_EQ("1", GetSegmentName("$Number$", kSegmentStartTime, kSegmentNumber, kBandwidth)); - EXPECT_EQ("001", - GetSegmentName("$Number%03d$", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); + EXPECT_EQ("001", GetSegmentName("$Number%03d$", kSegmentStartTime, + kSegmentNumber, kBandwidth)); - EXPECT_EQ("0", GetSegmentName("$Time$", - kSegmentStartTime, - kSegmentIndex, + EXPECT_EQ("0", GetSegmentName("$Time$", kSegmentStartTime, kSegmentNumber, kBandwidth)); - EXPECT_EQ("00000000.m4s", - GetSegmentName("$Time%08d$.m4s", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); + EXPECT_EQ("00000000.m4s", GetSegmentName("$Time%08d$.m4s", kSegmentStartTime, + kSegmentNumber, kBandwidth)); } TEST(MuxerUtilTest, GetSegmentNameLargeTime) { const int64_t kSegmentStartTime = 1601599839840ULL; - const uint32_t kSegmentIndex = 8888888; + const uint32_t kSegmentNumber = 8888889; const uint32_t kBandwidth = 444444; - EXPECT_EQ("1601599839840", - GetSegmentName("$Time$", - kSegmentStartTime, - kSegmentIndex, - kBandwidth)); + EXPECT_EQ("1601599839840", GetSegmentName("$Time$", kSegmentStartTime, + kSegmentNumber, kBandwidth)); } } // namespace media diff --git a/packager/media/base/text_muxer.cc b/packager/media/base/text_muxer.cc index 70c967423c..e6e07dcab1 100644 --- a/packager/media/base/text_muxer.cc +++ b/packager/media/base/text_muxer.cc @@ -50,9 +50,13 @@ Status TextMuxer::Finalize() { // Insert a dummy value so the HLS generator will generate a segment list. ranges.subsegment_ranges.emplace_back(); + // The segment number does not matter for single segment output. + const uint32_t kArbitrarySegmentNumber = 0; + muxer_listener()->OnNewSegment( options().output_file_name, 0, - duration_seconds * streams()[0]->time_scale(), size); + duration_seconds * streams()[0]->time_scale(), size, + kArbitrarySegmentNumber); } muxer_listener()->OnMediaEnd(ranges, duration_seconds); @@ -82,17 +86,20 @@ Status TextMuxer::FinalizeSegment(size_t stream_id, const std::string& segment_template = options().segment_template; DCHECK(!segment_template.empty()); - const uint32_t index = segment_index_++; + const int64_t start = segment_info.start_timestamp; const int64_t duration = segment_info.duration; + const uint32_t segment_number = segment_info.segment_number; + const uint32_t bandwidth = options().bandwidth; const std::string filename = - GetSegmentName(segment_template, start, index, bandwidth); + GetSegmentName(segment_template, start, segment_number, bandwidth); uint64_t size; RETURN_IF_ERROR(WriteToFile(filename, &size)); - muxer_listener()->OnNewSegment(filename, start, duration, size); + muxer_listener()->OnNewSegment(filename, start, duration, size, + segment_number); return Status::OK; } diff --git a/packager/media/base/text_muxer.h b/packager/media/base/text_muxer.h index 0b4c9be58d..68ad1bd18f 100644 --- a/packager/media/base/text_muxer.h +++ b/packager/media/base/text_muxer.h @@ -38,7 +38,6 @@ class TextMuxer : public Muxer { int64_t total_duration_ms_ = 0; int64_t last_cue_ms_ = 0; - uint32_t segment_index_ = 0; }; } // namespace media diff --git a/packager/media/chunking/chunking_handler.cc b/packager/media/chunking/chunking_handler.cc index bcabf96127..388683a867 100644 --- a/packager/media/chunking/chunking_handler.cc +++ b/packager/media/chunking/chunking_handler.cc @@ -34,6 +34,7 @@ bool IsNewSegmentIndex(int64_t new_index, int64_t current_index) { ChunkingHandler::ChunkingHandler(const ChunkingParams& chunking_params) : chunking_params_(chunking_params) { CHECK_NE(chunking_params.segment_duration_in_seconds, 0u); + segment_number_ = chunking_params.start_segment_number; } Status ChunkingHandler::InitializeInternal() { @@ -163,17 +164,20 @@ Status ChunkingHandler::OnMediaSample( return DispatchMediaSample(kStreamIndex, std::move(sample)); } -Status ChunkingHandler::EndSegmentIfStarted() const { +Status ChunkingHandler::EndSegmentIfStarted() { if (!segment_start_time_) return Status::OK; auto segment_info = std::make_shared(); segment_info->start_timestamp = segment_start_time_.value(); segment_info->duration = max_segment_time_ - segment_start_time_.value(); + segment_info->segment_number = segment_number_++; + if (chunking_params_.low_latency_dash_mode) { segment_info->is_chunk = true; segment_info->is_final_chunk_in_seg = true; } + return DispatchSegmentInfo(kStreamIndex, std::move(segment_info)); } diff --git a/packager/media/chunking/chunking_handler.h b/packager/media/chunking/chunking_handler.h index 717ccec3e1..8706e2bf12 100644 --- a/packager/media/chunking/chunking_handler.h +++ b/packager/media/chunking/chunking_handler.h @@ -60,7 +60,7 @@ class ChunkingHandler : public MediaHandler { Status OnCueEvent(std::shared_ptr event); Status OnMediaSample(std::shared_ptr sample); - Status EndSegmentIfStarted() const; + Status EndSegmentIfStarted(); Status EndSubsegmentIfStarted() const; bool IsSubsegmentEnabled() { @@ -74,8 +74,13 @@ class ChunkingHandler : public MediaHandler { int64_t segment_duration_ = 0; int64_t subsegment_duration_ = 0; + // Segment number that keeps monotically increasing. + // Set to start_segment_number in constructor. + int64_t segment_number_ = 1; + // Current segment index, useful to determine where to do chunking. int64_t current_segment_index_ = -1; + // Current subsegment index, useful to determine where to do chunking. int64_t current_subsegment_index_ = -1; diff --git a/packager/media/chunking/text_chunker.cc b/packager/media/chunking/text_chunker.cc index 6e4d5760a3..2f25ac7a28 100644 --- a/packager/media/chunking/text_chunker.cc +++ b/packager/media/chunking/text_chunker.cc @@ -16,8 +16,10 @@ namespace { const size_t kStreamIndex = 0; } // namespace -TextChunker::TextChunker(double segment_duration_in_seconds) - : segment_duration_in_seconds_(segment_duration_in_seconds){}; +TextChunker::TextChunker(double segment_duration_in_seconds, + int64_t start_segment_number) + : segment_duration_in_seconds_(segment_duration_in_seconds), + segment_number_(start_segment_number){}; Status TextChunker::Process(std::unique_ptr data) { switch (data->stream_data_type) { @@ -60,14 +62,12 @@ Status TextChunker::OnCueEvent(std::shared_ptr event) { // Convert the event's time to be scaled to the time of each sample. const int64_t event_time = ScaleTime(event->time_in_seconds); - // Output all full segments before the segment that the cue event interupts. while (segment_start_ + segment_duration_ < event_time) { RETURN_IF_ERROR(DispatchSegment(segment_duration_)); } const int64_t shorten_duration = event_time - segment_start_; - RETURN_IF_ERROR(DispatchSegment(shorten_duration)); return DispatchCueEvent(kStreamIndex, std::move(event)); } @@ -109,6 +109,8 @@ Status TextChunker::DispatchSegment(int64_t duration) { std::shared_ptr info = std::make_shared(); info->start_timestamp = segment_start_; info->duration = duration; + info->segment_number = segment_number_++; + RETURN_IF_ERROR(DispatchSegmentInfo(kStreamIndex, std::move(info))); // Move onto the next segment. diff --git a/packager/media/chunking/text_chunker.h b/packager/media/chunking/text_chunker.h index e6f75c4ca6..b4e836d09d 100644 --- a/packager/media/chunking/text_chunker.h +++ b/packager/media/chunking/text_chunker.h @@ -20,7 +20,8 @@ namespace media { // is when a cue event is seen. class TextChunker : public MediaHandler { public: - explicit TextChunker(double segment_duration_in_seconds); + explicit TextChunker(double segment_duration_in_seconds, + int64_t start_segment_number); private: TextChunker(const TextChunker&) = delete; @@ -52,6 +53,10 @@ class TextChunker : public MediaHandler { int64_t segment_start_ = -1; // Set when the first sample comes in. int64_t segment_duration_ = -1; // Set in OnStreamInfo. + // Segment number that keeps monotically increasing. + // Set to start_segment_number in constructor. + int64_t segment_number_ = 1; + // All samples that make up the current segment. We must store the samples // until the segment ends because a cue event may end the segment sooner // than we expected. diff --git a/packager/media/chunking/text_chunker_unittest.cc b/packager/media/chunking/text_chunker_unittest.cc index 69372f9d0a..d1f4a0f0bf 100644 --- a/packager/media/chunking/text_chunker_unittest.cc +++ b/packager/media/chunking/text_chunker_unittest.cc @@ -30,6 +30,8 @@ const size_t kOutput = 0; const bool kEncrypted = true; const bool kSubSegment = true; +const int64_t kStartSegmentNumber = 1; + const char* kNoId = ""; const char* kNoPayload = ""; } // namespace @@ -38,7 +40,8 @@ class TextChunkerTest : public MediaHandlerTestBase { protected: Status Init(double segment_duration) { return SetUpAndInitializeGraph( - std::make_shared(segment_duration), kInputs, kOutputs); + std::make_shared(segment_duration, kStartSegmentNumber), + kInputs, kOutputs); } }; diff --git a/packager/media/crypto/encryption_handler_unittest.cc b/packager/media/crypto/encryption_handler_unittest.cc index a45790a72c..a1833def74 100644 --- a/packager/media/crypto/encryption_handler_unittest.cc +++ b/packager/media/crypto/encryption_handler_unittest.cc @@ -357,7 +357,7 @@ TEST_P(EncryptionHandlerEncryptionTest, ClearLeadWithNoKeyRotation) { kIsKeyFrame, kData, kDataSize)))); ASSERT_OK(Process(StreamData::FromSegmentInfo( kStreamIndex, GetSegmentInfo(i * kSegmentDuration, kSegmentDuration, - !kIsSubsegment)))); + !kIsSubsegment, i + 1)))); const bool is_encrypted = i == 2; const auto& output_stream_data = GetOutputStreamDataVector(); EXPECT_THAT(output_stream_data, @@ -436,7 +436,7 @@ TEST_P(EncryptionHandlerEncryptionTest, ClearLeadWithKeyRotation) { kIsKeyFrame, kData, kDataSize)))); ASSERT_OK(Process(StreamData::FromSegmentInfo( kStreamIndex, GetSegmentInfo(i * kSegmentDuration, kSegmentDuration, - !kIsSubsegment)))); + !kIsSubsegment, i)))); const bool is_encrypted = i >= 2; const auto& output_stream_data = GetOutputStreamDataVector(); EXPECT_THAT(output_stream_data, diff --git a/packager/media/event/combined_muxer_listener.cc b/packager/media/event/combined_muxer_listener.cc index a113565519..76381b7c36 100644 --- a/packager/media/event/combined_muxer_listener.cc +++ b/packager/media/event/combined_muxer_listener.cc @@ -71,9 +71,11 @@ void CombinedMuxerListener::OnMediaEnd(const MediaRanges& media_ranges, void CombinedMuxerListener::OnNewSegment(const std::string& file_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size) { + uint64_t segment_file_size, + int64_t segment_number) { for (auto& listener : muxer_listeners_) { - listener->OnNewSegment(file_name, start_time, duration, segment_file_size); + listener->OnNewSegment(file_name, start_time, duration, segment_file_size, + segment_number); } } diff --git a/packager/media/event/combined_muxer_listener.h b/packager/media/event/combined_muxer_listener.h index fdeda6123c..1f40e5c1e1 100644 --- a/packager/media/event/combined_muxer_listener.h +++ b/packager/media/event/combined_muxer_listener.h @@ -44,7 +44,8 @@ class CombinedMuxerListener : public MuxerListener { void OnNewSegment(const std::string& file_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size) override; + uint64_t segment_file_size, + int64_t segment_number) override; void OnCompletedSegment(int64_t duration, uint64_t segment_file_size) override; void OnKeyFrame(int64_t timestamp, diff --git a/packager/media/event/event_info.h b/packager/media/event/event_info.h index ea1162a36e..0b8a4a9302 100644 --- a/packager/media/event/event_info.h +++ b/packager/media/event/event_info.h @@ -20,6 +20,7 @@ struct SegmentEventInfo { // The below two fields are only useful for Segment. int64_t duration; uint64_t segment_file_size; + int64_t segment_number; }; struct KeyFrameEvent { diff --git a/packager/media/event/hls_notify_muxer_listener.cc b/packager/media/event/hls_notify_muxer_listener.cc index c0f71267a3..3e61976651 100644 --- a/packager/media/event/hls_notify_muxer_listener.cc +++ b/packager/media/event/hls_notify_muxer_listener.cc @@ -244,11 +244,13 @@ void HlsNotifyMuxerListener::OnMediaEnd(const MediaRanges& media_ranges, void HlsNotifyMuxerListener::OnNewSegment(const std::string& file_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size) { + uint64_t segment_file_size, + int64_t segment_number) { if (!media_info_->has_segment_template()) { EventInfo event_info; event_info.type = EventInfoType::kSegment; - event_info.segment_info = {start_time, duration, segment_file_size}; + event_info.segment_info = {start_time, duration, segment_file_size, + segment_number}; event_info_.push_back(event_info); } else { // For multisegment, it always starts from the beginning of the file. diff --git a/packager/media/event/hls_notify_muxer_listener.h b/packager/media/event/hls_notify_muxer_listener.h index 9d0f58c0b3..aa76fa8e84 100644 --- a/packager/media/event/hls_notify_muxer_listener.h +++ b/packager/media/event/hls_notify_muxer_listener.h @@ -72,7 +72,8 @@ class HlsNotifyMuxerListener : public MuxerListener { void OnNewSegment(const std::string& file_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size) override; + uint64_t segment_file_size, + int64_t segment_number) override; void OnKeyFrame(int64_t timestamp, uint64_t start_byte_offset, uint64_t size) override; diff --git a/packager/media/event/hls_notify_muxer_listener_unittest.cc b/packager/media/event/hls_notify_muxer_listener_unittest.cc index 4d9650a8e9..1bf9e2e4f1 100644 --- a/packager/media/event/hls_notify_muxer_listener_unittest.cc +++ b/packager/media/event/hls_notify_muxer_listener_unittest.cc @@ -79,6 +79,7 @@ const uint64_t kSegmentStartOffset = 10000; const int64_t kSegmentStartTime = 19283; const int64_t kSegmentDuration = 98028; const uint64_t kSegmentSize = 756739; +const int64_t kAnySegmentNumber = 10; const int64_t kCueStartTime = kSegmentStartTime; @@ -349,7 +350,7 @@ TEST_F(HlsNotifyMuxerListenerTest, OnNewSegmentAndCueEvent) { kSegmentDuration, _, kSegmentSize)); listener_.OnCueEvent(kCueStartTime, "dummy cue data"); listener_.OnNewSegment("new_segment_name10.ts", kSegmentStartTime, - kSegmentDuration, kSegmentSize); + kSegmentDuration, kSegmentSize, kAnySegmentNumber); } // Verify that the notifier is called for every segment in OnMediaEnd if @@ -367,7 +368,7 @@ TEST_F(HlsNotifyMuxerListenerTest, NoSegmentTemplateOnMediaEnd) { listener_.OnCueEvent(kCueStartTime, "dummy cue data"); listener_.OnNewSegment("filename.mp4", kSegmentStartTime, kSegmentDuration, - kSegmentSize); + kSegmentSize, kAnySegmentNumber); EXPECT_CALL(mock_notifier_, NotifyCueEvent(_, kCueStartTime)); EXPECT_CALL( @@ -397,7 +398,7 @@ TEST_F(HlsNotifyMuxerListenerTest, NoSegmentTemplateOnMediaEndTwice) { listener_.OnMediaStart(muxer_options1, *video_stream_info, 90000, MuxerListener::kContainerMpeg2ts); listener_.OnNewSegment("filename1.mp4", kSegmentStartTime, kSegmentDuration, - kSegmentSize); + kSegmentSize, kAnySegmentNumber); listener_.OnCueEvent(kCueStartTime, "dummy cue data"); EXPECT_CALL(mock_notifier_, NotifyNewStream(_, _, _, _, _)) @@ -414,7 +415,7 @@ TEST_F(HlsNotifyMuxerListenerTest, NoSegmentTemplateOnMediaEndTwice) { listener_.OnMediaStart(muxer_options2, *video_stream_info, 90000, MuxerListener::kContainerMpeg2ts); listener_.OnNewSegment("filename2.mp4", kSegmentStartTime + kSegmentDuration, - kSegmentDuration, kSegmentSize); + kSegmentDuration, kSegmentSize, kAnySegmentNumber); EXPECT_CALL(mock_notifier_, NotifyNewSegment(_, StrEq("filename2.mp4"), kSegmentStartTime + kSegmentDuration, _, _, _)); @@ -440,7 +441,7 @@ TEST_F(HlsNotifyMuxerListenerTest, MuxerListener::kContainerMpeg2ts); listener_.OnNewSegment("filename.mp4", kSegmentStartTime, kSegmentDuration, - kSegmentSize); + kSegmentSize, kAnySegmentNumber); EXPECT_CALL( mock_notifier_, NotifyNewSegment(_, StrEq("filename.mp4"), kSegmentStartTime, @@ -504,7 +505,7 @@ TEST_P(HlsNotifyMuxerListenerKeyFrameTest, NoSegmentTemplate) { listener_.OnKeyFrame(kKeyFrameTimestamp, kKeyFrameStartByteOffset, kKeyFrameSize); listener_.OnNewSegment("filename.mp4", kSegmentStartTime, kSegmentDuration, - kSegmentSize); + kSegmentSize, kAnySegmentNumber); EXPECT_CALL(mock_notifier_, NotifyKeyFrame(_, kKeyFrameTimestamp, diff --git a/packager/media/event/mock_muxer_listener.h b/packager/media/event/mock_muxer_listener.h index 82713ae3f5..970bc3b118 100644 --- a/packager/media/event/mock_muxer_listener.h +++ b/packager/media/event/mock_muxer_listener.h @@ -56,11 +56,12 @@ class MockMuxerListener : public MuxerListener { void OnMediaEnd(const MediaRanges& range, float duration_seconds) override; - MOCK_METHOD4(OnNewSegment, + MOCK_METHOD5(OnNewSegment, void(const std::string& segment_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size)); + uint64_t segment_file_size, + int64_t segment_number)); MOCK_METHOD3(OnKeyFrame, void(int64_t timestamp, diff --git a/packager/media/event/mpd_notify_muxer_listener.cc b/packager/media/event/mpd_notify_muxer_listener.cc index 530c843421..79b58d8cbf 100644 --- a/packager/media/event/mpd_notify_muxer_listener.cc +++ b/packager/media/event/mpd_notify_muxer_listener.cc @@ -182,7 +182,8 @@ void MpdNotifyMuxerListener::OnMediaEnd(const MediaRanges& media_ranges, mpd_notifier_->NotifyNewSegment( notification_id_.value(), event_info.segment_info.start_time, event_info.segment_info.duration, - event_info.segment_info.segment_file_size); + event_info.segment_info.segment_file_size, + event_info.segment_info.segment_number); break; case EventInfoType::kKeyFrame: // NO-OP for DASH. @@ -200,17 +201,20 @@ void MpdNotifyMuxerListener::OnMediaEnd(const MediaRanges& media_ranges, void MpdNotifyMuxerListener::OnNewSegment(const std::string& file_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size) { + uint64_t segment_file_size, + int64_t segment_number) { UNUSED(file_name); if (mpd_notifier_->dash_profile() == DashProfile::kLive) { mpd_notifier_->NotifyNewSegment(notification_id_.value(), start_time, - duration, segment_file_size); + duration, segment_file_size, + segment_number); if (mpd_notifier_->mpd_type() == MpdType::kDynamic) mpd_notifier_->Flush(); } else { EventInfo event_info; event_info.type = EventInfoType::kSegment; - event_info.segment_info = {start_time, duration, segment_file_size}; + event_info.segment_info = {start_time, duration, segment_file_size, + segment_number}; event_info_.push_back(event_info); } } diff --git a/packager/media/event/mpd_notify_muxer_listener.h b/packager/media/event/mpd_notify_muxer_listener.h index 94375fc41b..98697a01e7 100644 --- a/packager/media/event/mpd_notify_muxer_listener.h +++ b/packager/media/event/mpd_notify_muxer_listener.h @@ -52,7 +52,8 @@ class MpdNotifyMuxerListener : public MuxerListener { void OnNewSegment(const std::string& file_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size) override; + uint64_t segment_file_size, + int64_t segment_number) override; void OnCompletedSegment(int64_t duration, uint64_t segment_file_size) override; void OnKeyFrame(int64_t timestamp, diff --git a/packager/media/event/mpd_notify_muxer_listener_unittest.cc b/packager/media/event/mpd_notify_muxer_listener_unittest.cc index 0cf6c3e10c..841a581849 100644 --- a/packager/media/event/mpd_notify_muxer_listener_unittest.cc +++ b/packager/media/event/mpd_notify_muxer_listener_unittest.cc @@ -397,27 +397,31 @@ TEST_F(MpdNotifyMuxerListenerTest, VodOnNewSegment) { const uint64_t kSegmentFileSize1 = 29812u; const int64_t kStartTime2 = 1001; const int64_t kDuration2 = 3787; + const int64_t kSegmentNumber1 = 1; const uint64_t kSegmentFileSize2 = 83743u; + const int64_t kSegmentNumber2 = 2; EXPECT_CALL(*notifier_, NotifyNewContainer(_, _)).Times(0); - EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _)).Times(0); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _, _)).Times(0); listener_->OnMediaStart(muxer_options, *video_stream_info, kDefaultReferenceTimeScale, MuxerListener::kContainerMp4); - listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1); + listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1, + kSegmentNumber1); listener_->OnCueEvent(kStartTime2, "dummy cue data"); - listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2); + listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2, + kSegmentNumber2); ::testing::Mock::VerifyAndClearExpectations(notifier_.get()); InSequence s; EXPECT_CALL(*notifier_, NotifyNewContainer( ExpectMediaInfoEq(kExpectedDefaultMediaInfo), _)) .WillOnce(Return(true)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime1, kDuration1, kSegmentFileSize1)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration1, + kSegmentFileSize1, kSegmentNumber1)); EXPECT_CALL(*notifier_, NotifyCueEvent(_, kStartTime2)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime2, kDuration2, kSegmentFileSize2)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration2, + kSegmentFileSize2, kSegmentNumber2)); EXPECT_CALL(*notifier_, Flush()); FireOnMediaEndWithParams(GetDefaultOnMediaEndParams()); } @@ -433,29 +437,33 @@ TEST_F(MpdNotifyMuxerListenerTest, VodOnNewSegmentSegmentList) { const int64_t kStartTime1 = 0; const int64_t kDuration1 = 1000; const uint64_t kSegmentFileSize1 = 29812u; + const int64_t kSegmentNumber1 = 1; const int64_t kStartTime2 = 1001; const int64_t kDuration2 = 3787; const uint64_t kSegmentFileSize2 = 83743u; + const int64_t kSegmentNumber2 = 2; EXPECT_CALL(*notifier_, NotifyNewContainer(_, _)).Times(0); - EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _)).Times(0); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _, _)).Times(0); listener_->OnMediaStart(muxer_options, *video_stream_info, kDefaultReferenceTimeScale, MuxerListener::kContainerMp4); - listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1); + listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1, + kSegmentNumber1); listener_->OnCueEvent(kStartTime2, "dummy cue data"); - listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2); + listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2, + kSegmentNumber2); ::testing::Mock::VerifyAndClearExpectations(notifier_.get()); InSequence s; EXPECT_CALL(*notifier_, NotifyNewContainer( ExpectMediaInfoEq(kExpectedDefaultMediaInfoSubsegmentRange), _)) .WillOnce(Return(true)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime1, kDuration1, kSegmentFileSize1)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration1, + kSegmentFileSize1, kSegmentNumber1)); EXPECT_CALL(*notifier_, NotifyCueEvent(_, kStartTime2)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime2, kDuration2, kSegmentFileSize2)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration2, + kSegmentFileSize2, kSegmentNumber2)); EXPECT_CALL(*notifier_, Flush()); FireOnMediaEndWithParams(GetDefaultOnMediaEndParams()); } @@ -485,15 +493,18 @@ TEST_F(MpdNotifyMuxerListenerTest, VodMultipleFiles) { const uint64_t kSegmentFileSize1 = 29812u; const int64_t kStartTime2 = 1001; const int64_t kDuration2 = 3787; + const int64_t kSegmentNumber1 = 1; const uint64_t kSegmentFileSize2 = 83743u; + const int64_t kSegmentNumber2 = 2; // Expectation for first file before OnMediaEnd. EXPECT_CALL(*notifier_, NotifyNewContainer(_, _)).Times(0); - EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _)).Times(0); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _, _)).Times(0); listener_->OnMediaStart(muxer_options1, *video_stream_info, kDefaultReferenceTimeScale, MuxerListener::kContainerMp4); - listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1); + listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1, + kSegmentNumber1); listener_->OnCueEvent(kStartTime2, "dummy cue data"); ::testing::Mock::VerifyAndClearExpectations(notifier_.get()); @@ -502,8 +513,8 @@ TEST_F(MpdNotifyMuxerListenerTest, VodMultipleFiles) { EXPECT_CALL(*notifier_, NotifyNewContainer(EqualsProto(expected_media_info1), _)) .WillOnce(Return(true)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime1, kDuration1, kSegmentFileSize1)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration1, + kSegmentFileSize1, kSegmentNumber1)); EXPECT_CALL(*notifier_, NotifyCueEvent(_, kStartTime2)); EXPECT_CALL(*notifier_, Flush()); FireOnMediaEndWithParams(GetDefaultOnMediaEndParams()); @@ -512,13 +523,14 @@ TEST_F(MpdNotifyMuxerListenerTest, VodMultipleFiles) { listener_->OnMediaStart(muxer_options2, *video_stream_info, kDefaultReferenceTimeScale, MuxerListener::kContainerMp4); - listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2); + listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2, + kSegmentNumber2); // Expectation for second file OnMediaEnd. EXPECT_CALL(*notifier_, NotifyMediaInfoUpdate(_, EqualsProto(expected_media_info2))); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime2, kDuration2, kSegmentFileSize2)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration2, + kSegmentFileSize2, kSegmentNumber2)); EXPECT_CALL(*notifier_, Flush()); FireOnMediaEndWithParams(GetDefaultOnMediaEndParams()); } @@ -544,17 +556,20 @@ TEST_F(MpdNotifyMuxerListenerTest, VodMultipleFilesSegmentList) { const int64_t kStartTime1 = 0; const int64_t kDuration1 = 1000; const uint64_t kSegmentFileSize1 = 29812u; + const int64_t kSegmentNumber1 = 1; const int64_t kStartTime2 = 1001; const int64_t kDuration2 = 3787; const uint64_t kSegmentFileSize2 = 83743u; + const int64_t kSegmentNumber2 = 2; // Expectation for first file before OnMediaEnd. EXPECT_CALL(*notifier_, NotifyNewContainer(_, _)).Times(0); - EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _)).Times(0); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _, _)).Times(0); listener_->OnMediaStart(muxer_options1, *video_stream_info, kDefaultReferenceTimeScale, MuxerListener::kContainerMp4); - listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1); + listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1, + kSegmentNumber1); listener_->OnCueEvent(kStartTime2, "dummy cue data"); ::testing::Mock::VerifyAndClearExpectations(notifier_.get()); @@ -563,8 +578,8 @@ TEST_F(MpdNotifyMuxerListenerTest, VodMultipleFilesSegmentList) { EXPECT_CALL(*notifier_, NotifyNewContainer(EqualsProto(expected_media_info1), _)) .WillOnce(Return(true)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime1, kDuration1, kSegmentFileSize1)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration1, + kSegmentFileSize1, kSegmentNumber1)); EXPECT_CALL(*notifier_, NotifyCueEvent(_, kStartTime2)); EXPECT_CALL(*notifier_, Flush()); FireOnMediaEndWithParams(GetDefaultOnMediaEndParams()); @@ -573,13 +588,14 @@ TEST_F(MpdNotifyMuxerListenerTest, VodMultipleFilesSegmentList) { listener_->OnMediaStart(muxer_options2, *video_stream_info, kDefaultReferenceTimeScale, MuxerListener::kContainerMp4); - listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2); + listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2, + kSegmentNumber2); // Expectation for second file OnMediaEnd. EXPECT_CALL(*notifier_, NotifyMediaInfoUpdate(_, EqualsProto(expected_media_info2))); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime2, kDuration2, kSegmentFileSize2)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration2, + kSegmentFileSize2, kSegmentNumber2)); EXPECT_CALL(*notifier_, Flush()); FireOnMediaEndWithParams(GetDefaultOnMediaEndParams()); } @@ -613,6 +629,8 @@ TEST_F(MpdNotifyMuxerListenerTest, LowLatencyDash) { const uint64_t kDuration = 1000u; const uint64_t kSegmentSize1 = 29812u; const uint64_t kSegmentSize2 = 30128u; + const int64_t kSegmentNumber1 = 1; + const int64_t kSegmentNumber2 = 2; EXPECT_CALL(*notifier_, NotifyNewContainer(ExpectMediaInfoEq(kExpectedMediaInfo), _)) @@ -622,11 +640,11 @@ TEST_F(MpdNotifyMuxerListenerTest, LowLatencyDash) { EXPECT_CALL(*notifier_, NotifyAvailabilityTimeOffset(_)) .WillOnce(Return(true)); EXPECT_CALL(*notifier_, NotifySegmentDuration(_)).WillOnce(Return(true)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime1, kDuration, kSegmentSize1)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration, + kSegmentSize1, kSegmentNumber1)); EXPECT_CALL(*notifier_, NotifyCueEvent(_, kStartTime2)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime2, kDuration, kSegmentSize2)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration, + kSegmentSize2, kSegmentNumber2)); EXPECT_CALL(*notifier_, Flush()).Times(2); listener_->OnMediaStart(muxer_options, *video_stream_info, @@ -635,9 +653,11 @@ TEST_F(MpdNotifyMuxerListenerTest, LowLatencyDash) { listener_->OnSampleDurationReady(kDuration); listener_->OnAvailabilityOffsetReady(); listener_->OnSegmentDurationReady(); - listener_->OnNewSegment("", kStartTime1, kDuration, kSegmentSize1); + listener_->OnNewSegment("", kStartTime1, kDuration, kSegmentSize1, + kSegmentNumber1); listener_->OnCueEvent(kStartTime2, "dummy cue data"); - listener_->OnNewSegment("", kStartTime2, kDuration, kSegmentSize2); + listener_->OnNewSegment("", kStartTime2, kDuration, kSegmentSize2, + kSegmentNumber2); ::testing::Mock::VerifyAndClearExpectations(notifier_.get()); EXPECT_CALL(*notifier_, Flush()).Times(0); @@ -686,7 +706,10 @@ TEST_P(MpdNotifyMuxerListenerTest, LiveNoKeyRotation) { const uint64_t kSegmentFileSize1 = 29812u; const int64_t kStartTime2 = 1001; const int64_t kDuration2 = 3787; + const int64_t kSegmentNumber1 = 1; const uint64_t kSegmentFileSize2 = 83743u; + const int64_t kSegmentNumber2 = 2; + const std::vector default_key_id( kDefaultKeyId, kDefaultKeyId + std::size(kDefaultKeyId) - 1); @@ -695,14 +718,14 @@ TEST_P(MpdNotifyMuxerListenerTest, LiveNoKeyRotation) { EXPECT_CALL(*notifier_, NotifyNewContainer(ExpectMediaInfoEq(kExpectedMediaInfo), _)) .WillOnce(Return(true)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime1, kDuration1, kSegmentFileSize1)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration1, + kSegmentFileSize1, kSegmentNumber1)); // Flush should only be called once in OnMediaEnd. if (GetParam() == MpdType::kDynamic) EXPECT_CALL(*notifier_, Flush()); EXPECT_CALL(*notifier_, NotifyCueEvent(_, kStartTime2)); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime2, kDuration2, kSegmentFileSize2)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration2, + kSegmentFileSize2, kSegmentNumber2)); if (GetParam() == MpdType::kDynamic) EXPECT_CALL(*notifier_, Flush()); @@ -713,9 +736,11 @@ TEST_P(MpdNotifyMuxerListenerTest, LiveNoKeyRotation) { listener_->OnMediaStart(muxer_options, *video_stream_info, kDefaultReferenceTimeScale, MuxerListener::kContainerMp4); - listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1); + listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1, + kSegmentNumber1); listener_->OnCueEvent(kStartTime2, "dummy cue data"); - listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2); + listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2, + kSegmentNumber2); ::testing::Mock::VerifyAndClearExpectations(notifier_.get()); EXPECT_CALL(*notifier_, Flush()) @@ -760,7 +785,10 @@ TEST_P(MpdNotifyMuxerListenerTest, LiveWithKeyRotation) { const uint64_t kSegmentFileSize1 = 29812u; const int64_t kStartTime2 = 1001; const int64_t kDuration2 = 3787; + const int64_t kSegmentNumber1 = 1; const uint64_t kSegmentFileSize2 = 83743u; + const int64_t kSegmentNumber2 = 2; + const std::vector default_key_id( kDefaultKeyId, kDefaultKeyId + std::size(kDefaultKeyId) - 1); @@ -769,13 +797,13 @@ TEST_P(MpdNotifyMuxerListenerTest, LiveWithKeyRotation) { NotifyNewContainer(ExpectMediaInfoEq(kExpectedMediaInfo), _)) .WillOnce(Return(true)); EXPECT_CALL(*notifier_, NotifyEncryptionUpdate(_, _, _, _)).Times(1); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime1, kDuration1, kSegmentFileSize1)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration1, + kSegmentFileSize1, kSegmentNumber1)); // Flush should only be called once in OnMediaEnd. if (GetParam() == MpdType::kDynamic) EXPECT_CALL(*notifier_, Flush()); - EXPECT_CALL(*notifier_, - NotifyNewSegment(_, kStartTime2, kDuration2, kSegmentFileSize2)); + EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration2, + kSegmentFileSize2, kSegmentNumber2)); if (GetParam() == MpdType::kDynamic) EXPECT_CALL(*notifier_, Flush()); @@ -789,8 +817,10 @@ TEST_P(MpdNotifyMuxerListenerTest, LiveWithKeyRotation) { listener_->OnEncryptionInfoReady(kNonInitialEncryptionInfo, FOURCC_cbc1, std::vector(), iv, GetDefaultKeySystemInfo()); - listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1); - listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2); + listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1, + kSegmentNumber1); + listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2, + kSegmentNumber2); ::testing::Mock::VerifyAndClearExpectations(notifier_.get()); EXPECT_CALL(*notifier_, Flush()) diff --git a/packager/media/event/multi_codec_muxer_listener_unittest.cc b/packager/media/event/multi_codec_muxer_listener_unittest.cc index 6a75983d30..64d79d848f 100644 --- a/packager/media/event/multi_codec_muxer_listener_unittest.cc +++ b/packager/media/event/multi_codec_muxer_listener_unittest.cc @@ -27,6 +27,8 @@ const int64_t kSegmentStartTime = 19283; const int64_t kSegmentDuration = 98028; const uint64_t kSegmentSize = 756739; const int32_t kTimescale = 90000; +const int64_t kSegmentNumber = 10; + MuxerListener::ContainerType kContainer = MuxerListener::kContainerMpeg2ts; } // namespace @@ -79,10 +81,11 @@ TEST_F(MultiCodecMuxerListenerTest, OnNewSegmentAfterOnMediaStartSingleCodec) { EXPECT_CALL(*listener_for_first_codec_, OnNewSegment(StrEq("new_segment_name10.ts"), kSegmentStartTime, - kSegmentDuration, kSegmentSize)); + kSegmentDuration, kSegmentSize, kSegmentNumber)); multi_codec_listener_.OnNewSegment("new_segment_name10.ts", kSegmentStartTime, - kSegmentDuration, kSegmentSize); + kSegmentDuration, kSegmentSize, + kSegmentNumber); } TEST_F(MultiCodecMuxerListenerTest, OnMediaStartTwoCodecs) { @@ -114,13 +117,14 @@ TEST_F(MultiCodecMuxerListenerTest, OnNewSegmentAfterOnMediaStartTwoCodecs) { EXPECT_CALL(*listener_for_first_codec_, OnNewSegment(StrEq("new_segment_name10.ts"), kSegmentStartTime, - kSegmentDuration, kSegmentSize)); + kSegmentDuration, kSegmentSize, kSegmentNumber)); EXPECT_CALL(*listener_for_second_codec_, OnNewSegment(StrEq("new_segment_name10.ts"), kSegmentStartTime, - kSegmentDuration, kSegmentSize)); + kSegmentDuration, kSegmentSize, kSegmentNumber)); multi_codec_listener_.OnNewSegment("new_segment_name10.ts", kSegmentStartTime, - kSegmentDuration, kSegmentSize); + kSegmentDuration, kSegmentSize, + kSegmentNumber); } } // namespace media diff --git a/packager/media/event/muxer_listener.h b/packager/media/event/muxer_listener.h index b0a86e0fba..2eb704154c 100644 --- a/packager/media/event/muxer_listener.h +++ b/packager/media/event/muxer_listener.h @@ -133,10 +133,12 @@ class MuxerListener { /// @param duration is the duration of the segment, relative to the timescale /// specified by MediaInfo passed to OnMediaStart(). /// @param segment_file_size is the segment size in bytes. + /// @param segment_number is the segment number. virtual void OnNewSegment(const std::string& segment_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size) = 0; + uint64_t segment_file_size, + int64_t segment_number) = 0; /// Called when a segment has been muxed and the entire file has been written. /// For Low Latency only. Note that it should be called after OnNewSegment. diff --git a/packager/media/event/vod_media_info_dump_muxer_listener.cc b/packager/media/event/vod_media_info_dump_muxer_listener.cc index e0108f6831..148503c581 100644 --- a/packager/media/event/vod_media_info_dump_muxer_listener.cc +++ b/packager/media/event/vod_media_info_dump_muxer_listener.cc @@ -95,7 +95,8 @@ void VodMediaInfoDumpMuxerListener::OnMediaEnd(const MediaRanges& media_ranges, void VodMediaInfoDumpMuxerListener::OnNewSegment(const std::string& file_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size) { + uint64_t segment_file_size, + int64_t segment_number) { UNUSED(file_name); UNUSED(start_time); const double segment_duration_seconds = diff --git a/packager/media/event/vod_media_info_dump_muxer_listener.h b/packager/media/event/vod_media_info_dump_muxer_listener.h index 4eacb4c671..42dd57da22 100644 --- a/packager/media/event/vod_media_info_dump_muxer_listener.h +++ b/packager/media/event/vod_media_info_dump_muxer_listener.h @@ -49,7 +49,8 @@ class VodMediaInfoDumpMuxerListener : public MuxerListener { void OnNewSegment(const std::string& file_name, int64_t start_time, int64_t duration, - uint64_t segment_file_size) override; + uint64_t segment_file_size, + int64_t segment_number) override; void OnKeyFrame(int64_t timestamp, uint64_t start_byte_offset, uint64_t size) override; diff --git a/packager/media/event/vod_media_info_dump_muxer_listener_unittest.cc b/packager/media/event/vod_media_info_dump_muxer_listener_unittest.cc index f3926cd3a1..aa81cf1990 100644 --- a/packager/media/event/vod_media_info_dump_muxer_listener_unittest.cc +++ b/packager/media/event/vod_media_info_dump_muxer_listener_unittest.cc @@ -102,8 +102,10 @@ class VodMediaInfoDumpMuxerListenerTest : public ::testing::Test { } void FireOnNewSegmentWithParams(const OnNewSegmentParameters& params) { + const int64_t kSegmentNumber = 1; listener_->OnNewSegment(params.file_name, params.start_time, - params.duration, params.segment_file_size); + params.duration, params.segment_file_size, + kSegmentNumber); } void FireOnMediaEndWithParams(const OnMediaEndParameters& params) { diff --git a/packager/media/formats/mp2t/ts_muxer.cc b/packager/media/formats/mp2t/ts_muxer.cc index c2a65f2653..636a1200f7 100644 --- a/packager/media/formats/mp2t/ts_muxer.cc +++ b/packager/media/formats/mp2t/ts_muxer.cc @@ -82,7 +82,7 @@ Status TsMuxer::FinalizeSegment(size_t stream_id, options().segment_template.empty() ? options().output_file_name : GetSegmentName(options().segment_template, segment_start_timestamp, - segment_number_++, options().bandwidth); + segment_info.segment_number, options().bandwidth); const int64_t file_size = segmenter_->segment_buffer()->Size(); @@ -95,7 +95,8 @@ Status TsMuxer::FinalizeSegment(size_t stream_id, segment_path, segment_info.start_timestamp * segmenter_->timescale() + segmenter_->transport_stream_timestamp_offset(), - segment_info.duration * segmenter_->timescale(), file_size); + segment_info.duration * segmenter_->timescale(), file_size, + segment_info.segment_number); } segmenter_->set_segment_started(false); diff --git a/packager/media/formats/mp2t/ts_muxer.h b/packager/media/formats/mp2t/ts_muxer.h index d184c52587..3a04efdbce 100644 --- a/packager/media/formats/mp2t/ts_muxer.h +++ b/packager/media/formats/mp2t/ts_muxer.h @@ -41,9 +41,6 @@ class TsMuxer : public Muxer { int64_t sample_durations_[2] = {0, 0}; size_t num_samples_ = 0; - // Used in multi-segment mode for segment template. - uint64_t segment_number_ = 0; - // Used in single segment mode. std::unique_ptr output_file_; diff --git a/packager/media/formats/mp2t/ts_segmenter.h b/packager/media/formats/mp2t/ts_segmenter.h index e551feea87..8a4eb7bcba 100644 --- a/packager/media/formats/mp2t/ts_segmenter.h +++ b/packager/media/formats/mp2t/ts_segmenter.h @@ -54,6 +54,7 @@ class TsSegmenter { /// stream's time scale. /// @param duration is the segment's duration in the input stream's time /// scale. + /// @param segment_number is the segment number. // TODO(kqyang): Remove the usage of segment start timestamp and duration in // xx_segmenter, which could cause confusions on which is the source of truth // as the segment start timestamp and duration could be tracked locally. diff --git a/packager/media/formats/mp2t/ts_segmenter_unittest.cc b/packager/media/formats/mp2t/ts_segmenter_unittest.cc index 8e3a45ba4a..7751e1a561 100644 --- a/packager/media/formats/mp2t/ts_segmenter_unittest.cc +++ b/packager/media/formats/mp2t/ts_segmenter_unittest.cc @@ -84,6 +84,7 @@ class MockTsWriter : public TsWriter { MOCK_METHOD1(NewSegment, bool(BufferWriter* buffer_writer)); MOCK_METHOD0(SignalEncrypted, void()); + MOCK_METHOD0(FinalizeSegment, bool()); // Similar to the hack above but takes a std::unique_ptr. MOCK_METHOD2(AddPesPacketMock, bool(PesPacket* pes_packet, @@ -232,7 +233,7 @@ TEST_F(TsSegmenterTest, PassedSegmentDuration) { EXPECT_CALL(*mock_pes_packet_generator_, NumberOfReadyPesPackets()) .InSequence(ready_pes_sequence) .WillOnce(Return(1u)); - + EXPECT_CALL(*mock_pes_packet_generator_, NumberOfReadyPesPackets()) .InSequence(ready_pes_sequence) .WillOnce(Return(0u)); diff --git a/packager/media/formats/mp2t/ts_writer.cc b/packager/media/formats/mp2t/ts_writer.cc index 78457c64fb..1aeb3b9bbb 100644 --- a/packager/media/formats/mp2t/ts_writer.cc +++ b/packager/media/formats/mp2t/ts_writer.cc @@ -188,8 +188,7 @@ void TsWriter::SignalEncrypted() { } bool TsWriter::AddPesPacket(std::unique_ptr pes_packet, - BufferWriter* buffer) { - + BufferWriter* buffer) { if (!WritePesToBuffer(*pes_packet, &elementary_stream_continuity_counter_, buffer)) { LOG(ERROR) << "Failed to write pes to buffer."; diff --git a/packager/media/formats/mp4/low_latency_segment_segmenter.cc b/packager/media/formats/mp4/low_latency_segment_segmenter.cc index cbb1449acc..22476461dc 100644 --- a/packager/media/formats/mp4/low_latency_segment_segmenter.cc +++ b/packager/media/formats/mp4/low_latency_segment_segmenter.cc @@ -71,13 +71,13 @@ Status LowLatencySegmentSegmenter::DoFinalize() { return Status::OK; } -Status LowLatencySegmentSegmenter::DoFinalizeSegment() { +Status LowLatencySegmentSegmenter::DoFinalizeSegment(int64_t segment_number) { return FinalizeSegment(); } -Status LowLatencySegmentSegmenter::DoFinalizeChunk() { +Status LowLatencySegmentSegmenter::DoFinalizeChunk(int64_t segment_number) { if (is_initial_chunk_in_seg_) { - return WriteInitialChunk(); + return WriteInitialChunk(segment_number); } return WriteChunk(); } @@ -98,7 +98,7 @@ Status LowLatencySegmentSegmenter::WriteInitSegment() { return buffer->WriteToFile(file.get()); } -Status LowLatencySegmentSegmenter::WriteInitialChunk() { +Status LowLatencySegmentSegmenter::WriteInitialChunk(int64_t segment_number) { DCHECK(sidx()); DCHECK(fragment_buffer()); DCHECK(styp_); @@ -161,9 +161,9 @@ Status LowLatencySegmentSegmenter::WriteInitialChunk() { } // Add the current segment in the manifest. // Following chunks will be appended to the open segment file. - muxer_listener()->OnNewSegment(file_name_, - sidx()->earliest_presentation_time, - segment_duration, segment_size_); + muxer_listener()->OnNewSegment( + file_name_, sidx()->earliest_presentation_time, segment_duration, + segment_size_, segment_number); is_initial_chunk_in_seg_ = false; } diff --git a/packager/media/formats/mp4/low_latency_segment_segmenter.h b/packager/media/formats/mp4/low_latency_segment_segmenter.h index 0db73df8b0..5f2e577dda 100644 --- a/packager/media/formats/mp4/low_latency_segment_segmenter.h +++ b/packager/media/formats/mp4/low_latency_segment_segmenter.h @@ -44,13 +44,13 @@ class LowLatencySegmentSegmenter : public Segmenter { // Segmenter implementation overrides. Status DoInitialize() override; Status DoFinalize() override; - Status DoFinalizeSegment() override; - Status DoFinalizeChunk() override; + Status DoFinalizeSegment(int64_t segment_number) override; + Status DoFinalizeChunk(int64_t segment_number) override; // Write segment to file. Status WriteInitSegment(); Status WriteChunk(); - Status WriteInitialChunk(); + Status WriteInitialChunk(int64_t segment_number); Status FinalizeSegment(); uint64_t GetSegmentDuration(); diff --git a/packager/media/formats/mp4/mp4_muxer.cc b/packager/media/formats/mp4/mp4_muxer.cc index a599283839..20907423b9 100644 --- a/packager/media/formats/mp4/mp4_muxer.cc +++ b/packager/media/formats/mp4/mp4_muxer.cc @@ -209,7 +209,8 @@ Status MP4Muxer::FinalizeSegment(size_t stream_id, DCHECK(segmenter_); VLOG(3) << "Finalizing " << (segment_info.is_subsegment ? "sub" : "") << "segment " << segment_info.start_timestamp << " duration " - << segment_info.duration; + << segment_info.duration << " segment number " + << segment_info.segment_number; return segmenter_->FinalizeSegment(stream_id, segment_info); } diff --git a/packager/media/formats/mp4/multi_segment_segmenter.cc b/packager/media/formats/mp4/multi_segment_segmenter.cc index 5381a308e7..bab13ed39e 100644 --- a/packager/media/formats/mp4/multi_segment_segmenter.cc +++ b/packager/media/formats/mp4/multi_segment_segmenter.cc @@ -31,8 +31,7 @@ MultiSegmentSegmenter::MultiSegmentSegmenter(const MuxerOptions& options, std::unique_ptr ftyp, std::unique_ptr moov) : Segmenter(options, std::move(ftyp), std::move(moov)), - styp_(new SegmentType), - num_segments_(0) { + styp_(new SegmentType) { // Use the same brands for styp as ftyp. styp_->major_brand = Segmenter::ftyp()->major_brand; styp_->compatible_brands = Segmenter::ftyp()->compatible_brands; @@ -70,8 +69,8 @@ Status MultiSegmentSegmenter::DoFinalize() { return Status::OK; } -Status MultiSegmentSegmenter::DoFinalizeSegment() { - return WriteSegment(); +Status MultiSegmentSegmenter::DoFinalizeSegment(int64_t segment_number) { + return WriteSegment(segment_number); } Status MultiSegmentSegmenter::WriteInitSegment() { @@ -90,7 +89,7 @@ Status MultiSegmentSegmenter::WriteInitSegment() { return buffer->WriteToFile(file.get()); } -Status MultiSegmentSegmenter::WriteSegment() { +Status MultiSegmentSegmenter::WriteSegment(int64_t segment_number) { DCHECK(sidx()); DCHECK(fragment_buffer()); DCHECK(styp_); @@ -115,7 +114,7 @@ Status MultiSegmentSegmenter::WriteSegment() { } else { file_name = GetSegmentName(options().segment_template, sidx()->earliest_presentation_time, - num_segments_++, options().bandwidth); + segment_number, options().bandwidth); file.reset(File::Open(file_name.c_str(), "w")); if (!file) { return Status(error::FILE_FAILURE, @@ -160,9 +159,9 @@ Status MultiSegmentSegmenter::WriteSegment() { UpdateProgress(segment_duration); if (muxer_listener()) { muxer_listener()->OnSampleDurationReady(sample_duration()); - muxer_listener()->OnNewSegment(file_name, - sidx()->earliest_presentation_time, - segment_duration, segment_size); + muxer_listener()->OnNewSegment( + file_name, sidx()->earliest_presentation_time, segment_duration, + segment_size, segment_number); } return Status::OK; diff --git a/packager/media/formats/mp4/multi_segment_segmenter.h b/packager/media/formats/mp4/multi_segment_segmenter.h index ab19465d7d..3fd206dbbb 100644 --- a/packager/media/formats/mp4/multi_segment_segmenter.h +++ b/packager/media/formats/mp4/multi_segment_segmenter.h @@ -39,14 +39,13 @@ class MultiSegmentSegmenter : public Segmenter { // Segmenter implementation overrides. Status DoInitialize() override; Status DoFinalize() override; - Status DoFinalizeSegment() override; + Status DoFinalizeSegment(int64_t segment_number) override; // Write segment to file. Status WriteInitSegment(); - Status WriteSegment(); + Status WriteSegment(int64_t segment_number); std::unique_ptr styp_; - uint32_t num_segments_; DISALLOW_COPY_AND_ASSIGN(MultiSegmentSegmenter); }; diff --git a/packager/media/formats/mp4/segmenter.cc b/packager/media/formats/mp4/segmenter.cc index 9313a0eb5e..a9b180a258 100644 --- a/packager/media/formats/mp4/segmenter.cc +++ b/packager/media/formats/mp4/segmenter.cc @@ -234,14 +234,15 @@ Status Segmenter::FinalizeSegment(size_t stream_id, if (segment_info.is_chunk) { // Finalize the completed chunk for the LL-DASH case. - status = DoFinalizeChunk(); + status = DoFinalizeChunk(segment_info.segment_number); if (!status.ok()) return status; } if (!segment_info.is_subsegment || segment_info.is_final_chunk_in_seg) { // Finalize the segment. - status = DoFinalizeSegment(); + status = DoFinalizeSegment(segment_info.segment_number); + // Reset segment information to initial state. sidx_->references.clear(); key_frame_infos_.clear(); diff --git a/packager/media/formats/mp4/segmenter.h b/packager/media/formats/mp4/segmenter.h index df48812122..51e659b35c 100644 --- a/packager/media/formats/mp4/segmenter.h +++ b/packager/media/formats/mp4/segmenter.h @@ -127,9 +127,8 @@ class Segmenter { private: virtual Status DoInitialize() = 0; virtual Status DoFinalize() = 0; - virtual Status DoFinalizeSegment() = 0; - - virtual Status DoFinalizeChunk() { return Status::OK; } + virtual Status DoFinalizeSegment(int64_t segment_number) = 0; + virtual Status DoFinalizeChunk(int64_t segment_number) { return Status::OK; } uint32_t GetReferenceStreamId(); diff --git a/packager/media/formats/mp4/single_segment_segmenter.cc b/packager/media/formats/mp4/single_segment_segmenter.cc index 13527ce446..afedf4ac7a 100644 --- a/packager/media/formats/mp4/single_segment_segmenter.cc +++ b/packager/media/formats/mp4/single_segment_segmenter.cc @@ -166,7 +166,7 @@ Status SingleSegmentSegmenter::DoFinalize() { return Status::OK; } -Status SingleSegmentSegmenter::DoFinalizeSegment() { +Status SingleSegmentSegmenter::DoFinalizeSegment(int64_t segment_number) { DCHECK(sidx()); DCHECK(fragment_buffer()); // sidx() contains pre-generated segment references with one reference per @@ -224,9 +224,9 @@ Status SingleSegmentSegmenter::DoFinalizeSegment() { UpdateProgress(vod_ref.subsegment_duration); if (muxer_listener()) { muxer_listener()->OnSampleDurationReady(sample_duration()); - muxer_listener()->OnNewSegment(options().output_file_name, - vod_ref.earliest_presentation_time, - vod_ref.subsegment_duration, segment_size); + muxer_listener()->OnNewSegment( + options().output_file_name, vod_ref.earliest_presentation_time, + vod_ref.subsegment_duration, segment_size, segment_number); } return Status::OK; } diff --git a/packager/media/formats/mp4/single_segment_segmenter.h b/packager/media/formats/mp4/single_segment_segmenter.h index edfe618f8e..02fe763088 100644 --- a/packager/media/formats/mp4/single_segment_segmenter.h +++ b/packager/media/formats/mp4/single_segment_segmenter.h @@ -44,7 +44,7 @@ class SingleSegmentSegmenter : public Segmenter { // Segmenter implementation overrides. Status DoInitialize() override; Status DoFinalize() override; - Status DoFinalizeSegment() override; + Status DoFinalizeSegment(int64_t segment_number) override; std::unique_ptr vod_sidx_; std::string temp_file_name_; diff --git a/packager/media/formats/packed_audio/packed_audio_writer.cc b/packager/media/formats/packed_audio/packed_audio_writer.cc index f73e09faa0..14a3d2febb 100644 --- a/packager/media/formats/packed_audio/packed_audio_writer.cc +++ b/packager/media/formats/packed_audio/packed_audio_writer.cc @@ -81,7 +81,7 @@ Status PackedAudioWriter::FinalizeSegment(size_t stream_id, options().segment_template.empty() ? options().output_file_name : GetSegmentName(options().segment_template, segment_timestamp, - segment_number_++, options().bandwidth); + segment_info.segment_number, options().bandwidth); // Save |segment_size| as it will be cleared after writing. const size_t segment_size = segmenter_->segment_buffer()->Size(); @@ -92,7 +92,8 @@ Status PackedAudioWriter::FinalizeSegment(size_t stream_id, if (muxer_listener()) { muxer_listener()->OnNewSegment( segment_path, segment_timestamp + transport_stream_timestamp_offset_, - segment_info.duration * segmenter_->TimescaleScale(), segment_size); + segment_info.duration * segmenter_->TimescaleScale(), segment_size, + segment_info.segment_number); } return Status::OK; } diff --git a/packager/media/formats/packed_audio/packed_audio_writer_unittest.cc b/packager/media/formats/packed_audio/packed_audio_writer_unittest.cc index 910e8fa3a0..637b498382 100644 --- a/packager/media/formats/packed_audio/packed_audio_writer_unittest.cc +++ b/packager/media/formats/packed_audio/packed_audio_writer_unittest.cc @@ -44,6 +44,8 @@ const char kOutputFile[] = "memory://test.aac"; const char kSegmentTemplate[] = "memory://test_$Number$.aac"; const char kSegment1Name[] = "memory://test_1.aac"; const char kSegment2Name[] = "memory://test_2.aac"; +const int64_t kSegmentNumber1 = 1; +const int64_t kSegmentNumber2 = 2; class MockPackedAudioSegmenter : public PackedAudioSegmenter { public: @@ -122,9 +124,10 @@ TEST_P(PackedAudioWriterTest, SubsegmentIgnored) { const int64_t kDuration = 100; const bool kSubsegment = true; auto subsegment_stream_data = StreamData::FromSegmentInfo( - kStreamIndex, GetSegmentInfo(kTimestamp, kDuration, kSubsegment)); + kStreamIndex, + GetSegmentInfo(kTimestamp, kDuration, kSubsegment, kSegmentNumber1)); - EXPECT_CALL(*mock_muxer_listener_ptr_, OnNewSegment(_, _, _, _)).Times(0); + EXPECT_CALL(*mock_muxer_listener_ptr_, OnNewSegment(_, _, _, _, _)).Times(0); EXPECT_CALL(*mock_segmenter_ptr_, FinalizeSegment()).Times(0); ASSERT_OK(Input(kInput)->Dispatch(std::move(subsegment_stream_data))); } @@ -137,7 +140,8 @@ TEST_P(PackedAudioWriterTest, OneSegment) { const int64_t kDuration = 100; const bool kSubsegment = true; auto segment_stream_data = StreamData::FromSegmentInfo( - kStreamIndex, GetSegmentInfo(kTimestamp, kDuration, !kSubsegment)); + kStreamIndex, + GetSegmentInfo(kTimestamp, kDuration, !kSubsegment, kSegmentNumber1)); const double kMockTimescaleScale = 10; const char kMockSegmentData[] = "hello segment 1"; @@ -147,7 +151,8 @@ TEST_P(PackedAudioWriterTest, OneSegment) { *mock_muxer_listener_ptr_, OnNewSegment(is_single_segment_mode_ ? kOutputFile : kSegment1Name, kTimestamp * kMockTimescaleScale, - kDuration * kMockTimescaleScale, kSegmentDataSize)); + kDuration * kMockTimescaleScale, kSegmentDataSize, + kSegmentNumber1)); EXPECT_CALL(*mock_segmenter_ptr_, TimescaleScale()) .WillRepeatedly(Return(kMockTimescaleScale)); @@ -190,10 +195,11 @@ TEST_P(PackedAudioWriterTest, TwoSegments) { const int64_t kDuration = 100; const bool kSubsegment = true; auto segment1_stream_data = StreamData::FromSegmentInfo( - kStreamIndex, GetSegmentInfo(kTimestamp, kDuration, !kSubsegment)); - auto segment2_stream_data = StreamData::FromSegmentInfo( kStreamIndex, - GetSegmentInfo(kTimestamp + kDuration, kDuration, !kSubsegment)); + GetSegmentInfo(kTimestamp, kDuration, !kSubsegment, kSegmentNumber1)); + auto segment2_stream_data = StreamData::FromSegmentInfo( + kStreamIndex, GetSegmentInfo(kTimestamp + kDuration, kDuration, + !kSubsegment, kSegmentNumber2)); const double kMockTimescaleScale = 10; const char kMockSegment1Data[] = "hello segment 1"; @@ -206,12 +212,13 @@ TEST_P(PackedAudioWriterTest, TwoSegments) { OnNewSegment(is_single_segment_mode_ ? kOutputFile : kSegment1Name, kTimestamp * kMockTimescaleScale, kDuration * kMockTimescaleScale, - sizeof(kMockSegment1Data) - 1)); + sizeof(kMockSegment1Data) - 1, kSegmentNumber1)); EXPECT_CALL( *mock_muxer_listener_ptr_, OnNewSegment(is_single_segment_mode_ ? kOutputFile : kSegment2Name, (kTimestamp + kDuration) * kMockTimescaleScale, - kDuration * kMockTimescaleScale, kSegment2DataSize)); + kDuration * kMockTimescaleScale, kSegment2DataSize, + kSegmentNumber2)); EXPECT_CALL(*mock_segmenter_ptr_, TimescaleScale()) .WillRepeatedly(Return(kMockTimescaleScale)); diff --git a/packager/media/formats/webm/encrypted_segmenter_unittest.cc b/packager/media/formats/webm/encrypted_segmenter_unittest.cc index 51ee4be820..7c270830cb 100644 --- a/packager/media/formats/webm/encrypted_segmenter_unittest.cc +++ b/packager/media/formats/webm/encrypted_segmenter_unittest.cc @@ -18,6 +18,9 @@ const int32_t kTimeScale = 1000000; const int64_t kDuration = 1000000; const bool kSubsegment = true; const uint8_t kPerSampleIvSize = 8u; +const int64_t kSegmentNumber1 = 1; +const int64_t kSegmentNumber2 = 2; + const uint8_t kKeyId[] = { 0x4c, 0x6f, 0x72, 0x65, 0x6d, 0x20, 0x69, 0x70, 0x73, 0x75, 0x6d, 0x20, 0x64, 0x6f, 0x6c, 0x6f, @@ -229,7 +232,8 @@ TEST_F(EncryptedSegmenterTest, BasicSupport) { // segment encrypted. for (int i = 0; i < 5; i++) { if (i == 3) { - ASSERT_OK(segmenter_->FinalizeSegment(0, 3 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(0, 3 * kDuration, !kSubsegment, + kSegmentNumber1)); } std::shared_ptr sample = CreateSample(kKeyFrame, kDuration, kNoSideData); @@ -243,8 +247,8 @@ TEST_F(EncryptedSegmenterTest, BasicSupport) { } ASSERT_OK(segmenter_->AddSample(*sample)); } - ASSERT_OK( - segmenter_->FinalizeSegment(3 * kDuration, 2 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(3 * kDuration, 2 * kDuration, + !kSubsegment, kSegmentNumber2)); ASSERT_OK(segmenter_->Finalize()); ASSERT_FILE_ENDS_WITH(OutputFileName().c_str(), kBasicSupportData); diff --git a/packager/media/formats/webm/multi_segment_segmenter.cc b/packager/media/formats/webm/multi_segment_segmenter.cc index d88a046f7a..7a2f6e7f49 100644 --- a/packager/media/formats/webm/multi_segment_segmenter.cc +++ b/packager/media/formats/webm/multi_segment_segmenter.cc @@ -27,17 +27,18 @@ MultiSegmentSegmenter::~MultiSegmentSegmenter() {} Status MultiSegmentSegmenter::FinalizeSegment(int64_t start_timestamp, int64_t duration_timestamp, - bool is_subsegment) { + bool is_subsegment, + int64_t segment_number) { CHECK(cluster()); RETURN_IF_ERROR(Segmenter::FinalizeSegment( - start_timestamp, duration_timestamp, is_subsegment)); + start_timestamp, duration_timestamp, is_subsegment, segment_number)); if (!cluster()->Finalize()) return Status(error::FILE_FAILURE, "Error finalizing segment."); if (!is_subsegment) { std::string segment_name = GetSegmentName(options().segment_template, start_timestamp, - num_segment_, options().bandwidth); + segment_number, options().bandwidth); // Close the file, which also does flushing, to make sure the file is // written before manifest is updated. @@ -54,7 +55,7 @@ Status MultiSegmentSegmenter::FinalizeSegment(int64_t start_timestamp, if (muxer_listener()) { const uint64_t size = cluster()->Size(); muxer_listener()->OnNewSegment(segment_name, start_timestamp, - duration_timestamp, size); + duration_timestamp, size, segment_number); } VLOG(1) << "WEBM file '" << segment_name << "' finalized."; } diff --git a/packager/media/formats/webm/multi_segment_segmenter.h b/packager/media/formats/webm/multi_segment_segmenter.h index 56a4c0fbfb..39db84c4d8 100644 --- a/packager/media/formats/webm/multi_segment_segmenter.h +++ b/packager/media/formats/webm/multi_segment_segmenter.h @@ -32,7 +32,8 @@ class MultiSegmentSegmenter : public Segmenter { /// @{ Status FinalizeSegment(int64_t start_timestamp, int64_t duration_timestamp, - bool is_subsegment) override; + bool is_subsegment, + int64_t segment_number) override; bool GetInitRangeStartAndEnd(uint64_t* start, uint64_t* end) override; bool GetIndexRangeStartAndEnd(uint64_t* start, uint64_t* end) override; std::vector GetSegmentRanges() override; diff --git a/packager/media/formats/webm/multi_segment_segmenter_unittest.cc b/packager/media/formats/webm/multi_segment_segmenter_unittest.cc index 5eb35ffda2..33a7c12b24 100644 --- a/packager/media/formats/webm/multi_segment_segmenter_unittest.cc +++ b/packager/media/formats/webm/multi_segment_segmenter_unittest.cc @@ -17,6 +17,8 @@ namespace { const int32_t kTimeScale = 1000000; const int64_t kDuration = 1000000; +const int64_t kSegmentNumber1 = 1; +const int64_t kSegmentNumber2 = 2; const bool kSubsegment = true; // clang-format off @@ -130,15 +132,16 @@ TEST_F(MultiSegmentSegmenterTest, BasicSupport) { CreateSample(kKeyFrame, kDuration, kNoSideData); ASSERT_OK(segmenter_->AddSample(*sample)); } - ASSERT_OK(segmenter_->FinalizeSegment(0, 8 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(0, 8 * kDuration, !kSubsegment, + kSegmentNumber1)); ASSERT_OK(segmenter_->Finalize()); // Verify the resulting data. ASSERT_FILE_ENDS_WITH(OutputFileName().c_str(), kBasicSupportDataInit); - ASSERT_FILE_EQ(TemplateFileName(0).c_str(), kBasicSupportDataSegment); + ASSERT_FILE_EQ(TemplateFileName(1).c_str(), kBasicSupportDataSegment); // There is no second segment. - EXPECT_FALSE(File::Open(TemplateFileName(1).c_str(), "r")); + EXPECT_FALSE(File::Open(TemplateFileName(2).c_str(), "r")); } TEST_F(MultiSegmentSegmenterTest, SplitsFilesOnSegment) { @@ -149,27 +152,28 @@ TEST_F(MultiSegmentSegmenterTest, SplitsFilesOnSegment) { // Write the samples to the Segmenter. for (int i = 0; i < 8; i++) { if (i == 5) { - ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, !kSubsegment, + kSegmentNumber1)); } std::shared_ptr sample = CreateSample(kKeyFrame, kDuration, kNoSideData); ASSERT_OK(segmenter_->AddSample(*sample)); } - ASSERT_OK( - segmenter_->FinalizeSegment(5 * kDuration, 8 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(5 * kDuration, 8 * kDuration, + !kSubsegment, kSegmentNumber2)); ASSERT_OK(segmenter_->Finalize()); // Verify the resulting data. ClusterParser parser; - ASSERT_NO_FATAL_FAILURE(parser.PopulateFromCluster(TemplateFileName(0))); + ASSERT_NO_FATAL_FAILURE(parser.PopulateFromCluster(TemplateFileName(1))); ASSERT_EQ(1u, parser.cluster_count()); EXPECT_EQ(5u, parser.GetFrameCountForCluster(0)); - ASSERT_NO_FATAL_FAILURE(parser.PopulateFromCluster(TemplateFileName(1))); + ASSERT_NO_FATAL_FAILURE(parser.PopulateFromCluster(TemplateFileName(2))); ASSERT_EQ(1u, parser.cluster_count()); EXPECT_EQ(3u, parser.GetFrameCountForCluster(0)); - EXPECT_FALSE(File::Open(TemplateFileName(2).c_str(), "r")); + EXPECT_FALSE(File::Open(TemplateFileName(3).c_str(), "r")); } TEST_F(MultiSegmentSegmenterTest, SplitsClustersOnSubsegment) { @@ -180,23 +184,25 @@ TEST_F(MultiSegmentSegmenterTest, SplitsClustersOnSubsegment) { // Write the samples to the Segmenter. for (int i = 0; i < 8; i++) { if (i == 5) { - ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, kSubsegment, + kSegmentNumber1)); } std::shared_ptr sample = CreateSample(kKeyFrame, kDuration, kNoSideData); ASSERT_OK(segmenter_->AddSample(*sample)); } - ASSERT_OK(segmenter_->FinalizeSegment(0, 8 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(0, 8 * kDuration, !kSubsegment, + kSegmentNumber1)); ASSERT_OK(segmenter_->Finalize()); // Verify the resulting data. ClusterParser parser; - ASSERT_NO_FATAL_FAILURE(parser.PopulateFromCluster(TemplateFileName(0))); + ASSERT_NO_FATAL_FAILURE(parser.PopulateFromCluster(TemplateFileName(1))); ASSERT_EQ(2u, parser.cluster_count()); EXPECT_EQ(5u, parser.GetFrameCountForCluster(0)); EXPECT_EQ(3u, parser.GetFrameCountForCluster(1)); - EXPECT_FALSE(File::Open(TemplateFileName(1).c_str(), "r")); + EXPECT_FALSE(File::Open(TemplateFileName(2).c_str(), "r")); } } // namespace media diff --git a/packager/media/formats/webm/segmenter.cc b/packager/media/formats/webm/segmenter.cc index f05834c87d..09a69ae27f 100644 --- a/packager/media/formats/webm/segmenter.cc +++ b/packager/media/formats/webm/segmenter.cc @@ -198,7 +198,8 @@ Status Segmenter::AddSample(const MediaSample& source_sample) { Status Segmenter::FinalizeSegment(int64_t /*start_timestamp*/, int64_t /*duration_timestamp*/, - bool is_subsegment) { + bool is_subsegment, + int64_t segment_number) { if (is_subsegment) new_subsegment_ = true; else diff --git a/packager/media/formats/webm/segmenter.h b/packager/media/formats/webm/segmenter.h index 7a40cf73f5..d9196d98f4 100644 --- a/packager/media/formats/webm/segmenter.h +++ b/packager/media/formats/webm/segmenter.h @@ -58,7 +58,8 @@ class Segmenter { /// Finalize the (sub)segment. virtual Status FinalizeSegment(int64_t start_timestamp, int64_t duration_timestamp, - bool is_subsegment) = 0; + bool is_subsegment, + int64_t segment_number) = 0; /// @return true if there is an initialization range, while setting @a start /// and @a end; or false if initialization range does not apply. diff --git a/packager/media/formats/webm/single_segment_segmenter.cc b/packager/media/formats/webm/single_segment_segmenter.cc index adafcee867..b688c102ba 100644 --- a/packager/media/formats/webm/single_segment_segmenter.cc +++ b/packager/media/formats/webm/single_segment_segmenter.cc @@ -23,9 +23,10 @@ SingleSegmentSegmenter::~SingleSegmentSegmenter() {} Status SingleSegmentSegmenter::FinalizeSegment(int64_t start_timestamp, int64_t duration_timestamp, - bool is_subsegment) { - Status status = Segmenter::FinalizeSegment(start_timestamp, - duration_timestamp, is_subsegment); + bool is_subsegment, + int64_t segment_number) { + Status status = Segmenter::FinalizeSegment( + start_timestamp, duration_timestamp, is_subsegment, segment_number); if (!status.ok()) return status; // No-op for subsegment in single segment mode. @@ -37,7 +38,7 @@ Status SingleSegmentSegmenter::FinalizeSegment(int64_t start_timestamp, if (muxer_listener()) { const uint64_t size = cluster()->Size(); muxer_listener()->OnNewSegment(options().output_file_name, start_timestamp, - duration_timestamp, size); + duration_timestamp, size, segment_number); } return Status::OK; } diff --git a/packager/media/formats/webm/single_segment_segmenter.h b/packager/media/formats/webm/single_segment_segmenter.h index 6f536463ce..b1ce5361cc 100644 --- a/packager/media/formats/webm/single_segment_segmenter.h +++ b/packager/media/formats/webm/single_segment_segmenter.h @@ -33,7 +33,8 @@ class SingleSegmentSegmenter : public Segmenter { /// @{ Status FinalizeSegment(int64_t start_timestamp, int64_t duration_timestamp, - bool is_subsegment) override; + bool is_subsegment, + int64_t segment_number) override; bool GetInitRangeStartAndEnd(uint64_t* start, uint64_t* end) override; bool GetIndexRangeStartAndEnd(uint64_t* start, uint64_t* end) override; std::vector GetSegmentRanges() override; diff --git a/packager/media/formats/webm/single_segment_segmenter_unittest.cc b/packager/media/formats/webm/single_segment_segmenter_unittest.cc index b3a30373ea..7bb47d592c 100644 --- a/packager/media/formats/webm/single_segment_segmenter_unittest.cc +++ b/packager/media/formats/webm/single_segment_segmenter_unittest.cc @@ -18,6 +18,8 @@ const int32_t kTimeScale = 1000000; const int32_t kTimecodeScale = 1000000; const int64_t kSecondsToNs = 1000000000L; const int64_t kDuration = 1000000; +const int64_t kSegmentNumber1 = 1; +const int64_t kSegmentNumber2 = 2; const bool kSubsegment = true; // clang-format off @@ -167,7 +169,8 @@ TEST_F(SingleSegmentSegmenterTest, BasicSupport) { CreateSample(kKeyFrame, kDuration, side_data_flag); ASSERT_OK(segmenter_->AddSample(*sample)); } - ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, !kSubsegment, + kSegmentNumber1)); ASSERT_OK(segmenter_->Finalize()); ASSERT_FILE_ENDS_WITH(OutputFileName().c_str(), kBasicSupportData); @@ -180,14 +183,15 @@ TEST_F(SingleSegmentSegmenterTest, SplitsClustersOnSegment) { // Write the samples to the Segmenter. for (int i = 0; i < 8; i++) { if (i == 5) { - ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, !kSubsegment, + kSegmentNumber1)); } std::shared_ptr sample = CreateSample(kKeyFrame, kDuration, kNoSideData); ASSERT_OK(segmenter_->AddSample(*sample)); } - ASSERT_OK( - segmenter_->FinalizeSegment(5 * kDuration, 8 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(5 * kDuration, 8 * kDuration, + !kSubsegment, kSegmentNumber2)); ASSERT_OK(segmenter_->Finalize()); // Verify the resulting data. @@ -205,13 +209,15 @@ TEST_F(SingleSegmentSegmenterTest, IgnoresSubsegment) { // Write the samples to the Segmenter. for (int i = 0; i < 8; i++) { if (i == 5) { - ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(0, 5 * kDuration, kSubsegment, + kSegmentNumber1)); } std::shared_ptr sample = CreateSample(kKeyFrame, kDuration, kNoSideData); ASSERT_OK(segmenter_->AddSample(*sample)); } - ASSERT_OK(segmenter_->FinalizeSegment(0, 8 * kDuration, !kSubsegment)); + ASSERT_OK(segmenter_->FinalizeSegment(0, 8 * kDuration, !kSubsegment, + kSegmentNumber2)); ASSERT_OK(segmenter_->Finalize()); // Verify the resulting data. @@ -238,7 +244,7 @@ TEST_F(SingleSegmentSegmenterTest, LargeTimestamp) { ASSERT_OK(segmenter_->AddSample(*sample)); } ASSERT_OK(segmenter_->FinalizeSegment(kLargeTimestamp, 5 * kDuration, - !kSubsegment)); + !kSubsegment, kSegmentNumber1)); ASSERT_OK(segmenter_->Finalize()); // Verify the resulting data. @@ -274,7 +280,7 @@ TEST_F(SingleSegmentSegmenterTest, ReallyLargeTimestamp) { ASSERT_OK(segmenter_->AddSample(*sample)); } ASSERT_OK(segmenter_->FinalizeSegment(kReallyLargeTimestamp, 5 * kDuration, - !kSubsegment)); + !kSubsegment, kSegmentNumber1)); ASSERT_OK(segmenter_->Finalize()); // Verify the resulting data. diff --git a/packager/media/formats/webm/webm_muxer.cc b/packager/media/formats/webm/webm_muxer.cc index 7af4dbd80e..1909b328db 100644 --- a/packager/media/formats/webm/webm_muxer.cc +++ b/packager/media/formats/webm/webm_muxer.cc @@ -82,9 +82,9 @@ Status WebMMuxer::FinalizeSegment(size_t stream_id, return Status(error::UNIMPLEMENTED, "Key rotation is not implemented for WebM"); } - return segmenter_->FinalizeSegment(segment_info.start_timestamp, - segment_info.duration, - segment_info.is_subsegment); + return segmenter_->FinalizeSegment( + segment_info.start_timestamp, segment_info.duration, + segment_info.is_subsegment, segment_info.segment_number); } void WebMMuxer::FireOnMediaStartEvent() { diff --git a/packager/media/formats/webvtt/webvtt_muxer_unittest.cc b/packager/media/formats/webvtt/webvtt_muxer_unittest.cc index a769ae3a57..38f0b5793f 100644 --- a/packager/media/formats/webvtt/webvtt_muxer_unittest.cc +++ b/packager/media/formats/webvtt/webvtt_muxer_unittest.cc @@ -39,6 +39,10 @@ const char* kSegmentedFileOutput1 = "memory://output/template-1.vtt"; const char* kSegmentedFileOutput2 = "memory://output/template-2.vtt"; const int64_t kSegmentDuration = 10000; + +const int64_t kSegmentNumber1 = 1; +const int64_t kSegmentNumber2 = 2; + const float kMillisecondsPerSecond = 1000.0f; } // namespace @@ -64,13 +68,14 @@ class WebVttMuxerTest : public MediaHandlerTestBase { }; TEST_F(WebVttMuxerTest, WithNoSegmentAndWithNoSamples) { - EXPECT_CALL(*muxer_listener_, OnNewSegment(_, _, _, _)).Times(0); + EXPECT_CALL(*muxer_listener_, OnNewSegment(_, _, _, _, _)).Times(0); { // No segments should have be created as there were no samples. testing::InSequence s; EXPECT_CALL(*muxer_listener_, OnMediaStart(_, _, _, _)); + EXPECT_CALL(*muxer_listener_, OnMediaEndMock(_, _, _, _, _, _, _, _, _)); } @@ -95,7 +100,7 @@ TEST_F(WebVttMuxerTest, WithOneSegmentAndWithOneSample) { EXPECT_CALL(*muxer_listener_, OnMediaStart(_, _, _, _)); EXPECT_CALL(*muxer_listener_, OnNewSegment(kSegmentedFileOutput1, kSegmentStart, - kSegmentDuration, _)); + kSegmentDuration, _, _)); const float kMediaDuration = 1 * kSegmentDuration / kMillisecondsPerSecond; EXPECT_CALL(*muxer_listener_, @@ -112,8 +117,8 @@ TEST_F(WebVttMuxerTest, WithOneSegmentAndWithOneSample) { ASSERT_OK( Input(kInputIndex) ->Dispatch(StreamData::FromSegmentInfo( - kStreamIndex, - GetSegmentInfo(kSegmentStart, kSegmentDuration, !kEncrypted)))); + kStreamIndex, GetSegmentInfo(kSegmentStart, kSegmentDuration, + !kEncrypted, kSegmentNumber1)))); ASSERT_OK(Input(kInputIndex)->FlushAllDownstreams()); ASSERT_FILE_STREQ(kSegmentedFileOutput1, kExpectedOutput); @@ -142,10 +147,10 @@ TEST_F(WebVttMuxerTest, WithTwoSegmentAndWithOneSample) { EXPECT_CALL(*muxer_listener_, OnMediaStart(_, _, _, _)); EXPECT_CALL(*muxer_listener_, OnNewSegment(kSegmentedFileOutput1, kSegment1Start, - kSegmentDuration, _)); + kSegmentDuration, _, _)); EXPECT_CALL(*muxer_listener_, OnNewSegment(kSegmentedFileOutput2, kSegment2Start, - kSegmentDuration, _)); + kSegmentDuration, _, _)); const float kMediaDuration = 2 * kSegmentDuration / kMillisecondsPerSecond; EXPECT_CALL(*muxer_listener_, @@ -164,8 +169,8 @@ TEST_F(WebVttMuxerTest, WithTwoSegmentAndWithOneSample) { ASSERT_OK( Input(kInputIndex) ->Dispatch(StreamData::FromSegmentInfo( - kStreamIndex, - GetSegmentInfo(kSegment1Start, kSegmentDuration, !kEncrypted)))); + kStreamIndex, GetSegmentInfo(kSegment1Start, kSegmentDuration, + !kEncrypted, kSegmentNumber1)))); // Segment Two ASSERT_OK( Input(kInputIndex) @@ -174,8 +179,8 @@ TEST_F(WebVttMuxerTest, WithTwoSegmentAndWithOneSample) { ASSERT_OK( Input(kInputIndex) ->Dispatch(StreamData::FromSegmentInfo( - kStreamIndex, - GetSegmentInfo(kSegment2Start, kSegmentDuration, !kEncrypted)))); + kStreamIndex, GetSegmentInfo(kSegment2Start, kSegmentDuration, + !kEncrypted, kSegmentNumber2)))); ASSERT_OK(Input(kInputIndex)->FlushAllDownstreams()); ASSERT_FILE_STREQ(kSegmentedFileOutput1, kExpectedOutput1); @@ -202,10 +207,10 @@ TEST_F(WebVttMuxerTest, WithAnEmptySegment) { EXPECT_CALL(*muxer_listener_, OnMediaStart(_, _, _, _)); EXPECT_CALL(*muxer_listener_, OnNewSegment(kSegmentedFileOutput1, kSegment1Start, - kSegmentDuration, _)); + kSegmentDuration, _, _)); EXPECT_CALL(*muxer_listener_, OnNewSegment(kSegmentedFileOutput2, kSegment2Start, - kSegmentDuration, _)); + kSegmentDuration, _, _)); const float kMediaDuration = 2 * kSegmentDuration / kMillisecondsPerSecond; EXPECT_CALL(*muxer_listener_, @@ -219,8 +224,8 @@ TEST_F(WebVttMuxerTest, WithAnEmptySegment) { ASSERT_OK( Input(kInputIndex) ->Dispatch(StreamData::FromSegmentInfo( - kStreamIndex, - GetSegmentInfo(kSegment1Start, kSegmentDuration, !kEncrypted)))); + kStreamIndex, GetSegmentInfo(kSegment1Start, kSegmentDuration, + !kEncrypted, kSegmentNumber1)))); // Segment Two ASSERT_OK( Input(kInputIndex) @@ -229,8 +234,8 @@ TEST_F(WebVttMuxerTest, WithAnEmptySegment) { ASSERT_OK( Input(kInputIndex) ->Dispatch(StreamData::FromSegmentInfo( - kStreamIndex, - GetSegmentInfo(kSegment2Start, kSegmentDuration, !kEncrypted)))); + kStreamIndex, GetSegmentInfo(kSegment2Start, kSegmentDuration, + !kEncrypted, kSegmentNumber2)))); ASSERT_OK(Input(kInputIndex)->FlushAllDownstreams()); ASSERT_FILE_STREQ(kSegmentedFileOutput1, kExpectedOutput1); diff --git a/packager/media/formats/webvtt/webvtt_to_mp4_handler_unittest.cc b/packager/media/formats/webvtt/webvtt_to_mp4_handler_unittest.cc index b42c107066..976ed2f610 100644 --- a/packager/media/formats/webvtt/webvtt_to_mp4_handler_unittest.cc +++ b/packager/media/formats/webvtt/webvtt_to_mp4_handler_unittest.cc @@ -23,6 +23,7 @@ namespace { const size_t kStreamIndex = 0; const bool kSubSegment = true; const bool kEncrypted = true; +const int64_t kSegmentNumber = 1; const char* kId1 = "sample-id-1"; const char* kId2 = "sample-id-2"; @@ -95,7 +96,8 @@ class WebVttToMp4HandlerTest : public MediaHandlerTestBase { const bool kIsSubSegment = true; int64_t duration = end_time - start_time; - auto segment = GetSegmentInfo(start_time, duration, !kIsSubSegment); + auto segment = + GetSegmentInfo(start_time, duration, !kIsSubSegment, kSegmentNumber); return In()->Dispatch( StreamData::FromSegmentInfo(kStreamIndex, std::move(segment))); } diff --git a/packager/media/trick_play/trick_play_handler_unittest.cc b/packager/media/trick_play/trick_play_handler_unittest.cc index aac1bd46b7..b27d0c1f7b 100644 --- a/packager/media/trick_play/trick_play_handler_unittest.cc +++ b/packager/media/trick_play/trick_play_handler_unittest.cc @@ -24,6 +24,7 @@ const size_t kOutputCount = 1; const size_t kInputIndex = 0; const size_t kOutputIndex = 0; const size_t kStreamIndex = 0; +const int64_t kSegmentNumber = 1; // This value does not matter as trick play does not use it, but it is needed // to create the audio and video info. @@ -54,7 +55,8 @@ class TrickPlayHandlerTest : public MediaHandlerTestBase { Status DispatchSegment(int64_t start_time, int64_t duration) { const bool kSubSegment = true; - auto info = GetSegmentInfo(start_time, duration, !kSubSegment); + auto info = + GetSegmentInfo(start_time, duration, !kSubSegment, kSegmentNumber); auto data = StreamData::FromSegmentInfo(kStreamIndex, std::move(info)); return Input(kInputIndex)->Dispatch(std::move(data)); } diff --git a/packager/mpd/base/adaptation_set_unittest.cc b/packager/mpd/base/adaptation_set_unittest.cc index b23b3fb4db..98150bf437 100644 --- a/packager/mpd/base/adaptation_set_unittest.cc +++ b/packager/mpd/base/adaptation_set_unittest.cc @@ -22,6 +22,7 @@ namespace shaka { namespace { const char kNoLanguage[] = ""; +const uint64_t kAnySegmentNumber = 1; } // namespace class AdaptationSetTest : public ::testing::Test { @@ -682,23 +683,25 @@ TEST_F(OnDemandAdaptationSetTest, SubsegmentAlignment) { adaptation_set->AddRepresentation(ConvertToMediaInfo(k480pMediaInfo)); // Add a subsegment immediately before adding the 360p Representation. // This should still work for VOD. - representation_480p->AddNewSegment(kStartTime, kDuration, kAnySize); + representation_480p->AddNewSegment(kStartTime, kDuration, kAnySize, + kAnySegmentNumber); Representation* representation_360p = adaptation_set->AddRepresentation(ConvertToMediaInfo(k360pMediaInfo)); - representation_360p->AddNewSegment(kStartTime, kDuration, kAnySize); + representation_360p->AddNewSegment(kStartTime, kDuration, kAnySize, + kAnySegmentNumber); auto aligned = adaptation_set->GetXml(); EXPECT_THAT(aligned, AttributeEqual("subsegmentAlignment", "true")); // Unknown because 480p has an extra subsegments. - representation_480p->AddNewSegment(11, 20, kAnySize); + representation_480p->AddNewSegment(11, 20, kAnySize, kAnySegmentNumber); auto alignment_unknown = adaptation_set->GetXml(); EXPECT_THAT(alignment_unknown, Not(AttributeSet("subsegmentAlignment"))); // Add segments that make them not aligned. - representation_360p->AddNewSegment(10, 1, kAnySize); - representation_360p->AddNewSegment(11, 19, kAnySize); + representation_360p->AddNewSegment(10, 1, kAnySize, kAnySegmentNumber); + representation_360p->AddNewSegment(11, 19, kAnySize, kAnySegmentNumber); auto unaligned = adaptation_set->GetXml(); EXPECT_THAT(unaligned, Not(AttributeSet("subsegmentAlignment"))); @@ -740,8 +743,11 @@ TEST_F(OnDemandAdaptationSetTest, ForceSetsubsegmentAlignment) { static_assert(kStartTime1 != kStartTime2, "StartTimesShouldBeDifferent"); const int64_t kDuration = 10; const uint64_t kAnySize = 19834u; - representation_480p->AddNewSegment(kStartTime1, kDuration, kAnySize); - representation_360p->AddNewSegment(kStartTime2, kDuration, kAnySize); + + representation_480p->AddNewSegment(kStartTime1, kDuration, kAnySize, + kAnySegmentNumber); + representation_360p->AddNewSegment(kStartTime2, kDuration, kAnySize, + kAnySegmentNumber); auto unaligned = adaptation_set->GetXml(); EXPECT_THAT(unaligned, Not(AttributeSet("subsegmentAlignment"))); @@ -791,15 +797,17 @@ TEST_F(LiveAdaptationSetTest, SegmentAlignmentDynamicMpd) { Representation* representation_360p = adaptation_set->AddRepresentation(ConvertToMediaInfo(k360pMediaInfo)); - representation_480p->AddNewSegment(kStartTime, kDuration, kAnySize); - representation_360p->AddNewSegment(kStartTime, kDuration, kAnySize); + representation_480p->AddNewSegment(kStartTime, kDuration, kAnySize, + kAnySegmentNumber); + representation_360p->AddNewSegment(kStartTime, kDuration, kAnySize, + kAnySegmentNumber); auto aligned = adaptation_set->GetXml(); EXPECT_THAT(aligned, AttributeEqual("segmentAlignment", "true")); // Add segments that make them not aligned. - representation_480p->AddNewSegment(11, 20, kAnySize); - representation_360p->AddNewSegment(10, 1, kAnySize); - representation_360p->AddNewSegment(11, 19, kAnySize); + representation_480p->AddNewSegment(11, 20, kAnySize, kAnySegmentNumber); + representation_360p->AddNewSegment(10, 1, kAnySize, kAnySegmentNumber); + representation_360p->AddNewSegment(11, 19, kAnySize, kAnySegmentNumber); auto unaligned = adaptation_set->GetXml(); EXPECT_THAT(unaligned, Not(AttributeSet("segmentAlignment"))); @@ -844,16 +852,18 @@ TEST_F(LiveAdaptationSetTest, SegmentAlignmentStaticMpd) { // Representation. Representation* representation_480p = adaptation_set->AddRepresentation(ConvertToMediaInfo(k480pMediaInfo)); - representation_480p->AddNewSegment(kStartTime, kDuration, kAnySize); + representation_480p->AddNewSegment(kStartTime, kDuration, kAnySize, + kAnySegmentNumber); Representation* representation_360p = adaptation_set->AddRepresentation(ConvertToMediaInfo(k360pMediaInfo)); - representation_360p->AddNewSegment(kStartTime, kDuration, kAnySize); + representation_360p->AddNewSegment(kStartTime, kDuration, kAnySize, + kAnySegmentNumber); representation_480p->AddNewSegment(kStartTime + kDuration, kDuration, - kAnySize); + kAnySize, kAnySegmentNumber); representation_360p->AddNewSegment(kStartTime + kDuration, kDuration, - kAnySize); + kAnySize, kAnySegmentNumber); auto aligned = adaptation_set->GetXml(); EXPECT_THAT(aligned, AttributeEqual("segmentAlignment", "true")); diff --git a/packager/mpd/base/mock_mpd_builder.h b/packager/mpd/base/mock_mpd_builder.h index b771c300b7..0abc5bc380 100644 --- a/packager/mpd/base/mock_mpd_builder.h +++ b/packager/mpd/base/mock_mpd_builder.h @@ -75,8 +75,11 @@ class MockRepresentation : public Representation { void(const ContentProtectionElement& element)); MOCK_METHOD2(UpdateContentProtectionPssh, void(const std::string& drm_uuid, const std::string& pssh)); - MOCK_METHOD3(AddNewSegment, - void(int64_t start_time, int64_t duration, uint64_t size)); + MOCK_METHOD4(AddNewSegment, + void(int64_t start_time, + int64_t duration, + uint64_t size, + int64_t segment_number)); MOCK_METHOD0(SetSegmentDuration, void()); MOCK_METHOD0(SetAvailabilityTimeOffset, void()); MOCK_METHOD1(SetSampleDuration, void(int32_t sample_duration)); diff --git a/packager/mpd/base/mock_mpd_notifier.h b/packager/mpd/base/mock_mpd_notifier.h index 6d19413273..dcac171984 100644 --- a/packager/mpd/base/mock_mpd_notifier.h +++ b/packager/mpd/base/mock_mpd_notifier.h @@ -25,11 +25,12 @@ class MockMpdNotifier : public MpdNotifier { bool(const MediaInfo& media_info, uint32_t* container_id)); MOCK_METHOD2(NotifySampleDuration, bool(uint32_t container_id, int32_t sample_duration)); - MOCK_METHOD4(NotifyNewSegment, + MOCK_METHOD5(NotifyNewSegment, bool(uint32_t container_id, int64_t start_time, int64_t duration, - uint64_t size)); + uint64_t size, + int64_t segment_number)); MOCK_METHOD3(NotifyCompletedSegment, bool(uint32_t container_id, int64_t duration, uint64_t size)); MOCK_METHOD1(NotifyAvailabilityTimeOffset, bool(uint32_t container_id)); diff --git a/packager/mpd/base/mpd_builder_unittest.cc b/packager/mpd/base/mpd_builder_unittest.cc index 09e074f92b..367418bba4 100644 --- a/packager/mpd/base/mpd_builder_unittest.cc +++ b/packager/mpd/base/mpd_builder_unittest.cc @@ -56,6 +56,7 @@ class MpdBuilderTest : public ::testing::Test { // Not relevant in this test. const bool kContentProtectionFlag = true; const size_t kBytes = 1000; + const int64_t kSegmentNumber = 1; AdaptationSet* adaptation_set = period->GetOrCreateAdaptationSet(media_info, kContentProtectionFlag); @@ -63,7 +64,8 @@ class MpdBuilderTest : public ::testing::Test { adaptation_set->AddRepresentation(media_info); representation->AddNewSegment( segment_start_time_seconds * media_info.reference_time_scale(), - segment_duration_seconds * media_info.reference_time_scale(), kBytes); + segment_duration_seconds * media_info.reference_time_scale(), kBytes, + kSegmentNumber); } protected: diff --git a/packager/mpd/base/mpd_notifier.h b/packager/mpd/base/mpd_notifier.h index d75143899d..07f5e28bc0 100644 --- a/packager/mpd/base/mpd_notifier.h +++ b/packager/mpd/base/mpd_notifier.h @@ -87,11 +87,13 @@ class MpdNotifier { /// @param duration is the duration of the new segment, in units of the /// stream's time scale. /// @param size is the new segment size in bytes. + /// @param segment_number is the segment number. /// @return true on success, false otherwise. virtual bool NotifyNewSegment(uint32_t container_id, int64_t start_time, int64_t duration, - uint64_t size) = 0; + uint64_t size, + int64_t segment_number) = 0; /// Notifies MpdBuilder that a segment is fully written and provides the /// segment's complete duration and size. For Low Latency only. Note, size and diff --git a/packager/mpd/base/representation.cc b/packager/mpd/base/representation.cc index 806c5b8ea5..bfd55c38d4 100644 --- a/packager/mpd/base/representation.cc +++ b/packager/mpd/base/representation.cc @@ -108,10 +108,6 @@ Representation::Representation( std::move(state_change_listener)) { mime_type_ = representation.mime_type_; codecs_ = representation.codecs_; - - start_number_ = representation.start_number_; - for (const SegmentInfo& segment_info : representation.segment_infos_) - start_number_ += segment_info.repeat + 1; } Representation::~Representation() {} @@ -172,7 +168,8 @@ void Representation::UpdateContentProtectionPssh(const std::string& drm_uuid, void Representation::AddNewSegment(int64_t start_time, int64_t duration, - uint64_t size) { + uint64_t size, + int64_t segment_number) { if (start_time == 0 && duration == 0) { LOG(WARNING) << "Got segment with start_time and duration == 0. Ignoring."; return; @@ -188,7 +185,7 @@ void Representation::AddNewSegment(int64_t start_time, if (state_change_listener_) state_change_listener_->OnNewSegmentForRepresentation(start_time, duration); - AddSegmentInfo(start_time, duration); + AddSegmentInfo(start_time, duration, segment_number); // Only update the buffer depth and bandwidth estimator when the full segment // is completed. In the low latency case, only the first chunk in the segment @@ -307,7 +304,7 @@ std::optional Representation::GetXml() { if (HasLiveOnlyFields(media_info_) && !representation.AddLiveOnlyInfo( - media_info_, segment_infos_, start_number_, + media_info_, segment_infos_, mpd_options_.mpd_params.low_latency_dash_mode)) { LOG(ERROR) << "Failed to add Live info."; return std::nullopt; @@ -383,7 +380,9 @@ bool Representation::HasRequiredMediaInfoFields() const { return true; } -void Representation::AddSegmentInfo(int64_t start_time, int64_t duration) { +void Representation::AddSegmentInfo(int64_t start_time, + int64_t duration, + int64_t segment_number) { const uint64_t kNoRepeat = 0; const int64_t adjusted_duration = AdjustDuration(duration); @@ -406,7 +405,8 @@ void Representation::AddSegmentInfo(int64_t start_time, int64_t duration) { } else { segment_infos_.push_back( {previous_segment_end_time, - actual_segment_end_time - previous_segment_end_time, kNoRepeat}); + actual_segment_end_time - previous_segment_end_time, kNoRepeat, + segment_number}); } return; } @@ -431,8 +431,8 @@ void Representation::AddSegmentInfo(int64_t start_time, int64_t duration) { << previous_segment_end_time << "."; } } - - segment_infos_.push_back({start_time, adjusted_duration, kNoRepeat}); + segment_infos_.push_back( + {start_time, adjusted_duration, kNoRepeat, segment_number}); } void Representation::UpdateSegmentInfo(int64_t duration) { @@ -498,7 +498,6 @@ void Representation::SlideWindow() { current_buffer_depth_ - last->duration >= time_shift_buffer_depth) { current_buffer_depth_ -= last->duration; RemoveOldSegment(&*last); - start_number_++; } if (last->repeat >= 0) break; @@ -510,13 +509,15 @@ void Representation::RemoveOldSegment(SegmentInfo* segment_info) { int64_t segment_start_time = segment_info->start_time; segment_info->start_time += segment_info->duration; segment_info->repeat--; + int64_t start_number = segment_info->start_segment_number; + segment_info->start_segment_number++; if (mpd_options_.mpd_params.preserved_segments_outside_live_window == 0) return; segments_to_be_removed_.push_back( media::GetSegmentName(media_info_.segment_template(), segment_start_time, - start_number_ - 1, media_info_.bandwidth())); + start_number, media_info_.bandwidth())); while (segments_to_be_removed_.size() > mpd_options_.mpd_params.preserved_segments_outside_live_window) { VLOG(2) << "Deleting " << segments_to_be_removed_.front(); diff --git a/packager/mpd/base/representation.h b/packager/mpd/base/representation.h index e6b958bb43..3335b6b11d 100644 --- a/packager/mpd/base/representation.h +++ b/packager/mpd/base/representation.h @@ -99,9 +99,11 @@ class Representation { /// @param size of the segment in bytes. In the low latency case, this size is /// that of the /// first chunk because the full size is not yet known. + /// @param segment_number is the current segment number. virtual void AddNewSegment(int64_t start_time, int64_t duration, - uint64_t size); + uint64_t size, + int64_t segment_number); /// Update a media segment in the Representation. /// In the low latency case, the segment duration will not be ready until the @@ -198,7 +200,9 @@ class Representation { // Add a SegmentInfo. This function may insert an adjusted SegmentInfo if // |allow_approximate_segment_timeline_| is set. - void AddSegmentInfo(int64_t start_time, int64_t duration); + void AddSegmentInfo(int64_t start_time, + int64_t duration, + int64_t segment_number); // Update the current SegmentInfo. This method is used to update the duration // value after a low latency segment is complete, and the full segment @@ -248,10 +252,6 @@ class Representation { BandwidthEstimator bandwidth_estimator_; const MpdOptions& mpd_options_; - // startNumber attribute for SegmentTemplate. - // Starts from 1. - uint32_t start_number_ = 1; - // If this is not null, then Representation is responsible for calling the // right methods at right timings. std::unique_ptr state_change_listener_; diff --git a/packager/mpd/base/representation_unittest.cc b/packager/mpd/base/representation_unittest.cc index 66b6564048..e04af21c12 100644 --- a/packager/mpd/base/representation_unittest.cc +++ b/packager/mpd/base/representation_unittest.cc @@ -277,6 +277,8 @@ TEST_F(RepresentationTest, const int64_t kStartTime = 199238; const int64_t kDuration = 98; + const int64_t kSegmentNumber = 1; + std::unique_ptr listener( new MockRepresentationStateChangeListener()); EXPECT_CALL(*listener, OnNewSegmentForRepresentation(kStartTime, kDuration)); @@ -285,7 +287,8 @@ TEST_F(RepresentationTest, kAnyRepresentationId, std::move(listener)); EXPECT_TRUE(representation->Init()); - representation->AddNewSegment(kStartTime, kDuration, 10 /* any size */); + representation->AddNewSegment(kStartTime, kDuration, 10 /* any size */, + kSegmentNumber); } // Make sure @@ -463,7 +466,7 @@ class SegmentTemplateTest : public RepresentationTest { int repeat) { DCHECK(representation_); - SegmentInfo s = {start_time, duration, repeat}; + SegmentInfo s = {start_time, duration, repeat, segment_number_}; segment_infos_for_expected_out_.push_back(s); if (mpd_options_.mpd_params.low_latency_dash_mode) { @@ -471,7 +474,8 @@ class SegmentTemplateTest : public RepresentationTest { // At this point, only the first chunk of the low latency segment has been // written. The bandwidth will be updated once the segment is fully // written and the segment duration and size are known. - representation_->AddNewSegment(start_time, duration, size); + representation_->AddNewSegment(start_time, duration, size, + segment_number_++); return; } @@ -484,7 +488,8 @@ class SegmentTemplateTest : public RepresentationTest { } for (int i = 0; i < repeat + 1; ++i) { - representation_->AddNewSegment(start_time, duration, size); + representation_->AddNewSegment(start_time, duration, size, + segment_number_++); start_time += duration; bandwidth_estimator_.AddBlock( size, static_cast(duration) / kDefaultTimeScale); @@ -524,6 +529,7 @@ class SegmentTemplateTest : public RepresentationTest { std::list segment_infos_for_expected_out_; std::string expected_s_elements_; BandwidthEstimator bandwidth_estimator_; + int64_t segment_number_ = 1; }; // Estimate the bandwidth given the info from AddNewSegment(). @@ -584,12 +590,13 @@ TEST_F(SegmentTemplateTest, RepresentationClone) { auto cloned_representation = CopyRepresentation(*representation_, NoListener()); + const char kExpectedXml[] = "\n" " \n" + " media=\"$Number$.mp4\" startNumber=\"1\">\n" " \n" "\n"; EXPECT_THAT(cloned_representation->GetXml(), XmlNodeEqual(kExpectedXml)); diff --git a/packager/mpd/base/segment_info.h b/packager/mpd/base/segment_info.h index dc6415e279..a4772fa435 100644 --- a/packager/mpd/base/segment_info.h +++ b/packager/mpd/base/segment_info.h @@ -23,6 +23,7 @@ struct SegmentInfo { // |duration|, then this should be set to 0. The semantics is the same as S@r // in the DASH MPD spec. int repeat; + int64_t start_segment_number; }; } // namespace shaka diff --git a/packager/mpd/base/simple_mpd_notifier.cc b/packager/mpd/base/simple_mpd_notifier.cc index 4c096c5da9..585ad024dc 100644 --- a/packager/mpd/base/simple_mpd_notifier.cc +++ b/packager/mpd/base/simple_mpd_notifier.cc @@ -109,14 +109,15 @@ bool SimpleMpdNotifier::NotifySegmentDuration(uint32_t container_id) { bool SimpleMpdNotifier::NotifyNewSegment(uint32_t container_id, int64_t start_time, int64_t duration, - uint64_t size) { + uint64_t size, + int64_t segment_number) { absl::MutexLock lock(&lock_); auto it = representation_map_.find(container_id); if (it == representation_map_.end()) { LOG(ERROR) << "Unexpected container_id: " << container_id; return false; } - it->second->AddNewSegment(start_time, duration, size); + it->second->AddNewSegment(start_time, duration, size, segment_number); return true; } diff --git a/packager/mpd/base/simple_mpd_notifier.h b/packager/mpd/base/simple_mpd_notifier.h index ad985aeb0f..49eefa3152 100644 --- a/packager/mpd/base/simple_mpd_notifier.h +++ b/packager/mpd/base/simple_mpd_notifier.h @@ -44,7 +44,8 @@ class SimpleMpdNotifier : public MpdNotifier { bool NotifyNewSegment(uint32_t container_id, int64_t start_time, int64_t duration, - uint64_t size) override; + uint64_t size, + int64_t segment_number) override; bool NotifyCompletedSegment(uint32_t container_id, int64_t duration, uint64_t size) override; diff --git a/packager/mpd/base/simple_mpd_notifier_unittest.cc b/packager/mpd/base/simple_mpd_notifier_unittest.cc index 426525da30..bed2ebefcc 100644 --- a/packager/mpd/base/simple_mpd_notifier_unittest.cc +++ b/packager/mpd/base/simple_mpd_notifier_unittest.cc @@ -218,6 +218,8 @@ TEST_F(SimpleMpdNotifierTest, NotifyNewSegment) { SimpleMpdNotifier notifier(empty_mpd_option_); const uint32_t kRepresentationId = 447834u; + const int64_t kSegmentNumber1 = 1; + std::unique_ptr mock_mpd_builder(new MockMpdBuilder()); std::unique_ptr mock_representation( new MockRepresentation(kRepresentationId)); @@ -238,10 +240,12 @@ TEST_F(SimpleMpdNotifierTest, NotifyNewSegment) { const int32_t kSegmentDuration = 100; const uint64_t kSegmentSize = 123456u; EXPECT_CALL(*mock_representation, - AddNewSegment(kStartTime, kSegmentDuration, kSegmentSize)); + AddNewSegment(kStartTime, kSegmentDuration, kSegmentSize, + kSegmentNumber1)); EXPECT_TRUE(notifier.NotifyNewSegment(kRepresentationId, kStartTime, - kSegmentDuration, kSegmentSize)); + kSegmentDuration, kSegmentSize, + kSegmentNumber1)); } TEST_F(SimpleMpdNotifierTest, NotifyCueEvent) { diff --git a/packager/mpd/base/xml/xml_node.cc b/packager/mpd/base/xml/xml_node.cc index b054bc7fc6..6da265054b 100644 --- a/packager/mpd/base/xml/xml_node.cc +++ b/packager/mpd/base/xml/xml_node.cc @@ -475,9 +475,12 @@ bool RepresentationXmlNode::AddVODOnlyInfo(const MediaInfo& media_info, bool RepresentationXmlNode::AddLiveOnlyInfo( const MediaInfo& media_info, const std::list& segment_infos, - uint32_t start_number, bool low_latency_dash_mode) { XmlNode segment_template("SegmentTemplate"); + + int start_number = + segment_infos.empty() ? 1 : segment_infos.begin()->start_segment_number; + if (media_info.has_reference_time_scale()) { RCHECK(segment_template.SetIntegerAttribute( "timescale", media_info.reference_time_scale())); diff --git a/packager/mpd/base/xml/xml_node.h b/packager/mpd/base/xml/xml_node.h index 766c475583..c73c0cbe82 100644 --- a/packager/mpd/base/xml/xml_node.h +++ b/packager/mpd/base/xml/xml_node.h @@ -220,7 +220,6 @@ class RepresentationXmlNode : public RepresentationBaseXmlNode { [[nodiscard]] bool AddLiveOnlyInfo( const MediaInfo& media_info, const std::list& segment_infos, - uint32_t start_number, bool low_latency_dash_mode); private: diff --git a/packager/mpd/base/xml/xml_node_unittest.cc b/packager/mpd/base/xml/xml_node_unittest.cc index 9b4f7254a3..20d8b2fb25 100644 --- a/packager/mpd/base/xml/xml_node_unittest.cc +++ b/packager/mpd/base/xml/xml_node_unittest.cc @@ -370,18 +370,18 @@ class LiveSegmentTimelineTest : public ::testing::Test { }; TEST_F(LiveSegmentTimelineTest, OneSegmentInfo) { - const uint32_t kStartNumber = 1; + const uint32_t kSegmentNumber = 1; const int64_t kStartTime = 0; const int64_t kDuration = 100; const uint64_t kRepeat = 9; const bool kIsLowLatency = false; std::list segment_infos = { - {kStartTime, kDuration, kRepeat}, + {kStartTime, kDuration, kRepeat, kSegmentNumber}, }; RepresentationXmlNode representation; ASSERT_TRUE(representation.AddLiveOnlyInfo(media_info_, segment_infos, - kStartNumber, kIsLowLatency)); + kIsLowLatency)); EXPECT_THAT( representation, @@ -392,18 +392,18 @@ TEST_F(LiveSegmentTimelineTest, OneSegmentInfo) { } TEST_F(LiveSegmentTimelineTest, OneSegmentInfoNonZeroStartTime) { - const uint32_t kStartNumber = 1; const int64_t kNonZeroStartTime = 500; const int64_t kDuration = 100; + const uint32_t kSegmentNumber = 1; const uint64_t kRepeat = 9; const bool kIsLowLatency = false; std::list segment_infos = { - {kNonZeroStartTime, kDuration, kRepeat}, + {kNonZeroStartTime, kDuration, kRepeat, kSegmentNumber}, }; RepresentationXmlNode representation; ASSERT_TRUE(representation.AddLiveOnlyInfo(media_info_, segment_infos, - kStartNumber, kIsLowLatency)); + kIsLowLatency)); EXPECT_THAT(representation, XmlNodeEqual( @@ -417,18 +417,18 @@ TEST_F(LiveSegmentTimelineTest, OneSegmentInfoNonZeroStartTime) { } TEST_F(LiveSegmentTimelineTest, OneSegmentInfoMatchingStartTimeAndNumber) { - const uint32_t kStartNumber = 6; const int64_t kNonZeroStartTime = 500; const int64_t kDuration = 100; + const uint32_t kSegmentNumber = 6; const uint64_t kRepeat = 9; const bool kIsLowLatency = false; std::list segment_infos = { - {kNonZeroStartTime, kDuration, kRepeat}, + {kNonZeroStartTime, kDuration, kRepeat, kSegmentNumber}, }; RepresentationXmlNode representation; ASSERT_TRUE(representation.AddLiveOnlyInfo(media_info_, segment_infos, - kStartNumber, kIsLowLatency)); + kIsLowLatency)); EXPECT_THAT( representation, @@ -439,8 +439,9 @@ TEST_F(LiveSegmentTimelineTest, OneSegmentInfoMatchingStartTimeAndNumber) { } TEST_F(LiveSegmentTimelineTest, AllSegmentsSameDurationExpectLastOne) { - const uint32_t kStartNumber = 1; const bool kIsLowLatency = false; + const uint32_t kSegmentNumber1 = 1; + const uint32_t kSegmentNumber11 = 11; const int64_t kStartTime1 = 0; const int64_t kDuration1 = 100; @@ -451,12 +452,12 @@ TEST_F(LiveSegmentTimelineTest, AllSegmentsSameDurationExpectLastOne) { const uint64_t kRepeat2 = 0; std::list segment_infos = { - {kStartTime1, kDuration1, kRepeat1}, - {kStartTime2, kDuration2, kRepeat2}, + {kStartTime1, kDuration1, kRepeat1, kSegmentNumber1}, + {kStartTime2, kDuration2, kRepeat2, kSegmentNumber11}, }; RepresentationXmlNode representation; ASSERT_TRUE(representation.AddLiveOnlyInfo(media_info_, segment_infos, - kStartNumber, kIsLowLatency)); + kIsLowLatency)); EXPECT_THAT( representation, @@ -467,8 +468,9 @@ TEST_F(LiveSegmentTimelineTest, AllSegmentsSameDurationExpectLastOne) { } TEST_F(LiveSegmentTimelineTest, SecondSegmentInfoNonZeroRepeat) { - const uint32_t kStartNumber = 1; const bool kIsLowLatency = false; + const uint32_t kSegmentNumber1 = 1; + const uint32_t kSegmentNumber11 = 11; const int64_t kStartTime1 = 0; const int64_t kDuration1 = 100; @@ -479,12 +481,12 @@ TEST_F(LiveSegmentTimelineTest, SecondSegmentInfoNonZeroRepeat) { const uint64_t kRepeat2 = 1; std::list segment_infos = { - {kStartTime1, kDuration1, kRepeat1}, - {kStartTime2, kDuration2, kRepeat2}, + {kStartTime1, kDuration1, kRepeat1, kSegmentNumber1}, + {kStartTime2, kDuration2, kRepeat2, kSegmentNumber11}, }; RepresentationXmlNode representation; ASSERT_TRUE(representation.AddLiveOnlyInfo(media_info_, segment_infos, - kStartNumber, kIsLowLatency)); + kIsLowLatency)); EXPECT_THAT(representation, XmlNodeEqual( @@ -499,8 +501,9 @@ TEST_F(LiveSegmentTimelineTest, SecondSegmentInfoNonZeroRepeat) { } TEST_F(LiveSegmentTimelineTest, TwoSegmentInfoWithGap) { - const uint32_t kStartNumber = 1; const bool kIsLowLatency = false; + const uint32_t kSegmentNumber1 = 1; + const uint32_t kSegmentNumber11 = 11; const int64_t kStartTime1 = 0; const int64_t kDuration1 = 100; @@ -512,12 +515,12 @@ TEST_F(LiveSegmentTimelineTest, TwoSegmentInfoWithGap) { const uint64_t kRepeat2 = 0; std::list segment_infos = { - {kStartTime1, kDuration1, kRepeat1}, - {kStartTime2, kDuration2, kRepeat2}, + {kStartTime1, kDuration1, kRepeat1, kSegmentNumber1}, + {kStartTime2, kDuration2, kRepeat2, kSegmentNumber11}, }; RepresentationXmlNode representation; ASSERT_TRUE(representation.AddLiveOnlyInfo(media_info_, segment_infos, - kStartNumber, kIsLowLatency)); + kIsLowLatency)); EXPECT_THAT(representation, XmlNodeEqual( @@ -532,14 +535,14 @@ TEST_F(LiveSegmentTimelineTest, TwoSegmentInfoWithGap) { } TEST_F(LiveSegmentTimelineTest, LastSegmentNumberSupplementalProperty) { - const uint32_t kStartNumber = 1; const int64_t kStartTime = 0; const int64_t kDuration = 100; + const uint32_t kSegmentNumber = 1; const uint64_t kRepeat = 9; const bool kIsLowLatency = false; std::list segment_infos = { - {kStartTime, kDuration, kRepeat}, + {kStartTime, kDuration, kRepeat, kSegmentNumber}, }; RepresentationXmlNode representation; FlagSaver segment_number_saver( @@ -547,7 +550,7 @@ TEST_F(LiveSegmentTimelineTest, LastSegmentNumberSupplementalProperty) { absl::SetFlag(&FLAGS_dash_add_last_segment_number_when_needed, true); ASSERT_TRUE(representation.AddLiveOnlyInfo(media_info_, segment_infos, - kStartNumber, kIsLowLatency)); + kIsLowLatency)); EXPECT_THAT( representation, @@ -749,11 +752,11 @@ TEST_F(LowLatencySegmentTest, LowLatencySegmentTemplate) { const bool kIsLowLatency = true; std::list segment_infos = { - {kStartNumber, kDuration, kRepeat}, + {kStartNumber, kDuration, kRepeat, kStartNumber}, }; RepresentationXmlNode representation; ASSERT_TRUE(representation.AddLiveOnlyInfo(media_info_, segment_infos, - kStartNumber, kIsLowLatency)); + kIsLowLatency)); EXPECT_THAT( representation, XmlNodeEqual("" diff --git a/packager/packager.cc b/packager/packager.cc index f0ff2c9348..dd575b6ef1 100644 --- a/packager/packager.cc +++ b/packager/packager.cc @@ -275,6 +275,11 @@ Status ValidateParams(const PackagingParams& packaging_params, "subsegment_sap_aligned to true is not allowed."); } + if (packaging_params.chunking_params.start_segment_number < 0) { + return Status(error::INVALID_ARGUMENT, + "Negative --start_segment_number is not allowed."); + } + if (stream_descriptors.empty()) { return Status(error::INVALID_ARGUMENT, "Stream descriptors cannot be empty."); @@ -517,8 +522,8 @@ std::unique_ptr CreateTextChunker( const ChunkingParams& chunking_params) { const float segment_length_in_seconds = chunking_params.segment_duration_in_seconds; - return std::unique_ptr( - new TextChunker(segment_length_in_seconds)); + return std::unique_ptr(new TextChunker( + segment_length_in_seconds, chunking_params.start_segment_number)); } Status CreateTtmlJobs(