Skip to content

Instantly share code, notes, and snippets.

@blaze077
Last active December 31, 2017 04:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save blaze077/9025d2c1a9a59d63f0168e5fd6f9cd31 to your computer and use it in GitHub Desktop.
Save blaze077/9025d2c1a9a59d63f0168e5fd6f9cd31 to your computer and use it in GitHub Desktop.
Scripts for filtering the first episode of Kaiji. I regret nothing.
AddAutoloadDir("C:\Program Files (x86)\AviSynth+\scripts", true)
LWLibavVideoSource("C:\Anime Encoding\Kaiji\Gyakkyou Burai Kaiji Ultimate Survivor\KAIJI_1\VIDEO_TS\EP 01\Kaiji - EP01 LosslessIVTC.mkv")
ConvertFromDoubleWidth(10)
ConvertBits(8)
#Don't expect anything readable. See the Vapoursynth script at the end for more details.
#844 x 478 -------> 848x480
#Spline36Resize(844, 478, 4, 2, -4, 0)
src = last
path = "C:\Anime Encoding\Kaiji\Gyakkyou Burai Kaiji Ultimate Survivor\KAIJI_1\VIDEO_TS\EP 01\Masks\"
function mocompAA(clip c, clip "aa"){
c
aa = Default(aa, xaa(mode="sr2 eedi3"))
source = c
sup = source.MSuper(pel=2,sharp=2)
bv1 = sup.MAnalyse(isb=true, delta=1)
fv1 = sup.MAnalyse(isb=false,delta=1)
bc1 = source.MCompensate(sup,bv1,thSAD=500)
fc1 = source.MCompensate(sup,fv1,thSAD=500)
max = mt_logic(bc1,fc1,"max").mt_logic(source,"max")
min = mt_logic(bc1,fc1,"min").mt_logic(source,"min")
aa.mt_clamp(max,min,0,0,U=2,V=2)
}
#Scene 1396 - 1491
chroma_mask = mt_binarize(140, y=2, u=3, v=3).ConvertToYV24()
luma_mask = mt_logic(mt_logic(TCannyMod(sigma=2.5, t_h=20, t_l=18.0).ExtractY(), chroma_mask.ExtractU().mt_invert(), mode="and"), chroma_mask.ExtractV().mt_expand().mt_invert(), "and")
mask = luma_mask.mt_expand()
Rfs(mt_merge(maa2(), mask, true), mappings="[1396 1491]")
#Scene 4952 - 5047
Rfs(mt_merge(xaa(mode="sr eedi2", csharp=2, cstr=-0.25), mt_lutspa(mode="asbolute", relative=false, expr="x 380 > 255 0 ?"), true), mappings="[4952 5047]")
mask = mt_lutspa(mode="asbolute", relative=false, expr="x 139 < 255 0 ?")
mask = mt_logic(mask, mask.mt_lutspa(mode="asbolute", relative=false, expr="y 450 < 255 0 ?"), mode="and") #Deal with sangnom's green line bug
Rfs(mt_merge(Sangnom2(), mask, true), mappings="[4952 5047]")
mask = mt_logic(mt_lutspa(mode="asbolute", relative=false, expr="y 178 < 255 0 ?"), mask, "or")
Rfs(mt_merge(xaa(mode="sr3 eedi3", csharp=2, cstr=-0.25), mask, true), mappings="[4952 5047]")
#All other sorts of AA
Rfs(mt_merge(maa2(), mt_logic(mask, mt_lutspa(mode="asbolute", relative=false, expr="x 235 < y 310 > y 322 < & & 255 0 ?"), "and") , true), mappings="[1627 1653]")
mask = TColormask("$65574C", 10).mt_expand().mt_expand().mt_expand().mt_expand().mt_expand().mt_invert()
Rfs(mt_merge(maa2(), mask, true), mappings="[1654 1706] [1780 1826]")
Rfs(mt_merge(xaa(mode="sr eedi3"), Hiaa(aa="eedi3", mthr=10), mask, true).LSFMod(strength=20), mappings="[2091 2174]")
mask = TCannyMod(sigma=2.5, t_h=16.0, t_l=8.0).mt_inflate().mt_expand()
Rfs(mt_merge(maa2(), mask, true), mappings="[2175 2264]")
Rfs(mocompAA(), mappings="[4182 4925] [32266 32597]")
Rfs(mocompAA(Sangnom2AA()), mappings="[2949 3015] [17821 17939]")
Rfs(xaa(mode="sr1 eedi3", csharp=2, cstr=-0.1), mappings="[2265 2347] [2595 2875] [3404 3469] [3608 3824] [3967 4181] [4433 4554] [4611 4735] [4880 4951] [4952 5047] [5048 5362] [5416 5463] [5500 5889] [5950 6075] [6225 6296] [6319 6339] [6369 6497] [6558 6748] [6891 7093] [7220 7381] [8201 8447] [8873 9202] [9281 9496] [9568 9675] [9748 9794] [9933 10077] [10462 11114] [11175 11350] [11573 11715] [11986 12123] [12280 12596] [12813 12896] [13041 13196] [13248 13663] [14206 14277] [16349 16413] [16738 16773] [17271 17580] [17689 17820] [17941 18162] [18522 18670] [19018 19167] [19234 19694] [19911 19952] [20073 20125] [20247 20318] [20462 20695] [20816 20887] [21338 21517] [21646 21717] [22238 22322] [22486 22545] [22684 22767] [22951 23138] [23192 23288] [23583 23791] [24312 24396] [24929 25073] [25661 25829] [26557 26688] [26772 26914] [28629 28724] [29101 29352] [29491 29584] [30377 30495]")
Rfs(xaa(mode="sr2 eedi3", csharp=2, cstr=-0.25), mappings="[3356 3403] [3479 3529] [30897 31025]")
Rfs(xaa(mode="sr3 eedi3", csharp=2, cstr=-0.25), mappings="[4555 4610]")
mask = mt_logic(mt_lutspa(mode="asbolute", relative=false, expr="x 0 >= x 400 < & 255 0 ?"), mt_binarize(160).mt_expand().mt_expand().mt_expand().mt_expand().mt_expand().mt_expand().mt_expand().mt_expand(), mode="and").ExtractY()
Rfs(mt_merge(xaa(mode="sr2 eedi3"), mask, true, u=3, v=3), mappings="[31026 31043]")
Rfs(mt_merge(FreezeFrame(31028, 31028, 31027), mt_lutspa(mode="asbolute", relative=false, expr="x 105 > x 143 < y 465 > y 478 < & & & 255 0 ?"), true, u=3, v=3), mappings="31028")
Rfs(mt_merge(FreezeFrame(31030, 31030, 31031), mt_lutspa(mode="asbolute", relative=false, expr="y 448 < 255 0 ?"), true, u=3, v=3), mappings="31030")
mask = TCannyMod(sigma=0.7, t_h=20.0, t_l=19.9).mt_inflate().mt_expand()
Rfs(mt_merge(xaa(mode="sr2 eedi3"), mask, true), mappings="[3825 3966]")
Rfs(mt_merge(Sangnom2().xaa(mode="sr eedi3", mthr=2), last, ImageSource(path+"SourceMask5363-5415.png").ConvertToYV12(matrix="Rec709"), u=3, v=3, luma=true), mappings="[5363 5415]")
Rfs(mt_merge(maa2().maa2(), ImageSource(path+"maa2Mask8071-8118.png").ConvertToYV12(matrix="Rec709"), u=3, v=3, luma=true), mappings="[8071 8118]")
function Sangnom2AA(clip c, float "thr"){
thr = Default(thr, 8)
c.Sangnom2()
Dither_convert_8_to_16()
Dither_limit_dif16(c.Dither_convert_8_to_16(), thr=thr, elast=3.00, y=3, u=3, v=3)
ditherpost()
return xaa(mode="sr1 eedi3", csharp=2, cstr=-0.25)
}
Rfs(Sangnom2AA(), mappings="[3016 3104] [5464 5499] [5890 5949] [6076 6219] [6340 6368] [6749 6890] [7094 7219] [7382 7518] [8119 8201] [9497 9567] [11115 11174] [11351 11509] [13197 13244] [16109 16216] [16971 17095] [17581 17688] [18797 19017] [19168 19233] [19695 19790] [20319 20401] [21110 21337] [21578 21645] [21718 21895] [22161 22237] [22323 22447] [23361 23504] [23792 23820] [24014 24150] [24271 24311] [24397 24461] [24612 24779] [25530 25588] [26027 26103] [28006 28076] [28347 28449]")
Rfs(Sangnom2AA().xaa(mode="sr1 eedi3", csharp=2, cstr=-0.25).xaa(mode="sr1 eedi3", csharp=2, cstr=-0.25), mappings="[7519 7662]")
Rfs(Sangnom2AA(thr=1).HiAA(aa="eedi3+sangnom2", mthr=50), mappings="[6498 6557]")
#Scene 7382 - 7518
#>mfw all my efforts on making this scene were defeated by a sinlge function call
Rfs(mt_merge(src, ImageSource(path+"SourceMask7382-7518v2.png").ConvertToYV12(matrix="Rec709")), mappings="[7382 7518]")
Rfs(mt_merge(src.xaa(mode="sr2 eedi2", mask=0, uscl="nnedi3", mthr=8, csharp=2, cstr=-2.0), ImageSource(path+"eedi2Mask7382-7518v2.png").ConvertToYV12(matrix="Rec709"), true, u=3, v=3), mappings="[7382 7518]")
Rfs(mt_merge(src.xaa(mode="sr2 eedi3", uscl="nnedi3"), ImageSource(path+"eedi3TwoPassMask7382-7518.png").ConvertToYV12(matrix="Rec709"), true, u=3, v=3), mappings="[7382 7518]")
Rfs(mt_merge(src, ImageSource(path+"SourceMaskMouth.png").ConvertToYV12(matrix="Rec709"), true, u=3, v=3), mappings="[7388 7390] [7397 7399] [7403 7405] [7418 7420] [7427 7429] [7433 7435] [7439 7441] [7445 7447] [7454 7456] [7463 7465] [7469 7471] [7481 7483] [7487 7489] [7493 7495] [7505 7507] [7511 7513]")
#delet this
#AA_mask = TCannyMod(sigma=0.7).mt_expand().mt_expand()
#Rfs(xaa(mode="sr3 eedi3", mask=0, mtype="TEMMod", uscl="nnedi3", eediA=0.1, mthr=8, csharp=2, cstr=-2.0), mappings="[7382 7518]")
#Rfs(mt_merge(last, src, ImageSource(path+"SourceMask7382-7518.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7382 7518]")
#Rfs(mt_merge(src.xaa(mode="sr2 eedi2", mask=0, uscl="nnedi3", mthr=8, csharp=2, cstr=-2.0), ImageSource(path+"eedi2Mask7382-7518.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7382 7518]")
#Rfs(mt_merge(src.xaa(mode="sr5 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8, csharp=2, cstr=-0.5), ImageSource(path+"eedi3FivePassMask7382-7518.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7382 7518]")
#Rfs(mt_merge(src.xaa(mode="sr3 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8), ImageSource(path+"eedi3NoSharpMask7388-7390.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7388 7390]")
#Rfs(mt_merge(src.xaa(mode="sr3 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8), ImageSource(path+"eedi3NoSharpMask7391-7393.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7391 7393]")
#Rfs(mt_merge(src.xaa(mode="sr3 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8), ImageSource(path+"eedi3NoSharpMask7394-7396.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7394 7396]")
#Rfs(mt_merge(src.xaa(mode="sr3 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8), ImageSource(path+"eedi3NoSharpMask7397-7399.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7397 7399]")
#Rfs(mt_merge(src.xaa(mode="sr3 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8), ImageSource(path+"eedi3NoSharpMask7400-7518.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7400 7518]")
#Rfs(mt_merge(src.xaa(mode="sr5 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8, csharp=2, cstr=-0.5), ImageSource(path+"eedi3FivePassMask7391-7393.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7391 7393]")
#Rfs(mt_merge(src.xaa(mode="sr5 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8, csharp=2, cstr=-0.5), ImageSource(path+"eedi3FivePassMask7394-7396.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7394 7396]")
#Rfs(mt_merge(src.xaa(mode="sr5 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8, csharp=2, cstr=-0.5), ImageSource(path+"eedi3FivePassMask7397-7399.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7397 7399]")
#Rfs(mt_merge(src.xaa(mode="sr5 eedi3", mask=0, uscl="nnedi3", eediA=0.1, mthr=8, csharp=2, cstr=-0.5), ImageSource(path+"eedi3FivePassMask7400-7518.png").ConvertToYV12(matrix="Rec709"), u=3, v=3), mappings="[7400 7518]")
#Rfs(mt_merge(src, last, AA_mask), mappings="[7382 7518]")
#:KAIJITHINK:
Rfs(xaa(mode="sr4 nnedi3"), mappings="[0 11] [30499 30502] [30516 30519] [30534 30537]") #Fix whatever Vinverse couldn't fix
Rfs(YAHRMask(), mappings="[1910 2090] [2091 2174] [5129 5362] [7382 7518] [8071 8118] [31274 31295]") #Dehaloing will be done in VS next time. I was just being lazy and didn't want to port YAHRMask.
Rfs(Vinverse(), mappings="123 124 [31274 31305] [31851 31929]") #mfw forgot to vinverse ED in VS
import vapoursynth as vs
import scoll
import blazefunc as bf
import havsfunc as havf
import nnedi3_resample as nnrs
core = vs.core
src = core.lsmas.LWLibavSource(r"C:\Anime Encoding\Kaiji\Gyakkyou Burai Kaiji Ultimate Survivor\KAIJI_1\VIDEO_TS\EP 01\Kaiji - EP01 LosslessAA.mkv")
src = core.fmtc.resample(src, csp=vs.YUV444P16)
ref = core.dfttest.DFTTest(src, sigma=8)
#Why did I use BM3D directly instead of using mvsfunc? Just felt like it.
bm3d_low = core.bm3d.Final(src, ref=ref, sigma=[0.8,0.3,0.3])
bm3d_med = core.bm3d.Final(src, ref=ref, sigma=[1.8,0.3,0.3])
smdegrain_high = havf.SMDegrain(src, thSAD=600)
smdegrain_med = havf.SMDegrain(src, thSAD=250)
smdegrain_low = havf.SMDegrain(src, thSAD=96)
src = core.remap.Rfs(src, bm3d_low, mappings="[1195 1359] [1492 1831] [2655 2858] [3470 3529] [3608 3672] [3823 3966] [4880 4951] [5129 5463] [5625 5853] [5890 6267] [6319 6368] [6456 6557] [6749 6890] [7035 7093] [7201 7662] [8119 8381] [9089 9567] [9748 9794] [9933 10077] [10671 11066] [11115 11174] [11351 11518] [11519 11715] [11986 12452] [12549 12896] [13041 13365] [13407 13663] [14064 14277] [14500 14624] [15067 15209] [15371 15520] [15749 15892] [16349 16413] [16738 16773] [16905 17095] [17271 17820] [18132 18162] [18522 18586] [19234 19502] [19635 19694] [19911 19952] [20073 20125] [20319 20401] [20647 20695] [20696 20815] [21819 21895] [22238 22322] [22486 22554] [22684 22767] [23001 23138] [23583 23690] [24014 24150] [24929 25073] [25530 25588] [25661 26103] [26308 26499] [26557 28454] [28813 28884] [29101 29352] [29491 30052] [30377 30495] [30726 30878] [32598 32850]")
src = core.remap.Rfs(src, bm3d_med, mappings="[123 193] [300 667] [723 781] [782 833] [1028 1190] [1396 1491] [1832 1868] [3356 3403] [9795 9932] [23691 23727] [30549 30595] [30897 31027] [31058 32597]")
src = core.remap.Rfs(src, smdegrain_high, mappings="[1408 1409]")
src = core.remap.Rfs(src, smdegrain_med, mappings="[24014 24150] [24612 24779]")
src = core.remap.Rfs(src, smdegrain_low, mappings="[2091 2461] [2859 2894] [2949 3355] [3404 3469] [3530 3607] [3673 3822] [3967 4181] [4296 4735] [4952 5128] [5500 5624] [6268 6318] [6369 6455] [6558 6748] [6891 6985] [7094 7200] [7720 7733] [8071 8118] [8382 9088] [9568 9747] [10078 10670] [11067 11114] [11716 11985] [13990 14062] [14775 14965] [22864 23000] [23139 23582] [23733 24013] [24312 24611] [24780 24928] [25074 25529] [25589 25660] [26104 26307] [26500 26556] [28551 28812] [28885 29100] [29353 29490] [30053 30376] [30499 30548] [30596 30646] [32851 32958]")
src = core.fmtc.resample(src, csp=vs.YUV420P16)
src = core.fmtc.bitdepth(src, bits=8)
src = core.remap.Rfs(src, core.vinverse.Vinverse(src), mappings="[1333 1359] [13366 13388] [30827 30886]")
src = core.remap.Rfs(src, bf.sangnom2AA(src), mappings="[6498 6557] [30419 30459]")
src = core.remap.Rfs(src, scoll.edgecleaner(src), mappings="[1396 1491] [1654 1706] [1780 1826] [2655 2948] [4736 4807] [6228 6267] [7729 7782] [8119 8381] [9933 10077] [12897 13406] [14064 14277] [15749 15892] [31029 32597] [0 193] [300 1194]")
src = core.fmtc.bitdepth(src, bits=16)
#The correct resolution according to the AR would be around 844x478, but I went with 848x480 because
#there's a very teeny-tiny difference between the two and the latter is a more standard one.
src = nnrs.nnedi3_resample(src, 848, 480)
no_deband = src
#Why didn't I mask while debanding? I didn't need to.
src = core.f3kdb.Deband(src, y=24, cb=16, cr=16, grainy=24, grainc=12, output_depth=10)
med_deband = core.f3kdb.Deband(no_deband, y=48, cb=24, cr=24, grainy=40, grainc=16, output_depth=10)
high_deband = core.f3kdb.Deband(no_deband, y=72, cb=36, cr=36, grainy=60, grainc=32, output_depth=10)
random_grain = core.f3kdb.Deband(no_deband, y=32, cb=36, cr=36, grainy=120, grainc=64, output_depth=10, dynamic_grain=True)
src = core.remap.Rfs(src, med_deband, mappings="[1869 1911] [3395 3403] [6220 6228] [11597 11715] [11986 12062] [12280 12452] [12813 12896]")
src = core.remap.Rfs(src, high_deband, mappings="[3481 3529] [3608 3672] [9748 9794] [9933 10077] [10462 10802] [11573 11596] [12126 12279] [13407 13466] [22768 22863] [29927 30052]")
src = core.remap.Rfs(src, random_grain, mappings="[31869 31926] [123 193] [300 667] [723 781]")
src = core.remap.Rfs(src, core.grain.Add(src, 5.0, 0, 0.3, 0.3), mappings="[782 833]")
src = core.remap.Rfs(src, core.grain.Add(src, 1.0, 0, 0.3, 0.3), mappings="[1028 1141]")
src = core.remap.Rfs(src, no_deband.fmtc.bitdepth(bits=10), mappings="[1396 1491] [2091 2174] [2462 2654] [2727 2875] [3016 3391] [4880 4951] [4952 5463] [5890 5949] [6196 6219] [11519 11572] [13857 14062]")
src.set_output()
import vapoursynth as vs
import havsfunc as havf
import mt_lutspa
import scoll
import kagefunc as kgf
import vsTAAmbk as taa
import blazefunc as bf
core = vs.core
#This is the basic workflow:
#1. Vapoursynth IVTC + PP on interlacing artefacts -> Create lossless file (#1)
#2. Load lossless file (#1) in Avisynth. Perform AA in Avisynth because eedi3 is lolslow in VS -> Create AAed lossless file (#2). Delete Lossless file #1.
#3. Load lossless file (#2) in Vapoursynth. Do whatever you want to do.
#4. Encode with your favourite encoder.
#5. ???
#6. Profit
#Load Telecined Video (Files: VTS_01_1.VOB + VTS_01_2.VOB)
src = core.d2v.Source(r'C:/Anime Encoding/Kaiji/Gyakkyou Burai Kaiji Ultimate Survivor/KAIJI_1/VIDEO_TS/EP 01/EP01.d2v')[0:41028]
telecined = src
#Field Matching
src = core.fh.FieldHint(clip=src, tff=1, matches='ccccccccccccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnccccnncccccnnncccnncccnncccnncccnnccnnnccnnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnnccccncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnnccnnncccnncccnncccnnccnnncccnnccnnncccnncccnnccncccccccncccccccccccccccccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnncccccnncccnncccnnccnnnccnnncccnnccnnnccnnncccnncccnncccnncccnnccnnnccnnnccccccnncccnncccnnccnnncccnncccnnccnnnccnnncccnnccnnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnnccnnncccnncccnncnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnncccnnccnnccccnncccnncccnnccccbccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnnccccccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnnncnnncncnnccccnccnnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnnccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnnccnnncccnncccnncccnncccnncccccnccnncccnccccnccccnccccnccccnnccccncccnncccnncccnccccnncccnncccbccccccccccbcccbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnnccnnnccnnnccnnncccnnccnnnccnnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnnccnnnccnnncccnnccnnnccnnnccnnnccnnnccnnnccnnnccnnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnccccccccccnnccnccccccccccncccccccccccccccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccccccccnnccccnccccncccccccccncccncccccccccccccccccccccccccccccnncccnncccnnncccccccnccccnncccnncccnncccnncccnnccccccnccnnnccncncccccccccncccncccnncccnnbccnncccnncccnnbccnnccccnnccnnncccnncccnnccnnncccnncccnnccnnncccnnccnnnccnnnccnnncccnnccnnnccnnnccnnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnccccccccncnccncnncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnncccnnccnnnccnnnccnnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnnccnnnccnnncccnncccnncccnncccbcccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccnccccccccccccccnncccnnccnnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnnccnnncccnncccccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnnccnnccccccccccncncncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnncccccccncccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnccccccccccccccccccccccccccccccccccccccccnnccnccccccccccnnccncccccccccnncccnccccccccccncccnccccccccccnccnncccccccccnncccnncccccccccncccnccccccccccncccncccccccccnnccnnccccccccccnnnnncnbncccnncncnnnccbncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnnccnnncccnnccnnnccnnncccnncccnncccnnccnnnccnnnccnnncccnnccnnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccnccccncccnccccnncccnnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccccccccnnccnncccccncccnncccnccccccccccccccccccccccccccccccccccccccccnccccnccccnccccnccccnccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccccccccncccccccccccccccccccccnccnnccccncccnncccccccncccccccncccnccccccccccncccnncccccccccnnccnccccccccccnccccncccccccccncccnccccccccccnccccccccccccccncccncccccccccccnncccnncccnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccccnccccccccccccccccccnnccccccccccccccccccnncccccccccnccccncncccccccccccccccccccccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccccccccccccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccccccccccccccccccccncccnccccccccccnccccncccccccccncccnccccccccccnccccccccnncccnccccnncccnccccnncccnncccnncccnncccnncccccccccncccnccccccccccncccnccccccccccncccnccccnncccnncccnccccccccccncccnccccccccccncccnncccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnncccnncccnncccnncccncccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccncccnncccnnccccnccccncccnccccccccccncccnccccccccccncccncccccncccnnnccnccccnncccnncccnccccccccccncccnccccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccbcccccccnnncccnccccccccccncccnccccccccccnccnnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnnccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccncccccnnccnccccnccccnncccncccccccccccccccccccccccccccccccnccccnccccccccccccccccccccccccccccccccccccccccccccccccnccccncccnnccccnccccnnccccnccccncccnccccccccccncccnccccccccccncccncccccccccnncccnccccccccccncccnccccccccccncccnccccccccccncncnccccccccccncccncccccccccccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnnccnnncccnnccnnncccnncccnnccnnncccnnccnnnccnnnccnnnccnnncccnncccnncccnncccnnccnnncccnncccnncccnncccnnccnnnccnnnccnnnccnnnccnnncccnnccnnncccnnccnnnccnnncccnnccnnnccnnncccnnccnnnccnnncccnncccnnccnnncccnnccnnnccnnncccnnccnccccccccccccccncccccccccnccccnccccncccccccccnccccccccccccccnccccccccccccccccccccccccccccccccccncccccccccccccccccccnccccccccccccnccccccccccccccccccccccccccccccccccncccccccccccccccnccccccccccccccccccccccccccccccccccccccccccccccccncccnccncccccccccccncccccccccnncccncccccccccnncccnccccccccccccccccccccccccccccccccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccncccccccccnncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnccccccccccncccnccccccccccncccncccccccccnncccnccccccccccncccncccccccccnncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccccccccnncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccnccccccccccccccncccncccccccccnncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccncccccccccnncccnnccnnccccnncccnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnnccccnccccncccccccccccccnncccnncccnnccccnccccncccnncccnnccccccncccnnccccnccccccccnccccnncccnnccnnncccnnccccccccnnccnnccccccccccncccnccccccccccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccccccccccccccccccccccncccnnccnnnccnnncccnnccnnnccnnnccnnccccccccccccccccccccncccnnnccnnccnnncccnncccnnccccnccccncccnnccccccncccnnccccncccccccnncccnncccnnccnnnnccnnncccccccccccccccccccccccccccccccccccccccnnccnnncccnncccnnccnnncccnnccnnncccnnccnnncccnncccnnccnnncccccncccnncccnncccnncccnccccccccccnccccccccccccccccnccccnccccncncncccccncncnccccccccccnccnnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccnccccncccnncccnnccccncccccccccccccncccccccccnccccnccccccccccncccncccccccccnncccnccccnccccccccccccccccccccnccccncccccccccncccnccccccccccncccnccccccccccncccncccccncccccccccccccccccccncccncccccccccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnnccnnnccnnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnnccnnnccnnncccnnccnnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccnccccccccccccccccccccccccccccccccccccccccccccnccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnccccccccccnccccncccnccccnccccncccccccccccccccccncccnncccnncccnncccnccccnncccnccccnncccnnccccncccnncccnncccnncccnncccnncccnncccnncccnccccnncccnncccnccccnncccnncccnncccnncccnncccnncccnncccnncccnccccnncccnncccnccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccbccccccccnnncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccncccnnncccnccccnccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccncccccnccccncccnncccccccccnnccncccccncccnncccnccccccccccncccncccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccncccnccccccccccncccnccccccccccccccccccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccccccccccccccccccccccccncccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnnccccncccncccccccccccccccccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccnnccnnnccnnncccnncccnncccnncccnncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnnccnnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnnccnnncccnncccccccccncccnccccccccccncccnccccccccccncccncccccncccnncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccncccccncccnccccccccccncccncccccncccccccccccccccccccncccnccccccccccncccncccccccccnncccnncccnncccnccccccccccncccnnccccnccccncccncccccncccccccccncccnccccnnccccncccnncccncccccncccnccccccccccncccnccccccccccccccccccccncccccccccncccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccncccccccccccccccnccccncccnnccccncccnncccnncccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccnccccnccccnccccnccccncccnncccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnnccccccccnncccnncccnccccnncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccccccccccccccccccccccccccccccccnccccccccccccccnccccccccccncccnccccccccccncccnccccccccccccccnccccccccccncccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccccccnccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccncccccnccccncccnccccccccccccnccccncccccccccccccccccccccccccccccncccnccccccccccncccncccccccccnncccnccccccccccncccnccccccccccncccnccccccccccncccnncccnncccnncccnncccnncccnncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccccccccccccccccccccccccccccccccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccnccccccccccncccccccccccccccccccccncccnccccccccccncccncccccccccnncccnccccccccccncccnccccccccccncccnccccccccccncccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccnccccnccccncccnccccccccccccccnccccnncccnncccnncccnnccnnncccnnccnnncccnnccnnnccnnnccnnncccnnccnnncccnnccnnnccnnnccnnnccnnnccnnnccnnncccnnccnnnccnnncccnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnnnccnnnccnnnccnnnccnnnccnnncccnnccnnnccnnnccnnnccnnnccnnncccnncccnncccnncccnnccnnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnnccnnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccccncccnncccncccccncccnncccncccccncccncccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnnccnnnccnnncccnncccnncccnncccnnccnnncccnncccnncccnnccnnnccnnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccbcccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccccccccncccnncccncccccncccnccccccccccncccncccccccccccnncccnncccnncccnncccnncccnncccnncccnncccncccccccccccccccccccccccccccccccccccccccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnbcncccccncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnncccnnccnnncccnnccnnnccnnncccnnccnnncccnncccnnccnnnccnnncccnnccnnnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncnccnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccncccncccccccccnncccncccccccccccccccccccccccccccccccccccccccccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnnccnnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnnccnnnccnnncccnncccbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnnccnbcccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccccccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccnccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnnccnnnccnnnccnnnccnnncccnncccnnccnnncccnncccnnccnnncccnnccnnnccnnncccnnccnnnccnnncccnnccnnnccnbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccnncccnncccnncccnncccnnccnnncccnncccnnccnnnccnnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnnccnnnccnnncccnnccnnnccnnnccnnnccnnnccnnncccnnccnnnccnnncccnnccnnnccnnnccnnnccnnncccnnccnnnccnnnccnnncccnnccnnnccnnnccnnnccnnnccnnbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccccccccccccccccccncccccccccccccccccccnccccncccccccccccccccccccccccccccccccccccccccccccccccccnccccnbcccnnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccccncccnnccccccccnccccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccccccccnccccccccccccccccccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccncccccccccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccnccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccnccccnccccncccnncccnccccnccccnccccnccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccccncccnncccnncccnncccnncccnncccnncccnnccccccccccccccccccccccccccccccccccccccccccccnccccnccnccccccnccccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccnccccnccccnccccncccnccccccccccncccnccccccccccnccccnccccccccccccccccccccccccccccccccccnccccnccccccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccncccccccccnccccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccccccccnccccccccccccccccccnccccccccccncccnccccccccccncccnccccccccccncccccccccccccccccccccccccccccccccncccccccccncccccncccccccccncccnnccccccccccccccccncccncccccccccnccccnccccnccccnccccnccccncccccnccccncccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccnccccncccnncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnnccnnnccnnnccnnncccnncccnncccnncccnnccnnncccnncccccccccncccncccccnccccnccccnccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccncccccccccnncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncncccccccccccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccnccccccccccccccccccccccccccccccccccccccnnccnnncccnncccnnccnnnccnnncccnnccnnncccnnccnnncccnncccnnccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccnncccnncccnncccnncccnncccnncccccccccncccnccccccccccnccccccccccccccncccnccccccccccccccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccnccccncccnncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccncccccccccnnccccccccccccccncccnccccccccccncccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnnccnnncccnnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccncccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccbcnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnncccccccccncccnccccccccccncccnccccccccccncccncccccccccnncccnccccccccccccccccccccccccccnnccnnnccnnnccnnnccnnnccnnncccnnccnnnccnnnccnnncccnnccnnnccnnnccnnncccnncccnncccnnccnnncccccccccncccncccccccccccccccccccccccccccccnccccccccccncccnccccccccccncccncccccccccccccccccncccncccccccncnncccncccccccccnncccnccccccccccncccncccccccncccnncccnnccnnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnnccnnnccnnncccnnccnnnccnnnccccccccnncccnccccccccccncccnccccccccccncccncccccccccnncccnccccccccccncccnccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnccccccccccncccncccccccnccncccnccccccccccncccncccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccccccccnccccnncccnccnnncccnncccnnccnnnccnnncccnncccnncccnncccnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnnccnnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnnccnnnccnnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnnccnnncccnncccnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccnncccccccccnncccnccccccccccncccnccccccccccncccnncccccccccnccccncccccccccnccccnccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnnccccccccnncccncccccnccccncccnncccnnccccncccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnnccnnnccnnnccnnncccnncccnncccnnccnnnccnnnccnnnccnnnccnnnccnnncccnnccnnnccnnnccnnnccnnnccnnnccnnncccnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnncccnnccnnncccnncccnncccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccccccccncccncccccccccnncccnccccccccccncccncccccccccnncccnccccccccccncccnccccccccccncccncccccccccnncccnccccccccccncccncccccccccnncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnncccccccccncccnccccccccccncccnccccccccccncccncccccccccnncccncccccccccnncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccncccccncccnncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnnccnnnccnnnccnnnccnnnccnnnccnnncccnnccnnnccnnnccnnnccnnncccnnccnnnccnnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccccnccccnccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccnccccnccccnccccccccnnccccnccccnccccccccccccccccccncccccccccnncccnccccccccccncccccccccccccnncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnnccnnncccnncccnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccccccccncccncccccccccnncccncccccccccnncccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnccccccccccncccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnncccnnccnnnccnnncccnncccnncccnnccnnnccnnncccnncccnncccnnccccnnccnnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccncccccccncccccccccccccccccncccnccccccccccncccncccccccccnncccnccccccccccnccccccccccccccccncccnnccccccncccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccnccnnccccccccccccccccccnnccnnncccnncccnncccnncccnnccnnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccccccccccncccncccnncccccncccncccccccccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccncccncccccncccnnccnnncccccccccccccccccnnnncccnccnnncncccccccncccnccccccccccnccccccccccccccccccccccccccccccccccccccccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccnccccccccccccccncccnccccccccccncccncccccncccnnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccccccccccccccccccccccccccccccccncccnccccccccccnccccccccccccccccccccccccccccccccccccccccccccncccncccncccccnncccnccccccccccncccnccccccccccncccncccccccccccccccccccnnccnnncccnnccnnnccnnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccccncccnccccccccccncccncccccccccccccccccccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccnccnnccccccccccncccnccccccccccccccccccccccccccccccccccccccccncccnccccccccccncccnccccccccccccccnccccccccccncccnccccccccccccccccccnnnccnnnccnnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnnccnnnccnnncccnncccnncccnncccnncccnnccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccnccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncncnccccccccccncccnncccccccccccccncccccccccccccccncccnccccccccccncccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnncccnncccnnccnnnccnnnccnnnccnnncccnncccnncccnnccnnncccnncccccccccncccncccccccccccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnnccnnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnnccnnnccnnnccnnnccnnnccnnnccnnnccnnnccnnnccnnnccnnncccnnccnnnccnnnccnnnccnnnccnnncccnnccnnncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccnccccnccccnccccnnnccccccccccccccccccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnccccccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnbcnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnncccnncccnnccnnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnnccnnnccnnnccnnncccnnccnnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnncccnncccnnccnnncccnnccnnnccnnnccnnnccnnnccnnncccnncccnnccnnncccnncccnnccnnnccnnncccnnccnnncccnncccnnccnnnccnnncccnnccnnncccnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnncccbcccccccncccnccccccccccncccncccccccccccccccccncccnccccccccccncccnccccccccccncccnccccccccccncccccccccccnccnccnncccccccccccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnncccnncccnnccnnncccnnccnnncccnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnnccnnnccnnnccnnnccnnnccnnnccnnnccnnncccnnccnnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnncccnnccnnnccnnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnnccnnnccnnnccnnnccnnncccbcnnccnnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnncccnnccnnnccnnncccnnccnnnccnnncccnnccnnnccnnncccnnccnnncccbcnnccnnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnnccnnnccnnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnnccnnncccnncccnnccnnnccnnncccnnccnnnccnnncccnnccnnnccnnncccnnccnnnccnnncccccccccncccnccccccccccncccnccccccccccncccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccncccnccccccccccnccccnccccnccccccccccccccccccnncccnnccnnncccbccccccnncccnnccnnncccbccccccnncccnncccnncccbnncccnnccnnnccnnncccnncccnncccnncccnnccnnncccnncccnnbnccnnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnnccnnnccnnncccnnccccccccccnncccnnccnnncccnncccnnccnnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnnccnnncccnncccnncccnncccnncccnncccccccccncccnccccccccccncccncccccnccccccccccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnncccnnccnnnccnnnccnnnccnnncccnncccnncccnnccnnnccnnncccnnccnnncccnnccnnncccnnccnnnccnnncccnncccnnccnnnccnnnccnnncccnnccnnncccnnccnnncccnnccnnnccnnnccnnncccnnccnnnccnnncccnncccnncccnnccnnnccnnncccnncccnnccnnncccnncccnnccnnnccnnnccnnncccnncccnncccnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnncnnnccccncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnnccnnnccnnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnnccnnncccnncccnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnnccnnncccnncccnncccnnccnnncccnnccnnncccnnccnnncccnnccnnnccnnnccnnnccnnncccnncccnncccnncccnncccnncccnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnnccnnncccnncccnncccnnccnnnccnnncccnnccnnncccnnccccnnccccccccccccccncccccccccccccnccccccccccccccccccccccccccccccnccccccccccccccnccccccccncncccccccccnncccnncccnnccnnncccnncccnnccnnncccnncccnncccnncccnncccnnccnnncccnnccnnncccnncnccnnncccnncccnnccnnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncccnnccnncccncccnnccccccncccccccncccccccccccccccccccccccccccncnccnnccccccccccncccccccccccccccccncccnccccccccccncccnccccccccccncccncccccncccnnccnnccccnnccccnccncnccnncccccnnccccnncccnncccnnccnnnccnnncccnncccnncccnncccnncccnncccnnccnnnccnnnccnnncccnnccnnncccnnccnnnccnnncccnncccnnccnnnccnnncccnncnccncccccccccnccccccccccccccccccccccccccccccc')
src = core.std.FreezeFrames(src, 38110, 38110, 38111)
#VFR Ranges
r30 = core.std.AssumeFPS(clip=src, fpsnum=30000, fpsden=1001)
r24 = core.std.AssumeFPS(clip=src, fpsnum=24000, fpsden=1001)
r12 = core.std.AssumeFPS(clip=src, fpsnum=12000, fpsden=1001)
src = core.std.Splice(mismatch=True, clips=[r24[0:1375],r30[1375:1635],r24[1635:1890],r30[1890:1980],r24[1980:2445],r12[2445:2460],r24[2460:3605],r30[3605:3670],r24[3670:8345],r30[8345:8480],r24[8480:10085],r30[10085:10115],r24[10115:11825],r30[11825:11930],r24[11930:19055],r30[19055:19200],r24[19200:41028],])
undecimated = src
#Decimation
src = core.std.DeleteFrames(clip=src, frames=[0,7,14,19,24,29,34,39,44,49,54,59,64,69,74,79,84,89,94,99,104,109,114,119,124,129,134,139,142,146,153,157,162,167,172,177,182,187,192,197,202,207,212,217,222,227,232,237,244,245,252,257,262,267,272,277,282,287,292,297,302,307,312,317,322,327,332,337,342,347,350,358,360,367,374,377,382,387,392,397,402,407,412,417,422,427,432,437,442,447,452,457,462,469,474,479,484,489,494,499,504,509,514,519,524,525,534,539,542,545,552,557,562,567,572,577,582,587,592,597,602,607,610,617,622,627,632,637,642,647,652,657,662,667,672,677,680,685,690,695,700,705,710,715,720,725,730,735,740,745,750,755,760,765,770,775,780,785,790,795,800,805,810,815,820,825,833,835,844,849,854,859,864,868,873,878,883,888,893,899,904,909,914,919,924,929,934,939,944,949,954,959,964,969,974,977,982,987,992,997,1002,1007,1012,1017,1022,1027,1034,1039,1042,1047,1052,1057,1062,1067,1072,1077,1082,1087,1092,1097,1102,1107,1112,1117,1123,1127,1132,1137,1142,1147,1152,1157,1162,1167,1172,1177,1182,1187,1192,1197,1202,1209,1214,1219,1224,1229,1234,1239,1244,1249,1254,1259,1264,1269,1274,1279,1284,1289,1294,1299,1304,1309,1310,1319,1323,1328,1333,1338,1344,1349,1354,1359,1363,1369,1374,1638,1643,1648,1653,1658,1663,1668,1673,1678,1683,1688,1693,1698,1703,1708,1713,1718,1723,1728,1733,1738,1743,1748,1753,1758,1763,1768,1773,1778,1783,1788,1793,1798,1802,1807,1812,1817,1822,1827,1832,1837,1842,1847,1852,1857,1862,1867,1872,1877,1882,1887,1981,1986,1991,1998,2003,2007,2013,2019,2023,2028,2033,2036,2043,2046,2050,2055,2060,2065,2070,2075,2080,2085,2090,2095,2100,2105,2110,2115,2120,2125,2130,2138,2140,2145,2150,2155,2163,2169,2173,2175,2183,2185,2190,2195,2200,2205,2214,2215,2220,2225,2230,2235,2240,2245,2250,2257,2260,2267,2270,2278,2280,2285,2290,2295,2300,2305,2311,2316,2321,2326,2331,2336,2341,2346,2351,2356,2361,2366,2371,2376,2381,2386,2391,2396,2401,2406,2411,2416,2421,2426,2431,2436,2441,2445,2446,2448,2450,2451,2453,2455,2456,2457,2461,2466,2471,2476,2481,2486,2491,2496,2501,2506,2511,2516,2521,2526,2531,2536,2541,2546,2551,2556,2561,2566,2571,2576,2581,2586,2591,2596,2601,2606,2611,2616,2621,2626,2631,2636,2642,2647,2652,2657,2662,2667,2672,2677,2682,2687,2692,2697,2702,2707,2712,2717,2722,2727,2732,2737,2742,2747,2752,2759,2762,2769,2772,2777,2784,2789,2794,2799,2804,2809,2814,2819,2823,2825,2832,2838,2843,2849,2854,2855,2864,2869,2874,2879,2884,2889,2894,2899,2904,2909,2914,2919,2924,2929,2934,2939,2944,2949,2954,2959,2964,2969,2974,2979,2984,2989,2994,2997,3001,3006,3011,3016,3021,3026,3031,3036,3041,3046,3051,3059,3061,3068,3074,3076,3081,3089,3091,3099,3104,3106,3111,3119,3121,3126,3134,3138,3144,3149,3151,3156,3163,3166,3171,3176,3181,3186,3191,3196,3201,3206,3211,3215,3223,3226,3234,3239,3241,3249,3250,3256,3264,3265,3271,3276,3281,3286,3291,3299,3301,3309,3314,3316,3321,3329,3331,3337,3344,3346,3352,3355,3361,3366,3370,3376,3381,3389,3391,3396,3404,3406,3411,3416,3421,3426,3430,3436,3441,3445,3451,3456,3460,3466,3471,3477,3484,3486,3494,3499,3504,3509,3514,3519,3524,3529,3534,3539,3544,3549,3554,3559,3564,3569,3574,3579,3584,3589,3594,3599,3604,3674,3679,3684,3689,3694,3699,3704,3706,3714,3719,3724,3729,3734,3739,3744,3749,3754,3759,3764,3769,3772,3779,3784,3788,3793,3798,3803,3808,3813,3818,3823,3828,3833,3838,3843,3848,3853,3858,3861,3868,3870,3875,3880,3885,3890,3898,3900,3908,3913,3915,3920,3925,3930,3935,3940,3945,3950,3955,3960,3965,3973,3975,3980,3988,3990,3995,4000,4005,4010,4018,4020,4025,4033,4035,4040,4048,4050,4055,4063,4065,4070,4078,4080,4085,4090,4098,4100,4105,4112,4116,4122,4127,4132,4135,4141,4147,4150,4157,4160,4165,4171,4179,4180,4187,4192,4195,4201,4207,4210,4217,4222,4225,4234,4235,4244,4249,4254,4259,4262,4267,4274,4277,4282,4289,4292,4297,4304,4307,4312,4317,4324,4328,4334,4339,4342,4349,4354,4357,4364,4367,4374,4379,4384,4389,4394,4397,4404,4407,4414,4419,4421,4429,4431,4439,4444,4446,4451,4459,4461,4466,4474,4476,4481,4485,4494,4496,4503,4507,4513,4516,4521,4528,4531,4537,4543,4548,4552,4558,4561,4565,4573,4578,4582,4588,4593,4597,4603,4608,4612,4618,4623,4627,4633,4638,4641,4648,4653,4657,4663,4668,4671,4678,4683,4685,4690,4699,4700,4705,4710,4715,4720,4729,4730,4738,4740,4745,4750,4755,4760,4765,4770,4775,4780,4788,4790,4795,4804,4805,4814,4818,4820,4825,4830,4835,4840,4845,4850,4855,4863,4865,4870,4875,4880,4885,4893,4895,4900,4905,4910,4915,4923,4925,4930,4935,4940,4945,4950,4958,4960,4968,4970,4975,4983,4985,4990,4998,5000,5005,5013,5015,5024,5026,5030,5035,5040,5045,5054,5058,5060,5065,5073,5075,5080,5085,5090,5099,5100,5105,5110,5118,5120,5129,5130,5135,5140,5145,5150,5155,5160,5165,5170,5175,5180,5185,5190,5195,5200,5205,5210,5215,5220,5225,5230,5235,5240,5245,5250,5255,5260,5265,5270,5279,5284,5288,5292,5299,5303,5307,5312,5318,5322,5329,5333,5337,5344,5348,5352,5359,5363,5367,5374,5378,5382,5389,5393,5397,5402,5408,5412,5417,5423,5427,5432,5438,5442,5447,5450,5457,5464,5468,5472,5479,5483,5487,5494,5498,5502,5509,5513,5517,5524,5528,5532,5539,5543,5547,5554,5556,5563,5567,5570,5578,5584,5588,5592,5598,5603,5608,5613,5615,5620,5628,5630,5638,5643,5648,5653,5658,5663,5668,5670,5675,5684,5685,5690,5695,5700,5709,5713,5715,5720,5728,5730,5735,5743,5747,5750,5758,5760,5765,5773,5775,5784,5788,5790,5797,5803,5805,5812,5815,5823,5827,5832,5837,5842,5847,5852,5857,5862,5867,5872,5877,5882,5887,5892,5897,5902,5907,5912,5917,5922,5927,5932,5937,5942,5947,5952,5957,5962,5967,5972,5977,5982,5987,5992,5997,6002,6007,6012,6017,6022,6027,6032,6037,6042,6047,6052,6057,6062,6067,6072,6077,6082,6087,6092,6095,6100,6105,6110,6115,6120,6125,6130,6135,6140,6145,6150,6155,6160,6165,6170,6175,6180,6185,6190,6195,6200,6205,6210,6217,6223,6225,6232,6239,6240,6246,6253,6258,6262,6267,6274,6277,6282,6285,6292,6297,6303,6307,6314,6316,6323,6327,6333,6336,6342,6348,6353,6357,6363,6368,6372,6378,6381,6386,6393,6396,6401,6408,6411,6417,6423,6426,6431,6438,6443,6447,6453,6458,6462,6468,6473,6477,6483,6488,6492,6498,6503,6505,6513,6518,6522,6528,6533,6537,6543,6546,6552,6558,6563,6567,6573,6576,6582,6588,6593,6598,6601,6608,6613,6618,6623,6628,6633,6638,6643,6648,6653,6658,6663,6668,6673,6675,6684,6687,6692,6695,6701,6707,6710,6715,6722,6727,6730,6735,6740,6745,6750,6755,6760,6765,6770,6775,6780,6787,6791,6797,6800,6806,6812,6817,6821,6827,6832,6836,6842,6847,6852,6857,6862,6867,6872,6875,6881,6887,6892,6896,6902,6905,6911,6917,6920,6925,6932,6935,6944,6948,6954,6959,6961,6969,6974,6977,6984,6987,6993,6999,7004,7007,7014,7017,7023,7029,7034,7038,7044,7049,7053,7059,7064,7068,7074,7079,7083,7089,7094,7098,7104,7109,7113,7119,7124,7127,7134,7139,7142,7149,7154,7158,7164,7169,7173,7179,7184,7188,7194,7199,7203,7209,7214,7217,7222,7229,7233,7235,7244,7249,7254,7259,7264,7267,7272,7277,7282,7287,7292,7297,7302,7307,7312,7317,7322,7327,7332,7337,7344,7349,7354,7359,7360,7369,7374,7379,7384,7389,7394,7399,7404,7409,7411,7419,7424,7426,7430,7436,7441,7446,7451,7456,7461,7469,7471,7476,7484,7486,7491,7499,7504,7509,7514,7519,7524,7529,7534,7539,7544,7549,7554,7559,7564,7569,7574,7579,7584,7589,7594,7599,7604,7609,7614,7619,7624,7629,7634,7639,7644,7649,7654,7659,7664,7669,7674,7679,7681,7686,7691,7696,7701,7706,7711,7716,7720,7727,7731,7739,7741,7747,7751,7756,7761,7766,7771,7776,7781,7788,7793,7796,7802,7807,7812,7817,7823,7828,7830,7836,7840,7845,7850,7858,7860,7865,7874,7879,7884,7889,7894,7899,7904,7909,7914,7919,7924,7928,7930,7935,7940,7945,7950,7958,7960,7968,7970,7975,7980,7987,7991,7999,8001,8007,8012,8017,8020,8027,8032,8037,8042,8047,8052,8057,8062,8067,8072,8077,8082,8087,8092,8097,8102,8107,8112,8119,8124,8129,8134,8139,8144,8149,8152,8159,8164,8169,8174,8179,8184,8186,8194,8199,8203,8209,8214,8217,8224,8229,8234,8239,8244,8248,8254,8259,8263,8269,8274,8279,8284,8289,8292,8299,8304,8308,8314,8319,8322,8329,8332,8337,8340,8483,8486,8491,8496,8501,8506,8511,8516,8521,8526,8531,8536,8541,8546,8551,8556,8561,8566,8571,8576,8581,8586,8591,8596,8601,8606,8611,8616,8621,8626,8631,8636,8641,8646,8651,8656,8661,8666,8671,8676,8681,8686,8691,8696,8701,8706,8711,8716,8721,8726,8731,8736,8743,8748,8753,8758,8763,8768,8773,8778,8783,8788,8793,8798,8803,8808,8813,8818,8823,8828,8833,8838,8843,8848,8854,8859,8864,8869,8874,8879,8884,8889,8894,8898,8903,8908,8913,8918,8923,8928,8933,8938,8943,8948,8953,8958,8963,8968,8973,8978,8983,8988,8993,8998,9003,9008,9013,9018,9023,9028,9033,9038,9043,9048,9053,9058,9063,9068,9073,9078,9083,9088,9093,9098,9103,9108,9113,9118,9123,9128,9133,9138,9143,9148,9153,9158,9163,9168,9173,9178,9183,9188,9193,9198,9203,9208,9213,9218,9223,9228,9233,9238,9243,9248,9253,9258,9263,9268,9270,9275,9280,9285,9290,9295,9300,9305,9310,9315,9320,9325,9330,9335,9340,9345,9350,9355,9360,9365,9370,9375,9380,9385,9390,9395,9400,9405,9410,9415,9420,9425,9430,9435,9440,9445,9452,9457,9462,9467,9472,9477,9482,9487,9492,9497,9502,9507,9512,9517,9522,9527,9532,9537,9542,9547,9552,9557,9562,9567,9572,9577,9582,9587,9592,9597,9602,9607,9612,9617,9622,9627,9632,9637,9642,9647,9651,9655,9662,9667,9672,9677,9682,9687,9690,9695,9704,9709,9714,9719,9724,9729,9734,9739,9744,9749,9754,9759,9764,9769,9774,9779,9783,9789,9794,9798,9804,9809,9814,9819,9824,9829,9834,9839,9843,9849,9854,9858,9864,9869,9874,9879,9884,9889,9894,9899,9904,9909,9914,9919,9924,9929,9934,9939,9944,9949,9954,9959,9961,9969,9974,9976,9981,9989,9991,9996,10004,10006,10011,10019,10024,10029,10034,10039,10044,10049,10054,10059,10064,10069,10074,10079,10084,10117,10124,10128,10131,10138,10143,10146,10151,10157,10161,10168,10172,10176,10181,10188,10191,10196,10203,10208,10214,10216,10221,10228,10230,10236,10241,10246,10251,10259,10263,10266,10271,10277,10281,10286,10292,10298,10301,10307,10313,10316,10323,10328,10331,10338,10341,10346,10350,10358,10363,10368,10373,10376,10382,10386,10393,10398,10403,10408,10413,10416,10423,10425,10430,10439,10440,10445,10453,10455,10460,10468,10470,10475,10483,10485,10490,10498,10500,10505,10513,10515,10520,10528,10530,10535,10543,10545,10550,10558,10560,10565,10573,10575,10580,10588,10590,10595,10603,10605,10610,10615,10620,10625,10633,10635,10640,10648,10650,10655,10663,10665,10670,10678,10680,10685,10693,10695,10700,10708,10710,10715,10723,10725,10730,10738,10740,10745,10753,10755,10760,10768,10770,10775,10783,10785,10790,10798,10800,10805,10813,10815,10820,10828,10830,10835,10843,10845,10850,10858,10860,10868,10873,10875,10880,10888,10890,10895,10903,10905,10910,10918,10920,10925,10933,10935,10940,10945,10953,10955,10962,10967,10972,10977,10981,10987,10992,10996,11001,11007,11013,11016,11022,11028,11032,11035,11041,11047,11052,11056,11062,11067,11071,11077,11082,11086,11092,11097,11101,11107,11112,11115,11120,11127,11130,11137,11140,11145,11152,11155,11160,11167,11170,11176,11182,11187,11190,11197,11202,11207,11212,11215,11220,11225,11230,11236,11242,11247,11252,11257,11260,11267,11272,11277,11281,11287,11290,11296,11302,11307,11311,11317,11324,11326,11332,11337,11341,11347,11352,11357,11360,11367,11374,11377,11384,11387,11392,11399,11404,11407,11414,11419,11422,11429,11432,11437,11444,11449,11454,11457,11464,11466,11471,11479,11481,11486,11494,11496,11501,11509,11511,11516,11524,11526,11531,11539,11541,11548,11554,11557,11561,11569,11571,11576,11584,11586,11591,11599,11601,11606,11614,11616,11621,11629,11631,11636,11640,11646,11651,11659,11661,11666,11674,11676,11681,11685,11691,11696,11701,11706,11711,11719,11721,11729,11734,11735,11744,11749,11751,11759,11764,11769,11774,11779,11781,11789,11794,11799,11804,11809,11814,11819,11822,11932,11937,11944,11949,11952,11959,11964,11967,11974,11977,11982,11989,11994,11997,12003,12009,12012,12019,12022,12029,12033,12039,12042,12048,12054,12057,12062,12069,12072,12077,12080,12089,12094,12099,12104,12109,12114,12119,12122,12129,12132,12137,12144,12147,12152,12159,12164,12167,12174,12177,12182,12189,12194,12197,12204,12209,12212,12219,12222,12227,12234,12237,12244,12247,12252,12256,12261,12266,12271,12276,12281,12286,12291,12296,12301,12306,12311,12316,12321,12326,12331,12336,12341,12346,12351,12356,12361,12366,12371,12376,12381,12386,12391,12396,12401,12406,12411,12416,12421,12426,12434,12436,12441,12449,12451,12456,12460,12466,12471,12476,12481,12486,12494,12496,12501,12505,12511,12516,12520,12526,12531,12535,12541,12546,12550,12556,12561,12569,12571,12576,12580,12586,12591,12595,12601,12606,12610,12616,12621,12626,12631,12636,12644,12646,12651,12659,12661,12666,12671,12676,12680,12687,12691,12696,12701,12706,12710,12716,12721,12726,12730,12736,12741,12746,12751,12756,12760,12766,12771,12775,12781,12786,12792,12796,12801,12806,12811,12816,12820,12826,12831,12835,12841,12846,12850,12856,12861,12865,12871,12876,12880,12886,12891,12895,12901,12906,12914,12916,12921,12926,12931,12936,12944,12946,12951,12955,12961,12966,12974,12976,12981,12989,12991,12996,13000,13006,13011,13016,13021,13026,13034,13036,13041,13049,13051,13056,13060,13066,13071,13079,13081,13086,13094,13096,13101,13109,13111,13116,13124,13126,13131,13139,13141,13146,13154,13156,13161,13166,13174,13178,13183,13188,13193,13198,13203,13208,13213,13218,13223,13228,13233,13238,13243,13248,13253,13258,13263,13268,13273,13278,13283,13288,13293,13298,13303,13308,13313,13318,13323,13328,13333,13338,13343,13348,13353,13358,13363,13368,13373,13378,13382,13388,13393,13397,13403,13408,13412,13418,13421,13428,13433,13436,13443,13446,13451,13458,13463,13468,13473,13477,13483,13487,13493,13498,13502,13508,13513,13518,13523,13528,13532,13538,13543,13546,13553,13558,13561,13568,13573,13578,13583,13588,13592,13598,13603,13607,13613,13618,13622,13628,13631,13637,13643,13648,13651,13658,13663,13666,13671,13676,13682,13688,13693,13699,13703,13708,13710,13718,13723,13727,13731,13736,13741,13746,13751,13756,13761,13766,13771,13776,13781,13786,13791,13796,13801,13806,13813,13817,13823,13826,13832,13838,13843,13847,13853,13858,13862,13868,13873,13877,13883,13888,13892,13898,13903,13907,13913,13916,13921,13928,13933,13937,13943,13948,13952,13958,13961,13967,13973,13978,13982,13988,13993,13997,14003,14008,14013,14018,14023,14026,14031,14036,14041,14046,14051,14056,14061,14066,14071,14076,14081,14086,14091,14096,14101,14106,14111,14116,14121,14126,14131,14136,14141,14146,14151,14156,14161,14166,14171,14176,14181,14186,14191,14196,14201,14206,14212,14216,14221,14226,14231,14238,14243,14248,14253,14258,14263,14268,14273,14277,14283,14288,14290,14298,14303,14308,14310,14319,14320,14328,14333,14335,14340,14348,14350,14355,14363,14365,14374,14378,14382,14385,14390,14398,14404,14405,14413,14415,14420,14425,14430,14435,14440,14445,14450,14455,14460,14465,14474,14475,14480,14485,14490,14498,14500,14505,14513,14515,14520,14528,14530,14535,14543,14545,14550,14558,14560,14565,14573,14575,14580,14588,14590,14595,14601,14605,14610,14618,14620,14625,14633,14635,14640,14648,14650,14655,14663,14665,14670,14678,14680,14685,14693,14695,14704,14708,14710,14715,14720,14725,14730,14738,14740,14745,14753,14755,14760,14768,14770,14779,14783,14785,14794,14798,14800,14805,14810,14818,14820,14825,14832,14837,14840,14846,14852,14857,14861,14867,14872,14876,14882,14885,14891,14897,14902,14905,14912,14915,14924,14929,14934,14939,14944,14949,14954,14959,14964,14969,14974,14979,14984,14989,14994,14999,15004,15009,15014,15019,15024,15029,15034,15039,15044,15049,15054,15059,15064,15069,15074,15079,15084,15089,15094,15099,15104,15109,15114,15119,15124,15129,15134,15139,15144,15149,15153,15159,15164,15168,15174,15179,15183,15187,15192,15196,15204,15209,15213,15219,15224,15228,15234,15237,15243,15249,15254,15258,15264,15269,15274,15277,15284,15286,15294,15295,15301,15306,15310,15316,15321,15329,15331,15336,15340,15346,15354,15356,15361,15366,15371,15376,15381,15389,15391,15396,15400,15406,15411,15416,15421,15426,15431,15436,15441,15446,15451,15456,15461,15466,15471,15476,15481,15486,15491,15496,15501,15506,15511,15516,15521,15525,15534,15539,15544,15545,15552,15556,15563,15569,15574,15575,15582,15586,15591,15596,15601,15606,15611,15616,15621,15626,15631,15636,15641,15646,15651,15656,15661,15666,15671,15676,15681,15686,15691,15696,15701,15706,15711,15716,15721,15726,15731,15736,15741,15746,15751,15756,15761,15766,15771,15776,15781,15786,15791,15796,15801,15806,15811,15816,15821,15826,15831,15836,15841,15846,15851,15856,15861,15866,15871,15876,15881,15886,15891,15896,15901,15906,15911,15916,15921,15926,15931,15936,15941,15946,15951,15956,15961,15966,15971,15976,15981,15986,15991,15996,16001,16006,16011,16016,16021,16026,16031,16036,16041,16046,16051,16056,16061,16066,16071,16076,16081,16086,16091,16096,16101,16106,16111,16116,16121,16126,16131,16136,16141,16146,16151,16156,16161,16166,16171,16176,16181,16186,16191,16196,16201,16206,16211,16216,16221,16226,16231,16236,16241,16246,16251,16256,16261,16266,16271,16276,16281,16286,16291,16296,16304,16306,16311,16319,16321,16329,16330,16336,16341,16346,16351,16356,16361,16366,16371,16376,16381,16386,16391,16396,16401,16406,16411,16416,16421,16426,16431,16436,16441,16446,16451,16456,16461,16466,16471,16476,16481,16486,16491,16496,16501,16506,16511,16516,16521,16526,16531,16536,16541,16546,16551,16556,16561,16566,16571,16576,16581,16586,16591,16596,16601,16605,16613,16616,16620,16628,16633,16635,16643,16648,16650,16658,16661,16666,16671,16678,16682,16688,16693,16696,16703,16708,16711,16715,16720,16725,16730,16735,16740,16745,16750,16759,16763,16765,16772,16778,16780,16788,16793,16795,16800,16805,16810,16815,16820,16825,16830,16835,16840,16845,16850,16855,16860,16865,16870,16875,16880,16885,16890,16895,16900,16905,16910,16915,16920,16925,16930,16935,16940,16945,16950,16955,16960,16965,16970,16975,16980,16985,16990,16995,17000,17005,17010,17015,17020,17025,17030,17035,17040,17045,17050,17055,17060,17065,17070,17075,17080,17085,17090,17095,17100,17105,17110,17115,17120,17125,17130,17135,17140,17145,17152,17158,17163,17168,17173,17178,17183,17188,17193,17198,17203,17208,17213,17218,17223,17228,17233,17238,17243,17248,17253,17258,17263,17268,17273,17278,17283,17288,17293,17298,17303,17308,17313,17318,17323,17328,17331,17335,17340,17346,17352,17355,17361,17367,17370,17376,17382,17385,17391,17397,17400,17406,17412,17416,17422,17427,17432,17437,17442,17447,17452,17457,17462,17467,17472,17477,17482,17487,17492,17497,17502,17507,17512,17516,17522,17527,17531,17537,17542,17546,17552,17557,17561,17567,17570,17576,17582,17585,17590,17595,17604,17606,17610,17615,17622,17627,17632,17636,17642,17647,17651,17657,17662,17667,17672,17675,17680,17686,17690,17696,17704,17705,17711,17717,17720,17728,17732,17735,17740,17747,17750,17755,17762,17769,17770,17777,17780,17785,17792,17799,17800,17808,17810,17815,17822,17828,17831,17836,17840,17845,17852,17859,17860,17867,17870,17875,17882,17889,17890,17899,17903,17906,17914,17918,17923,17927,17930,17935,17942,17949,17953,17958,17964,17966,17972,17979,17982,17987,17994,17997,18002,18009,18012,18017,18024,18026,18032,18039,18042,18047,18053,18056,18062,18069,18072,18077,18080,18086,18092,18097,18101,18106,18113,18116,18121,18126,18131,18136,18141,18146,18151,18156,18161,18166,18171,18176,18181,18186,18191,18196,18201,18206,18211,18216,18221,18226,18231,18236,18241,18246,18251,18256,18261,18266,18271,18276,18281,18286,18291,18296,18301,18307,18314,18317,18322,18329,18334,18337,18344,18349,18352,18359,18362,18367,18374,18379,18382,18389,18392,18397,18404,18409,18412,18419,18424,18427,18434,18437,18442,18449,18454,18457,18464,18467,18472,18479,18482,18488,18494,18499,18503,18509,18512,18518,18524,18527,18533,18537,18544,18546,18551,18559,18561,18569,18571,18576,18584,18586,18591,18596,18600,18606,18611,18616,18621,18629,18630,18636,18641,18645,18651,18656,18661,18665,18671,18678,18682,18688,18693,18699,18703,18706,18712,18718,18721,18728,18733,18736,18744,18748,18751,18757,18763,18768,18773,18779,18783,18785,18790,18798,18800,18805,18813,18815,18823,18825,18830,18835,18840,18848,18852,18857,18862,18867,18872,18877,18882,18887,18892,18897,18902,18907,18912,18917,18922,18927,18932,18937,18942,18947,18952,18957,18962,18967,18972,18977,18982,18987,18992,18997,19002,19007,19012,19017,19022,19027,19032,19037,19042,19047,19050,19204,19209,19214,19219,19224,19229,19234,19239,19244,19249,19254,19259,19264,19269,19274,19279,19284,19289,19294,19299,19304,19309,19314,19319,19324,19329,19331,19336,19344,19346,19351,19355,19361,19366,19370,19376,19381,19389,19391,19396,19400,19406,19414,19415,19421,19426,19434,19436,19441,19445,19451,19456,19464,19466,19471,19476,19484,19487,19492,19497,19504,19507,19512,19519,19522,19527,19534,19536,19542,19549,19551,19557,19564,19566,19572,19579,19581,19587,19594,19597,19602,19605,19614,19619,19624,19629,19634,19639,19644,19649,19654,19659,19664,19667,19674,19678,19684,19689,19693,19699,19704,19708,19714,19719,19722,19729,19734,19738,19744,19749,19753,19759,19764,19768,19774,19777,19783,19789,19794,19798,19804,19809,19813,19819,19824,19827,19830,19839,19844,19849,19854,19859,19864,19869,19874,19879,19884,19889,19894,19899,19904,19909,19914,19919,19924,19929,19934,19937,19942,19947,19952,19957,19962,19967,19972,19977,19982,19987,19992,19997,20002,20007,20012,20017,20022,20027,20032,20037,20042,20047,20052,20057,20062,20067,20072,20079,20083,20089,20094,20098,20104,20109,20113,20119,20124,20128,20134,20139,20143,20149,20154,20158,20164,20169,20173,20179,20184,20188,20194,20199,20203,20209,20214,20218,20224,20227,20232,20237,20242,20248,20254,20257,20260,20269,20272,20279,20284,20287,20293,20299,20304,20307,20314,20318,20320,20325,20330,20335,20340,20348,20350,20355,20360,20365,20370,20378,20380,20385,20391,20395,20400,20405,20410,20415,20421,20425,20430,20438,20440,20445,20453,20455,20460,20465,20470,20475,20483,20485,20490,20498,20500,20508,20511,20515,20520,20528,20530,20535,20543,20545,20550,20558,20560,20565,20570,20575,20580,20586,20590,20595,20603,20605,20610,20615,20620,20625,20631,20635,20640,20645,20650,20655,20663,20665,20670,20678,20680,20685,20693,20695,20700,20705,20710,20718,20723,20725,20730,20738,20740,20748,20751,20755,20763,20768,20770,20775,20783,20785,20790,20798,20800,20808,20813,20815,20820,20826,20830,20835,20843,20845,20850,20856,20860,20865,20873,20875,20884,20888,20890,20895,20903,20905,20910,20918,20920,20925,20930,20935,20940,20945,20950,20955,20960,20965,20970,20975,20980,20985,20990,20995,21000,21005,21010,21015,21020,21025,21030,21035,21040,21045,21050,21055,21060,21065,21073,21075,21082,21087,21092,21097,21102,21107,21112,21117,21122,21127,21132,21137,21142,21147,21152,21157,21162,21167,21170,21179,21184,21189,21194,21199,21204,21209,21214,21219,21224,21229,21234,21239,21244,21249,21254,21259,21264,21269,21274,21279,21284,21289,21294,21299,21304,21309,21314,21319,21324,21329,21334,21339,21344,21349,21354,21359,21364,21369,21374,21379,21384,21389,21394,21399,21404,21406,21414,21415,21421,21426,21430,21436,21441,21449,21451,21456,21464,21466,21474,21475,21481,21489,21494,21496,21504,21505,21511,21515,21521,21526,21531,21536,21541,21546,21551,21556,21561,21566,21571,21576,21581,21586,21591,21596,21601,21606,21611,21616,21621,21626,21631,21636,21641,21646,21651,21656,21661,21666,21671,21676,21681,21686,21691,21696,21701,21706,21711,21716,21721,21726,21731,21736,21741,21746,21751,21756,21761,21766,21771,21777,21782,21787,21792,21797,21802,21807,21812,21817,21822,21827,21832,21837,21842,21847,21852,21857,21862,21867,21872,21877,21882,21887,21892,21897,21902,21907,21912,21919,21922,21929,21934,21937,21944,21949,21952,21959,21962,21967,21974,21977,21982,21989,21994,21997,22004,22007,22012,22019,22022,22027,22034,22039,22042,22049,22052,22057,22064,22069,22072,22077,22082,22087,22092,22097,22102,22107,22112,22117,22122,22127,22132,22137,22142,22147,22152,22157,22162,22167,22172,22177,22182,22187,22192,22197,22202,22209,22214,22219,22224,22229,22234,22239,22244,22249,22254,22259,22264,22269,22274,22279,22284,22289,22294,22299,22304,22309,22314,22319,22324,22329,22334,22339,22344,22349,22354,22359,22364,22369,22374,22379,22384,22389,22394,22399,22404,22409,22414,22419,22424,22429,22434,22439,22444,22449,22454,22459,22464,22469,22474,22477,22484,22488,22494,22497,22504,22506,22511,22515,22521,22529,22530,22536,22541,22546,22551,22559,22561,22566,22571,22575,22581,22586,22590,22596,22601,22606,22611,22616,22620,22626,22631,22635,22641,22646,22650,22656,22661,22665,22671,22679,22680,22686,22691,22696,22701,22706,22710,22716,22721,22726,22731,22736,22744,22746,22754,22759,22761,22766,22774,22776,22781,22785,22791,22796,22800,22806,22811,22815,22821,22826,22830,22836,22841,22845,22851,22856,22860,22866,22871,22875,22881,22886,22890,22896,22901,22909,22911,22916,22924,22926,22931,22936,22941,22949,22953,22958,22963,22968,22970,22978,22980,22985,22990,22995,23000,23008,23010,23015,23022,23025,23033,23035,23042,23047,23052,23057,23061,23067,23072,23076,23082,23087,23090,23097,23100,23105,23112,23115,23120,23127,23132,23135,23140,23145,23153,23157,23160,23166,23172,23177,23181,23187,23192,23197,23202,23207,23211,23217,23222,23226,23232,23235,23240,23247,23252,23256,23262,23267,23272,23277,23280,23287,23290,23297,23302,23307,23312,23317,23320,23327,23332,23337,23342,23347,23352,23355,23362,23367,23372,23377,23382,23387,23392,23397,23402,23407,23412,23417,23422,23427,23432,23437,23442,23447,23452,23457,23462,23467,23472,23477,23482,23487,23492,23497,23502,23507,23512,23517,23522,23527,23532,23537,23542,23547,23552,23557,23560,23567,23572,23576,23581,23586,23591,23596,23601,23606,23611,23616,23621,23626,23631,23636,23641,23646,23651,23656,23661,23666,23671,23676,23681,23686,23691,23696,23701,23706,23711,23716,23721,23726,23731,23739,23741,23746,23751,23759,23761,23766,23771,23776,23781,23786,23791,23796,23801,23806,23811,23816,23821,23828,23830,23836,23843,23845,23850,23858,23860,23865,23874,23875,23880,23888,23890,23895,23903,23905,23910,23918,23920,23925,23933,23935,23940,23948,23950,23955,23963,23965,23970,23978,23980,23985,23993,23995,24000,24009,24010,24019,24020,24028,24030,24035,24042,24047,24052,24057,24061,24066,24071,24077,24082,24087,24092,24097,24102,24107,24112,24117,24122,24127,24132,24137,24142,24147,24152,24157,24162,24167,24172,24177,24182,24187,24192,24197,24202,24207,24212,24217,24222,24227,24232,24237,24242,24247,24252,24257,24262,24267,24272,24277,24282,24287,24292,24297,24302,24307,24312,24317,24322,24327,24332,24337,24342,24345,24350,24355,24362,24365,24370,24377,24380,24385,24392,24395,24400,24407,24412,24415,24420,24425,24430,24435,24440,24445,24450,24455,24460,24465,24470,24475,24480,24485,24490,24495,24500,24505,24510,24515,24523,24525,24530,24535,24540,24547,24550,24557,24562,24568,24572,24577,24582,24587,24592,24597,24602,24605,24610,24617,24622,24625,24632,24637,24643,24647,24652,24657,24662,24665,24671,24677,24682,24685,24690,24695,24701,24707,24711,24716,24722,24727,24732,24735,24742,24749,24752,24759,24764,24767,24774,24777,24782,24789,24792,24797,24804,24807,24810,24819,24824,24829,24834,24837,24840,24849,24854,24858,24864,24869,24873,24879,24884,24887,24892,24897,24902,24909,24912,24915,24924,24928,24934,24939,24944,24946,24952,24957,24961,24967,24971,24976,24980,24985,24991,24995,25000,25009,25011,25016,25024,25026,25031,25036,25041,25045,25054,25058,25060,25066,25073,25076,25081,25088,25090,25098,25101,25109,25114,25116,25124,25126,25131,25139,25141,25149,25154,25156,25161,25165,25171,25176,25184,25186,25191,25199,25204,25209,25214,25219,25224,25229,25234,25239,25244,25245,25254,25259,25264,25269,25274,25275,25284,25289,25294,25299,25302,25306,25311,25316,25321,25326,25331,25336,25341,25346,25351,25356,25361,25366,25371,25376,25381,25386,25391,25396,25401,25406,25411,25416,25421,25426,25431,25439,25441,25446,25450,25456,25461,25469,25471,25476,25484,25486,25491,25499,25501,25506,25514,25516,25521,25529,25531,25536,25544,25546,25551,25559,25561,25566,25574,25576,25581,25589,25591,25596,25600,25609,25611,25618,25620,25628,25631,25637,25643,25648,25652,25658,25663,25666,25673,25678,25683,25688,25693,25698,25703,25708,25713,25718,25723,25728,25733,25738,25743,25748,25753,25758,25763,25768,25773,25777,25782,25787,25792,25797,25802,25807,25814,25815,25823,25828,25833,25838,25843,25848,25853,25858,25863,25868,25873,25876,25883,25888,25891,25898,25901,25906,25911,25918,25922,25928,25933,25937,25943,25948,25951,25958,25961,25969,25973,25976,25981,25988,25991,25997,26003,26006,26012,26018,26023,26028,26033,26038,26043,26048,26053,26058,26063,26068,26073,26076,26083,26086,26093,26096,26102,26108,26110,26117,26123,26128,26133,26138,26141,26146,26153,26158,26161,26168,26171,26178,26181,26188,26190,26198,26203,26205,26213,26218,26220,26228,26233,26235,26243,26248,26253,26258,26263,26265,26273,26278,26280,26288,26293,26295,26303,26308,26310,26318,26323,26328,26333,26338,26340,26348,26353,26358,26363,26368,26370,26378,26383,26388,26393,26398,26400,26408,26414,26418,26423,26428,26433,26438,26443,26445,26453,26458,26460,26468,26473,26475,26480,26488,26490,26495,26503,26505,26510,26518,26520,26529,26533,26535,26540,26548,26550,26559,26560,26565,26573,26576,26580,26585,26591,26595,26600,26605,26610,26615,26624,26625,26630,26638,26640,26648,26653,26655,26660,26668,26670,26675,26683,26685,26690,26698,26700,26705,26713,26715,26720,26725,26730,26738,26740,26745,26750,26758,26760,26768,26773,26778,26783,26788,26793,26798,26803,26808,26813,26818,26823,26826,26833,26838,26843,26848,26853,26858,26863,26869,26873,26875,26884,26888,26890,26898,26904,26905,26914,26919,26920,26925,26933,26935,26943,26948,26953,26958,26963,26965,26973,26978,26980,26988,26993,26995,27003,27008,27010,27018,27023,27025,27033,27038,27043,27048,27053,27055,27063,27068,27073,27075,27080,27085,27090,27095,27100,27105,27110,27115,27120,27125,27130,27135,27140,27145,27150,27155,27160,27165,27170,27179,27184,27189,27194,27199,27204,27209,27214,27219,27224,27229,27234,27239,27244,27249,27254,27259,27264,27269,27274,27279,27284,27289,27294,27299,27304,27309,27314,27319,27324,27329,27334,27339,27344,27349,27354,27359,27364,27369,27374,27379,27384,27389,27394,27399,27404,27409,27414,27419,27424,27429,27434,27439,27444,27449,27454,27459,27464,27469,27474,27479,27484,27489,27494,27499,27502,27507,27512,27517,27522,27527,27532,27538,27542,27547,27552,27557,27562,27567,27572,27577,27582,27587,27592,27597,27601,27606,27611,27616,27621,27626,27631,27636,27641,27646,27651,27656,27661,27666,27671,27676,27681,27686,27691,27696,27704,27709,27714,27719,27724,27729,27734,27739,27744,27749,27754,27759,27764,27769,27774,27779,27784,27789,27794,27799,27804,27809,27811,27819,27824,27829,27830,27839,27841,27845,27854,27859,27861,27868,27872,27878,27883,27888,27893,27898,27902,27906,27911,27916,27921,27926,27931,27936,27941,27946,27951,27956,27961,27966,27971,27976,27981,27986,27991,27996,28001,28006,28011,28016,28021,28026,28031,28036,28041,28046,28051,28056,28061,28066,28071,28076,28081,28086,28091,28096,28101,28106,28111,28116,28121,28126,28131,28136,28141,28146,28151,28158,28163,28168,28173,28178,28183,28188,28193,28198,28203,28208,28213,28218,28223,28228,28233,28238,28243,28248,28253,28258,28263,28268,28273,28278,28283,28288,28293,28298,28303,28308,28313,28318,28323,28328,28333,28338,28343,28348,28353,28358,28363,28368,28373,28378,28383,28388,28393,28398,28403,28408,28413,28418,28423,28428,28433,28438,28443,28448,28453,28458,28463,28468,28471,28476,28483,28488,28491,28497,28503,28508,28512,28518,28523,28525,28533,28538,28543,28546,28551,28555,28560,28565,28570,28575,28580,28585,28590,28595,28600,28605,28610,28615,28620,28625,28630,28635,28643,28645,28650,28658,28660,28665,28673,28675,28680,28689,28690,28695,28704,28705,28714,28716,28720,28725,28732,28737,28742,28747,28752,28757,28762,28767,28772,28777,28781,28789,28790,28799,28804,28809,28814,28819,28824,28829,28834,28839,28844,28849,28854,28859,28864,28869,28874,28879,28884,28889,28894,28899,28904,28909,28912,28919,28924,28929,28934,28938,28944,28947,28953,28959,28964,28966,28974,28979,28983,28989,28992,28997,29002,29007,29012,29017,29022,29027,29032,29037,29042,29047,29052,29057,29062,29067,29072,29077,29082,29087,29092,29097,29102,29107,29112,29117,29122,29127,29132,29137,29142,29147,29152,29157,29162,29167,29172,29177,29182,29189,29193,29199,29204,29209,29214,29216,29223,29229,29234,29238,29244,29249,29252,29259,29262,29267,29272,29279,29284,29286,29294,29299,29301,29306,29314,29316,29324,29329,29331,29335,29344,29346,29350,29359,29361,29365,29374,29376,29380,29389,29391,29396,29404,29406,29414,29419,29421,29426,29434,29435,29441,29446,29452,29457,29461,29466,29471,29476,29481,29486,29491,29496,29504,29506,29511,29519,29521,29526,29531,29539,29541,29546,29551,29556,29561,29566,29571,29576,29580,29585,29590,29595,29600,29605,29610,29615,29620,29625,29630,29635,29640,29645,29650,29655,29660,29665,29670,29675,29680,29685,29690,29695,29700,29705,29710,29715,29720,29725,29730,29735,29740,29745,29750,29755,29760,29765,29770,29775,29780,29785,29790,29795,29800,29805,29810,29818,29823,29828,29833,29838,29843,29848,29853,29858,29863,29868,29873,29878,29883,29888,29893,29898,29903,29908,29913,29918,29923,29928,29933,29938,29943,29948,29953,29958,29963,29968,29973,29978,29983,29988,29992,29997,30002,30007,30012,30017,30022,30027,30032,30037,30042,30047,30052,30057,30062,30067,30072,30077,30082,30087,30092,30097,30102,30107,30112,30117,30122,30127,30132,30137,30140,30145,30150,30155,30160,30165,30170,30175,30184,30185,30190,30199,30204,30209,30214,30216,30224,30227,30233,30239,30242,30249,30254,30259,30264,30269,30274,30279,30284,30288,30292,30297,30302,30308,30312,30317,30322,30327,30332,30337,30342,30347,30352,30357,30362,30367,30372,30377,30381,30386,30394,30396,30401,30405,30411,30416,30420,30426,30431,30439,30441,30446,30454,30456,30461,30465,30471,30476,30480,30486,30491,30495,30501,30506,30511,30516,30521,30525,30531,30536,30541,30546,30551,30559,30564,30566,30571,30576,30581,30586,30591,30596,30601,30606,30611,30616,30621,30626,30631,30636,30641,30646,30651,30656,30661,30666,30671,30676,30681,30686,30691,30696,30701,30706,30711,30716,30722,30726,30731,30736,30741,30746,30750,30756,30761,30766,30771,30778,30783,30788,30793,30798,30803,30808,30813,30818,30823,30828,30833,30838,30843,30848,30853,30858,30863,30868,30873,30878,30883,30888,30893,30898,30903,30908,30913,30918,30923,30928,30933,30938,30943,30948,30953,30958,30961,30965,30970,30975,30980,30985,30990,30995,31000,31005,31010,31015,31020,31025,31030,31035,31040,31045,31050,31055,31060,31065,31070,31075,31080,31085,31090,31095,31100,31105,31110,31115,31120,31125,31130,31135,31143,31145,31150,31158,31160,31165,31173,31175,31184,31188,31190,31195,31203,31205,31210,31218,31220,31229,31233,31235,31240,31248,31250,31255,31263,31265,31270,31276,31280,31288,31293,31295,31300,31308,31310,31319,31323,31325,31330,31338,31340,31345,31350,31355,31360,31368,31370,31375,31380,31385,31390,31398,31400,31405,31413,31415,31424,31428,31430,31435,31443,31445,31452,31458,31460,31465,31473,31475,31480,31488,31490,31495,31503,31505,31510,31518,31520,31525,31533,31535,31540,31548,31550,31555,31563,31565,31570,31578,31580,31585,31593,31595,31600,31608,31610,31615,31623,31625,31630,31638,31640,31645,31653,31655,31660,31668,31670,31675,31683,31685,31690,31698,31700,31705,31713,31718,31723,31728,31730,31738,31743,31748,31753,31758,31763,31768,31773,31778,31783,31786,31790,31795,31800,31805,31810,31815,31820,31825,31830,31835,31840,31845,31850,31855,31860,31865,31870,31875,31880,31885,31890,31895,31900,31905,31910,31915,31920,31925,31930,31935,31940,31945,31950,31955,31960,31965,31970,31975,31980,31985,31990,31995,32000,32005,32010,32015,32020,32025,32030,32035,32040,32045,32050,32055,32060,32065,32070,32075,32080,32088,32090,32095,32103,32105,32110,32118,32120,32125,32131,32135,32140,32148,32150,32155,32163,32165,32170,32178,32180,32185,32190,32195,32200,32205,32213,32215,32220,32227,32232,32237,32242,32245,32252,32255,32262,32265,32272,32277,32282,32286,32292,32297,32300,32307,32312,32316,32322,32325,32330,32335,32340,32345,32350,32355,32360,32365,32370,32375,32380,32385,32390,32399,32400,32405,32410,32415,32420,32425,32430,32439,32444,32449,32454,32459,32464,32469,32474,32479,32484,32489,32494,32499,32504,32506,32511,32516,32523,32526,32531,32538,32541,32546,32553,32556,32561,32568,32571,32576,32583,32586,32592,32598,32603,32608,32613,32618,32622,32628,32633,32638,32643,32646,32651,32658,32661,32666,32673,32678,32681,32686,32691,32696,32703,32706,32711,32718,32721,32726,32733,32736,32741,32748,32753,32756,32763,32768,32774,32778,32783,32787,32793,32796,32801,32808,32811,32816,32823,32828,32831,32838,32841,32846,32853,32856,32861,32868,32871,32876,32883,32888,32891,32898,32901,32906,32913,32916,32921,32928,32933,32938,32943,32948,32953,32958,32963,32968,32973,32978,32983,32988,32993,32999,33004,33007,33014,33017,33022,33029,33034,33037,33044,33047,33052,33059,33064,33067,33072,33077,33082,33089,33094,33098,33102,33106,33113,33119,33124,33128,33134,33139,33143,33145,33154,33157,33162,33169,33171,33179,33184,33188,33194,33199,33203,33209,33214,33217,33224,33229,33231,33236,33244,33246,33251,33259,33264,33266,33273,33277,33281,33286,33292,33298,33303,33307,33313,33318,33323,33327,33332,33337,33342,33347,33352,33357,33362,33367,33372,33377,33382,33387,33392,33397,33402,33409,33412,33418,33423,33427,33433,33437,33444,33446,33451,33459,33461,33469,33474,33476,33481,33489,33491,33496,33504,33506,33511,33519,33521,33526,33534,33536,33541,33549,33551,33556,33564,33566,33571,33575,33582,33586,33591,33596,33603,33609,33611,33619,33624,33626,33631,33639,33641,33649,33654,33655,33663,33666,33672,33678,33684,33687,33693,33696,33703,33706,33711,33718,33721,33729,33732,33738,33744,33748,33751,33755,33761,33766,33773,33778,33781,33788,33793,33796,33803,33806,33811,33816,33821,33828,33831,33836,33843,33846,33851,33858,33861,33866,33873,33878,33882,33888,33891,33896,33903,33906,33911,33918,33923,33928,33933,33938,33941,33948,33951,33956,33963,33966,33973,33976,33981,33988,33993,33998,34002,34008,34013,34017,34021,34028,34030,34036,34043,34046,34053,34058,34063,34068,34073,34078,34083,34088,34093,34098,34103,34108,34113,34118,34123,34128,34133,34138,34143,34148,34153,34158,34161,34168,34173,34176,34182,34188,34191,34198,34201,34206,34213,34218,34223,34227,34233,34236,34242,34248,34251,34256,34263,34266,34272,34278,34283,34287,34293,34298,34301,34308,34313,34316,34321,34328,34332,34338,34343,34347,34353,34356,34362,34368,34373,34375,34383,34386,34393,34398,34403,34408,34413,34418,34423,34428,34433,34438,34443,34448,34453,34458,34463,34468,34473,34478,34483,34488,34493,34498,34503,34508,34513,34518,34523,34528,34533,34538,34543,34545,34550,34557,34562,34567,34571,34577,34582,34587,34592,34597,34601,34607,34612,34615,34622,34625,34630,34637,34640,34645,34652,34657,34660,34667,34670,34675,34682,34685,34690,34695,34701,34705,34710,34715,34724,34726,34734,34735,34740,34745,34753,34759,34763,34765,34770,34778,34783,34785,34790,34798,34800,34808,34810,34818,34823,34825,34833,34838,34843,34848,34853,34858,34863,34868,34873,34878,34883,34888,34893,34896,34900,34905,34910,34915,34920,34925,34930,34935,34940,34945,34950,34959,34960,34969,34973,34978,34982,34987,34992,34997,35002,35007,35012,35017,35022,35027,35032,35037,35042,35047,35052,35057,35062,35067,35072,35077,35082,35087,35092,35097,35102,35107,35112,35117,35122,35127,35132,35137,35142,35147,35152,35157,35162,35167,35172,35177,35182,35187,35192,35197,35202,35207,35212,35217,35222,35227,35232,35235,35240,35245,35250,35255,35260,35265,35270,35275,35280,35285,35290,35295,35300,35305,35310,35315,35320,35325,35330,35335,35340,35345,35350,35355,35363,35365,35373,35379,35382,35387,35392,35397,35402,35407,35412,35417,35422,35427,35432,35437,35442,35447,35452,35457,35462,35467,35472,35479,35483,35485,35492,35497,35502,35507,35512,35517,35522,35527,35532,35537,35542,35547,35552,35557,35562,35567,35572,35577,35582,35589,35594,35599,35604,35609,35614,35619,35624,35629,35634,35639,35644,35649,35654,35659,35664,35669,35674,35679,35684,35689,35694,35699,35704,35709,35714,35719,35724,35729,35734,35739,35744,35749,35754,35759,35764,35769,35774,35779,35784,35789,35794,35799,35804,35809,35814,35819,35824,35829,35834,35839,35844,35849,35854,35859,35864,35869,35874,35879,35884,35889,35894,35899,35904,35909,35914,35919,35924,35929,35934,35939,35944,35949,35954,35959,35964,35969,35974,35979,35984,35989,35994,35999,36004,36009,36014,36019,36024,36029,36034,36039,36044,36049,36054,36059,36064,36069,36074,36079,36084,36089,36094,36099,36104,36109,36114,36119,36124,36129,36134,36139,36144,36149,36154,36159,36164,36169,36174,36179,36184,36189,36194,36199,36204,36209,36214,36219,36224,36229,36234,36239,36244,36249,36254,36259,36264,36269,36274,36279,36284,36289,36294,36299,36304,36309,36314,36319,36324,36329,36334,36339,36344,36349,36354,36359,36364,36369,36374,36379,36384,36389,36394,36399,36404,36409,36414,36419,36424,36429,36434,36439,36444,36449,36454,36459,36464,36469,36474,36479,36484,36489,36494,36499,36504,36509,36514,36519,36524,36529,36534,36539,36544,36549,36554,36559,36564,36569,36574,36579,36584,36589,36594,36599,36604,36609,36614,36619,36624,36629,36634,36639,36644,36649,36654,36659,36664,36666,36671,36679,36681,36686,36691,36699,36701,36708,36712,36718,36723,36727,36733,36736,36742,36748,36753,36756,36763,36766,36772,36776,36781,36785,36790,36795,36800,36805,36810,36815,36820,36825,36830,36835,36840,36845,36850,36855,36860,36865,36870,36875,36880,36885,36890,36895,36900,36905,36910,36915,36920,36925,36930,36935,36940,36945,36950,36955,36960,36965,36970,36975,36980,36985,36990,36995,37000,37005,37010,37015,37020,37025,37030,37035,37040,37045,37050,37055,37060,37065,37070,37075,37080,37085,37090,37095,37100,37105,37110,37115,37120,37125,37130,37135,37140,37145,37150,37155,37160,37165,37170,37175,37180,37185,37190,37195,37200,37205,37212,37217,37222,37227,37232,37237,37242,37247,37252,37257,37262,37267,37272,37277,37282,37287,37292,37297,37302,37307,37312,37317,37322,37327,37332,37337,37342,37347,37352,37357,37362,37369,37374,37379,37384,37389,37394,37399,37404,37409,37414,37419,37424,37429,37434,37439,37444,37449,37454,37459,37464,37469,37474,37479,37484,37489,37494,37499,37504,37509,37514,37519,37524,37529,37534,37539,37544,37549,37554,37559,37564,37569,37574,37579,37584,37589,37594,37599,37604,37609,37614,37619,37624,37629,37634,37639,37644,37649,37654,37659,37664,37669,37674,37679,37684,37689,37694,37699,37704,37709,37714,37719,37724,37729,37734,37739,37744,37749,37754,37759,37764,37769,37772,37779,37781,37789,37792,37798,37804,37809,37814,37817,37824,37829,37834,37839,37844,37849,37854,37859,37864,37869,37874,37876,37883,37885,37893,37898,37903,37908,37911,37918,37923,37928,37933,37938,37944,37945,37950,37955,37960,37967,37972,37977,37982,37988,37993,37998,38003,38008,38013,38018,38023,38028,38033,38038,38040,38045,38050,38055,38060,38065,38070,38075,38080,38085,38090,38095,38100,38105,38111,38117,38122,38127,38132,38137,38142,38147,38152,38157,38162,38167,38172,38177,38182,38187,38192,38197,38202,38207,38212,38217,38222,38227,38232,38237,38242,38247,38252,38257,38262,38267,38272,38277,38282,38287,38292,38297,38302,38307,38312,38317,38322,38327,38332,38337,38342,38347,38352,38357,38362,38367,38372,38377,38380,38387,38391,38397,38402,38406,38412,38419,38420,38429,38434,38439,38444,38449,38454,38459,38464,38469,38474,38479,38484,38489,38494,38499,38504,38509,38514,38519,38524,38529,38534,38539,38544,38549,38554,38559,38564,38569,38574,38579,38584,38585,38594,38599,38604,38609,38614,38619,38624,38629,38634,38639,38644,38649,38654,38659,38664,38669,38674,38679,38684,38689,38694,38699,38704,38709,38714,38719,38724,38729,38734,38739,38744,38749,38754,38759,38764,38769,38774,38779,38784,38789,38794,38799,38804,38809,38814,38819,38824,38829,38834,38839,38844,38849,38854,38859,38864,38869,38874,38879,38884,38889,38892,38899,38904,38909,38914,38919,38924,38929,38934,38939,38944,38949,38954,38959,38964,38969,38974,38979,38984,38989,38994,38999,39004,39009,39014,39019,39024,39029,39034,39039,39044,39049,39054,39059,39064,39069,39074,39079,39084,39089,39094,39099,39104,39109,39112,39119,39124,39129,39134,39139,39144,39149,39154,39159,39164,39169,39174,39179,39184,39189,39194,39199,39204,39209,39214,39219,39224,39229,39234,39239,39244,39249,39254,39259,39264,39269,39274,39279,39284,39289,39294,39299,39304,39309,39314,39319,39324,39329,39334,39339,39344,39349,39354,39359,39364,39369,39374,39379,39384,39389,39394,39399,39404,39409,39414,39419,39424,39429,39434,39439,39444,39449,39454,39459,39464,39469,39474,39479,39484,39489,39494,39499,39504,39509,39514,39519,39524,39529,39534,39539,39544,39549,39554,39559,39564,39569,39574,39579,39584,39589,39594,39599,39604,39609,39614,39619,39624,39629,39634,39639,39644,39649,39654,39659,39664,39669,39674,39679,39684,39689,39694,39699,39704,39709,39714,39719,39724,39729,39734,39739,39744,39749,39754,39759,39764,39769,39774,39779,39784,39789,39794,39799,39804,39809,39814,39819,39824,39829,39834,39839,39844,39849,39854,39859,39864,39869,39874,39879,39884,39889,39894,39899,39904,39909,39914,39919,39924,39929,39934,39939,39944,39949,39954,39959,39964,39969,39974,39979,39984,39989,39994,39999,40004,40009,40014,40019,40024,40029,40034,40039,40044,40049,40054,40059,40064,40069,40074,40079,40084,40089,40094,40099,40104,40109,40114,40119,40124,40129,40134,40139,40144,40149,40154,40159,40164,40169,40174,40179,40184,40189,40194,40199,40204,40209,40214,40219,40224,40229,40234,40239,40244,40249,40254,40259,40264,40269,40274,40279,40284,40289,40294,40299,40304,40309,40314,40319,40324,40329,40334,40339,40344,40349,40354,40359,40364,40369,40374,40379,40384,40389,40394,40399,40404,40409,40414,40419,40424,40429,40434,40439,40444,40449,40453,40459,40463,40465,40474,40477,40480,40489,40492,40495,40501,40507,40511,40519,40522,40525,40531,40535,40541,40547,40552,40557,40562,40567,40572,40577,40582,40587,40592,40597,40602,40607,40612,40617,40622,40629,40634,40639,40644,40649,40654,40659,40664,40669,40674,40679,40684,40689,40694,40698,40700,40707,40714,40717,40722,40728,40732,40735,40740,40747,40750,40757,40762,40767,40774,40778,40783,40785,40793,40795,40800,40808,40810,40815,40823,40825,40834,40835,40843,40848,40854,40858,40861,40867,40872,40877,40882,40887,40892,40897,40902,40907,40912,40917,40922,40927,40932,40937,40942,40947,40952,40957,40962,40967,40972,40977,40982,40987,40992,40999,41000,41005,41010,41015,41020,41025,])
#Crossfade 30p Helper Function
def getFrameRange(start, length):
l = [start+i for i in range(length)]
l = [n for i, n in enumerate(l) if i%5 in (0,1)]
string = ""
for digit in l:
string += " " + str(digit)
return string
#Fix Crossfades
src = core.remap.Rfs(src, src[:540]+undecimated[675:685].nnedi3.nnedi3(0).vivtc.VDecimate()+src[548:], mappings="[540 546]")
src = core.remap.Rfs(src, src.nnedi3.nnedi3(0), mappings="2852 2855 2864 30648 30649")
src = core.remap.Rfs(src, src.nnedi3.nnedi3(1), mappings="2870 17918 17922 17926 17927 17930 17931 17934 17935 30591 30592 30650")
frameRange = getFrameRange(1331, 27)
src = core.remap.Rfs(src, src.nnedi3.nnedi3(0), mappings=frameRange)
#Crop
src = core.std.SetFieldBased(src, 0)
src = core.std.CropRel(clip=src, left=4, top=2, right=4, bottom=0)
#Most of this stuff is just for the OP which I won't need next time onwards (because lossless)
def createCreditsMask(filename=None, clip=None):
if filename is not None:
credits = core.imwrif.Read(r"C:\Anime Encoding\Kaiji\Gyakkyou Burai Kaiji Ultimate Survivor\KAIJI_1\VIDEO_TS\EP 01\Masks/"+filename)
credits = core.fmtc.matrix(credits, "709", col_fam=vs.YUV)
credits = core.fmtc.resample(credits, csp=vs.YUV420P16)
credits = core.fmtc.bitdepth(credits, bits=8)
else:
credits = clip
mask = core.std.ShufflePlanes(credits, 0, vs.GRAY)
return core.std.Binarize(mask)
def fixCreditFades(clip: vs.VideoNode, filename, start, fadeIn=False, maximum=1, deflate=1, inflate=0):
credits = core.imwrif.Read(r"C:\Anime Encoding\Kaiji\Gyakkyou Burai Kaiji Ultimate Survivor\KAIJI_1\VIDEO_TS\EP 01\Masks/"+filename)
credits = core.fmtc.matrix(credits, "709", col_fam=vs.YUV)
credits = core.fmtc.resample(credits, csp=vs.YUV420P16)
credits = core.fmtc.bitdepth(credits, bits=8)
mask = createCreditsMask(clip=credits)
mask = kgf.iterate(mask, core.std.Maximum, maximum)
mask = kgf.iterate(mask, core.std.Deflate, maximum)
mask = kgf.iterate(mask, core.std.Inflate, inflate)
merged = clip[0:start]
if not fadeIn:
fadedCredits = core.std.MaskedMerge(clip[start:], Dissolve(credits, core.std.MaskedMerge(core.std.BlankClip(clip), clip, mask)[start+8:], 8), mask)[:8]
else:
fadedCredits = core.std.MaskedMerge(clip[start:], Dissolve(credits, core.std.MaskedMerge(core.std.BlankClip(clip), clip, mask)[start:], 8)[:8][::-1], mask)[:8]
merged += fadedCredits
merged += clip[start+8:]
return merged
def Dissolve(clip1: vs.VideoNode, clip2: vs.VideoNode, length=0):
current = length
clip = clip1
for i in range(length):
clip += core.std.Merge(clip1[-1], clip2[0:1], 1.0-1.0/length*current)
current-=1
clip += clip2[length:]
return clip[1:]
def dehalo(clip: vs.VideoNode, mask: vs.VideoNode):
filtered = scoll.edgecleaner(clip, 20)
filtered = havf.HQDeringmod(filtered, mrad=10, minp=10)
return core.std.MaskedMerge(clip, filtered, mask)
def quickMerge(clip: vs.VideoNode, frame1, frame2, weight=0.7, maskNum=0):
merge = core.std.MaskedMerge(clip[frame1], core.std.Merge(clip[frame1], clip[frame2], weight), OPMasks[maskNum])
return clip[:frame1] + merge + clip[frame1+1:]
#Halfway through this, I realized I could just reblend_vin and have a little detail loss since no one would
#even notice my efforts. The combed faded parts literally stay there for less than a second.
#But I was too deep into this to stop.
########################### OP CREDITS BEGIN ###########################
OPMasks = [createCreditsMask('OP{:d}.png'.format(i+1)).std.Maximum().std.Inflate() for i in range (6)]
src = fixCreditFades(src, "OP1.png", 178, False) #178 (OP1 FadeOut)
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.vinverse.Vinverse(src), OPMasks[0].std.Maximum()), "114")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.rgvs.Repair(core.vinverse.Vinverse(src), src, 22), OPMasks[0].std.Maximum()), "115 116")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.vinverse.Vinverse(src), OPMasks[1].std.Maximum()), "318")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.rgvs.Repair(core.vinverse.Vinverse(src), src, 22), OPMasks[1].std.Maximum()), "319 320")
src = quickMerge(src, 177, 178, 0.4, 0)
src = quickMerge(src, 325, 326, 0.7, 1)
src = quickMerge(src, 324, 325, 0.7, 1)
src = core.remap.Rfs(src, dehalo(src, kgf.iterate(OPMasks[1], core.std.Maximum, 6)), "[323 365]")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.rgvs.Repair(core.vinverse.Vinverse(src), src, 9), OPMasks[1].std.Maximum()), "[366 370]")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.nnedi3.nnedi3(src, 0), OPMasks[1].std.Maximum()), "371")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, taa.TAAmbk(src, aa_kernel='PointSangnom').vinverse.Vinverse(), OPMasks[2].std.Maximum()), "[378 380]")
src = fixCreditFades(src, "OP3.png", 378, True)
src = quickMerge(src, 385, 386, 0.7, 2)
src = quickMerge(src, 384, 385, 0.7, 2)
src = core.remap.Rfs(src, core.std.MaskedMerge(src, taa.TAAmbk(src, aa_kernel='PointSangnom').vinverse.Vinverse(), OPMasks[2].std.Maximum()), "[428 430]")
src = fixCreditFades(src, "OP3.png", 422, False)
src = quickMerge(src, 421, 422, 0.7, 2)
src = quickMerge(src, 420, 421, 0.4, 2)
src = quickMerge(src, 429, 430, 0.4, 2)
src = quickMerge(src, 430, 429, 0.4, 2)
src = core.remap.Rfs(src, core.std.MaskedMerge(src, taa.TAAmbk(src, aa_kernel='PointSangnom').vinverse.Vinverse(), OPMasks[3].std.Maximum()), "[436 438]")
src = fixCreditFades(src, "OP4.png", 436, True)
src = quickMerge(src, 443, 444, 0.8, 3)
src = quickMerge(src, 442, 443, 0.5, 3)
src = quickMerge(src, 441, 442, 0.4, 3)
src = quickMerge(src, 440, 441, 0.2, 3)
src = core.remap.Rfs(src, core.std.MaskedMerge(src, taa.TAAmbk(src, aa_kernel='PointSangnom').vinverse.Vinverse(), OPMasks[3].std.Maximum()), "[480 482]")
src = fixCreditFades(src, "OP4.png", 474, False)
src = quickMerge(src, 473, 474, 0.8, 3)
src = quickMerge(src, 472, 473, 0.5, 3)
src = quickMerge(src, 471, 472, 0.4, 3)
src = quickMerge(src, 470, 471, 0.2, 3)
src = quickMerge(src, 481, 482, 0.4, 3)
src = quickMerge(src, 482, 481, 0.5, 3)
src = core.remap.Rfs(src, core.std.MaskedMerge(src, taa.TAAmbk(src, aa_kernel='Eedi2'), OPMasks[4].std.Maximum()), "[488 490] [533 535]")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, havf.LSFmod(src, strength=200), OPMasks[4].std.Maximum()), "[488 490] [533 535]")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, havf.LSFmod(src, strength=200), OPMasks[5].std.Maximum()), "550 551 592 593")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.rgvs.Repair(core.vinverse.Vinverse(src), src, 9), OPMasks[5].std.Maximum()), "[550 552] [590 593]")
OPMasks += createCreditsMask("OP7Mask.png").std.Maximum().std.Inflate()
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.nnedi3.nnedi3(src, 0), OPMasks[6].std.Maximum()), "669 720")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, taa.TAAmbk(src, aa_kernel='Eedi2'), OPMasks[6].std.Maximum()), "670 671 719")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, havf.LSFmod(src, strength=200), OPMasks[6].std.Maximum()), "670 671 718")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.rgvs.Repair(core.vinverse.Vinverse(src), src, 9), OPMasks[6].std.Maximum()), "672 673 [716 719]")
src = quickMerge(src, 671, 672, 0.3, 6)
OPMasks += createCreditsMask("OP8Mask.png").std.Maximum().std.Inflate()
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.nnedi3.nnedi3(src, 0), OPMasks[7].std.Maximum()), "784")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, taa.TAAmbk(src, aa_kernel='Eedi2'), OPMasks[7].std.Maximum()), "785 830")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, havf.LSFmod(src, strength=200), OPMasks[7].std.Maximum()), "785 830")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.rgvs.Repair(core.vinverse.Vinverse(src), src, 9), OPMasks[7].std.Maximum()), "[786 789] [826 829]")
src = quickMerge(src, 785, 786, 0.3, 7)
src = quickMerge(src, 830, 829, 0.3, 7)
OPMasks += createCreditsMask("OP9Mask.png").std.Maximum().std.Inflate()
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.nnedi3.nnedi3(src, 0), OPMasks[8].std.Maximum()), "784")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, taa.TAAmbk(src, aa_kernel='Eedi2'), OPMasks[8].std.Maximum()), "852 853 854 896 897")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, havf.LSFmod(src, strength=200), OPMasks[8].std.Maximum()), "852 853 854 896 897")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.rgvs.Repair(core.vinverse.Vinverse(src), src, 9), OPMasks[8].std.Maximum()), "[853 856] [894 897]")
src = quickMerge(src, 854, 855, 0.8, 8)
src = quickMerge(src, 853, 855, 0.5, 8)
src = quickMerge(src, 852, 855, 0.4, 8)
src = quickMerge(src, 851, 855, 0.2, 8)
src = quickMerge(src, 894, 893, 0.8, 8)
src = quickMerge(src, 895, 893, 0.5, 8)
src = quickMerge(src, 896, 893, 0.4, 8)
src = quickMerge(src, 897, 893, 0.2, 8)
OPMasks += createCreditsMask("OP10Mask.png").std.Maximum().std.Inflate()
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.nnedi3.nnedi3(src, 0), OPMasks[9].std.Maximum()), "1119")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.std.BoxBlur(src, hradius=1, vradius=1), OPMasks[9].std.Maximum()), "1044 1045 [1115 1118]")
src = core.remap.Rfs(src, core.std.MaskedMerge(src, core.vinverse.Vinverse(src), OPMasks[9].std.Maximum()), "[1044 1047] [1115 1118]")
src = quickMerge(src, 1047, 1048, 0.8, 9)
src = quickMerge(src, 1046, 1048, 0.5, 9)
src = quickMerge(src, 1045, 1048, 0.4, 9)
src = quickMerge(src, 1044, 1048, 0.3, 9)
src = quickMerge(src, 1115, 1114, 0.8, 9)
src = quickMerge(src, 1116, 1114, 0.5, 9)
src = quickMerge(src, 1117, 1114, 0.4, 9)
src = quickMerge(src, 1118, 1114, 0.3, 9)
########################### OP CREDITS END ###########################
#Vinverse a best
src = core.remap.Rfs(src, core.vinverse.Vinverse(src), mappings="[0 11] [1135 1189] [1225 1236] [1317 1329] [1893 1916] [2841 2851] [2852 2854] [2856 2863] [2865 2869] [2871 2875] [7034 7057] [7711 7735] [8172 8201] [12124 12147] [13856 13886] [14062 14086] 17917 [17919 17921] [17923 17925] 17928 17929 17932 17933 17936 17937 [17938 17940] [18116 18131] [20780 20807] [22065 22098] [22147 22156] [22546 22569] [27676 27699] [27909 27944] [28456 28539] [28725 28748] [29077 29100] [30499 30502] [30516 30519] [30534 30537] 30589 30590 30593 30594 30595 [30863 30889]")
#Dehalo (not)
#src = core.remap.Rfs(src, bf.YAHRMask(src), mappings="")
#Fix ED credits
ED_mask = core.std.Expr([mt_lutspa.lutspa(src, mode="asbolute", relative=False, expr="x 0 >= x 400 < & 255 0 ?"), kgf.iterate(core.std.Binarize(src, 160), core.std.Maximum, 8)], "x y and 255 0 ?")
ED_mask = core.std.ShufflePlanes(ED_mask, 0, vs.GRAY)
telecined = telecined[38586:40548]
telecined = core.nnedi3.nnedi3(telecined, 3)
super = core.svp1.Super(telecined, "{pel:4}")
vectors= core.svp1.Analyse(super["clip"], super["data"], telecined, "{blksize:4, overlap:2, sharp:2}")
smooth = core.svp2.SmoothFps(telecined, super["clip"], super["data"], vectors["clip"], vectors["data"], "{num:4, den:1, algo:23}")
smooth = core.std.AssumeFPS(smooth,fpsnum=smooth.fps_num,fpsden=smooth.fps_den)
smooth = core.std.SelectEvery(smooth, 5, 3)
smooth = core.std.CropRel(smooth, 4, 4, 2, 0)
smooth = core.std.Splice([core.std.BlankClip(smooth, length=31029), smooth[:1354], core.std.BlankClip(smooth, length=539)], mismatch=True)
src = core.remap.Rfs(src, core.std.MaskedMerge(src, smooth, ED_mask), mappings="[31029 32382]")
src.set_output()
#[675 682]
#[1606 1634]
#[3470 3514]
#[8663 8692]
#[8852 8871]
#[9508 9538]
#[10085 10114]
#[17150 17172]
#[17414 17443]
#[22196 22225]
#[25775 25808]
#[27381 27410]
#[27411 27420]
#[37924 37927]
#[37946 37949]
#[37968 37971]
#[38036 38108]
#[38109 38112]
#38422
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment