From 78b0d22908f49edb27aea9d2557d8abaf7571439 Mon Sep 17 00:00:00 2001 From: cheapie Date: Sun, 12 Aug 2018 16:03:26 -0500 Subject: [PATCH] Traffic light improvements and fixes --- trafficlight/init.lua | 399 ++++++++++++++++-- .../textures/streets_pl_flashingwalk.png | Bin 0 -> 2701 bytes .../textures/streets_tl_flashgreen.png | Bin 0 -> 2975 bytes .../textures/streets_tl_flashred_alt.png | Bin 0 -> 2795 bytes .../textures/streets_tl_left_flashgreen.png | Bin 0 -> 2886 bytes .../textures/streets_tl_left_flashred_alt.png | Bin 0 -> 2914 bytes .../textures/streets_tl_left_redyellow.png | Bin 0 -> 3142 bytes .../textures/streets_tl_left_warn_alt.png | Bin 0 -> 2933 bytes .../textures/streets_tl_redyellow.png | Bin 0 -> 3178 bytes .../textures/streets_tl_right_flashgreen.png | Bin 0 -> 2862 bytes .../streets_tl_right_flashred_alt.png | Bin 0 -> 2890 bytes .../textures/streets_tl_right_redyellow.png | Bin 0 -> 3162 bytes .../textures/streets_tl_right_warn_alt.png | Bin 0 -> 3009 bytes trafficlight/textures/streets_tl_warn_alt.png | Bin 0 -> 2929 bytes .../textures/streets_tle_left_flashgreen.png | Bin 0 -> 3004 bytes .../textures/streets_tle_right_flashgreen.png | Bin 0 -> 2961 bytes 16 files changed, 367 insertions(+), 32 deletions(-) create mode 100644 trafficlight/textures/streets_pl_flashingwalk.png create mode 100644 trafficlight/textures/streets_tl_flashgreen.png create mode 100644 trafficlight/textures/streets_tl_flashred_alt.png create mode 100644 trafficlight/textures/streets_tl_left_flashgreen.png create mode 100644 trafficlight/textures/streets_tl_left_flashred_alt.png create mode 100644 trafficlight/textures/streets_tl_left_redyellow.png create mode 100644 trafficlight/textures/streets_tl_left_warn_alt.png create mode 100644 trafficlight/textures/streets_tl_redyellow.png create mode 100644 trafficlight/textures/streets_tl_right_flashgreen.png create mode 100644 trafficlight/textures/streets_tl_right_flashred_alt.png create mode 100644 trafficlight/textures/streets_tl_right_redyellow.png create mode 100644 trafficlight/textures/streets_tl_right_warn_alt.png create mode 100644 trafficlight/textures/streets_tl_warn_alt.png create mode 100644 trafficlight/textures/streets_tle_left_flashgreen.png create mode 100644 trafficlight/textures/streets_tle_right_flashgreen.png diff --git a/trafficlight/init.lua b/trafficlight/init.lua index 4a1e24d..f099128 100644 --- a/trafficlight/init.lua +++ b/trafficlight/init.lua @@ -135,6 +135,7 @@ streets.on_digiline_receive = function(pos, node, channel, msg) end -- Tl states local name = minetest.get_node(pos).name + local althalfhz = minetest.get_node(pos).param2 % 2 == 1 if msg == "OFF" then if name:find("pedlight") then if name == "streets:pedlight_top_flashingdontwalk" then @@ -181,6 +182,29 @@ streets.on_digiline_receive = function(pos, node, channel, msg) else streets.tlSwitch(pos,"streets:trafficlight_top_green") end + elseif msg == "FLASHGREEN" then + if name:find("pedlight") then + if name == "streets:pedlight_top_flashingdontwalk" then + ped_on_flash_end(pos,false) + end + streets.tlSwitch(pos,"streets:pedlight_top_flashingwalk") + elseif name:find("extender_left") then + streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_flashgreen") + elseif name:find("extender_right") then + streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_flashgreen") + elseif name:find("left") then + streets.tlSwitch(pos,"streets:trafficlight_top_left_flashgreen") + elseif name:find("right") then + streets.tlSwitch(pos,"streets:trafficlight_top_right_flashgreen") + elseif name:find("beacon_hybrid") then + --Not Supported + elseif name:find("beacon") then + --Not Supported + elseif name:find("rrfb") then + --Not Supported + else + streets.tlSwitch(pos,"streets:trafficlight_top_flashgreen") + end elseif msg == "RED" then if name:find("pedlight") then if name == "streets:pedlight_top_flashingdontwalk" then @@ -204,20 +228,36 @@ streets.on_digiline_receive = function(pos, node, channel, msg) else streets.tlSwitch(pos,"streets:trafficlight_top_red") end - elseif msg == "WARN" then + elseif msg == "WARN" or msg == "FLASHYELLOW" then if name:find("pedlight") then if name ~= "streets:pedlight_top_flashingdontwalk" then ped_on_flash_start(pos) end streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk") elseif name:find("extender_left") then - streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_off") + if althalfhz then + streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_flashyellow_alt") + else + streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_flashyellow") + end elseif name:find("extender_right") then - streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_off") + if althalfhz then + streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_flashyellow_alt") + else + streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_flashyellow") + end elseif name:find("left") then - streets.tlSwitch(pos,"streets:trafficlight_top_left_warn") + if althalfhz then + streets.tlSwitch(pos,"streets:trafficlight_top_left_warn_alt") + else + streets.tlSwitch(pos,"streets:trafficlight_top_left_warn") + end elseif name:find("right") then - streets.tlSwitch(pos,"streets:trafficlight_top_right_warn") + if althalfhz then + streets.tlSwitch(pos,"streets:trafficlight_top_right_warn_alt") + else + streets.tlSwitch(pos,"streets:trafficlight_top_right_warn") + end elseif name:find("beacon_hybrid") then streets.tlSwitch(pos,"streets:beacon_hybrid_flashyellow") elseif name:find("beacon") then @@ -225,30 +265,11 @@ streets.on_digiline_receive = function(pos, node, channel, msg) elseif name:find("rrfb") then streets.tlSwitch(pos,"streets:trafficlight_rrfb_on") else - streets.tlSwitch(pos,"streets:trafficlight_top_warn") - end - elseif msg == "FLASHYELLOW" then - if name:find("pedlight") then - if name ~= "streets:pedlight_top_flashingdontwalk" then - ped_on_flash_start(pos) + if althalfhz then + streets.tlSwitch(pos,"streets:trafficlight_top_warn_alt") + else + streets.tlSwitch(pos,"streets:trafficlight_top_warn") end - streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk") - elseif name:find("extender_left") then - streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_flashyellow") - elseif name:find("extender_right") then - streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_flashyellow") - elseif name:find("left") then - streets.tlSwitch(pos,"streets:trafficlight_top_left_warn") - elseif name:find("right") then - streets.tlSwitch(pos,"streets:trafficlight_top_right_warn") - elseif name:find("beacon_hybrid") then - streets.tlSwitch(pos,"streets:beacon_hybrid_flashyellow") - elseif name:find("beacon") then - streets.tlSwitch(pos,"streets:beacon_flashyellow") - elseif name:find("rrfb") then - streets.tlSwitch(pos,"streets:trafficlight_rrfb_on") - else - streets.tlSwitch(pos,"streets:trafficlight_top_warn") end elseif msg == "YELLOW" then if name:find("pedlight") then @@ -273,6 +294,26 @@ streets.on_digiline_receive = function(pos, node, channel, msg) else streets.tlSwitch(pos,"streets:trafficlight_top_yellow") end + elseif msg == "REDYELLOW" then + if name:find("pedlight") then + --Not Supported + elseif name:find("extender_left") then + --Not Supported + elseif name:find("extender_right") then + --Not Supported + elseif name:find("left") then + streets.tlSwitch(pos,"streets:trafficlight_top_left_redyellow") + elseif name:find("right") then + streets.tlSwitch(pos,"streets:trafficlight_top_right_redyellow") + elseif name:find("beacon_hybrid") then + --Not Supported + elseif name:find("beacon") then + --Not Supported + elseif name:find("rrfb") then + --Not Supported + else + streets.tlSwitch(pos,"streets:trafficlight_top_redyellow") + end elseif msg == "FLASHRED" then if name:find("pedlight") then if name ~= "streets:pedlight_top_flashingdontwalk" then @@ -284,9 +325,17 @@ streets.on_digiline_receive = function(pos, node, channel, msg) elseif name:find("extender_right") then streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_off") elseif name:find("left") then - streets.tlSwitch(pos,"streets:trafficlight_top_left_flashred") + if althalfhz then + streets.tlSwitch(pos,"streets:trafficlight_top_left_flashred_alt") + else + streets.tlSwitch(pos,"streets:trafficlight_top_left_flashred") + end elseif name:find("right") then - streets.tlSwitch(pos,"streets:trafficlight_top_right_flashred") + if althalfhz then + streets.tlSwitch(pos,"streets:trafficlight_top_right_flashred_alt") + else + streets.tlSwitch(pos,"streets:trafficlight_top_right_flashred") + end elseif name:find("beacon_hybrid") then streets.tlSwitch(pos,"streets:beacon_hybrid_flashred") elseif name:find("beacon") then @@ -294,7 +343,11 @@ streets.on_digiline_receive = function(pos, node, channel, msg) elseif name:find("rrfb") then --Not Supported else - streets.tlSwitch(pos,"streets:trafficlight_top_flashred") + if althalfhz then + streets.tlSwitch(pos,"streets:trafficlight_top_flashred_alt") + else + streets.tlSwitch(pos,"streets:trafficlight_top_flashred") + end end end end @@ -787,6 +840,82 @@ minetest.register_node(":streets:trafficlight_top_extender_left_flashyellow",{ end, }) +minetest.register_node(":streets:trafficlight_top_extender_left_flashyellow_alt",{ + drop = "streets:trafficlight_top_extender_left_off", + description = streets.S("Traffic Light Left-Turn Module"), + drawtype="nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, level = 2, not_in_creative_inventory = 1}, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ + name="streets_tl_left_warn_alt.png", + animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, + }}, + digiline = { + receptor = {}, + wire = {rules=streets.tlDigilineRules}, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_left_flashgreen",{ + drop = "streets:trafficlight_top_extender_left_off", + description = streets.S("Traffic Light Left-Turn Module"), + drawtype="nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, level = 2, not_in_creative_inventory = 1}, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ + name="streets_tle_left_flashgreen.png", + animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, + }}, + digiline = { + receptor = {}, + wire = {rules=streets.tlDigilineRules}, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + minetest.register_node(":streets:trafficlight_top_extender_left_green",{ drop = "streets:trafficlight_top_extender_left_off", description = streets.S("Traffic Light Left-Turn Module"), @@ -930,6 +1059,82 @@ minetest.register_node(":streets:trafficlight_top_extender_right_flashyellow",{ end, }) +minetest.register_node(":streets:trafficlight_top_extender_right_flashyellow_alt",{ + drop = "streets:trafficlight_top_extender_right_off", + description = streets.S("Traffic Light Right-Turn Module"), + drawtype="nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, level = 2, not_in_creative_inventory = 1}, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ + name="streets_tl_right_warn_alt.png", + animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, + }}, + digiline = { + receptor = {}, + wire = {rules=streets.tlDigilineRules}, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_right_flashgreen",{ + drop = "streets:trafficlight_top_extender_right_off", + description = streets.S("Traffic Light Right-Turn Module"), + drawtype="nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, level = 2, not_in_creative_inventory = 1}, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ + name="streets_tle_right_flashgreen.png", + animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, + }}, + digiline = { + receptor = {}, + wire = {rules=streets.tlDigilineRules}, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + minetest.register_node(":streets:trafficlight_top_extender_right_green",{ drop = "streets:trafficlight_top_extender_left_off", description = streets.S("Traffic Light Right-Turn Module"), @@ -1077,6 +1282,33 @@ minetest.register_node(":streets:pedlight_top_flashingdontwalk",{ }, }) +minetest.register_node(":streets:pedlight_top_flashingwalk",{ + drop = "streets:pedlight_top_off", + groups = {cracky = 1, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ + name="streets_pl_flashingwalk.png", + animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, + }}, + node_box = { + type = "fixed", + fixed = streets.plBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = {rules=streets.tlDigilineRules}, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, +}) + minetest.register_entity(":streets:pedcountdown",{ physical = false, collisionbox = {0,0,0,0,0,0}, @@ -1209,7 +1441,29 @@ for _,i in pairs({"","_left","_right"}) do }, }) - minetest.register_alias("streets:trafficlight_top"..i.."_redyellow","streets:trafficlight_top"..i.."_green") + minetest.register_node(":streets:trafficlight_top"..i.."_redyellow",{ + drop = "streets:trafficlight_top"..i.."_off", + groups = {cracky = 1, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_redyellow.png"}, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = {rules=streets.tlDigilineRules}, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) minetest.register_node(":streets:trafficlight_top"..i.."_green",{ drop = "streets:trafficlight_top"..i.."_off", @@ -1288,6 +1542,87 @@ for _,i in pairs({"","_left","_right"}) do } }, }) + + minetest.register_node(":streets:trafficlight_top"..i.."_warn_alt",{ + drop = "streets:trafficlight_top"..i.."_off", + groups = {cracky = 1, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ + name="streets_tl"..i.."_warn_alt.png", + animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, + }}, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = {rules=streets.tlDigilineRules}, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) + + minetest.register_node(":streets:trafficlight_top"..i.."_flashred_alt",{ + drop = "streets:trafficlight_top"..i.."_off", + groups = {cracky = 1, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ + name="streets_tl"..i.."_flashred_alt.png", + animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, + }}, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = {rules=streets.tlDigilineRules}, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) + + minetest.register_node(":streets:trafficlight_top"..i.."_flashgreen",{ + drop = "streets:trafficlight_top"..i.."_off", + groups = {cracky = 1, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ + name="streets_tl"..i.."_flashgreen.png", + animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, + }}, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = {rules=streets.tlDigilineRules}, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) end minetest.register_node(":streets:trafficlight_rrfb_off",{ diff --git a/trafficlight/textures/streets_pl_flashingwalk.png b/trafficlight/textures/streets_pl_flashingwalk.png new file mode 100644 index 0000000000000000000000000000000000000000..55986d0287e5d121a4461514cbc311244df6f5ac GIT binary patch literal 2701 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 Hu0mjfB?=s} literal 0 HcmV?d00001 diff --git a/trafficlight/textures/streets_tl_flashgreen.png b/trafficlight/textures/streets_tl_flashgreen.png new file mode 100644 index 0000000000000000000000000000000000000000..dd9cb78860d0658d80e68f7be1f474de195d6d47 GIT binary patch literal 2975 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 x$oT=BAHewmoFBlwK!f}M&JSP;FaV_ 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 literal 0 HcmV?d00001 diff --git a/trafficlight/textures/streets_tl_left_flashred_alt.png b/trafficlight/textures/streets_tl_left_flashred_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..2b11eeb2b7d1438751d53c5be126e54a9d31c8b1 GIT binary patch literal 2914 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 M07*qoM6N<$f(;*DssI20 literal 0 HcmV?d00001 diff --git a/trafficlight/textures/streets_tl_left_redyellow.png b/trafficlight/textures/streets_tl_left_redyellow.png new file mode 100644 index 0000000000000000000000000000000000000000..4b58d78cd6241dcbfc65f52a165662be998354d2 GIT binary patch literal 3142 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 M07*qoM6N<$g6V5eNdN!< literal 0 HcmV?d00001 diff --git a/trafficlight/textures/streets_tl_right_flashred_alt.png b/trafficlight/textures/streets_tl_right_flashred_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..3a82b10ecdf5c97ce4ce121f8dfdd3fcc1a8325d GIT binary patch literal 2890 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 o0lXI&;9h|B1K0%^fL@J%0eoyAm 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 AW&i*H literal 0 HcmV?d00001 diff --git a/trafficlight/textures/streets_tl_right_warn_alt.png b/trafficlight/textures/streets_tl_right_warn_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..7cadbc4f4cf9eca51ba6bcc977f7b203c5027dc9 GIT binary patch literal 3009 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 DWn7St literal 0 HcmV?d00001 diff --git a/trafficlight/textures/streets_tl_warn_alt.png b/trafficlight/textures/streets_tl_warn_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..26b1387b12882ecf4a5f8d37ee3c27423d95b254 GIT binary patch literal 2929 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 Hu0mjf49Rsc literal 0 HcmV?d00001