-------------------------------------------------------------------------------- file_24-07-15_17-03-34.mkv -------------------------------------------------------------------------------- NVEncC 7.69 (x64) OS Windows 11 x64 (22631) [UTF-8] CPU Info AMD Ryzen 7 5700X3D 8-Core Processor [4.05GHz] (8C/16T) Locale LC_COLLATE=C;LC_CTYPE=English_United States.utf8;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C InitCuda: device #-1. Checking Environment Info... NVEncC (x64) 7.69 (r3010) by rigaya, Sep 23 2024 12:06:57 (VC 1929/Win) OS Version Windows 11 x64 (22631) CPU AMD Ryzen 7 5700X3D 8-Core Processor [4.05GHz] (8C/16T) cuInit: Success. cuvidInit: Success. InitCuda: Success. gpuinfo: checking for DX11 device #0. devDX11: EnumAdapters 0... devDX11: InitDX11() success. gpuinfo: Init DX11 device -1119794672. gpuinfo: cuDeviceGet:DX11(0): success: 0 gpuinfo: cuDeviceGetName(0): NVIDIA GeForce RTX 4070 SUPER gpuinfo: cudaDeviceGetAttribute: CUDA 8.9 gpuinfo: PCIBusId: 0000:05:00.0 gpuinfo: Got GPU Info from NVML. gpuinfo: NV Driver version: 560810. gpuinfo: CUDA Driver version: 12060. gpuinfo: using cuda schedule mode: auto. gpuinfo: cuCtxCreate: Success. gpuinfo: cuCtxPopCurrent: Success. gpuinfo: cuvidCtxLockCreate: Success. nvenc : Loaded nvEncodeAPI64.dll. nvenc : nvEncodeAPICreateInstance(APIVer=0x200000c: 12.2): Success. nvenc : Opened Encode Session (API ver 12.2) nvenc : NvEncOpenEncodeSessionEx(device_type=NV_ENC_DEVICE_TYPE_CUDA): Success. nvenc : m_pEncodeAPI->nvEncGetEncodeGUIDCount: 3. nvenc : Found codec H.264/AVC. nvenc : Found codec H.265/HEVC. nvenc : Found codec AV1. nvenc : m_pEncodeAPI->nvEncGetEncodeProfileGUIDCount: 6. nvenc : Found H.264/AVC baseline profile. nvenc : Found H.264/AVC main profile. nvenc : Found H.264/AVC high profile. nvenc : Found H.264/AVC Unknown profile. nvenc : Found H.264/AVC high444 profile. nvenc : Found H.264/AVC auto profile. nvenc : m_pEncodeAPI->nvEncGetEncodePresetCount: 17. nvenc : m_pEncodeAPI->nvEncGetEncodePresetGUIDs: Success. nvenc : m_pEncodeAPI->nvEncGetInputFormatCount: 9. nvenc : Found input fmt: nvenc : nv12 nvenc : yv12 nvenc : Invalid nvenc : yuv444 nvenc : rgb32 nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : m_pEncodeAPI->nvEncGetEncodeProfileGUIDCount: 4. nvenc : Found H.265/HEVC Unknown profile. nvenc : Found H.265/HEVC main profile. nvenc : Found H.265/HEVC main10 profile. nvenc : Found H.265/HEVC main444 profile. nvenc : m_pEncodeAPI->nvEncGetEncodePresetCount: 17. nvenc : m_pEncodeAPI->nvEncGetEncodePresetGUIDs: Success. nvenc : m_pEncodeAPI->nvEncGetInputFormatCount: 11. nvenc : Found input fmt: nvenc : nv12 nvenc : yv12 nvenc : Invalid nvenc : yuv444 nvenc : yv12(10bit) nvenc : yuv444(10bit) nvenc : rgb32 nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : m_pEncodeAPI->nvEncGetEncodeProfileGUIDCount: 2. nvenc : Found AV1 Unknown profile. nvenc : Found AV1 main profile. nvenc : m_pEncodeAPI->nvEncGetEncodePresetCount: 7. nvenc : m_pEncodeAPI->nvEncGetEncodePresetGUIDs: Success. nvenc : m_pEncodeAPI->nvEncGetInputFormatCount: 9. nvenc : Found input fmt: nvenc : nv12 nvenc : yv12 nvenc : Invalid nvenc : yv12(10bit) nvenc : rgb32 nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : Invalid gpuinfo: createDeviceFeatureList nvenc : nvEncDestroyEncoder... nvenc : nvEncDestroyEncoder: success. InitDeviceList: Success. GPU #0 (NVIDIA GeForce RTX 4070 SUPER) available for encode. CheckGPUListByEncoder: Success. GPUAutoSelect: Success. Set csp thread param: all (0x0xffff), priority=normal, throttling=auto. avhw/sw reader selected. InitInput: input selected : 7. avcuvid: select audio track all, codec copy [AVFormatContext @ 0000022bd08379c0] Opening 'file_24-07-15_17-03-34.mp4' for reading [file @ 0000022bd07e6ec0] Setting default whitelist 'file,crypto,data' [mov,mp4,m4a,3gp,3g2,mj2 @ 0000022bd08379c0] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000022bd08379c0] ISO: File Type Major Brand: mp42 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000022bd08379c0] Unknown dref type 0x206c7275 size 12 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000022bd08379c0] Unknown dref type 0x206c7275 size 12 avcuvid: opened file "file_24-07-15_17-03-34.mp4". [mov,mp4,m4a,3gp,3g2,mj2 @ 0000022bd08379c0] Before avformat_find_stream_info() pos: 79125702 bytes read:47087 seeks:1 nb_streams:2 [h264 @ 0000022bd0807c00] nal_unit_type: 7(SPS), nal_ref_idc: 3 [h264 @ 0000022bd0807c00] Decoding VUI [h264 @ 0000022bd0807c00] nal_unit_type: 8(PPS), nal_ref_idc: 3 Transform tree: mdct_inv_float_avx2 - type: mdct_float, len: 64, factors[2]: [2, any], flags: [aligned, out_of_place, inv_only] fft32_asm_float_fma3 - type: fft_float, len: 32, factor: 2, flags: [aligned, inplace, out_of_place, preshuf, asm_call] Transform tree: mdct_inv_float_avx2 - type: mdct_float, len: 64, factors[2]: [2, any], flags: [aligned, out_of_place, inv_only] fft32_asm_float_fma3 - type: fft_float, len: 32, factor: 2, flags: [aligned, inplace, out_of_place, preshuf, asm_call] Transform tree: mdct_pfa_3xM_inv_float_c - type: mdct_float, len: 96, factors[2]: [3, any], flags: [unaligned, out_of_place, inv_only] fft16_ns_float_fma3 - type: fft_float, len: 16, factor: 2, flags: [aligned, inplace, out_of_place, preshuf] Transform tree: mdct_inv_float_avx2 - type: mdct_float, len: 120, factors[2]: [2, any], flags: [aligned, out_of_place, inv_only] fft_pfa_15xM_asm_float_avx2 - type: fft_float, len: 60, factors[2]: [15, 2], flags: [aligned, inplace, out_of_place, preshuf, asm_call] fft4_fwd_asm_float_sse2 - type: fft_float, len: 4, factor: 2, flags: [aligned, inplace, out_of_place, preshuf, asm_call] Transform tree: mdct_inv_float_avx2 - type: mdct_float, len: 128, factors[2]: [2, any], flags: [aligned, out_of_place, inv_only] fft_sr_asm_float_fma3 - type: fft_float, len: 64, factor: 2, flags: [aligned, inplace, out_of_place, preshuf, asm_call] Transform tree: mdct_inv_float_avx2 - type: mdct_float, len: 480, factors[2]: [2, any], flags: [aligned, out_of_place, inv_only] fft_pfa_15xM_asm_float_avx2 - type: fft_float, len: 240, factors[2]: [15, 2], flags: [aligned, inplace, out_of_place, preshuf, asm_call] fft16_asm_float_fma3 - type: fft_float, len: 16, factor: 2, flags: [aligned, inplace, out_of_place, preshuf, asm_call] Transform tree: mdct_inv_float_avx2 - type: mdct_float, len: 512, factors[2]: [2, any], flags: [aligned, out_of_place, inv_only] fft_sr_asm_float_fma3 - type: fft_float, len: 256, factor: 2, flags: [aligned, inplace, out_of_place, preshuf, asm_call] Transform tree: mdct_pfa_3xM_inv_float_c - type: mdct_float, len: 768, factors[2]: [3, any], flags: [unaligned, out_of_place, inv_only] fft_sr_ns_float_fma3 - type: fft_float, len: 128, factor: 2, flags: [aligned, inplace, out_of_place, preshuf] Transform tree: mdct_inv_float_avx2 - type: mdct_float, len: 960, factors[2]: [2, any], flags: [aligned, out_of_place, inv_only] fft_pfa_15xM_asm_float_avx2 - type: fft_float, len: 480, factors[2]: [15, 2], flags: [aligned, inplace, out_of_place, preshuf, asm_call] fft32_asm_float_fma3 - type: fft_float, len: 32, factor: 2, flags: [aligned, inplace, out_of_place, preshuf, asm_call] Transform tree: mdct_inv_float_avx2 - type: mdct_float, len: 1024, factors[2]: [2, any], flags: [aligned, out_of_place, inv_only] fft_sr_asm_float_fma3 - type: fft_float, len: 512, factor: 2, flags: [aligned, inplace, out_of_place, preshuf, asm_call] Transform tree: mdct_fwd_float_c - type: mdct_float, len: 1024, factors[2]: [2, any], flags: [unaligned, out_of_place, fwd_only] fft_sr_ns_float_fma3 - type: fft_float, len: 512, factor: 2, flags: [aligned, inplace, out_of_place, preshuf] [h264 @ 0000022bd0807c00] nal_unit_type: 7(SPS), nal_ref_idc: 3 [h264 @ 0000022bd0807c00] Decoding VUI [h264 @ 0000022bd0807c00] nal_unit_type: 8(PPS), nal_ref_idc: 3 [h264 @ 0000022bd0807c00] nal_unit_type: 9(AUD), nal_ref_idc: 0 [h264 @ 0000022bd0807c00] nal_unit_type: 5(IDR), nal_ref_idc: 3 [h264 @ 0000022bd0807c00] Format yuv420p chosen by get_format(). [h264 @ 0000022bd0807c00] Reinit context to 1920x1088, pix_fmt: yuv420p [h264 @ 0000022bd0807c00] nal_unit_type: 9(AUD), nal_ref_idc: 0 [h264 @ 0000022bd0807c00] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3 [h264 @ 0000022bd0807c00] nal_unit_type: 9(AUD), nal_ref_idc: 0 [h264 @ 0000022bd0807c00] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3 [h264 @ 0000022bd0807c00] nal_unit_type: 9(AUD), nal_ref_idc: 0 [h264 @ 0000022bd0807c00] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3 [h264 @ 0000022bd0807c00] nal_unit_type: 9(AUD), nal_ref_idc: 0 [h264 @ 0000022bd0807c00] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3 [h264 @ 0000022bd0807c00] nal_unit_type: 9(AUD), nal_ref_idc: 0 [h264 @ 0000022bd0807c00] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3 [h264 @ 0000022bd0807c00] nal_unit_type: 9(AUD), nal_ref_idc: 0 [h264 @ 0000022bd0807c00] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000022bd08379c0] All info found [mov,mp4,m4a,3gp,3g2,mj2 @ 0000022bd08379c0] After avformat_find_stream_info() pos: 1136005 bytes read:1215107 seeks:2 frames:20 avcuvid: got stream information. Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file_24-07-15_17-03-34.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp41isom creation_time : 2024-07-15T10:03:35.000000Z Duration: 00:00:26.71, start: 0.000000, bitrate: 23699 kb/s Stream #0:0[0x1](und), 19, 1/60000: Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(tv, bt709/reserved/reserved, progressive, left), 1920x1080 [SAR 1:1 DAR 16:9], 0/1, 23511 kb/s, 60 fps, 60 tbr, 60k tbn (default) Metadata: creation_time : 2024-07-15T10:03:35.000000Z handler_name : VideoHandler vendor_id : [0][0][0][0] encoder : AVC Coding Stream #0:1[0x2](und), 1, 1/48000: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 192 kb/s (default) Metadata: creation_time : 2024-07-15T10:03:35.000000Z handler_name : SoundHandler vendor_id : [0][0][0][0] avcuvid: found video stream, stream idx 0 avcuvid: found audio stream, stream idx 1, trackID 1.0, aac, frame_size 1024, timebase 1/48000, delay 0.000 ms avcuvid: use video stream #0 for input, codec h264, stream time_base 1/60000, codec_timebase 0/1. avcuvid: hdr10plusMetadataCopy: off avcuvid: doviRpuMetadataCopy: off avcuvid: can be decoded by cuvid. avcuvid: initialized h264_mp4toannexb filter. avcuvid: start predecode. avcuvid: GetHeader extradata(43): 01 64 00 2a ff e1 00 1c 67 64 00 2a ac 2b 40 3c 01 13 f2 e0 2d 40 00 00 50 00 00 3e 80 00 1d 4c 00 f1 c2 aa 01 00 04 68 ee 3c b0 avcuvid: GetHeader: changed 43 bytes -> 40 bytes by h264_mp4toannexb. avcuvid: GetHeader: 40 bytes. avcuvid: GetHeader(40): 00 00 00 01 67 64 00 2a ac 2b 40 3c 01 13 f2 e0 2d 40 00 00 50 00 00 3e 80 00 1d 4c 00 f1 c2 aa 00 00 00 01 68 ee 3c b0 avcuvid: initialized h264 codec context for parser: time_base: 0/1, pkt_timebase: 1/60000. avcuvid: fps decoder 16020000/266999, invalid: false avcuvid: maxCheckFrames 48, maxCheckSec: 1.000e+99 [h264 @ 0000022bd0852800] nal_unit_type: 7(SPS), nal_ref_idc: 3 [h264 @ 0000022bd0852800] nal_unit_type: 8(PPS), nal_ref_idc: 3 [h264 @ 0000022bd0852800] Decoding VUI [h264 @ 0000022bd0852800] Decoding VUI avcuvid: found first key frame: timestamp 0 (0), offset 0 avcuvid: read 48 packets. avcuvid: checking 31 frame samples. avcuvid: stream timebase 0/1 avcuvid: decoder fps 16020000/266999 avcuvid: duration histgram of 1 frames avcuvid: 1000 [ 31 frames] avcuvid: using popular duration... avcuvid: fps mul: 1001 avcuvid: raw avgDuration: 1000.000000 avcuvid: estimatedAvgFps: 60060/1001 avcuvid: use decoder fps... avcuvid: final AvgFps (raw64): 60060/1001 avcuvid: final AvgFps (gcd): 16020000/266999 avcuvid: final AvgFps (round): 60/1 avcuvid: checking for stream #1 avcuvid: avcuvid: H.264/AVC, 1920x1080, 60/1 fps avcuvid: streamFirstKeyPts: 0 avcuvid: matrix:bt709,colorprim:unknown,transfer:unknown,range:limited,chromaloc:left avcuvid: sar 1:1, bitdepth 8 vfr mode automatically enabled with timebase 1/480 avcuvid: Set input thread param: all (0x0xffff), priority=normal, throttling=auto. InitInput: Success. InitDevice: device #0 (NVIDIA GeForce RTX 4070 SUPER) selected. [h264 @ 0000022bd0852800] Decoding VUI nvenc : Loaded nvEncodeAPI64.dll. nvenc : nvEncodeAPICreateInstance(APIVer=0x200000c: 12.2): Success. [h264 @ 0000022bd0852800] Decoding VUI [h264 @ 0000022bd0852800] Decoding VUI nvenc : Opened Encode Session (API ver 12.2) nvenc : NvEncOpenEncodeSessionEx(device_type=NV_ENC_DEVICE_TYPE_CUDA): Success. nvenc : m_pEncodeAPI->nvEncGetEncodeGUIDCount: 3. nvenc : Found codec H.264/AVC. [h264 @ 0000022bd0852800] Decoding VUI nvenc : Found codec H.265/HEVC. nvenc : Found codec AV1. nvenc : m_pEncodeAPI->nvEncGetEncodeProfileGUIDCount: 6. nvenc : Found H.264/AVC baseline profile. nvenc : Found H.264/AVC main profile. nvenc : Found H.264/AVC high profile. nvenc : Found H.264/AVC Unknown profile. nvenc : Found H.264/AVC high444 profile. nvenc : Found H.264/AVC auto profile. nvenc : m_pEncodeAPI->nvEncGetEncodePresetCount: 17. nvenc : m_pEncodeAPI->nvEncGetEncodePresetGUIDs: Success. nvenc : m_pEncodeAPI->nvEncGetInputFormatCount: 9. nvenc : Found input fmt: nvenc : nv12 nvenc : yv12 nvenc : Invalid nvenc : yuv444 nvenc : rgb32 nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : m_pEncodeAPI->nvEncGetEncodeProfileGUIDCount: 4. nvenc : Found H.265/HEVC Unknown profile. nvenc : Found H.265/HEVC main profile. nvenc : Found H.265/HEVC main10 profile. nvenc : Found H.265/HEVC main444 profile. nvenc : m_pEncodeAPI->nvEncGetEncodePresetCount: 17. nvenc : m_pEncodeAPI->nvEncGetEncodePresetGUIDs: Success. nvenc : m_pEncodeAPI->nvEncGetInputFormatCount: 11. nvenc : Found input fmt: nvenc : nv12 nvenc : yv12 nvenc : Invalid nvenc : yuv444 nvenc : yv12(10bit) nvenc : yuv444(10bit) nvenc : rgb32 nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : m_pEncodeAPI->nvEncGetEncodeProfileGUIDCount: 2. nvenc : Found AV1 Unknown profile. nvenc : Found AV1 main profile. nvenc : m_pEncodeAPI->nvEncGetEncodePresetCount: 7. nvenc : m_pEncodeAPI->nvEncGetEncodePresetGUIDs: Success. nvenc : m_pEncodeAPI->nvEncGetInputFormatCount: 9. nvenc : Found input fmt: nvenc : nv12 nvenc : yv12 nvenc : Invalid nvenc : yv12(10bit) nvenc : rgb32 nvenc : Invalid nvenc : Invalid nvenc : Invalid nvenc : Invalid InitNVEncInstance: Success. cuvid: nvcuvid.dll available cuvid: created frame queue cuvid: created video parser cuvid: DecodePacket: success InitDecoder: Success. cspconv: cspconv(nv12 -> yv12(16bit)) ngx-truehdr: GPU CC: 8.9. ngx-truehdr: Loaded dll NVEncNVSDKNGX.dll. ngx-truehdr: Created NVSDK NGX handle. ngx-truehdr: Initialized NVSDK NGX library. ngx-truehdr: Create input csp conversion filter. colorspace: nvrtc64_101_0.dll available. cspconv: cspconv(yv12(16bit) -> yuv444(16bit)) ColorspaceOpCtrl: Search path from matrix:bt709,colorprim:unknown,transfer:unknown -> matrix:GBR,colorprim:unknown,transfer:unknown ColorspaceOpCtrl: Set path... ColorspaceOpCtrl: node: matrix:bt709,colorprim:unknown,transfer:unknown ColorspaceOpCtrl: node: matrix:GBR,colorprim:unknown,transfer:unknown colorspace: additional param size: 8. colorspace: transfer additional param to device. colorspace_conv: nvrtc64_101_0.dll available. colorspace_conv: program source... colorspace_conv: 椣摦晥张䍟䑕䍁彃呒彃ൟ⌊敤楦敮䌠䱏剏偓䍁彅商䍎张摟癥捩彥 彟湩楬敮彟਍攣獬൥⌊敤楦敮䌠䱏剏偓䍁彅商䍎猠慴楴ൣ⌊牰条慭漠据൥⌊湩汣摵⁥挼慭桴ാ⌊湩汣摵⁥挼汦慯㹴਍瀣慲浧⁡慷湲湩⁧瀨獵⥨਍瀣慲浧⁡慷湲湩⁧搨獩扡敬›㠴㤱ഩ⌊湩汣摵⁥挼摵彡畲瑮浩⹥㹨਍瀣慲浧⁡慷湲湩⁧瀨灯ഩ⌊湥楤൦ഊ琊灹摥晥映潬瑡‴啌噔䍅഻ഊ⌊晩摮晥挠慬灭਍搣晥湩⁥汣浡⡰ⱸ氠睯‬楨桧
⠨砨
㴼⠠楨桧⤩㼠⠠⠨⥸㸠‽氨睯⤩㼠⠠⥸㨠⠠潬⥷
›栨杩⥨ഩ⌊湥楤൦ഊ⼊ꖻ룤窋浩꺁牳屣楺杭捜汯牯灳捡履慧浭⹡灣袂苣鶋胥膀룤ꢃ铦覤਍਍潣獮⁴汦慯⁴䕒㝃㤰䅟偌䅈㴠ㄠ〮㤹㤲㠶㘲〸㐹昴഻挊湯瑳映潬瑡删䍅〷弹䕂䅔㴠〠〮㠱㔰㤳㠶ㄵ㠰㜰㭦਍਍潣獮⁴汦慯⁴䵓呐彅㐲䴰䅟偌䅈㴠ㄠㄮㄱ㜵ㄲ㔹㈹㜱ㄳ㭦਍潣獮⁴汦慯⁴䵓呐彅㐲䴰䉟呅⁁㴠〠〮㈲㈸㔱㔸㈵㐹㔴㭦਍਍⼯䄠橤獵整⁤潦⁲潣瑮湩極祴漠⁦楦獲⁴敤楲慶楴敶മ挊湯瑳映潬瑡匠䝒彂䱁䡐⁁‽⸱㔰〵〱ㄷ㤸㜴㠵昷഻挊湯瑳映潬瑡匠䝒彂䕂䅔㴠〠〮㌰㐰㈱㈸㘵㄰㠲㭦਍਍潣獮⁴汦慯⁴呓〲㐸䵟‱‽⸰㔱㌹㄰㔷㠷㈱昵഻挊湯瑳映潬瑡匠㉔㠰弴㉍㴠㜠⸸㐸㜳昵഻挊湯瑳映潬瑡匠㉔㠰弴ㅃ㴠〠㠮㔳㌹㔷㭦਍潣獮⁴汦慯⁴呓〲㐸䍟′‽㠱㠮ㄵ㘵㔲㭦਍潣獮⁴汦慯⁴呓〲㐸䍟″‽㠱㘮㜸昵഻ഊ挊湯瑳映潬瑡䄠䥒彂㙂強⁁‽⸰㜱㠸㈳㜷㭦਍潣獮⁴汦慯⁴剁䉉䉟㜶䉟㴠〠㈮㐸㘶㤸昲഻挊湯瑳映潬瑡䄠䥒彂㙂強⁃‽⸰㔵㤹〱㌷㭦਍਍潣獮⁴汦慯⁴䱆䅏彔偅⁓‽⸱㜱㐵㐹㔳攱㌭昸഻ഊ挊湯瑳映潬瑡䴠彐䕒彆䡗呉⁅‽〲⸳昰഻挊湯瑳映潬瑡䴠彐䕒彆䡗呉彅䱈⁇‽⸳㜱㔹昵഻ഊ⼊ 潃浭湯挠湯瑳湡獴映牯匠偍䕔匠⹔〲㐸⠠䑈⥒਍潣獮⁴汦慯⁴児䵟‱‽㘲〱〮⁦ 〴㘹〮⁦‪⸱昰⼠㐠〮㭦਍潣獮⁴汦慯⁴児䵟′‽㔲㌲〮⁦ 〴㘹〮⁦‪㈱⸸昰഻挊湯瑳映潬瑡倠彑ㅃ㴠㌠㈴⸴昰⼠㐠㤰⸶昰഻挊湯瑳映潬瑡倠彑㉃㴠㈠ㄴ⸳昰⼠㐠㤰⸶昰⨠㌠⸲昰഻挊湯瑳映潬瑡倠彑㍃㴠㈠㤳⸲昰⼠㐠㤰⸶昰⨠㌠⸲昰഻ഊ⼊ 桃獯湥映牯挠浯慰楴楢楬祴眠瑩⁨楨桧牥瀠敲楣楳湯删䍅〷弹䱁䡐⽁䕒㝃㤰䉟呅⹁਍⼯匠敥›呉ⵕ⁒呂㈮㤳ⴰ′⸵⸳റ挊湯瑳映潬瑡匠㉔㠰弴住䙔卟䅃䕌㴠㔠⸹㤴㠰㈰㠳ㄷ㌵㌸㭦਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣〷弹敯晴昨潬瑡砠
ൻ †椠⁦砨㰠删䍅〷弹䕂䅔ഩ †††砠㴠砠⨠㐠㔮㭦਍††汥敳਍††††⁸‽䕒㝃㤰䅟偌䅈⨠瀠睯⡦ⱸ〠㐮昵
‭刨䍅〷弹䱁䡐⁁‭⸱昰㬩਍਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣〷弹湩敶獲彥敯晴昨潬瑡砠
ൻ †椠⁦砨㰠㐠㔮⁦‪䕒㝃㤰䉟呅⥁਍††††⁸‽⁸ ⸴昵഻ †攠獬൥ †††砠㴠瀠睯⡦砨⬠⠠䕒㝃㤰䅟偌䅈ⴠㄠ〮⥦
 䕒㝃㤰䅟偌䅈‬⸱昰⼠〠㐮昵㬩਍਍††敲畴湲砠഻紊਍਍⼯䤠湧牯⁥桴⁥呂ㄮ㠸‶牰癯獩潩獮映牯氠浩瑩摥挠湯牴獡⁴湡⁤獡畳敭愠摩慥剃⹔਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣㠱㘸敟瑯⡦汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⸰昰㨠瀠睯⡦ⱸ㈠㐮⥦഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣㠱㘸楟癮牥敳敟瑯⡦汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⸰昰㨠瀠睯⡦ⱸㄠ〮⁦ ⸲昴㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡漠瑯彦弱⠲汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⁸›潰晷砨‬⸱昲㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡椠癮牥敳潟瑯彦弱⠲汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⁸›潰晷砨‬⸱昰⼠ㄠ㈮⥦഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴潯晴獟㉴㠰⠴汦慯⁴⥸笠਍††敲畴湲爠捥ㅟ㠸弶潥晴爨捥㝟㤰潟瑥⡦⁸‪呓〲㐸佟呏彆䍓䱁⥅
 〱⸰昰഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴湩敶獲彥潯晴獟㉴㠰⠴汦慯⁴⥸笠਍††敲畴湲爠捥㝟㤰楟癮牥敳潟瑥⡦敲彣㠱㘸楟癮牥敳敟瑯⡦⁸‪〱⸰昰⤩⼠匠㉔㠰弴住䙔卟䅃䕌഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴潬ㅧ〰潟瑥⡦汦慯⁴⥸笠਍††敲畴湲砠㰠‽⸰㄰⁦‿⸰昰㨠ㄠ〮⁦‫潬ㅧ昰砨
‪ㄨ〮⁦ ⸲昰㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠杯〱弰湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵⁸㴼〠〮⁦‿⸰㄰⁦›潰晷ㄨ⸰昰‬′‪砨ⴠㄠ〮⥦㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠杯ㄳ弶敯晴昨潬瑡砠
ൻ †爠瑥牵⁸㴼〠〮㌰㘱㈲㜷㘶⁦‿⸰昰㨠ㄠ〮⁦‫潬ㅧ昰砨
‪ㄨ〮⁦ ⸲昵㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠杯ㄳ弶湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵⁸㴼〠〮⁦‿⸰〰ㄳ㈶㜲㘷昶㨠瀠睯⡦〱〮ⱦ㈠㔮⁦‪砨ⴠㄠ〮⥦㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡爠捥㑟〷彭敯晴昨潬瑡砠
ൻ †爠瑥牵⁸‼⸰昰㼠〠〮⁦›潰晷砨‬⸲昲㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡爠捥㑟〷彭湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵⁸‼⸰昰㼠〠〮⁦›潰晷砨‬⸱昰⼠㈠㈮⥦഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣㜴戰彧敯晴昨潬瑡砠
ൻ †爠瑥牵⁸‼⸰昰㼠〠〮⁦›潰晷砨‬⸲昸㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡爠捥㑟〷杢楟癮牥敳潟瑥⡦汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⸰昰㨠瀠睯⡦ⱸㄠ〮⁦ ⸲昸㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡猠灭整㉟〴彭敯晴昨潬瑡砠
ൻ †椠⁦砨㰠㐠〮⁦‪䵓呐彅㐲䴰䉟呅⥁਍††††⁸‽⁸‪ㄨ〮⁦ ⸴昰㬩਍††汥敳਍††††⁸‽潰晷⠨⁸‫匨偍䕔㉟〴彍䱁䡐⁁‭⸱昰⤩⼠匠偍䕔㉟〴彍䱁䡐ⱁㄠ〮⁦ ⸰㔴⥦഻ഊ †爠瑥牵㭸਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡猠灭整㉟〴彭湩敶獲彥敯晴昨潬瑡砠
ൻ †椠⁦砨㰠匠偍䕔㉟〴彍䕂䅔ഩ †††砠㴠砠⨠㐠〮㭦਍††汥敳਍††††⁸‽䵓呐彅㐲䴰䅟偌䅈⨠瀠睯⡦ⱸ〠㐮昵
‭匨偍䕔㉟〴彍䱁䡐⁁‭⸱昰㬩਍਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴癸捹彣敯晴昨潬瑡砠
ൻ †爠瑥牵潣祰楳湧⡦敲彣〷弹敯晴昨扡晳砨⤩‬⥸഻紊਍਍汦慯⁴癸捹彣湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵潣祰楳湧⡦敲彣〷弹湩敶獲彥敯晴昨扡晳砨⤩‬⥸഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴牡扩扟㜶潟瑥⡦汦慯⁴⥸笠਍††⼯倠敲敶瑮渠来瑡癩⁥楰數獬映潲楹汥楤杮丠乁മ †砠㴠映慭晸砨‬⸰昰㬩਍਍††晩⠠⁸㴼⠠⸱昰⼠ㄠ⸲昰⤩਍††††⁸‽煳瑲⡦⸳昰⨠砠㬩਍††汥敳਍††††⁸‽剁䉉䉟㜶䅟⨠氠杯⡦㈱〮⁦‪⁸‭剁䉉䉟㜶䉟
‫剁䉉䉟㜶䍟഻ഊ †爠瑥牵㭸਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡愠楲形㙢強湩敶獲彥敯晴昨潬瑡砠
ൻ †⼠ 牐癥湥⁴敮慧楴敶瀠硩汥⁳硥慰摮湩⁧湩潴瀠獯瑩癩⁥慶畬獥മ †砠㴠映慭晸砨‬⸰昰㬩਍਍††晩⠠⁸㴼〠㔮⥦਍††††⁸‽砨⨠砠
‪ㄨ〮⁦ ⸳昰㬩਍††汥敳਍††††⁸‽攨灸⡦砨ⴠ䄠䥒彂㙂強⥃⼠䄠䥒彂㙂強⥁⬠䄠䥒彂㙂強⥂⨠⠠⸱昰⼠ㄠ⸲昰㬩਍਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴牳执敟瑯⡦汦慯⁴⥸笠਍††晩⠠⁸‼㈱㤮昲⨠匠䝒彂䕂䅔ഩ †††砠⨠‽ㄨ〮⁦ ㈱㤮昲㬩਍††汥敳਍††††⁸‽潰晷⠨⁸‫匨䝒彂䱁䡐⁁‭⸱昰⤩⨠⠠⸱昰⼠匠䝒彂䱁䡐⥁‬⸲昴㬩਍਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴牳执楟癮牥敳敟瑯⡦汦慯⁴⥸笠਍††晩⠠⁸‼剓䉇䉟呅⥁਍††††⁸‽⁸‪㈱㤮昲഻ †攠獬൥ †††砠㴠匠䝒彂䱁䡐⁁‪潰晷砨‬⸱昰⼠㈠㐮⥦ⴠ⠠剓䉇䅟偌䅈ⴠㄠ〮⥦഻ഊ †爠瑥牵㭸਍ൽഊ⼊ 慈摮敬瘠污敵⁳湩琠敨爠湡敧嬠⸰ⴰ⸱崰猠捵⁨桴瑡琠敨⁹慭捴⁨⁡敬慧祣䌠呒മ䌊䱏剏偓䍁彅商䍎映潬瑡砠祶捣敟瑯⡦汦慯⁴⥸笠਍††晩⠠⁸‼⸰昰簠⁼⁸‾⸱昰ഩ †††爠瑥牵潣祰楳湧⡦敲彣〷弹湩敶獲彥敯晴昨扡晳砨⤩‬⥸഻ †攠獬൥ †††爠瑥牵潣祰楳湧⡦敲彣㠱㘸敟瑯⡦慦獢⡦⥸Ⱙ砠㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡砠祶捣楟癮牥敳敟瑯⡦汦慯⁴⥸笠਍††晩⠠⁸‼⸰昰簠⁼⁸‾⸱昰ഩ †††爠瑥牵潣祰楳湧⡦敲彣〷弹敯晴昨扡晳砨⤩‬⥸഻ †攠獬൥ †††爠瑥牵潣祰楳湧⡦敲彣㠱㘸楟癮牥敳敟瑯⡦慦獢⡦⥸Ⱙ砠㬩਍ൽഊ⼊瀯影灳捡彥潴江湩慥൲䌊䱏剏偓䍁彅商䍎映潬瑡猠彴〲㐸敟瑯⡦汦慯⁴⥸笠਍††⼯䘠汩整⁲敮慧楴敶瘠污敵⁳潴愠潶摩丠乁മ †椠⁦砨㸠〠〮⥦笠਍††††汦慯⁴灸睯㴠瀠睯⡦ⱸㄠ〮⁦ 呓〲㐸䵟⤲഻ †††映潬瑡渠浵㴠映慭晸砨潰⁷‭呓〲㐸䍟ⰱ〠〮⥦഻ †††映潬瑡搠湥㴠映慭晸匨㉔㠰弴㉃ⴠ匠㉔㠰弴㍃⨠砠潰ⱷ䘠佌呁䕟卐㬩਍††††⁸‽潰晷渨浵⼠搠湥‬⸱昰⼠匠㉔㠰弴ㅍ㬩਍††⁽汥敳笠਍††††⁸‽⸰昰഻ †素਍਍††敲畴湲砠഻紊਍਍⼯楬敮牡瑟彯煰獟慰散਍佃佌卒䅐䕃䙟乕⁃汦慯⁴瑳㉟㠰弴湩敶獲彥潥晴昨潬瑡砠
ൻ †⼠ 楆瑬牥渠来瑡癩⁥慶畬獥琠癡楯⁤䅎ⱎ愠摮愠獬灳捥慩⵬慣敳〠猠桴瑡⠠⡦⡧⤰
㴽〠⸩਍††晩⠠⁸‾⸰昰
ൻ †††映潬瑡砠潰⁷‽潰晷砨‬呓〲㐸䵟⤱഻⌊晩〠਍††††⼯传楲楧慮潦浲汵瑡潩牦浯匠偍䕔匠⁔〲㐸㈺㄰‴異汢捩瑡潩⹮਍††††汦慯⁴畮‽呓〲㐸䍟‱‫呓〲㐸䍟′‪灸睯഻ †††映潬瑡搠湥㴠ㄠ〮⁦‫呓〲㐸䍟″‪灸睯഻ †††砠㴠瀠睯⡦畮 敤Ɱ匠㉔㠰弴㉍㬩਍攣獬൥ †††⼠ 潍敲猠慴汢⁥牡慲杮浥湥⁴桴瑡愠潶摩⁳潳敭挠湡散汬瑡潩牥潲⹲਍††††汦慯⁴畮‽匨㉔㠰弴ㅃⴠㄠ〮⥦⬠⠠呓〲㐸䍟′‭呓〲㐸䍟⤳⨠砠潰㭷਍††††汦慯⁴敤‽⸱昰⬠匠㉔㠰弴㍃⨠砠潰㭷਍††††⁸‽潰晷ㄨ〮⁦‫畮 敤Ɱ匠㉔㠰弴㉍㬩਍攣摮晩਍††⁽汥敳笠਍††††⁸‽⸰昰഻ †素਍਍††敲畴湲砠഻紊਍਍⼯䄠灰楬獥愠瀠牥挭慨湮汥挠牯敲瑣潩湩瑳慥⁤景琠敨椠整慲楴敶洠瑥潨⁤灳捥晩敩⁤湩删捥㈮〱⸰਍佃佌卒䅐䕃䙟乕⁃汦慯⁴牡扩扟㜶敟瑯⡦汦慯⁴⥸笠਍††敲畴湲漠瑯彦弱⠲牡扩扟㜶楟癮牥敳潟瑥⡦⥸㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡愠楲形㙢強湩敶獲彥潥晴昨潬瑡砠
ൻ †爠瑥牵牡扩扟㜶潟瑥⡦湩敶獲彥潯晴ㅟ㉟砨⤩഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴瑳㉟㠰弴敯晴昨潬瑡砠
ൻ †爠瑥牵瑳㉟㠰弴湩敶獲彥潥晴漨瑯彦瑳〲㐸砨⤩഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴瑳㉟㠰弴湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵湩敶獲彥潯晴獟㉴㠰⠴瑳㉟㠰弴潥晴砨⤩഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯㍴愠楲䉢㜶灏⡳汦慯㍴瘠‬汦慯⁴牫‬汦慯⁴杫‬汦慯⁴扫‬汦慯⁴捳污⥥笠਍††潣獮⁴汦慯⁴慧浭⁡‽⸱昲഻ †映潬瑡爠㴠瘠砮⨠猠慣敬഻ †映潬瑡朠㴠瘠礮⨠猠慣敬഻ †映潬瑡戠㴠瘠種⨠猠慣敬഻ഊ †映潬瑡礠⁤‽浦硡⡦牫⨠爠⬠欠⁧‪⁧‫扫⨠戠‬䱆䅏彔偅⥓഻ †映潬瑡礠彳湩⁶‽潰晷礨Ɽ⠠⸱昰ⴠ朠浡慭
 慧浭⥡഻ഊ †瘠砮㴠愠楲形㙢強敯晴爨⨠礠彳湩⥶഻ †瘠礮㴠愠楲形㙢強敯晴木⨠礠彳湩⥶഻ †瘠種㴠愠楲形㙢強敯晴戨⨠礠彳湩⥶഻ †爠瑥牵㭶਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″牡扩㙂䤷癮灏⡳汦慯㍴瘠‬汦慯⁴牫‬汦慯⁴杫‬汦慯⁴扫‬汦慯⁴捳污⥥笠਍††潣獮⁴汦慯⁴慧浭⁡‽⸱昲഻ †映潬瑡爠㴠瘠砮഻ †映潬瑡朠㴠瘠礮഻ †映潬瑡戠㴠瘠種഻ഊ †映潬瑡礠⁳‽浦硡⡦牫⨠爠⬠欠⁧‪⁧‫扫⨠戠‬䱆䅏彔偅⥓഻ †礠⁳‽潰晷礨ⱳ朠浡慭ⴠㄠ〮⥦഻ഊ †瘠砮㴠愠楲形㙢強湩敶獲彥敯晴爨⨠礠⥳⨠猠慣敬഻ †瘠礮㴠愠楲形㙢強湩敶獲彥敯晴木⨠礠⥳⨠猠慣敬഻ †瘠種㴠愠楲形㙢強湩敶獲彥敯晴戨⨠礠⥳⨠猠慣敬഻ †爠瑥牵㭶਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″慭牴硩浟汵昨潬瑡洠㍛孝崳‬汦慯㍴瘠
ൻ †映潬瑡″敲㭴਍††敲⹴⁸‽孭崰せ⁝‪⹶⁸‫孭崰ㅛ⁝‪⹶⁹‫孭崰㉛⁝‪⹶㭺਍††敲⹴⁹‽孭崱せ⁝‪⹶⁸‫孭崱ㅛ⁝‪⹶⁹‫孭崱㉛⁝‪⹶㭺਍††敲⹴⁺‽孭崲せ⁝‪⹶⁸‫孭崲ㅛ⁝‪⹶⁹‫孭崲㉛⁝‪⹶㭺਍††敲畴湲爠瑥഻紊਍਍⼯迥莀›瑨灴㩳⼯楧瑳朮瑩畨⹢潣⽭爴⽥㐳捣扢㔹㌷挲戱晥㜴㍣㉤㜹愵㙣㌲㔹਍佃佌卒䅐䕃䙟乕⁃汦慯⁴慨汢⡥汦慯⁴ⱸ映潬瑡䄠‬汦慯⁴ⱂ映潬瑡䌠‬汦慯⁴ⱄ映潬瑡䔠‬汦慯⁴⥆笠਍††敲畴湲⠠砨⠪⩁⭸⩃⥂䐫䔪
 砨⠪⩁⭸⥂䐫䘪⤩ⴠ䔠䘯഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴摨㉲摳彲慨汢⡥汦慯⁴ⱸ映潬瑡猠畯捲彥数歡‬汦慯⁴摬彲楮獴‬汦慯⁴ⱁ映潬瑡䈠‬汦慯⁴ⱃ映潬瑡䐠‬汦慯⁴ⱅ映潬瑡䘠
ൻ †挠湯瑳映潬瑡攠⁢‽潳牵散灟慥 摬彲楮獴഻ †挠湯瑳映潬瑡琠‰‽慨汢⡥ⱸ䄠‬ⱂ䌠‬ⱄ䔠‬⥆഻ †挠湯瑳映潬瑡琠‱‽慨汢⡥扥‬ⱁ䈠‬ⱃ䐠‬ⱅ䘠㬩਍††敲畴湲琠‰ ㅴ഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴摨㉲摳彲潭楢獵昨潬瑡砠‬汦慯⁴潳牵散灟慥Ⱬ映潬瑡氠牤湟瑩ⱳ映潬瑡琠‬汦慯⁴数歡
ൻ †挠湯瑳映潬瑡攠⁢‽潳牵散灟慥 摬彲楮獴഻ †瀠慥㴪攠㭢਍††晩⠠⁸㴼琠
ൻ †††爠瑥牵㭸਍††ൽഊ †映潬瑡愠㴠ⴠ⁴‪⁴‪瀨慥‭⸱昰
 琨⨠琠ⴠ㈠〮⁦‪⁴‫数歡㬩਍††汦慯⁴⁢‽琨⨠琠ⴠ㈠〮⁦‪⁴‪数歡⬠瀠慥⥫⼠映慭晸瀨慥‭⸱昰‬攱㘭⥦഻ †爠瑥牵戨⨠戠⬠㈠〮⁦‪⁢‪⁴‫⁴‪⥴⼠⠠⁢‭⥡⨠⠠⁸‫⥡⼠⠠⁸‫⥢഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴摨㉲摳彲敲湩慨摲昨潬瑡砠‬汦慯⁴潳牵散灟慥Ⱬ映潬瑡氠牤湟瑩ⱳ映潬瑡漠晦敳ⱴ映潬瑡瀠慥⥫笠਍††潣獮⁴汦慯⁴扥㴠猠畯捲彥数歡⼠氠牤湟瑩㭳਍††数歡⨠‽扥഻ †爠瑥牵⁸ 砨⬠漠晦敳⥴⨠⠠数歡⬠漠晦敳⥴⼠瀠慥㭫਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠湩慥彲潴灟影灳捡⡥汦慯⁴⥸笠਍††晩⠠⁸‾⸰昰
ൻ †††砠⨠‽偍剟䙅坟䥈䕔⼠ㄠ〰〰〮㭦਍††††⁸‽潰晷砨‬児䵟⤱഻ †††砠㴠⠠児䍟‱‫児䍟′‪⥸⼠⠠⸱昰⬠倠彑㍃⨠砠㬩਍††††⁸‽潰晷砨‬児䵟⤲഻ †††爠瑥牵㭸਍††⁽汥敳笠਍††††敲畴湲〠〮㭦਍††ൽ紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴煰獟慰散瑟彯楬敮牡昨潬瑡砠
ൻ †椠⁦砨㸠〠〮⥦笠਍††††⁸‽潰晷砨‬⸱昰⼠倠彑㉍㬩਍††††⁸‽浦硡⡦⁸‭児䍟ⰱ〠〮⥦⼠⠠児䍟′‭児䍟″‪⥸഻ †††砠㴠瀠睯⡦ⱸㄠ〮⁦ 児䵟⤱഻ †††砠⨠‽〱〰⸰昰⼠䴠彐䕒彆䡗呉㭅਍††††敲畴湲砠഻ †素攠獬⁥ൻ †††爠瑥牵⸰昰഻ †素਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡愠灰祬扟㉴㤳⠰汦慯⁴ⱸ挠湯瑳映潬瑡洠硡界⥭笠਍††潣獮⁴汦慯⁴獫㴠ㄠ㔮⁦‪慭䱸浵ⴠ〠㔮㭦਍††汦慯⁴扴㴠⠠⁸‭獫
 ㄨ〮⁦‭獫㬩਍††汦慯⁴扴′‽扴⨠琠㭢਍††汦慯⁴扴″‽扴′‪扴഻ †映潬瑡瀠⁢‽㈨〮⁦‪扴″‭⸳昰⨠琠㉢⬠ㄠ〮⥦⨠欠⁳ഫ †††⠠扴″‭⸲昰⨠琠㉢⬠琠⥢⨠⠠⸱昰ⴠ欠⥳⬠਍††††⴨⸲昰⨠琠㍢⬠㌠〮⁦‪扴⤲⨠洠硡界㭭਍††⼯⁸‽業⡸扰‬ⱸ氠獥味慨⡮ⱸ欠⥳㬩਍††⁸‽砨㰠欠⥳㼠砠㨠瀠㭢਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴業⡸汦慯⁴ⱸ映潬瑡礠‬汦慯⁴⥡笠਍††⁡‽愨㰠〠〮⥦㼠〠〮⁦›㭡਍††⁡‽愨㸠ㄠ〮⥦㼠ㄠ〮⁦›㭡਍††敲畴湲⠠⥸⨠⠠⸱昰ⴠ⠠⥡
‫礨
‪愨㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠瑵搳江湩慥彲湩整灲昨潬瑡瘠ⰰ映潬瑡瘠ⰱ映潬瑡愠
ൻ †爠瑥牵ぶ⬠⠠ㅶⴠ瘠⤰⨠愠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯㍴氠瑵搳江湩慥彲湩整灲昨潬瑡″ぶ‬汦慯㍴瘠ⰱ映潬瑡愠
ൻ †映潬瑡″㭲਍††⹲⁸‽畬㍴彤楬敮牡楟瑮牥⡰ぶ砮‬ㅶ砮‬⥡഻ †爠礮㴠氠瑵搳江湩慥彲湩整灲瘨⸰ⱹ瘠⸱ⱹ愠㬩਍††⹲⁺‽畬㍴彤楬敮牡楟瑮牥⡰ぶ種‬ㅶ種‬⥡഻ †爠瑥牵㭲਍ൽഊ䌊䱏剏偓䍁彅商䍎椠瑮氠瑵搳灟敲彶摩⡸汦慯⁴⥸笠਍††敲畴湲⠠湩⥴㭸਍ൽഊ䌊䱏剏偓䍁彅商䍎椠瑮氠瑵搳湟慥彲摩⡸汦慯⁴⥸笠਍††敲畴湲⠠湩⥴砨⬠〠㔮⥦഻紊਍਍佃佌卒䅐䕃䙟乕⁃湩⁴畬㍴彤敮瑸楟硤昨潬瑡砠‬湩⁴楳敺
ൻ †椠瑮渠硥⁴‽畬㍴彤牰癥楟硤砨
‫㬱਍††敲畴湲⠠敮瑸㸠‽楳敺
‿楳敺ⴠㄠ㨠渠硥㭴਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠瑵搳灟敲畬⡴潣獮⁴汦慯⁴ⱳ挠湯瑳椠瑮椠硤‬潣獮⁴湩⁴楳敺ബ †挠湯瑳映潬瑡瀠敲畬浴湩㍛ⱝ挠湯瑳映潬瑡瀠敲畬獴慣敬㍛ⱝ挠湯瑳映潬瑡⨠彟敲瑳楲瑣彟瀠敲畬⥴笠਍††潣獮⁴汦慯⁴⁸‽汣浡⡰猨ⴠ瀠敲畬浴湩楛硤⥝⨠瀠敲畬獴慣敬楛硤ⱝ〠〮ⱦ⠠汦慯⥴猨穩⁥‭⤱㬩਍††潣獮⁴汦慯⁴っ㴠瀠敲畬孴摩⁸‪楳敺⬠氠瑵搳灟敲彶摩⡸⥸㭝਍††潣獮⁴汦慯⁴ㅣ㴠瀠敲畬孴摩⁸‪楳敺⬠氠瑵搳湟硥彴摩⡸ⱸ猠穩⥥㭝਍††敲畴湲氠瑵搳江湩慥彲湩整灲挨ⰰ挠ⰱ砠ⴠ氠瑵搳灟敲彶摩⡸⥸㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤牰汥瑵挨湯瑳映潬瑡″湩‬潣獮⁴湩⁴楳敺ബ †挠湯瑳映潬瑡瀠敲畬浴湩㍛ⱝ挠湯瑳映潬瑡瀠敲畬獴慣敬㍛ⱝ挠湯瑳映潬瑡⨠彟敲瑳楲瑣彟瀠敲畬⥴笠਍††汦慯㍴漠瑵഻ †漠瑵砮㴠氠瑵搳灟敲畬⡴湩砮‬ⰰ猠穩ⱥ瀠敲畬浴湩‬牰汥瑵捳污ⱥ瀠敲畬⥴഻ †漠瑵礮㴠氠瑵搳灟敲畬⡴湩礮‬ⰱ猠穩ⱥ瀠敲畬浴湩‬牰汥瑵捳污ⱥ瀠敲畬⥴഻ †漠瑵種㴠氠瑵搳灟敲畬⡴湩種‬ⰲ猠穩ⱥ瀠敲畬浴湩‬牰汥瑵捳污ⱥ瀠敲畬⥴഻ †爠瑥牵畯㭴਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤敧彴慴汢⡥潣獮⁴啌噔䍅⨠彟敲瑳楲瑣彟氠瑵‬潣獮⁴湩⁴ⱸ挠湯瑳椠瑮礠‬潣獮⁴湩⁴ⱺ挠湯瑳椠瑮氠瑵楓敺ⰰ挠湯瑳椠瑮氠瑵楓敺㄰
ൻ †䰠呕䕖⁃慶‽畬孴⁸‪畬却穩づ‱‫⁹‪畬却穩づ⬠稠㭝਍††汦慯㍴漠瑵഻ †漠瑵砮㴠瘠污砮഻ †漠瑵礮㴠瘠污礮഻ †漠瑵種㴠瘠污種഻ †爠瑥牵畯㭴਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤湩整灲湟慥敲瑳昨潬瑡″湩‬潣獮⁴啌噔䍅⨠彟敲瑳楲瑣彟氠瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††敲畴湲氠瑵搳束瑥瑟扡敬氨瑵‬畬㍴彤敮牡楟硤椨⹮⥸‬畬㍴彤敮牡楟硤椨⹮⥹‬畬㍴彤敮牡楟硤椨⹮⥺‬畬却穩づ‬畬却穩づ⤱഻紊਍਍⼯迥莀›瑨灴㩳⼯湥眮歩灩摥慩漮杲眯歩⽩牔汩湩慥彲湩整灲汯瑡潩൮䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤湩整灲瑟楲楬敮牡昨潬瑡″湩‬潣獮⁴啌噔䍅⨠彟敲瑳楲瑣彟氠瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††潣獮⁴湩⁴へ㴠氠瑵搳灟敲彶摩⡸湩砮㬩਍††潣獮⁴湩⁴ㅸ㴠氠瑵搳湟硥彴摩⡸湩砮‬畬却穩づ㬩਍††潣獮⁴湩⁴べ㴠氠瑵搳灟敲彶摩⡸湩礮㬩਍††潣獮⁴湩⁴ㅹ㴠氠瑵搳湟硥彴摩⡸湩礮‬畬却穩づ㬩਍††潣獮⁴湩⁴ぺ㴠氠瑵搳灟敲彶摩⡸湩種㬩਍††潣獮⁴湩⁴ㅺ㴠氠瑵搳湟硥彴摩⡸湩種‬畬却穩づ㬩਍††潣獮⁴汦慯⁴捳污硥㴠椠⹮⁸‭へ഻ †挠湯瑳映潬瑡猠慣敬⁹‽湩礮ⴠ礠㬰਍††潣獮⁴汦慯⁴捳污穥㴠椠⹮⁺‭ぺ഻ †挠湯瑳映潬瑡″っ〰†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰰ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠〰‱㴠氠瑵搳束瑥瑟扡敬氨瑵‬へ‬べ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″っ〱†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰱ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠㄰‱㴠氠瑵搳束瑥瑟扡敬氨瑵‬へ‬ㅹ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″ㅣ〰†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰰ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠〱‱㴠氠瑵搳束瑥瑟扡敬氨瑵‬ㅸ‬べ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″ㅣ〱†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰱ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠ㄱ‱㴠氠瑵搳束瑥瑟扡敬氨瑵‬ㅸ‬ㅹ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″っ‰†‽畬㍴彤楬敮牡楟瑮牥⡰っ〰‬ㅣ〰‬捳污硥㬩਍††潣獮⁴汦慯㍴挠〱†㴠氠瑵搳江湩慥彲湩整灲挨㄰ⰰ挠ㄱⰰ猠慣敬⥸഻ †挠湯瑳映潬瑡″っ‱†‽畬㍴彤楬敮牡楟瑮牥⡰っ㄰‬ㅣ㄰‬捳污硥㬩਍††潣獮⁴汦慯㍴挠ㄱ†㴠氠瑵搳江湩慥彲湩整灲挨㄰ⰱ挠ㄱⰱ猠慣敬⥸഻ †挠湯瑳映潬瑡″っ††‽畬㍴彤楬敮牡楟瑮牥⡰っⰰ†ㅣⰰ†捳污祥㬩਍††潣獮⁴汦慯㍴挠‱†㴠氠瑵搳江湩慥彲湩整灲挨㄰‬挠ㄱ‬猠慣敬⥹഻ †挠湯瑳映潬瑡″⁣††‽畬㍴彤楬敮牡楟瑮牥⡰っ‬†ㅣ‬†捳污穥㬩਍††敲畴湲挠഻紊਍਍⼯迥莀›瑨灴⼺眯睷昮汩汭杩瑨氮摴甮⽫摰⽦桷瑩灥灡牥⽳䱆吭ⵌ乔〭㔰ⴷ潓瑦慷敲楌⹢摰൦䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤湩整灲瑟瑥慲敨牤污昨潬瑡″湩‬潣獮⁴啌噔䍅⨠彟敲瑳楲瑣彟氠瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††潣獮⁴湩⁴へ㴠氠瑵搳灟敲彶摩⡸湩砮㬩਍††潣獮⁴湩⁴ㅸ㴠氠瑵搳湟硥彴摩⡸湩砮‬畬却穩づ㬩਍††潣獮⁴湩⁴べ㴠氠瑵搳灟敲彶摩⡸湩礮㬩਍††潣獮⁴湩⁴ㅹ㴠氠瑵搳湟硥彴摩⡸湩礮‬畬却穩づ㬩਍††潣獮⁴湩⁴ぺ㴠氠瑵搳灟敲彶摩⡸湩種㬩਍††潣獮⁴湩⁴ㅺ㴠氠瑵搳湟硥彴摩⡸湩種‬畬却穩づ㬩਍††潣獮⁴汦慯⁴捳污硥㴠椠⹮⁸‭へ഻ †挠湯瑳映潬瑡猠慣敬⁹‽湩礮ⴠ礠㬰਍††潣獮⁴汦慯⁴捳污穥㴠椠⹮⁺‭ぺ഻ †映潬瑡猠慣敬ⰰ猠慣敬ⰱ猠慣敬㬲਍††湩⁴䅸‬䅹‬䅺‬䉸‬䉹‬䉺഻ †椠⁦猨慣敬⁸‾捳污祥
ൻ †††椠⁦猨慣敬⁹‾捳污穥
ൻ †††††猠慣敬‰‽捳污硥഻ †††††猠慣敬‱‽捳污祥഻ †††††猠慣敬′‽捳污穥഻ †††††砠⁁‽ㅸ※䅹㴠礠㬰稠⁁‽ぺ഻ †††††砠⁂‽ㅸ※䉹㴠礠㬱稠⁂‽ぺ഻ †††素攠獬⁥晩⠠捳污硥㸠猠慣敬⥺笠਍††††††捳污づ㴠猠慣敬㭸਍††††††捳污ㅥ㴠猠慣敬㭺਍††††††捳污㉥㴠猠慣敬㭹਍††††††䅸㴠砠㬱礠⁁‽べ※䅺㴠稠㬰਍††††††䉸㴠砠㬱礠⁂‽べ※䉺㴠稠㬱਍††††⁽汥敳笠਍††††††捳污づ㴠猠慣敬㭺਍††††††捳污ㅥ㴠猠慣敬㭸਍††††††捳污㉥㴠猠慣敬㭹਍††††††䅸㴠砠㬰礠⁁‽べ※䅺㴠稠㬱਍††††††䉸㴠砠㬱礠⁂‽べ※䉺㴠稠㬱਍††††ൽ †素攠獬⁥ൻ †††椠⁦猨慣敬⁺‾捳污祥
ൻ †††††猠慣敬‰‽捳污穥഻ †††††猠慣敬‱‽捳污祥഻ †††††猠慣敬′‽捳污硥഻ †††††砠⁁‽へ※䅹㴠礠㬰稠⁁‽ㅺ഻ †††††砠⁂‽へ※䉹㴠礠㬱稠⁂‽ㅺ഻ †††素攠獬⁥晩⠠捳污穥㸠猠慣敬⥸笠਍††††††捳污づ㴠猠慣敬㭹਍††††††捳污ㅥ㴠猠慣敬㭺਍††††††捳污㉥㴠猠慣敬㭸਍††††††䅸㴠砠㬰礠⁁‽ㅹ※䅺㴠稠㬰਍††††††䉸㴠砠㬰礠⁂‽ㅹ※䉺㴠稠㬱਍††††⁽汥敳笠਍††††††捳污づ㴠猠慣敬㭹਍††††††捳污ㅥ㴠猠慣敬㭸਍††††††捳污㉥㴠猠慣敬㭺਍††††††䅸㴠砠㬰礠⁁‽ㅹ※䅺㴠稠㬰਍††††††䉸㴠砠㬱礠⁂‽ㅹ※䉺㴠稠㬰਍††††ൽ †素਍††潣獮⁴汦慯㍴挠〰‰‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰰ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠ㄱ‱‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰱ稠ⰱ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠⁁†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⱁ礠ⱁ稠ⱁ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠⁂†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⱂ礠ⱂ稠ⱂ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯⁴猠‰†‽⸱昰†ⴠ猠慣敬㬰਍††潣獮⁴汦慯⁴猠‱†‽捳污づⴠ猠慣敬㬱਍††潣獮⁴汦慯⁴猠′†‽捳污ㅥⴠ猠慣敬㬲਍††潣獮⁴汦慯⁴猠″†‽捳污㉥഻ †映潬瑡″㭣਍††⹣⁸‽び⨠挠〰⸰⁸‫ㅳ⨠挠⹁⁸‫㉳⨠挠⹂⁸‫㍳⨠挠ㄱ⸱㭸਍††⹣⁹‽び⨠挠〰⸰⁹‫ㅳ⨠挠⹁⁹‫㉳⨠挠⹂⁹‫㍳⨠挠ㄱ⸱㭹਍††⹣⁺‽び⨠挠〰⸰⁺‫ㅳ⨠挠⹁⁺‫㉳⨠挠⹂⁺‫㍳⨠挠ㄱ⸱㭺਍††敲畴湲挠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯㍴氠瑵搳楟瑮牥彰祰慲業⡤汦慯㍴椠Ɱ挠湯瑳䰠呕䕖⁃氪瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††潣獮⁴湩⁴へ㴠氠瑵搳灟敲彶摩⡸湩砮㬩਍††潣獮⁴湩⁴ㅸ㴠氠瑵搳湟硥彴摩⡸湩砮‬畬却穩づ㬩਍††潣獮⁴湩⁴べ㴠氠瑵搳灟敲彶摩⡸湩礮㬩਍††潣獮⁴湩⁴ㅹ㴠氠瑵搳湟硥彴摩⡸湩礮‬畬却穩づ㬩਍††潣獮⁴湩⁴ぺ㴠氠瑵搳灟敲彶摩⡸湩種㬩਍††潣獮⁴湩⁴ㅺ㴠氠瑵搳湟硥彴摩⡸湩種‬畬却穩づ㬩਍††潣獮⁴汦慯⁴捳污硥㴠椠⹮⁸‭へ഻ †挠湯瑳映潬瑡猠慣敬⁹‽湩礮ⴠ礠㬰਍††潣獮⁴汦慯⁴捳污穥㴠椠⹮⁺‭ぺ഻ഊ †映潬瑡猠慣敬ⰰ猠慣敬ⰱ猠慣敬㬲਍††湩⁴䅸‬䅹‬䅺‬䉸‬䉹‬䉺‬䍸‬䍹‬䍺഻ഊ †椠⁦猨慣敬⁹‾捳污硥☠…捳污穥㸠猠慣敬⥸笠਍††††䅸㴠砠㬰礠⁁‽べ※䅺㴠稠㬱਍††††䉸㴠砠㬰礠⁂‽ㅹ※䉺㴠稠㬰਍††††䍸㴠砠㬰礠⁃‽ㅹ※䍺㴠稠㬱਍††††捳污づ㴠猠慣敬㭹਍††††捳污ㅥ㴠猠慣敬㭺਍††††捳污㉥㴠猠慣敬㭸਍††⁽汥敳椠⁦猨慣敬⁸‾捳污祥☠…捳污穥㸠猠慣敬⥹笠਍††††䅸㴠砠㬰礠⁁‽べ※䅺㴠稠㬱਍††††䉸㴠砠㬱礠⁂‽べ※䉺㴠稠㬰਍††††䍸㴠砠㬱礠⁃‽べ※䍺㴠稠㬱਍††††捳污づ㴠猠慣敬㭸਍††††捳污ㅥ㴠猠慣敬㭺਍††††捳污㉥㴠猠慣敬㭹਍††⁽汥敳笠਍††††䅸㴠砠㬰礠⁁‽ㅹ※䅺㴠稠㬰਍††††䉸㴠砠㬱礠⁂‽べ※䉺㴠稠㬰਍††††䍸㴠砠㬱礠⁃‽ㅹ※䍺㴠稠㬰਍††††捳污づ㴠猠慣敬㭸਍††††捳污ㅥ㴠猠慣敬㭹਍††††捳污㉥㴠猠慣敬㭺਍††ൽ †挠湯瑳映潬瑡″っ〰㴠氠瑵搳束瑥瑟扡敬氨瑵‬へ‬べ‬ぺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″ㅣㄱ㴠氠瑵搳束瑥瑟扡敬氨瑵‬ㅸ‬ㅹ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″䅣†㴠氠瑵搳束瑥瑟扡敬氨瑵‬䅸‬䅹‬䅺‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″䉣†㴠氠瑵搳束瑥瑟扡敬氨瑵‬䉸‬䉹‬䉺‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″䍣†㴠氠瑵搳束瑥瑟扡敬氨瑵‬䍸‬䍹‬䍺‬畬却穩づ‬畬却穩づ⤱഻ †映潬瑡″㭣਍††⹣⁸‽っ〰砮⬠⠠䉣砮ⴠ挠〰⸰⥸⨠猠慣敬‰‫挨ㄱ⸱⁸‭䍣砮
‪捳污㉥⬠⠠䅣砮ⴠ挠〰⸰⥸⨠猠慣敬‱‫挨⹃⁸‭䅣砮ⴠ挠⹂⁸‫っ〰砮
‪捳污づ⨠猠慣敬㬱਍††⹣⁹‽っ〰礮⬠⠠䉣礮ⴠ挠〰⸰⥹⨠猠慣敬‰‫挨ㄱ⸱⁹‭䍣礮
‪捳污㉥⬠⠠䅣礮ⴠ挠〰⸰⥹⨠猠慣敬‱‫挨⹃⁹‭䅣礮ⴠ挠⹂⁹‫っ〰礮
‪捳污づ⨠猠慣敬㬱਍††⹣⁺‽っ〰種⬠⠠䉣種ⴠ挠〰⸰⥺⨠猠慣敬‰‫挨ㄱ⸱⁺‭䍣種
‪捳污㉥⬠⠠䅣種ⴠ挠〰⸰⥺⨠猠慣敬‱‫挨⹃⁺‭䅣種ⴠ挠⹂⁺‫っ〰種
‪捳污づ⨠猠慣敬㬱਍††敲畴湲挠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯㍴氠瑵搳楟瑮牥彰牰獩⡭汦慯㍴椠Ɱ挠湯瑳䰠呕䕖⁃氪瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††潣獮⁴湩⁴へ㴠氠瑵搳灟敲彶摩⡸湩砮㬩਍††潣獮⁴湩⁴ㅸ㴠氠瑵搳湟硥彴摩⡸湩砮‬畬却穩づ㬩਍††潣獮⁴湩⁴べ㴠氠瑵搳灟敲彶摩⡸湩礮㬩਍††潣獮⁴湩⁴ㅹ㴠氠瑵搳湟硥彴摩⡸湩礮‬畬却穩づ㬩਍††潣獮⁴湩⁴ぺ㴠氠瑵搳灟敲彶摩⡸湩種㬩਍††潣獮⁴湩⁴ㅺ㴠氠瑵搳湟硥彴摩⡸湩種‬畬却穩づ㬩਍††潣獮⁴汦慯⁴捳污硥㴠椠⹮⁸‭へ഻ †挠湯瑳映潬瑡猠慣敬⁹‽湩礮ⴠ礠㬰਍††潣獮⁴汦慯⁴捳污穥㴠椠⹮⁺‭ぺ഻ †映潬瑡猠慣敬ⰰ猠慣敬㬲਍††湩⁴䅸‬䅹‬䅺‬䉸‬䉹‬䉺഻ഊ †椠⁦猨慣敬⁺‾捳污硥
ൻ †††猠慣敬‰‽捳污穥഻ †††猠慣敬′‽捳污硥഻ †††砠⁁‽へ※䅹㴠礠㬱稠⁁‽ㅺ഻ †††砠⁂‽へ※䉹㴠礠㬰稠⁂‽ㅺ഻ †素攠獬⁥ൻ †††猠慣敬‰‽捳污硥഻ †††猠慣敬′‽捳污穥഻ †††砠⁁‽ㅸ※䅹㴠礠㬱稠⁁‽ぺ഻ †††砠⁂‽ㅸ※䉹㴠礠㬰稠⁂‽ぺ഻ †素਍††潣獮⁴汦慯㍴挠〰‰‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰰ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠㄰‰‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰱ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠〱‱‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰰ稠ⰱ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠ㄱ‱‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰱ稠ⰱ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠⁁†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⱁ礠ⱁ稠ⱁ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠⁂†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⱂ礠ⱂ稠ⱂ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††汦慯㍴挠഻ †挠砮㴠挠〰⸰⁸‫挨⹂⁸‭っ〰砮
‪捳污づ⬠⠠ㅣ㄰砮ⴠ挠⹂⥸⨠猠慣敬′‫挨㄰⸰⁸‭っ〰砮
‪捳污祥⬠⠠っ〰砮ⴠ挠㄰⸰⁸‭䉣砮⬠挠⹁⥸⨠猠慣敬‰‪捳污祥⬠⠠䉣砮ⴠ挠⹁⁸‭ㅣ㄰砮⬠挠ㄱ⸱⥸⨠猠慣敬′‪捳污祥഻ †挠礮㴠挠〰⸰⁹‫挨⹂⁹‭っ〰礮
‪捳污づ⬠⠠ㅣ㄰礮ⴠ挠⹂⥹⨠猠慣敬′‫挨㄰⸰⁹‭っ〰礮
‪捳污祥⬠⠠っ〰礮ⴠ挠㄰⸰⁹‭䉣礮⬠挠⹁⥹⨠猠慣敬‰‪捳污祥⬠⠠䉣礮ⴠ挠⹁⁹‭ㅣ㄰礮⬠挠ㄱ⸱⥹⨠猠慣敬′‪捳污祥഻ †挠種㴠挠〰⸰⁺‫挨⹂⁺‭っ〰種
‪捳污づ⬠⠠ㅣ㄰種ⴠ挠⹂⥺⨠猠慣敬′‫挨㄰⸰⁺‭っ〰種
‪捳污祥⬠⠠っ〰種ⴠ挠㄰⸰⁺‭䉣種⬠挠⹁⥺⨠猠慣敬‰‪捳污祥⬠⠠䉣種ⴠ挠⹁⁺‭ㅣ㄰種⬠挠ㄱ⸱⥺⨠猠慣敬′‪捳污祥഻ †爠瑥牵㭣਍ൽഊ猊牴捵⁴䝒䍙汯牯灳捡䑥癥慐慲獭笠਍††湩⁴畬彴景獦瑥഻ †椠瑮瀠敲畬彴景獦瑥഻ †⼠ 믤趙臣澯晦敳꺁ꓧ馁뷤꺽臣螃菣뾂਍††⼯螃菣뾂臣随苣몇臣릖돦꾁룤風臣ꊖ闦銂迥ꞅ਍㭽਍਍汦慯⁴未瑥敄偶牡浡偳敲畬⡴潶摩⨠彟敲瑳楲瑣彟瀠牴
ൻ †爠瑥牵昨潬瑡⨠⠩挨慨⁲⤪瑰⁲‫⠨䝒䍙汯牯灳捡䑥癥慐慲獭⨠瀩牴⴩瀾敲畬彴景獦瑥㬩਍ൽഊ挊湯瑳映潬瑡⨠敧䑴癥慐慲獭牐汥瑵挨湯瑳瘠楯⁤弪牟獥牴捩彴 瑰⥲笠਍††敲畴湲⠠潣獮⁴汦慯⁴⤪⠨潣獮⁴档牡⨠瀩牴⬠⠠刨奇潃潬獲慰散敄偶牡浡⁳⤪瑰⥲㸭牰汥瑵潟晦敳⥴഻紊਍਍啌噔䍅⨠敧䑴癥慐慲獭界⡴潶摩⨠彟敲瑳楲瑣彟瀠牴
ൻ †爠瑥牵䰨呕䕖⁃⤪⠨档牡⨠瀩牴⬠⠠刨奇潃潬獲慰散敄偶牡浡⁳⤪瑰⥲㸭畬彴景獦瑥㬩਍ൽഊ挊湯瑳䰠呕䕖⁃未瑥敄偶牡浡䱳瑵挨湯瑳瘠楯⁤弪牟獥牴捩彴 瑰⥲笠਍††敲畴湲⠠潣獮⁴啌噔䍅⨠⠩挨湯瑳挠慨⁲⤪瑰⁲‫⠨䝒䍙汯牯灳捡䑥癥慐慲獭⨠瀩牴⴩氾瑵潟晦敳⥴഻紊਍ਊ椣据畬敤㰠瑳楤瑮栮ਾ弊摟癥捩彥 彟湩楬敮彟昊潬瑡″潣癮牥彴潣潬獲慰散损獵潴⡭汦慯㍴砠‬潣獮⁴䝒䍙汯牯灳捡䑥癥慐慲獭⨠彟敲瑳楲瑣彟瀠牡浡⥳笠ਊ††⁻⼯慲杮⁥湩⵴显潬瑡 †††挠湯瑳映潬瑡爠湡敧祟†㴠ㄠ㜮㌸㜶㜵㤹㠰㜶㜵改〭昵਻††††潣獮⁴汦慯⁴景獦瑥祟†‽㜭㌮㔰㌹〶㌷㔰㌹〶攳〭昲਻††††潣獮⁴汦慯⁴慲杮彥癵†‽⸱㐷㠳ㄶ〶ㄷ㈴㔸〷ⵥ㔰㭦 †††挠湯瑳映潬瑡漠晦敳彴癵㴠ⴠ⸵ㄷ㈴㔸ㄷ㈴㔸ㄷ〴ⵥ㄰㭦 †††砠砮㴠砠砮⨠爠湡敧祟†‫景獦瑥祟਻††††⹸⁹‽⹸⁹‪慲杮彥癵⬠漠晦敳彴癵਻††††⹸⁺‽⹸⁺‪慲杮彥癵⬠漠晦敳彴癵਻††੽ †笠 †††映潬瑡洠㍛孝崳㴠笠 †††††笠㤠㤮㤹㤹㤹㤹㤹㤹㠹改〭昱‬⸰〰〰〰〰〰〰〰〰⭥〰ⱦㄠ㔮㐷㤷㤹㤹㤹㤹㤹攸〫昰素ਬ††††††⁻⸹㤹㤹㤹㤹㤹㤹㤹㜶ⵥ㄰ⱦⴠ⸱㜸㈳㈴㈷㌹㘰㠴㜷ⵥ㄰ⱦⴠ⸴㠶㈱㈴㈷㌹㘰㠴㠶ⵥ㄰⁦ⱽ †††††笠㤠㤮㤹㤹㤹㤹㤹㤹㠹改〭昱‬⸱㔸㔵㤹㤹㤹㤹㤹㤹⭥〰ⱦ〠〮〰〰〰〰〰〰〰攰〫昰素 †††素਻††††⁸‽慭牴硩浟汵洨‬⥸਻††੽ †爠瑥牵㭸紊ਊ瑳瑡捩挠湯瑳椠瑮倠塉偟剅呟剈䅅⁄‽㬴ਊ整灭慬整琼灹湥浡⁥㹔张摟癥捩彥 彟湩楬敮彟吠琠偯硩昨潬瑡砠
⁻敲畴湲⠠⥔汣浡⡰砨
‫⸰昵‬⸰昰‬ㄨ㰼猨穩潥⡦⥔㠪⤩ⴠ〠㔮⥦※੽整灭慬整㸼张摟癥捩彥 彟湩楬敮彟映潬瑡†潴楐㱸汦慯㹴⠠汦慯⁴⥸笠爠瑥牵㭸素ਊ整灭慬整琼灹湥浡⁥祔数畏ⱴ琠灹湥浡⁥祔数湉ਾ彟汧扯污彟瘠楯⁤敫湲汥晟汩整⡲ †甠湩㡴瑟⨠彟敲瑳楲瑣彟瀠獄奴‬極瑮弸⁴弪牟獥牴捩彴 䑰瑳ⱕ甠湩㡴瑟⨠彟敲瑳楲瑣彟瀠獄噴ਬ††潣獮⁴湩⁴獤側瑩档‬潣獮⁴湩⁴獤坴摩桴‬潣獮⁴湩⁴獤䡴楥桧ⱴ †挠湯瑳甠湩㡴瑟⨠彟敲瑳楲瑣彟瀠牓奣‬潣獮⁴極瑮弸⁴弪牟獥牴捩彴 印捲ⱕ挠湯瑳甠湩㡴瑟⨠彟敲瑳楲瑣彟瀠牓噣ਬ††潣獮⁴湩⁴牳偣瑩档‬潣獮⁴湩⁴牳坣摩桴‬潣獮⁴湩⁴牳䡣楥桧ⱴ戠潯牳䥣瑮牥慬散Ɽ †挠湯瑳删奇潃潬獲慰散敄偶牡浡⁳弪牟獥牴捩彴 慰慲獭
੻††潣獮⁴湩⁴硩㴠⠠汢捯䥫硤砮⨠戠潬正楄⹭⁸‫桴敲摡摉⹸⥸⨠倠塉偟剅呟剈䅅㭄 †挠湯瑳椠瑮椠⁹‽戠潬正摉⹸⁹‪汢捯䑫浩礮⬠琠牨慥䥤硤礮਻ †猠牴捵⁴彟污杩彮⡟楳敺景吨灹䥥⥮⨠㐠
祔数湉‴੻††††祔数湉砠‬ⱹ稠‬㭷 †素਻ †猠牴捵⁴彟污杩彮⡟楳敺景吨灹佥瑵
‪⤴吠灹佥瑵‴੻††††祔数畏⁴ⱸ礠‬ⱺ眠਻††㭽ਊ††晩⠠硩㰠搠瑳楗瑤⁨☦椠⁹‼獤䡴楥桧⥴笠ਊ††††祔数湉‴牳奣㴠⨠吨灹䥥㑮⨠⠩印捲⁙‫祩⨠猠捲楐捴⁨‫硩⨠猠穩潥⡦祔数湉⤩਻††††祔数湉‴牳啣㴠⨠吨灹䥥㑮⨠⠩印捲⁕‫祩⨠猠捲楐捴⁨‫硩⨠猠穩潥⡦祔数湉⤩਻††††祔数湉‴牳噣㴠⨠吨灹䥥㑮⨠⠩印捲⁖‫祩⨠猠捲楐捴⁨‫硩⨠猠穩潥⡦祔数湉⤩਻ †††映潬瑡″楰へ㴠洠歡彥汦慯㍴⠨汦慯⥴牳奣砮‬昨潬瑡猩捲⹕ⱸ⠠汦慯⥴牳噣砮㬩 †††映潬瑡″楰ㅸ㴠洠歡彥汦慯㍴⠨汦慯⥴牳奣礮‬昨潬瑡猩捲⹕ⱹ⠠汦慯⥴牳噣礮㬩 †††映潬瑡″楰㉸㴠洠歡彥汦慯㍴⠨汦慯⥴牳奣種‬昨潬瑡猩捲⹕ⱺ⠠汦慯⥴牳噣種㬩 †††映潬瑡″楰㍸㴠洠歡彥汦慯㍴⠨汦慯⥴牳奣眮‬昨潬瑡猩捲⹕ⱷ⠠汦慯⥴牳噣眮㬩ਊ††††楰へ㴠挠湯敶瑲损汯牯灳捡彥畣瑳浯瀨硩ⰰ瀠牡浡⥳਻††††楰ㅸ㴠挠湯敶瑲损汯牯灳捡彥畣瑳浯瀨硩ⰱ瀠牡浡⥳਻††††楰㉸㴠挠湯敶瑲损汯牯灳捡彥畣瑳浯瀨硩ⰲ瀠牡浡⥳਻††††楰㍸㴠挠湯敶瑲损汯牯灳捡彥畣瑳浯瀨硩ⰳ瀠牡浡⥳਻ †††吠灹佥瑵‴獤奴‬獤啴‬獤噴਻††††獤奴砮㴠琠偯硩吼灹佥瑵⠾楰へ砮㬩搠瑳⹕⁸‽潴楐㱸祔数畏㹴瀨硩⸰⥹※獤噴砮㴠琠偯硩吼灹佥瑵⠾楰へ種㬩 †††搠瑳⹙⁹‽潴楐㱸祔数畏㹴瀨硩⸱⥸※獤啴礮㴠琠偯硩吼灹佥瑵⠾楰ㅸ礮㬩搠瑳⹖⁹‽潴楐㱸祔数畏㹴瀨硩⸱⥺਻††††獤奴種㴠琠偯硩吼灹佥瑵⠾楰㉸砮㬩搠瑳⹕⁺‽潴楐㱸祔数畏㹴瀨硩⸲⥹※獤噴種㴠琠偯硩吼灹佥瑵⠾楰㉸種㬩 †††搠瑳⹙⁷‽潴楐㱸祔数畏㹴瀨硩⸳⥸※獤啴眮㴠琠偯硩吼灹佥瑵⠾楰㍸礮㬩搠瑳⹖⁷‽潴楐㱸祔数畏㹴瀨硩⸳⥺਻ †††吠灹佥瑵‴瀪牴獄奴㴠⠠祔数畏㑴⨠⠩䑰瑳⁙‫祩⨠搠瑳楐捴⁨‫硩⨠猠穩潥⡦祔数畏⥴㬩 †††吠灹佥瑵‴瀪牴獄啴㴠⠠祔数畏㑴⨠⠩䑰瑳⁕‫祩⨠搠瑳楐捴⁨‫硩⨠猠穩潥⡦祔数畏⥴㬩 †††吠灹佥瑵‴瀪牴獄噴㴠⠠祔数畏㑴⨠⠩䑰瑳⁖‫祩⨠搠瑳楐捴⁨‫硩⨠猠穩潥⡦祔数畏⥴㬩ਊ††††瑰䑲瑳孙崰㴠搠瑳㭙 †††瀠牴獄啴せ⁝‽獤啴਻††††瑰䑲瑳孖崰㴠搠瑳㭖 †素紊਻开敯晴昨潬瑡砠
ൻ †爠瑥牵⁸‼⸰�⩽쥔उŐ뒔ȫ --------------------------------------- --- Source of colorspace_conv --- --------------------------------------- 1 #ifndef _JITIFY_INCLUDE_GUARD_F0A087E65B9A1EB9 2 #define _JITIFY_INCLUDE_GUARD_F0A087E65B9A1EB9 3 #ifdef __CUDACC_RTC__ 4 #define COLORSPACE_FUNC __device__ __inline__ 5 #else 6 #define COLORSPACE_FUNC static 7 #include 8 #include 9 _Pragma("warning") (push) 10 _Pragma("warning") (disable: 4819) 11 #include 12 _Pragma("warning") (pop) 13 #endif 14 15 typedef float4 LUTVEC; 16 17 #ifndef clamp 18 #define clamp(x, low, high) (((x) <= (high)) ? (((x) >= (low)) ? (x) : (low)) : (high)) 19 #endif 20 21 22 const float REC709_ALPHA = 1.09929682680944f; 23 const float REC709_BETA = 0.018053968510807f; 24 25 const float SMPTE_240M_ALPHA = 1.111572195921731f; 26 const float SMPTE_240M_BETA = 0.022821585529445f; 27 28 // Adjusted for continuity of first derivative. 29 const float SRGB_ALPHA = 1.055010718947587f; 30 const float SRGB_BETA = 0.003041282560128f; 31 32 const float ST2084_M1 = 0.1593017578125f; 33 const float ST2084_M2 = 78.84375f; 34 const float ST2084_C1 = 0.8359375f; 35 const float ST2084_C2 = 18.8515625f; 36 const float ST2084_C3 = 18.6875f; 37 38 const float ARIB_B67_A = 0.17883277f; 39 const float ARIB_B67_B = 0.28466892f; 40 const float ARIB_B67_C = 0.55991073f; 41 42 const float FLOAT_EPS = 1.175494351e-38f; 43 44 const float MP_REF_WHITE = 203.0f; 45 const float MP_REF_WHITE_HLG = 3.17955f; 46 47 // Common constants for SMPTE ST.2084 (HDR) 48 const float PQ_M1 = 2610.0f / 4096.0f * 1.0f / 4.0f; 49 const float PQ_M2 = 2523.0f / 4096.0f * 128.0f; 50 const float PQ_C1 = 3424.0f / 4096.0f; 51 const float PQ_C2 = 2413.0f / 4096.0f * 32.0f; 52 const float PQ_C3 = 2392.0f / 4096.0f * 32.0f; 53 54 // Chosen for compatibility with higher precision REC709_ALPHA/REC709_BETA. 55 // See: ITU-R BT.2390-2 5.3.1 56 const float ST2084_OOTF_SCALE = 59.49080238715383f; 57 58 COLORSPACE_FUNC float rec_709_oetf(float x) { 59 if (x < REC709_BETA) 60 x = x * 4.5f; 61 else 62 x = REC709_ALPHA * powf(x, 0.45f) - (REC709_ALPHA - 1.0f); 63 64 return x; 65 } 66 67 COLORSPACE_FUNC float rec_709_inverse_oetf(float x) { 68 if (x < 4.5f * REC709_BETA) 69 x = x / 4.5f; 70 else 71 x = powf((x + (REC709_ALPHA - 1.0f)) / REC709_ALPHA, 1.0f / 0.45f); 72 73 return x; 74 } 75 76 // Ignore the BT.1886 provisions for limited contrast and assume an ideal CRT. 77 COLORSPACE_FUNC float rec_1886_eotf(float x) { 78 return x < 0.0f ? 0.0f : powf(x, 2.4f); 79 } 80 81 COLORSPACE_FUNC float rec_1886_inverse_eotf(float x) { 82 return x < 0.0f ? 0.0f : powf(x, 1.0f / 2.4f); 83 } 84 85 COLORSPACE_FUNC float ootf_1_2(float x) { 86 return x < 0.0f ? x : powf(x, 1.2f); 87 } 88 89 COLORSPACE_FUNC float inverse_ootf_1_2(float x) { 90 return x < 0.0f ? x : powf(x, 1.0f / 1.2f); 91 } 92 93 COLORSPACE_FUNC float ootf_st2084(float x) { 94 return rec_1886_eotf(rec_709_oetf(x * ST2084_OOTF_SCALE)) / 100.0f; 95 } 96 97 COLORSPACE_FUNC float inverse_ootf_st2084(float x) { 98 return rec_709_inverse_oetf(rec_1886_inverse_eotf(x * 100.0f)) / ST2084_OOTF_SCALE; 99 } 100 101 COLORSPACE_FUNC float log100_oetf(float x) { 102 return x <= 0.01f ? 0.0f : 1.0f + log10f(x) * (1.0f / 2.0f); 103 } 104 105 COLORSPACE_FUNC float log100_inverse_oetf(float x) { 106 return x <= 0.0f ? 0.01f : powf(10.0f, 2 * (x - 1.0f)); 107 } 108 109 COLORSPACE_FUNC float log316_oetf(float x) { 110 return x <= 0.00316227766f ? 0.0f : 1.0f + log10f(x) * (1.0f / 2.5f); 111 } 112 113 COLORSPACE_FUNC float log316_inverse_oetf(float x) { 114 return x <= 0.0f ? 0.00316227766f : powf(10.0f, 2.5f * (x - 1.0f)); 115 } 116 117 COLORSPACE_FUNC float rec_470m_oetf(float x) { 118 return x < 0.0f ? 0.0f : powf(x, 2.2f); 119 } 120 121 COLORSPACE_FUNC float rec_470m_inverse_oetf(float x) { 122 return x < 0.0f ? 0.0f : powf(x, 1.0f / 2.2f); 123 } 124 125 COLORSPACE_FUNC float rec_470bg_oetf(float x) { 126 return x < 0.0f ? 0.0f : powf(x, 2.8f); 127 } 128 129 COLORSPACE_FUNC float rec_470bg_inverse_oetf(float x) { 130 return x < 0.0f ? 0.0f : powf(x, 1.0f / 2.8f); 131 } 132 133 COLORSPACE_FUNC float smpte_240m_oetf(float x) { 134 if (x < 4.0f * SMPTE_240M_BETA) 135 x = x * (1.0f / 4.0f); 136 else 137 x = powf((x + (SMPTE_240M_ALPHA - 1.0f)) / SMPTE_240M_ALPHA, 1.0f / 0.45f); 138 139 return x; 140 } 141 142 COLORSPACE_FUNC float smpte_240m_inverse_oetf(float x) { 143 if (x < SMPTE_240M_BETA) 144 x = x * 4.0f; 145 else 146 x = SMPTE_240M_ALPHA * powf(x, 0.45f) - (SMPTE_240M_ALPHA - 1.0f); 147 148 return x; 149 } 150 151 COLORSPACE_FUNC float xvycc_oetf(float x) { 152 return copysignf(rec_709_oetf(fabsf(x)), x); 153 } 154 155 float xvycc_inverse_oetf(float x) { 156 return copysignf(rec_709_inverse_oetf(fabsf(x)), x); 157 } 158 159 COLORSPACE_FUNC float arib_b67_oetf(float x) { 160 // Prevent negative pixels from yielding NAN. 161 x = fmaxf(x, 0.0f); 162 163 if (x <= (1.0f / 12.0f)) 164 x = sqrtf(3.0f * x); 165 else 166 x = ARIB_B67_A * logf(12.0f * x - ARIB_B67_B) + ARIB_B67_C; 167 168 return x; 169 } 170 171 COLORSPACE_FUNC float arib_b67_inverse_oetf(float x) { 172 // Prevent negative pixels expanding into positive values. 173 x = fmaxf(x, 0.0f); 174 175 if (x <= 0.5f) 176 x = (x * x) * (1.0f / 3.0f); 177 else 178 x = (expf((x - ARIB_B67_C) / ARIB_B67_A) + ARIB_B67_B) * (1.0f / 12.0f); 179 180 return x; 181 } 182 183 COLORSPACE_FUNC float srgb_eotf(float x) { 184 if (x < 12.92f * SRGB_BETA) 185 x *= (1.0f / 12.92f); 186 else 187 x = powf((x + (SRGB_ALPHA - 1.0f)) * (1.0f / SRGB_ALPHA), 2.4f); 188 189 return x; 190 } 191 192 COLORSPACE_FUNC float srgb_inverse_eotf(float x) { 193 if (x < SRGB_BETA) 194 x = x * 12.92f; 195 else 196 x = SRGB_ALPHA * powf(x, 1.0f / 2.4f) - (SRGB_ALPHA - 1.0f); 197 198 return x; 199 } 200 201 // Handle values in the range [0.0-1.0] such that they match a legacy CRT. 202 COLORSPACE_FUNC float xvycc_eotf(float x) { 203 if (x < 0.0f || x > 1.0f) 204 return copysignf(rec_709_inverse_oetf(fabsf(x)), x); 205 else 206 return copysignf(rec_1886_eotf(fabsf(x)), x); 207 } 208 209 COLORSPACE_FUNC float xvycc_inverse_eotf(float x) { 210 if (x < 0.0f || x > 1.0f) 211 return copysignf(rec_709_oetf(fabsf(x)), x); 212 else 213 return copysignf(rec_1886_inverse_eotf(fabsf(x)), x); 214 } 215 216 //pq_space_to_linear 217 COLORSPACE_FUNC float st_2084_eotf(float x) { 218 // Filter negative values to avoid NAN. 219 if (x > 0.0f) { 220 float xpow = powf(x, 1.0f / ST2084_M2); 221 float num = fmaxf(xpow - ST2084_C1, 0.0f); 222 float den = fmaxf(ST2084_C2 - ST2084_C3 * xpow, FLOAT_EPS); 223 x = powf(num / den, 1.0f / ST2084_M1); 224 } else { 225 x = 0.0f; 226 } 227 228 return x; 229 } 230 231 //linear_to_pq_space 232 COLORSPACE_FUNC float st_2084_inverse_eotf(float x) { 233 // Filter negative values to avoid NAN, and also special-case 0 so that (f(g(0)) == 0). 234 if (x > 0.0f) { 235 float xpow = powf(x, ST2084_M1); 236 #if 0 237 // Original formulation from SMPTE ST 2084:2014 publication. 238 float num = ST2084_C1 + ST2084_C2 * xpow; 239 float den = 1.0f + ST2084_C3 * xpow; 240 x = powf(num / den, ST2084_M2); 241 #else 242 // More stable arrangement that avoids some cancellation error. 243 float num = (ST2084_C1 - 1.0f) + (ST2084_C2 - ST2084_C3) * xpow; 244 float den = 1.0f + ST2084_C3 * xpow; 245 x = powf(1.0f + num / den, ST2084_M2); 246 #endif 247 } else { 248 x = 0.0f; 249 } 250 251 return x; 252 } 253 254 // Applies a per-channel correction instead of the iterative method specified in Rec.2100. 255 COLORSPACE_FUNC float arib_b67_eotf(float x) { 256 return ootf_1_2(arib_b67_inverse_oetf(x)); 257 } 258 259 COLORSPACE_FUNC float arib_b67_inverse_eotf(float x) { 260 return arib_b67_oetf(inverse_ootf_1_2(x)); 261 } 262 263 COLORSPACE_FUNC float st_2084_oetf(float x) { 264 return st_2084_inverse_eotf(ootf_st2084(x)); 265 } 266 267 COLORSPACE_FUNC float st_2084_inverse_oetf(float x) { 268 return inverse_ootf_st2084(st_2084_eotf(x)); 269 } 270 271 COLORSPACE_FUNC float3 aribB67Ops(float3 v, float kr, float kg, float kb, float scale) { 272 const float gamma = 1.2f; 273 float r = v.x * scale; 274 float g = v.y * scale; 275 float b = v.z * scale; 276 277 float yd = fmaxf(kr * r + kg * g + kb * b, FLOAT_EPS); 278 float ys_inv = powf(yd, (1.0f - gamma) / gamma); 279 280 v.x = arib_b67_oetf(r * ys_inv); 281 v.y = arib_b67_oetf(g * ys_inv); 282 v.z = arib_b67_oetf(b * ys_inv); 283 return v; 284 } 285 286 COLORSPACE_FUNC float3 aribB67InvOps(float3 v, float kr, float kg, float kb, float scale) { 287 const float gamma = 1.2f; 288 float r = v.x; 289 float g = v.y; 290 float b = v.z; 291 292 float ys = fmaxf(kr * r + kg * g + kb * b, FLOAT_EPS); 293 ys = powf(ys, gamma - 1.0f); 294 295 v.x = arib_b67_inverse_oetf(r * ys) * scale; 296 v.y = arib_b67_inverse_oetf(g * ys) * scale; 297 v.z = arib_b67_inverse_oetf(b * ys) * scale; 298 return v; 299 } 300 301 COLORSPACE_FUNC float3 matrix_mul(float m[3][3], float3 v) { 302 float3 ret; 303 ret.x = m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z; 304 ret.y = m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z; 305 ret.z = m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z; 306 return ret; 307 } 308 309 //参考: https://gist.github.com/4re/34ccbb95732c1bef47c3d2975ac62395 310 COLORSPACE_FUNC float hable(float x, float A, float B, float C, float D, float E, float F) { 311 return ((x*(A*x+C*B)+D*E) / (x*(A*x+B)+D*F)) - E/F; 312 } 313 314 COLORSPACE_FUNC float hdr2sdr_hable(float x, float source_peak, float ldr_nits, float A, float B, float C, float D, float E, float F) { 315 const float eb = source_peak / ldr_nits; 316 const float t0 = hable(x, A, B, C, D, E, F); 317 const float t1 = hable(eb, A, B, C, D, E, F); 318 return t0 / t1; 319 } 320 321 COLORSPACE_FUNC float hdr2sdr_mobius(float x, float source_peak, float ldr_nits, float t, float peak) { 322 const float eb = source_peak / ldr_nits; 323 peak *= eb; 324 if (x <= t) { 325 return x; 326 } 327 328 float a = -t * t * (peak - 1.0f) / (t * t - 2.0f * t + peak); 329 float b = (t * t - 2.0f * t * peak + peak) / fmaxf(peak - 1.0f, 1e-6f); 330 return (b * b + 2.0f * b * t + t * t) / (b - a) * (x + a) / (x + b); 331 } 332 333 COLORSPACE_FUNC float hdr2sdr_reinhard(float x, float source_peak, float ldr_nits, float offset, float peak) { 334 const float eb = source_peak / ldr_nits; 335 peak *= eb; 336 return x / (x + offset) * (peak + offset) / peak; 337 } 338 339 COLORSPACE_FUNC float linear_to_pq_space(float x) { 340 if (x > 0.0f) { 341 x *= MP_REF_WHITE / 10000.0f; 342 x = powf(x, PQ_M1); 343 x = (PQ_C1 + PQ_C2 * x) / (1.0f + PQ_C3 * x); 344 x = powf(x, PQ_M2); 345 return x; 346 } else { 347 return 0.0f; 348 } 349 } 350 351 COLORSPACE_FUNC float pq_space_to_linear(float x) { 352 if (x > 0.0f) { 353 x = powf(x, 1.0f / PQ_M2); 354 x = fmaxf(x - PQ_C1, 0.0f) / (PQ_C2 - PQ_C3 * x); 355 x = powf(x, 1.0f / PQ_M1); 356 x *= 10000.0f / MP_REF_WHITE; 357 return x; 358 } else { 359 return 0.0f; 360 } 361 } 362 363 COLORSPACE_FUNC float apply_bt2390(float x, const float maxLum) { 364 const float ks = 1.5f * maxLum - 0.5f; 365 float tb = (x - ks) / (1.0f - ks); 366 float tb2 = tb * tb; 367 float tb3 = tb2 * tb; 368 float pb = (2.0f * tb3 - 3.0f * tb2 + 1.0f) * ks + 369 (tb3 - 2.0f * tb2 + tb) * (1.0f - ks) + 370 (-2.0f * tb3 + 3.0f * tb2) * maxLum; 371 //x = mix(pb, x, lessThan(x, ks)); 372 x = (x < ks) ? x : pb; 373 return x; 374 } 375 376 COLORSPACE_FUNC float mix(float x, float y, float a) { 377 a = (a < 0.0f) ? 0.0f : a; 378 a = (a > 1.0f) ? 1.0f : a; 379 return (x) * (1.0f - (a)) + (y) * (a); 380 } 381 382 COLORSPACE_FUNC float lut3d_linear_interp(float v0, float v1, float a) { 383 return v0 + (v1 - v0) * a; 384 } 385 386 COLORSPACE_FUNC float3 lut3d_linear_interp(float3 v0, float3 v1, float a) { 387 float3 r; 388 r.x = lut3d_linear_interp(v0.x, v1.x, a); 389 r.y = lut3d_linear_interp(v0.y, v1.y, a); 390 r.z = lut3d_linear_interp(v0.z, v1.z, a); 391 return r; 392 } 393 394 COLORSPACE_FUNC int lut3d_prev_idx(float x) { 395 return (int)x; 396 } 397 398 COLORSPACE_FUNC int lut3d_near_idx(float x) { 399 return (int)(x + 0.5f); 400 } 401 402 COLORSPACE_FUNC int lut3d_next_idx(float x, int size) { 403 int next = lut3d_prev_idx(x) + 1; 404 return (next >= size) ? size - 1 : next; 405 } 406 407 COLORSPACE_FUNC float lut3d_prelut(const float s, const int idx, const int size, 408 const float prelutmin[3], const float prelutscale[3], const float *__restrict__ prelut) { 409 const float x = clamp((s - prelutmin[idx]) * prelutscale[idx], 0.0f, (float)(size - 1)); 410 const float c0 = prelut[idx * size + lut3d_prev_idx(x)]; 411 const float c1 = prelut[idx * size + lut3d_next_idx(x, size)]; 412 return lut3d_linear_interp(c0, c1, x - lut3d_prev_idx(x)); 413 } 414 415 COLORSPACE_FUNC float3 lut3d_prelut(const float3 in, const int size, 416 const float prelutmin[3], const float prelutscale[3], const float *__restrict__ prelut) { 417 float3 out; 418 out.x = lut3d_prelut(in.x, 0, size, prelutmin, prelutscale, prelut); 419 out.y = lut3d_prelut(in.y, 1, size, prelutmin, prelutscale, prelut); 420 out.z = lut3d_prelut(in.z, 2, size, prelutmin, prelutscale, prelut); 421 return out; 422 } 423 424 COLORSPACE_FUNC float3 lut3d_get_table(const LUTVEC *__restrict__ lut, const int x, const int y, const int z, const int lutSize0, const int lutSize01) { 425 LUTVEC val = lut[x * lutSize01 + y * lutSize0 + z]; 426 float3 out; 427 out.x = val.x; 428 out.y = val.y; 429 out.z = val.z; 430 return out; 431 } 432 433 COLORSPACE_FUNC float3 lut3d_interp_nearest(float3 in, const LUTVEC *__restrict__ lut, const int lutSize0, const int lutSize01) { 434 return lut3d_get_table(lut, lut3d_near_idx(in.x), lut3d_near_idx(in.y), lut3d_near_idx(in.z), lutSize0, lutSize01); 435 } 436 437 //参考: https://en.wikipedia.org/wiki/Trilinear_interpolation 438 COLORSPACE_FUNC float3 lut3d_interp_trilinear(float3 in, const LUTVEC *__restrict__ lut, const int lutSize0, const int lutSize01) { 439 const int x0 = lut3d_prev_idx(in.x); 440 const int x1 = lut3d_next_idx(in.x, lutSize0); 441 const int y0 = lut3d_prev_idx(in.y); 442 const int y1 = lut3d_next_idx(in.y, lutSize0); 443 const int z0 = lut3d_prev_idx(in.z); 444 const int z1 = lut3d_next_idx(in.z, lutSize0); 445 const float scalex = in.x - x0; 446 const float scaley = in.y - y0; 447 const float scalez = in.z - z0; 448 const float3 c000 = lut3d_get_table(lut, x0, y0, z0, lutSize0, lutSize01); 449 const float3 c001 = lut3d_get_table(lut, x0, y0, z1, lutSize0, lutSize01); 450 const float3 c010 = lut3d_get_table(lut, x0, y1, z0, lutSize0, lutSize01); 451 const float3 c011 = lut3d_get_table(lut, x0, y1, z1, lutSize0, lutSize01); 452 const float3 c100 = lut3d_get_table(lut, x1, y0, z0, lutSize0, lutSize01); 453 const float3 c101 = lut3d_get_table(lut, x1, y0, z1, lutSize0, lutSize01); 454 const float3 c110 = lut3d_get_table(lut, x1, y1, z0, lutSize0, lutSize01); 455 const float3 c111 = lut3d_get_table(lut, x1, y1, z1, lutSize0, lutSize01); 456 const float3 c00 = lut3d_linear_interp(c000, c100, scalex); 457 const float3 c10 = lut3d_linear_interp(c010, c110, scalex); 458 const float3 c01 = lut3d_linear_interp(c001, c101, scalex); 459 const float3 c11 = lut3d_linear_interp(c011, c111, scalex); 460 const float3 c0 = lut3d_linear_interp(c00, c10, scaley); 461 const float3 c1 = lut3d_linear_interp(c01, c11, scaley); 462 const float3 c = lut3d_linear_interp(c0, c1, scalez); 463 return c; 464 } 465 466 //参考: http://www.filmlight.ltd.uk/pdf/whitepapers/FL-TL-TN-0057-SoftwareLib.pdf 467 COLORSPACE_FUNC float3 lut3d_interp_tetrahedral(float3 in, const LUTVEC *__restrict__ lut, const int lutSize0, const int lutSize01) { 468 const int x0 = lut3d_prev_idx(in.x); 469 const int x1 = lut3d_next_idx(in.x, lutSize0); 470 const int y0 = lut3d_prev_idx(in.y); 471 const int y1 = lut3d_next_idx(in.y, lutSize0); 472 const int z0 = lut3d_prev_idx(in.z); 473 const int z1 = lut3d_next_idx(in.z, lutSize0); 474 const float scalex = in.x - x0; 475 const float scaley = in.y - y0; 476 const float scalez = in.z - z0; 477 float scale0, scale1, scale2; 478 int xA, yA, zA, xB, yB, zB; 479 if (scalex > scaley) { 480 if (scaley > scalez) { 481 scale0 = scalex; 482 scale1 = scaley; 483 scale2 = scalez; 484 xA = x1; yA = y0; zA = z0; 485 xB = x1; yB = y1; zB = z0; 486 } else if (scalex > scalez) { 487 scale0 = scalex; 488 scale1 = scalez; 489 scale2 = scaley; 490 xA = x1; yA = y0; zA = z0; 491 xB = x1; yB = y0; zB = z1; 492 } else { 493 scale0 = scalez; 494 scale1 = scalex; 495 scale2 = scaley; 496 xA = x0; yA = y0; zA = z1; 497 xB = x1; yB = y0; zB = z1; 498 } 499 } else { 500 if (scalez > scaley) { 501 scale0 = scalez; 502 scale1 = scaley; 503 scale2 = scalex; 504 xA = x0; yA = y0; zA = z1; 505 xB = x0; yB = y1; zB = z1; 506 } else if (scalez > scalex) { 507 scale0 = scaley; 508 scale1 = scalez; 509 scale2 = scalex; 510 xA = x0; yA = y1; zA = z0; 511 xB = x0; yB = y1; zB = z1; 512 } else { 513 scale0 = scaley; 514 scale1 = scalex; 515 scale2 = scalez; 516 xA = x0; yA = y1; zA = z0; 517 xB = x1; yB = y1; zB = z0; 518 } 519 } 520 const float3 c000 = lut3d_get_table(lut, x0, y0, z0, lutSize0, lutSize01); 521 const float3 c111 = lut3d_get_table(lut, x1, y1, z1, lutSize0, lutSize01); 522 const float3 cA = lut3d_get_table(lut, xA, yA, zA, lutSize0, lutSize01); 523 const float3 cB = lut3d_get_table(lut, xB, yB, zB, lutSize0, lutSize01); 524 const float s0 = 1.0f - scale0; 525 const float s1 = scale0 - scale1; 526 const float s2 = scale1 - scale2; 527 const float s3 = scale2; 528 float3 c; 529 c.x = s0 * c000.x + s1 * cA.x + s2 * cB.x + s3 * c111.x; 530 c.y = s0 * c000.y + s1 * cA.y + s2 * cB.y + s3 * c111.y; 531 c.z = s0 * c000.z + s1 * cA.z + s2 * cB.z + s3 * c111.z; 532 return c; 533 } 534 535 COLORSPACE_FUNC float3 lut3d_interp_pyramid(float3 in, const LUTVEC *lut, const int lutSize0, const int lutSize01) { 536 const int x0 = lut3d_prev_idx(in.x); 537 const int x1 = lut3d_next_idx(in.x, lutSize0); 538 const int y0 = lut3d_prev_idx(in.y); 539 const int y1 = lut3d_next_idx(in.y, lutSize0); 540 const int z0 = lut3d_prev_idx(in.z); 541 const int z1 = lut3d_next_idx(in.z, lutSize0); 542 const float scalex = in.x - x0; 543 const float scaley = in.y - y0; 544 const float scalez = in.z - z0; 545 546 float scale0, scale1, scale2; 547 int xA, yA, zA, xB, yB, zB, xC, yC, zC; 548 549 if (scaley > scalex && scalez > scalex) { 550 xA = x0; yA = y0; zA = z1; 551 xB = x0; yB = y1; zB = z0; 552 xC = x0; yC = y1; zC = z1; 553 scale0 = scaley; 554 scale1 = scalez; 555 scale2 = scalex; 556 } else if (scalex > scaley && scalez > scaley) { 557 xA = x0; yA = y0; zA = z1; 558 xB = x1; yB = y0; zB = z0; 559 xC = x1; yC = y0; zC = z1; 560 scale0 = scalex; 561 scale1 = scalez; 562 scale2 = scaley; 563 } else { 564 xA = x0; yA = y1; zA = z0; 565 xB = x1; yB = y0; zB = z0; 566 xC = x1; yC = y1; zC = z0; 567 scale0 = scalex; 568 scale1 = scaley; 569 scale2 = scalez; 570 } 571 const float3 c000 = lut3d_get_table(lut, x0, y0, z0, lutSize0, lutSize01); 572 const float3 c111 = lut3d_get_table(lut, x1, y1, z1, lutSize0, lutSize01); 573 const float3 cA = lut3d_get_table(lut, xA, yA, zA, lutSize0, lutSize01); 574 const float3 cB = lut3d_get_table(lut, xB, yB, zB, lutSize0, lutSize01); 575 const float3 cC = lut3d_get_table(lut, xC, yC, zC, lutSize0, lutSize01); 576 float3 c; 577 c.x = c000.x + (cB.x - c000.x) * scale0 + (c111.x - cC.x) * scale2 + (cA.x - c000.x) * scale1 + (cC.x - cA.x - cB.x + c000.x) * scale0 * scale1; 578 c.y = c000.y + (cB.y - c000.y) * scale0 + (c111.y - cC.y) * scale2 + (cA.y - c000.y) * scale1 + (cC.y - cA.y - cB.y + c000.y) * scale0 * scale1; 579 c.z = c000.z + (cB.z - c000.z) * scale0 + (c111.z - cC.z) * scale2 + (cA.z - c000.z) * scale1 + (cC.z - cA.z - cB.z + c000.z) * scale0 * scale1; 580 return c; 581 } 582 583 COLORSPACE_FUNC float3 lut3d_interp_prism(float3 in, const LUTVEC *lut, const int lutSize0, const int lutSize01) { 584 const int x0 = lut3d_prev_idx(in.x); 585 const int x1 = lut3d_next_idx(in.x, lutSize0); 586 const int y0 = lut3d_prev_idx(in.y); 587 const int y1 = lut3d_next_idx(in.y, lutSize0); 588 const int z0 = lut3d_prev_idx(in.z); 589 const int z1 = lut3d_next_idx(in.z, lutSize0); 590 const float scalex = in.x - x0; 591 const float scaley = in.y - y0; 592 const float scalez = in.z - z0; 593 float scale0, scale2; 594 int xA, yA, zA, xB, yB, zB; 595 596 if (scalez > scalex) { 597 scale0 = scalez; 598 scale2 = scalex; 599 xA = x0; yA = y1; zA = z1; 600 xB = x0; yB = y0; zB = z1; 601 } else { 602 scale0 = scalex; 603 scale2 = scalez; 604 xA = x1; yA = y1; zA = z0; 605 xB = x1; yB = y0; zB = z0; 606 } 607 const float3 c000 = lut3d_get_table(lut, x0, y0, z0, lutSize0, lutSize01); 608 const float3 c010 = lut3d_get_table(lut, x0, y1, z0, lutSize0, lutSize01); 609 const float3 c101 = lut3d_get_table(lut, x1, y0, z1, lutSize0, lutSize01); 610 const float3 c111 = lut3d_get_table(lut, x1, y1, z1, lutSize0, lutSize01); 611 const float3 cA = lut3d_get_table(lut, xA, yA, zA, lutSize0, lutSize01); 612 const float3 cB = lut3d_get_table(lut, xB, yB, zB, lutSize0, lutSize01); 613 float3 c; 614 c.x = c000.x + (cB.x - c000.x) * scale0 + (c101.x - cB.x) * scale2 + (c010.x - c000.x) * scaley + (c000.x - c010.x - cB.x + cA.x) * scale0 * scaley + (cB.x - cA.x - c101.x + c111.x) * scale2 * scaley; 615 c.y = c000.y + (cB.y - c000.y) * scale0 + (c101.y - cB.y) * scale2 + (c010.y - c000.y) * scaley + (c000.y - c010.y - cB.y + cA.y) * scale0 * scaley + (cB.y - cA.y - c101.y + c111.y) * scale2 * scaley; 616 c.z = c000.z + (cB.z - c000.z) * scale0 + (c101.z - cB.z) * scale2 + (c010.z - c000.z) * scaley + (c000.z - c010.z - cB.z + cA.z) * scale0 * scaley + (cB.z - cA.z - c101.z + c111.z) * scale2 * scaley; 617 return c; 618 } 619 620 struct RGYColorspaceDevParams { 621 int lut_offset; 622 int prelut_offset; 623 // 以降はoffsetの示す位置にデータ 624 // データの取り出し方法は下記の関数を参照 625 }; 626 627 float *getDevParamsPrelut(void *__restrict__ ptr) { 628 return (float *)((char *)ptr + ((RGYColorspaceDevParams *)ptr)->prelut_offset); 629 } 630 631 const float *getDevParamsPrelut(const void *__restrict__ ptr) { 632 return (const float *)((const char *)ptr + ((RGYColorspaceDevParams *)ptr)->prelut_offset); 633 } 634 635 LUTVEC *getDevParamsLut(void *__restrict__ ptr) { 636 return (LUTVEC *)((char *)ptr + ((RGYColorspaceDevParams *)ptr)->lut_offset); 637 } 638 639 const LUTVEC *getDevParamsLut(const void *__restrict__ ptr) { 640 return (const LUTVEC *)((const char *)ptr + ((RGYColorspaceDevParams *)ptr)->lut_offset); 641 } 642 643 644 #include 645 646 __device__ __inline__ 647 float3 convert_colorspace_custom(float3 x, const RGYColorspaceDevParams *__restrict__ params) { 648 649 { //range int->float 650 const float range_y = 1.7836757990867579e-05f; 651 const float offset_y = -7.3059360730593603e-02f; 652 const float range_uv = 1.7438616071428570e-05f; 653 const float offset_uv = -5.7142857142857140e-01f; 654 x.x = x.x * range_y + offset_y; 655 x.y = x.y * range_uv + offset_uv; 656 x.z = x.z * range_uv + offset_uv; 657 } 658 659 { 660 float m[3][3] = { 661 { 9.9999999999999989e-01f, 0.0000000000000000e+00f, 1.5747999999999998e+00f }, 662 { 9.9999999999999967e-01f, -1.8732427293064877e-01f, -4.6812427293064868e-01f }, 663 { 9.9999999999999989e-01f, 1.8555999999999999e+00f, 0.0000000000000000e+00f } 664 }; 665 x = matrix_mul(m, x); 666 } 667 668 return x; 669 } 670 671 static const int PIX_PER_THREAD = 4; 672 673 template __device__ __inline__ T toPix(float x) { return (T)clamp((x) + 0.5f, 0.0f, (1<<(sizeof(T)*8)) - 0.5f); } 674 template<> __device__ __inline__ float toPix (float x) { return x; } 675 676 template 677 __global__ void kernel_filter( 678 uint8_t *__restrict__ pDstY, uint8_t *__restrict__ pDstU, uint8_t *__restrict__ pDstV, 679 const int dstPitch, const int dstWidth, const int dstHeight, 680 const uint8_t *__restrict__ pSrcY, const uint8_t *__restrict__ pSrcU, const uint8_t *__restrict__ pSrcV, 681 const int srcPitch, const int srcWidth, const int srcHeight, bool srcInterlaced, 682 const RGYColorspaceDevParams *__restrict__ params) { 683 const int ix = (blockIdx.x * blockDim.x + threadIdx.x) * PIX_PER_THREAD; 684 const int iy = blockIdx.y * blockDim.y + threadIdx.y; 685 686 struct __align__(sizeof(TypeIn) * 4) TypeIn4 { 687 TypeIn x, y, z, w; 688 }; 689 690 struct __align__(sizeof(TypeOut) * 4) TypeOut4 { 691 TypeOut x, y, z, w; 692 }; 693 694 if (ix < dstWidth && iy < dstHeight) { 695 696 TypeIn4 srcY = *(TypeIn4 *)(pSrcY + iy * srcPitch + ix * sizeof(TypeIn)); 697 TypeIn4 srcU = *(TypeIn4 *)(pSrcU + iy * srcPitch + ix * sizeof(TypeIn)); 698 TypeIn4 srcV = *(TypeIn4 *)(pSrcV + iy * srcPitch + ix * sizeof(TypeIn)); 699 700 float3 pix0 = make_float3((float)srcY.x, (float)srcU.x, (float)srcV.x); 701 float3 pix1 = make_float3((float)srcY.y, (float)srcU.y, (float)srcV.y); 702 float3 pix2 = make_float3((float)srcY.z, (float)srcU.z, (float)srcV.z); 703 float3 pix3 = make_float3((float)srcY.w, (float)srcU.w, (float)srcV.w); 704 705 pix0 = convert_colorspace_custom(pix0, params); 706 pix1 = convert_colorspace_custom(pix1, params); 707 pix2 = convert_colorspace_custom(pix2, params); 708 pix3 = convert_colorspace_custom(pix3, params); 709 710 TypeOut4 dstY, dstU, dstV; 711 dstY.x = toPix(pix0.x); dstU.x = toPix(pix0.y); dstV.x = toPix(pix0.z); 712 dstY.y = toPix(pix1.x); dstU.y = toPix(pix1.y); dstV.y = toPix(pix1.z); 713 dstY.z = toPix(pix2.x); dstU.z = toPix(pix2.y); dstV.z = toPix(pix2.z); 714 dstY.w = toPix(pix3.x); dstU.w = toPix(pix3.y); dstV.w = toPix(pix3.z); 715 716 TypeOut4 *ptrDstY = (TypeOut4 *)(pDstY + iy * dstPitch + ix * sizeof(TypeOut)); 717 TypeOut4 *ptrDstU = (TypeOut4 *)(pDstU + iy * dstPitch + ix * sizeof(TypeOut)); 718 TypeOut4 *ptrDstV = (TypeOut4 *)(pDstV + iy * dstPitch + ix * sizeof(TypeOut)); 719 720 ptrDstY[0] = dstY; 721 ptrDstU[0] = dstU; 722 ptrDstV[0] = dstV; 723 } 724 }; 725 726 #endif // _JITIFY_INCLUDE_GUARD_F0A087E65B9A1EB9 --------------------------------------- Compiler options: --use_fast_math -arch=compute_75 Building kernel_filter [--use_fast_math,-arch=compute_75] --------------------------------------------------- --- JIT compile log for colorspace_conv --- --------------------------------------------------- colorspace_conv(45): warning: variable "MP_REF_WHITE_HLG" was declared but never referenced --------------------------------------------------- --------------------------------------- _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams --------------------------------------- --- PTX for colorspace_conv --- --------------------------------------- // // Generated by NVIDIA NVVM Compiler // // Compiler Build ID: CL-26907403 // Cuda compilation tools, release 10.1, V10.1.243 // Based on LLVM 3.4svn // .version 6.4 .target sm_75 .address_size 64 // .weak _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams .global .align 4 .f32 REC709_ALPHA = 0f3F8CB5C2; .global .align 4 .f32 REC709_BETA = 0f3C93E5EB; .global .align 4 .f32 SMPTE_240M_ALPHA = 0f3F8E47FF; .global .align 4 .f32 SMPTE_240M_BETA = 0f3CBAF455; .global .align 4 .f32 SRGB_ALPHA = 0f3F870A97; .global .align 4 .f32 SRGB_BETA = 0f3B475041; .global .align 4 .f32 ST2084_M1 = 0f3E232000; .global .align 4 .f32 ST2084_M2 = 0f429DB000; .global .align 4 .f32 ST2084_C1 = 0f3F560000; .global .align 4 .f32 ST2084_C2 = 0f4196D000; .global .align 4 .f32 ST2084_C3 = 0f41958000; .global .align 4 .f32 ARIB_B67_A = 0f3E371FF0; .global .align 4 .f32 ARIB_B67_B = 0f3E91C020; .global .align 4 .f32 ARIB_B67_C = 0f3F0F564F; .global .align 4 .f32 FLOAT_EPS = 0f00800000; .global .align 4 .f32 MP_REF_WHITE = 0f434B0000; .global .align 4 .f32 MP_REF_WHITE_HLG = 0f404B7DBF; .global .align 4 .f32 PQ_M1 = 0f3E232000; .global .align 4 .f32 PQ_M2 = 0f429DB000; .global .align 4 .f32 PQ_C1 = 0f3F560000; .global .align 4 .f32 PQ_C2 = 0f4196D000; .global .align 4 .f32 PQ_C3 = 0f41958000; .global .align 4 .f32 ST2084_OOTF_SCALE = 0f426DF695; .global .align 4 .u32 PIX_PER_THREAD = 4; .weak .entry _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams( .param .u64 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_0, .param .u64 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_1, .param .u64 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_2, .param .u32 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_3, .param .u32 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_4, .param .u32 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_5, .param .u64 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_6, .param .u64 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_7, .param .u64 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_8, .param .u32 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_9, .param .u32 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_10, .param .u32 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_11, .param .u8 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_12, .param .u64 _Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_13 ) { .reg .pred %p<4>; .reg .b16 %rs<25>; .reg .f32 %f<49>; .reg .b32 %r<16>; .reg .b64 %rd<25>; ld.param.u64 %rd1, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_0]; ld.param.u64 %rd2, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_1]; ld.param.u64 %rd3, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_2]; ld.param.u32 %r3, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_3]; ld.param.u32 %r5, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_4]; ld.param.u32 %r6, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_5]; ld.param.u64 %rd4, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_6]; ld.param.u64 %rd5, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_7]; ld.param.u64 %rd6, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_8]; ld.param.u32 %r4, [_Z13kernel_filterIftEvPhS0_S0_iiiPKhS2_S2_iiibPK22RGYColorspaceDevParams_param_9]; mov.u32 %r7, %ctaid.x; mov.u32 %r8, %ntid.x; mov.u32 %r9, %tid.x; mad.lo.s32 %r10, %r8, %r7, %r9; shl.b32 %r1, %r10, 2; mov.u32 %r11, %ntid.y; mov.u32 %r12, %ctaid.y; mov.u32 %r13, %tid.y; mad.lo.s32 %r2, %r11, %r12, %r13; setp.ge.s32 %p1, %r1, %r5; setp.ge.s32 %p2, %r2, %r6; or.pred %p3, %p1, %p2; @%p3 bra BB0_2; cvta.to.global.u64 %rd7, %rd4; mul.lo.s32 %r14, %r2, %r4; cvt.s64.s32 %rd8, %r14; mul.wide.s32 %rd9, %r1, 2; add.s64 %rd10, %rd8, %rd9; add.s64 %rd11, %rd7, %rd10; ld.global.nc.v4.u16 {%rs1, %rs2, %rs3, %rs4}, [%rd11]; cvta.to.global.u64 %rd12, %rd5; add.s64 %rd13, %rd12, %rd10; ld.global.nc.v4.u16 {%rs9, %rs10, %rs11, %rs12}, [%rd13]; cvta.to.global.u64 %rd14, %rd6; add.s64 %rd15, %rd14, %rd10; ld.global.nc.v4.u16 {%rs17, %rs18, %rs19, %rs20}, [%rd15]; cvt.rn.f32.u16 %f1, %rs1; cvt.rn.f32.u16 %f2, %rs9; cvt.rn.f32.u16 %f3, %rs17; cvt.rn.f32.u16 %f4, %rs2; cvt.rn.f32.u16 %f5, %rs10; cvt.rn.f32.u16 %f6, %rs18; cvt.rn.f32.u16 %f7, %rs3; cvt.rn.f32.u16 %f8, %rs11; cvt.rn.f32.u16 %f9, %rs19; cvt.rn.f32.u16 %f10, %rs4; cvt.rn.f32.u16 %f11, %rs12; cvt.rn.f32.u16 %f12, %rs20; fma.rn.ftz.f32 %f13, %f1, 0f3795A025, 0fBD95A025; fma.rn.ftz.f32 %f14, %f2, 0f37924925, 0fBF124925; fma.rn.ftz.f32 %f15, %f3, 0f37924925, 0fBF124925; fma.rn.ftz.f32 %f16, %f14, 0f00000000, %f13; fma.rn.ftz.f32 %f17, %f14, 0fBE3FD1EF, %f13; fma.rn.ftz.f32 %f18, %f14, 0f3FED844D, %f13; fma.rn.ftz.f32 %f19, %f4, 0f3795A025, 0fBD95A025; fma.rn.ftz.f32 %f20, %f5, 0f37924925, 0fBF124925; fma.rn.ftz.f32 %f21, %f6, 0f37924925, 0fBF124925; fma.rn.ftz.f32 %f22, %f20, 0f00000000, %f19; fma.rn.ftz.f32 %f23, %f20, 0fBE3FD1EF, %f19; fma.rn.ftz.f32 %f24, %f20, 0f3FED844D, %f19; fma.rn.ftz.f32 %f25, %f7, 0f3795A025, 0fBD95A025; fma.rn.ftz.f32 %f26, %f8, 0f37924925, 0fBF124925; fma.rn.ftz.f32 %f27, %f9, 0f37924925, 0fBF124925; fma.rn.ftz.f32 %f28, %f26, 0f00000000, %f25; fma.rn.ftz.f32 %f29, %f26, 0fBE3FD1EF, %f25; fma.rn.ftz.f32 %f30, %f26, 0f3FED844D, %f25; fma.rn.ftz.f32 %f31, %f10, 0f3795A025, 0fBD95A025; fma.rn.ftz.f32 %f32, %f11, 0f37924925, 0fBF124925; fma.rn.ftz.f32 %f33, %f12, 0f37924925, 0fBF124925; fma.rn.ftz.f32 %f34, %f32, 0f00000000, %f31; fma.rn.ftz.f32 %f35, %f32, 0fBE3FD1EF, %f31; fma.rn.ftz.f32 %f36, %f32, 0f3FED844D, %f31; mul.lo.s32 %r15, %r2, %r3; cvt.s64.s32 %rd16, %r15; mul.wide.s32 %rd17, %r1, 4; add.s64 %rd18, %rd16, %rd17; cvta.to.global.u64 %rd19, %rd1; add.s64 %rd20, %rd19, %rd18; cvta.to.global.u64 %rd21, %rd2; add.s64 %rd22, %rd21, %rd18; cvta.to.global.u64 %rd23, %rd3; add.s64 %rd24, %rd23, %rd18; fma.rn.ftz.f32 %f37, %f33, 0f3FC9930C, %f34; fma.rn.ftz.f32 %f38, %f27, 0f3FC9930C, %f28; fma.rn.ftz.f32 %f39, %f21, 0f3FC9930C, %f22; fma.rn.ftz.f32 %f40, %f15, 0f3FC9930C, %f16; st.global.v4.f32 [%rd20], {%f40, %f39, %f38, %f37}; fma.rn.ftz.f32 %f41, %f33, 0fBEEFADFC, %f35; fma.rn.ftz.f32 %f42, %f27, 0fBEEFADFC, %f29; fma.rn.ftz.f32 %f43, %f21, 0fBEEFADFC, %f23; fma.rn.ftz.f32 %f44, %f15, 0fBEEFADFC, %f17; st.global.v4.f32 [%rd22], {%f44, %f43, %f42, %f41}; fma.rn.ftz.f32 %f45, %f33, 0f00000000, %f36; fma.rn.ftz.f32 %f46, %f27, 0f00000000, %f30; fma.rn.ftz.f32 %f47, %f21, 0f00000000, %f24; fma.rn.ftz.f32 %f48, %f15, 0f00000000, %f18; st.global.v4.f32 [%rd24], {%f48, %f47, %f46, %f45}; BB0_2: ret; } colorspace_conv: colorspace_conv: , interface planes, interlace frame colorspace_conv: thread/block (32,8), pixel/thread (4,1) colorspace_conv: 1920x1080 yuv444(16bit) colorspace: allocated output buffer: 1920x1080, picth 7680, rgb(fp32). colorspace: colorspace: cspconv(yv12(16bit) -> yuv444(16bit)) colorspace: matrix:bt709->GBR ngx-truehdr: created colorspace: cspconv(yv12(16bit) -> yuv444(16bit)) ngx-truehdr: matrix:bt709->GBR. ngx-truehdr: Create input csp conversion filter. cspconv: cspconv(rgb(fp32) -> rgb32) ngx-truehdr: created cspconv(rgb(fp32) -> rgb32). ngx-truehdr: Create output csp conversion filter. cspconv: cspconv(rgba(fp16) -> rgb(fp32)) ngx-truehdr: created cspconv(rgba(fp16) -> rgb(fp32)). ngx-truehdr: Create output csp conversion filter. colorspace: nvrtc64_101_0.dll available. ColorspaceOpCtrl: Search path from matrix:GBR,colorprim:unknown,transfer:linear -> matrix:bt2020nc,colorprim:bt2020,transfer:smpte2084 ColorspaceOpCtrl: Set path... ColorspaceOpCtrl: node: matrix:GBR,colorprim:unknown,transfer:linear ColorspaceOpCtrl: node: matrix:GBR,colorprim:bt2020,transfer:linear ColorspaceOpCtrl: node: matrix:GBR,colorprim:bt2020,transfer:smpte2084 ColorspaceOpCtrl: node: matrix:bt2020nc,colorprim:bt2020,transfer:smpte2084 colorspace: additional param size: 8. colorspace: transfer additional param to device. colorspace_conv: nvrtc64_101_0.dll available. colorspace_conv: program source... colorspace_conv: 椣摦晥张䍟䑕䍁彃呒彃ൟ⌊敤楦敮䌠䱏剏偓䍁彅商䍎张摟癥捩彥 彟湩楬敮彟਍攣獬൥⌊敤楦敮䌠䱏剏偓䍁彅商䍎猠慴楴ൣ⌊牰条慭漠据൥⌊湩汣摵⁥挼慭桴ാ⌊湩汣摵⁥挼汦慯㹴਍瀣慲浧⁡慷湲湩⁧瀨獵⥨਍瀣慲浧⁡慷湲湩⁧搨獩扡敬›㠴㤱ഩ⌊湩汣摵⁥挼摵彡畲瑮浩⹥㹨਍瀣慲浧⁡慷湲湩⁧瀨灯ഩ⌊湥楤൦ഊ琊灹摥晥映潬瑡‴啌噔䍅഻ഊ⌊晩摮晥挠慬灭਍搣晥湩⁥汣浡⡰ⱸ氠睯‬楨桧
⠨砨
㴼⠠楨桧⤩㼠⠠⠨⥸㸠‽氨睯⤩㼠⠠⥸㨠⠠潬⥷
›栨杩⥨ഩ⌊湥楤൦ഊ⼊ꖻ룤窋浩꺁牳屣楺杭捜汯牯灳捡履慧浭⹡灣袂苣鶋胥膀룤ꢃ铦覤਍਍潣獮⁴汦慯⁴䕒㝃㤰䅟偌䅈㴠ㄠ〮㤹㤲㠶㘲〸㐹昴഻挊湯瑳映潬瑡删䍅〷弹䕂䅔㴠〠〮㠱㔰㤳㠶ㄵ㠰㜰㭦਍਍潣獮⁴汦慯⁴䵓呐彅㐲䴰䅟偌䅈㴠ㄠㄮㄱ㜵ㄲ㔹㈹㜱ㄳ㭦਍潣獮⁴汦慯⁴䵓呐彅㐲䴰䉟呅⁁㴠〠〮㈲㈸㔱㔸㈵㐹㔴㭦਍਍⼯䄠橤獵整⁤潦⁲潣瑮湩極祴漠⁦楦獲⁴敤楲慶楴敶മ挊湯瑳映潬瑡匠䝒彂䱁䡐⁁‽⸱㔰〵〱ㄷ㤸㜴㠵昷഻挊湯瑳映潬瑡匠䝒彂䕂䅔㴠〠〮㌰㐰㈱㈸㘵㄰㠲㭦਍਍潣獮⁴汦慯⁴呓〲㐸䵟‱‽⸰㔱㌹㄰㔷㠷㈱昵഻挊湯瑳映潬瑡匠㉔㠰弴㉍㴠㜠⸸㐸㜳昵഻挊湯瑳映潬瑡匠㉔㠰弴ㅃ㴠〠㠮㔳㌹㔷㭦਍潣獮⁴汦慯⁴呓〲㐸䍟′‽㠱㠮ㄵ㘵㔲㭦਍潣獮⁴汦慯⁴呓〲㐸䍟″‽㠱㘮㜸昵഻ഊ挊湯瑳映潬瑡䄠䥒彂㙂強⁁‽⸰㜱㠸㈳㜷㭦਍潣獮⁴汦慯⁴剁䉉䉟㜶䉟㴠〠㈮㐸㘶㤸昲഻挊湯瑳映潬瑡䄠䥒彂㙂強⁃‽⸰㔵㤹〱㌷㭦਍਍潣獮⁴汦慯⁴䱆䅏彔偅⁓‽⸱㜱㐵㐹㔳攱㌭昸഻ഊ挊湯瑳映潬瑡䴠彐䕒彆䡗呉⁅‽〲⸳昰഻挊湯瑳映潬瑡䴠彐䕒彆䡗呉彅䱈⁇‽⸳㜱㔹昵഻ഊ⼊ 潃浭湯挠湯瑳湡獴映牯匠偍䕔匠⹔〲㐸⠠䑈⥒਍潣獮⁴汦慯⁴児䵟‱‽㘲〱〮⁦ 〴㘹〮⁦‪⸱昰⼠㐠〮㭦਍潣獮⁴汦慯⁴児䵟′‽㔲㌲〮⁦ 〴㘹〮⁦‪㈱⸸昰഻挊湯瑳映潬瑡倠彑ㅃ㴠㌠㈴⸴昰⼠㐠㤰⸶昰഻挊湯瑳映潬瑡倠彑㉃㴠㈠ㄴ⸳昰⼠㐠㤰⸶昰⨠㌠⸲昰഻挊湯瑳映潬瑡倠彑㍃㴠㈠㤳⸲昰⼠㐠㤰⸶昰⨠㌠⸲昰഻ഊ⼊ 桃獯湥映牯挠浯慰楴楢楬祴眠瑩⁨楨桧牥瀠敲楣楳湯删䍅〷弹䱁䡐⽁䕒㝃㤰䉟呅⹁਍⼯匠敥›呉ⵕ⁒呂㈮㤳ⴰ′⸵⸳റ挊湯瑳映潬瑡匠㉔㠰弴住䙔卟䅃䕌㴠㔠⸹㤴㠰㈰㠳ㄷ㌵㌸㭦਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣〷弹敯晴昨潬瑡砠
ൻ †椠⁦砨㰠删䍅〷弹䕂䅔ഩ †††砠㴠砠⨠㐠㔮㭦਍††汥敳਍††††⁸‽䕒㝃㤰䅟偌䅈⨠瀠睯⡦ⱸ〠㐮昵
‭刨䍅〷弹䱁䡐⁁‭⸱昰㬩਍਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣〷弹湩敶獲彥敯晴昨潬瑡砠
ൻ †椠⁦砨㰠㐠㔮⁦‪䕒㝃㤰䉟呅⥁਍††††⁸‽⁸ ⸴昵഻ †攠獬൥ †††砠㴠瀠睯⡦砨⬠⠠䕒㝃㤰䅟偌䅈ⴠㄠ〮⥦
 䕒㝃㤰䅟偌䅈‬⸱昰⼠〠㐮昵㬩਍਍††敲畴湲砠഻紊਍਍⼯䤠湧牯⁥桴⁥呂ㄮ㠸‶牰癯獩潩獮映牯氠浩瑩摥挠湯牴獡⁴湡⁤獡畳敭愠摩慥剃⹔਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣㠱㘸敟瑯⡦汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⸰昰㨠瀠睯⡦ⱸ㈠㐮⥦഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣㠱㘸楟癮牥敳敟瑯⡦汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⸰昰㨠瀠睯⡦ⱸㄠ〮⁦ ⸲昴㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡漠瑯彦弱⠲汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⁸›潰晷砨‬⸱昲㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡椠癮牥敳潟瑯彦弱⠲汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⁸›潰晷砨‬⸱昰⼠ㄠ㈮⥦഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴潯晴獟㉴㠰⠴汦慯⁴⥸笠਍††敲畴湲爠捥ㅟ㠸弶潥晴爨捥㝟㤰潟瑥⡦⁸‪呓〲㐸佟呏彆䍓䱁⥅
 〱⸰昰഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴湩敶獲彥潯晴獟㉴㠰⠴汦慯⁴⥸笠਍††敲畴湲爠捥㝟㤰楟癮牥敳潟瑥⡦敲彣㠱㘸楟癮牥敳敟瑯⡦⁸‪〱⸰昰⤩⼠匠㉔㠰弴住䙔卟䅃䕌഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴潬ㅧ〰潟瑥⡦汦慯⁴⥸笠਍††敲畴湲砠㰠‽⸰㄰⁦‿⸰昰㨠ㄠ〮⁦‫潬ㅧ昰砨
‪ㄨ〮⁦ ⸲昰㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠杯〱弰湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵⁸㴼〠〮⁦‿⸰㄰⁦›潰晷ㄨ⸰昰‬′‪砨ⴠㄠ〮⥦㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠杯ㄳ弶敯晴昨潬瑡砠
ൻ †爠瑥牵⁸㴼〠〮㌰㘱㈲㜷㘶⁦‿⸰昰㨠ㄠ〮⁦‫潬ㅧ昰砨
‪ㄨ〮⁦ ⸲昵㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠杯ㄳ弶湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵⁸㴼〠〮⁦‿⸰〰ㄳ㈶㜲㘷昶㨠瀠睯⡦〱〮ⱦ㈠㔮⁦‪砨ⴠㄠ〮⥦㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡爠捥㑟〷彭敯晴昨潬瑡砠
ൻ †爠瑥牵⁸‼⸰昰㼠〠〮⁦›潰晷砨‬⸲昲㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡爠捥㑟〷彭湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵⁸‼⸰昰㼠〠〮⁦›潰晷砨‬⸱昰⼠㈠㈮⥦഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴敲彣㜴戰彧敯晴昨潬瑡砠
ൻ †爠瑥牵⁸‼⸰昰㼠〠〮⁦›潰晷砨‬⸲昸㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡爠捥㑟〷杢楟癮牥敳潟瑥⡦汦慯⁴⥸笠਍††敲畴湲砠㰠〠〮⁦‿⸰昰㨠瀠睯⡦ⱸㄠ〮⁦ ⸲昸㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡猠灭整㉟〴彭敯晴昨潬瑡砠
ൻ †椠⁦砨㰠㐠〮⁦‪䵓呐彅㐲䴰䉟呅⥁਍††††⁸‽⁸‪ㄨ〮⁦ ⸴昰㬩਍††汥敳਍††††⁸‽潰晷⠨⁸‫匨偍䕔㉟〴彍䱁䡐⁁‭⸱昰⤩⼠匠偍䕔㉟〴彍䱁䡐ⱁㄠ〮⁦ ⸰㔴⥦഻ഊ †爠瑥牵㭸਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡猠灭整㉟〴彭湩敶獲彥敯晴昨潬瑡砠
ൻ †椠⁦砨㰠匠偍䕔㉟〴彍䕂䅔ഩ †††砠㴠砠⨠㐠〮㭦਍††汥敳਍††††⁸‽䵓呐彅㐲䴰䅟偌䅈⨠瀠睯⡦ⱸ〠㐮昵
‭匨偍䕔㉟〴彍䱁䡐⁁‭⸱昰㬩਍਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴癸捹彣敯晴昨潬瑡砠
ൻ †爠瑥牵潣祰楳湧⡦敲彣〷弹敯晴昨扡晳砨⤩‬⥸഻紊਍਍汦慯⁴癸捹彣湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵潣祰楳湧⡦敲彣〷弹湩敶獲彥敯晴昨扡晳砨⤩‬⥸഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴牡扩扟㜶潟瑥⡦汦慯⁴⥸笠਍††⼯倠敲敶瑮渠来瑡癩⁥楰數獬映潲楹汥楤杮丠乁മ †砠㴠映慭晸砨‬⸰昰㬩਍਍††晩⠠⁸㴼⠠⸱昰⼠ㄠ⸲昰⤩਍††††⁸‽煳瑲⡦⸳昰⨠砠㬩਍††汥敳਍††††⁸‽剁䉉䉟㜶䅟⨠氠杯⡦㈱〮⁦‪⁸‭剁䉉䉟㜶䉟
‫剁䉉䉟㜶䍟഻ഊ †爠瑥牵㭸਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡愠楲形㙢強湩敶獲彥敯晴昨潬瑡砠
ൻ †⼠ 牐癥湥⁴敮慧楴敶瀠硩汥⁳硥慰摮湩⁧湩潴瀠獯瑩癩⁥慶畬獥മ †砠㴠映慭晸砨‬⸰昰㬩਍਍††晩⠠⁸㴼〠㔮⥦਍††††⁸‽砨⨠砠
‪ㄨ〮⁦ ⸳昰㬩਍††汥敳਍††††⁸‽攨灸⡦砨ⴠ䄠䥒彂㙂強⥃⼠䄠䥒彂㙂強⥁⬠䄠䥒彂㙂強⥂⨠⠠⸱昰⼠ㄠ⸲昰㬩਍਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴牳执敟瑯⡦汦慯⁴⥸笠਍††晩⠠⁸‼㈱㤮昲⨠匠䝒彂䕂䅔ഩ †††砠⨠‽ㄨ〮⁦ ㈱㤮昲㬩਍††汥敳਍††††⁸‽潰晷⠨⁸‫匨䝒彂䱁䡐⁁‭⸱昰⤩⨠⠠⸱昰⼠匠䝒彂䱁䡐⥁‬⸲昴㬩਍਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴牳执楟癮牥敳敟瑯⡦汦慯⁴⥸笠਍††晩⠠⁸‼剓䉇䉟呅⥁਍††††⁸‽⁸‪㈱㤮昲഻ †攠獬൥ †††砠㴠匠䝒彂䱁䡐⁁‪潰晷砨‬⸱昰⼠㈠㐮⥦ⴠ⠠剓䉇䅟偌䅈ⴠㄠ〮⥦഻ഊ †爠瑥牵㭸਍ൽഊ⼊ 慈摮敬瘠污敵⁳湩琠敨爠湡敧嬠⸰ⴰ⸱崰猠捵⁨桴瑡琠敨⁹慭捴⁨⁡敬慧祣䌠呒മ䌊䱏剏偓䍁彅商䍎映潬瑡砠祶捣敟瑯⡦汦慯⁴⥸笠਍††晩⠠⁸‼⸰昰簠⁼⁸‾⸱昰ഩ †††爠瑥牵潣祰楳湧⡦敲彣〷弹湩敶獲彥敯晴昨扡晳砨⤩‬⥸഻ †攠獬൥ †††爠瑥牵潣祰楳湧⡦敲彣㠱㘸敟瑯⡦慦獢⡦⥸Ⱙ砠㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡砠祶捣楟癮牥敳敟瑯⡦汦慯⁴⥸笠਍††晩⠠⁸‼⸰昰簠⁼⁸‾⸱昰ഩ †††爠瑥牵潣祰楳湧⡦敲彣〷弹敯晴昨扡晳砨⤩‬⥸഻ †攠獬൥ †††爠瑥牵潣祰楳湧⡦敲彣㠱㘸楟癮牥敳敟瑯⡦慦獢⡦⥸Ⱙ砠㬩਍ൽഊ⼊瀯影灳捡彥潴江湩慥൲䌊䱏剏偓䍁彅商䍎映潬瑡猠彴〲㐸敟瑯⡦汦慯⁴⥸笠਍††⼯䘠汩整⁲敮慧楴敶瘠污敵⁳潴愠潶摩丠乁മ †椠⁦砨㸠〠〮⥦笠਍††††汦慯⁴灸睯㴠瀠睯⡦ⱸㄠ〮⁦ 呓〲㐸䵟⤲഻ †††映潬瑡渠浵㴠映慭晸砨潰⁷‭呓〲㐸䍟ⰱ〠〮⥦഻ †††映潬瑡搠湥㴠映慭晸匨㉔㠰弴㉃ⴠ匠㉔㠰弴㍃⨠砠潰ⱷ䘠佌呁䕟卐㬩਍††††⁸‽潰晷渨浵⼠搠湥‬⸱昰⼠匠㉔㠰弴ㅍ㬩਍††⁽汥敳笠਍††††⁸‽⸰昰഻ †素਍਍††敲畴湲砠഻紊਍਍⼯楬敮牡瑟彯煰獟慰散਍佃佌卒䅐䕃䙟乕⁃汦慯⁴瑳㉟㠰弴湩敶獲彥潥晴昨潬瑡砠
ൻ †⼠ 楆瑬牥渠来瑡癩⁥慶畬獥琠癡楯⁤䅎ⱎ愠摮愠獬灳捥慩⵬慣敳〠猠桴瑡⠠⡦⡧⤰
㴽〠⸩਍††晩⠠⁸‾⸰昰
ൻ †††映潬瑡砠潰⁷‽潰晷砨‬呓〲㐸䵟⤱഻⌊晩〠਍††††⼯传楲楧慮潦浲汵瑡潩牦浯匠偍䕔匠⁔〲㐸㈺㄰‴異汢捩瑡潩⹮਍††††汦慯⁴畮‽呓〲㐸䍟‱‫呓〲㐸䍟′‪灸睯഻ †††映潬瑡搠湥㴠ㄠ〮⁦‫呓〲㐸䍟″‪灸睯഻ †††砠㴠瀠睯⡦畮 敤Ɱ匠㉔㠰弴㉍㬩਍攣獬൥ †††⼠ 潍敲猠慴汢⁥牡慲杮浥湥⁴桴瑡愠潶摩⁳潳敭挠湡散汬瑡潩牥潲⹲਍††††汦慯⁴畮‽匨㉔㠰弴ㅃⴠㄠ〮⥦⬠⠠呓〲㐸䍟′‭呓〲㐸䍟⤳⨠砠潰㭷਍††††汦慯⁴敤‽⸱昰⬠匠㉔㠰弴㍃⨠砠潰㭷਍††††⁸‽潰晷ㄨ〮⁦‫畮 敤Ɱ匠㉔㠰弴㉍㬩਍攣摮晩਍††⁽汥敳笠਍††††⁸‽⸰昰഻ †素਍਍††敲畴湲砠഻紊਍਍⼯䄠灰楬獥愠瀠牥挭慨湮汥挠牯敲瑣潩湩瑳慥⁤景琠敨椠整慲楴敶洠瑥潨⁤灳捥晩敩⁤湩删捥㈮〱⸰਍佃佌卒䅐䕃䙟乕⁃汦慯⁴牡扩扟㜶敟瑯⡦汦慯⁴⥸笠਍††敲畴湲漠瑯彦弱⠲牡扩扟㜶楟癮牥敳潟瑥⡦⥸㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡愠楲形㙢強湩敶獲彥潥晴昨潬瑡砠
ൻ †爠瑥牵牡扩扟㜶潟瑥⡦湩敶獲彥潯晴ㅟ㉟砨⤩഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴瑳㉟㠰弴敯晴昨潬瑡砠
ൻ †爠瑥牵瑳㉟㠰弴湩敶獲彥潥晴漨瑯彦瑳〲㐸砨⤩഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴瑳㉟㠰弴湩敶獲彥敯晴昨潬瑡砠
ൻ †爠瑥牵湩敶獲彥潯晴獟㉴㠰⠴瑳㉟㠰弴潥晴砨⤩഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯㍴愠楲䉢㜶灏⡳汦慯㍴瘠‬汦慯⁴牫‬汦慯⁴杫‬汦慯⁴扫‬汦慯⁴捳污⥥笠਍††潣獮⁴汦慯⁴慧浭⁡‽⸱昲഻ †映潬瑡爠㴠瘠砮⨠猠慣敬഻ †映潬瑡朠㴠瘠礮⨠猠慣敬഻ †映潬瑡戠㴠瘠種⨠猠慣敬഻ഊ †映潬瑡礠⁤‽浦硡⡦牫⨠爠⬠欠⁧‪⁧‫扫⨠戠‬䱆䅏彔偅⥓഻ †映潬瑡礠彳湩⁶‽潰晷礨Ɽ⠠⸱昰ⴠ朠浡慭
 慧浭⥡഻ഊ †瘠砮㴠愠楲形㙢強敯晴爨⨠礠彳湩⥶഻ †瘠礮㴠愠楲形㙢強敯晴木⨠礠彳湩⥶഻ †瘠種㴠愠楲形㙢強敯晴戨⨠礠彳湩⥶഻ †爠瑥牵㭶਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″牡扩㙂䤷癮灏⡳汦慯㍴瘠‬汦慯⁴牫‬汦慯⁴杫‬汦慯⁴扫‬汦慯⁴捳污⥥笠਍††潣獮⁴汦慯⁴慧浭⁡‽⸱昲഻ †映潬瑡爠㴠瘠砮഻ †映潬瑡朠㴠瘠礮഻ †映潬瑡戠㴠瘠種഻ഊ †映潬瑡礠⁳‽浦硡⡦牫⨠爠⬠欠⁧‪⁧‫扫⨠戠‬䱆䅏彔偅⥓഻ †礠⁳‽潰晷礨ⱳ朠浡慭ⴠㄠ〮⥦഻ഊ †瘠砮㴠愠楲形㙢強湩敶獲彥敯晴爨⨠礠⥳⨠猠慣敬഻ †瘠礮㴠愠楲形㙢強湩敶獲彥敯晴木⨠礠⥳⨠猠慣敬഻ †瘠種㴠愠楲形㙢強湩敶獲彥敯晴戨⨠礠⥳⨠猠慣敬഻ †爠瑥牵㭶਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″慭牴硩浟汵昨潬瑡洠㍛孝崳‬汦慯㍴瘠
ൻ †映潬瑡″敲㭴਍††敲⹴⁸‽孭崰せ⁝‪⹶⁸‫孭崰ㅛ⁝‪⹶⁹‫孭崰㉛⁝‪⹶㭺਍††敲⹴⁹‽孭崱せ⁝‪⹶⁸‫孭崱ㅛ⁝‪⹶⁹‫孭崱㉛⁝‪⹶㭺਍††敲⹴⁺‽孭崲せ⁝‪⹶⁸‫孭崲ㅛ⁝‪⹶⁹‫孭崲㉛⁝‪⹶㭺਍††敲畴湲爠瑥഻紊਍਍⼯迥莀›瑨灴㩳⼯楧瑳朮瑩畨⹢潣⽭爴⽥㐳捣扢㔹㌷挲戱晥㜴㍣㉤㜹愵㙣㌲㔹਍佃佌卒䅐䕃䙟乕⁃汦慯⁴慨汢⡥汦慯⁴ⱸ映潬瑡䄠‬汦慯⁴ⱂ映潬瑡䌠‬汦慯⁴ⱄ映潬瑡䔠‬汦慯⁴⥆笠਍††敲畴湲⠠砨⠪⩁⭸⩃⥂䐫䔪
 砨⠪⩁⭸⥂䐫䘪⤩ⴠ䔠䘯഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴摨㉲摳彲慨汢⡥汦慯⁴ⱸ映潬瑡猠畯捲彥数歡‬汦慯⁴摬彲楮獴‬汦慯⁴ⱁ映潬瑡䈠‬汦慯⁴ⱃ映潬瑡䐠‬汦慯⁴ⱅ映潬瑡䘠
ൻ †挠湯瑳映潬瑡攠⁢‽潳牵散灟慥 摬彲楮獴഻ †挠湯瑳映潬瑡琠‰‽慨汢⡥ⱸ䄠‬ⱂ䌠‬ⱄ䔠‬⥆഻ †挠湯瑳映潬瑡琠‱‽慨汢⡥扥‬ⱁ䈠‬ⱃ䐠‬ⱅ䘠㬩਍††敲畴湲琠‰ ㅴ഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴摨㉲摳彲潭楢獵昨潬瑡砠‬汦慯⁴潳牵散灟慥Ⱬ映潬瑡氠牤湟瑩ⱳ映潬瑡琠‬汦慯⁴数歡
ൻ †挠湯瑳映潬瑡攠⁢‽潳牵散灟慥 摬彲楮獴഻ †瀠慥㴪攠㭢਍††晩⠠⁸㴼琠
ൻ †††爠瑥牵㭸਍††ൽഊ †映潬瑡愠㴠ⴠ⁴‪⁴‪瀨慥‭⸱昰
 琨⨠琠ⴠ㈠〮⁦‪⁴‫数歡㬩਍††汦慯⁴⁢‽琨⨠琠ⴠ㈠〮⁦‪⁴‪数歡⬠瀠慥⥫⼠映慭晸瀨慥‭⸱昰‬攱㘭⥦഻ †爠瑥牵戨⨠戠⬠㈠〮⁦‪⁢‪⁴‫⁴‪⥴⼠⠠⁢‭⥡⨠⠠⁸‫⥡⼠⠠⁸‫⥢഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴摨㉲摳彲敲湩慨摲昨潬瑡砠‬汦慯⁴潳牵散灟慥Ⱬ映潬瑡氠牤湟瑩ⱳ映潬瑡漠晦敳ⱴ映潬瑡瀠慥⥫笠਍††潣獮⁴汦慯⁴扥㴠猠畯捲彥数歡⼠氠牤湟瑩㭳਍††数歡⨠‽扥഻ †爠瑥牵⁸ 砨⬠漠晦敳⥴⨠⠠数歡⬠漠晦敳⥴⼠瀠慥㭫਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠湩慥彲潴灟影灳捡⡥汦慯⁴⥸笠਍††晩⠠⁸‾⸰昰
ൻ †††砠⨠‽偍剟䙅坟䥈䕔⼠ㄠ〰〰〮㭦਍††††⁸‽潰晷砨‬児䵟⤱഻ †††砠㴠⠠児䍟‱‫児䍟′‪⥸⼠⠠⸱昰⬠倠彑㍃⨠砠㬩਍††††⁸‽潰晷砨‬児䵟⤲഻ †††爠瑥牵㭸਍††⁽汥敳笠਍††††敲畴湲〠〮㭦਍††ൽ紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴煰獟慰散瑟彯楬敮牡昨潬瑡砠
ൻ †椠⁦砨㸠〠〮⥦笠਍††††⁸‽潰晷砨‬⸱昰⼠倠彑㉍㬩਍††††⁸‽浦硡⡦⁸‭児䍟ⰱ〠〮⥦⼠⠠児䍟′‭児䍟″‪⥸഻ †††砠㴠瀠睯⡦ⱸㄠ〮⁦ 児䵟⤱഻ †††砠⨠‽〱〰⸰昰⼠䴠彐䕒彆䡗呉㭅਍††††敲畴湲砠഻ †素攠獬⁥ൻ †††爠瑥牵⸰昰഻ †素਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡愠灰祬扟㉴㤳⠰汦慯⁴ⱸ挠湯瑳映潬瑡洠硡界⥭笠਍††潣獮⁴汦慯⁴獫㴠ㄠ㔮⁦‪慭䱸浵ⴠ〠㔮㭦਍††汦慯⁴扴㴠⠠⁸‭獫
 ㄨ〮⁦‭獫㬩਍††汦慯⁴扴′‽扴⨠琠㭢਍††汦慯⁴扴″‽扴′‪扴഻ †映潬瑡瀠⁢‽㈨〮⁦‪扴″‭⸳昰⨠琠㉢⬠ㄠ〮⥦⨠欠⁳ഫ †††⠠扴″‭⸲昰⨠琠㉢⬠琠⥢⨠⠠⸱昰ⴠ欠⥳⬠਍††††⴨⸲昰⨠琠㍢⬠㌠〮⁦‪扴⤲⨠洠硡界㭭਍††⼯⁸‽業⡸扰‬ⱸ氠獥味慨⡮ⱸ欠⥳㬩਍††⁸‽砨㰠欠⥳㼠砠㨠瀠㭢਍††敲畴湲砠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯⁴業⡸汦慯⁴ⱸ映潬瑡礠‬汦慯⁴⥡笠਍††⁡‽愨㰠〠〮⥦㼠〠〮⁦›㭡਍††⁡‽愨㸠ㄠ〮⥦㼠ㄠ〮⁦›㭡਍††敲畴湲⠠⥸⨠⠠⸱昰ⴠ⠠⥡
‫礨
‪愨㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠瑵搳江湩慥彲湩整灲昨潬瑡瘠ⰰ映潬瑡瘠ⰱ映潬瑡愠
ൻ †爠瑥牵ぶ⬠⠠ㅶⴠ瘠⤰⨠愠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯㍴氠瑵搳江湩慥彲湩整灲昨潬瑡″ぶ‬汦慯㍴瘠ⰱ映潬瑡愠
ൻ †映潬瑡″㭲਍††⹲⁸‽畬㍴彤楬敮牡楟瑮牥⡰ぶ砮‬ㅶ砮‬⥡഻ †爠礮㴠氠瑵搳江湩慥彲湩整灲瘨⸰ⱹ瘠⸱ⱹ愠㬩਍††⹲⁺‽畬㍴彤楬敮牡楟瑮牥⡰ぶ種‬ㅶ種‬⥡഻ †爠瑥牵㭲਍ൽഊ䌊䱏剏偓䍁彅商䍎椠瑮氠瑵搳灟敲彶摩⡸汦慯⁴⥸笠਍††敲畴湲⠠湩⥴㭸਍ൽഊ䌊䱏剏偓䍁彅商䍎椠瑮氠瑵搳湟慥彲摩⡸汦慯⁴⥸笠਍††敲畴湲⠠湩⥴砨⬠〠㔮⥦഻紊਍਍佃佌卒䅐䕃䙟乕⁃湩⁴畬㍴彤敮瑸楟硤昨潬瑡砠‬湩⁴楳敺
ൻ †椠瑮渠硥⁴‽畬㍴彤牰癥楟硤砨
‫㬱਍††敲畴湲⠠敮瑸㸠‽楳敺
‿楳敺ⴠㄠ㨠渠硥㭴਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡氠瑵搳灟敲畬⡴潣獮⁴汦慯⁴ⱳ挠湯瑳椠瑮椠硤‬潣獮⁴湩⁴楳敺ബ †挠湯瑳映潬瑡瀠敲畬浴湩㍛ⱝ挠湯瑳映潬瑡瀠敲畬獴慣敬㍛ⱝ挠湯瑳映潬瑡⨠彟敲瑳楲瑣彟瀠敲畬⥴笠਍††潣獮⁴汦慯⁴⁸‽汣浡⡰猨ⴠ瀠敲畬浴湩楛硤⥝⨠瀠敲畬獴慣敬楛硤ⱝ〠〮ⱦ⠠汦慯⥴猨穩⁥‭⤱㬩਍††潣獮⁴汦慯⁴っ㴠瀠敲畬孴摩⁸‪楳敺⬠氠瑵搳灟敲彶摩⡸⥸㭝਍††潣獮⁴汦慯⁴ㅣ㴠瀠敲畬孴摩⁸‪楳敺⬠氠瑵搳湟硥彴摩⡸ⱸ猠穩⥥㭝਍††敲畴湲氠瑵搳江湩慥彲湩整灲挨ⰰ挠ⰱ砠ⴠ氠瑵搳灟敲彶摩⡸⥸㬩਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤牰汥瑵挨湯瑳映潬瑡″湩‬潣獮⁴湩⁴楳敺ബ †挠湯瑳映潬瑡瀠敲畬浴湩㍛ⱝ挠湯瑳映潬瑡瀠敲畬獴慣敬㍛ⱝ挠湯瑳映潬瑡⨠彟敲瑳楲瑣彟瀠敲畬⥴笠਍††汦慯㍴漠瑵഻ †漠瑵砮㴠氠瑵搳灟敲畬⡴湩砮‬ⰰ猠穩ⱥ瀠敲畬浴湩‬牰汥瑵捳污ⱥ瀠敲畬⥴഻ †漠瑵礮㴠氠瑵搳灟敲畬⡴湩礮‬ⰱ猠穩ⱥ瀠敲畬浴湩‬牰汥瑵捳污ⱥ瀠敲畬⥴഻ †漠瑵種㴠氠瑵搳灟敲畬⡴湩種‬ⰲ猠穩ⱥ瀠敲畬浴湩‬牰汥瑵捳污ⱥ瀠敲畬⥴഻ †爠瑥牵畯㭴਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤敧彴慴汢⡥潣獮⁴啌噔䍅⨠彟敲瑳楲瑣彟氠瑵‬潣獮⁴湩⁴ⱸ挠湯瑳椠瑮礠‬潣獮⁴湩⁴ⱺ挠湯瑳椠瑮氠瑵楓敺ⰰ挠湯瑳椠瑮氠瑵楓敺㄰
ൻ †䰠呕䕖⁃慶‽畬孴⁸‪畬却穩づ‱‫⁹‪畬却穩づ⬠稠㭝਍††汦慯㍴漠瑵഻ †漠瑵砮㴠瘠污砮഻ †漠瑵礮㴠瘠污礮഻ †漠瑵種㴠瘠污種഻ †爠瑥牵畯㭴਍ൽഊ䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤湩整灲湟慥敲瑳昨潬瑡″湩‬潣獮⁴啌噔䍅⨠彟敲瑳楲瑣彟氠瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††敲畴湲氠瑵搳束瑥瑟扡敬氨瑵‬畬㍴彤敮牡楟硤椨⹮⥸‬畬㍴彤敮牡楟硤椨⹮⥹‬畬㍴彤敮牡楟硤椨⹮⥺‬畬却穩づ‬畬却穩づ⤱഻紊਍਍⼯迥莀›瑨灴㩳⼯湥眮歩灩摥慩漮杲眯歩⽩牔汩湩慥彲湩整灲汯瑡潩൮䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤湩整灲瑟楲楬敮牡昨潬瑡″湩‬潣獮⁴啌噔䍅⨠彟敲瑳楲瑣彟氠瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††潣獮⁴湩⁴へ㴠氠瑵搳灟敲彶摩⡸湩砮㬩਍††潣獮⁴湩⁴ㅸ㴠氠瑵搳湟硥彴摩⡸湩砮‬畬却穩づ㬩਍††潣獮⁴湩⁴べ㴠氠瑵搳灟敲彶摩⡸湩礮㬩਍††潣獮⁴湩⁴ㅹ㴠氠瑵搳湟硥彴摩⡸湩礮‬畬却穩づ㬩਍††潣獮⁴湩⁴ぺ㴠氠瑵搳灟敲彶摩⡸湩種㬩਍††潣獮⁴湩⁴ㅺ㴠氠瑵搳湟硥彴摩⡸湩種‬畬却穩づ㬩਍††潣獮⁴汦慯⁴捳污硥㴠椠⹮⁸‭へ഻ †挠湯瑳映潬瑡猠慣敬⁹‽湩礮ⴠ礠㬰਍††潣獮⁴汦慯⁴捳污穥㴠椠⹮⁺‭ぺ഻ †挠湯瑳映潬瑡″っ〰†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰰ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠〰‱㴠氠瑵搳束瑥瑟扡敬氨瑵‬へ‬べ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″っ〱†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰱ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠㄰‱㴠氠瑵搳束瑥瑟扡敬氨瑵‬へ‬ㅹ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″ㅣ〰†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰰ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠〱‱㴠氠瑵搳束瑥瑟扡敬氨瑵‬ㅸ‬べ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″ㅣ〱†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰱ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠ㄱ‱㴠氠瑵搳束瑥瑟扡敬氨瑵‬ㅸ‬ㅹ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″っ‰†‽畬㍴彤楬敮牡楟瑮牥⡰っ〰‬ㅣ〰‬捳污硥㬩਍††潣獮⁴汦慯㍴挠〱†㴠氠瑵搳江湩慥彲湩整灲挨㄰ⰰ挠ㄱⰰ猠慣敬⥸഻ †挠湯瑳映潬瑡″っ‱†‽畬㍴彤楬敮牡楟瑮牥⡰っ㄰‬ㅣ㄰‬捳污硥㬩਍††潣獮⁴汦慯㍴挠ㄱ†㴠氠瑵搳江湩慥彲湩整灲挨㄰ⰱ挠ㄱⰱ猠慣敬⥸഻ †挠湯瑳映潬瑡″っ††‽畬㍴彤楬敮牡楟瑮牥⡰っⰰ†ㅣⰰ†捳污祥㬩਍††潣獮⁴汦慯㍴挠‱†㴠氠瑵搳江湩慥彲湩整灲挨㄰‬挠ㄱ‬猠慣敬⥹഻ †挠湯瑳映潬瑡″⁣††‽畬㍴彤楬敮牡楟瑮牥⡰っ‬†ㅣ‬†捳污穥㬩਍††敲畴湲挠഻紊਍਍⼯迥莀›瑨灴⼺眯睷昮汩汭杩瑨氮摴甮⽫摰⽦桷瑩灥灡牥⽳䱆吭ⵌ乔〭㔰ⴷ潓瑦慷敲楌⹢摰൦䌊䱏剏偓䍁彅商䍎映潬瑡″畬㍴彤湩整灲瑟瑥慲敨牤污昨潬瑡″湩‬潣獮⁴啌噔䍅⨠彟敲瑳楲瑣彟氠瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††潣獮⁴湩⁴へ㴠氠瑵搳灟敲彶摩⡸湩砮㬩਍††潣獮⁴湩⁴ㅸ㴠氠瑵搳湟硥彴摩⡸湩砮‬畬却穩づ㬩਍††潣獮⁴湩⁴べ㴠氠瑵搳灟敲彶摩⡸湩礮㬩਍††潣獮⁴湩⁴ㅹ㴠氠瑵搳湟硥彴摩⡸湩礮‬畬却穩づ㬩਍††潣獮⁴湩⁴ぺ㴠氠瑵搳灟敲彶摩⡸湩種㬩਍††潣獮⁴湩⁴ㅺ㴠氠瑵搳湟硥彴摩⡸湩種‬畬却穩づ㬩਍††潣獮⁴汦慯⁴捳污硥㴠椠⹮⁸‭へ഻ †挠湯瑳映潬瑡猠慣敬⁹‽湩礮ⴠ礠㬰਍††潣獮⁴汦慯⁴捳污穥㴠椠⹮⁺‭ぺ഻ †映潬瑡猠慣敬ⰰ猠慣敬ⰱ猠慣敬㬲਍††湩⁴䅸‬䅹‬䅺‬䉸‬䉹‬䉺഻ †椠⁦猨慣敬⁸‾捳污祥
ൻ †††椠⁦猨慣敬⁹‾捳污穥
ൻ †††††猠慣敬‰‽捳污硥഻ †††††猠慣敬‱‽捳污祥഻ †††††猠慣敬′‽捳污穥഻ †††††砠⁁‽ㅸ※䅹㴠礠㬰稠⁁‽ぺ഻ †††††砠⁂‽ㅸ※䉹㴠礠㬱稠⁂‽ぺ഻ †††素攠獬⁥晩⠠捳污硥㸠猠慣敬⥺笠਍††††††捳污づ㴠猠慣敬㭸਍††††††捳污ㅥ㴠猠慣敬㭺਍††††††捳污㉥㴠猠慣敬㭹਍††††††䅸㴠砠㬱礠⁁‽べ※䅺㴠稠㬰਍††††††䉸㴠砠㬱礠⁂‽べ※䉺㴠稠㬱਍††††⁽汥敳笠਍††††††捳污づ㴠猠慣敬㭺਍††††††捳污ㅥ㴠猠慣敬㭸਍††††††捳污㉥㴠猠慣敬㭹਍††††††䅸㴠砠㬰礠⁁‽べ※䅺㴠稠㬱਍††††††䉸㴠砠㬱礠⁂‽べ※䉺㴠稠㬱਍††††ൽ †素攠獬⁥ൻ †††椠⁦猨慣敬⁺‾捳污祥
ൻ †††††猠慣敬‰‽捳污穥഻ †††††猠慣敬‱‽捳污祥഻ †††††猠慣敬′‽捳污硥഻ †††††砠⁁‽へ※䅹㴠礠㬰稠⁁‽ㅺ഻ †††††砠⁂‽へ※䉹㴠礠㬱稠⁂‽ㅺ഻ †††素攠獬⁥晩⠠捳污穥㸠猠慣敬⥸笠਍††††††捳污づ㴠猠慣敬㭹਍††††††捳污ㅥ㴠猠慣敬㭺਍††††††捳污㉥㴠猠慣敬㭸਍††††††䅸㴠砠㬰礠⁁‽ㅹ※䅺㴠稠㬰਍††††††䉸㴠砠㬰礠⁂‽ㅹ※䉺㴠稠㬱਍††††⁽汥敳笠਍††††††捳污づ㴠猠慣敬㭹਍††††††捳污ㅥ㴠猠慣敬㭸਍††††††捳污㉥㴠猠慣敬㭺਍††††††䅸㴠砠㬰礠⁁‽ㅹ※䅺㴠稠㬰਍††††††䉸㴠砠㬱礠⁂‽ㅹ※䉺㴠稠㬰਍††††ൽ †素਍††潣獮⁴汦慯㍴挠〰‰‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰰ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠ㄱ‱‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰱ稠ⰱ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠⁁†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⱁ礠ⱁ稠ⱁ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠⁂†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⱂ礠ⱂ稠ⱂ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯⁴猠‰†‽⸱昰†ⴠ猠慣敬㬰਍††潣獮⁴汦慯⁴猠‱†‽捳污づⴠ猠慣敬㬱਍††潣獮⁴汦慯⁴猠′†‽捳污ㅥⴠ猠慣敬㬲਍††潣獮⁴汦慯⁴猠″†‽捳污㉥഻ †映潬瑡″㭣਍††⹣⁸‽び⨠挠〰⸰⁸‫ㅳ⨠挠⹁⁸‫㉳⨠挠⹂⁸‫㍳⨠挠ㄱ⸱㭸਍††⹣⁹‽び⨠挠〰⸰⁹‫ㅳ⨠挠⹁⁹‫㉳⨠挠⹂⁹‫㍳⨠挠ㄱ⸱㭹਍††⹣⁺‽び⨠挠〰⸰⁺‫ㅳ⨠挠⹁⁺‫㉳⨠挠⹂⁺‫㍳⨠挠ㄱ⸱㭺਍††敲畴湲挠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯㍴氠瑵搳楟瑮牥彰祰慲業⡤汦慯㍴椠Ɱ挠湯瑳䰠呕䕖⁃氪瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††潣獮⁴湩⁴へ㴠氠瑵搳灟敲彶摩⡸湩砮㬩਍††潣獮⁴湩⁴ㅸ㴠氠瑵搳湟硥彴摩⡸湩砮‬畬却穩づ㬩਍††潣獮⁴湩⁴べ㴠氠瑵搳灟敲彶摩⡸湩礮㬩਍††潣獮⁴湩⁴ㅹ㴠氠瑵搳湟硥彴摩⡸湩礮‬畬却穩づ㬩਍††潣獮⁴湩⁴ぺ㴠氠瑵搳灟敲彶摩⡸湩種㬩਍††潣獮⁴湩⁴ㅺ㴠氠瑵搳湟硥彴摩⡸湩種‬畬却穩づ㬩਍††潣獮⁴汦慯⁴捳污硥㴠椠⹮⁸‭へ഻ †挠湯瑳映潬瑡猠慣敬⁹‽湩礮ⴠ礠㬰਍††潣獮⁴汦慯⁴捳污穥㴠椠⹮⁺‭ぺ഻ഊ †映潬瑡猠慣敬ⰰ猠慣敬ⰱ猠慣敬㬲਍††湩⁴䅸‬䅹‬䅺‬䉸‬䉹‬䉺‬䍸‬䍹‬䍺഻ഊ †椠⁦猨慣敬⁹‾捳污硥☠…捳污穥㸠猠慣敬⥸笠਍††††䅸㴠砠㬰礠⁁‽べ※䅺㴠稠㬱਍††††䉸㴠砠㬰礠⁂‽ㅹ※䉺㴠稠㬰਍††††䍸㴠砠㬰礠⁃‽ㅹ※䍺㴠稠㬱਍††††捳污づ㴠猠慣敬㭹਍††††捳污ㅥ㴠猠慣敬㭺਍††††捳污㉥㴠猠慣敬㭸਍††⁽汥敳椠⁦猨慣敬⁸‾捳污祥☠…捳污穥㸠猠慣敬⥹笠਍††††䅸㴠砠㬰礠⁁‽べ※䅺㴠稠㬱਍††††䉸㴠砠㬱礠⁂‽べ※䉺㴠稠㬰਍††††䍸㴠砠㬱礠⁃‽べ※䍺㴠稠㬱਍††††捳污づ㴠猠慣敬㭸਍††††捳污ㅥ㴠猠慣敬㭺਍††††捳污㉥㴠猠慣敬㭹਍††⁽汥敳笠਍††††䅸㴠砠㬰礠⁁‽ㅹ※䅺㴠稠㬰਍††††䉸㴠砠㬱礠⁂‽べ※䉺㴠稠㬰਍††††䍸㴠砠㬱礠⁃‽ㅹ※䍺㴠稠㬰਍††††捳污づ㴠猠慣敬㭸਍††††捳污ㅥ㴠猠慣敬㭹਍††††捳污㉥㴠猠慣敬㭺਍††ൽ †挠湯瑳映潬瑡″っ〰㴠氠瑵搳束瑥瑟扡敬氨瑵‬へ‬べ‬ぺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″ㅣㄱ㴠氠瑵搳束瑥瑟扡敬氨瑵‬ㅸ‬ㅹ‬ㅺ‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″䅣†㴠氠瑵搳束瑥瑟扡敬氨瑵‬䅸‬䅹‬䅺‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″䉣†㴠氠瑵搳束瑥瑟扡敬氨瑵‬䉸‬䉹‬䉺‬畬却穩づ‬畬却穩づ⤱഻ †挠湯瑳映潬瑡″䍣†㴠氠瑵搳束瑥瑟扡敬氨瑵‬䍸‬䍹‬䍺‬畬却穩づ‬畬却穩づ⤱഻ †映潬瑡″㭣਍††⹣⁸‽っ〰砮⬠⠠䉣砮ⴠ挠〰⸰⥸⨠猠慣敬‰‫挨ㄱ⸱⁸‭䍣砮
‪捳污㉥⬠⠠䅣砮ⴠ挠〰⸰⥸⨠猠慣敬‱‫挨⹃⁸‭䅣砮ⴠ挠⹂⁸‫っ〰砮
‪捳污づ⨠猠慣敬㬱਍††⹣⁹‽っ〰礮⬠⠠䉣礮ⴠ挠〰⸰⥹⨠猠慣敬‰‫挨ㄱ⸱⁹‭䍣礮
‪捳污㉥⬠⠠䅣礮ⴠ挠〰⸰⥹⨠猠慣敬‱‫挨⹃⁹‭䅣礮ⴠ挠⹂⁹‫っ〰礮
‪捳污づ⨠猠慣敬㬱਍††⹣⁺‽っ〰種⬠⠠䉣種ⴠ挠〰⸰⥺⨠猠慣敬‰‫挨ㄱ⸱⁺‭䍣種
‪捳污㉥⬠⠠䅣種ⴠ挠〰⸰⥺⨠猠慣敬‱‫挨⹃⁺‭䅣種ⴠ挠⹂⁺‫っ〰種
‪捳污づ⨠猠慣敬㬱਍††敲畴湲挠഻紊਍਍佃佌卒䅐䕃䙟乕⁃汦慯㍴氠瑵搳楟瑮牥彰牰獩⡭汦慯㍴椠Ɱ挠湯瑳䰠呕䕖⁃氪瑵‬潣獮⁴湩⁴畬却穩づ‬潣獮⁴湩⁴畬却穩づ⤱笠਍††潣獮⁴湩⁴へ㴠氠瑵搳灟敲彶摩⡸湩砮㬩਍††潣獮⁴湩⁴ㅸ㴠氠瑵搳湟硥彴摩⡸湩砮‬畬却穩づ㬩਍††潣獮⁴湩⁴べ㴠氠瑵搳灟敲彶摩⡸湩礮㬩਍††潣獮⁴湩⁴ㅹ㴠氠瑵搳湟硥彴摩⡸湩礮‬畬却穩づ㬩਍††潣獮⁴湩⁴ぺ㴠氠瑵搳灟敲彶摩⡸湩種㬩਍††潣獮⁴湩⁴ㅺ㴠氠瑵搳湟硥彴摩⡸湩種‬畬却穩づ㬩਍††潣獮⁴汦慯⁴捳污硥㴠椠⹮⁸‭へ഻ †挠湯瑳映潬瑡猠慣敬⁹‽湩礮ⴠ礠㬰਍††潣獮⁴汦慯⁴捳污穥㴠椠⹮⁺‭ぺ഻ †映潬瑡猠慣敬ⰰ猠慣敬㬲਍††湩⁴䅸‬䅹‬䅺‬䉸‬䉹‬䉺഻ഊ †椠⁦猨慣敬⁺‾捳污硥
ൻ †††猠慣敬‰‽捳污穥഻ †††猠慣敬′‽捳污硥഻ †††砠⁁‽へ※䅹㴠礠㬱稠⁁‽ㅺ഻ †††砠⁂‽へ※䉹㴠礠㬰稠⁂‽ㅺ഻ †素攠獬⁥ൻ †††猠慣敬‰‽捳污硥഻ †††猠慣敬′‽捳污穥഻ †††砠⁁‽ㅸ※䅹㴠礠㬱稠⁁‽ぺ഻ †††砠⁂‽ㅸ※䉹㴠礠㬰稠⁂‽ぺ഻ †素਍††潣獮⁴汦慯㍴挠〰‰‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰰ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠㄰‰‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰰ礠ⰱ稠ⰰ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠〱‱‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰰ稠ⰱ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠ㄱ‱‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⰱ礠ⰱ稠ⰱ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠⁁†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⱁ礠ⱁ稠ⱁ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††潣獮⁴汦慯㍴挠⁂†‽畬㍴彤敧彴慴汢⡥畬ⱴ砠ⱂ礠ⱂ稠ⱂ氠瑵楓敺ⰰ氠瑵楓敺㄰㬩਍††汦慯㍴挠഻ †挠砮㴠挠〰⸰⁸‫挨⹂⁸‭っ〰砮
‪捳污づ⬠⠠ㅣ㄰砮ⴠ挠⹂⥸⨠猠慣敬′‫挨㄰⸰⁸‭っ〰砮
‪捳污祥⬠⠠っ〰砮ⴠ挠㄰⸰⁸‭䉣砮⬠挠⹁⥸⨠猠慣敬‰‪捳污祥⬠⠠䉣砮ⴠ挠⹁⁸‭ㅣ㄰砮⬠挠ㄱ⸱⥸⨠猠慣敬′‪捳污祥഻ †挠礮㴠挠〰⸰⁹‫挨⹂⁹‭っ〰礮
‪捳污づ⬠⠠ㅣ㄰礮ⴠ挠⹂⥹⨠猠慣敬′‫挨㄰⸰⁹‭っ〰礮
‪捳污祥⬠⠠っ〰礮ⴠ挠㄰⸰⁹‭䉣礮⬠挠⹁⥹⨠猠慣敬‰‪捳污祥⬠⠠䉣礮ⴠ挠⹁⁹‭ㅣ㄰礮⬠挠ㄱ⸱⥹⨠猠慣敬′‪捳污祥഻ †挠種㴠挠〰⸰⁺‫挨⹂⁺‭っ〰種
‪捳污づ⬠⠠ㅣ㄰種ⴠ挠⹂⥺⨠猠慣敬′‫挨㄰⸰⁺‭っ〰種
‪捳污祥⬠⠠っ〰種ⴠ挠㄰⸰⁺‭䉣種⬠挠⹁⥺⨠猠慣敬‰‪捳污祥⬠⠠䉣種ⴠ挠⹁⁺‭ㅣ㄰種⬠挠ㄱ⸱⥺⨠猠慣敬′‪捳污祥഻ †爠瑥牵㭣਍ൽഊ猊牴捵⁴䝒䍙汯牯灳捡䑥癥慐慲獭笠਍††湩⁴畬彴景獦瑥഻ †椠瑮瀠敲畬彴景獦瑥഻ †⼠ 믤趙臣澯晦敳꺁ꓧ馁뷤꺽臣螃菣뾂਍††⼯螃菣뾂臣随苣몇臣릖돦꾁룤風臣ꊖ闦銂迥ꞅ਍㭽਍਍汦慯⁴未瑥敄偶牡浡偳敲畬⡴潶摩⨠彟敲瑳楲瑣彟瀠牴
ൻ †爠瑥牵昨潬瑡⨠⠩挨慨⁲⤪瑰⁲‫⠨䝒䍙汯牯灳捡䑥癥慐慲獭⨠瀩牴⴩瀾敲畬彴景獦瑥㬩਍ൽഊ挊湯瑳映潬瑡⨠敧䑴癥慐慲獭牐汥瑵挨湯瑳瘠楯⁤弪牟獥牴捩彴 瑰⥲笠਍††敲畴湲⠠潣獮⁴汦慯⁴⤪⠨潣獮⁴档牡⨠瀩牴⬠⠠刨奇潃潬獲慰散敄偶牡浡⁳⤪瑰⥲㸭牰汥瑵潟晦敳⥴഻紊਍਍啌噔䍅⨠敧䑴癥慐慲獭界⡴潶摩⨠彟敲瑳楲瑣彟瀠牴
ൻ †爠瑥牵䰨呕䕖⁃⤪⠨档牡⨠瀩牴⬠⠠刨奇潃潬獲慰散敄偶牡浡⁳⤪瑰⥲㸭畬彴景獦瑥㬩਍ൽഊ挊湯瑳䰠呕䕖⁃未瑥敄偶牡浡䱳瑵挨湯瑳瘠楯⁤弪牟獥牴捩彴 瑰⥲笠਍††敲畴湲⠠潣獮⁴啌噔䍅⨠⠩挨湯瑳挠慨⁲⤪瑰⁲‫⠨䝒䍙汯牯灳捡䑥癥慐慲獭⨠瀩牴⴩氾瑵潟晦敳⥴഻紊਍ਊ椣据畬敤㰠瑳楤瑮栮ਾ弊摟癥捩彥 彟湩楬敮彟昊潬瑡″潣癮牥彴潣潬獲慰散损獵潴⡭汦慯㍴砠‬潣獮⁴䝒䍙汯牯灳捡䑥癥慐慲獭⨠彟敲瑳楲瑣彟瀠牡浡⥳笠ਊ††੻††††汦慯⁴孭崳㍛⁝‽੻††††††⁻渭湡椨摮昩‬渭湡椨摮昩‬渭湡椨摮昩素ਬ††††††⁻渭湡椨摮昩‬渭湡椨摮昩‬渭湡椨摮昩素ਬ††††††⁻渭湡椨摮昩‬渭湡椨摮昩‬渭湡椨摮昩素 †††素਻††††⁸‽慭牴硩浟汵洨‬⥸਻††੽ †笠⼠氯湩慥⵲朾浡慭 †††挠湯瑳映潬瑡瀠敲獟慣敬⁲㴠ㄠ〮〰〰〰〰〰〰〰攰〭昲਻††††潣獮⁴汦慯⁴潰瑳獟慣敬⁲‽⸱〰〰〰〰〰〰〰〰⭥〰㭦 †††砠砮㴠瀠獯彴捳污牥⨠猠彴〲㐸楟癮牥敳敟瑯⡦砠砮⨠瀠敲獟慣敬⁲㬩 †††砠礮㴠瀠獯彴捳污牥⨠猠彴〲㐸楟癮牥敳敟瑯⡦砠礮⨠瀠敲獟慣敬⁲㬩 †††砠種㴠瀠獯彴捳污牥⨠猠彴〲㐸楟癮牥敳敟瑯⡦砠種⨠瀠敲獟慣敬⁲㬩 †素ਊ††੻††††汦慯⁴孭崳㍛⁝‽੻††††††⁻⸲㈶㤶㤹㤹㤹㤹㤹㤹ⵥ㄰ⱦ㘠㜮㤷㤹㤹㤹㤹㤹㤹攴〭昱‬⸵㈹㤹㤹㤹㤹㤹㤹㤹ⵥ㈰⁦ⱽ †††††笠ⴠ⸱㤳㌶〰㈶ㄷ㈹ㄵ㌶ⵥ㄰ⱦⴠ⸳〶㘳㤹㜳㠲㜰㠴㐳ⵥ㄰ⱦ㔠〮〰〰〰〰〰〰〰攰〭昱素ਬ††††††⁻⸵〰〰〰〰〰〰〰〰ⵥ㄰ⱦⴠ⸴㤵㠷㜵㐰㤵㠷㜵〰ⵥ㄰ⱦⴠ⸴㈰㐱㤲㐵㈰㐱㤲㔵ⵥ㈰⁦੽††††㭽 †††砠㴠洠瑡楲彸畭⡬Ɑ砠㬩 †素ਊ††⁻⼯慲杮⁥汦慯⵴椾瑮 †††挠湯瑳映潬瑡爠湡敧祟†㴠㔠㘮㘰〴〰〰〰〰〰攰〫昴਻††††潣獮⁴汦慯⁴景獦瑥祟†‽⸴㤰〶〰〰〰〰〰〰⭥㌰㭦 †††挠湯瑳映潬瑡爠湡敧畟⁶㴠㔠㜮㐳〴〰〰〰〰〰攰〫昴਻††††潣獮⁴汦慯⁴景獦瑥畟⁶‽⸳㜲㠶〰〰〰〰〰〰⭥㐰㭦 †††砠砮㴠砠砮⨠爠湡敧祟†‫景獦瑥祟਻††††⹸⁹‽⹸⁹‪慲杮彥癵⬠漠晦敳彴癵਻††††⹸⁺‽⹸⁺‪慲杮彥癵⬠漠晦敳彴癵਻††੽ †爠瑥牵㭸紊ਊ瑳瑡捩挠湯瑳椠瑮倠塉偟剅呟剈䅅⁄‽㬴ਊ整灭慬整琼灹湥浡⁥㹔张摟癥捩彥 彟湩楬敮彟吠琠偯硩昨潬瑡砠
⁻敲畴湲⠠⥔汣浡⡰砨
‫⸰昵‬⸰昰‬ㄨ㰼猨穩潥⡦⥔㠪⤩ⴠ〠㔮⥦※੽整灭慬整㸼张摟癥捩彥 彟湩楬敮彟映潬瑡†潴楐㱸汦慯㹴⠠汦慯⁴⥸笠爠瑥牵㭸素ਊ整灭慬整琼灹湥浡⁥祔数畏ⱴ琠灹湥浡⁥祔数湉ਾ彟汧扯污彟瘠楯⁤敫湲汥晟汩整⡲ †甠湩㡴瑟⨠彟敲瑳楲瑣彟瀠獄奴‬極瑮弸⁴弪牟獥牴捩彴 䑰瑳ⱕ甠湩㡴瑟⨠彟敲瑳楲瑣彟瀠獄噴ਬ††潣獮⁴湩⁴獤側瑩档‬潣獮⁴湩⁴獤坴摩桴‬潣獮⁴湩⁴獤䡴楥桧ⱴ †挠湯瑳甠湩㡴瑟⨠彟敲瑳楲瑣彟瀠牓奣‬潣獮⁴極瑮弸⁴弪牟獥牴捩彴 印捲ⱕ挠湯瑳甠湩㡴瑟⨠彟敲瑳楲瑣彟瀠牓噣ਬ††潣獮⁴湩⁴牳偣瑩档‬潣獮⁴湩⁴牳坣摩桴‬潣獮⁴湩⁴牳䡣楥桧ⱴ戠潯牳䥣瑮牥慬散Ɽ †挠湯瑳删奇潃潬獲慰散敄偶牡浡⁳弪牟獥牴捩彴 慰慲獭
੻††潣獮⁴湩⁴硩㴠⠠汢捯䥫硤砮⨠戠潬正楄⹭⁸‫桴敲摡摉⹸⥸⨠倠塉偟剅呟剈䅅㭄 †挠湯瑳椠瑮椠⁹‽戠潬正摉⹸⁹‪汢捯䑫浩礮⬠琠牨慥䥤硤礮਻ †猠牴捵⁴彟污杩彮⡟楳敺景吨灹䥥⥮⨠㐠
祔数湉‴੻††††祔数湉砠‬ⱹ稠‬㭷 †素਻ †猠牴捵⁴彟污杩彮⡟楳敺景吨灹佥瑵
‪⤴吠灹佥瑵‴੻††††祔数畏⁴ⱸ礠‬ⱺ眠਻††㭽ਊ††晩⠠硩㰠搠瑳楗瑤⁨☦椠⁹‼獤䡴楥桧⥴笠ਊ††††祔数湉‴牳奣㴠⨠吨灹䥥㑮⨠⠩印捲⁙‫祩⨠猠捲楐捴⁨‫硩⨠猠穩潥⡦祔数湉⤩਻††††祔数湉‴牳啣㴠⨠吨灹䥥㑮⨠⠩印捲⁕‫祩⨠猠捲楐捴⁨‫硩⨠猠穩潥⡦祔数湉⤩਻††††祔数湉‴牳噣㴠⨠吨灹䥥㑮⨠⠩印捲⁖‫祩⨠猠捲楐捴⁨‫硩⨠猠穩潥⡦祔数湉⤩਻ †††映潬瑡″楰へ㴠洠歡彥汦慯㍴⠨汦慯⥴牳奣砮‬昨潬瑡猩捲⹕ⱸ⠠汦慯⥴牳噣砮㬩 †††映潬瑡″楰ㅸ㴠洠歡彥汦慯㍴⠨汦慯⥴牳奣礮‬昨潬瑡猩捲⹕ⱹ⠠汦慯⥴牳噣礮㬩 †††映潬瑡″楰㉸㴠洠歡彥汦慯㍴⠨汦慯⥴牳奣種‬昨潬瑡猩捲⹕ⱺ⠠汦慯⥴牳噣種㬩 †††映潬瑡″楰㍸㴠洠歡彥汦慯㍴⠨汦慯⥴牳奣眮‬昨潬瑡猩捲⹕ⱷ⠠汦慯⥴牳噣眮㬩ਊ††††楰へ㴠挠湯敶瑲损汯牯灳捡彥畣瑳浯瀨硩ⰰ瀠牡浡⥳਻††††楰ㅸ㴠挠湯敶瑲损汯牯灳捡彥畣瑳浯瀨硩ⰱ瀠牡浡⥳਻††††楰㉸㴠挠湯敶瑲损汯牯灳捡彥畣瑳浯瀨硩ⰲ瀠牡浡⥳਻††††楰㍸㴠挠湯敶瑲损汯牯灳捡彥畣瑳浯瀨硩ⰳ瀠牡浡⥳਻ †††吠灹佥瑵‴獤奴‬獤啴‬獤噴਻††††獤奴砮㴠琠偯硩吼灹佥瑵⠾楰へ砮㬩搠瑳⹕⁸‽潴楐㱸祔数畏㹴瀨硩⸰⥹※獤噴砮㴠琠偯硩吼灹佥瑵⠾楰へ種㬩 †††搠瑳⹙⁹‽潴楐㱸祔数畏㹴瀨硩⸱⥸※獤啴礮㴠琠偯硩吼灹佥瑵⠾楰ㅸ礮㬩搠瑳⹖⁹‽潴楐㱸祔数畏㹴瀨硩⸱⥺਻††††獤奴種㴠琠偯硩吼灹佥瑵⠾楰㉸砮㬩搠瑳⹕⁺‽潴楐㱸祔数畏㹴瀨硩⸲⥹※獤噴種㴠琠偯硩吼灹佥瑵⠾楰㉸種㬩 †††搠瑳⹙⁷‽潴楐㱸祔数畏㹴瀨硩⸳⥸※獤啴眮㴠琠偯硩吼灹佥瑵⠾楰㍸礮㬩搠瑳⹖⁷‽潴楐㱸祔数畏㹴瀨硩⸳⥺਻ †††吠灹佥瑵‴瀪牴獄奴㴠⠠祔数畏㑴⨠⠩䑰瑳⁙‫祩⨠搠瑳楐捴⁨‫硩⨠猠穩潥⡦祔数畏⥴㬩 †††吠灹佥瑵‴瀪牴獄啴㴠⠠祔数畏㑴⨠⠩䑰瑳⁕‫祩⨠搠瑳楐捴⁨‫硩⨠猠穩潥⡦祔数畏⥴㬩 †††吠灹佥瑵‴瀪牴獄噴㴠⠠祔数畏㑴⨠⠩䑰瑳⁖‫祩⨠搠瑳楐捴⁨‫硩⨠猠穩潥⡦祔数畏⥴㬩ਊ††††瑰䑲瑳孙崰㴠搠瑳㭙 †††瀠牴獄啴せ⁝‽獤啴਻††††瑰䑲瑳孖崰㴠搠瑳㭖 †素紊਻Ȁ colorspace_conv: failed to build program source. colorspace_conv: Runtime compilation failed colorspace_conv: --------------------------------------- colorspace_conv: --- Source of colorspace_conv --- colorspace_conv: --------------------------------------- colorspace_conv: 1 #ifndef _JITIFY_INCLUDE_GUARD_3F6B24FAF8F3CEB7 colorspace_conv: 2 #define _JITIFY_INCLUDE_GUARD_3F6B24FAF8F3CEB7 colorspace_conv: 3 #ifdef __CUDACC_RTC__ colorspace_conv: 4 #define COLORSPACE_FUNC __device__ __inline__ colorspace_conv: 5 #else colorspace_conv: 6 #define COLORSPACE_FUNC static colorspace_conv: 7 #include colorspace_conv: 8 #include colorspace_conv: 9 _Pragma("warning") (push) colorspace_conv: 10 _Pragma("warning") (disable: 4819) colorspace_conv: 11 #include colorspace_conv: 12 _Pragma("warning") (pop) colorspace_conv: 13 #endif colorspace_conv: 14 colorspace_conv: 15 typedef float4 LUTVEC; colorspace_conv: 16 colorspace_conv: 17 #ifndef clamp colorspace_conv: 18 #define clamp(x, low, high) (((x) <= (high)) ? (((x) >= (low)) ? (x) : (low)) : (high)) colorspace_conv: 19 #endif colorspace_conv: 20 colorspace_conv: 21 colorspace_conv: 22 const float REC709_ALPHA = 1.09929682680944f; colorspace_conv: 23 const float REC709_BETA = 0.018053968510807f; colorspace_conv: 24 colorspace_conv: 25 const float SMPTE_240M_ALPHA = 1.111572195921731f; colorspace_conv: 26 const float SMPTE_240M_BETA = 0.022821585529445f; colorspace_conv: 27 colorspace_conv: 28 // Adjusted for continuity of first derivative. colorspace_conv: 29 const float SRGB_ALPHA = 1.055010718947587f; colorspace_conv: 30 const float SRGB_BETA = 0.003041282560128f; colorspace_conv: 31 colorspace_conv: 32 const float ST2084_M1 = 0.1593017578125f; colorspace_conv: 33 const float ST2084_M2 = 78.84375f; colorspace_conv: 34 const float ST2084_C1 = 0.8359375f; colorspace_conv: 35 const float ST2084_C2 = 18.8515625f; colorspace_conv: 36 const float ST2084_C3 = 18.6875f; colorspace_conv: 37 colorspace_conv: 38 const float ARIB_B67_A = 0.17883277f; colorspace_conv: 39 const float ARIB_B67_B = 0.28466892f; colorspace_conv: 40 const float ARIB_B67_C = 0.55991073f; colorspace_conv: 41 colorspace_conv: 42 const float FLOAT_EPS = 1.175494351e-38f; colorspace_conv: 43 colorspace_conv: 44 const float MP_REF_WHITE = 203.0f; colorspace_conv: 45 const float MP_REF_WHITE_HLG = 3.17955f; colorspace_conv: 46 colorspace_conv: 47 // Common constants for SMPTE ST.2084 (HDR) colorspace_conv: 48 const float PQ_M1 = 2610.0f / 4096.0f * 1.0f / 4.0f; colorspace_conv: 49 const float PQ_M2 = 2523.0f / 4096.0f * 128.0f; colorspace_conv: 50 const float PQ_C1 = 3424.0f / 4096.0f; colorspace_conv: 51 const float PQ_C2 = 2413.0f / 4096.0f * 32.0f; colorspace_conv: 52 const float PQ_C3 = 2392.0f / 4096.0f * 32.0f; colorspace_conv: 53 colorspace_conv: 54 // Chosen for compatibility with higher precision REC709_ALPHA/REC709_BETA. colorspace_conv: 55 // See: ITU-R BT.2390-2 5.3.1 colorspace_conv: 56 const float ST2084_OOTF_SCALE = 59.49080238715383f; colorspace_conv: 57 colorspace_conv: 58 COLORSPACE_FUNC float rec_709_oetf(float x) { colorspace_conv: 59 if (x < REC709_BETA) colorspace_conv: 60 x = x * 4.5f; colorspace_conv: 61 else colorspace_conv: 62 x = REC709_ALPHA * powf(x, 0.45f) - (REC709_ALPHA - 1.0f); colorspace_conv: 63 colorspace_conv: 64 return x; colorspace_conv: 65 } colorspace_conv: 66 colorspace_conv: 67 COLORSPACE_FUNC float rec_709_inverse_oetf(float x) { colorspace_conv: 68 if (x < 4.5f * REC709_BETA) colorspace_conv: 69 x = x / 4.5f; colorspace_conv: 70 else colorspace_conv: 71 x = powf((x + (REC709_ALPHA - 1.0f)) / REC709_ALPHA, 1.0f / 0.45f); colorspace_conv: 72 colorspace_conv: 73 return x; colorspace_conv: 74 } colorspace_conv: 75 colorspace_conv: 76 // Ignore the BT.1886 provisions for limited contrast and assume an ideal CRT. colorspace_conv: 77 COLORSPACE_FUNC float rec_1886_eotf(float x) { colorspace_conv: 78 return x < 0.0f ? 0.0f : powf(x, 2.4f); colorspace_conv: 79 } colorspace_conv: 80 colorspace_conv: 81 COLORSPACE_FUNC float rec_1886_inverse_eotf(float x) { colorspace_conv: 82 return x < 0.0f ? 0.0f : powf(x, 1.0f / 2.4f); colorspace_conv: 83 } colorspace_conv: 84 colorspace_conv: 85 COLORSPACE_FUNC float ootf_1_2(float x) { colorspace_conv: 86 return x < 0.0f ? x : powf(x, 1.2f); colorspace_conv: 87 } colorspace_conv: 88 colorspace_conv: 89 COLORSPACE_FUNC float inverse_ootf_1_2(float x) { colorspace_conv: 90 return x < 0.0f ? x : powf(x, 1.0f / 1.2f); colorspace_conv: 91 } colorspace_conv: 92 colorspace_conv: 93 COLORSPACE_FUNC float ootf_st2084(float x) { colorspace_conv: 94 return rec_1886_eotf(rec_709_oetf(x * ST2084_OOTF_SCALE)) / 100.0f; colorspace_conv: 95 } colorspace_conv: 96 colorspace_conv: 97 COLORSPACE_FUNC float inverse_ootf_st2084(float x) { colorspace_conv: 98 return rec_709_inverse_oetf(rec_1886_inverse_eotf(x * 100.0f)) / ST2084_OOTF_SCALE; colorspace_conv: 99 } colorspace_conv: 100 colorspace_conv: 101 COLORSPACE_FUNC float log100_oetf(float x) { colorspace_conv: 102 return x <= 0.01f ? 0.0f : 1.0f + log10f(x) * (1.0f / 2.0f); colorspace_conv: 103 } colorspace_conv: 104 colorspace_conv: 105 COLORSPACE_FUNC float log100_inverse_oetf(float x) { colorspace_conv: 106 return x <= 0.0f ? 0.01f : powf(10.0f, 2 * (x - 1.0f)); colorspace_conv: 107 } colorspace_conv: 108 colorspace_conv: 109 COLORSPACE_FUNC float log316_oetf(float x) { colorspace_conv: 110 return x <= 0.00316227766f ? 0.0f : 1.0f + log10f(x) * (1.0f / 2.5f); colorspace_conv: 111 } colorspace_conv: 112 colorspace_conv: 113 COLORSPACE_FUNC float log316_inverse_oetf(float x) { colorspace_conv: 114 return x <= 0.0f ? 0.00316227766f : powf(10.0f, 2.5f * (x - 1.0f)); colorspace_conv: 115 } colorspace_conv: 116 colorspace_conv: 117 COLORSPACE_FUNC float rec_470m_oetf(float x) { colorspace_conv: 118 return x < 0.0f ? 0.0f : powf(x, 2.2f); colorspace_conv: 119 } colorspace_conv: 120 colorspace_conv: 121 COLORSPACE_FUNC float rec_470m_inverse_oetf(float x) { colorspace_conv: 122 return x < 0.0f ? 0.0f : powf(x, 1.0f / 2.2f); colorspace_conv: 123 } colorspace_conv: 124 colorspace_conv: 125 COLORSPACE_FUNC float rec_470bg_oetf(float x) { colorspace_conv: 126 return x < 0.0f ? 0.0f : powf(x, 2.8f); colorspace_conv: 127 } colorspace_conv: 128 colorspace_conv: 129 COLORSPACE_FUNC float rec_470bg_inverse_oetf(float x) { colorspace_conv: 130 return x < 0.0f ? 0.0f : powf(x, 1.0f / 2.8f); colorspace_conv: 131 } colorspace_conv: 132 colorspace_conv: 133 COLORSPACE_FUNC float smpte_240m_oetf(float x) { colorspace_conv: 134 if (x < 4.0f * SMPTE_240M_BETA) colorspace_conv: 135 x = x * (1.0f / 4.0f); colorspace_conv: 136 else colorspace_conv: 137 x = powf((x + (SMPTE_240M_ALPHA - 1.0f)) / SMPTE_240M_ALPHA, 1.0f / 0.45f); colorspace_conv: 138 colorspace_conv: 139 return x; colorspace_conv: 140 } colorspace_conv: 141 colorspace_conv: 142 COLORSPACE_FUNC float smpte_240m_inverse_oetf(float x) { colorspace_conv: 143 if (x < SMPTE_240M_BETA) colorspace_conv: 144 x = x * 4.0f; colorspace_conv: 145 else colorspace_conv: 146 x = SMPTE_240M_ALPHA * powf(x, 0.45f) - (SMPTE_240M_ALPHA - 1.0f); colorspace_conv: 147 colorspace_conv: 148 return x; colorspace_conv: 149 } colorspace_conv: 150 colorspace_conv: 151 COLORSPACE_FUNC float xvycc_oetf(float x) { colorspace_conv: 152 return copysignf(rec_709_oetf(fabsf(x)), x); colorspace_conv: 153 } colorspace_conv: 154 colorspace_conv: 155 float xvycc_inverse_oetf(float x) { colorspace_conv: 156 return copysignf(rec_709_inverse_oetf(fabsf(x)), x); colorspace_conv: 157 } colorspace_conv: 158 colorspace_conv: 159 COLORSPACE_FUNC float arib_b67_oetf(float x) { colorspace_conv: 160 // Prevent negative pixels from yielding NAN. colorspace_conv: 161 x = fmaxf(x, 0.0f); colorspace_conv: 162 colorspace_conv: 163 if (x <= (1.0f / 12.0f)) colorspace_conv: 164 x = sqrtf(3.0f * x); colorspace_conv: 165 else colorspace_conv: 166 x = ARIB_B67_A * logf(12.0f * x - ARIB_B67_B) + ARIB_B67_C; colorspace_conv: 167 colorspace_conv: 168 return x; colorspace_conv: 169 } colorspace_conv: 170 colorspace_conv: 171 COLORSPACE_FUNC float arib_b67_inverse_oetf(float x) { colorspace_conv: 172 // Prevent negative pixels expanding into positive values. colorspace_conv: 173 x = fmaxf(x, 0.0f); colorspace_conv: 174 colorspace_conv: 175 if (x <= 0.5f) colorspace_conv: 176 x = (x * x) * (1.0f / 3.0f); colorspace_conv: 177 else colorspace_conv: 178 x = (expf((x - ARIB_B67_C) / ARIB_B67_A) + ARIB_B67_B) * (1.0f / 12.0f); colorspace_conv: 179 colorspace_conv: 180 return x; colorspace_conv: 181 } colorspace_conv: 182 colorspace_conv: 183 COLORSPACE_FUNC float srgb_eotf(float x) { colorspace_conv: 184 if (x < 12.92f * SRGB_BETA) colorspace_conv: 185 x *= (1.0f / 12.92f); colorspace_conv: 186 else colorspace_conv: 187 x = powf((x + (SRGB_ALPHA - 1.0f)) * (1.0f / SRGB_ALPHA), 2.4f); colorspace_conv: 188 colorspace_conv: 189 return x; colorspace_conv: 190 } colorspace_conv: 191 colorspace_conv: 192 COLORSPACE_FUNC float srgb_inverse_eotf(float x) { colorspace_conv: 193 if (x < SRGB_BETA) colorspace_conv: 194 x = x * 12.92f; colorspace_conv: 195 else colorspace_conv: 196 x = SRGB_ALPHA * powf(x, 1.0f / 2.4f) - (SRGB_ALPHA - 1.0f); colorspace_conv: 197 colorspace_conv: 198 return x; colorspace_conv: 199 } colorspace_conv: 200 colorspace_conv: 201 // Handle values in the range [0.0-1.0] such that they match a legacy CRT. colorspace_conv: 202 COLORSPACE_FUNC float xvycc_eotf(float x) { colorspace_conv: 203 if (x < 0.0f || x > 1.0f) colorspace_conv: 204 return copysignf(rec_709_inverse_oetf(fabsf(x)), x); colorspace_conv: 205 else colorspace_conv: 206 return copysignf(rec_1886_eotf(fabsf(x)), x); colorspace_conv: 207 } colorspace_conv: 208 colorspace_conv: 209 COLORSPACE_FUNC float xvycc_inverse_eotf(float x) { colorspace_conv: 210 if (x < 0.0f || x > 1.0f) colorspace_conv: 211 return copysignf(rec_709_oetf(fabsf(x)), x); colorspace_conv: 212 else colorspace_conv: 213 return copysignf(rec_1886_inverse_eotf(fabsf(x)), x); colorspace_conv: 214 } colorspace_conv: 215 colorspace_conv: 216 //pq_space_to_linear colorspace_conv: 217 COLORSPACE_FUNC float st_2084_eotf(float x) { colorspace_conv: 218 // Filter negative values to avoid NAN. colorspace_conv: 219 if (x > 0.0f) { colorspace_conv: 220 float xpow = powf(x, 1.0f / ST2084_M2); colorspace_conv: 221 float num = fmaxf(xpow - ST2084_C1, 0.0f); colorspace_conv: 222 float den = fmaxf(ST2084_C2 - ST2084_C3 * xpow, FLOAT_EPS); colorspace_conv: 223 x = powf(num / den, 1.0f / ST2084_M1); colorspace_conv: 224 } else { colorspace_conv: 225 x = 0.0f; colorspace_conv: 226 } colorspace_conv: 227 colorspace_conv: 228 return x; colorspace_conv: 229 } colorspace_conv: 230 colorspace_conv: 231 //linear_to_pq_space colorspace_conv: 232 COLORSPACE_FUNC float st_2084_inverse_eotf(float x) { colorspace_conv: 233 // Filter negative values to avoid NAN, and also special-case 0 so that (f(g(0)) == 0). colorspace_conv: 234 if (x > 0.0f) { colorspace_conv: 235 float xpow = powf(x, ST2084_M1); colorspace_conv: 236 #if 0 colorspace_conv: 237 // Original formulation from SMPTE ST 2084:2014 publication. colorspace_conv: 238 float num = ST2084_C1 + ST2084_C2 * xpow; colorspace_conv: 239 float den = 1.0f + ST2084_C3 * xpow; colorspace_conv: 240 x = powf(num / den, ST2084_M2); colorspace_conv: 241 #else colorspace_conv: 242 // More stable arrangement that avoids some cancellation error. colorspace_conv: 243 float num = (ST2084_C1 - 1.0f) + (ST2084_C2 - ST2084_C3) * xpow; colorspace_conv: 244 float den = 1.0f + ST2084_C3 * xpow; colorspace_conv: 245 x = powf(1.0f + num / den, ST2084_M2); colorspace_conv: 246 #endif colorspace_conv: 247 } else { colorspace_conv: 248 x = 0.0f; colorspace_conv: 249 } colorspace_conv: 250 colorspace_conv: 251 return x; colorspace_conv: 252 } colorspace_conv: 253 colorspace_conv: 254 // Applies a per-channel correction instead of the iterative method specified in Rec.2100. colorspace_conv: 255 COLORSPACE_FUNC float arib_b67_eotf(float x) { colorspace_conv: 256 return ootf_1_2(arib_b67_inverse_oetf(x)); colorspace_conv: 257 } colorspace_conv: 258 colorspace_conv: 259 COLORSPACE_FUNC float arib_b67_inverse_eotf(float x) { colorspace_conv: 260 return arib_b67_oetf(inverse_ootf_1_2(x)); colorspace_conv: 261 } colorspace_conv: 262 colorspace_conv: 263 COLORSPACE_FUNC float st_2084_oetf(float x) { colorspace_conv: 264 return st_2084_inverse_eotf(ootf_st2084(x)); colorspace_conv: 265 } colorspace_conv: 266 colorspace_conv: 267 COLORSPACE_FUNC float st_2084_inverse_oetf(float x) { colorspace_conv: 268 return inverse_ootf_st2084(st_2084_eotf(x)); colorspace_conv: 269 } colorspace_conv: 270 colorspace_conv: 271 COLORSPACE_FUNC float3 aribB67Ops(float3 v, float kr, float kg, float kb, float scale) { colorspace_conv: 272 const float gamma = 1.2f; colorspace_conv: 273 float r = v.x * scale; colorspace_conv: 274 float g = v.y * scale; colorspace_conv: 275 float b = v.z * scale; colorspace_conv: 276 colorspace_conv: 277 float yd = fmaxf(kr * r + kg * g + kb * b, FLOAT_EPS); colorspace_conv: 278 float ys_inv = powf(yd, (1.0f - gamma) / gamma); colorspace_conv: 279 colorspace_conv: 280 v.x = arib_b67_oetf(r * ys_inv); colorspace_conv: 281 v.y = arib_b67_oetf(g * ys_inv); colorspace_conv: 282 v.z = arib_b67_oetf(b * ys_inv); colorspace_conv: 283 return v; colorspace_conv: 284 } colorspace_conv: 285 colorspace_conv: 286 COLORSPACE_FUNC float3 aribB67InvOps(float3 v, float kr, float kg, float kb, float scale) { colorspace_conv: 287 const float gamma = 1.2f; colorspace_conv: 288 float r = v.x; colorspace_conv: 289 float g = v.y; colorspace_conv: 290 float b = v.z; colorspace_conv: 291 colorspace_conv: 292 float ys = fmaxf(kr * r + kg * g + kb * b, FLOAT_EPS); colorspace_conv: 293 ys = powf(ys, gamma - 1.0f); colorspace_conv: 294 colorspace_conv: 295 v.x = arib_b67_inverse_oetf(r * ys) * scale; colorspace_conv: 296 v.y = arib_b67_inverse_oetf(g * ys) * scale; colorspace_conv: 297 v.z = arib_b67_inverse_oetf(b * ys) * scale; colorspace_conv: 298 return v; colorspace_conv: 299 } colorspace_conv: 300 colorspace_conv: 301 COLORSPACE_FUNC float3 matrix_mul(float m[3][3], float3 v) { colorspace_conv: 302 float3 ret; colorspace_conv: 303 ret.x = m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z; colorspace_conv: 304 ret.y = m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z; colorspace_conv: 305 ret.z = m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z; colorspace_conv: 306 return ret; colorspace_conv: 307 } colorspace_conv: 308 colorspace_conv: 309 //参考: https://gist.github.com/4re/34ccbb95732c1bef47c3d2975ac62395 colorspace_conv: 310 COLORSPACE_FUNC float hable(float x, float A, float B, float C, float D, float E, float F) { colorspace_conv: 311 return ((x*(A*x+C*B)+D*E) / (x*(A*x+B)+D*F)) - E/F; colorspace_conv: 312 } colorspace_conv: 313 colorspace_conv: 314 COLORSPACE_FUNC float hdr2sdr_hable(float x, float source_peak, float ldr_nits, float A, float B, float C, float D, float E, float F) { colorspace_conv: 315 const float eb = source_peak / ldr_nits; colorspace_conv: 316 const float t0 = hable(x, A, B, C, D, E, F); colorspace_conv: 317 const float t1 = hable(eb, A, B, C, D, E, F); colorspace_conv: 318 return t0 / t1; colorspace_conv: 319 } colorspace_conv: 320 colorspace_conv: 321 COLORSPACE_FUNC float hdr2sdr_mobius(float x, float source_peak, float ldr_nits, float t, float peak) { colorspace_conv: 322 const float eb = source_peak / ldr_nits; colorspace_conv: 323 peak *= eb; colorspace_conv: 324 if (x <= t) { colorspace_conv: 325 return x; colorspace_conv: 326 } colorspace_conv: 327 colorspace_conv: 328 float a = -t * t * (peak - 1.0f) / (t * t - 2.0f * t + peak); colorspace_conv: 329 float b = (t * t - 2.0f * t * peak + peak) / fmaxf(peak - 1.0f, 1e-6f); colorspace_conv: 330 return (b * b + 2.0f * b * t + t * t) / (b - a) * (x + a) / (x + b); colorspace_conv: 331 } colorspace_conv: 332 colorspace_conv: 333 COLORSPACE_FUNC float hdr2sdr_reinhard(float x, float source_peak, float ldr_nits, float offset, float peak) { colorspace_conv: 334 const float eb = source_peak / ldr_nits; colorspace_conv: 335 peak *= eb; colorspace_conv: 336 return x / (x + offset) * (peak + offset) / peak; colorspace_conv: 337 } colorspace_conv: 338 colorspace_conv: 339 COLORSPACE_FUNC float linear_to_pq_space(float x) { colorspace_conv: 340 if (x > 0.0f) { colorspace_conv: 341 x *= MP_REF_WHITE / 10000.0f; colorspace_conv: 342 x = powf(x, PQ_M1); colorspace_conv: 343 x = (PQ_C1 + PQ_C2 * x) / (1.0f + PQ_C3 * x); colorspace_conv: 344 x = powf(x, PQ_M2); colorspace_conv: 345 return x; colorspace_conv: 346 } else { colorspace_conv: 347 return 0.0f; colorspace_conv: 348 } colorspace_conv: 349 } colorspace_conv: 350 colorspace_conv: 351 COLORSPACE_FUNC float pq_space_to_linear(float x) { colorspace_conv: 352 if (x > 0.0f) { colorspace_conv: 353 x = powf(x, 1.0f / PQ_M2); colorspace_conv: 354 x = fmaxf(x - PQ_C1, 0.0f) / (PQ_C2 - PQ_C3 * x); colorspace_conv: 355 x = powf(x, 1.0f / PQ_M1); colorspace_conv: 356 x *= 10000.0f / MP_REF_WHITE; colorspace_conv: 357 return x; colorspace_conv: 358 } else { colorspace_conv: 359 return 0.0f; colorspace_conv: 360 } colorspace_conv: 361 } colorspace_conv: 362 colorspace_conv: 363 COLORSPACE_FUNC float apply_bt2390(float x, const float maxLum) { colorspace_conv: 364 const float ks = 1.5f * maxLum - 0.5f; colorspace_conv: 365 float tb = (x - ks) / (1.0f - ks); colorspace_conv: 366 float tb2 = tb * tb; colorspace_conv: 367 float tb3 = tb2 * tb; colorspace_conv: 368 float pb = (2.0f * tb3 - 3.0f * tb2 + 1.0f) * ks + colorspace_conv: 369 (tb3 - 2.0f * tb2 + tb) * (1.0f - ks) + colorspace_conv: 370 (-2.0f * tb3 + 3.0f * tb2) * maxLum; colorspace_conv: 371 //x = mix(pb, x, lessThan(x, ks)); colorspace_conv: 372 x = (x < ks) ? x : pb; colorspace_conv: 373 return x; colorspace_conv: 374 } colorspace_conv: 375 colorspace_conv: 376 COLORSPACE_FUNC float mix(float x, float y, float a) { colorspace_conv: 377 a = (a < 0.0f) ? 0.0f : a; colorspace_conv: 378 a = (a > 1.0f) ? 1.0f : a; colorspace_conv: 379 return (x) * (1.0f - (a)) + (y) * (a); colorspace_conv: 380 } colorspace_conv: 381 colorspace_conv: 382 COLORSPACE_FUNC float lut3d_linear_interp(float v0, float v1, float a) { colorspace_conv: 383 return v0 + (v1 - v0) * a; colorspace_conv: 384 } colorspace_conv: 385 colorspace_conv: 386 COLORSPACE_FUNC float3 lut3d_linear_interp(float3 v0, float3 v1, float a) { colorspace_conv: 387 float3 r; colorspace_conv: 388 r.x = lut3d_linear_interp(v0.x, v1.x, a); colorspace_conv: 389 r.y = lut3d_linear_interp(v0.y, v1.y, a); colorspace_conv: 390 r.z = lut3d_linear_interp(v0.z, v1.z, a); colorspace_conv: 391 return r; colorspace_conv: 392 } colorspace_conv: 393 colorspace_conv: 394 COLORSPACE_FUNC int lut3d_prev_idx(float x) { colorspace_conv: 395 return (int)x; colorspace_conv: 396 } colorspace_conv: 397 colorspace_conv: 398 COLORSPACE_FUNC int lut3d_near_idx(float x) { colorspace_conv: 399 return (int)(x + 0.5f); colorspace_conv: 400 } colorspace_conv: 401 colorspace_conv: 402 COLORSPACE_FUNC int lut3d_next_idx(float x, int size) { colorspace_conv: 403 int next = lut3d_prev_idx(x) + 1; colorspace_conv: 404 return (next >= size) ? size - 1 : next; colorspace_conv: 405 } colorspace_conv: 406 colorspace_conv: 407 COLORSPACE_FUNC float lut3d_prelut(const float s, const int idx, const int size, colorspace_conv: 408 const float prelutmin[3], const float prelutscale[3], const float *__restrict__ prelut) { colorspace_conv: 409 const float x = clamp((s - prelutmin[idx]) * prelutscale[idx], 0.0f, (float)(size - 1)); colorspace_conv: 410 const float c0 = prelut[idx * size + lut3d_prev_idx(x)]; colorspace_conv: 411 const float c1 = prelut[idx * size + lut3d_next_idx(x, size)]; colorspace_conv: 412 return lut3d_linear_interp(c0, c1, x - lut3d_prev_idx(x)); colorspace_conv: 413 } colorspace_conv: 414 colorspace_conv: 415 COLORSPACE_FUNC float3 lut3d_prelut(const float3 in, const int size, colorspace_conv: 416 const float prelutmin[3], const float prelutscale[3], const float *__restrict__ prelut) { colorspace_conv: 417 float3 out; colorspace_conv: 418 out.x = lut3d_prelut(in.x, 0, size, prelutmin, prelutscale, prelut); colorspace_conv: 419 out.y = lut3d_prelut(in.y, 1, size, prelutmin, prelutscale, prelut); colorspace_conv: 420 out.z = lut3d_prelut(in.z, 2, size, prelutmin, prelutscale, prelut); colorspace_conv: 421 return out; colorspace_conv: 422 } colorspace_conv: 423 colorspace_conv: 424 COLORSPACE_FUNC float3 lut3d_get_table(const LUTVEC *__restrict__ lut, const int x, const int y, const int z, const int lutSize0, const int lutSize01) { colorspace_conv: 425 LUTVEC val = lut[x * lutSize01 + y * lutSize0 + z]; colorspace_conv: 426 float3 out; colorspace_conv: 427 out.x = val.x; colorspace_conv: 428 out.y = val.y; colorspace_conv: 429 out.z = val.z; colorspace_conv: 430 return out; colorspace_conv: 431 } colorspace_conv: 432 colorspace_conv: 433 COLORSPACE_FUNC float3 lut3d_interp_nearest(float3 in, const LUTVEC *__restrict__ lut, const int lutSize0, const int lutSize01) { colorspace_conv: 434 return lut3d_get_table(lut, lut3d_near_idx(in.x), lut3d_near_idx(in.y), lut3d_near_idx(in.z), lutSize0, lutSize01); colorspace_conv: 435 } colorspace_conv: 436 colorspace_conv: 437 //参考: https://en.wikipedia.org/wiki/Trilinear_interpolation colorspace_conv: 438 COLORSPACE_FUNC float3 lut3d_interp_trilinear(float3 in, const LUTVEC *__restrict__ lut, const int lutSize0, const int lutSize01) { colorspace_conv: 439 const int x0 = lut3d_prev_idx(in.x); colorspace_conv: 440 const int x1 = lut3d_next_idx(in.x, lutSize0); colorspace_conv: 441 const int y0 = lut3d_prev_idx(in.y); colorspace_conv: 442 const int y1 = lut3d_next_idx(in.y, lutSize0); colorspace_conv: 443 const int z0 = lut3d_prev_idx(in.z); colorspace_conv: 444 const int z1 = lut3d_next_idx(in.z, lutSize0); colorspace_conv: 445 const float scalex = in.x - x0; colorspace_conv: 446 const float scaley = in.y - y0; colorspace_conv: 447 const float scalez = in.z - z0; colorspace_conv: 448 const float3 c000 = lut3d_get_table(lut, x0, y0, z0, lutSize0, lutSize01); colorspace_conv: 449 const float3 c001 = lut3d_get_table(lut, x0, y0, z1, lutSize0, lutSize01); colorspace_conv: 450 const float3 c010 = lut3d_get_table(lut, x0, y1, z0, lutSize0, lutSize01); colorspace_conv: 451 const float3 c011 = lut3d_get_table(lut, x0, y1, z1, lutSize0, lutSize01); colorspace_conv: 452 const float3 c100 = lut3d_get_table(lut, x1, y0, z0, lutSize0, lutSize01); colorspace_conv: 453 const float3 c101 = lut3d_get_table(lut, x1, y0, z1, lutSize0, lutSize01); colorspace_conv: 454 const float3 c110 = lut3d_get_table(lut, x1, y1, z0, lutSize0, lutSize01); colorspace_conv: 455 const float3 c111 = lut3d_get_table(lut, x1, y1, z1, lutSize0, lutSize01); colorspace_conv: 456 const float3 c00 = lut3d_linear_interp(c000, c100, scalex); colorspace_conv: 457 const float3 c10 = lut3d_linear_interp(c010, c110, scalex); colorspace_conv: 458 const float3 c01 = lut3d_linear_interp(c001, c101, scalex); colorspace_conv: 459 const float3 c11 = lut3d_linear_interp(c011, c111, scalex); colorspace_conv: 460 const float3 c0 = lut3d_linear_interp(c00, c10, scaley); colorspace_conv: 461 const float3 c1 = lut3d_linear_interp(c01, c11, scaley); colorspace_conv: 462 const float3 c = lut3d_linear_interp(c0, c1, scalez); colorspace_conv: 463 return c; colorspace_conv: 464 } colorspace_conv: 465 colorspace_conv: 466 //参考: http://www.filmlight.ltd.uk/pdf/whitepapers/FL-TL-TN-0057-SoftwareLib.pdf colorspace_conv: 467 COLORSPACE_FUNC float3 lut3d_interp_tetrahedral(float3 in, const LUTVEC *__restrict__ lut, const int lutSize0, const int lutSize01) { colorspace_conv: 468 const int x0 = lut3d_prev_idx(in.x); colorspace_conv: 469 const int x1 = lut3d_next_idx(in.x, lutSize0); colorspace_conv: 470 const int y0 = lut3d_prev_idx(in.y); colorspace_conv: 471 const int y1 = lut3d_next_idx(in.y, lutSize0); colorspace_conv: 472 const int z0 = lut3d_prev_idx(in.z); colorspace_conv: 473 const int z1 = lut3d_next_idx(in.z, lutSize0); colorspace_conv: 474 const float scalex = in.x - x0; colorspace_conv: 475 const float scaley = in.y - y0; colorspace_conv: 476 const float scalez = in.z - z0; colorspace_conv: 477 float scale0, scale1, scale2; colorspace_conv: 478 int xA, yA, zA, xB, yB, zB; colorspace_conv: 479 if (scalex > scaley) { colorspace_conv: 480 if (scaley > scalez) { colorspace_conv: 481 scale0 = scalex; colorspace_conv: 482 scale1 = scaley; colorspace_conv: 483 scale2 = scalez; colorspace_conv: 484 xA = x1; yA = y0; zA = z0; colorspace_conv: 485 xB = x1; yB = y1; zB = z0; colorspace_conv: 486 } else if (scalex > scalez) { colorspace_conv: 487 scale0 = scalex; colorspace_conv: 488 scale1 = scalez; colorspace_conv: 489 scale2 = scaley; colorspace_conv: 490 xA = x1; yA = y0; zA = z0; colorspace_conv: 491 xB = x1; yB = y0; zB = z1; colorspace_conv: 492 } else { colorspace_conv: 493 scale0 = scalez; colorspace_conv: 494 scale1 = scalex; colorspace_conv: 495 scale2 = scaley; colorspace_conv: 496 xA = x0; yA = y0; zA = z1; colorspace_conv: 497 xB = x1; yB = y0; zB = z1; colorspace_conv: 498 } colorspace_conv: 499 } else { colorspace_conv: 500 if (scalez > scaley) { colorspace_conv: 501 scale0 = scalez; colorspace_conv: 502 scale1 = scaley; colorspace_conv: 503 scale2 = scalex; colorspace_conv: 504 xA = x0; yA = y0; zA = z1; colorspace_conv: 505 xB = x0; yB = y1; zB = z1; colorspace_conv: 506 } else if (scalez > scalex) { colorspace_conv: 507 scale0 = scaley; colorspace_conv: 508 scale1 = scalez; colorspace_conv: 509 scale2 = scalex; colorspace_conv: 510 xA = x0; yA = y1; zA = z0; colorspace_conv: 511 xB = x0; yB = y1; zB = z1; colorspace_conv: 512 } else { colorspace_conv: 513 scale0 = scaley; colorspace_conv: 514 scale1 = scalex; colorspace_conv: 515 scale2 = scalez; colorspace_conv: 516 xA = x0; yA = y1; zA = z0; colorspace_conv: 517 xB = x1; yB = y1; zB = z0; colorspace_conv: 518 } colorspace_conv: 519 } colorspace_conv: 520 const float3 c000 = lut3d_get_table(lut, x0, y0, z0, lutSize0, lutSize01); colorspace_conv: 521 const float3 c111 = lut3d_get_table(lut, x1, y1, z1, lutSize0, lutSize01); colorspace_conv: 522 const float3 cA = lut3d_get_table(lut, xA, yA, zA, lutSize0, lutSize01); colorspace_conv: 523 const float3 cB = lut3d_get_table(lut, xB, yB, zB, lutSize0, lutSize01); colorspace_conv: 524 const float s0 = 1.0f - scale0; colorspace_conv: 525 const float s1 = scale0 - scale1; colorspace_conv: 526 const float s2 = scale1 - scale2; colorspace_conv: 527 const float s3 = scale2; colorspace_conv: 528 float3 c; colorspace_conv: 529 c.x = s0 * c000.x + s1 * cA.x + s2 * cB.x + s3 * c111.x; colorspace_conv: 530 c.y = s0 * c000.y + s1 * cA.y + s2 * cB.y + s3 * c111.y; colorspace_conv: 531 c.z = s0 * c000.z + s1 * cA.z + s2 * cB.z + s3 * c111.z; colorspace_conv: 532 return c; colorspace_conv: 533 } colorspace_conv: 534 colorspace_conv: 535 COLORSPACE_FUNC float3 lut3d_interp_pyramid(float3 in, const LUTVEC *lut, const int lutSize0, const int lutSize01) { colorspace_conv: 536 const int x0 = lut3d_prev_idx(in.x); colorspace_conv: 537 const int x1 = lut3d_next_idx(in.x, lutSize0); colorspace_conv: 538 const int y0 = lut3d_prev_idx(in.y); colorspace_conv: 539 const int y1 = lut3d_next_idx(in.y, lutSize0); colorspace_conv: 540 const int z0 = lut3d_prev_idx(in.z); colorspace_conv: 541 const int z1 = lut3d_next_idx(in.z, lutSize0); colorspace_conv: 542 const float scalex = in.x - x0; colorspace_conv: 543 const float scaley = in.y - y0; colorspace_conv: 544 const float scalez = in.z - z0; colorspace_conv: 545 colorspace_conv: 546 float scale0, scale1, scale2; colorspace_conv: 547 int xA, yA, zA, xB, yB, zB, xC, yC, zC; colorspace_conv: 548 colorspace_conv: 549 if (scaley > scalex && scalez > scalex) { colorspace_conv: 550 xA = x0; yA = y0; zA = z1; colorspace_conv: 551 xB = x0; yB = y1; zB = z0; colorspace_conv: 552 xC = x0; yC = y1; zC = z1; colorspace_conv: 553 scale0 = scaley; colorspace_conv: 554 scale1 = scalez; colorspace_conv: 555 scale2 = scalex; colorspace_conv: 556 } else if (scalex > scaley && scalez > scaley) { colorspace_conv: 557 xA = x0; yA = y0; zA = z1; colorspace_conv: 558 xB = x1; yB = y0; zB = z0; colorspace_conv: 559 xC = x1; yC = y0; zC = z1; colorspace_conv: 560 scale0 = scalex; colorspace_conv: 561 scale1 = scalez; colorspace_conv: 562 scale2 = scaley; colorspace_conv: 563 } else { colorspace_conv: 564 xA = x0; yA = y1; zA = z0; colorspace_conv: 565 xB = x1; yB = y0; zB = z0; colorspace_conv: 566 xC = x1; yC = y1; zC = z0; colorspace_conv: 567 scale0 = scalex; colorspace_conv: 568 scale1 = scaley; colorspace_conv: 569 scale2 = scalez; colorspace_conv: 570 } colorspace_conv: 571 const float3 c000 = lut3d_get_table(lut, x0, y0, z0, lutSize0, lutSize01); colorspace_conv: 572 const float3 c111 = lut3d_get_table(lut, x1, y1, z1, lutSize0, lutSize01); colorspace_conv: 573 const float3 cA = lut3d_get_table(lut, xA, yA, zA, lutSize0, lutSize01); colorspace_conv: 574 const float3 cB = lut3d_get_table(lut, xB, yB, zB, lutSize0, lutSize01); colorspace_conv: 575 const float3 cC = lut3d_get_table(lut, xC, yC, zC, lutSize0, lutSize01); colorspace_conv: 576 float3 c; colorspace_conv: 577 c.x = c000.x + (cB.x - c000.x) * scale0 + (c111.x - cC.x) * scale2 + (cA.x - c000.x) * scale1 + (cC.x - cA.x - cB.x + c000.x) * scale0 * scale1; colorspace_conv: 578 c.y = c000.y + (cB.y - c000.y) * scale0 + (c111.y - cC.y) * scale2 + (cA.y - c000.y) * scale1 + (cC.y - cA.y - cB.y + c000.y) * scale0 * scale1; colorspace_conv: 579 c.z = c000.z + (cB.z - c000.z) * scale0 + (c111.z - cC.z) * scale2 + (cA.z - c000.z) * scale1 + (cC.z - cA.z - cB.z + c000.z) * scale0 * scale1; colorspace_conv: 580 return c; colorspace_conv: 581 } colorspace_conv: 582 colorspace_conv: 583 COLORSPACE_FUNC float3 lut3d_interp_prism(float3 in, const LUTVEC *lut, const int lutSize0, const int lutSize01) { colorspace_conv: 584 const int x0 = lut3d_prev_idx(in.x); colorspace_conv: 585 const int x1 = lut3d_next_idx(in.x, lutSize0); colorspace_conv: 586 const int y0 = lut3d_prev_idx(in.y); colorspace_conv: 587 const int y1 = lut3d_next_idx(in.y, lutSize0); colorspace_conv: 588 const int z0 = lut3d_prev_idx(in.z); colorspace_conv: 589 const int z1 = lut3d_next_idx(in.z, lutSize0); colorspace_conv: 590 const float scalex = in.x - x0; colorspace_conv: 591 const float scaley = in.y - y0; colorspace_conv: 592 const float scalez = in.z - z0; colorspace_conv: 593 float scale0, scale2; colorspace_conv: 594 int xA, yA, zA, xB, yB, zB; colorspace_conv: 595 colorspace_conv: 596 if (scalez > scalex) { colorspace_conv: 597 scale0 = scalez; colorspace_conv: 598 scale2 = scalex; colorspace_conv: 599 xA = x0; yA = y1; zA = z1; colorspace_conv: 600 xB = x0; yB = y0; zB = z1; colorspace_conv: 601 } else { colorspace_conv: 602 scale0 = scalex; colorspace_conv: 603 scale2 = scalez; colorspace_conv: 604 xA = x1; yA = y1; zA = z0; colorspace_conv: 605 xB = x1; yB = y0; zB = z0; colorspace_conv: 606 } colorspace_conv: 607 const float3 c000 = lut3d_get_table(lut, x0, y0, z0, lutSize0, lutSize01); colorspace_conv: 608 const float3 c010 = lut3d_get_table(lut, x0, y1, z0, lutSize0, lutSize01); colorspace_conv: 609 const float3 c101 = lut3d_get_table(lut, x1, y0, z1, lutSize0, lutSize01); colorspace_conv: 610 const float3 c111 = lut3d_get_table(lut, x1, y1, z1, lutSize0, lutSize01); colorspace_conv: 611 const float3 cA = lut3d_get_table(lut, xA, yA, zA, lutSize0, lutSize01); colorspace_conv: 612 const float3 cB = lut3d_get_table(lut, xB, yB, zB, lutSize0, lutSize01); colorspace_conv: 613 float3 c; colorspace_conv: 614 c.x = c000.x + (cB.x - c000.x) * scale0 + (c101.x - cB.x) * scale2 + (c010.x - c000.x) * scaley + (c000.x - c010.x - cB.x + cA.x) * scale0 * scaley + (cB.x - cA.x - c101.x + c111.x) * scale2 * scaley; colorspace_conv: 615 c.y = c000.y + (cB.y - c000.y) * scale0 + (c101.y - cB.y) * scale2 + (c010.y - c000.y) * scaley + (c000.y - c010.y - cB.y + cA.y) * scale0 * scaley + (cB.y - cA.y - c101.y + c111.y) * scale2 * scaley; colorspace_conv: 616 c.z = c000.z + (cB.z - c000.z) * scale0 + (c101.z - cB.z) * scale2 + (c010.z - c000.z) * scaley + (c000.z - c010.z - cB.z + cA.z) * scale0 * scaley + (cB.z - cA.z - c101.z + c111.z) * scale2 * scaley; colorspace_conv: 617 return c; colorspace_conv: 618 } colorspace_conv: 619 colorspace_conv: 620 struct RGYColorspaceDevParams { colorspace_conv: 621 int lut_offset; colorspace_conv: 622 int prelut_offset; colorspace_conv: 623 // 以降はoffsetの示す位置にデータ colorspace_conv: 624 // データの取り出し方法は下記の関数を参照 colorspace_conv: 625 }; colorspace_conv: 626 colorspace_conv: 627 float *getDevParamsPrelut(void *__restrict__ ptr) { colorspace_conv: 628 return (float *)((char *)ptr + ((RGYColorspaceDevParams *)ptr)->prelut_offset); colorspace_conv: 629 } colorspace_conv: 630 colorspace_conv: 631 const float *getDevParamsPrelut(const void *__restrict__ ptr) { colorspace_conv: 632 return (const float *)((const char *)ptr + ((RGYColorspaceDevParams *)ptr)->prelut_offset); colorspace_conv: 633 } colorspace_conv: 634 colorspace_conv: 635 LUTVEC *getDevParamsLut(void *__restrict__ ptr) { colorspace_conv: 636 return (LUTVEC *)((char *)ptr + ((RGYColorspaceDevParams *)ptr)->lut_offset); colorspace_conv: 637 } colorspace_conv: 638 colorspace_conv: 639 const LUTVEC *getDevParamsLut(const void *__restrict__ ptr) { colorspace_conv: 640 return (const LUTVEC *)((const char *)ptr + ((RGYColorspaceDevParams *)ptr)->lut_offset); colorspace_conv: 641 } colorspace_conv: 642 colorspace_conv: 643 colorspace_conv: 644 #include colorspace_conv: 645 colorspace_conv: 646 __device__ __inline__ colorspace_conv: 647 float3 convert_colorspace_custom(float3 x, const RGYColorspaceDevParams *__restrict__ params) { colorspace_conv: 648 colorspace_conv: 649 { colorspace_conv: 650 float m[3][3] = { colorspace_conv: 651 { -nan(ind)f, -nan(ind)f, -nan(ind)f }, colorspace_conv: 652 { -nan(ind)f, -nan(ind)f, -nan(ind)f }, colorspace_conv: 653 { -nan(ind)f, -nan(ind)f, -nan(ind)f } colorspace_conv: 654 }; colorspace_conv: 655 x = matrix_mul(m, x); colorspace_conv: 656 } colorspace_conv: 657 colorspace_conv: 658 { //linear->gamma colorspace_conv: 659 const float pre_scaler = 1.0000000000000000e-02f; colorspace_conv: 660 const float post_scaler = 1.0000000000000000e+00f; colorspace_conv: 661 x.x = post_scaler * st_2084_inverse_eotf( x.x * pre_scaler ); colorspace_conv: 662 x.y = post_scaler * st_2084_inverse_eotf( x.y * pre_scaler ); colorspace_conv: 663 x.z = post_scaler * st_2084_inverse_eotf( x.z * pre_scaler ); colorspace_conv: 664 } colorspace_conv: 665 colorspace_conv: 666 { colorspace_conv: 667 float m[3][3] = { colorspace_conv: 668 { 2.6269999999999999e-01f, 6.7799999999999994e-01f, 5.9299999999999999e-02f }, colorspace_conv: 669 { -1.3963006271925163e-01f, -3.6036993728074834e-01f, 5.0000000000000000e-01f }, colorspace_conv: 670 { 5.0000000000000000e-01f, -4.5978570459785700e-01f, -4.0214295402142955e-02f } colorspace_conv: 671 }; colorspace_conv: 672 x = matrix_mul(m, x); colorspace_conv: 673 } colorspace_conv: 674 colorspace_conv: 675 { //range float->int colorspace_conv: 676 const float range_y = 5.6064000000000000e+04f; colorspace_conv: 677 const float offset_y = 4.0960000000000000e+03f; colorspace_conv: 678 const float range_uv = 5.7344000000000000e+04f; colorspace_conv: 679 const float offset_uv = 3.2768000000000000e+04f; colorspace_conv: 680 x.x = x.x * range_y + offset_y; colorspace_conv: 681 x.y = x.y * range_uv + offset_uv; colorspace_conv: 682 x.z = x.z * range_uv + offset_uv; colorspace_conv: 683 } colorspace_conv: 684 colorspace_conv: 685 return x; colorspace_conv: 686 } colorspace_conv: 687 colorspace_conv: 688 static const int PIX_PER_THREAD = 4; colorspace_conv: 689 colorspace_conv: 690 template __device__ __inline__ T toPix(float x) { return (T)clamp((x) + 0.5f, 0.0f, (1<<(sizeof(T)*8)) - 0.5f); } colorspace_conv: 691 template<> __device__ __inline__ float toPix (float x) { return x; } colorspace_conv: 692 colorspace_conv: 693 template colorspace_conv: 694 __global__ void kernel_filter( colorspace_conv: 695 uint8_t *__restrict__ pDstY, uint8_t *__restrict__ pDstU, uint8_t *__restrict__ pDstV, colorspace_conv: 696 const int dstPitch, const int dstWidth, const int dstHeight, colorspace_conv: 697 const uint8_t *__restrict__ pSrcY, const uint8_t *__restrict__ pSrcU, const uint8_t *__restrict__ pSrcV, colorspace_conv: 698 const int srcPitch, const int srcWidth, const int srcHeight, bool srcInterlaced, colorspace_conv: 699 const RGYColorspaceDevParams *__restrict__ params) { colorspace_conv: 700 const int ix = (blockIdx.x * blockDim.x + threadIdx.x) * PIX_PER_THREAD; colorspace_conv: 701 const int iy = blockIdx.y * blockDim.y + threadIdx.y; colorspace_conv: 702 colorspace_conv: 703 struct __align__(sizeof(TypeIn) * 4) TypeIn4 { colorspace_conv: 704 TypeIn x, y, z, w; colorspace_conv: 705 }; colorspace_conv: 706 colorspace_conv: 707 struct __align__(sizeof(TypeOut) * 4) TypeOut4 { colorspace_conv: 708 TypeOut x, y, z, w; colorspace_conv: 709 }; colorspace_conv: 710 colorspace_conv: 711 if (ix < dstWidth && iy < dstHeight) { colorspace_conv: 712 colorspace_conv: 713 TypeIn4 srcY = *(TypeIn4 *)(pSrcY + iy * srcPitch + ix * sizeof(TypeIn)); colorspace_conv: 714 TypeIn4 srcU = *(TypeIn4 *)(pSrcU + iy * srcPitch + ix * sizeof(TypeIn)); colorspace_conv: 715 TypeIn4 srcV = *(TypeIn4 *)(pSrcV + iy * srcPitch + ix * sizeof(TypeIn)); colorspace_conv: 716 colorspace_conv: 717 float3 pix0 = make_float3((float)srcY.x, (float)srcU.x, (float)srcV.x); colorspace_conv: 718 float3 pix1 = make_float3((float)srcY.y, (float)srcU.y, (float)srcV.y); colorspace_conv: 719 float3 pix2 = make_float3((float)srcY.z, (float)srcU.z, (float)srcV.z); colorspace_conv: 720 float3 pix3 = make_float3((float)srcY.w, (float)srcU.w, (float)srcV.w); colorspace_conv: 721 colorspace_conv: 722 pix0 = convert_colorspace_custom(pix0, params); colorspace_conv: 723 pix1 = convert_colorspace_custom(pix1, params); colorspace_conv: 724 pix2 = convert_colorspace_custom(pix2, params); colorspace_conv: 725 pix3 = convert_colorspace_custom(pix3, params); colorspace_conv: 726 colorspace_conv: 727 TypeOut4 dstY, dstU, dstV; colorspace_conv: 728 dstY.x = toPix(pix0.x); dstU.x = toPix(pix0.y); dstV.x = toPix(pix0.z); colorspace_conv: 729 dstY.y = toPix(pix1.x); dstU.y = toPix(pix1.y); dstV.y = toPix(pix1.z); colorspace_conv: 730 dstY.z = toPix(pix2.x); dstU.z = toPix(pix2.y); dstV.z = toPix(pix2.z); colorspace_conv: 731 dstY.w = toPix(pix3.x); dstU.w = toPix(pix3.y); dstV.w = toPix(pix3.z); colorspace_conv: 732 colorspace_conv: 733 TypeOut4 *ptrDstY = (TypeOut4 *)(pDstY + iy * dstPitch + ix * sizeof(TypeOut)); colorspace_conv: 734 TypeOut4 *ptrDstU = (TypeOut4 *)(pDstU + iy * dstPitch + ix * sizeof(TypeOut)); colorspace_conv: 735 TypeOut4 *ptrDstV = (TypeOut4 *)(pDstV + iy * dstPitch + ix * sizeof(TypeOut)); colorspace_conv: 736 colorspace_conv: 737 ptrDstY[0] = dstY; colorspace_conv: 738 ptrDstU[0] = dstU; colorspace_conv: 739 ptrDstV[0] = dstV; colorspace_conv: 740 } colorspace_conv: 741 }; colorspace_conv: 742 colorspace_conv: 743 #endif // _JITIFY_INCLUDE_GUARD_3F6B24FAF8F3CEB7 colorspace_conv: --------------------------------------- colorspace_conv: Compiler options: --use_fast_math -arch=compute_75 colorspace_conv: --------------------------------------------------- colorspace_conv: --- JIT compile log for colorspace_conv --- colorspace_conv: --------------------------------------------------- colorspace_conv: colorspace_conv(651): error: identifier "ind" is undefined colorspace_conv: colorspace_conv(651): error: expected a "," colorspace_conv: colorspace_conv(651): error: expected a "," colorspace_conv: colorspace_conv(651): error: expected a "," colorspace_conv: colorspace_conv(652): error: expected a "," colorspace_conv: colorspace_conv(652): error: expected a "," colorspace_conv: colorspace_conv(652): error: expected a "," colorspace_conv: colorspace_conv(653): error: expected a "," colorspace_conv: colorspace_conv(653): error: expected a "," colorspace_conv: colorspace_conv(653): error: expected a "," colorspace_conv: colorspace_conv(45): warning: variable "MP_REF_WHITE_HLG" was declared but never referenced colorspace_conv: colorspace_conv(688): warning: variable "PIX_PER_THREAD" was declared but never referenced colorspace_conv: 10 errors detected in the compilation of "colorspace_conv". colorspace: failed to setup custom filter: error in cuda.. colorspace: closed colorspace filter. colorspace: closed colorspace filter. avcuvid: Closing... Closing Input thread. Closed Input thread. avcuvid: Closed Stream Packet Buffer. Closing avformat context... [AVIOContext @ 0000022bd0805040] Statistics: 15835322 bytes read, 2 seeks Closed avformat context. Free formatOptions... Freed formatOptions. avcuvid: Closed format. Close parser... Closed parser. Close codecCtx for parser... Closed codecCtx for parser. Free bsf... Freed bsf. Free first video packet... Freed first video packet. Free extra data... Freed extra data. avcuvid: Closed video. avcuvid: Closing Stream #0... avcuvid: Free packet sample... avcuvid: Freed packet sample. avcuvid: Closed Stream #0. avcuvid: Cleared frame pos list. avcuvid: Closed. avcuvid: Closing... avcuvid: Close... Released IO Buffers. cuvid: Closing decoder... cuvid: cuvidDestroyVideoParser: Fin. cuvid: Closed decoder. gpuinfo: Closing device #0: NVIDIA GeForce RTX 4070 SUPER... gpuinfo: Closing Encoder... nvenc : nvEncDestroyEncoder... nvenc : nvEncDestroyEncoder: success. gpuinfo: Closed Encoder. gpuinfo: Closed cuvid Ctx Lock... gpuinfo: Closed cuvid Ctx Lock. gpuinfo: Closed CUDA Context... gpuinfo: Closed CUDA Context. gpuinfo: Closed device #0: NVIDIA GeForce RTX 4070 SUPER. Closed EncodeStatus. Closing perf monitor... Closing logger... devDX11: Closing DX11 device...