From 1efe6ea22994eac8396a1ca464b8207a58d87b9f Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 14:10:38 -0700 Subject: [PATCH 001/160] Change license to CC0 --- LICENSE.txt | 134 +++++++++++++++++++++++++++++++++++++++++++++++----- README.md | 2 +- init.lua | 3 -- mod.conf | 4 +- 4 files changed, 124 insertions(+), 19 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index 9042c25..0e259d4 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,13 +1,121 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/README.md b/README.md index 77b9f63..94891b4 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Fork of [PilzAdam's ***clean*** mod][f.pilzadam] for Minetest. --- ### **Licensing:** -[WTFPL](LICENSE.txt) +[CC0](LICENSE.txt) [Minetest]: http://www.minetest.net/ diff --git a/init.lua b/init.lua index bbdbca2..1e308c0 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,3 @@ --- clean by PilzAdam --- LICENSE: WTFPL - local old_nodes = {} local old_entities = {} diff --git a/mod.conf b/mod.conf index a2e790c..ffa2c75 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = clean -author = PilzAdam -license = WTFPL +author = PilzAdam, Jordan Irwin (AntumDeluge) +license = CC0 version = 0.1 From d9c7f9bab5f8a2abae59fb39d331b72fb7b4a3a7 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 14:12:44 -0700 Subject: [PATCH 002/160] Call 'core' object instead of 'minetest' --- init.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/init.lua b/init.lua index 1e308c0..2921460 100644 --- a/init.lua +++ b/init.lua @@ -7,27 +7,27 @@ local replace_nodes = {} -- "Replaces" an old/non-existent node local function replace_node(old_node, new_node) - minetest.register_alias(old_node, new_node) + core.register_alias(old_node, new_node) end for _,node_name in ipairs(old_nodes) do - minetest.register_node(':'..node_name, { + core.register_node(':'..node_name, { groups = {old=1}, }) end -minetest.register_abm({ +core.register_abm({ nodenames = {'group:old'}, interval = 1, chance = 1, action = function(pos, node) - minetest.remove_node(pos) + core.remove_node(pos) end, }) for _,entity_name in ipairs(old_entities) do - minetest.register_entity(':'..entity_name, { + core.register_entity(':'..entity_name, { on_activate = function(self, staticdata) self.object:remove() end, From 3b02b109f5cc06b4483ffdd52af68cf8b017f5b6 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 14:14:55 -0700 Subject: [PATCH 003/160] Small formatting changes --- init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/init.lua b/init.lua index 2921460..bf32e2a 100644 --- a/init.lua +++ b/init.lua @@ -12,7 +12,7 @@ end for _,node_name in ipairs(old_nodes) do - core.register_node(':'..node_name, { + core.register_node(':' .. node_name, { groups = {old=1}, }) end @@ -26,8 +26,8 @@ core.register_abm({ end, }) -for _,entity_name in ipairs(old_entities) do - core.register_entity(':'..entity_name, { +for _, entity_name in ipairs(old_entities) do + core.register_entity(':' .. entity_name, { on_activate = function(self, staticdata) self.object:remove() end, From 9200ed9c20ab593520ff2e12e3f42937e0a7600f Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 14:38:48 -0700 Subject: [PATCH 004/160] Add objects & functions for outputting log info --- init.lua | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/init.lua b/init.lua index bf32e2a..41b4d76 100644 --- a/init.lua +++ b/init.lua @@ -1,3 +1,23 @@ +--[[ Clean mod + License: CC0 +]] + + +clean = {} +clean.name = core.get_current_modname() + +local debug = core.settings:get_bool('enable_debug_mods') + +local function log(level, msg) + core.log(level, '[' .. clean.name .. '] ' .. msg) +end + +local function logDebug(msg) + if debug then + core.log('DEBUG: [' .. clean.name .. '] ' .. msg) + end +end + local old_nodes = {} local old_entities = {} From a0a3dc370d4aa177e8523b6c57a8f383e75ea021 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 14:39:12 -0700 Subject: [PATCH 005/160] Load entities to clean from file in world path --- init.lua | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/init.lua b/init.lua index 41b4d76..da7eb29 100644 --- a/init.lua +++ b/init.lua @@ -46,7 +46,34 @@ core.register_abm({ end, }) + +-- Populate entities list from file in world path +local e_list = nil +local e_path = core.get_worldpath() .. '/clean_entities.txt' +local e_file = io.open(e_path, 'r') +if e_file then + e_list = e_file:read('*a') + e_file:close() +else + -- Create empty file + e_file = io.open(e_path, 'w') + if e_file then + e_file:close() + end +end + +if e_list then + logDebug('Loading entities to clean from file ...') + + e_list = string.split(e_list, '\n') + for _, entity_name in ipairs(e_list) do + table.insert(old_entities, entity_name) + end +end + for _, entity_name in ipairs(old_entities) do + logDebug('Cleaning entity: ' .. entity_name) + core.register_entity(':' .. entity_name, { on_activate = function(self, staticdata) self.object:remove() From f7e12b5f77e0410edf67f730248ca22619264f96 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 14:39:40 -0700 Subject: [PATCH 006/160] Increment version to 0.2 --- mod.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod.conf b/mod.conf index ffa2c75..2234972 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = clean author = PilzAdam, Jordan Irwin (AntumDeluge) license = CC0 -version = 0.1 +version = 0.2 From 49fc2c6315d1742602966c6043b06e7e89a9edb6 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 14:54:33 -0700 Subject: [PATCH 007/160] Rename to 'cleane' (Clean Entities) --- README.md | 2 +- description.txt | 2 +- init.lua | 10 +++++----- mod.conf | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 94891b4..f4bc13f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Clean mod for [Minetest][] +## Clean Entities ([i]cleane[/i]) mod for [Minetest][] --- diff --git a/description.txt b/description.txt index f04ad33..77d1397 100644 --- a/description.txt +++ b/description.txt @@ -1 +1 @@ -A very simple mod that deletes unknown blocks and removes unknown entities. +Clean Entities. A simple mod that removes unknown entities. diff --git a/init.lua b/init.lua index da7eb29..38cf5a5 100644 --- a/init.lua +++ b/init.lua @@ -1,20 +1,20 @@ ---[[ Clean mod +--[[ Clean Entities mod License: CC0 ]] -clean = {} -clean.name = core.get_current_modname() +cleane = {} +cleane.name = core.get_current_modname() local debug = core.settings:get_bool('enable_debug_mods') local function log(level, msg) - core.log(level, '[' .. clean.name .. '] ' .. msg) + core.log(level, '[' .. cleane.name .. '] ' .. msg) end local function logDebug(msg) if debug then - core.log('DEBUG: [' .. clean.name .. '] ' .. msg) + core.log('DEBUG: [' .. cleane.name .. '] ' .. msg) end end diff --git a/mod.conf b/mod.conf index 2234972..fd3fe7d 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ -name = clean +name = cleane author = PilzAdam, Jordan Irwin (AntumDeluge) license = CC0 version = 0.2 From 6622ea8bab556f60c5591147778a7c2f5a9061ff Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 14:57:18 -0700 Subject: [PATCH 008/160] Remove functionality for cleaning anything other than entities: For cleaning other objects it is recommended to use 'override' mod: https://github.com/AntumMT/mod-override --- init.lua | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/init.lua b/init.lua index 38cf5a5..0b29e5b 100644 --- a/init.lua +++ b/init.lua @@ -18,35 +18,9 @@ local function logDebug(msg) end end -local old_nodes = {} + local old_entities = {} --- Old/Missing nodes that should be replaced with something currently in game -local replace_nodes = {} - - --- "Replaces" an old/non-existent node -local function replace_node(old_node, new_node) - core.register_alias(old_node, new_node) -end - - -for _,node_name in ipairs(old_nodes) do - core.register_node(':' .. node_name, { - groups = {old=1}, - }) -end - -core.register_abm({ - nodenames = {'group:old'}, - interval = 1, - chance = 1, - action = function(pos, node) - core.remove_node(pos) - end, -}) - - -- Populate entities list from file in world path local e_list = nil local e_path = core.get_worldpath() .. '/clean_entities.txt' @@ -80,8 +54,3 @@ for _, entity_name in ipairs(old_entities) do end, }) end - --- Replace old nodes -for _, node_group in pairs(replace_nodes) do - replace_node(node_group[1], node_group[2]) -end From 5054f4c185e7767a1247149f054f6c6a18641f2b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 14:58:28 -0700 Subject: [PATCH 009/160] Increment version to 0.3 --- mod.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod.conf b/mod.conf index fd3fe7d..75892c5 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = cleane author = PilzAdam, Jordan Irwin (AntumDeluge) license = CC0 -version = 0.2 +version = 0.3 From c5e9b10fcb97d652861cfe33f4b771cd1014b6d7 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 15:01:24 -0700 Subject: [PATCH 010/160] README: Fix Markdown formatting --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4bc13f..e7c3f02 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Clean Entities ([i]cleane[/i]) mod for [Minetest][] +## Clean Entities (*cleane*) mod for [Minetest][] --- From 0fcbdb8edfeb2f7b6759a2d3bb6b950b0bf76f2a Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 15:15:03 -0700 Subject: [PATCH 011/160] Rename to 'cleaner' --- README.md | 2 +- description.txt | 2 +- init.lua | 10 +++++----- mod.conf | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e7c3f02..349ec8c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Clean Entities (*cleane*) mod for [Minetest][] +## Cleaner mod for [Minetest][] --- diff --git a/description.txt b/description.txt index 77d1397..8f895d0 100644 --- a/description.txt +++ b/description.txt @@ -1 +1 @@ -Clean Entities. A simple mod that removes unknown entities. +A simple mod that can be used to remove unknown entities. diff --git a/init.lua b/init.lua index 0b29e5b..f369431 100644 --- a/init.lua +++ b/init.lua @@ -1,20 +1,20 @@ ---[[ Clean Entities mod +--[[ Cleaner mod License: CC0 ]] -cleane = {} -cleane.name = core.get_current_modname() +cleaner = {} +cleaner.name = core.get_current_modname() local debug = core.settings:get_bool('enable_debug_mods') local function log(level, msg) - core.log(level, '[' .. cleane.name .. '] ' .. msg) + core.log(level, '[' .. cleaner.name .. '] ' .. msg) end local function logDebug(msg) if debug then - core.log('DEBUG: [' .. cleane.name .. '] ' .. msg) + core.log('DEBUG: [' .. cleaner.name .. '] ' .. msg) end end diff --git a/mod.conf b/mod.conf index 75892c5..e4b3015 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ -name = cleane +name = cleaner author = PilzAdam, Jordan Irwin (AntumDeluge) license = CC0 version = 0.3 From 04338946daf28369d570128c34f7778c2f49871f Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 15:16:14 -0700 Subject: [PATCH 012/160] README: List requirements --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 349ec8c..d2dd34e 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,13 @@ Fork of [PilzAdam's ***clean*** mod][f.pilzadam] for Minetest. +--- +### **Requirements:** + +- Minetest 0.4.16 or newer +- Depends: none + + --- ### **Licensing:** From 388e5481e73729aa6a0d706dc800cc9f6753bd9a Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 15:26:59 -0700 Subject: [PATCH 013/160] Re-add functionality to clean nodes: Nodes to clean can be listed in 'clean_nodes.txt' file in world path. --- README.md | 2 +- description.txt | 2 +- init.lua | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d2dd34e..15faf00 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ --- ### **Description:** -Fork of [PilzAdam's ***clean*** mod][f.pilzadam] for Minetest. +A simple Minetest mod that can be used to remove unknown entities & nodes. Forked from [PilzAdam's ***clean*** mod][f.pilzadam]. --- diff --git a/description.txt b/description.txt index 8f895d0..6611e0e 100644 --- a/description.txt +++ b/description.txt @@ -1 +1 @@ -A simple mod that can be used to remove unknown entities. +A simple mod that can be used to remove unknown entities & nodes. diff --git a/init.lua b/init.lua index f369431..1051499 100644 --- a/init.lua +++ b/init.lua @@ -19,6 +19,8 @@ local function logDebug(msg) end +-- ENTITIES + local old_entities = {} -- Populate entities list from file in world path @@ -54,3 +56,47 @@ for _, entity_name in ipairs(old_entities) do end, }) end + + +-- NODES + +local old_nodes = {} + +-- Populate nodes list from file in world path +local n_list = nil +local n_path = core.get_worldpath() .. '/clean_nodes.txt' +local n_file = io.open(n_path, 'r') +if n_file then + n_list = n_file:read('*a') + n_file:close() +else + -- Create empty file + n_file = io.open(n_path, 'w') + if n_file then + n_file:close() + end +end + +if n_list then + logDebug('Loading nodes to clean from file ...') + + n_list = string.split(n_list, '\n') + for _, node_name in ipairs(n_list) do + table.insert(old_nodes, node_name) + end +end + +for _, node_name in ipairs(old_nodes) do + core.register_node(':' .. node_name, { + groups = {old=1}, + }) +end + +core.register_abm({ + nodenames = {'group:old'}, + interval = 1, + chance = 1, + action = function(pos, node) + core.remove_node(pos) + end, +}) From 076211d48c3f8db49668b8f48fd0b42a9f63f3a6 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 15:33:53 -0700 Subject: [PATCH 014/160] Add log debug message for registering node to clean --- init.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/init.lua b/init.lua index 1051499..d5ff4e2 100644 --- a/init.lua +++ b/init.lua @@ -87,6 +87,8 @@ if n_list then end for _, node_name in ipairs(old_nodes) do + logDebug('Cleaning node: ' .. node_name) + core.register_node(':' .. node_name, { groups = {old=1}, }) From 68222b14799414a231a3f16511c019af11813b15 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 30 Aug 2017 15:34:10 -0700 Subject: [PATCH 015/160] Increment version to 0.4 --- mod.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod.conf b/mod.conf index e4b3015..b3976df 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = cleaner author = PilzAdam, Jordan Irwin (AntumDeluge) license = CC0 -version = 0.3 +version = 0.4 From 6d4fb21114f01a0faa1bb653efe4ccb81e485c1c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 17:44:59 -0700 Subject: [PATCH 016/160] Move description into mod.conf --- description.txt | 1 - mod.conf | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 description.txt diff --git a/description.txt b/description.txt deleted file mode 100644 index 6611e0e..0000000 --- a/description.txt +++ /dev/null @@ -1 +0,0 @@ -A simple mod that can be used to remove unknown entities & nodes. diff --git a/mod.conf b/mod.conf index b3976df..e5f963d 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,5 @@ name = cleaner +description = A simple mod that can be used to remove unknown entities & nodes. author = PilzAdam, Jordan Irwin (AntumDeluge) license = CC0 version = 0.4 From 1f169c5774aed69903d50f7dcf46c511b4023955 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 17:46:18 -0700 Subject: [PATCH 017/160] Change license to MIT --- LICENSE.txt | 134 +++++++--------------------------------------------- README.md | 15 +++--- init.lua | 2 +- mod.conf | 2 +- 4 files changed, 25 insertions(+), 128 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index 0e259d4..357bcd0 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,121 +1,21 @@ -Creative Commons Legal Code +The MIT License (MIT) -CC0 1.0 Universal +Copyright © 2021 Jordan Irwin (AntumDeluge) - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: -Statement of Purpose + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 15faf00..622915c 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,20 @@ -## Cleaner mod for [Minetest][] - +## Cleaner mod for Minetest --- -### **Description:** - -A simple Minetest mod that can be used to remove unknown entities & nodes. Forked from [PilzAdam's ***clean*** mod][f.pilzadam]. +### Description: +A simple [Minetest][] mod that can be used to remove unknown entities & nodes. Forked from [PilzAdam's ***clean*** mod][f.pilzadam]. --- -### **Requirements:** +### Requirements: - Minetest 0.4.16 or newer - Depends: none - --- -### **Licensing:** +### Licensing: -[CC0](LICENSE.txt) +[MIT](LICENSE.txt) [Minetest]: http://www.minetest.net/ diff --git a/init.lua b/init.lua index d5ff4e2..e3692ab 100644 --- a/init.lua +++ b/init.lua @@ -1,5 +1,5 @@ --[[ Cleaner mod - License: CC0 + License: MIT ]] diff --git a/mod.conf b/mod.conf index e5f963d..c8a5149 100644 --- a/mod.conf +++ b/mod.conf @@ -1,5 +1,5 @@ name = cleaner description = A simple mod that can be used to remove unknown entities & nodes. author = PilzAdam, Jordan Irwin (AntumDeluge) -license = CC0 +license = MIT version = 0.4 From 9130ca10349de63204cf7e17df24489e6618abab Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 17:55:36 -0700 Subject: [PATCH 018/160] Add changelog & TODO list --- CHANGES.txt | 23 +++++++++++++++++++++++ TODO.txt | 3 +++ 2 files changed, 26 insertions(+) create mode 100644 CHANGES.txt create mode 100644 TODO.txt diff --git a/CHANGES.txt b/CHANGES.txt new file mode 100644 index 0000000..81342f4 --- /dev/null +++ b/CHANGES.txt @@ -0,0 +1,23 @@ + +0.5 +- changed license to MIT + + +0.4 +- changed technical name to "cleaner" +- re-added functionality to clean nodes + + +0.3 +- removed functionality for cleaning anything other than entities + + +0.2 +- changed license to CC0 +- added some log output +- entities to be cleaned can be configured & loaded from world directory + + +0.1 +- forked from PilzAdam's "clean" mod @ forum post updated: 2013-06-08 +- replaced deprecated call to "minetest.env" diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..9b8ef00 --- /dev/null +++ b/TODO.txt @@ -0,0 +1,3 @@ + +TODO: +- allow nodes to be cleaned to be replaced by another node From 5a918081e2381e99e5bc489c641a3f05152c5d27 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 17:57:07 -0700 Subject: [PATCH 019/160] Cleanup --- init.lua | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/init.lua b/init.lua index e3692ab..5a3242e 100644 --- a/init.lua +++ b/init.lua @@ -6,15 +6,15 @@ cleaner = {} cleaner.name = core.get_current_modname() -local debug = core.settings:get_bool('enable_debug_mods') +local debug = core.settings:get_bool("enable_debug_mods") local function log(level, msg) - core.log(level, '[' .. cleaner.name .. '] ' .. msg) + core.log(level, "[" .. cleaner.name .. "] " .. msg) end local function logDebug(msg) if debug then - core.log('DEBUG: [' .. cleaner.name .. '] ' .. msg) + core.log("DEBUG: [" .. cleaner.name .. "] " .. msg) end end @@ -25,32 +25,32 @@ local old_entities = {} -- Populate entities list from file in world path local e_list = nil -local e_path = core.get_worldpath() .. '/clean_entities.txt' -local e_file = io.open(e_path, 'r') +local e_path = core.get_worldpath() .. "/clean_entities.txt" +local e_file = io.open(e_path, "r") if e_file then - e_list = e_file:read('*a') + e_list = e_file:read("*a") e_file:close() else -- Create empty file - e_file = io.open(e_path, 'w') + e_file = io.open(e_path, "w") if e_file then e_file:close() end end if e_list then - logDebug('Loading entities to clean from file ...') - - e_list = string.split(e_list, '\n') + logDebug("Loading entities to clean from file ...") + + e_list = string.split(e_list, "\n") for _, entity_name in ipairs(e_list) do table.insert(old_entities, entity_name) end end for _, entity_name in ipairs(old_entities) do - logDebug('Cleaning entity: ' .. entity_name) - - core.register_entity(':' .. entity_name, { + logDebug("Cleaning entity: " .. entity_name) + + core.register_entity(":" .. entity_name, { on_activate = function(self, staticdata) self.object:remove() end, @@ -64,38 +64,38 @@ local old_nodes = {} -- Populate nodes list from file in world path local n_list = nil -local n_path = core.get_worldpath() .. '/clean_nodes.txt' -local n_file = io.open(n_path, 'r') +local n_path = core.get_worldpath() .. "/clean_nodes.txt" +local n_file = io.open(n_path, "r") if n_file then - n_list = n_file:read('*a') + n_list = n_file:read("*a") n_file:close() else -- Create empty file - n_file = io.open(n_path, 'w') + n_file = io.open(n_path, "w") if n_file then n_file:close() end end if n_list then - logDebug('Loading nodes to clean from file ...') - - n_list = string.split(n_list, '\n') + logDebug("Loading nodes to clean from file ...") + + n_list = string.split(n_list, "\n") for _, node_name in ipairs(n_list) do table.insert(old_nodes, node_name) end end for _, node_name in ipairs(old_nodes) do - logDebug('Cleaning node: ' .. node_name) - - core.register_node(':' .. node_name, { + logDebug("Cleaning node: " .. node_name) + + core.register_node(":" .. node_name, { groups = {old=1}, }) end core.register_abm({ - nodenames = {'group:old'}, + nodenames = {"group:old"}, interval = 1, chance = 1, action = function(pos, node) From 5c58fd8f5dc5869b5de783de169eb7fce12bcc74 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 18:04:33 -0700 Subject: [PATCH 020/160] Clean up logging a tad --- init.lua | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/init.lua b/init.lua index 5a3242e..d9fac5c 100644 --- a/init.lua +++ b/init.lua @@ -4,18 +4,20 @@ cleaner = {} -cleaner.name = core.get_current_modname() +cleaner.modname = core.get_current_modname() -local debug = core.settings:get_bool("enable_debug_mods") +local cleaner_debug = core.settings:get_bool("enable_debug_mods", false) -local function log(level, msg) - core.log(level, "[" .. cleaner.name .. "] " .. msg) -end +function cleaner.log(lvl, msg) + if lvl == "debug" and not cleaner_debug then return end -local function logDebug(msg) - if debug then - core.log("DEBUG: [" .. cleaner.name .. "] " .. msg) + msg = "[" .. cleaner.modname .. "] " .. msg + if lvl == "debug" then + msg = "[DEBUG] " .. msg + lvl = nil end + + core.log(lvl, msg) end @@ -39,7 +41,7 @@ else end if e_list then - logDebug("Loading entities to clean from file ...") + cleaner.log("debug", "Loading entities to clean from file ...") e_list = string.split(e_list, "\n") for _, entity_name in ipairs(e_list) do @@ -48,7 +50,7 @@ if e_list then end for _, entity_name in ipairs(old_entities) do - logDebug("Cleaning entity: " .. entity_name) + cleaner.log("debug", "Cleaning entity: " .. entity_name) core.register_entity(":" .. entity_name, { on_activate = function(self, staticdata) @@ -78,7 +80,7 @@ else end if n_list then - logDebug("Loading nodes to clean from file ...") + cleaner.log("debug", "Loading nodes to clean from file ...") n_list = string.split(n_list, "\n") for _, node_name in ipairs(n_list) do @@ -87,7 +89,7 @@ if n_list then end for _, node_name in ipairs(old_nodes) do - logDebug("Cleaning node: " .. node_name) + cleaner.log("debug", "Cleaning node: " .. node_name) core.register_node(":" .. node_name, { groups = {old=1}, From 839c32f5c00ee95ad3b2154b911e37c792569a5f Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 18:11:24 -0700 Subject: [PATCH 021/160] Move node & entity functions into segregated modules --- entities.lua | 37 ++++++++++++++++++++++ init.lua | 88 +++++----------------------------------------------- nodes.lua | 44 ++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 81 deletions(-) create mode 100644 entities.lua create mode 100644 nodes.lua diff --git a/entities.lua b/entities.lua new file mode 100644 index 0000000..8eae2cf --- /dev/null +++ b/entities.lua @@ -0,0 +1,37 @@ + +local old_entities = {} + +-- Populate entities list from file in world path +local e_list = nil +local e_path = core.get_worldpath() .. "/clean_entities.txt" +local e_file = io.open(e_path, "r") + +if e_file then + e_list = e_file:read("*a") + e_file:close() +else + -- Create empty file + e_file = io.open(e_path, "w") + if e_file then + e_file:close() + end +end + +if e_list then + cleaner.log("debug", "Loading entities to clean from file ...") + + e_list = string.split(e_list, "\n") + for _, entity_name in ipairs(e_list) do + table.insert(old_entities, entity_name) + end +end + +for _, entity_name in ipairs(old_entities) do + cleaner.log("debug", "Cleaning entity: " .. entity_name) + + core.register_entity(":" .. entity_name, { + on_activate = function(self, staticdata) + self.object:remove() + end, + }) +end diff --git a/init.lua b/init.lua index d9fac5c..2119774 100644 --- a/init.lua +++ b/init.lua @@ -5,6 +5,7 @@ cleaner = {} cleaner.modname = core.get_current_modname() +cleaner.modpath = core.get_modpath(cleaner.modname) local cleaner_debug = core.settings:get_bool("enable_debug_mods", false) @@ -21,86 +22,11 @@ function cleaner.log(lvl, msg) end --- ENTITIES +local scripts = { + "entities", + "nodes", +} -local old_entities = {} - --- Populate entities list from file in world path -local e_list = nil -local e_path = core.get_worldpath() .. "/clean_entities.txt" -local e_file = io.open(e_path, "r") -if e_file then - e_list = e_file:read("*a") - e_file:close() -else - -- Create empty file - e_file = io.open(e_path, "w") - if e_file then - e_file:close() - end +for _, script in ipairs(scripts) do + dofile(cleaner.modpath .. "/" .. script .. ".lua") end - -if e_list then - cleaner.log("debug", "Loading entities to clean from file ...") - - e_list = string.split(e_list, "\n") - for _, entity_name in ipairs(e_list) do - table.insert(old_entities, entity_name) - end -end - -for _, entity_name in ipairs(old_entities) do - cleaner.log("debug", "Cleaning entity: " .. entity_name) - - core.register_entity(":" .. entity_name, { - on_activate = function(self, staticdata) - self.object:remove() - end, - }) -end - - --- NODES - -local old_nodes = {} - --- Populate nodes list from file in world path -local n_list = nil -local n_path = core.get_worldpath() .. "/clean_nodes.txt" -local n_file = io.open(n_path, "r") -if n_file then - n_list = n_file:read("*a") - n_file:close() -else - -- Create empty file - n_file = io.open(n_path, "w") - if n_file then - n_file:close() - end -end - -if n_list then - cleaner.log("debug", "Loading nodes to clean from file ...") - - n_list = string.split(n_list, "\n") - for _, node_name in ipairs(n_list) do - table.insert(old_nodes, node_name) - end -end - -for _, node_name in ipairs(old_nodes) do - cleaner.log("debug", "Cleaning node: " .. node_name) - - core.register_node(":" .. node_name, { - groups = {old=1}, - }) -end - -core.register_abm({ - nodenames = {"group:old"}, - interval = 1, - chance = 1, - action = function(pos, node) - core.remove_node(pos) - end, -}) diff --git a/nodes.lua b/nodes.lua new file mode 100644 index 0000000..c0e2005 --- /dev/null +++ b/nodes.lua @@ -0,0 +1,44 @@ + +local old_nodes = {} + +-- Populate nodes list from file in world path +local n_list = nil +local n_path = core.get_worldpath() .. "/clean_nodes.txt" +local n_file = io.open(n_path, "r") + +if n_file then + n_list = n_file:read("*a") + n_file:close() +else + -- Create empty file + n_file = io.open(n_path, "w") + if n_file then + n_file:close() + end +end + +if n_list then + cleaner.log("debug", "Loading nodes to clean from file ...") + + n_list = string.split(n_list, "\n") + for _, node_name in ipairs(n_list) do + table.insert(old_nodes, node_name) + end +end + +for _, node_name in ipairs(old_nodes) do + cleaner.log("debug", "Cleaning node: " .. node_name) + + core.register_node(":" .. node_name, { + groups = {old=1}, + }) +end + +core.register_abm({ + nodenames = {"group:old"}, + interval = 1, + chance = 1, + action = function(pos, node) + core.remove_node(pos) + end, +}) From 00ab41d6de69f3b9d9ff0299544e4539e24fa781 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 19:57:24 -0700 Subject: [PATCH 022/160] Fix logging method --- init.lua | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index 2119774..42e47c0 100644 --- a/init.lua +++ b/init.lua @@ -12,13 +12,22 @@ local cleaner_debug = core.settings:get_bool("enable_debug_mods", false) function cleaner.log(lvl, msg) if lvl == "debug" and not cleaner_debug then return end + if lvl and not msg then + msg = lvl + lvl = nil + end + msg = "[" .. cleaner.modname .. "] " .. msg if lvl == "debug" then msg = "[DEBUG] " .. msg lvl = nil end - core.log(lvl, msg) + if not lvl then + core.log(msg) + else + core.log(lvl, msg) + end end From 871981ddd787ec50a7be856902eae925f8315c28 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 19:57:56 -0700 Subject: [PATCH 023/160] Convert to json format for clean_entities file --- entities.lua | 66 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/entities.lua b/entities.lua index 8eae2cf..3f37dde 100644 --- a/entities.lua +++ b/entities.lua @@ -1,35 +1,67 @@ -local old_entities = {} +local function clean_duplicates(t) + local tmp = {} + for _, v in ipairs(t) do + tmp[v] = true + end + + t = {} + for k in pairs(tmp) do + table.insert(t, k) + end + + return t +end -- Populate entities list from file in world path -local e_list = nil -local e_path = core.get_worldpath() .. "/clean_entities.txt" +local e_list = {remove={}} +local e_path = core.get_worldpath() .. "/clean_entities.json" local e_file = io.open(e_path, "r") if e_file then - e_list = e_file:read("*a") + local data_in = core.parse_json(e_file:read("*a")) e_file:close() -else - -- Create empty file - e_file = io.open(e_path, "w") - if e_file then - e_file:close() + if data_in then + for _, e in ipairs(data_in.remove) do + table.insert(e_list.remove, e) + end end end -if e_list then - cleaner.log("debug", "Loading entities to clean from file ...") +-- backward compat +local e_path_old = core.get_worldpath() .. "/clean_entities.txt" +e_file = io.open(e_path_old, "r") - e_list = string.split(e_list, "\n") - for _, entity_name in ipairs(e_list) do - table.insert(old_entities, entity_name) +if e_file then + cleaner.log("action", "found deprecated clean_entities.txt, converting to json") + + local data = string.split(e_file:read("*a"), "\n") + for _, e in ipairs(data) do + e = e:trim() + if e ~= "" and e:sub(1, 1) ~= "#" then + table.insert(e_list.remove, e) + end end + + e_file:close() + os.rename(e_path_old, e_path_old .. ".bak") -- don't read deprecated file again end -for _, entity_name in ipairs(old_entities) do - cleaner.log("debug", "Cleaning entity: " .. entity_name) +e_list.remove = clean_duplicates(e_list.remove) - core.register_entity(":" .. entity_name, { +-- update json file with any changes +e_file = io.open(e_path, "w") +if e_file then + local data = core.write_json(e_list, true):gsub("\"remove\" : null", "\"remove\" : []") + e_file:write(data) + e_file:close() +end + + +for _, e in ipairs(e_list.remove) do + cleaner.log("debug", "Cleaning entity: " .. e) + + core.register_entity(":" .. e, { on_activate = function(self, staticdata) self.object:remove() end, From d69e47ca2a24a4dd92453baed87913c4f8a6564e Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 20:11:38 -0700 Subject: [PATCH 024/160] Convert to json format for clean_nodes file --- entities.lua | 26 ++++++--------------- misc_functions.lua | 19 ++++++++++++++++ nodes.lua | 57 ++++++++++++++++++++++++++++++---------------- 3 files changed, 64 insertions(+), 38 deletions(-) create mode 100644 misc_functions.lua diff --git a/entities.lua b/entities.lua index 3f37dde..fcfec44 100644 --- a/entities.lua +++ b/entities.lua @@ -1,19 +1,7 @@ -local function clean_duplicates(t) - local tmp = {} - for _, v in ipairs(t) do - tmp[v] = true - end +local misc = dofile(cleaner.modpath .. "/misc_functions.lua") - t = {} - for k in pairs(tmp) do - table.insert(t, k) - end - - return t -end - --- Populate entities list from file in world path +-- populate entities list from file in world path local e_list = {remove={}} local e_path = core.get_worldpath() .. "/clean_entities.json" local e_file = io.open(e_path, "r") @@ -35,8 +23,8 @@ e_file = io.open(e_path_old, "r") if e_file then cleaner.log("action", "found deprecated clean_entities.txt, converting to json") - local data = string.split(e_file:read("*a"), "\n") - for _, e in ipairs(data) do + local data_in = string.split(e_file:read("*a"), "\n") + for _, e in ipairs(data_in) do e = e:trim() if e ~= "" and e:sub(1, 1) ~= "#" then table.insert(e_list.remove, e) @@ -47,13 +35,13 @@ if e_file then os.rename(e_path_old, e_path_old .. ".bak") -- don't read deprecated file again end -e_list.remove = clean_duplicates(e_list.remove) +e_list.remove = misc.clean_duplicates(e_list.remove) -- update json file with any changes e_file = io.open(e_path, "w") if e_file then - local data = core.write_json(e_list, true):gsub("\"remove\" : null", "\"remove\" : []") - e_file:write(data) + local data_out = core.write_json(e_list, true):gsub("\"remove\" : null", "\"remove\" : []") + e_file:write(data_out) e_file:close() end diff --git a/misc_functions.lua b/misc_functions.lua new file mode 100644 index 0000000..0134e04 --- /dev/null +++ b/misc_functions.lua @@ -0,0 +1,19 @@ + +local function clean_duplicates(t) + local tmp = {} + for _, v in ipairs(t) do + tmp[v] = true + end + + t = {} + for k in pairs(tmp) do + table.insert(t, k) + end + + return t +end + + +return { + clean_duplicates = clean_duplicates, +} diff --git a/nodes.lua b/nodes.lua index c0e2005..ba4de1b 100644 --- a/nodes.lua +++ b/nodes.lua @@ -1,35 +1,54 @@ -local old_nodes = {} +local misc = dofile(cleaner.modpath .. "/misc_functions.lua") --- Populate nodes list from file in world path -local n_list = nil -local n_path = core.get_worldpath() .. "/clean_nodes.txt" +-- populate nodes list from file in world path +local n_list = {remove={}} +local n_path = core.get_worldpath() .. "/clean_nodes.json" local n_file = io.open(n_path, "r") if n_file then - n_list = n_file:read("*a") + local data_in = core.parse_json(n_file:read("*a")) n_file:close() -else - -- Create empty file - n_file = io.open(n_path, "w") - if n_file then - n_file:close() + if data_in then + for _, n in ipairs(data_in.remove) do + table.insert(n_list.remove, n) + end end end -if n_list then - cleaner.log("debug", "Loading nodes to clean from file ...") +-- backward compat +local n_path_old = core.get_worldpath() .. "/clean_nodes.txt" +n_file = io.open(n_path_old, "r") - n_list = string.split(n_list, "\n") - for _, node_name in ipairs(n_list) do - table.insert(old_nodes, node_name) +if n_file then + cleaner.log("action", "found deprecated clean_nodes.txt, converting to json") + + local data_in = string.split(n_file:read("*a"), "\n") + for _, e in ipairs(data_in) do + e = e:trim() + if e ~= "" and e:sub(1, 1) ~= "#" then + table.insert(n_list.remove, e) + end end + + n_file:close() + os.rename(n_path_old, n_path_old .. ".bak") -- don't read deprecated file again end -for _, node_name in ipairs(old_nodes) do - cleaner.log("debug", "Cleaning node: " .. node_name) +n_list.remove = misc.clean_duplicates(n_list.remove) - core.register_node(":" .. node_name, { +-- update json file with any changes +n_file = io.open(n_path, "w") +if n_file then + local data_out = core.write_json(n_list, true):gsub("\"remove\" : null", "\"remove\" : []") + n_file:write(data_out) + n_file:close() +end + +for _, n in ipairs(n_list.remove) do + cleaner.log("debug", "Cleaning node: " .. n) + + core.register_node(":" .. n, { groups = {old=1}, }) end @@ -39,6 +58,6 @@ core.register_abm({ interval = 1, chance = 1, action = function(pos, node) - core.remove_node(pos) + core.remove_node(pos) end, }) From 8a7fc3ca04938ff5961293b57b17f08f40ebaeae Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 20:12:41 -0700 Subject: [PATCH 025/160] Update changelog --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index 81342f4..caf56c8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,7 @@ 0.5 - changed license to MIT +- "clean_entities" & "clean_nodes" files now use json format 0.4 From 35f409c5c0a4986ca63069ce2cc9c47460a4a032 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 20:50:14 -0700 Subject: [PATCH 026/160] Support replacing nodes --- CHANGES.txt | 1 + entities.lua | 4 +--- nodes.lua | 31 ++++++++++++++++++++++++------- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index caf56c8..3ac980a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,7 @@ 0.5 - changed license to MIT - "clean_entities" & "clean_nodes" files now use json format +- nodes can be replaced with other nodes 0.4 diff --git a/entities.lua b/entities.lua index fcfec44..a0276e5 100644 --- a/entities.lua +++ b/entities.lua @@ -10,9 +10,7 @@ if e_file then local data_in = core.parse_json(e_file:read("*a")) e_file:close() if data_in then - for _, e in ipairs(data_in.remove) do - table.insert(e_list.remove, e) - end + e_list = data_in end end diff --git a/nodes.lua b/nodes.lua index ba4de1b..e19e67e 100644 --- a/nodes.lua +++ b/nodes.lua @@ -2,7 +2,7 @@ local misc = dofile(cleaner.modpath .. "/misc_functions.lua") -- populate nodes list from file in world path -local n_list = {remove={}} +local n_list = {remove={}, replace={}} local n_path = core.get_worldpath() .. "/clean_nodes.json" local n_file = io.open(n_path, "r") @@ -10,9 +10,7 @@ if n_file then local data_in = core.parse_json(n_file:read("*a")) n_file:close() if data_in then - for _, n in ipairs(data_in.remove) do - table.insert(n_list.remove, n) - end + n_list = data_in end end @@ -40,7 +38,12 @@ n_list.remove = misc.clean_duplicates(n_list.remove) -- update json file with any changes n_file = io.open(n_path, "w") if n_file then - local data_out = core.write_json(n_list, true):gsub("\"remove\" : null", "\"remove\" : []") + local data_out = core.write_json(n_list, true) + + -- FIXME: how to do this with a single regex? + data_out = data_out:gsub("\"remove\" : null", "\"remove\" : []") + data_out = data_out:gsub("\"replace\" : null", "\"replace\" : {}") + n_file:write(data_out) n_file:close() end @@ -49,15 +52,29 @@ for _, n in ipairs(n_list.remove) do cleaner.log("debug", "Cleaning node: " .. n) core.register_node(":" .. n, { - groups = {old=1}, + groups = {to_remove=1}, }) end core.register_abm({ - nodenames = {"group:old"}, + nodenames = {"group:to_remove"}, interval = 1, chance = 1, action = function(pos, node) core.remove_node(pos) end, }) + +for n_old, n_new in pairs(n_list.replace) do + cleaner.log("debug", "Replacing node \"" .. n_old .. "\" with \"" .. n_new .. "\"") + + core.register_abm({ + nodenames = {n_old}, + interval = 1, + chance = 1, + action = function(pos, node) + core.remove_node(pos) + core.place_node(pos, n_new) + end, + }) +end From e8359d8db30cbb5201468996457639546a4b9da6 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 18 May 2021 21:31:13 -0700 Subject: [PATCH 027/160] Use single ABM with group for replacing nodes --- nodes.lua | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/nodes.lua b/nodes.lua index e19e67e..e3c7051 100644 --- a/nodes.lua +++ b/nodes.lua @@ -68,13 +68,24 @@ core.register_abm({ for n_old, n_new in pairs(n_list.replace) do cleaner.log("debug", "Replacing node \"" .. n_old .. "\" with \"" .. n_new .. "\"") - core.register_abm({ - nodenames = {n_old}, - interval = 1, - chance = 1, - action = function(pos, node) - core.remove_node(pos) - core.place_node(pos, n_new) - end, + core.register_node(":" .. n_old, { + groups = {to_replace=1}, }) end + +core.register_abm({ + nodenames = {"group:to_replace"}, + interval = 1, + chance = 1, + action = function(pos, node) + core.remove_node(pos) + + local new_node_name = n_list.replace[node.name] + local new_node = core.registered_nodes[new_node_name] + if new_node then + core.place_node(pos, new_node) + else + cleaner.log("error", "cannot replace with unregistered node \"" .. tostring(new_node_name) .. "\"") + end + end, +}) From 98762685454c61137ed0899a827a8272551321f4 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 26 May 2021 20:18:08 -0700 Subject: [PATCH 028/160] Rename "CHANGES.txt" to "changelog.txt" --- CHANGES.txt => changelog.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CHANGES.txt => changelog.txt (100%) diff --git a/CHANGES.txt b/changelog.txt similarity index 100% rename from CHANGES.txt rename to changelog.txt From 8b5d09283e084f7e07a53e9c5a54e800011e33d3 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 26 May 2021 20:18:54 -0700 Subject: [PATCH 029/160] Add to TODO list --- TODO.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.txt b/TODO.txt index 9b8ef00..dc3f7e3 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,3 +1,4 @@ TODO: - allow nodes to be cleaned to be replaced by another node +- methods for cleaning/replacing items From 0daee12f5706f398855111264cc64a0e0a0ad81b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 26 May 2021 20:54:43 -0700 Subject: [PATCH 030/160] Add method for cleaning/replacing items --- TODO.txt | 1 - changelog.txt | 1 + init.lua | 1 + items.lua | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 items.lua diff --git a/TODO.txt b/TODO.txt index dc3f7e3..9b8ef00 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,4 +1,3 @@ TODO: - allow nodes to be cleaned to be replaced by another node -- methods for cleaning/replacing items diff --git a/changelog.txt b/changelog.txt index 3ac980a..f0c1692 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,6 +3,7 @@ - changed license to MIT - "clean_entities" & "clean_nodes" files now use json format - nodes can be replaced with other nodes +- items can be replaced with other items (/clean_items.json file) 0.4 diff --git a/init.lua b/init.lua index 42e47c0..cde2fe8 100644 --- a/init.lua +++ b/init.lua @@ -34,6 +34,7 @@ end local scripts = { "entities", "nodes", + "items", } for _, script in ipairs(scripts) do diff --git a/items.lua b/items.lua new file mode 100644 index 0000000..47da345 --- /dev/null +++ b/items.lua @@ -0,0 +1,55 @@ + +local misc = dofile(cleaner.modpath .. "/misc_functions.lua") + +-- populate nodes list from file in world path +local i_list = {replace={}} +local i_path = core.get_worldpath() .. "/clean_items.json" +local i_file = io.open(i_path, "r") + +if i_file then + local data_in = core.parse_json(i_file:read("*a")) + i_file:close() + if data_in then + i_list = data_in + end +end + +-- update json file with any changes +i_file = io.open(i_path, "w") +if i_file then + local data_out = core.write_json(i_list, true) + + data_out = data_out:gsub("\"replace\" : null", "\"replace\" : {}") + + i_file:write(data_out) + i_file:close() +end + +-- register actions for after server startup +core.after(0, function() + for i_old, i_new in pairs(i_list.replace) do + cleaner.log("action", "replacing item \"" .. i_old .. "\" with \"" .. i_new .. "\"") + + if not core.registered_items[i_old] then + cleaner.log("info", "\"" .. i_old .. "\" not registered, not unregistering") + else + cleaner.log("warning", "overriding registered item \"" .. i_old .. "\"") + + core.unregister_item(i_old) + if core.registered_items[i_old] then + cleaner.log("error", "could not unregister \"" .. i_old .. "\"") + end + end + + if not core.registered_items[i_new] then + cleaner.log("warning", "adding alias for unregistered item \"" .. i_new .. "\"") + end + + core.register_alias(i_old, i_new) + if core.registered_aliases[i_old] == i_new then + cleaner.log("info", "registered alias \"" .. i_old .. "\" for \"" .. i_new .. "\"") + else + cleaner.log("error", "could not register alias \"" .. i_old .. "\" for \"" .. i_new .. "\"") + end + end +end) From 7a2d38a64ccb29fc3719965ebadbb9fe2e3c6ac9 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 26 May 2021 20:55:00 -0700 Subject: [PATCH 031/160] Add some LuaDoc --- misc_functions.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/misc_functions.lua b/misc_functions.lua index 0134e04..7278c93 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -1,4 +1,10 @@ +--- Cleans duplicate entries from indexed table. +-- +-- @local +-- @function clean_duplicates +-- @tparam table t +-- @treturn table local function clean_duplicates(t) local tmp = {} for _, v in ipairs(t) do From 51e76caeb2775905fc70e911e05dfa648153e794 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 26 May 2021 21:25:02 -0700 Subject: [PATCH 032/160] Update README --- README.md | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 622915c..407ac7f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,12 @@ --- ### Description: -A simple [Minetest][] mod that can be used to remove unknown entities & nodes. Forked from [PilzAdam's ***clean*** mod][f.pilzadam]. +A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & items. Forked from [PilzAdam's ***clean*** mod][f.pilzadam]. + +--- +### Licensing: + +[MIT](LICENSE.txt) --- ### Requirements: @@ -12,11 +17,44 @@ A simple [Minetest][] mod that can be used to remove unknown entities & nodes. F - Depends: none --- -### Licensing: +### Usage: -[MIT](LICENSE.txt) +There are three files in the world path that can be edited: `clean_entities.json`, `clean_nodes.json`, & `clean_items.json`. If they do not already exist with the server is started they will be created automatically. + +They are formatted as follows: +```json +{ + "remove": + [ + "creatures:ghost", + "creatures:chicken", + "creatures:sheep", + "creatures:skeleton", + "creatures:zombie", + "creatures:oerkki", + "creatures:shark", + ], + "replace": + { + "biofuel:biofuel":"default:leaves", + "helicopter:heli":"default:copper_lump", + "spawneggs:ghost":"alternode:key", + "spawneggs:oerkki":"default:mese_crystal", + "unifieddyes:airbrush":"default:coal_lump", + }, +} +``` + +`remove` key works for nodes & entities. `replace` key works for nodes & items. Their functions are self-explanatory. + +--- +### Links: + +- [Forum](https://forum.minetest.net/viewtopic.php?t=18381) +- [Git repo](https://github.com/AntumMT/mod-cleaner) +- [Changelog](changelog.txt) +- [TODO](TODO.txt) [Minetest]: http://www.minetest.net/ - [f.pilzadam]: https://forum.minetest.net/viewtopic.php?t=2777 From 540ee1493017fd7b0945d8247f39fee7a6e8dbdd Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 26 May 2021 21:27:39 -0700 Subject: [PATCH 033/160] Increment version to 1.0 --- changelog.txt | 19 ++++++++++--------- mod.conf | 6 +++--- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/changelog.txt b/changelog.txt index f0c1692..77f6f69 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,26 +1,27 @@ -0.5 +v1.0 +---- - changed license to MIT - "clean_entities" & "clean_nodes" files now use json format - nodes can be replaced with other nodes - items can be replaced with other items (/clean_items.json file) - -0.4 +v0.4 +---- - changed technical name to "cleaner" - re-added functionality to clean nodes - -0.3 +v0.3 +---- - removed functionality for cleaning anything other than entities - -0.2 +v0.2 +---- - changed license to CC0 - added some log output - entities to be cleaned can be configured & loaded from world directory - -0.1 +v0.1 +---- - forked from PilzAdam's "clean" mod @ forum post updated: 2013-06-08 - replaced deprecated call to "minetest.env" diff --git a/mod.conf b/mod.conf index c8a5149..07c886c 100644 --- a/mod.conf +++ b/mod.conf @@ -1,5 +1,5 @@ name = cleaner -description = A simple mod that can be used to remove unknown entities & nodes. -author = PilzAdam, Jordan Irwin (AntumDeluge) +description = A mod that can be used to remove/replace unknown entities, nodes, & items. +version = 1.0 license = MIT -version = 0.4 +author = PilzAdam, Jordan Irwin (AntumDeluge) From 80e70900b23478599e61f96227b055f2d920a61e Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 26 May 2021 21:29:46 -0700 Subject: [PATCH 034/160] Update TODO list --- TODO.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/TODO.txt b/TODO.txt index 9b8ef00..0810866 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,3 +1,2 @@ TODO: -- allow nodes to be cleaned to be replaced by another node From f247118c633fa9a105675b02d756e85b231316ac Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 26 May 2021 22:11:41 -0700 Subject: [PATCH 035/160] Add to TODO list... Suggestion by bell07 ( https://forum.minetest.net/viewtopic.php?p=325519#p325519 ) --- TODO.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.txt b/TODO.txt index 0810866..b97a3a0 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,2 +1,3 @@ TODO: +- use register_lbm with run_at_every_load instead of register_abm ( https://forum.minetest.net/viewtopic.php?p=325519#p325519 ) From 6b50d1c52a8a954d4e1d717503821de0f4775f3c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 26 May 2021 22:16:09 -0700 Subject: [PATCH 036/160] Add ContentDB link to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 407ac7f..392f652 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ They are formatted as follows: --- ### Links: +- [![ContentDB](https://content.minetest.net/packages/AntumDeluge/cleaner/shields/title/)][ContentDB] - [Forum](https://forum.minetest.net/viewtopic.php?t=18381) - [Git repo](https://github.com/AntumMT/mod-cleaner) - [Changelog](changelog.txt) @@ -58,3 +59,4 @@ They are formatted as follows: [Minetest]: http://www.minetest.net/ [f.pilzadam]: https://forum.minetest.net/viewtopic.php?t=2777 +[ContentDB]: https://content.minetest.net/packages/AntumDeluge/cleaner/ From 2c127af4afd8e89c8f391d2a24fbb1269cb6d15f Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 27 May 2021 20:42:04 -0700 Subject: [PATCH 037/160] Use "register_lbm" with "run_at_every_load" instead of... ..."register_abm" to save resources. Suggested by bell07: https://forum.minetest.net/viewtopic.php?p=325519#p325519 --- TODO.txt | 1 - changelog.txt | 5 +++++ nodes.lua | 12 ++++++------ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/TODO.txt b/TODO.txt index b97a3a0..0810866 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,3 +1,2 @@ TODO: -- use register_lbm with run_at_every_load instead of register_abm ( https://forum.minetest.net/viewtopic.php?p=325519#p325519 ) diff --git a/changelog.txt b/changelog.txt index 77f6f69..619fa94 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ +v1.1 +---- +- uses "register_lbm" with "run_at_every_load" instead of "register_abm" to save resources + - suggested by bell07 ( https://forum.minetest.net/viewtopic.php?p=325519#p325519 ) + v1.0 ---- - changed license to MIT diff --git a/nodes.lua b/nodes.lua index e3c7051..8a03203 100644 --- a/nodes.lua +++ b/nodes.lua @@ -56,10 +56,10 @@ for _, n in ipairs(n_list.remove) do }) end -core.register_abm({ +core.register_lbm({ + name = "cleaner:remove_nodes", nodenames = {"group:to_remove"}, - interval = 1, - chance = 1, + run_at_every_load = true, action = function(pos, node) core.remove_node(pos) end, @@ -73,10 +73,10 @@ for n_old, n_new in pairs(n_list.replace) do }) end -core.register_abm({ +core.register_lbm({ + name = "cleaner:replace_nodes", nodenames = {"group:to_replace"}, - interval = 1, - chance = 1, + run_at_every_load = true, action = function(pos, node) core.remove_node(pos) From 3ee518495863f78f08380d549a1d96d8fcbf1ecd Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 27 May 2021 20:44:01 -0700 Subject: [PATCH 038/160] Increment version to 1.1 --- README.md | 2 +- mod.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 392f652..ee95a6f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ --- ### Description: -A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & items. Forked from [PilzAdam's ***clean*** mod][f.pilzadam]. +A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & items. Originally forked from [PilzAdam's ***clean*** mod][f.pilzadam]. --- ### Licensing: diff --git a/mod.conf b/mod.conf index 07c886c..8fbf2c2 100644 --- a/mod.conf +++ b/mod.conf @@ -1,5 +1,5 @@ name = cleaner description = A mod that can be used to remove/replace unknown entities, nodes, & items. -version = 1.0 +version = 1.1 license = MIT author = PilzAdam, Jordan Irwin (AntumDeluge) From 7280c2a538ae03efef867cd47954ace89b8245b0 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 06:06:01 -0700 Subject: [PATCH 039/160] Add to TODO list --- TODO.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODO.txt b/TODO.txt index 0810866..5a6089a 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,2 +1,4 @@ TODO: +- add chat commands to update cleaning in-game +- add API From 774b22a55bb8c3fa6ec7ad82e70ec33ede6461d5 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 06:17:59 -0700 Subject: [PATCH 040/160] Use register_on_mods_loaded --- items.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/items.lua b/items.lua index 47da345..b68bd04 100644 --- a/items.lua +++ b/items.lua @@ -26,7 +26,7 @@ if i_file then end -- register actions for after server startup -core.after(0, function() +core.register_on_mods_loaded(function() for i_old, i_new in pairs(i_list.replace) do cleaner.log("action", "replacing item \"" .. i_old .. "\" with \"" .. i_new .. "\"") From 261d0ed5e7af96a92af2e6c0cf3639da9552f39b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 08:40:45 -0700 Subject: [PATCH 041/160] Add API --- TODO.txt | 1 - api.lua | 39 +++++++++++++++++++++++++++++++++++++++ changelog.txt | 4 ++++ entities.lua | 7 +------ init.lua | 1 + items.lua | 6 +++++- nodes.lua | 12 +++--------- 7 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 api.lua diff --git a/TODO.txt b/TODO.txt index 5a6089a..94fbf99 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,4 +1,3 @@ TODO: - add chat commands to update cleaning in-game -- add API diff --git a/api.lua b/api.lua new file mode 100644 index 0000000..5f9bbbe --- /dev/null +++ b/api.lua @@ -0,0 +1,39 @@ + +local replace_items = {} +local replace_nodes = {} + + +function cleaner.get_replace_items() + return replace_items +end + +function cleaner.get_replace_nodes() + return replace_nodes +end + + +function cleaner.remove_entity(src) + core.register_entity(":" .. src, { + on_activate = function(self, staticdata) + self.object:remove() + end, + }) +end + +function cleaner.remove_node(src) + core.register_node(":" .. src, { + groups = {to_remove=1}, + }) +end + +function cleaner.replace_item(src, tgt) + replace_items[src] = tgt +end + +function cleaner.replace_node(src, tgt) + core.register_node(":" .. src, { + groups = {to_replace=1}, + }) + + replace_nodes[src] = tgt +end diff --git a/changelog.txt b/changelog.txt index 619fa94..0019bbf 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,8 @@ +v1.2 +---- +- added API + v1.1 ---- - uses "register_lbm" with "run_at_every_load" instead of "register_abm" to save resources diff --git a/entities.lua b/entities.lua index a0276e5..b47faed 100644 --- a/entities.lua +++ b/entities.lua @@ -46,10 +46,5 @@ end for _, e in ipairs(e_list.remove) do cleaner.log("debug", "Cleaning entity: " .. e) - - core.register_entity(":" .. e, { - on_activate = function(self, staticdata) - self.object:remove() - end, - }) + cleaner.remove_entity(e) end diff --git a/init.lua b/init.lua index cde2fe8..fd6715f 100644 --- a/init.lua +++ b/init.lua @@ -32,6 +32,7 @@ end local scripts = { + "api", "entities", "nodes", "items", diff --git a/items.lua b/items.lua index b68bd04..8972d64 100644 --- a/items.lua +++ b/items.lua @@ -25,9 +25,13 @@ if i_file then i_file:close() end +for i_old, i_new in pairs(i_list.replace) do + cleaner.replace_item(i_old, i_new) +end + -- register actions for after server startup core.register_on_mods_loaded(function() - for i_old, i_new in pairs(i_list.replace) do + for i_old, i_new in pairs(cleaner.get_replace_items()) do cleaner.log("action", "replacing item \"" .. i_old .. "\" with \"" .. i_new .. "\"") if not core.registered_items[i_old] then diff --git a/nodes.lua b/nodes.lua index 8a03203..a5cc699 100644 --- a/nodes.lua +++ b/nodes.lua @@ -50,10 +50,7 @@ end for _, n in ipairs(n_list.remove) do cleaner.log("debug", "Cleaning node: " .. n) - - core.register_node(":" .. n, { - groups = {to_remove=1}, - }) + cleaner.remove_node(n) end core.register_lbm({ @@ -67,10 +64,7 @@ core.register_lbm({ for n_old, n_new in pairs(n_list.replace) do cleaner.log("debug", "Replacing node \"" .. n_old .. "\" with \"" .. n_new .. "\"") - - core.register_node(":" .. n_old, { - groups = {to_replace=1}, - }) + cleaner.replace_node(n_old, n_new) end core.register_lbm({ @@ -80,7 +74,7 @@ core.register_lbm({ action = function(pos, node) core.remove_node(pos) - local new_node_name = n_list.replace[node.name] + local new_node_name = cleaner.get_replace_nodes()[node.name] local new_node = core.registered_nodes[new_node_name] if new_node then core.place_node(pos, new_node) From e75ee0ccd8c020de9ff4e819559ccf0bf114955d Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 08:45:22 -0700 Subject: [PATCH 042/160] Add Lua docstrings --- api.lua | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/api.lua b/api.lua index 5f9bbbe..6524727 100644 --- a/api.lua +++ b/api.lua @@ -1,17 +1,31 @@ +--- Cleaner API +-- +-- @topic api + + local replace_items = {} local replace_nodes = {} +--- Retrieves list of items to be replaced. +-- +-- @treturn table Items to be replaced. function cleaner.get_replace_items() return replace_items end +--- Retrieves list of nodes to be replaced. +-- +-- @treturn table Nodes to be replaced. function cleaner.get_replace_nodes() return replace_nodes end +--- Registers an entity to be removed. +-- +-- @tparam string src Entity technical name. function cleaner.remove_entity(src) core.register_entity(":" .. src, { on_activate = function(self, staticdata) @@ -20,16 +34,27 @@ function cleaner.remove_entity(src) }) end +--- Registers a node to be removed. +-- +-- @tparam string src Node technical name. function cleaner.remove_node(src) core.register_node(":" .. src, { groups = {to_remove=1}, }) end +--- Registeres an item to be replaced. +-- +-- @tparam string src Technical name of item to be replaced. +-- @tparam string tgt Technical name of item to be used in place. function cleaner.replace_item(src, tgt) replace_items[src] = tgt end +--- Registers a node to be replaced. +-- +-- @tparam string src Technical name of node to be replaced. +-- @tparam string tgt Technical name of node to be used in place. function cleaner.replace_node(src, tgt) core.register_node(":" .. src, { groups = {to_replace=1}, From 958d45775c2d664c4a712cc7deb94a67dc24d6e5 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 08:58:55 -0700 Subject: [PATCH 043/160] Add script & config for generating HTML docs with LDoc --- docs/config.ld | 4 ++++ docs/gendoc.sh | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 docs/config.ld create mode 100644 docs/gendoc.sh diff --git a/docs/config.ld b/docs/config.ld new file mode 100644 index 0000000..25b7626 --- /dev/null +++ b/docs/config.ld @@ -0,0 +1,4 @@ +project = "Cleaner" +title = "Cleaner mod for Minetest" +format = "markdown" +boilerplate = false diff --git a/docs/gendoc.sh b/docs/gendoc.sh new file mode 100644 index 0000000..8cdda6b --- /dev/null +++ b/docs/gendoc.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +docs="$(dirname $(readlink -f $0))" +root="$(dirname ${docs})" +config="${docs}/config.ld" + +cd "${root}" + +# Clean old files +rm -rf "${docs}/api" + +# Create new files +ldoc -c "${config}" -d "${docs}/api" "${root}/api.lua" From bb94fa86a2ad9ffd00d9dda46b306daa45cb08b7 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 08:59:14 -0700 Subject: [PATCH 044/160] Generate HTML docs with LDoc --- docs/api/index.html | 60 ++++++++ docs/api/ldoc.css | 303 +++++++++++++++++++++++++++++++++++++++ docs/api/topics/api.html | 234 ++++++++++++++++++++++++++++++ 3 files changed, 597 insertions(+) create mode 100644 docs/api/index.html create mode 100644 docs/api/ldoc.css create mode 100644 docs/api/topics/api.html diff --git a/docs/api/index.html b/docs/api/index.html new file mode 100644 index 0000000..a161dc7 --- /dev/null +++ b/docs/api/index.html @@ -0,0 +1,60 @@ + + + + + Cleaner mod for Minetest + + + + +
+ +
+ +
+
+
+ + +
+ + + + + + +
+ + + +

Topics

+ + + + + +
apiCleaner API
+ +
+
+
+generated by LDoc 1.4.6 +Last updated 2021-07-12 08:57:46 +
+
+ + diff --git a/docs/api/ldoc.css b/docs/api/ldoc.css new file mode 100644 index 0000000..415843e --- /dev/null +++ b/docs/api/ldoc.css @@ -0,0 +1,303 @@ +/* BEGIN RESET + +Copyright (c) 2010, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.8.2r1 +*/ +html { + color: #000; + background: #FFF; +} +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td { + margin: 0; + padding: 0; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +fieldset,img { + border: 0; +} +address,caption,cite,code,dfn,em,strong,th,var,optgroup { + font-style: inherit; + font-weight: inherit; +} +del,ins { + text-decoration: none; +} +li { + margin-left: 20px; +} +caption,th { + text-align: left; +} +h1,h2,h3,h4,h5,h6 { + font-size: 100%; + font-weight: bold; +} +q:before,q:after { + content: ''; +} +abbr,acronym { + border: 0; + font-variant: normal; +} +sup { + vertical-align: baseline; +} +sub { + vertical-align: baseline; +} +legend { + color: #000; +} +input,button,textarea,select,optgroup,option { + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; +} +input,button,textarea,select {*font-size:100%; +} +/* END RESET */ + +body { + margin-left: 1em; + margin-right: 1em; + font-family: arial, helvetica, geneva, sans-serif; + background-color: #ffffff; margin: 0px; +} + +code, tt { font-family: monospace; font-size: 1.1em; } +span.parameter { font-family:monospace; } +span.parameter:after { content:":"; } +span.types:before { content:"("; } +span.types:after { content:")"; } +.type { font-weight: bold; font-style:italic } + +body, p, td, th { font-size: .95em; line-height: 1.2em;} + +p, ul { margin: 10px 0 0 0px;} + +strong { font-weight: bold;} + +em { font-style: italic;} + +h1 { + font-size: 1.5em; + margin: 20px 0 20px 0; +} +h2, h3, h4 { margin: 15px 0 10px 0; } +h2 { font-size: 1.25em; } +h3 { font-size: 1.15em; } +h4 { font-size: 1.06em; } + +a:link { font-weight: bold; color: #004080; text-decoration: none; } +a:visited { font-weight: bold; color: #006699; text-decoration: none; } +a:link:hover { text-decoration: underline; } + +hr { + color:#cccccc; + background: #00007f; + height: 1px; +} + +blockquote { margin-left: 3em; } + +ul { list-style-type: disc; } + +p.name { + font-family: "Andale Mono", monospace; + padding-top: 1em; +} + +pre { + background-color: rgb(245, 245, 245); + border: 1px solid #C0C0C0; /* silver */ + padding: 10px; + margin: 10px 0 10px 0; + overflow: auto; + font-family: "Andale Mono", monospace; +} + +pre.example { + font-size: .85em; +} + +table.index { border: 1px #00007f; } +table.index td { text-align: left; vertical-align: top; } + +#container { + margin-left: 1em; + margin-right: 1em; + background-color: #f0f0f0; +} + +#product { + text-align: center; + border-bottom: 1px solid #cccccc; + background-color: #ffffff; +} + +#product big { + font-size: 2em; +} + +#main { + background-color: #f0f0f0; + border-left: 2px solid #cccccc; +} + +#navigation { + float: left; + width: 14em; + vertical-align: top; + background-color: #f0f0f0; + overflow: visible; +} + +#navigation h2 { + background-color:#e7e7e7; + font-size:1.1em; + color:#000000; + text-align: left; + padding:0.2em; + border-top:1px solid #dddddd; + border-bottom:1px solid #dddddd; +} + +#navigation ul +{ + font-size:1em; + list-style-type: none; + margin: 1px 1px 10px 1px; +} + +#navigation li { + text-indent: -1em; + display: block; + margin: 3px 0px 0px 22px; +} + +#navigation li li a { + margin: 0px 3px 0px -1em; +} + +#content { + margin-left: 14em; + padding: 1em; + width: 700px; + border-left: 2px solid #cccccc; + border-right: 2px solid #cccccc; + background-color: #ffffff; +} + +#about { + clear: both; + padding: 5px; + border-top: 2px solid #cccccc; + background-color: #ffffff; +} + +@media print { + body { + font: 12pt "Times New Roman", "TimeNR", Times, serif; + } + a { font-weight: bold; color: #004080; text-decoration: underline; } + + #main { + background-color: #ffffff; + border-left: 0px; + } + + #container { + margin-left: 2%; + margin-right: 2%; + background-color: #ffffff; + } + + #content { + padding: 1em; + background-color: #ffffff; + } + + #navigation { + display: none; + } + pre.example { + font-family: "Andale Mono", monospace; + font-size: 10pt; + page-break-inside: avoid; + } +} + +table.module_list { + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.module_list td { + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.module_list td.name { background-color: #f0f0f0; min-width: 200px; } +table.module_list td.summary { width: 100%; } + + +table.function_list { + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.function_list td { + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.function_list td.name { background-color: #f0f0f0; min-width: 200px; } +table.function_list td.summary { width: 100%; } + +ul.nowrap { + overflow:auto; + white-space:nowrap; +} + +dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;} +dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;} +dl.table h3, dl.function h3 {font-size: .95em;} + +/* stop sublists from having initial vertical space */ +ul ul { margin-top: 0px; } +ol ul { margin-top: 0px; } +ol ol { margin-top: 0px; } +ul ol { margin-top: 0px; } + +/* make the target distinct; helps when we're navigating to a function */ +a:target + * { + background-color: #FF9; +} + + +/* styles for prettification of source */ +pre .comment { color: #558817; } +pre .constant { color: #a8660d; } +pre .escape { color: #844631; } +pre .keyword { color: #aa5050; font-weight: bold; } +pre .library { color: #0e7c6b; } +pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; } +pre .string { color: #8080ff; } +pre .number { color: #f8660d; } +pre .operator { color: #2239a8; font-weight: bold; } +pre .preprocessor, pre .prepro { color: #a33243; } +pre .global { color: #800080; } +pre .user-keyword { color: #800080; } +pre .prompt { color: #558817; } +pre .url { color: #272fc2; text-decoration: underline; } + diff --git a/docs/api/topics/api.html b/docs/api/topics/api.html new file mode 100644 index 0000000..57dcd19 --- /dev/null +++ b/docs/api/topics/api.html @@ -0,0 +1,234 @@ + + + + + Cleaner mod for Minetest + + + + +
+ +
+ +
+
+
+ + +
+ + + + + + +
+ +

Topic api

+

Cleaner API

+

+ +

+ + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + +
cleaner.get_replace_items ()Retrieves list of items to be replaced.
cleaner.get_replace_nodes ()Retrieves list of nodes to be replaced.
cleaner.remove_entity (src)Registers an entity to be removed.
cleaner.remove_node (src)Registers a node to be removed.
cleaner.replace_item (src, tgt)Registeres an item to be replaced.
cleaner.replace_node (src, tgt)Registers a node to be replaced.
+ +
+
+ + +

Functions

+ +
+
+ + cleaner.get_replace_items () +
+
+ Retrieves list of items to be replaced. + + + +

Returns:

+
    + + table + Items to be replaced. +
+ + + + +
+
+ + cleaner.get_replace_nodes () +
+
+ Retrieves list of nodes to be replaced. + + + +

Returns:

+
    + + table + Nodes to be replaced. +
+ + + + +
+
+ + cleaner.remove_entity (src) +
+
+ Registers an entity to be removed. + + +

Parameters:

+
    +
  • src + string + Entity technical name. +
  • +
+ + + + + +
+
+ + cleaner.remove_node (src) +
+
+ Registers a node to be removed. + + +

Parameters:

+
    +
  • src + string + Node technical name. +
  • +
+ + + + + +
+
+ + cleaner.replace_item (src, tgt) +
+
+ Registeres an item to be replaced. + + +

Parameters:

+
    +
  • src + string + Technical name of item to be replaced. +
  • +
  • tgt + string + Technical name of item to be used in place. +
  • +
+ + + + + +
+
+ + cleaner.replace_node (src, tgt) +
+
+ Registers a node to be replaced. + + +

Parameters:

+
    +
  • src + string + Technical name of node to be replaced. +
  • +
  • tgt + string + Technical name of node to be used in place. +
  • +
+ + + + + +
+
+ + +
+
+
+generated by LDoc 1.4.6 +Last updated 2021-07-12 08:57:46 +
+
+ + From fe80682515df6e53ac562bf67af65d5bb74c4bdc Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 09:02:33 -0700 Subject: [PATCH 045/160] Change API directory name --- docs/gendoc.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/gendoc.sh b/docs/gendoc.sh index 8cdda6b..7e1bd62 100644 --- a/docs/gendoc.sh +++ b/docs/gendoc.sh @@ -7,7 +7,7 @@ config="${docs}/config.ld" cd "${root}" # Clean old files -rm -rf "${docs}/api" +rm -rf "${docs}/reference" # Create new files -ldoc -c "${config}" -d "${docs}/api" "${root}/api.lua" +ldoc -c "${config}" -d "${docs}/reference" "${root}/api.lua" From 2afbdd55e27685a8ad519007fb840e2e1425f660 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 09:02:51 -0700 Subject: [PATCH 046/160] Re-generate HTML docs --- docs/{api => reference}/index.html | 2 +- docs/{api => reference}/ldoc.css | 0 docs/{api => reference}/topics/api.html | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename docs/{api => reference}/index.html (94%) rename docs/{api => reference}/ldoc.css (100%) rename docs/{api => reference}/topics/api.html (98%) diff --git a/docs/api/index.html b/docs/reference/index.html similarity index 94% rename from docs/api/index.html rename to docs/reference/index.html index a161dc7..3357883 100644 --- a/docs/api/index.html +++ b/docs/reference/index.html @@ -53,7 +53,7 @@
generated by LDoc 1.4.6 -Last updated 2021-07-12 08:57:46 +Last updated 2021-07-12 09:02:05
diff --git a/docs/api/ldoc.css b/docs/reference/ldoc.css similarity index 100% rename from docs/api/ldoc.css rename to docs/reference/ldoc.css diff --git a/docs/api/topics/api.html b/docs/reference/topics/api.html similarity index 98% rename from docs/api/topics/api.html rename to docs/reference/topics/api.html index 57dcd19..e9a4009 100644 --- a/docs/api/topics/api.html +++ b/docs/reference/topics/api.html @@ -227,7 +227,7 @@
generated by LDoc 1.4.6 -Last updated 2021-07-12 08:57:46 +Last updated 2021-07-12 09:02:05
From 0d4b29573c58533e522ac16f012efce3d72fce98 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 09:04:00 -0700 Subject: [PATCH 047/160] Link to API reference in README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ee95a6f..ba28b77 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ They are formatted as follows: - [![ContentDB](https://content.minetest.net/packages/AntumDeluge/cleaner/shields/title/)][ContentDB] - [Forum](https://forum.minetest.net/viewtopic.php?t=18381) - [Git repo](https://github.com/AntumMT/mod-cleaner) +- [API](https://antummt.github.io/mod-cleaner/docs/reference) - [Changelog](changelog.txt) - [TODO](TODO.txt) From bf37b2e4a509a3dd27bccb947d713e6704c38909 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 09:35:03 -0700 Subject: [PATCH 048/160] Add to TODO list --- TODO.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/TODO.txt b/TODO.txt index 94fbf99..b87d145 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,3 +1,7 @@ TODO: - add chat commands to update cleaning in-game +- add localization support +- add support for unregistering/replacing ores +- add "unsafe" setting for enabling unregistering ores +- change API method names to "register_[replace/remove]_*" From 7d5f61756e6dfceddcb7e3ff17bdca160e21edb0 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 15:36:01 -0700 Subject: [PATCH 049/160] Minor cleanup --- api.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api.lua b/api.lua index 6524727..1fe64f8 100644 --- a/api.lua +++ b/api.lua @@ -28,7 +28,7 @@ end -- @tparam string src Entity technical name. function cleaner.remove_entity(src) core.register_entity(":" .. src, { - on_activate = function(self, staticdata) + on_activate = function(self, ...) self.object:remove() end, }) From 7f042330b16bb458b3218f246a89c699ebbb11df Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 15:39:25 -0700 Subject: [PATCH 050/160] Add chat commands --- TODO.txt | 1 - changelog.txt | 6 ++ chat.lua | 241 ++++++++++++++++++++++++++++++++++++++++++++++++++ init.lua | 1 + 4 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 chat.lua diff --git a/TODO.txt b/TODO.txt index b87d145..24d6773 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,6 +1,5 @@ TODO: -- add chat commands to update cleaning in-game - add localization support - add support for unregistering/replacing ores - add "unsafe" setting for enabling unregistering ores diff --git a/changelog.txt b/changelog.txt index 0019bbf..3aa7958 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,12 @@ v1.2 ---- - added API +- added chat commands: + - remove_entity + - remove_node + - replace_item + - replace_node + - find_unknown_nodes v1.1 ---- diff --git a/chat.lua b/chat.lua new file mode 100644 index 0000000..4f20209 --- /dev/null +++ b/chat.lua @@ -0,0 +1,241 @@ + +--- Cleaner Chat Commands +-- +-- @topic commands + + +local function pos_list(ppos, radius) + local plist = {} + + for x = ppos.x - radius, ppos.x + radius, 1 do + for y = ppos.y - radius, ppos.y + radius, 1 do + for z = ppos.z - radius, ppos.z + radius, 1 do + table.insert(plist, {x=x, y=y, z=z}) + end + end + end + + return plist +end + + +--- Removes nearby entities. +-- +-- @chatcmd remove_entity +-- @param entity Entity technical name. +core.register_chatcommand("remove_entity", { + privs = {server=true}, + description = "Remove an entity from game.", + params = " [radius]", + func = function(name, param) + local entity + local radius = 100 + if param:find(" ") then + entity = param:split(" ") + radius = tonumber(entity[2]) + entity = entity[1] + else + entity = param + end + + if not entity or entity:trim() == "" then + return false, "Must supply entity name." + elseif not radius then + return false, "Radius must be a number." + end + + local player = core.get_player_by_name(name) + + for _, object in ipairs(core.get_objects_inside_radius(player:get_pos(), radius)) do + local lent = object:get_luaentity() + + if lent then + if lent.name == entity then + object:remove() + end + else + if object:get_properties().infotext == entity then + object:remove() + end + end + end + + return true + end, +}) + +--- Removes nearby nodes. +-- +-- @chatcmd remove_node +-- @param node Node technical name. +core.register_chatcommand("remove_node", { + privs = {server=true}, + description = "Remove a node from game.", + params = " [radius]", + func = function(name, param) + local nname + local radius = 100 + if param:find(" ") then + nname = param:split(" ") + radius = tonumber(nname[2]) + nname = nname[1] + else + nname = param + end + + if not nname or nname:trim() == "" then + return false, "Must supply node name." + elseif not radius then + return false, "Radius must be a number." + end + + local ppos = core.get_player_by_name(name):get_pos() + + for _, npos in ipairs(pos_list(ppos, radius)) do + local node = core.get_node_or_nil(npos) + if node and node.name == nname then + core.remove_node(npos) + end + end + + return true + end, +}) + +local function replace_item(src, tgt) + if not core.registered_items[tgt] then + return false, "Cannot use unknown item \"" .. tgt .. "\" as replacement." + end + + if core.registered_items[src] then + core.unregister_item(src) + end + + core.register_alias(src, tgt) + return true +end + +--- Replaces an item. +-- +-- FIXME: inventory icons not updated +-- +-- @chatcmd replace_item +-- @param old_item Technical name of item to replace. +-- @param new_item Technical name of item to be used in place. +core.register_chatcommand("replace_item", { + privs = {server=true}, + description = "Replace an item in game.", + params = " ", + func = function(name, param) + if not param:find(" ") then + return false, "Not enough parameters." + end + + local src = param:split(" ") + local tgt = src[2] + src = src[1] + + local retval, msg = replace_item(src, tgt) + if not retval then + return false, msg + end + + return true + end, +}) + +--- Replaces nearby nodes. +-- +-- @chatcmd replace_item +-- @param old_node Technical name of node to replace. +-- @param new_node Technical name of node to be used in place. +core.register_chatcommand("replace_node", { + privs = {server=true}, + description = "Replace a node in game.", + params = " [radius]", + func = function(name, param) + if not param:find(" ") then + return false, "Not enough parameters." + end + + local radius = 100 + local params = param:split(" ") + + local src = params[1] + local tgt = tostring(params[2]) + if #params > 2 then + radius = tonumber(params[3]) + end + + if not radius then + return false, "Radius must be a number." + end + + local new_node = core.registered_nodes[tgt] + if not new_node then + return false, "Cannot use unknown node \"" .. tgt .. "\" as replacement." + end + + local total_replaced = 0 + local ppos = core.get_player_by_name(name):get_pos() + for _, npos in ipairs(pos_list(ppos, radius)) do + local node = core.get_node_or_nil(npos) + if node and node.name == src then + core.remove_node(npos) + core.place_node(npos, new_node) + + total_replaced = total_replaced + 1 + end + end + + core.chat_send_player(name, "Replaced " .. total_replaced .. " nodes.") + return true + end, +}) + +--- Checks for nearby unknown nodes. +-- +-- @chatcmd find_unknown_nodes +-- @tparam[opt] int radius Search radius. +core.register_chatcommand("find_unknown_nodes", { + privs = {server=true}, + description = "Find names of unknown nodes.", + params = "[radius]", + func = function(name, param) + if param:find(" ") then + return false, "Too many parameters." + end + + local radius = 100 + if param and param:trim() ~= "" then + radius = tonumber(param) + end + + if not radius then + return false, "Radius must be a number." + end + + local ppos = core.get_player_by_name(name):get_pos() + + local checked_nodes = {} + local unknown_nodes = {} + for _, npos in ipairs(pos_list(ppos, radius)) do + local node = core.get_node_or_nil(npos) + if node and not checked_nodes[node.name] then + if not core.registered_nodes[node.name] then + table.insert(unknown_nodes, node.name) + end + + checked_nodes[node.name] = true + end + end + + if #unknown_nodes > 0 then + core.chat_send_player(name, "Found unknown nodes: " .. table.concat(unknown_nodes, ", ")) + else + core.chat_send_player(name, "No unknown nodes found") + end + + return true + end, +}) diff --git a/init.lua b/init.lua index fd6715f..c3a9a13 100644 --- a/init.lua +++ b/init.lua @@ -33,6 +33,7 @@ end local scripts = { "api", + "chat", "entities", "nodes", "items", From 69f87b6b73e561097d0a1b383865621276c9eed2 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 15:41:53 -0700 Subject: [PATCH 051/160] Add setting for enabling "unsafe" methods & commands --- TODO.txt | 1 - changelog.txt | 1 + init.lua | 1 + settings.lua | 14 ++++++++++++++ settingtypes.txt | 5 +++++ 5 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 settings.lua create mode 100644 settingtypes.txt diff --git a/TODO.txt b/TODO.txt index 24d6773..5fff10e 100644 --- a/TODO.txt +++ b/TODO.txt @@ -2,5 +2,4 @@ TODO: - add localization support - add support for unregistering/replacing ores -- add "unsafe" setting for enabling unregistering ores - change API method names to "register_[replace/remove]_*" diff --git a/changelog.txt b/changelog.txt index 3aa7958..4779fb4 100644 --- a/changelog.txt +++ b/changelog.txt @@ -8,6 +8,7 @@ v1.2 - replace_item - replace_node - find_unknown_nodes +- added setting for enabling "unsafe" methods & commands v1.1 ---- diff --git a/init.lua b/init.lua index c3a9a13..569da75 100644 --- a/init.lua +++ b/init.lua @@ -32,6 +32,7 @@ end local scripts = { + "settings", "api", "chat", "entities", diff --git a/settings.lua b/settings.lua new file mode 100644 index 0000000..3729f8b --- /dev/null +++ b/settings.lua @@ -0,0 +1,14 @@ + +--- Cleaner Settings +-- +-- @topic settings + + +--- Enables unsafe methods. +-- +-- `cleaner.remove_ore` +-- +-- @setting cleaner.unsafe +-- @settype bool +-- @default false +cleaner.unsafe = core.settings:get_bool("cleaner.unsafe", false) diff --git a/settingtypes.txt b/settingtypes.txt new file mode 100644 index 0000000..80cca37 --- /dev/null +++ b/settingtypes.txt @@ -0,0 +1,5 @@ + +# Enables unsafe methods. +# +# - cleaner.remove_ore +cleaner.unsafe (Enable unsafe methods) bool false From 2d7c5aee1fbc24af1bbcf1d7f87721fe41306bed Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 15:44:43 -0700 Subject: [PATCH 052/160] Add support for unregistering ores --- TODO.txt | 2 +- api.lua | 37 +++++++++++++++++++++++++++++++++++++ changelog.txt | 1 + chat.lua | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/TODO.txt b/TODO.txt index 5fff10e..6d8bd25 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,5 +1,5 @@ TODO: - add localization support -- add support for unregistering/replacing ores +- add support for unregistering ores via world path file - change API method names to "register_[replace/remove]_*" diff --git a/api.lua b/api.lua index 1fe64f8..5fabbf0 100644 --- a/api.lua +++ b/api.lua @@ -62,3 +62,40 @@ function cleaner.replace_node(src, tgt) replace_nodes[src] = tgt end + + +--- Unsafe methods. +-- +-- Enabled with `cleaner.unsafe` setting. +-- +-- @section unsafe + + +if cleaner.unsafe then + --- Removes an ore definition. + -- + -- @tparam string src Ore technical name. + function cleaner.remove_ore(src) + local remove_ids = {} + local total_removed = 0 + local registered = false + + for id, def in pairs(core.registered_ores) do + if def.ore == src then + table.insert(remove_ids, id) + registered = true + end + end + + for _, id in ipairs(remove_ids) do + core.registered_ores[id] = nil + if core.registered_ores[id] then + cleaner.log("error", "unable to unregister ore " .. id) + else + total_removed = total_removed + 1 + end + end + + return registered, total_removed + end +end diff --git a/changelog.txt b/changelog.txt index 4779fb4..90a5055 100644 --- a/changelog.txt +++ b/changelog.txt @@ -9,6 +9,7 @@ v1.2 - replace_node - find_unknown_nodes - added setting for enabling "unsafe" methods & commands +- added support for unregistering ores v1.1 ---- diff --git a/chat.lua b/chat.lua index 4f20209..7873c63 100644 --- a/chat.lua +++ b/chat.lua @@ -239,3 +239,40 @@ core.register_chatcommand("find_unknown_nodes", { return true end, }) + + +--- Unsafe commands. +-- +-- Enabled with `cleaner.unsafe` setting. +-- +-- @section unsafe + + +if cleaner.unsafe then + --- Registers an ore to be removed. + -- + -- @chatcmd remove_ore + -- @param ore Ore technical name. + core.register_chatcommand("remove_ore", { + privs = {server=true}, + description = "Remove an ore from game.", + params = "", + func = function(name, param) + if param:find(" ") then + return false, "Too many parameters." + end + + core.after(0, function() + local registered, total_removed = cleaner.remove_ore(param) + + if not registered then + core.chat_send_player(name, "Ore \"" .. param .. "\" not found, not unregistering.") + else + core.chat_send_player(name, "Unregistered " .. total_removed .. " ores (this will be undone after server restart).") + end + end) + + return true + end + }) +end From 13a6fd04be9ee640c40890e55ef47e96c5bc2789 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 15:46:33 -0700 Subject: [PATCH 053/160] Support "chatcmd" & "setting" types in LDoc generation --- docs/config.ld | 20 ++++++++++++++++++++ docs/gendoc.sh | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/config.ld b/docs/config.ld index 25b7626..cee5dc0 100644 --- a/docs/config.ld +++ b/docs/config.ld @@ -2,3 +2,23 @@ project = "Cleaner" title = "Cleaner mod for Minetest" format = "markdown" boilerplate = false + +file = { + "settings.lua", + "api.lua", + "chat.lua", +} + +new_type("chatcmd", "Chat Commands") +new_type("setting", "Settings") + +custom_tags = { + { + "settype", + title = "Setting Type", + }, + { + "default", + title = "Default Value", + }, +} diff --git a/docs/gendoc.sh b/docs/gendoc.sh index 7e1bd62..9af5ed7 100644 --- a/docs/gendoc.sh +++ b/docs/gendoc.sh @@ -10,4 +10,4 @@ cd "${root}" rm -rf "${docs}/reference" # Create new files -ldoc -c "${config}" -d "${docs}/reference" "${root}/api.lua" +ldoc -c "${config}" -d "${docs}/reference" "${root}" From ad2fc046a19db44bcdc68aa8af8c08cfc1afd719 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 15:46:48 -0700 Subject: [PATCH 054/160] Re-generate HTML docs --- docs/reference/index.html | 12 +- docs/reference/topics/api.html | 54 +++++- docs/reference/topics/commands.html | 251 ++++++++++++++++++++++++++++ docs/reference/topics/settings.html | 108 ++++++++++++ 4 files changed, 423 insertions(+), 2 deletions(-) create mode 100644 docs/reference/topics/commands.html create mode 100644 docs/reference/topics/settings.html diff --git a/docs/reference/index.html b/docs/reference/index.html index 3357883..b84274e 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -32,7 +32,9 @@

Topics

@@ -43,17 +45,25 @@

Topics

+ + + + + + + +
settingsCleaner Settings
api Cleaner API
commandsCleaner Chat Commands
generated by LDoc 1.4.6 -Last updated 2021-07-12 09:02:05 +Last updated 2021-07-12 15:47:16
diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index e9a4009..c0db53e 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -34,12 +34,15 @@

Contents

Topics

@@ -80,6 +83,13 @@ Registers a node to be replaced. +

Unsafe methods

+ + + + + +
cleaner.remove_ore (src)Removes an ore definition.


@@ -95,6 +105,8 @@
Retrieves list of items to be replaced. + +

Returns:

@@ -115,6 +127,8 @@
Retrieves list of nodes to be replaced. + +

Returns:

@@ -135,6 +149,8 @@
Registers an entity to be removed. + +

Parameters:

    @@ -156,6 +172,8 @@
    Registers a node to be removed. +
+

Parameters:

    @@ -177,6 +195,8 @@
    Registeres an item to be replaced. +
+

Parameters:

    @@ -202,6 +222,8 @@
    Registers a node to be replaced. +
+

Parameters:

    @@ -219,6 +241,36 @@ +
+ +

Unsafe methods

+ +
+ Enabled with cleaner.unsafe setting. +
+
+
+ + cleaner.remove_ore (src) +
+
+ Removes an ore definition. + + + + +

Parameters:

+
    +
  • src + string + Ore technical name. +
  • +
+ + + + +
@@ -227,7 +279,7 @@
generated by LDoc 1.4.6 -Last updated 2021-07-12 09:02:05 +Last updated 2021-07-12 15:47:16
diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html new file mode 100644 index 0000000..666d769 --- /dev/null +++ b/docs/reference/topics/commands.html @@ -0,0 +1,251 @@ + + + + + Cleaner mod for Minetest + + + + +
+ +
+ +
+
+
+ + +
+ + + + + + +
+ +

Topic commands

+

Cleaner Chat Commands

+

+ +

+ + +

Chat Commands

+ + + + + + + + + + + + + + + + + + + + + +
remove_entityRemoves nearby entities.
remove_nodeRemoves nearby nodes.
replace_itemReplaces an item.
replace_itemReplaces nearby nodes.
find_unknown_nodesChecks for nearby unknown nodes.
+

Unsafe commands

+ + + + + +
remove_oreRegisters an ore to be removed.
+ +
+
+ + +

Chat Commands

+ +
+
+ + remove_entity +
+
+ Removes nearby entities. + + + + +
    +
  • entity + Entity technical name. +
  • +
+ + + + + +
+
+ + remove_node +
+
+ Removes nearby nodes. + + + + +
    +
  • node + Node technical name. +
  • +
+ + + + + +
+
+ + replace_item +
+
+ Replaces an item.

+ +

FIXME: inventory icons not updated + + + + +

    +
  • old_item + Technical name of item to replace. +
  • +
  • new_item + Technical name of item to be used in place. +
  • +
+ + + + + +
+
+ + replace_item +
+
+ Replaces nearby nodes. + + + + +
    +
  • old_node + Technical name of node to replace. +
  • +
  • new_node + Technical name of node to be used in place. +
  • +
+ + + + + +
+
+ + find_unknown_nodes +
+
+ Checks for nearby unknown nodes. + + + + +
    +
  • radius + int + Search radius. + (optional) +
  • +
+ + + + + +
+
+

Unsafe commands

+ +
+ Enabled with cleaner.unsafe setting. +
+
+
+ + remove_ore +
+
+ Registers an ore to be removed. + + + + +
    +
  • ore + Ore technical name. +
  • +
+ + + + + +
+
+ + +
+
+
+generated by LDoc 1.4.6 +Last updated 2021-07-12 15:47:16 +
+
+ + diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html new file mode 100644 index 0000000..978a430 --- /dev/null +++ b/docs/reference/topics/settings.html @@ -0,0 +1,108 @@ + + + + + Cleaner mod for Minetest + + + + +
+ +
+ +
+
+
+ + +
+ + + + + + +
+ +

Topic settings

+

Cleaner Settings

+

+ +

+ + +

Settings

+ + + + + +
cleaner.unsafeEnables unsafe methods.
+ +
+
+ + +

Settings

+ +
+
+ + cleaner.unsafe +
+
+ Enables unsafe methods.

+ +

cleaner.remove_ore + +

Setting Type:

+
    + bool +
+

Default Value:

+
    + false +
+ + + + + + +
+
+ + +
+
+
+generated by LDoc 1.4.6 +Last updated 2021-07-12 15:47:16 +
+
+ + From d065c3f7aee80aff2d37fe67f9b9ded81caf8711 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 16:20:36 -0700 Subject: [PATCH 055/160] Add to TODO list --- TODO.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.txt b/TODO.txt index 6d8bd25..4f40d2e 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,3 +3,4 @@ TODO: - add localization support - add support for unregistering ores via world path file - change API method names to "register_[replace/remove]_*" +- use single json file for cleaning all types From 37ca2b7dabf8157684cdf3a215cda8cd8e94a827 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 17:04:24 -0700 Subject: [PATCH 056/160] Rename API methods --- TODO.txt | 1 - api.lua | 8 ++++---- entities.lua | 2 +- items.lua | 2 +- nodes.lua | 4 ++-- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/TODO.txt b/TODO.txt index 4f40d2e..f3e344a 100644 --- a/TODO.txt +++ b/TODO.txt @@ -2,5 +2,4 @@ TODO: - add localization support - add support for unregistering ores via world path file -- change API method names to "register_[replace/remove]_*" - use single json file for cleaning all types diff --git a/api.lua b/api.lua index 5fabbf0..622df35 100644 --- a/api.lua +++ b/api.lua @@ -26,7 +26,7 @@ end --- Registers an entity to be removed. -- -- @tparam string src Entity technical name. -function cleaner.remove_entity(src) +function cleaner.register_entity_removal(src) core.register_entity(":" .. src, { on_activate = function(self, ...) self.object:remove() @@ -37,7 +37,7 @@ end --- Registers a node to be removed. -- -- @tparam string src Node technical name. -function cleaner.remove_node(src) +function cleaner.register_node_removal(src) core.register_node(":" .. src, { groups = {to_remove=1}, }) @@ -47,7 +47,7 @@ end -- -- @tparam string src Technical name of item to be replaced. -- @tparam string tgt Technical name of item to be used in place. -function cleaner.replace_item(src, tgt) +function cleaner.register_item_replacement(src, tgt) replace_items[src] = tgt end @@ -55,7 +55,7 @@ end -- -- @tparam string src Technical name of node to be replaced. -- @tparam string tgt Technical name of node to be used in place. -function cleaner.replace_node(src, tgt) +function cleaner.register_node_replacement(src, tgt) core.register_node(":" .. src, { groups = {to_replace=1}, }) diff --git a/entities.lua b/entities.lua index b47faed..b2b23af 100644 --- a/entities.lua +++ b/entities.lua @@ -46,5 +46,5 @@ end for _, e in ipairs(e_list.remove) do cleaner.log("debug", "Cleaning entity: " .. e) - cleaner.remove_entity(e) + cleaner.register_entity_removal(e) end diff --git a/items.lua b/items.lua index 8972d64..5773212 100644 --- a/items.lua +++ b/items.lua @@ -26,7 +26,7 @@ if i_file then end for i_old, i_new in pairs(i_list.replace) do - cleaner.replace_item(i_old, i_new) + cleaner.register_item_replacement(i_old, i_new) end -- register actions for after server startup diff --git a/nodes.lua b/nodes.lua index a5cc699..c9d72b4 100644 --- a/nodes.lua +++ b/nodes.lua @@ -50,7 +50,7 @@ end for _, n in ipairs(n_list.remove) do cleaner.log("debug", "Cleaning node: " .. n) - cleaner.remove_node(n) + cleaner.register_node_removal(n) end core.register_lbm({ @@ -64,7 +64,7 @@ core.register_lbm({ for n_old, n_new in pairs(n_list.replace) do cleaner.log("debug", "Replacing node \"" .. n_old .. "\" with \"" .. n_new .. "\"") - cleaner.replace_node(n_old, n_new) + cleaner.register_node_replacement(n_old, n_new) end core.register_lbm({ From efc5ef2660ec26b4601ed29d31a4de9a5e6223cb Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 18:09:54 -0700 Subject: [PATCH 057/160] use single json file for cleaning all types --- TODO.txt | 1 - changelog.txt | 1 + entities.lua | 45 +++++++++++++++++------------ init.lua | 5 ++++ items.lua | 37 ++++++++++++++---------- misc_functions.lua | 49 ++++++++++++++++++++++++++++++++ nodes.lua | 71 ++++++++++++++++++++++++++++------------------ 7 files changed, 147 insertions(+), 62 deletions(-) diff --git a/TODO.txt b/TODO.txt index f3e344a..e315a16 100644 --- a/TODO.txt +++ b/TODO.txt @@ -2,4 +2,3 @@ TODO: - add localization support - add support for unregistering ores via world path file -- use single json file for cleaning all types diff --git a/changelog.txt b/changelog.txt index 90a5055..bec291a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -10,6 +10,7 @@ v1.2 - find_unknown_nodes - added setting for enabling "unsafe" methods & commands - added support for unregistering ores +- all types are loaded from /cleaner.json file v1.1 ---- diff --git a/entities.lua b/entities.lua index b2b23af..7b9da53 100644 --- a/entities.lua +++ b/entities.lua @@ -1,20 +1,30 @@ -local misc = dofile(cleaner.modpath .. "/misc_functions.lua") +local aux = dofile(cleaner.modpath .. "/misc_functions.lua") -- populate entities list from file in world path -local e_list = {remove={}} +local entities_data = aux.get_world_data().entities + + +-- START: backward compat + local e_path = core.get_worldpath() .. "/clean_entities.json" local e_file = io.open(e_path, "r") if e_file then + cleaner.log("action", "found deprecated clean_entities.json, updating") + local data_in = core.parse_json(e_file:read("*a")) e_file:close() - if data_in then - e_list = data_in + if data_in and data_in.remove then + for _, r in ipairs(data_in.remove) do + table.insert(entities_data.remove, r) + end end + + -- don't read deprecated file again + os.rename(e_path, e_path .. ".old") end --- backward compat local e_path_old = core.get_worldpath() .. "/clean_entities.txt" e_file = io.open(e_path_old, "r") @@ -25,7 +35,7 @@ if e_file then for _, e in ipairs(data_in) do e = e:trim() if e ~= "" and e:sub(1, 1) ~= "#" then - table.insert(e_list.remove, e) + table.insert(entities_data.remove, e) end end @@ -33,18 +43,17 @@ if e_file then os.rename(e_path_old, e_path_old .. ".bak") -- don't read deprecated file again end -e_list.remove = misc.clean_duplicates(e_list.remove) +-- END: backward compat + + +entities_data.remove = aux.clean_duplicates(entities_data.remove) -- update json file with any changes -e_file = io.open(e_path, "w") -if e_file then - local data_out = core.write_json(e_list, true):gsub("\"remove\" : null", "\"remove\" : []") - e_file:write(data_out) - e_file:close() -end +aux.update_world_data("entities", entities_data) - -for _, e in ipairs(e_list.remove) do - cleaner.log("debug", "Cleaning entity: " .. e) - cleaner.register_entity_removal(e) -end +core.register_on_mods_loaded(function() + for _, e in ipairs(entities_data.remove) do + cleaner.log("action", "registering entity for removal: " .. e) + cleaner.register_entity_removal(e) + end +end) diff --git a/init.lua b/init.lua index 569da75..3a46afd 100644 --- a/init.lua +++ b/init.lua @@ -30,6 +30,11 @@ function cleaner.log(lvl, msg) end end +local aux = dofile(cleaner.modpath .. "/misc_functions.lua") + +-- initialize world file +aux.update_world_data() + local scripts = { "settings", diff --git a/items.lua b/items.lua index 5773212..85015e6 100644 --- a/items.lua +++ b/items.lua @@ -1,38 +1,45 @@ -local misc = dofile(cleaner.modpath .. "/misc_functions.lua") +local aux = dofile(cleaner.modpath .. "/misc_functions.lua") + +-- populate items list from file in world path +local items_data = aux.get_world_data().items + + +-- START: backward compat --- populate nodes list from file in world path -local i_list = {replace={}} local i_path = core.get_worldpath() .. "/clean_items.json" local i_file = io.open(i_path, "r") if i_file then + cleaner.log("action", "found deprecated clean_items.json, updating") + local data_in = core.parse_json(i_file:read("*a")) i_file:close() - if data_in then - i_list = data_in + if data_in and data_in.replace then + for k, v in pairs(data_in.replace) do + if not items_data.replace[k] then + items_data.replace[k] = v + end + end end + + -- don't read deprecated file again + os.rename(i_path, i_path .. ".old") end --- update json file with any changes -i_file = io.open(i_path, "w") -if i_file then - local data_out = core.write_json(i_list, true) +-- END: backward compat - data_out = data_out:gsub("\"replace\" : null", "\"replace\" : {}") - i_file:write(data_out) - i_file:close() -end +aux.update_world_data("items", items_data) -for i_old, i_new in pairs(i_list.replace) do +for i_old, i_new in pairs(items_data.replace) do cleaner.register_item_replacement(i_old, i_new) end -- register actions for after server startup core.register_on_mods_loaded(function() for i_old, i_new in pairs(cleaner.get_replace_items()) do - cleaner.log("action", "replacing item \"" .. i_old .. "\" with \"" .. i_new .. "\"") + cleaner.log("action", "registering item \"" .. i_old .. "\" to be replaced with \"" .. i_new .. "\"") if not core.registered_items[i_old] then cleaner.log("info", "\"" .. i_old .. "\" not registered, not unregistering") diff --git a/misc_functions.lua b/misc_functions.lua index 7278c93..4812d49 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -19,7 +19,56 @@ local function clean_duplicates(t) return t end +local world_file = core.get_worldpath() .. "/cleaner.json" + +local function get_world_data() + local wdata = {} + local buffer = io.open(world_file, "r") + if buffer then + wdata = core.parse_json(buffer:read("*a")) + buffer:close() + end + + local rem_types = {"entities", "nodes", "ores",} + local rep_types = {"items", "nodes",} + + for _, t in ipairs(rem_types) do + wdata[t] = wdata[t] or {} + wdata[t].remove = wdata[t].remove or {} + end + + for _, t in ipairs(rep_types) do + wdata[t] = wdata[t] or {} + wdata[t].replace = wdata[t].replace or {} + end + + return wdata +end + +local function update_world_data(t, data) + local wdata = get_world_data() + if t and data then + wdata[t].remove = data.remove + wdata[t].replace = data.replace + end + + local json_string = core.write_json(wdata, true):gsub("\"remove\" : null", "\"remove\" : []") + :gsub("\"replace\" : null", "\"replace\" : {}") + + local buffer = io.open(world_file, "w") + if buffer then + buffer:write(json_string) + buffer:close() + + return true + end + + return false +end + return { clean_duplicates = clean_duplicates, + get_world_data = get_world_data, + update_world_data = update_world_data, } diff --git a/nodes.lua b/nodes.lua index c9d72b4..4f1239d 100644 --- a/nodes.lua +++ b/nodes.lua @@ -1,20 +1,40 @@ -local misc = dofile(cleaner.modpath .. "/misc_functions.lua") +local aux = dofile(cleaner.modpath .. "/misc_functions.lua") -- populate nodes list from file in world path -local n_list = {remove={}, replace={}} +local nodes_data = aux.get_world_data().nodes + + +-- START: backward compat + local n_path = core.get_worldpath() .. "/clean_nodes.json" local n_file = io.open(n_path, "r") if n_file then + cleaner.log("action", "found deprecated clean_nodes.json, updating") + local data_in = core.parse_json(n_file:read("*a")) n_file:close() if data_in then - n_list = data_in + if data_in.remove then + for _, r in ipairs(data_in.remove) do + table.insert(nodes_data.remove, r) + end + end + + if data_in.replace then + for k, v in pairs(data_in.replace) do + if not nodes_data.replace[k] then + nodes_data.replace[k] = v + end + end + end end + + -- don't read deprecated file again + os.rename(n_path, n_path .. ".old") end --- backward compat local n_path_old = core.get_worldpath() .. "/clean_nodes.txt" n_file = io.open(n_path_old, "r") @@ -25,33 +45,21 @@ if n_file then for _, e in ipairs(data_in) do e = e:trim() if e ~= "" and e:sub(1, 1) ~= "#" then - table.insert(n_list.remove, e) + table.insert(nodes_data.remove, e) end end n_file:close() - os.rename(n_path_old, n_path_old .. ".bak") -- don't read deprecated file again + os.rename(n_path_old, n_path_old .. ".old") -- don't read deprecated file again end -n_list.remove = misc.clean_duplicates(n_list.remove) +-- END: backward compat + + +nodes_data.remove = aux.clean_duplicates(nodes_data.remove) -- update json file with any changes -n_file = io.open(n_path, "w") -if n_file then - local data_out = core.write_json(n_list, true) - - -- FIXME: how to do this with a single regex? - data_out = data_out:gsub("\"remove\" : null", "\"remove\" : []") - data_out = data_out:gsub("\"replace\" : null", "\"replace\" : {}") - - n_file:write(data_out) - n_file:close() -end - -for _, n in ipairs(n_list.remove) do - cleaner.log("debug", "Cleaning node: " .. n) - cleaner.register_node_removal(n) -end +aux.update_world_data("nodes", nodes_data) core.register_lbm({ name = "cleaner:remove_nodes", @@ -62,11 +70,6 @@ core.register_lbm({ end, }) -for n_old, n_new in pairs(n_list.replace) do - cleaner.log("debug", "Replacing node \"" .. n_old .. "\" with \"" .. n_new .. "\"") - cleaner.register_node_replacement(n_old, n_new) -end - core.register_lbm({ name = "cleaner:replace_nodes", nodenames = {"group:to_replace"}, @@ -83,3 +86,15 @@ core.register_lbm({ end end, }) + +core.register_on_mods_loaded(function() + for _, n in ipairs(nodes_data.remove) do + cleaner.log("action", "registering node for removal: " .. n) + cleaner.register_node_removal(n) + end + + for n_old, n_new in pairs(nodes_data.replace) do + cleaner.log("action", "registering node \"" .. n_old .. "\" to be replaced with \"" .. n_new .. "\"") + cleaner.register_node_replacement(n_old, n_new) + end +end) From bb36a723d322ccf377a699dce6e3536936bf8cbf Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 18:11:37 -0700 Subject: [PATCH 058/160] add support for unregistering ores via world path file --- TODO.txt | 1 - api.lua | 16 ++++++++++++++++ init.lua | 1 + ores.lua | 17 +++++++++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 ores.lua diff --git a/TODO.txt b/TODO.txt index e315a16..61ac1fb 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,4 +1,3 @@ TODO: - add localization support -- add support for unregistering ores via world path file diff --git a/api.lua b/api.lua index 622df35..8911c86 100644 --- a/api.lua +++ b/api.lua @@ -72,6 +72,22 @@ end if cleaner.unsafe then + local remove_ores = {} + + --- Retrieves list of ores to be removed. + -- + -- @treturn table Ores to be replaced. + function cleaner.get_remove_ores() + return remove_ores + end + + --- Registers an ore to be removed after server startup. + -- + -- @tparam string src Ore technical name. + function cleaner.register_ore_removal(src) + table.insert(remove_ores, src) + end + --- Removes an ore definition. -- -- @tparam string src Ore technical name. diff --git a/init.lua b/init.lua index 3a46afd..31df5ff 100644 --- a/init.lua +++ b/init.lua @@ -43,6 +43,7 @@ local scripts = { "entities", "nodes", "items", + "ores", } for _, script in ipairs(scripts) do diff --git a/ores.lua b/ores.lua new file mode 100644 index 0000000..517f60a --- /dev/null +++ b/ores.lua @@ -0,0 +1,17 @@ + +if not cleaner.unsafe then return end + +local aux = dofile(cleaner.modpath .. "/misc_functions.lua") + +local ores_data = aux.get_world_data().ores + +for _, ore in ipairs(ores_data.remove) do + cleaner.register_ore_removal(ore) +end + +core.register_on_mods_loaded(function() + for _, ore in ipairs(cleaner.get_remove_ores()) do + cleaner.log("action", "unregistering ore: " .. ore) + cleaner.remove_ore(ore) + end +end) From 02489ec53077d44730b60ef16bc8f74263fad956 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 18:12:00 -0700 Subject: [PATCH 059/160] Re-generate HTML docs --- docs/reference/index.html | 2 +- docs/reference/topics/api.html | 79 ++++++++++++++++++++++++----- docs/reference/topics/commands.html | 2 +- docs/reference/topics/settings.html | 2 +- 4 files changed, 69 insertions(+), 16 deletions(-) diff --git a/docs/reference/index.html b/docs/reference/index.html index b84274e..ba30a7e 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -63,7 +63,7 @@
generated by LDoc 1.4.6 -Last updated 2021-07-12 15:47:16 +Last updated 2021-07-12 18:11:46
diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index c0db53e..f79fc2f 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -67,24 +67,32 @@ Retrieves list of nodes to be replaced. - cleaner.remove_entity (src) + cleaner.register_entity_removal (src) Registers an entity to be removed. - cleaner.remove_node (src) + cleaner.register_node_removal (src) Registers a node to be removed. - cleaner.replace_item (src, tgt) + cleaner.register_item_replacement (src, tgt) Registeres an item to be replaced. - cleaner.replace_node (src, tgt) + cleaner.register_node_replacement (src, tgt) Registers a node to be replaced.

Unsafe methods

+ + + + + + + + @@ -143,8 +151,8 @@
- - cleaner.remove_entity (src) + + cleaner.register_entity_removal (src)
Registers an entity to be removed. @@ -166,8 +174,8 @@
- - cleaner.remove_node (src) + + cleaner.register_node_removal (src)
Registers a node to be removed. @@ -189,8 +197,8 @@
- - cleaner.replace_item (src, tgt) + + cleaner.register_item_replacement (src, tgt)
Registeres an item to be replaced. @@ -216,8 +224,8 @@
- - cleaner.replace_node (src, tgt) + + cleaner.register_node_replacement (src, tgt)
Registers a node to be replaced. @@ -249,6 +257,51 @@ Enabled with cleaner.unsafe setting.
+
+ + cleaner.get_remove_ores () +
+
+ Retrieves list of ores to be removed. + + + + + +

Returns:

+
    + + table + Ores to be replaced. +
+ + + + +
+
+ + cleaner.register_ore_removal (src) +
+
+ Registers an ore to be removed after server startup. + + + + +

Parameters:

+
    +
  • src + string + Ore technical name. +
  • +
+ + + + + +
cleaner.remove_ore (src) @@ -279,7 +332,7 @@
generated by LDoc 1.4.6 -Last updated 2021-07-12 15:47:16 +Last updated 2021-07-12 18:11:46
diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index 666d769..b8c3133 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -244,7 +244,7 @@
generated by LDoc 1.4.6 -Last updated 2021-07-12 15:47:16 +Last updated 2021-07-12 18:11:46
diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index 978a430..a0c3011 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -101,7 +101,7 @@
generated by LDoc 1.4.6 -Last updated 2021-07-12 15:47:16 +Last updated 2021-07-12 18:11:46
From 1495ebea168a99349988e79dc8d28e3049794f38 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 18:21:25 -0700 Subject: [PATCH 060/160] Update README --- README.md | 63 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index ba28b77..a5f53cc 100644 --- a/README.md +++ b/README.md @@ -19,33 +19,58 @@ A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & --- ### Usage: -There are three files in the world path that can be edited: `clean_entities.json`, `clean_nodes.json`, & `clean_items.json`. If they do not already exist with the server is started they will be created automatically. +Registering items, entities, etc. for cleaning can be done in `cleaner.json` in the world directory. If it does not exist it will be created automatically when the server is started. -They are formatted as follows: +It is formatted as follows: ```json { - "remove": - [ - "creatures:ghost", - "creatures:chicken", - "creatures:sheep", - "creatures:skeleton", - "creatures:zombie", - "creatures:oerkki", - "creatures:shark", - ], - "replace": + "entities" : { - "biofuel:biofuel":"default:leaves", - "helicopter:heli":"default:copper_lump", - "spawneggs:ghost":"alternode:key", - "spawneggs:oerkki":"default:mese_crystal", - "unifieddyes:airbrush":"default:coal_lump", + "remove" : [] + }, + "items" : + { + "replace" : {} + }, + "nodes" : + { + "remove" : [], + "replace" : {} + }, + "ores" : + { + "remove" : [] + } +} +``` + +Cleaning nodes example: +```json +{ + "nodes" : + { + "remove" : [ + "old:node_1", + "old:node_2", + ], + "replace" : { + "old:node_3" : "new:node_1", + "old:node_4" : "new:node_2", + } }, } ``` -`remove` key works for nodes & entities. `replace` key works for nodes & items. Their functions are self-explanatory. +`remove` key works for nodes, entities, & ores. `replace` key works for nodes & items. Their functions are self-explanatory. + +#### Settings: + +``` +cleaner.unsafe +- Enables unsafe methods & commands (remove_ore). +- type: bool +- default: false +``` --- ### Links: From 50db695476805c314625859668a5951626ee6fd5 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 18:21:42 -0700 Subject: [PATCH 061/160] Add to TODO list --- TODO.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.txt b/TODO.txt index 61ac1fb..49796ed 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,3 +1,4 @@ TODO: - add localization support +- update world file when chat commands are used From df3428059c1ea4cc6a2687b64cf48c6b60c7976b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 20:02:03 -0700 Subject: [PATCH 062/160] Add localization support... Breaks compatibility with Minetever versions 0.4.x --- README.md | 7 +--- TODO.txt | 1 - changelog.txt | 1 + chat.lua | 84 +++++++++++++++++++++++++++++---------------- locale/template.txt | 28 +++++++++++++++ mod.conf | 1 + 6 files changed, 86 insertions(+), 36 deletions(-) create mode 100644 locale/template.txt diff --git a/README.md b/README.md index a5f53cc..b3d2c52 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,18 @@ ## Cleaner mod for Minetest ---- ### Description: A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & items. Originally forked from [PilzAdam's ***clean*** mod][f.pilzadam]. ---- ### Licensing: [MIT](LICENSE.txt) ---- ### Requirements: -- Minetest 0.4.16 or newer +- Minetest minimum version: 5.0 - Depends: none ---- ### Usage: Registering items, entities, etc. for cleaning can be done in `cleaner.json` in the world directory. If it does not exist it will be created automatically when the server is started. @@ -72,7 +68,6 @@ cleaner.unsafe - default: false ``` ---- ### Links: - [![ContentDB](https://content.minetest.net/packages/AntumDeluge/cleaner/shields/title/)][ContentDB] diff --git a/TODO.txt b/TODO.txt index 49796ed..2f7ce98 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,4 +1,3 @@ TODO: -- add localization support - update world file when chat commands are used diff --git a/changelog.txt b/changelog.txt index bec291a..ea3a1b9 100644 --- a/changelog.txt +++ b/changelog.txt @@ -11,6 +11,7 @@ v1.2 - added setting for enabling "unsafe" methods & commands - added support for unregistering ores - all types are loaded from /cleaner.json file +- added localization support v1.1 ---- diff --git a/chat.lua b/chat.lua index 7873c63..f716243 100644 --- a/chat.lua +++ b/chat.lua @@ -4,6 +4,9 @@ -- @topic commands +local S = core.get_translator(cleaner.modname) + + local function pos_list(ppos, radius) local plist = {} @@ -19,14 +22,37 @@ local function pos_list(ppos, radius) end +local help_repo = { + entity = { + remove_params = "<" .. S("entity") .. "> [" .. S("radius") .. "]", + }, + node = { + remove_params = "<" .. S("node") .. "> [" .. S("radius") .. "]", + replace_params = "<" .. S("old_node") .. "> <" .. S("new_node") .. "> [" .. S("radius") .. "]", + }, + item = { + replace_params = "<" .. S("old_item") .. "> <" .. S("new_item") .. ">", + }, + ore = { + remove_params = "<" .. S("ore") .. ">", + }, + param = { + missing = S("Missing parameter."), + excess = S("Too many parameters."), + mal_radius = S("Radius must be a number."), + opt_radius = "[" .. S("radius") .. "]", + }, +} + + --- Removes nearby entities. -- -- @chatcmd remove_entity -- @param entity Entity technical name. core.register_chatcommand("remove_entity", { privs = {server=true}, - description = "Remove an entity from game.", - params = " [radius]", + description = S("Remove an entity from game."), + params = help_repo.entity.remove_params, func = function(name, param) local entity local radius = 100 @@ -39,9 +65,9 @@ core.register_chatcommand("remove_entity", { end if not entity or entity:trim() == "" then - return false, "Must supply entity name." + return false, help_repo.param.missing elseif not radius then - return false, "Radius must be a number." + return false, help_repo.param.mal_radius end local player = core.get_player_by_name(name) @@ -70,8 +96,8 @@ core.register_chatcommand("remove_entity", { -- @param node Node technical name. core.register_chatcommand("remove_node", { privs = {server=true}, - description = "Remove a node from game.", - params = " [radius]", + description = S("Remove a node from game."), + params = help_repo.node.remove_params, func = function(name, param) local nname local radius = 100 @@ -84,9 +110,9 @@ core.register_chatcommand("remove_node", { end if not nname or nname:trim() == "" then - return false, "Must supply node name." + return false, help_repo.param.missing elseif not radius then - return false, "Radius must be a number." + return false, help_repo.param.mal_radius end local ppos = core.get_player_by_name(name):get_pos() @@ -104,7 +130,7 @@ core.register_chatcommand("remove_node", { local function replace_item(src, tgt) if not core.registered_items[tgt] then - return false, "Cannot use unknown item \"" .. tgt .. "\" as replacement." + return false, S('Cannot use unknown item "@1" as replacement.', tgt) end if core.registered_items[src] then @@ -124,11 +150,11 @@ end -- @param new_item Technical name of item to be used in place. core.register_chatcommand("replace_item", { privs = {server=true}, - description = "Replace an item in game.", - params = " ", + description = S("Replace an item in game."), + params = help_repo.item.replace_params, func = function(name, param) if not param:find(" ") then - return false, "Not enough parameters." + return false, help_repo.param.missing end local src = param:split(" ") @@ -151,11 +177,11 @@ core.register_chatcommand("replace_item", { -- @param new_node Technical name of node to be used in place. core.register_chatcommand("replace_node", { privs = {server=true}, - description = "Replace a node in game.", - params = " [radius]", + description = S("Replace a node in game."), + params = help_repo.node.replace_params, func = function(name, param) if not param:find(" ") then - return false, "Not enough parameters." + return false, help_repo.param.missing end local radius = 100 @@ -168,12 +194,12 @@ core.register_chatcommand("replace_node", { end if not radius then - return false, "Radius must be a number." + return false, help_repo.param.mal_radius end local new_node = core.registered_nodes[tgt] if not new_node then - return false, "Cannot use unknown node \"" .. tgt .. "\" as replacement." + return false, S('Cannot use unknown node "@1" as replacement.', tgt) end local total_replaced = 0 @@ -188,7 +214,7 @@ core.register_chatcommand("replace_node", { end end - core.chat_send_player(name, "Replaced " .. total_replaced .. " nodes.") + core.chat_send_player(name, S("Replaced @1 nodes.", total_replaced)) return true end, }) @@ -199,11 +225,11 @@ core.register_chatcommand("replace_node", { -- @tparam[opt] int radius Search radius. core.register_chatcommand("find_unknown_nodes", { privs = {server=true}, - description = "Find names of unknown nodes.", - params = "[radius]", + description = S("Find names of unknown nodes."), + params = help_repo.param.opt_radius, func = function(name, param) if param:find(" ") then - return false, "Too many parameters." + return false, help_repo.param.excess end local radius = 100 @@ -212,7 +238,7 @@ core.register_chatcommand("find_unknown_nodes", { end if not radius then - return false, "Radius must be a number." + return false, help_repo.param.mal_radius end local ppos = core.get_player_by_name(name):get_pos() @@ -231,9 +257,9 @@ core.register_chatcommand("find_unknown_nodes", { end if #unknown_nodes > 0 then - core.chat_send_player(name, "Found unknown nodes: " .. table.concat(unknown_nodes, ", ")) + core.chat_send_player(name, S("Found unknown nodes: @1", table.concat(unknown_nodes, ", "))) else - core.chat_send_player(name, "No unknown nodes found") + core.chat_send_player(name, S("No unknown nodes found.")) end return true @@ -255,20 +281,20 @@ if cleaner.unsafe then -- @param ore Ore technical name. core.register_chatcommand("remove_ore", { privs = {server=true}, - description = "Remove an ore from game.", - params = "", + description = S("Remove an ore from game."), + params = help_repo.ore.remove_params, func = function(name, param) if param:find(" ") then - return false, "Too many parameters." + return false, help_repo.param.excess end core.after(0, function() local registered, total_removed = cleaner.remove_ore(param) if not registered then - core.chat_send_player(name, "Ore \"" .. param .. "\" not found, not unregistering.") + core.chat_send_player(name, S('Ore "@1" not found, not unregistering.', param)) else - core.chat_send_player(name, "Unregistered " .. total_removed .. " ores (this will be undone after server restart).") + core.chat_send_player(name, S("Unregistered @1 ores (this will be undone after server restart).", total_removed)) end end) diff --git a/locale/template.txt b/locale/template.txt new file mode 100644 index 0000000..7007365 --- /dev/null +++ b/locale/template.txt @@ -0,0 +1,28 @@ +# Translated by + + +# chat commands +entity= +node= +radius= +old_item= +new_item= +old_node= +new_node= +ore= +Remove an entity from game.= +Remove a node from game.= +Replace an item in game.= +Replace a node in game.= +Find names of unknown nodes.= +Remove an ore from game.= +Missing parameter.= +Too many parameters.= +Radius must be a number.= +Cannot use unknown item "@1" as replacement.= +Cannot use unknown node "@1" as replacement.= +Replaced @1 nodes.= +Found unknown nodes: @1= +No unknown nodes found.= +Ore "@1" not found, not unregistering.= +Unregistered @1 ores (this will be undone after server restart).= diff --git a/mod.conf b/mod.conf index 8fbf2c2..a1a6472 100644 --- a/mod.conf +++ b/mod.conf @@ -3,3 +3,4 @@ description = A mod that can be used to remove/replace unknown entities, nodes, version = 1.1 license = MIT author = PilzAdam, Jordan Irwin (AntumDeluge) +min_minetest_version = 5.0 From 4cece82cfa8bc41834eb24684069c3c08c88fe2e Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 20:02:44 -0700 Subject: [PATCH 063/160] Add to TODO list --- TODO.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.txt b/TODO.txt index 2f7ce98..e0dd4bf 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,3 +1,4 @@ TODO: - update world file when chat commands are used +- update player inventories when items are replaced From cc5856b561480bd98a3ec62f82f4eae87bae4a76 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 21:43:16 -0700 Subject: [PATCH 064/160] Add details to chat command result messages --- chat.lua | 166 +++++++++++++++++++++++++++++++------------- locale/template.txt | 13 ++++ 2 files changed, 130 insertions(+), 49 deletions(-) diff --git a/chat.lua b/chat.lua index f716243..a229bef 100644 --- a/chat.lua +++ b/chat.lua @@ -21,26 +21,59 @@ local function pos_list(ppos, radius) return plist end +local param_desc = { + ["radius"] = S("Search radius."), + ["entity"] = S("Entity technical name."), + ["node"] = S("Node technical name."), + ["old_node"] = S("Technical name of node to be replaced."), + ["new_node"] = S("Technical name of node to be used in place."), + ["old_item"] = S("Technical name of item to be replaced."), + ["new_item"] = S("Technical name of item to be used in place."), + ["ore"] = S("Ore technical name."), +} -local help_repo = { +local function format_help(cmd, param_string, params) + local retval = S("Usage:") .. "\n /" .. cmd .. " " .. param_string + .. "\n" + + local p_count = 0 + for _, p in ipairs(params) do + if p_count == 0 then + retval = retval .. "\n" .. S("Params:") + end + + retval = retval .. "\n " .. S(p) .. ": " .. param_desc[p] + p_count = p_count + 1 + end + + return retval +end + +local cmd_repo = { entity = { - remove_params = "<" .. S("entity") .. "> [" .. S("radius") .. "]", + cmd = "remove_entity", + params = "<" .. S("entity") .. "> [" .. S("radius") .. "]", }, node = { - remove_params = "<" .. S("node") .. "> [" .. S("radius") .. "]", - replace_params = "<" .. S("old_node") .. "> <" .. S("new_node") .. "> [" .. S("radius") .. "]", + cmd_rem = "remove_node", + cmd_rep = "replace_node", + cmd_find = "find_unknown_nodes", + params_rem = "<" .. S("node") .. "> [" .. S("radius") .. "]", + params_rep = "<" .. S("old_node") .. "> <" .. S("new_node") .. "> [" .. S("radius") .. "]", + params_find = "[" .. S("radius") .. "]", }, item = { - replace_params = "<" .. S("old_item") .. "> <" .. S("new_item") .. ">", + cmd = "replace_item", + params = "<" .. S("old_item") .. "> <" .. S("new_item") .. ">", }, ore = { - remove_params = "<" .. S("ore") .. ">", + cmd = "remove_ore", + params = "<" .. S("ore") .. ">", }, param = { missing = S("Missing parameter."), excess = S("Too many parameters."), mal_radius = S("Radius must be a number."), - opt_radius = "[" .. S("radius") .. "]", }, } @@ -49,10 +82,11 @@ local help_repo = { -- -- @chatcmd remove_entity -- @param entity Entity technical name. -core.register_chatcommand("remove_entity", { +-- @tparam[opt] int radius +core.register_chatcommand(cmd_repo.entity.cmd, { privs = {server=true}, description = S("Remove an entity from game."), - params = help_repo.entity.remove_params, + params = cmd_repo.entity.params, func = function(name, param) local entity local radius = 100 @@ -64,29 +98,38 @@ core.register_chatcommand("remove_entity", { entity = param end + local err if not entity or entity:trim() == "" then - return false, help_repo.param.missing + err = cmd_repo.param.missing elseif not radius then - return false, help_repo.param.mal_radius + err = cmd_repo.param.mal_radius + end + + if err then + return false, err .. "\n\n" + .. format_help(cmd_repo.entity.cmd, cmd_repo.entity.params, {"entity", "radius"}) end local player = core.get_player_by_name(name) + local total_removed = 0 for _, object in ipairs(core.get_objects_inside_radius(player:get_pos(), radius)) do local lent = object:get_luaentity() if lent then if lent.name == entity then object:remove() + total_removed = total_removed + 1 end else if object:get_properties().infotext == entity then object:remove() + total_removed = total_removed + 1 end end end - return true + return true, S("Removed @1 entities.", total_removed) end, }) @@ -94,10 +137,11 @@ core.register_chatcommand("remove_entity", { -- -- @chatcmd remove_node -- @param node Node technical name. -core.register_chatcommand("remove_node", { +-- @tparam[opt] int radius +core.register_chatcommand(cmd_repo.node.cmd_rem, { privs = {server=true}, description = S("Remove a node from game."), - params = help_repo.node.remove_params, + params = cmd_repo.node.params_rem, func = function(name, param) local nname local radius = 100 @@ -109,22 +153,30 @@ core.register_chatcommand("remove_node", { nname = param end + local err if not nname or nname:trim() == "" then - return false, help_repo.param.missing + err = cmd_repo.param.missing elseif not radius then - return false, help_repo.param.mal_radius + err = cmd_repo.param.mal_radius + end + + if err then + return false, err .. "\n\n" + .. format_help(cmd_repo.node.cmd_rem, cmd_repo.node.params_rem, {"node", "radius"}) end local ppos = core.get_player_by_name(name):get_pos() + local total_removed = 0 for _, npos in ipairs(pos_list(ppos, radius)) do local node = core.get_node_or_nil(npos) if node and node.name == nname then core.remove_node(npos) + total_removed = total_removed + 1 end end - return true + return true, S("Removed @1 nodes.", total_removed) end, }) @@ -148,13 +200,15 @@ end -- @chatcmd replace_item -- @param old_item Technical name of item to replace. -- @param new_item Technical name of item to be used in place. -core.register_chatcommand("replace_item", { +core.register_chatcommand(cmd_repo.item.cmd, { privs = {server=true}, description = S("Replace an item in game."), - params = help_repo.item.replace_params, + params = cmd_repo.item.params, func = function(name, param) + local help = format_help(cmd_repo.item.cmd, cmd_repo.item.params, {"old_item", "new_item"}) + if not param:find(" ") then - return false, help_repo.param.missing + return false, cmd_repo.param.missing .. "\n\n" .. help end local src = param:split(" ") @@ -166,22 +220,27 @@ core.register_chatcommand("replace_item", { return false, msg end - return true + return true, S("Success!") end, }) --- Replaces nearby nodes. -- --- @chatcmd replace_item +-- FIXME: sometimes nodes on top disappear +-- +-- @chatcmd replace_node -- @param old_node Technical name of node to replace. -- @param new_node Technical name of node to be used in place. -core.register_chatcommand("replace_node", { +-- @tparam[opt] int radius +core.register_chatcommand(cmd_repo.node.cmd_rep, { privs = {server=true}, description = S("Replace a node in game."), - params = help_repo.node.replace_params, + params = cmd_repo.node.params_rep, func = function(name, param) + local help = format_help(cmd_repo.node.cmd_rep, cmd_repo.node.params_rep, {"old_node", "new_node", "radius"}) + if not param:find(" ") then - return false, help_repo.param.missing + return false, cmd_repo.param.missing .. "\n\n" .. help end local radius = 100 @@ -194,7 +253,7 @@ core.register_chatcommand("replace_node", { end if not radius then - return false, help_repo.param.mal_radius + return false, cmd_repo.param.mal_radius .. "\n\n" .. help end local new_node = core.registered_nodes[tgt] @@ -209,13 +268,11 @@ core.register_chatcommand("replace_node", { if node and node.name == src then core.remove_node(npos) core.place_node(npos, new_node) - total_replaced = total_replaced + 1 end end - core.chat_send_player(name, S("Replaced @1 nodes.", total_replaced)) - return true + return true, S("Replaced @1 nodes.", total_replaced) end, }) @@ -223,13 +280,15 @@ core.register_chatcommand("replace_node", { -- -- @chatcmd find_unknown_nodes -- @tparam[opt] int radius Search radius. -core.register_chatcommand("find_unknown_nodes", { +core.register_chatcommand(cmd_repo.node.cmd_find, { privs = {server=true}, description = S("Find names of unknown nodes."), - params = help_repo.param.opt_radius, + params = cmd_repo.node.params_find, func = function(name, param) + local help = format_help(cmd_repo.node.cmd_find, cmd_repo.node.params_find, {"radius"}) + if param:find(" ") then - return false, help_repo.param.excess + return false, cmd_repo.param.excess .. "\n\n" .. help end local radius = 100 @@ -238,7 +297,7 @@ core.register_chatcommand("find_unknown_nodes", { end if not radius then - return false, help_repo.param.mal_radius + return false, cmd_repo.param.mal_radius .. "\n\n" .. help end local ppos = core.get_player_by_name(name):get_pos() @@ -256,13 +315,14 @@ core.register_chatcommand("find_unknown_nodes", { end end + local msg if #unknown_nodes > 0 then - core.chat_send_player(name, S("Found unknown nodes: @1", table.concat(unknown_nodes, ", "))) + msg = S("Found unknown nodes: @1", table.concat(unknown_nodes, ", ")) else - core.chat_send_player(name, S("No unknown nodes found.")) + msg = S("No unknown nodes found.") end - return true + return true, msg end, }) @@ -279,26 +339,34 @@ if cleaner.unsafe then -- -- @chatcmd remove_ore -- @param ore Ore technical name. - core.register_chatcommand("remove_ore", { + core.register_chatcommand(cmd_repo.ore.cmd, { privs = {server=true}, description = S("Remove an ore from game."), - params = help_repo.ore.remove_params, + params = cmd_repo.ore.params, func = function(name, param) - if param:find(" ") then - return false, help_repo.param.excess + local err + if not param or param:trim() == "" then + err = cmd_repo.param.missing + elseif param:find(" ") then + err = cmd_repo.param.excess end - core.after(0, function() - local registered, total_removed = cleaner.remove_ore(param) + if err then + return false, err .. "\n\n" .. format_help(cmd_repo.ore.cmd, cmd_repo.ore.params, {"ore"}) + end - if not registered then - core.chat_send_player(name, S('Ore "@1" not found, not unregistering.', param)) - else - core.chat_send_player(name, S("Unregistered @1 ores (this will be undone after server restart).", total_removed)) - end - end) + local success = false + local msg + local registered, total_removed = cleaner.remove_ore(param) - return true + if not registered then + msg = S('Ore "@1" not found, not unregistering.', param) + else + msg = S("Unregistered @1 ores (this will be undone after server restart).", total_removed) + success = true + end + + return success, msg end }) end diff --git a/locale/template.txt b/locale/template.txt index 7007365..9153a0c 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -10,6 +10,16 @@ new_item= old_node= new_node= ore= +Usage:= +Params:= +Search radius.= +Entity technical name.= +Node technical name.= +Technical name of node to be replaced.= +Technical name of node to be used in place.= +Technical name of item to be replaced.= +Technical name of item to be used in place.= +Ore technical name.= Remove an entity from game.= Remove a node from game.= Replace an item in game.= @@ -22,7 +32,10 @@ Radius must be a number.= Cannot use unknown item "@1" as replacement.= Cannot use unknown node "@1" as replacement.= Replaced @1 nodes.= +Removed @1 nodes.= +Removed @1 entities.= Found unknown nodes: @1= No unknown nodes found.= Ore "@1" not found, not unregistering.= Unregistered @1 ores (this will be undone after server restart).= +Success!= From f8fd1506eb015a38fb92ee9462a40ba5b2e77a9b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 21:44:09 -0700 Subject: [PATCH 065/160] Add to TODO list --- TODO.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.txt b/TODO.txt index e0dd4bf..89f5e98 100644 --- a/TODO.txt +++ b/TODO.txt @@ -2,3 +2,4 @@ TODO: - update world file when chat commands are used - update player inventories when items are replaced +- fix top nodes disappearing with /replace_node command From 9592b1df73320f5a78654455a1c614a3969f4087 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 22:11:00 -0700 Subject: [PATCH 066/160] Update player inventories when item is replaced with chat command --- TODO.txt | 6 +++++- chat.lua | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/TODO.txt b/TODO.txt index 89f5e98..af34581 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,5 +1,9 @@ TODO: - update world file when chat commands are used -- update player inventories when items are replaced +- update player inventories when items are replaced: + - bags + - 3d_armor +- update storage inventories when items are replaced +- update player inventories on login - fix top nodes disappearing with /replace_node command diff --git a/chat.lua b/chat.lua index a229bef..3af053e 100644 --- a/chat.lua +++ b/chat.lua @@ -190,13 +190,26 @@ local function replace_item(src, tgt) end core.register_alias(src, tgt) + + -- update player inventories + for _, player in ipairs(core.get_connected_players()) do + local pinv = player:get_inventory() + + for idx, stack in pairs(pinv:get_list("main")) do + if stack:get_name() == src then + local new_stack = ItemStack(tgt) + new_stack:set_count(stack:get_count()) + + pinv:set_stack("main", idx, new_stack) + end + end + end + return true end --- Replaces an item. -- --- FIXME: inventory icons not updated --- -- @chatcmd replace_item -- @param old_item Technical name of item to replace. -- @param new_item Technical name of item to be used in place. From e81ed836dc36aeaa812c95372745b7fd4122d819 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 22:37:43 -0700 Subject: [PATCH 067/160] Support updating items in cornernote's bags mod with chat command... Homepage: http://cornernote.github.io/minetest-bags/ Git repo: https://github.com/cornernote/minetest-bags --- TODO.txt | 1 - chat.lua | 28 ++++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/TODO.txt b/TODO.txt index af34581..493aa05 100644 --- a/TODO.txt +++ b/TODO.txt @@ -2,7 +2,6 @@ TODO: - update world file when chat commands are used - update player inventories when items are replaced: - - bags - 3d_armor - update storage inventories when items are replaced - update player inventories on login diff --git a/chat.lua b/chat.lua index 3af053e..25542cd 100644 --- a/chat.lua +++ b/chat.lua @@ -180,6 +180,22 @@ core.register_chatcommand(cmd_repo.node.cmd_rem, { end, }) +local function update_list(inv, listname, src, tgt) + local list = inv:get_list(listname) + if not list then + cleaner.log("warning", "unknown player list: " .. listname) + return + end + + for idx, stack in pairs(list) do + if stack:get_name() == src then + local new_stack = ItemStack(tgt) + new_stack:set_count(stack:get_count()) + inv:set_stack(listname, idx, new_stack) + end + end +end + local function replace_item(src, tgt) if not core.registered_items[tgt] then return false, S('Cannot use unknown item "@1" as replacement.', tgt) @@ -191,16 +207,16 @@ local function replace_item(src, tgt) core.register_alias(src, tgt) + local bags = core.get_modpath("bags") ~= nil + -- update player inventories for _, player in ipairs(core.get_connected_players()) do local pinv = player:get_inventory() + update_list(pinv, "main", src, tgt) - for idx, stack in pairs(pinv:get_list("main")) do - if stack:get_name() == src then - local new_stack = ItemStack(tgt) - new_stack:set_count(stack:get_count()) - - pinv:set_stack("main", idx, new_stack) + if bags then + for i = 1, 4 do + update_list(pinv, "bag" .. i .. "contents", src, tgt) end end end From 5fcc824d0e88fa1ca1fbccd1d775c9590f9ccf23 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 23:02:50 -0700 Subject: [PATCH 068/160] make sure inventory exists before updating lists --- chat.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/chat.lua b/chat.lua index 25542cd..5f9c4f8 100644 --- a/chat.lua +++ b/chat.lua @@ -181,9 +181,14 @@ core.register_chatcommand(cmd_repo.node.cmd_rem, { }) local function update_list(inv, listname, src, tgt) + if not inv then + cleaner.log("error", "cannot update list of unknown inventory") + return + end + local list = inv:get_list(listname) if not list then - cleaner.log("warning", "unknown player list: " .. listname) + cleaner.log("warning", "unknown inventory list: " .. listname) return end From 7a482de6591353617cbab55f98237092aaba4b3e Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 23:03:23 -0700 Subject: [PATCH 069/160] Support updating 3d_armor inventory lists via chat command... https://content.minetest.net/packages/stu/3d_armor/ --- TODO.txt | 6 +++--- chat.lua | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/TODO.txt b/TODO.txt index 493aa05..0f755ed 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,8 +1,8 @@ TODO: - update world file when chat commands are used -- update player inventories when items are replaced: - - 3d_armor -- update storage inventories when items are replaced +- update inventories when items are replaced: + - creative + - storage (chests, etc.) - update player inventories on login - fix top nodes disappearing with /replace_node command diff --git a/chat.lua b/chat.lua index 5f9c4f8..b781250 100644 --- a/chat.lua +++ b/chat.lua @@ -213,6 +213,7 @@ local function replace_item(src, tgt) core.register_alias(src, tgt) local bags = core.get_modpath("bags") ~= nil + local armor = core.get_modpath("3d_armor") ~= nil -- update player inventories for _, player in ipairs(core.get_connected_players()) do @@ -224,6 +225,11 @@ local function replace_item(src, tgt) update_list(pinv, "bag" .. i .. "contents", src, tgt) end end + + if armor then + local armor_inv = core.get_inventory({type="detached", name=player:get_player_name() .. "_armor"}) + update_list(armor_inv, "armor", src, tgt) + end end return true From 2c9a44fbc1fd809b890d2258cefa5bb08750f703 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 23:05:21 -0700 Subject: [PATCH 070/160] Re-generate HTML docs --- docs/reference/index.html | 2 +- docs/reference/topics/api.html | 2 +- docs/reference/topics/commands.html | 37 ++++++++++++++++++++++------- docs/reference/topics/settings.html | 2 +- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/docs/reference/index.html b/docs/reference/index.html index ba30a7e..9cabfc0 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -63,7 +63,7 @@
generated by LDoc 1.4.6 -Last updated 2021-07-12 18:11:46 +Last updated 2021-07-12 23:04:56
diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index f79fc2f..ac2479c 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -332,7 +332,7 @@
generated by LDoc 1.4.6 -Last updated 2021-07-12 18:11:46 +Last updated 2021-07-12 23:04:56
diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index b8c3133..b1e4b96 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -71,7 +71,7 @@
- + @@ -108,6 +108,13 @@
  • entity Entity technical name.
  • +
  • radius + int + + + + (optional) +
  • @@ -129,6 +136,13 @@
  • node Node technical name.
  • +
  • radius + int + + + + (optional) +
  • @@ -141,9 +155,7 @@ replace_item
    - Replaces an item.

    - -

    FIXME: inventory icons not updated + Replaces an item. @@ -163,11 +175,13 @@

    - - replace_item + + replace_node
    - Replaces nearby nodes. + Replaces nearby nodes.

    + +

    FIXME: sometimes nodes on top disappear @@ -179,6 +193,13 @@

  • new_node Technical name of node to be used in place.
  • +
  • radius + int + + + + (optional) +
  • @@ -244,7 +265,7 @@
    generated by LDoc 1.4.6 -Last updated 2021-07-12 18:11:46 +Last updated 2021-07-12 23:04:56
    diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index a0c3011..ebf475c 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -101,7 +101,7 @@
    generated by LDoc 1.4.6 -Last updated 2021-07-12 18:11:46 +Last updated 2021-07-12 23:04:56
    From 30806124096db1cd4c875001837d780f0e6e78cb Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 23:44:28 -0700 Subject: [PATCH 071/160] Add remove_item function to API --- TODO.txt | 1 - api.lua | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ chat.lua | 57 +---------------------------------------- items.lua | 23 +++-------------- 4 files changed, 80 insertions(+), 77 deletions(-) diff --git a/TODO.txt b/TODO.txt index 0f755ed..743eb23 100644 --- a/TODO.txt +++ b/TODO.txt @@ -4,5 +4,4 @@ TODO: - update inventories when items are replaced: - creative - storage (chests, etc.) -- update player inventories on login - fix top nodes disappearing with /replace_node command diff --git a/api.lua b/api.lua index 8911c86..3c1a17b 100644 --- a/api.lua +++ b/api.lua @@ -43,6 +43,82 @@ function cleaner.register_node_removal(src) }) end +local function update_list(inv, listname, src, tgt) + if not inv then + cleaner.log("error", "cannot update list of unknown inventory") + return + end + + local list = inv:get_list(listname) + if not list then + cleaner.log("warning", "unknown inventory list: " .. listname) + return + end + + for idx, stack in pairs(list) do + if stack:get_name() == src then + local new_stack = ItemStack(tgt) + new_stack:set_count(stack:get_count()) + inv:set_stack(listname, idx, new_stack) + end + end +end + +--- Replaces an item with another registered item. +-- +-- @tparam string src Technical name of item to be replaced. +-- @tparam string tgt Technical name of item to be used in place. +-- @tparam[opt] bool update_players `true` updates inventory lists associated with players (default: `false`). +function cleaner.replace_item(src, tgt, update_players) + update_players = not (update_players ~= true) + + if not core.registered_items[tgt] then + return false, S('Cannot use unknown item "@1" as replacement.', tgt) + end + + if not core.registered_items[src] then + cleaner.log("info", "\"" .. src .. "\" not registered, not unregistering") + else + cleaner.log("warning", "overriding registered item \"" .. src .. "\"") + + core.unregister_item(src) + if core.registered_items[src] then + cleaner.log("error", "could not unregister \"" .. src .. "\"") + end + end + + core.register_alias(src, tgt) + if core.registered_aliases[src] == tgt then + cleaner.log("info", "registered alias \"" .. src .. "\" for \"" .. tgt .. "\"") + else + cleaner.log("error", "could not register alias \"" .. src .. "\" for \"" .. tgt .. "\"") + end + + local bags = core.get_modpath("bags") ~= nil + local armor = core.get_modpath("3d_armor") ~= nil + + -- update player inventories + if update_players then + for _, player in ipairs(core.get_connected_players()) do + local pinv = player:get_inventory() + update_list(pinv, "main", src, tgt) + + if bags then + for i = 1, 4 do + update_list(pinv, "bag" .. i .. "contents", src, tgt) + end + end + + if armor then + local armor_inv = core.get_inventory({type="detached", name=player:get_player_name() .. "_armor"}) + update_list(armor_inv, "armor", src, tgt) + end + end + end + + return true +end + --- Registeres an item to be replaced. -- -- @tparam string src Technical name of item to be replaced. diff --git a/chat.lua b/chat.lua index b781250..0e4a4dc 100644 --- a/chat.lua +++ b/chat.lua @@ -180,61 +180,6 @@ core.register_chatcommand(cmd_repo.node.cmd_rem, { end, }) -local function update_list(inv, listname, src, tgt) - if not inv then - cleaner.log("error", "cannot update list of unknown inventory") - return - end - - local list = inv:get_list(listname) - if not list then - cleaner.log("warning", "unknown inventory list: " .. listname) - return - end - - for idx, stack in pairs(list) do - if stack:get_name() == src then - local new_stack = ItemStack(tgt) - new_stack:set_count(stack:get_count()) - inv:set_stack(listname, idx, new_stack) - end - end -end - -local function replace_item(src, tgt) - if not core.registered_items[tgt] then - return false, S('Cannot use unknown item "@1" as replacement.', tgt) - end - - if core.registered_items[src] then - core.unregister_item(src) - end - - core.register_alias(src, tgt) - - local bags = core.get_modpath("bags") ~= nil - local armor = core.get_modpath("3d_armor") ~= nil - - -- update player inventories - for _, player in ipairs(core.get_connected_players()) do - local pinv = player:get_inventory() - update_list(pinv, "main", src, tgt) - - if bags then - for i = 1, 4 do - update_list(pinv, "bag" .. i .. "contents", src, tgt) - end - end - - if armor then - local armor_inv = core.get_inventory({type="detached", name=player:get_player_name() .. "_armor"}) - update_list(armor_inv, "armor", src, tgt) - end - end - - return true -end - --- Replaces an item. -- -- @chatcmd replace_item @@ -255,7 +200,7 @@ core.register_chatcommand(cmd_repo.item.cmd, { local tgt = src[2] src = src[1] - local retval, msg = replace_item(src, tgt) + local retval, msg = cleaner.replace_item(src, tgt, true) if not retval then return false, msg end diff --git a/items.lua b/items.lua index 85015e6..02cde65 100644 --- a/items.lua +++ b/items.lua @@ -41,26 +41,9 @@ core.register_on_mods_loaded(function() for i_old, i_new in pairs(cleaner.get_replace_items()) do cleaner.log("action", "registering item \"" .. i_old .. "\" to be replaced with \"" .. i_new .. "\"") - if not core.registered_items[i_old] then - cleaner.log("info", "\"" .. i_old .. "\" not registered, not unregistering") - else - cleaner.log("warning", "overriding registered item \"" .. i_old .. "\"") - - core.unregister_item(i_old) - if core.registered_items[i_old] then - cleaner.log("error", "could not unregister \"" .. i_old .. "\"") - end - end - - if not core.registered_items[i_new] then - cleaner.log("warning", "adding alias for unregistered item \"" .. i_new .. "\"") - end - - core.register_alias(i_old, i_new) - if core.registered_aliases[i_old] == i_new then - cleaner.log("info", "registered alias \"" .. i_old .. "\" for \"" .. i_new .. "\"") - else - cleaner.log("error", "could not register alias \"" .. i_old .. "\" for \"" .. i_new .. "\"") + local retval, msg = cleaner.replace_item(i_old, i_new) + if not retval then + cleaner.log("warning", msg) end end end) From 9230e0c39239fc2b95114b7eec56cdac190a6b4a Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 12 Jul 2021 23:44:46 -0700 Subject: [PATCH 072/160] Re-generate HTML docs --- docs/reference/index.html | 2 +- docs/reference/topics/api.html | 38 ++++++++++++++++++++++++++++- docs/reference/topics/commands.html | 2 +- docs/reference/topics/settings.html | 2 +- 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/docs/reference/index.html b/docs/reference/index.html index 9cabfc0..4362751 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -63,7 +63,7 @@
    generated by LDoc 1.4.6 -Last updated 2021-07-12 23:04:56 +Last updated 2021-07-12 23:44:34
    diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index ac2479c..d276cf8 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -75,6 +75,10 @@
    + + + + @@ -195,6 +199,38 @@ + +
    + + cleaner.replace_item (src, tgt[, update_players]) +
    +
    + Replaces an item with another registered item. + + + + +

    Parameters:

    +
      +
    • src + string + Technical name of item to be replaced. +
    • +
    • tgt + string + Technical name of item to be used in place. +
    • +
    • update_players + bool + true updates inventory lists associated with players (default: false). + (optional) +
    • +
    + + + + +
    @@ -332,7 +368,7 @@
    generated by LDoc 1.4.6 -Last updated 2021-07-12 23:04:56 +Last updated 2021-07-12 23:44:34
    diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index b1e4b96..708e99f 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -265,7 +265,7 @@
    generated by LDoc 1.4.6 -Last updated 2021-07-12 23:04:56 +Last updated 2021-07-12 23:44:34
    diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index ebf475c..5b35f9f 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -101,7 +101,7 @@
    generated by LDoc 1.4.6 -Last updated 2021-07-12 23:04:56 +Last updated 2021-07-12 23:44:34
    From 9fa1b2b4ff3f6ac6ac601b821c5920f61528099b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 20 Jul 2021 19:46:58 -0700 Subject: [PATCH 073/160] Register item replacement with node replacement --- api.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/api.lua b/api.lua index 3c1a17b..5bc795c 100644 --- a/api.lua +++ b/api.lua @@ -137,6 +137,7 @@ function cleaner.register_node_replacement(src, tgt) }) replace_nodes[src] = tgt + cleaner.register_item_replacement(src, tgt) end From 9365fd9515a4301f59efe2eaf2ce89813e0700ff Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 27 Jul 2021 16:17:12 -0700 Subject: [PATCH 074/160] Use more appropriate node swapping --- TODO.txt | 1 - chat.lua | 11 ++++++----- nodes.lua | 7 ++----- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/TODO.txt b/TODO.txt index 743eb23..8d013ea 100644 --- a/TODO.txt +++ b/TODO.txt @@ -4,4 +4,3 @@ TODO: - update inventories when items are replaced: - creative - storage (chests, etc.) -- fix top nodes disappearing with /replace_node command diff --git a/chat.lua b/chat.lua index 0e4a4dc..c25e9f1 100644 --- a/chat.lua +++ b/chat.lua @@ -241,8 +241,7 @@ core.register_chatcommand(cmd_repo.node.cmd_rep, { return false, cmd_repo.param.mal_radius .. "\n\n" .. help end - local new_node = core.registered_nodes[tgt] - if not new_node then + if not core.registered_nodes[tgt] then return false, S('Cannot use unknown node "@1" as replacement.', tgt) end @@ -251,9 +250,11 @@ core.register_chatcommand(cmd_repo.node.cmd_rep, { for _, npos in ipairs(pos_list(ppos, radius)) do local node = core.get_node_or_nil(npos) if node and node.name == src then - core.remove_node(npos) - core.place_node(npos, new_node) - total_replaced = total_replaced + 1 + if core.swap_node(npos, {name=tgt}) then + total_replaced = total_replaced + 1 + else + cleaner.log("error", "could not replace node at " .. core.pos_to_string(npos, 0)) + end end end diff --git a/nodes.lua b/nodes.lua index 4f1239d..f3878ab 100644 --- a/nodes.lua +++ b/nodes.lua @@ -75,12 +75,9 @@ core.register_lbm({ nodenames = {"group:to_replace"}, run_at_every_load = true, action = function(pos, node) - core.remove_node(pos) - local new_node_name = cleaner.get_replace_nodes()[node.name] - local new_node = core.registered_nodes[new_node_name] - if new_node then - core.place_node(pos, new_node) + if core.registered_nodes[new_node_name] then + core.swap_node(pos, {name=new_node_name}) else cleaner.log("error", "cannot replace with unregistered node \"" .. tostring(new_node_name) .. "\"") end From 4bb6bd0300b01ab0b98665dd068586e7bd8360b9 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 27 Jul 2021 16:59:26 -0700 Subject: [PATCH 075/160] Add required "textdomain" line to localizations template --- locale/template.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/locale/template.txt b/locale/template.txt index 9153a0c..4e9f484 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -1,4 +1,6 @@ -# Translated by +# textdomain:cleaner + +# Translators: # chat commands From cad47e4c8815d3dbf6e6f0191ad55d2e0656ad6e Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 27 Jul 2021 16:59:52 -0700 Subject: [PATCH 076/160] Add to TODO list --- TODO.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TODO.txt b/TODO.txt index 8d013ea..b13bb04 100644 --- a/TODO.txt +++ b/TODO.txt @@ -4,3 +4,6 @@ TODO: - update inventories when items are replaced: - creative - storage (chests, etc.) +- make chat commands plural (e.g. /replace_nodes) +- add admin tool for replacing/removing nodes +- add LBM when removing an item if it is a node From d2209675ed3e147051f3d9e9b1823892e93b9268 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 27 Jul 2021 19:22:06 -0700 Subject: [PATCH 077/160] Improve help messages --- chat.lua | 235 +++++++++++++++++++++++++++++++------------- locale/template.txt | 1 + 2 files changed, 169 insertions(+), 67 deletions(-) diff --git a/chat.lua b/chat.lua index c25e9f1..946a280 100644 --- a/chat.lua +++ b/chat.lua @@ -21,54 +21,44 @@ local function pos_list(ppos, radius) return plist end -local param_desc = { - ["radius"] = S("Search radius."), - ["entity"] = S("Entity technical name."), - ["node"] = S("Node technical name."), - ["old_node"] = S("Technical name of node to be replaced."), - ["new_node"] = S("Technical name of node to be used in place."), - ["old_item"] = S("Technical name of item to be replaced."), - ["new_item"] = S("Technical name of item to be used in place."), - ["ore"] = S("Ore technical name."), +local param_def = { + radius = {name=S("radius"), desc=S("Search radius.")}, + entity = {name=S("entity"), desc=S("Entity technical name.")}, + node = {name=S("node"), desc=S("Node technical name.")}, + old_node = {name=S("old_node"), desc=S("Technical name of node to be replaced.")}, + new_node = {name=S("new_node"), desc=S("Technical name of node to be used in place.")}, + old_item = {name=S("old_item"), desc=S("Technical name of item to be replaced.")}, + new_item = {name=S("new_item"), desc=S("Technical name of item to be used in place.")}, + ore = {name=S("ore"), desc=S("Ore technical name.")}, } -local function format_help(cmd, param_string, params) - local retval = S("Usage:") .. "\n /" .. cmd .. " " .. param_string - .. "\n" - - local p_count = 0 - for _, p in ipairs(params) do - if p_count == 0 then - retval = retval .. "\n" .. S("Params:") - end - - retval = retval .. "\n " .. S(p) .. ": " .. param_desc[p] - p_count = p_count + 1 - end - - return retval -end - local cmd_repo = { entity = { cmd = "remove_entity", - params = "<" .. S("entity") .. "> [" .. S("radius") .. "]", + params = {"entity"}, + oparams = {radius=100}, }, - node = { - cmd_rem = "remove_node", - cmd_rep = "replace_node", - cmd_find = "find_unknown_nodes", - params_rem = "<" .. S("node") .. "> [" .. S("radius") .. "]", - params_rep = "<" .. S("old_node") .. "> <" .. S("new_node") .. "> [" .. S("radius") .. "]", - params_find = "[" .. S("radius") .. "]", + rem_node = { + cmd = "remove_node", + params = {"node"}, + oparams = {radius=5}, + }, + rep_node = { + cmd = "replace_node", + params = {"old_node", "new_node"}, + oparams = {radius=5}, + }, + find_node = { + cmd = "find_unknown_nodes", + oparams = {radius=100}, }, item = { cmd = "replace_item", - params = "<" .. S("old_item") .. "> <" .. S("new_item") .. ">", + params = {"old_item", "new_item"}, }, ore = { cmd = "remove_ore", - params = "<" .. S("ore") .. ">", + params = {"ore"}, }, param = { missing = S("Missing parameter."), @@ -77,6 +67,117 @@ local cmd_repo = { }, } +for k, def in pairs(cmd_repo) do + if k ~= "param" then + local cmd_help = { + param_string = "", + usage_string = "/" .. def.cmd, + } + + if def.params or def.oparams then + if def.params then + local params = {} + for _, p in ipairs(def.params) do + -- translate + table.insert(params, S(p)) + end + + cmd_help.param_string = "<" .. table.concat(params, "> <") .. ">" + end + end + + if def.oparams then + for k, v in pairs(def.oparams) do + local op = k + if type(op) == "number" then + op = v + end + + cmd_help.param_string = cmd_help.param_string .. " [" .. S(op) .. "]" + end + end + + if cmd_help.param_string ~= "" then + cmd_help.usage_string = cmd_help.usage_string .. " " .. cmd_help.param_string + end + + cmd_repo[k].help = cmd_help + end +end + +local function get_cmd_def(cmd) + for k, v in pairs(cmd_repo) do + if v.cmd == cmd then return v end + end +end + +local function format_usage(cmd) + local def = get_cmd_def(cmd) + if def then + return S("Usage:") .. "\n " .. def.help.usage_string + end +end + +local function format_params(cmd) + local def = get_cmd_def(cmd) + + local param_count + local all_params = {} + if def.params then + for k, v in ipairs(def.params) do + table.insert(all_params, p) + end + end + if def.oparams then + for k, v in pairs(def.oparams) do + + end + end + + local retval = "" + local p_count = 0 + + if def.params then + for _, p in ipairs(def.params) do + if p_count == 0 then + retval = retval .. S("Params:") + end + + retval = retval .. "\n " .. S(p) .. ": " .. param_def[p].desc + + p_count = p_count + 1 + end + end + + if def.oparams then + for k, v in pairs(def.oparams) do + if p_count == 0 then + retval = retval .. S("Params:") + end + + local p = k + local dvalue = v + if type(p) == "number" then + p = v + dvalue = nil + end + + retval = retval .. "\n " .. S(p) .. ": " .. param_def[p].desc + if dvalue then + retval = retval .. " (" .. S("default: @1", dvalue) .. ")" + end + + p_count = p_count + 1 + end + end + + return retval +end + +local function format_help(cmd) + return format_usage(cmd) .. "\n\n" .. format_params(cmd) +end + --- Removes nearby entities. -- @@ -85,11 +186,12 @@ local cmd_repo = { -- @tparam[opt] int radius core.register_chatcommand(cmd_repo.entity.cmd, { privs = {server=true}, - description = S("Remove an entity from game."), - params = cmd_repo.entity.params, + description = S("Remove an entity from game.") .. "\n\n" + .. format_params(cmd_repo.entity.cmd), + params = cmd_repo.entity.help.param_string, func = function(name, param) local entity - local radius = 100 + local radius = cmd_repo.entity.oparams.radius if param:find(" ") then entity = param:split(" ") radius = tonumber(entity[2]) @@ -106,8 +208,7 @@ core.register_chatcommand(cmd_repo.entity.cmd, { end if err then - return false, err .. "\n\n" - .. format_help(cmd_repo.entity.cmd, cmd_repo.entity.params, {"entity", "radius"}) + return false, err .. "\n\n" .. format_help(cmd_repo.entity.cmd) end local player = core.get_player_by_name(name) @@ -138,13 +239,14 @@ core.register_chatcommand(cmd_repo.entity.cmd, { -- @chatcmd remove_node -- @param node Node technical name. -- @tparam[opt] int radius -core.register_chatcommand(cmd_repo.node.cmd_rem, { +core.register_chatcommand(cmd_repo.rem_node.cmd, { privs = {server=true}, - description = S("Remove a node from game."), - params = cmd_repo.node.params_rem, + description = S("Remove a node from game.") .. "\n\n" + .. format_params(cmd_repo.rem_node.cmd), + params = cmd_repo.rem_node.help.param_string, func = function(name, param) local nname - local radius = 100 + local radius = cmd_repo.rem_node.oparams.radius if param:find(" ") then nname = param:split(" ") radius = tonumber(nname[2]) @@ -161,8 +263,7 @@ core.register_chatcommand(cmd_repo.node.cmd_rem, { end if err then - return false, err .. "\n\n" - .. format_help(cmd_repo.node.cmd_rem, cmd_repo.node.params_rem, {"node", "radius"}) + return false, err .. "\n\n" .. format_help(cmd_repo.rem_node.cmd) end local ppos = core.get_player_by_name(name):get_pos() @@ -187,13 +288,12 @@ core.register_chatcommand(cmd_repo.node.cmd_rem, { -- @param new_item Technical name of item to be used in place. core.register_chatcommand(cmd_repo.item.cmd, { privs = {server=true}, - description = S("Replace an item in game."), - params = cmd_repo.item.params, + description = S("Replace an item in game.") .. "\n\n" + .. format_params(cmd_repo.item.cmd), + params = cmd_repo.item.help.param_string, func = function(name, param) - local help = format_help(cmd_repo.item.cmd, cmd_repo.item.params, {"old_item", "new_item"}) - if not param:find(" ") then - return false, cmd_repo.param.missing .. "\n\n" .. help + return false, cmd_repo.param.missing .. "\n\n" .. format_help(cmd_repo.item.cmd) end local src = param:split(" ") @@ -211,24 +311,23 @@ core.register_chatcommand(cmd_repo.item.cmd, { --- Replaces nearby nodes. -- --- FIXME: sometimes nodes on top disappear --- -- @chatcmd replace_node -- @param old_node Technical name of node to replace. -- @param new_node Technical name of node to be used in place. -- @tparam[opt] int radius -core.register_chatcommand(cmd_repo.node.cmd_rep, { +core.register_chatcommand(cmd_repo.rep_node.cmd, { privs = {server=true}, - description = S("Replace a node in game."), - params = cmd_repo.node.params_rep, + description = S("Replace a node in game.") .. "\n\n" + .. format_params(cmd_repo.rep_node.cmd), + params = cmd_repo.rep_node.help.param_string, func = function(name, param) - local help = format_help(cmd_repo.node.cmd_rep, cmd_repo.node.params_rep, {"old_node", "new_node", "radius"}) + local help = format_help(cmd_repo.rep_node.cmd) if not param:find(" ") then return false, cmd_repo.param.missing .. "\n\n" .. help end - local radius = 100 + local radius = cmd_repo.rep_node.oparams.radius local params = param:split(" ") local src = params[1] @@ -266,18 +365,19 @@ core.register_chatcommand(cmd_repo.node.cmd_rep, { -- -- @chatcmd find_unknown_nodes -- @tparam[opt] int radius Search radius. -core.register_chatcommand(cmd_repo.node.cmd_find, { +core.register_chatcommand(cmd_repo.find_node.cmd, { privs = {server=true}, - description = S("Find names of unknown nodes."), - params = cmd_repo.node.params_find, + description = S("Find names of unknown nodes.") .. "\n\n" + .. format_params(cmd_repo.find_node.cmd), + params = cmd_repo.find_node.help.param_string, func = function(name, param) - local help = format_help(cmd_repo.node.cmd_find, cmd_repo.node.params_find, {"radius"}) + local help = format_help(cmd_repo.find_node.cmd) if param:find(" ") then return false, cmd_repo.param.excess .. "\n\n" .. help end - local radius = 100 + local radius = cmd_repo.find_node.oparams.radius if param and param:trim() ~= "" then radius = tonumber(param) end @@ -327,8 +427,9 @@ if cleaner.unsafe then -- @param ore Ore technical name. core.register_chatcommand(cmd_repo.ore.cmd, { privs = {server=true}, - description = S("Remove an ore from game."), - params = cmd_repo.ore.params, + description = S("Remove an ore from game.") .. "\n\n" + .. format_params(cmd_repo.ore.cmd), + params = cmd_repo.ore.help.param_string, func = function(name, param) local err if not param or param:trim() == "" then @@ -338,7 +439,7 @@ if cleaner.unsafe then end if err then - return false, err .. "\n\n" .. format_help(cmd_repo.ore.cmd, cmd_repo.ore.params, {"ore"}) + return false, err .. "\n\n" .. format_help(cmd_repo.ore.cmd) end local success = false diff --git a/locale/template.txt b/locale/template.txt index 4e9f484..4f81862 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -14,6 +14,7 @@ new_node= ore= Usage:= Params:= +default: @1= Search radius.= Entity technical name.= Node technical name.= From 5568a1e91aacbe9ad7c48bf1816cb6e50e2be23f Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 27 Jul 2021 19:30:31 -0700 Subject: [PATCH 078/160] Make chat commands plural --- TODO.txt | 1 - changelog.txt | 11 ++++++----- chat.lua | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/TODO.txt b/TODO.txt index b13bb04..1f0615d 100644 --- a/TODO.txt +++ b/TODO.txt @@ -4,6 +4,5 @@ TODO: - update inventories when items are replaced: - creative - storage (chests, etc.) -- make chat commands plural (e.g. /replace_nodes) - add admin tool for replacing/removing nodes - add LBM when removing an item if it is a node diff --git a/changelog.txt b/changelog.txt index ea3a1b9..f96f2f2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,13 +3,14 @@ v1.2 ---- - added API - added chat commands: - - remove_entity - - remove_node - - replace_item - - replace_node + - remove_entities + - remove_nodes + - replace_items + - replace_nodes - find_unknown_nodes + - replace_ores (unsafe) +- added support for unregistering ores (unsafe) - added setting for enabling "unsafe" methods & commands -- added support for unregistering ores - all types are loaded from /cleaner.json file - added localization support diff --git a/chat.lua b/chat.lua index 946a280..25d6071 100644 --- a/chat.lua +++ b/chat.lua @@ -34,17 +34,17 @@ local param_def = { local cmd_repo = { entity = { - cmd = "remove_entity", + cmd = "remove_entities", params = {"entity"}, oparams = {radius=100}, }, rem_node = { - cmd = "remove_node", + cmd = "remove_nodes", params = {"node"}, oparams = {radius=5}, }, rep_node = { - cmd = "replace_node", + cmd = "replace_nodes", params = {"old_node", "new_node"}, oparams = {radius=5}, }, @@ -53,11 +53,11 @@ local cmd_repo = { oparams = {radius=100}, }, item = { - cmd = "replace_item", + cmd = "replace_items", params = {"old_item", "new_item"}, }, ore = { - cmd = "remove_ore", + cmd = "remove_ores", params = {"ore"}, }, param = { From b1fd6df8ce58813287ac78709ad1dd29c30dd966 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 27 Jul 2021 20:46:48 -0700 Subject: [PATCH 079/160] Add Spanish localization --- changelog.txt | 1 + locale/cleaner.es.tr | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 locale/cleaner.es.tr diff --git a/changelog.txt b/changelog.txt index f96f2f2..efae998 100644 --- a/changelog.txt +++ b/changelog.txt @@ -13,6 +13,7 @@ v1.2 - added setting for enabling "unsafe" methods & commands - all types are loaded from /cleaner.json file - added localization support +- added Spanish localization v1.1 ---- diff --git a/locale/cleaner.es.tr b/locale/cleaner.es.tr new file mode 100644 index 0000000..37b5bce --- /dev/null +++ b/locale/cleaner.es.tr @@ -0,0 +1,44 @@ +# textdomain:cleaner + +# Translators: Jordan Irwin (AntumDeluge) + + +# chat commands +entity=entidad +node=nodo +radius=radio +old_item=objeto_antiguo +new_item=objeto_nuevo +old_node=nodo_antiguo +new_node=nodo_nuevo +ore=mineral +Usage:=Uso: +Params:=Parámetros: +default: @1=por defecto: @1 +Search radius.=Radio de búsqueda. +Entity technical name.=Nombre técnico de entidad. +Node technical name.=Nombre técnico de nodo. +Technical name of node to be replaced.=Nombre técnico del nodo reemplazado. +Technical name of node to be used in place.=Nombre técnico del nodo de reemplazo. +Technical name of item to be replaced.=Nombre técnico del objeto reemplazado. +Technical name of item to be used in place.=Nombre técnico del objeto de reemplazo. +Ore technical name.=Nombre técnico de mineral. +Remove an entity from game.=Eliminar una entidad del juego. +Remove a node from game.=Eliminar un nodo del juego. +Replace an item in game.=Sustituir un objecto del juego. +Replace a node in game.=Sustituir un nodo del juego. +Find names of unknown nodes.=Encontrar los nombres de nodos desconocidos. +Remove an ore from game.=Eliminar un mineral del juego. +Missing parameter.=Parámetro extraviado. +Too many parameters.=Demasiados parámetros. +Radius must be a number.=El radio debe ser un número. +Cannot use unknown item "@1" as replacement.=El objeto "@1" es desonocido, no se puede utilizar como sustitución. +Cannot use unknown node "@1" as replacement.=El nodo "@1" es desonocido, no se puede utilizar como sustitución. +Replaced @1 nodes.=Nodos sustituidos: @1 +Removed @1 nodes.=Se eliminaron @1 nodos. +Removed @1 entities.=Se eliminaron @1 entidades. +Found unknown nodes: @1=Se encontraron @1 nodos desconocidos. +No unknown nodes found.=No se encontraron nodos desconocidos. +Ore "@1" not found, not unregistering.=No se encontró el mineral "@1", se mantiene registrado. +Unregistered @1 ores (this will be undone after server restart).=Se anuló @1 minerales del registro. +Success!=¡Éxito! From a221c11ec686a5d16a639042c2644947e41c1535 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 27 Jul 2021 20:48:31 -0700 Subject: [PATCH 080/160] Update docstrings --- chat.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/chat.lua b/chat.lua index 25d6071..f900ab7 100644 --- a/chat.lua +++ b/chat.lua @@ -181,7 +181,7 @@ end --- Removes nearby entities. -- --- @chatcmd remove_entity +-- @chatcmd remove_entities -- @param entity Entity technical name. -- @tparam[opt] int radius core.register_chatcommand(cmd_repo.entity.cmd, { @@ -236,7 +236,7 @@ core.register_chatcommand(cmd_repo.entity.cmd, { --- Removes nearby nodes. -- --- @chatcmd remove_node +-- @chatcmd remove_nodes -- @param node Node technical name. -- @tparam[opt] int radius core.register_chatcommand(cmd_repo.rem_node.cmd, { @@ -283,7 +283,7 @@ core.register_chatcommand(cmd_repo.rem_node.cmd, { --- Replaces an item. -- --- @chatcmd replace_item +-- @chatcmd replace_items -- @param old_item Technical name of item to replace. -- @param new_item Technical name of item to be used in place. core.register_chatcommand(cmd_repo.item.cmd, { @@ -311,7 +311,7 @@ core.register_chatcommand(cmd_repo.item.cmd, { --- Replaces nearby nodes. -- --- @chatcmd replace_node +-- @chatcmd replace_nodes -- @param old_node Technical name of node to replace. -- @param new_node Technical name of node to be used in place. -- @tparam[opt] int radius @@ -423,7 +423,7 @@ core.register_chatcommand(cmd_repo.find_node.cmd, { if cleaner.unsafe then --- Registers an ore to be removed. -- - -- @chatcmd remove_ore + -- @chatcmd remove_ores -- @param ore Ore technical name. core.register_chatcommand(cmd_repo.ore.cmd, { privs = {server=true}, From 84d3960664928de613586b86b3738cb940b0ffe7 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 27 Jul 2021 20:48:51 -0700 Subject: [PATCH 081/160] Re-generate HTML docs --- docs/reference/index.html | 4 +-- docs/reference/topics/api.html | 4 +-- docs/reference/topics/commands.html | 38 ++++++++++++++--------------- docs/reference/topics/settings.html | 4 +-- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/docs/reference/index.html b/docs/reference/index.html index 4362751..0c60cd1 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -62,8 +62,8 @@
    -generated by LDoc 1.4.6 -Last updated 2021-07-12 23:44:34 +generated by LDoc 1.4.6-antum-dev +Last updated 2021-07-27 20:48:37
    diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index d276cf8..83e9078 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -367,8 +367,8 @@
    -generated by LDoc 1.4.6 -Last updated 2021-07-12 23:44:34 +generated by LDoc 1.4.6-antum-dev +Last updated 2021-07-27 20:48:37
    diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index 708e99f..f88b2e8 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -59,19 +59,19 @@

    Chat Commands

    cleaner.get_remove_ores ()Retrieves list of ores to be removed.
    cleaner.register_ore_removal (src)Registers an ore to be removed after server startup.
    cleaner.remove_ore (src) Removes an ore definition. Replaces an item.
    replace_itemreplace_node Replaces nearby nodes.
    Registers a node to be removed.
    cleaner.replace_item (src, tgt[, update_players])Replaces an item with another registered item.
    cleaner.register_item_replacement (src, tgt) Registeres an item to be replaced.
    - + - + - + - + @@ -82,7 +82,7 @@

    Unsafe commands

    remove_entityremove_entities Removes nearby entities.
    remove_noderemove_nodes Removes nearby nodes.
    replace_itemreplace_items Replaces an item.
    replace_nodereplace_nodes Replaces nearby nodes.
    - +
    remove_oreremove_ores Registers an ore to be removed.
    @@ -95,8 +95,8 @@
    - - remove_entity + + remove_entities
    Removes nearby entities. @@ -123,8 +123,8 @@
    - - remove_node + + remove_nodes
    Removes nearby nodes. @@ -151,8 +151,8 @@
    - - replace_item + + replace_items
    Replaces an item. @@ -175,13 +175,11 @@
    - - replace_node + + replace_nodes
    - Replaces nearby nodes.

    - -

    FIXME: sometimes nodes on top disappear + Replaces nearby nodes. @@ -238,8 +236,8 @@

    - - remove_ore + + remove_ores
    Registers an ore to be removed. @@ -264,8 +262,8 @@
    -generated by LDoc 1.4.6 -Last updated 2021-07-12 23:44:34 +generated by LDoc 1.4.6-antum-dev +Last updated 2021-07-27 20:48:37
    diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index 5b35f9f..6d56903 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -100,8 +100,8 @@
    -generated by LDoc 1.4.6 -Last updated 2021-07-12 23:44:34 +generated by LDoc 1.4.6-antum-dev +Last updated 2021-07-27 20:48:37
    From 6b211cf5f63d5e593c2d0adc9dc369b5f70e35d1 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 28 Jul 2021 01:39:38 -0700 Subject: [PATCH 082/160] Add pencil tool for erasing, adding, & swapping nodes --- README.md | 6 +- TODO.txt | 6 +- changelog.txt | 2 + chat.lua | 54 ++++++++++++++++ init.lua | 111 +++++++++++++++++++++++++++++++- misc_functions.lua | 57 ++++++++++++++++ sounds/cleaner_pencil_erase.ogg | Bin 0 -> 17295 bytes sounds/cleaner_pencil_write.ogg | Bin 0 -> 21553 bytes textures/cleaner_pencil.png | Bin 0 -> 255 bytes 9 files changed, 231 insertions(+), 5 deletions(-) create mode 100644 sounds/cleaner_pencil_erase.ogg create mode 100644 sounds/cleaner_pencil_write.ogg create mode 100644 textures/cleaner_pencil.png diff --git a/README.md b/README.md index b3d2c52..970dd5b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,11 @@ A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & ### Licensing: -[MIT](LICENSE.txt) +- Code: [MIT](LICENSE.txt) +- Textures: CC0 +- Sounds: + - cleaner_pencil_write: [CC0](https://freesound.org/people/NachtmahrTV/sounds/571800/) + - cleaner_pencil_erase: [CC0](https://freesound.org/people/damsur/sounds/443241/) ### Requirements: diff --git a/TODO.txt b/TODO.txt index 1f0615d..17ac434 100644 --- a/TODO.txt +++ b/TODO.txt @@ -4,5 +4,9 @@ TODO: - update inventories when items are replaced: - creative - storage (chests, etc.) -- add admin tool for replacing/removing nodes - add LBM when removing an item if it is a node +- make pencil image flip when mode set to "erase" +- update localization files +- add "radius" option for pencil or "xlen", "ylen", & "zlen" options +- add "xrotate" & "zrorate" modes for pencil +- fix pencil "write" mode when pointing to side of node (node gets placed below) diff --git a/changelog.txt b/changelog.txt index efae998..e57265b 100644 --- a/changelog.txt +++ b/changelog.txt @@ -14,6 +14,8 @@ v1.2 - all types are loaded from /cleaner.json file - added localization support - added Spanish localization +- added pencil tool for erasing, adding, & swapping nodes +- added "cleaner" chat command for managing pencil tool settings v1.1 ---- diff --git a/chat.lua b/chat.lua index f900ab7..beb79b9 100644 --- a/chat.lua +++ b/chat.lua @@ -7,6 +7,8 @@ local S = core.get_translator(cleaner.modname) +local aux = dofile(cleaner.modpath .. "/misc_functions.lua") + local function pos_list(ppos, radius) local plist = {} @@ -457,3 +459,55 @@ if cleaner.unsafe then end }) end + + +--- Manages settings for wielded cleaner tool. +-- +-- @chatcmd cleaner +-- @param action Action to execute. Can be "status", "setmode", or "setnode". +-- @param value Mode or node to be set for tool. +core.register_chatcommand("cleaner", { + privs = {server=true}, + description = S("Manage settings for wielded cleaner tool.") .. "\n\n" + .. S("Params:") .. "\n action: Action to execute. Can be one of \"status\", \"setmode\", or \"setnode\"." + .. "\n value: Mode or node to be set for tool.", + params = " ", + func = function(name, param) + local action, value = param + local idx = param:find(" ") + if idx then + param = string.split(param, " ") + action = param[1] + value = param[2] + end + + local player = core.get_player_by_name(name) + local stack = player:get_wielded_item() + local iname = stack:get_name() + local imeta = stack:get_meta() + + if iname ~= "cleaner:pencil" then + return false, S("Unrecognized wielded item: @1", iname) + end + + if action == "status" then + core.chat_send_player(name, iname .. ": " + .. S("mode=@1, node=@2", imeta:get_string("mode"), imeta:get_string("node"))) + return true + end + + if not action or not value then + return false, S("Missing parameter.") + end + + if action == "setmode" then + stack = aux.tool:set_mode(stack, value, name) + elseif action == "setnode" then + stack = aux.tool:set_node(stack, value, name) + else + return false, S("Unrecognized action: @1", action) + end + + return player:set_wielded_item(stack) + end, +}) diff --git a/init.lua b/init.lua index 31df5ff..b3fb769 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,7 @@ ---[[ Cleaner mod - License: MIT -]] + +--- Cleaner +-- +-- @topic tools cleaner = {} @@ -49,3 +50,107 @@ local scripts = { for _, script in ipairs(scripts) do dofile(cleaner.modpath .. "/" .. script .. ".lua") end + + +local S = core.get_translator(cleaner.modname) + + +local sound_handle + +--- Master Pencil +-- +-- @tool cleaner:pencil +-- @img cleaner_pencil.png +-- @privs server +core.register_tool(cleaner.modname .. ":pencil", { + description = S("Master Pencil"), + inventory_image = "cleaner_pencil.png", + liquids_pointable = true, + on_use = function(itemstack, user, pointed_thing) + if not user:is_player() then return end + + local pname = user:get_player_name() + if not core.get_player_privs(pname).server then + core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: server")) + return itemstack + end + + if sound_handle then + core.sound_stop(sound_handle) + sound_handle = nil + end + + if pointed_thing.type == "node" then + local npos = core.get_pointed_thing_position(pointed_thing) + local imeta = itemstack:get_meta() + local mode = imeta:get_string("mode") + local new_node_name = imeta:get_string("node") + + if mode == "erase" then + core.remove_node(npos) + sound_handle = core.sound_play("cleaner_pencil_erase", {object=user}) + return itemstack + elseif core.registered_nodes[new_node_name] then + if mode == "swap" then + core.swap_node(npos, {name=new_node_name}) + sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) + return itemstack + elseif mode == "write" then + local node_above = core.get_node_or_nil(pointed_thing.above) + if not node_above or node_above.name == "air" then + core.place_node(pointed_thing.above, {name=new_node_name}) + sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) + else + core.chat_send_player(pname, S("Can't place node there.")) + end + + return itemstack + else + core.chat_send_player(pname, S("Unknown mode: @1", mode)) + end + end + + core.chat_send_player(pname, S("Cannot place unknown node: @1", new_node_name)) + return itemstack + end + end, + on_secondary_use = function(itemstack, user, pointed_thing) + if not user:is_player() then return end + + local pname = user:get_player_name() + if not core.get_player_privs(pname).server then + core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server")) + return itemstack + end + + local imeta = itemstack:get_meta() + local mode = imeta:get_string("mode") + if mode == "erase" or mode == "" then + mode = "write" + elseif mode == "write" then + mode = "swap" + else + mode = "erase" + end + + return aux.tool:set_mode(itemstack, mode, pname) + end, + on_place = function(itemstack, placer, pointed_thing) + if not placer:is_player() then return end + + local pname = placer:get_player_name() + if not core.get_player_privs(pname).server then + core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server")) + return itemstack + end + + if pointed_thing.type == "node" then + local node = core.get_node_or_nil(core.get_pointed_thing_position(pointed_thing)) + if node then + itemstack = aux.tool:set_node(itemstack, node.name, pname) + end + end + + return itemstack + end, +}) diff --git a/misc_functions.lua b/misc_functions.lua index 4812d49..3b8217e 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -1,4 +1,7 @@ +local S = core.get_translator(cleaner.modname) + + --- Cleans duplicate entries from indexed table. -- -- @local @@ -66,9 +69,63 @@ local function update_world_data(t, data) return false end +local tool = { + modes = { + erase = true, + write = true, + swap = true, + }, +} + +tool.set_mode = function(self, stack, mode, pname) + local iname = stack:get_name() + + if not self.modes[mode] then + if pname then + core.chat_send_player(pname, iname .. ": " .. S("unknown mode: @1", mode)) + end + cleaner.log("warning", iname .. ": unknown mode: " .. mode) + return stack + end + + --[[ FIXME: want to flip item image when mode is set to "erase" + local new_item = table.copy(core.registered_nodes[iname]) + if mode == "erase" then + new_item.inventory_image = "cleaner_pencil.png^[transformFXFY" + else + new_item.inventory_image = "cleaner_pencil.png" + end + + local new_stack = ItemStack(new_item) + ]] + + local imeta = stack:get_meta() + imeta:set_string("mode", mode) + + if pname then + core.chat_send_player(pname, iname .. ": " + .. S("mode set to: @1", imeta:get_string("mode"))) + end + + return stack +end + +tool.set_node = function(self, stack, node, pname) + local imeta = stack:get_meta() + imeta:set_string("node", node) + + if pname then + core.chat_send_player(pname, stack:get_name() .. ": " + .. S("node set to: @1", imeta:get_string("node"))) + end + + return stack +end + return { clean_duplicates = clean_duplicates, get_world_data = get_world_data, update_world_data = update_world_data, + tool = tool, } diff --git a/sounds/cleaner_pencil_erase.ogg b/sounds/cleaner_pencil_erase.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1fe52457b5a858c64433fac4a140aa56d76f6a60 GIT binary patch literal 17295 zcmeIZWmsL!vOl>8VV9MYg|nrVn<%W%0#^8v?@u9>qn-Iba&SohJn5yRwc!8>0HAXxVtHNa zP7sDoBBe&WNhUS!a6~MngcCx>qhv5b@196qQXmy+!1R7HQ49DZ5Fz;vFDzOTl{$=G zR5v-4Q4~f+3c~X2{^Vgx{re^>XbUTqL?sW~oVb0BV6ibg6E1scrObWISrvhiZ5r7yuAq&G1QUh{&bLOlWE?fI%z&EgGa* z5&sp3VTe6#XI+6D$%R0S{8taKZUo~*bM*!P8{}XjMa&|!8o~9P%>q5lEX8_3@*MeQ zpXBW5Ho@H-_wk{f9PV)#Rg|NLo(1FE&FL%9d-e~-Sno5L#quZ5b$s762d5uKG1T}Z zX2mtbD5M&@_^dbeFiO77M?L$^pFH<2UI^sX({YaDYDo_$Hk9v2!(XpYpu)ShigiV!M&s;jyp<3E7I z0}`mz;dtuu|Gt?=Qhy+F8)p7g5TeLZQC<|wGs4z5`u8SuRNaUvjLzMMEzMffr>+5d zIj`$*BDk9s+N7=TP}8ig$XuGD{_HP)R50wNkcll5-~OrDJd*iSj@vVq@_*o@`lA{E zP(3G`!Xf`pJR_UHp?`}Di|jKzFK0AlwLGmB(meHA0t^_iQGp8_vliv|2<5YLID>%xxe#Gp@HtrG~L)Vo9YFh>I>1gc(OBm zT2uH&Z(o7l@>|WkG}7QV($WU$q=5{;o-65AE0BQo{}zo<{tgir0ECihnUiUllQ#w8 z=@cYv2U!3KH5D{-po_Kp*;yH!?-0j7vYK&aS1wKBq1_r=j(K3d%El$}eER zq5+9;KmoSFo0{)G(Co>~r`<;BJXFlFE9+5d80Bu7 zWM-_HR~HJ$E6LD!hOdsP4^v(^fSm>R(}hf;flZ=;?=La{kjRHIDT4J`1nXaEI%Nbl zRRq2Xgny;~HxG$vK8XtvSo~Kdu!eri;K1U)(rgn5B2x$=Z(-Kse;sC2C69@unNE4yE zl6Y|OR$nfD`e4ic2MfN5&`K$-jY?qb!n9INtDNIMMQOW|T7{J^M#0-YTv{0{n)v@I zQpGE5S2Jp5>E)GeWiiCBeEy%J|4zXyGm#5y0p}`2|978U1fs3rfZ$D7mjEDsQ5 zSUoUKPa~>mSm!Da+8fYej4+FCq?7iZDXXj!COgc-^_MBtNDn!qtg^k9ZG=Zc%V@#V zN)HSN6RBk#X~1wXT1bVZLBOAs;|dIQOfs0O99!@)mL=x%RM>MYi9%{t_+Tag=p`z{ z(-`Jrpf15C>8A_Bm13YzO;N0*Dp6Nw#t+j}XQ3}nR<~!?!d7QyPJJfDQktp>0E_Pt zU{|=B?Vut+g#`pty@oB?7U(=>coyS=D5>hv+`Bm+W4Ze?+{YD|i7iG2cS}-Y|9C~} ziaUQ?Bj(b-eoulob8wnsPiIX6Dj)bL_9Mq(f;lRTxV}Uz)yyB&v~yJ#*S( z2sRj;tRBmayb+pEpQ>w*E_Op@z{)+R4*=Go2!KooMip%iUK|nuNdqnb!-OjKZ8SH` ziGw-0bQZDPFpb0ZF@=_~ut@=H8I?NaulM_RZ=nB*^IRr`w1d?*iPX)9pfc45-oszTxSsx`e93r?X$@hm<`} zXJb8v{@)@1(#;v|;P-QQA$@VbsU*69619U%}a05g{uB68IDewVB8`_2fHx|_V`cBT;=_Il!op3FY{ zto2)G@zKigEQQp@)gE&h|ZPVvOxI! z+wf+$$@kdW=0~FgMnaNRot5eQiObpWd4sE;hA8(U^H&Pu=ju=}J}-)nFF~j_CZ5j? zTpoT=aKS|Q%=CDEbjI-!b5c4aEUBa|9bfmPP89vQot=l$WJ7_M(y5{jeDIjqn|`Rz zsr|&5w}oFnp@c=#lN{$&T(uosqwBGm9vBA)P^mwFKr+V@KG6d9YN&4(w%JNb;Y0ju zZ`)QIe%Mv%M{*=2zP{4sb6grTceY+JBx#x6jwip3a%!n+ayH7e#O^7LtKko*v8RU$ zA5wYhp;aE=wflmlljc?xS8TTon5@1NG%5Hob&wLn=V)y_FF;s8*oy6gYu!w$i4S@2 zCWZhTZNe1iyYGH4wqA>?Vv%&+d!F$wZq{S`>h{3-8H=DupzNA4>oki{fS^d^Mk5(1 z92$MFP870wq^Sirm@cRNX*+xOyTeKz#NO;N=*G9@=#DNp1LO4s`Qp8Jn;`m)G{<^( z6%hO*KknEiopJxN9Sow7h&Nm z=A%A|ue0+U-o-VOouiQdzUHJj&{2oZ>iDkDW_Zu5Wjj;bKp?z~f}~*#3WM)Fsu@ye zeQzdg#Oj`l$FX38l3w(cAC+_K#^JxHRd6x=WpOf|a0%7gs_gDZXUC8;l25pkXkR6TpX7Sd}<>ZdI)tvo$pK z^r(IzjPdu*sGnB`Xu;VL-T@0^pV}f+?5m6Irz@63t9=3e{tcdN z#ogZi{@gERp9MQa9yV?pO&%S+6U0b@XS9}nb&+Gpd_5&KXw6!=eo*Z;JR)g7JNf{} z;1L7k8~#! zg!|LoN$4P4$*iqc^}}`Dvqp}x7_UE`+Y{oORsf3${(=PqD(}#-M~zV5=hZaFz1;-@ zZC9Og(k(R|-{v}mWxQw{cs;ys@NQnQ{am-mowwfx<%S2O@!RoBe;;@JbOiMB`oeXt z`Z=<6LgpqTr->p{i1h4a`lA+(vDFu~|#vSxX*=qh=LmQ!s_T%fZ%mBlWIUrw_LWch_UPtL$Q@UKj3XKO2y>S|_c#-PrRTx>d&@LZEzE z4&ONQo;!({v~-%TAkE&!s1i%@H{zOua>{rh^iuB2)XwWJojFJk%Zz<2x$;3feIIlz zLVj6{4y3UC1SV;0jz^*jWL8~1-BkdC*9p~y&rY+ktRtrFYaYGDagP^}84)qjYXFWD z1WLDW&W6U2!}>nBC%M&EYYQ473azGjq4C*AI?rFz8h!SiFxtWewwuIHe|^>T(Mm+T zN8(3;k}RXi0Jcqc+sgGe&?_|67V3KI)2|P5p))6|Y%SjeR#*1SMJ6)7m27z#VY}ON zUVA&k4^h}i;TMs)vLi3sr1LpBW6nn25RrzrahHB zrQ0r(x|WYfBMFW7jQr}T{FcBYPg|r#yKyRXVaHi^4CF)irDw+$qo?^BW#K1`&*_D= zma%WC>8?nVK7gw%Npzyh86FRFPF`7e?o}PkYN!{eu!v)TOrtLD+ZXI_Xcn>6%IlE{ zcZ=Xs`6!4=%6HxqNyY@licSC22UfUp7*iNLT&-6fS z=Np+Zq1&dXYbUhQrgwSifuB!7;`FsTUOvV76YJZoJ6<{|T)Lg~a!GX3>Z~-3tokoR0rZxG$S&|9qq}qr(&m&4(^P{qfo9_H;^{k>h_9 zX)dV=V_2@1pQCXaUR#OBKVd#C0BeM)f{L3@q5~=R>HQ$WVp+3npSf%Pt-jS=EMRgW z0D9l9v*CiDAw?jC%JIRf6!kIR8w*Hr)jQ>wI4!IC2K6yIC51-<% zKWbUX2f)hq@&r6)Nn~(|O-419y{}m`KTHF;3GeBU1ViB~$EOR>+HxFT*``{wc{YD% zo`F=qaW6W4Pj{D(P;pO+Z;l6c7p`5cBFkZB50>gASTzEpK zXt(Sq1(r(HWT*XPIhIqpGH;(c{S|kUt8?V6=Jm??Bjg`ZoH08&W2P1HLqdZ9^EqP8 zv3#hl91==V|9hrDMy(;Hcfq1{?s-q@yW@Pkrhf9JOzpvITWhN8(;e=9$nTy2V5n6; zAH0#hBf~rrQu6F%5o)qb03af9IQ038A_tydPfe8reF}JZs@lv0=n;vbj)zLdsTS(E zK*0=wkkjoC$mbPD<{G zwMiit3i5i5EtYb=MqXmOS;ip0hSO$YDbm#670x;g)@`(^0R{A0J+CjTvXhd%jZ9M{ zDN9M_wkQ=eo|3!fZC+>jTsTlioto6@pT~$HQ4|L`4Mc`Y@7C6-RtR^}X!keEbz(uK>ay44r!P=|L=MQeh_vD$ z6m?lF)NC#_1t}_y;v47_G9a%2#ZS*asG#PFuk8x-;7NK<4ao2x?jK!A9JwtSl)&6# z(wFO1H?vR8q82FC(%IVBH1>8x5d}5%n;`MSRk!BB+{;OovXLdc>gsgnieU~N{pqIWYS)v1Xror7il!+mrI|8jQ1-!DXMplbYusn0 z1|uxq)eCm+P!_Uq0x{PWr2M1(lC1sjoLt+$I-Zn#a2SagO0%pd3ba*Nl>|%Qz_4ee zN}7X%0L!Tz>LJ0oOCgC>{xza)r^bP-&v?r*eqe9D|d#zev zz^Q|vt54D&>J;FeYr@GY`8(k|FXj;2g)Nq$O41rX5)$)jxldx#j5~84&N zGe6;K@=}aN@BDrjV5qa-J%+vGJDA)-uMlTj4nFs!(dXI!3uR%R4t)=(pQjwhelnEF73OJ2L3{NuDFcFL(J0%<3iZt>e45;YE21 zA4f;K8d0k{S304B)I_u9__LnPQa5r`F!$nwmtRsD6rk85?=$LpZo6XyqL3>bV3tfm z*ZE6%I^P_j;EPH8-lH^Oi!wWheZbcVw6Aoe4x?Hm>eo063PJ)jkIftiEdwf=$KYRa zKx%~580mv=n&=qPb03e7M+7|5Uv`WnO(m^V!&`B$3yEaijvb86-QG_OZ2ic1g{x+l zB{mYd$gaYtK30h`GGJ(#!?(9p5ZUyWP1)|PT(MaPGPQ;xrU8P?WZbJ=R#Hu-juSU= zvoe$mZOXe*4^iQV7lF%uyTLMpiZe0{w(trGjY+)f>T`S;JO>3n>>VM`JiRVFRiaB4ybi5OMh^slpWfi1=eVjRxV~|cQ@?xS;Q;OIoc3_DygHq$ z6S1Bphbf1b&E>HYo!`1>SFE2Rjs}V^x_$e;^O#%euDqgJDkfif#TR=*C;Ag7f&iWK zvyxkz~%@w@?O>s1 ztsLo_D%J}7l&hK8a9B_7Kt_{f%cn6psVX$Ar&-vsOtKU95%C@kb?L|2?T<4O^5oI` zX|v5ky|}VvFmHO7H2(7YnW`9uenHuJe2udx-lB9QUK^vBZu3VH?L!r?iNfxy}eyTjC3hEdjmcj1po6r)JklreKHd)W| z@kblmiuFVvr=I~o0dL{9g8IAZV`!wafLBKsC(5}4+lI8-v80<{3vdM z3>Y)$Y+C4v`O*3^9UhI|Eb}@w=@;IUR7j|}ihCY7qFkwotmk3cR}1O9HhExvI&PiP zzq7bwe2JtWvf6T4wD{DvKfF*q_;?k`PaMr#IK@wMHR$?ExL$0Fc<8rMNsYJHfoDKS z_V}WWNLOI~oSl|`{Nv|7%1)GrTDJnNnxxq-#2HE<$6wcJWM&5H%ZV z%PW_e%(PGUi|Fy3-jLq=-1P;5-n9AC*UYxl zz_2!BrXgbBFTeHMLbO8v5KC-2C+}=mvgVE+N;r5MFuToG;0eihbjgjo`zOOX`#Yrp zL#2##hDp0D#o^^!2FqfPBu5lZEbVK(Ga=}jF&#MZ+Ws(RFuvXSs!znjn?92Y4XZ7M z)cEl0592Oxe6MR_$U#+p-^p`&S7}b13y0zZVqQF*grEEtH)NpMD!U)~TWMukUUs}q z6&tks*Lh}Nomps(pd6Xx0d>vKNU|8Y8KbV+)sL{85B+^(vA+>m51={u1SZsR-LB4) zO$E|T*aZ@=y=r)qE&A~0xyI%BjXViKm(^b4?8&8uc+ym1@5MVe{>N$Q z43VfY1{%6R4#@9M7bF8!sWl{i(9=3GudzLvzO(D5hjAk@N{PP9%geKOIZE>v-wx`J zMsDrfFp+Fm+Bqnl2TU09jbc7fa9uy`+V`CMp+zDJdAE-lwWpSMk`D1b8W{%dOpteM zvAElkk)rj;tGJlgQy;14~@31#{Shesbb6PPh* zen{vu$O7EXSzq8@JT0y|`TO{BZe#NKytb16K_R`Z#L6vS0#8A2YD8HUwB)D!>fTeI zJx?Ar*;I8v;K)Q-dtu@$G9W@WH#s8ILCreB>?6i+(y#Q&YVCpE<11c_!-}jB*&x<= z`=VbC7h^&DnkSQ*uOHE&P@cIcA!V-83Pt@K+qqAN=l*Y{3FX!kV;F;}UVe(ZkPn|NwWn`W;UgOveB;46(}HfN8U}QQ@qNVHN&J(3Nk~EUkXZ7o zxv~-wukGfi1I6e2D<6Kp&Tay|>VJ9`!w+d^$>Nk>(XFpcp8#1EWGmYp8CB9^iphfB zS37Wgot90%W>9d-CpbY_c{dYYkRE?J-;R9wiM9g#y6cUBdVJ1+Tk^AJghu zT8WD?6KF@!bQFN<$vqnM!5Rwp;v`UHDnkeWidaWt-QRDleG8lvop_AFdhwyS4KA{* z6DSc{weD73|FEjyrMLPacQH@yQrSrCqR=vR#m9b~(rP7CAZ-hSnJUa%$LQrPs`BnF z)A)Afv^t7_?UyivG>`8cG~LvPY$GG3h7b6#iRQhdA=Sr{Nxg}fUd>Uh==g9V>Q>hUCmE~bH^S>s!^M@K8gt+5MJ0K z1bMX}>f%W30_-FJaw42DQ5UA2w+z5qU9}N3booH?6s-Ar93=<<=40|d88n^Z2U(k* zNtrrQ$D_q>e#MHfg9AcTWJc^|Re3fpyt_h?m|DztJJqn3jevX}C>g$A^Wg`9{;~Z5*8+_YnUquGWg}l&+PdveAs7RIk%`fKYRd zz9cqlLrO9tnm}99NeQuS)%O%|s;XzPPnnjY1?_o@i-qW=UdbK0!U{NwVJ(bc5I1Tt ziDBpyXj<_y^-Bf1-Lxvsr>m}1Flf2}WGz#HmWc8$nVj8J3VjR#p**y7r+;Il!14Ca35={e9!sIJah)nDqL4n-sCowNXcIvt}y!AWQpa zr%08^z)C!;<%H5I)bQ7c80YQ7vofr%Mc}n-oYM9}F2gfdDR5ct$;h>s9gRC-f`6f+bT6SMTUfsfrbfV2R9Py#UVc+>c zKzw(QHF&q$hCS0uy$Ok}8H=hFfM@DP$p!WJSbzfF2<h6-T>_st}B3}D((f{?PYV62&$ZgVLt3-n4lfOS(r zV^xP~R6kip4!(Ahx(MAf?BKAnNAD4gTSrRbTDa4V%<9>X$y8oOnrV;gDkLLjd*~$| zFk~i+E`2fN4Lz1mLv8elX_Us~d#WWAO?RSoT>t3Q!ym*Nh!g~ER(=?na8ZDaR3*jG zY-kHYJ`7#us!kYKBHxGJYlW>=#z8G2j1NlBd^`4ghE1lC&sX#%O%9d9QN%(J?(BRz z^cUzq3es)iQ`m~K{T>R>`Ay$4J{QaQ%ZRCq%AE3N&79#*(>GQ3iVJZswcn8J5jiR1!)0j}Mafzf zWJ>A36p^Y{pP-IfUTs2uo~G+M&$g7mAIFipRV+U}k?7HpV!HAZ`K^BQg#Tka+P5ZN z8bx>T9LWkD28e(~GhZbzkZ`{lO~@YKirn(vq2$LM(j>x1&o}8m;RT=dzUd|NxBlI> zk@rhO8Y2(I=v_#B&%4Y) z1o`Jms3ETP7yBk5Ckt-v{Utx(gvNUql?mP-B%{n$=h!&PUIZ)|hBnQS z31RH)F|b@P1N99U(eYMy3N~jubmLs z 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 XC&~pGH4_sny+;SDp~$8`mtOo|$YVf* literal 0 HcmV?d00001 diff --git a/sounds/cleaner_pencil_write.ogg b/sounds/cleaner_pencil_write.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3afa8aabf4f90889f482d3db9e415c9158af83b1 GIT binary patch literal 21553 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 literal 0 HcmV?d00001 From b9455caeb28b4c64329612594fc0381b15d4f9a6 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 28 Jul 2021 01:41:15 -0700 Subject: [PATCH 083/160] LDoc: add "tool" type --- docs/config.ld | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/config.ld b/docs/config.ld index cee5dc0..cf42efe 100644 --- a/docs/config.ld +++ b/docs/config.ld @@ -4,6 +4,7 @@ format = "markdown" boilerplate = false file = { + "init.lua", "settings.lua", "api.lua", "chat.lua", @@ -11,8 +12,14 @@ file = { new_type("chatcmd", "Chat Commands") new_type("setting", "Settings") +new_type("tool", "Tools") custom_tags = { + { + "privs", + title = "Required Privileges", + }, + -- settings { "settype", title = "Setting Type", @@ -21,4 +28,12 @@ custom_tags = { "default", title = "Default Value", }, + -- craft items/tools + { + "img", + title = "Image", + format = function(value) + return "" + end, + }, } From a657e566d5f24dda69d96dac8e00cdf559b72e51 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 28 Jul 2021 01:41:26 -0700 Subject: [PATCH 084/160] Re-generate HTML docs --- docs/reference/index.html | 7 +- docs/reference/topics/api.html | 23 +++++- docs/reference/topics/commands.html | 45 +++++++++++- docs/reference/topics/settings.html | 5 +- docs/reference/topics/tools.html | 109 ++++++++++++++++++++++++++++ 5 files changed, 185 insertions(+), 4 deletions(-) create mode 100644 docs/reference/topics/tools.html diff --git a/docs/reference/index.html b/docs/reference/index.html index 0c60cd1..6baa16b 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -32,6 +32,7 @@

    Topics

      +
    • tools
    • settings
    • api
    • commands
    • @@ -45,6 +46,10 @@

      Topics

      + + + + @@ -63,7 +68,7 @@
      generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-27 20:48:37 +Last updated 2021-07-28 01:39:43
      diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index 83e9078..82b12c1 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -40,6 +40,7 @@

      Topics

      + +

      Returns:

      @@ -141,6 +144,8 @@ + +

      Returns:

      @@ -161,6 +166,8 @@
      Registers an entity to be removed. + + @@ -184,6 +191,8 @@
      Registers a node to be removed. + + @@ -207,6 +216,8 @@
      Replaces an item with another registered item. + + @@ -239,6 +250,8 @@
      Registeres an item to be replaced. + + @@ -266,6 +279,8 @@
      Registers a node to be replaced. + + @@ -302,6 +317,8 @@ + +

      Returns:

      @@ -322,6 +339,8 @@
      Registers an ore to be removed after server startup. + + @@ -345,6 +364,8 @@
      Removes an ore definition. + + @@ -368,7 +389,7 @@
      generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-27 20:48:37 +Last updated 2021-07-28 01:39:43
      diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index f88b2e8..e107e17 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -40,6 +40,7 @@

      Topics

      + + + +
      toolsCleaner
      settings Cleaner Settings remove_ores Registers an ore to be removed.
      cleanerManages settings for wielded cleaner tool.

      @@ -101,6 +106,8 @@
      Removes nearby entities. +
    + @@ -129,6 +136,8 @@
    Removes nearby nodes. + + @@ -157,6 +166,8 @@
    Replaces an item. + + @@ -181,6 +192,8 @@
    Replaces nearby nodes. + + @@ -212,6 +225,8 @@
    Checks for nearby unknown nodes. + + @@ -242,6 +257,8 @@
    Registers an ore to be removed. + + @@ -255,6 +272,32 @@ +
    +
    + + cleaner +
    +
    + Manages settings for wielded cleaner tool. + + + + + + +
      +
    • action + Action to execute. Can be "status", "setmode", or "setnode". +
    • +
    • value + Mode or node to be set for tool. +
    • +
    + + + + +
    @@ -263,7 +306,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-27 20:48:37 +Last updated 2021-07-28 01:39:43
    diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index 6d56903..2c902bb 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -39,6 +39,7 @@

    Topics

    Setting Type:

      bool @@ -87,6 +89,7 @@
        false
      +
    @@ -101,7 +104,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-27 20:48:37 +Last updated 2021-07-28 01:39:43
    diff --git a/docs/reference/topics/tools.html b/docs/reference/topics/tools.html new file mode 100644 index 0000000..4002522 --- /dev/null +++ b/docs/reference/topics/tools.html @@ -0,0 +1,109 @@ + + + + + Cleaner mod for Minetest + + + + +
    + +
    + +
    +
    +
    + + +
    + + + + + + +
    + +

    Topic tools

    +

    Cleaner

    +

    + +

    + + +

    Tools

    + + + + + +
    cleaner:pencilMaster Pencil
    + +
    +
    + + +

    Tools

    + +
    +
    + + cleaner:pencil +
    +
    + Master Pencil + +

    Required Privileges:

    +
      + server +
    + + +

    Image:

    +
      + +
    + + + + + + +
    +
    + + +
    +
    +
    +generated by LDoc 1.4.6-antum-dev +Last updated 2021-07-28 01:39:43 +
    +
    + + From 6bbc63dd19d69a2dc5a9f2fd57a54fffdbac6ed4 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 28 Jul 2021 01:44:33 -0700 Subject: [PATCH 085/160] Don't list "cleaner" under unsafe commands in docs --- chat.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/chat.lua b/chat.lua index beb79b9..8cc399f 100644 --- a/chat.lua +++ b/chat.lua @@ -460,6 +460,8 @@ if cleaner.unsafe then }) end +--- @section end + --- Manages settings for wielded cleaner tool. -- From 6c1104d19bc83eaae4b592a08984a63385fd3c66 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Wed, 28 Jul 2021 01:44:52 -0700 Subject: [PATCH 086/160] Re-generate HTML docs --- docs/reference/index.html | 2 +- docs/reference/topics/api.html | 2 +- docs/reference/topics/commands.html | 62 ++++++++++++++--------------- docs/reference/topics/settings.html | 2 +- docs/reference/topics/tools.html | 2 +- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/reference/index.html b/docs/reference/index.html index 6baa16b..519b8e0 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -68,7 +68,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:39:43 +Last updated 2021-07-28 01:43:18
    diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index 82b12c1..c28feb5 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -389,7 +389,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:39:43 +Last updated 2021-07-28 01:43:18
    diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index e107e17..e5d426c 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -79,6 +79,10 @@ find_unknown_nodes Checks for nearby unknown nodes. + + cleaner + Manages settings for wielded cleaner tool. +

    Unsafe commands

    @@ -86,10 +90,6 @@ - - - -
    remove_ores Registers an ore to be removed.
    cleanerManages settings for wielded cleaner tool.

    @@ -242,6 +242,32 @@ +
    +
    + + cleaner +
    +
    + Manages settings for wielded cleaner tool. + + + + + + +
      +
    • action + Action to execute. Can be "status", "setmode", or "setnode". +
    • +
    • value + Mode or node to be set for tool. +
    • +
    + + + + +

    Unsafe commands

    @@ -272,32 +298,6 @@ - -
    - - cleaner -
    -
    - Manages settings for wielded cleaner tool. - - - - - - -
      -
    • action - Action to execute. Can be "status", "setmode", or "setnode". -
    • -
    • value - Mode or node to be set for tool. -
    • -
    - - - - -
    @@ -306,7 +306,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:39:43 +Last updated 2021-07-28 01:43:18
    diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index 2c902bb..dd74440 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -104,7 +104,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:39:43 +Last updated 2021-07-28 01:43:18
    diff --git a/docs/reference/topics/tools.html b/docs/reference/topics/tools.html index 4002522..7d3b82f 100644 --- a/docs/reference/topics/tools.html +++ b/docs/reference/topics/tools.html @@ -102,7 +102,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:39:43 +Last updated 2021-07-28 01:43:18
    From 9dfa90292c661390eafb15b11eb1cafad5353828 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 12:32:17 -0700 Subject: [PATCH 087/160] Flip pencil image when mode changed --- TODO.txt | 1 - init.lua | 100 ++++------------------------- misc_functions.lua | 153 ++++++++++++++++++++++++++++++++++++--------- 3 files changed, 138 insertions(+), 116 deletions(-) diff --git a/TODO.txt b/TODO.txt index 17ac434..deaf629 100644 --- a/TODO.txt +++ b/TODO.txt @@ -5,7 +5,6 @@ TODO: - creative - storage (chests, etc.) - add LBM when removing an item if it is a node -- make pencil image flip when mode set to "erase" - update localization files - add "radius" option for pencil or "xlen", "ylen", & "zlen" options - add "xrotate" & "zrorate" modes for pencil diff --git a/init.lua b/init.lua index b3fb769..18589bb 100644 --- a/init.lua +++ b/init.lua @@ -66,91 +66,17 @@ core.register_tool(cleaner.modname .. ":pencil", { description = S("Master Pencil"), inventory_image = "cleaner_pencil.png", liquids_pointable = true, - on_use = function(itemstack, user, pointed_thing) - if not user:is_player() then return end - - local pname = user:get_player_name() - if not core.get_player_privs(pname).server then - core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: server")) - return itemstack - end - - if sound_handle then - core.sound_stop(sound_handle) - sound_handle = nil - end - - if pointed_thing.type == "node" then - local npos = core.get_pointed_thing_position(pointed_thing) - local imeta = itemstack:get_meta() - local mode = imeta:get_string("mode") - local new_node_name = imeta:get_string("node") - - if mode == "erase" then - core.remove_node(npos) - sound_handle = core.sound_play("cleaner_pencil_erase", {object=user}) - return itemstack - elseif core.registered_nodes[new_node_name] then - if mode == "swap" then - core.swap_node(npos, {name=new_node_name}) - sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) - return itemstack - elseif mode == "write" then - local node_above = core.get_node_or_nil(pointed_thing.above) - if not node_above or node_above.name == "air" then - core.place_node(pointed_thing.above, {name=new_node_name}) - sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) - else - core.chat_send_player(pname, S("Can't place node there.")) - end - - return itemstack - else - core.chat_send_player(pname, S("Unknown mode: @1", mode)) - end - end - - core.chat_send_player(pname, S("Cannot place unknown node: @1", new_node_name)) - return itemstack - end - end, - on_secondary_use = function(itemstack, user, pointed_thing) - if not user:is_player() then return end - - local pname = user:get_player_name() - if not core.get_player_privs(pname).server then - core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server")) - return itemstack - end - - local imeta = itemstack:get_meta() - local mode = imeta:get_string("mode") - if mode == "erase" or mode == "" then - mode = "write" - elseif mode == "write" then - mode = "swap" - else - mode = "erase" - end - - return aux.tool:set_mode(itemstack, mode, pname) - end, - on_place = function(itemstack, placer, pointed_thing) - if not placer:is_player() then return end - - local pname = placer:get_player_name() - if not core.get_player_privs(pname).server then - core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server")) - return itemstack - end - - if pointed_thing.type == "node" then - local node = core.get_node_or_nil(core.get_pointed_thing_position(pointed_thing)) - if node then - itemstack = aux.tool:set_node(itemstack, node.name, pname) - end - end - - return itemstack - end, + on_use = aux.tool.on_use, + on_secondary_use = aux.tool.on_secondary_use, + on_place = aux.tool.on_place, +}) + +core.register_tool(cleaner.modname .. ":pencil_1", { + description = S("Master Pencil"), + inventory_image = "cleaner_pencil.png^[transformFXFY", + liquids_pointable = true, + groups = {not_in_creative_inventory=1}, + on_use = aux.tool.on_use, + on_secondary_use = aux.tool.on_secondary_use, + on_place = aux.tool.on_place, }) diff --git a/misc_functions.lua b/misc_functions.lua index 3b8217e..12fc564 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -75,48 +75,145 @@ local tool = { write = true, swap = true, }, + format_name = function(self, stack) + local iname = stack:get_name() + if iname == "cleaner:pencil_1" then + iname = "cleaner:pencil" + end + + return iname + end, + + set_mode = function(self, stack, mode, pname) + local iname = self:format_name(stack) + + if not self.modes[mode] then + if pname then + core.chat_send_player(pname, iname .. ": " .. S("unknown mode: @1", mode)) + end + cleaner.log("warning", iname .. ": unknown mode: " .. mode) + return stack + end + + local imeta = stack:get_meta() + imeta:set_string("mode", mode) + + if pname then + core.chat_send_player(pname, iname .. ": " + .. S("mode set to: @1", imeta:get_string("mode"))) + end + + local new_stack + if mode == "erase" then + new_stack = ItemStack("cleaner:pencil_1") + else + new_stack = ItemStack("cleaner:pencil") + end + + local new_meta = new_stack:get_meta() + new_meta:from_table(imeta:to_table()) + + return new_stack + end, + + set_node = function(self, stack, node, pname) + local imeta = stack:get_meta() + imeta:set_string("node", node) + + if pname then + core.chat_send_player(pname, stack:get_name() .. ": " + .. S("node set to: @1", imeta:get_string("node"))) + end + + return stack + end, } -tool.set_mode = function(self, stack, mode, pname) - local iname = stack:get_name() +tool.on_use = function(stack, user, pointed_thing) + if not user:is_player() then return end - if not self.modes[mode] then - if pname then - core.chat_send_player(pname, iname .. ": " .. S("unknown mode: @1", mode)) - end - cleaner.log("warning", iname .. ": unknown mode: " .. mode) + local pname = user:get_player_name() + if not core.get_player_privs(pname).server then + core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: server")) return stack end - --[[ FIXME: want to flip item image when mode is set to "erase" - local new_item = table.copy(core.registered_nodes[iname]) - if mode == "erase" then - new_item.inventory_image = "cleaner_pencil.png^[transformFXFY" - else - new_item.inventory_image = "cleaner_pencil.png" + if sound_handle then + core.sound_stop(sound_handle) + sound_handle = nil end - local new_stack = ItemStack(new_item) - ]] + if pointed_thing.type == "node" then + local npos = core.get_pointed_thing_position(pointed_thing) + local imeta = stack:get_meta() + local mode = imeta:get_string("mode") + local new_node_name = imeta:get_string("node") - local imeta = stack:get_meta() - imeta:set_string("mode", mode) + if mode == "erase" then + core.remove_node(npos) + sound_handle = core.sound_play("cleaner_pencil_erase", {object=user}) + return stack + elseif core.registered_nodes[new_node_name] then + if mode == "swap" then + core.swap_node(npos, {name=new_node_name}) + sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) + return stack + elseif mode == "write" then + local node_above = core.get_node_or_nil(pointed_thing.above) + if not node_above or node_above.name == "air" then + core.place_node(pointed_thing.above, {name=new_node_name}) + sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) + else + core.chat_send_player(pname, S("Can't place node there.")) + end - if pname then - core.chat_send_player(pname, iname .. ": " - .. S("mode set to: @1", imeta:get_string("mode"))) + return stack + else + core.chat_send_player(pname, S("Unknown mode: @1", mode)) + end + end + + core.chat_send_player(pname, S("Cannot place unknown node: @1", new_node_name)) + return stack end - - return stack end -tool.set_node = function(self, stack, node, pname) - local imeta = stack:get_meta() - imeta:set_string("node", node) +tool.on_secondary_use = function(stack, user, pointed_thing) + if not user:is_player() then return end - if pname then - core.chat_send_player(pname, stack:get_name() .. ": " - .. S("node set to: @1", imeta:get_string("node"))) + local pname = user:get_player_name() + if not core.get_player_privs(pname).server then + core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server")) + return stack + end + + local imeta = stack:get_meta() + local mode = imeta:get_string("mode") + if mode == "erase" or mode == "" then + mode = "write" + elseif mode == "write" then + mode = "swap" + else + mode = "erase" + end + + return tool:set_mode(stack, mode, pname) +end + +tool.on_place = function(stack, placer, pointed_thing) + if not placer:is_player() then return end + + local pname = placer:get_player_name() + if not core.get_player_privs(pname).server then + core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server")) + return stack + end + + if pointed_thing.type == "node" then + local node = core.get_node_or_nil(core.get_pointed_thing_position(pointed_thing)) + if node then + stack = tool:set_node(stack, node.name, pname) + end end return stack From d4ec55be08a2b01aa395faedf986843ad7b98036 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 12:40:25 -0700 Subject: [PATCH 088/160] Add usage docstring for pencil item --- init.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/init.lua b/init.lua index 18589bb..0f34630 100644 --- a/init.lua +++ b/init.lua @@ -62,6 +62,16 @@ local sound_handle -- @tool cleaner:pencil -- @img cleaner_pencil.png -- @privs server +-- @usage +-- place (right-click): +-- - when not pointing at a node, changes modes +-- - when pointing at a node, sets node to be used +-- +-- use (left-click): +-- - executes action for current mode: +-- - erase: erases pointed node +-- - write: adds node +-- - swap: replaces pointed node core.register_tool(cleaner.modname .. ":pencil", { description = S("Master Pencil"), inventory_image = "cleaner_pencil.png", From cf01b532f036adf20b60743e24220abd09adbf2d Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 12:40:38 -0700 Subject: [PATCH 089/160] Re-generate HTML docs --- docs/reference/index.html | 2 +- docs/reference/topics/api.html | 2 +- docs/reference/topics/commands.html | 2 +- docs/reference/topics/settings.html | 2 +- docs/reference/topics/tools.html | 14 +++++++++++++- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/reference/index.html b/docs/reference/index.html index 519b8e0..85effb5 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -68,7 +68,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:43:18 +Last updated 2021-07-29 12:39:47
    diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index c28feb5..2d2357b 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -389,7 +389,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:43:18 +Last updated 2021-07-29 12:39:47
    diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index e5d426c..41b198e 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -306,7 +306,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:43:18 +Last updated 2021-07-29 12:39:47
    diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index dd74440..df25bda 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -104,7 +104,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:43:18 +Last updated 2021-07-29 12:39:47
    diff --git a/docs/reference/topics/tools.html b/docs/reference/topics/tools.html index 7d3b82f..2c0be7a 100644 --- a/docs/reference/topics/tools.html +++ b/docs/reference/topics/tools.html @@ -93,6 +93,18 @@ +

    Usage:

    +
      +
      place (right-click):
      +- when not pointing at a node, changes modes
      +- when pointing at a node, sets node to be used
      +
      +use (left-click):
      +- executes action for current mode:
      +  - erase: erases pointed node
      +  - write: adds node
      +  - swap:  replaces pointed node
      +
    @@ -102,7 +114,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-28 01:43:18 +Last updated 2021-07-29 12:39:47
    From d3082948b19df4bcabe932596bb23cd19b232c64 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 12:42:08 -0700 Subject: [PATCH 090/160] Add sound sources used to created OGG files --- sounds_src/cleaner_pencil_erase.flac | Bin 0 -> 83580 bytes sounds_src/cleaner_pencil_write.flac | Bin 0 -> 158861 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 sounds_src/cleaner_pencil_erase.flac create mode 100644 sounds_src/cleaner_pencil_write.flac diff --git a/sounds_src/cleaner_pencil_erase.flac b/sounds_src/cleaner_pencil_erase.flac new file mode 100644 index 0000000000000000000000000000000000000000..29e6d13d3519bfd0a9f0fe9dc3af26966f1189a6 GIT binary patch literal 83580 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 literal 0 HcmV?d00001 diff --git a/sounds_src/cleaner_pencil_write.flac b/sounds_src/cleaner_pencil_write.flac new file mode 100644 index 0000000000000000000000000000000000000000..e047fa63755d5d75977167546e0cae2da85f6dfd GIT binary patch literal 158861 zcmV(uK%hE;BAMATls9G%+zUH2?qr0RQ;Or~r*t|A78v z{@MO>{jUE{|F-|c0ha&g{iOUA83kySmK6XewEr z%+vX%0FS#`r+PIJ#+Sy1xJ*EoH-((b80@O$=hZWMLBo^7Q*qD+-rg>Js7IggQibO5 ziyWpa0hjBLNa$!bQZ}Od-N?J$r{Ba?KssYhEl(g&r+i=RMIeb0*l^&UL0nf(4KC1| zXC0(lCodvT#tV_*z7A@8k~1iV02`m99+{bXyRl$rfohApth|gjfOtbedRl9GjigTe z*@Ulr`ih8AW*pT@bytrrD*X@}_^lTGv0M)Wafjh)q=&VB$S9nNvbnZT#vq5NPQqo_)}Y~-$Z)S4MTh#E#|41 zho`nD*+JIo=x77hN!QU7V-Be~YE)@P z&+eV43=K#7{CDP0ZALZ+rkAPG6J(mjkO`Ls&3hCJ(QPT;C z=$Dt4CaA`GPiXZbOvv#yr5Wk;ZG##;8FfEZU`RA-^9y>uMyC}P^uJw`IFt|HXluI0 zG-DFW3Ptn_Lu%Znot=aGNkR(5vVmyNl^{y{ZYPRRD8f7rUPJ(tVcJ5O5Y-oyskMf* z;Bv%F2?q&XU{QAiH5oVa!HXD-kj2W6JYoEN!sWrVU9(2gIhozRaqC0?Q%F!o$Qtsn zP`7O8*sH$$2OrzWFNRHEfsne%XeG+-{IQ16ubb&{kqMYV7~t_F58#J^qH+st3O6OK zk&qX;bHe>C3~_uUI^$Bvf-leIVFG}`SEKoapijKzays&xV=|rZKMy6!X4w=5_fmIg zbZ2RRh>uUIx~|c~D27|Q_%#Qw)bJ3d2|snHTY~r(TgVW%m)N&FOCsB7;Ummp&m{Su zb-Y6~nfjXqiYskX-tsTA~?t{O##O_oYDa(HpP z{xUYH^G{|y9Dq5k=CL#~mtLpn=;w8Id0CWB7$7q{>_?`N2rm#ZV~L!9A(FGQ zhnG1vm_Z8qHQpz7f7GBgz8xwkpKhofDN@gPJlFW3jyDg+EB&+{J)jnjE32_FnNO0T zpW8eEQqc7kgld>Cgh{fYB1rGT_Xz@?U*wIavvz;2SSm8*ceT_wEG=Pd%H7pA%9Yx( zWQvdW83%qSMI}0UqJFWR1*S;`tz7;9qU#xV%x5Rb>%oU1sa3pr?13xt!%X z&fKkf?$OE18eH@ct?<@L2VW_xnm$epZ^%ya0@&zg5C4r9WXo{;>u8ur=bRgF#^L?7 z9l4acp<8y40-6xt{VnrdCs0lEArREsaotyu)rrX*{;RtWC;~*9$fFb%)b^FKnn@Kl z7DYC(w=CoX3*Z`9&f>5jqKf`!Npg})J9$@|fx%UR7SM9iY046JLC^l4}#G*oxVTk#=$&T56*CI3{s)p*<3Nt}o=Qc2<*zf%lC~TJ( z!RtcW)n0Hz-#jMr0u^m4_&+~v1$&Bi>wy^NTrJX4C!&o1r3oH%i{K=>>$Qd#s5y}t{l<(c)-Khjfo{C5V-bu>h3po)fG zA;Uof4`atZM{ z^V|%wNab5gxh3Pqx^p-_b-$%9<212pZB+sg$;Ck#17}{ro|hwjT;`EZTkO&O>s?L% z1vE4!FD{$oV zk4XaP3r{1s|r%F}$#u1vM;u&zdsZEKv+n<^nUhGBQ1Ng^dgn(oE5-q|B zD9Po{N-3AspEr59Zzi670;7YeBQr&n%&r2YP87n$cjDPUBPU=f25%`qu2c~T6?Vvqit9??ASA<4ZD3p|< zOHAd21xd!n7bk@|V1d^mRlHI9ge0a8_5nZ3{lx?tMX62P#Ck{|dK4wBZ>&j^ zB95}8V=@3_x#lE$949042+nS-cr#yN<&4R){&@S=t%^! zMvR+gC3Du*0s*|TyE%&!0wiCh`ON2OKUuir1TSi@HoqLJFKIbS7<$~CUXK)&T#;|q zTlOPuKy1n(bjHU=NO^3d#CnUVvuZ?ukxUx{I%W)L`3!hMmoUblul-}9T4^r_MeS{7nS#6}v36ft1% zo(A3mSH%{b%J8Da34{@gASIlQqUsZNAdJw)%yOkMq--uMvlmM`Il>Cc?2r_`J7`FD zl=xnRjIK0Wiw<&anY`;zH1z@hBR3Kv%GZ1h)P%u!j6`ZRfl%*#oP zu?!Xh1oIT6U_mCVHwuQ5*EDfn3;Ow?hxU?J*OrylGq`qQ3({mHn_*VjjzuE5yFu2} zX5l;fX`Ca}Y66@}1UVoc&*3DIn1#^fbsMGeS~XUo>@fpn3UMy#J`~i&C6HWWZ;n-J ztok=IQAd{sb?qc=j*9(h{k>BX(6M44rK`>R^=;}8G)a=*Du^|qvY?A6*&cDP1iNIr zNujtz2R1?MD7}R_DR)|q_MZNtn|$>5w<|$+EuECs(oQ`Mk%L4ai;_^z9U&59izZQO z?2v8j{Q&fy<~gEUG{wrJP(tr<`n6Rs(m9R-oU(hnm02_hnUikL%mB=<>bluuZKbVZ zocAJ9%ac#L^u52F5d$X3x}kcRDv*u@j`aq(K%$AVGKXr^>s~$vkfa$~oTL3X(`*}h zv9Y5Unc)YbY3-9Vzd9^9F&q4pl-!V(cD32MqAgu7uk=g(eDdy$h%Y_oh_!!aKS=@O zu3Ou=QRkGr`7LzGn)Kn2BvzYyPUB}M`eAsa#h*TCYgUfO2aB~`d9B_>-ci}jjSlyB z{NC@$ivhb_q#vh>@svzEYeGxsu8ImK6x?Y|!)+%QE*Hke$pa@h{?OoUmJkeXh?^@a$hQ}0g*<)51YF7%U&cV;-DDN+Wpn;NRK`c+S zi9`^$MM=f2!nBdB1OeQZIg?COo(hSY{Yy^5nKksK`7_Z5ry{pRAF+`jlg477YSlw4 z-IP-7(l6GJ5;#SWM#8SY7kWWy_}Vvkbr#mE{M0^-9!#%$ebeik(dAhtuQU{xNuR^W zrWTDOod6;T)BNLdlqwq4^p(8J0x9^b>94(nB$N|k)c*=07GVM*QXem)4JR}a|Fcn% z%56IJdA%b7mQahPy69*&_$q_bYfRPKPTReEtRnucyOdm{aLnmTM`?Y&lHwTvZxVsM zXekO>#tE9uZQTFzq}VSTkz@3ik05AJ1`EMY6O8Rxm+c@==7u`}7w8dQ_!Q@HeoG!r zaL^p#1m!N5=jB?fPry;ewIUEvK0;DeFW_z zx0dJfQdE7(W7^YGYcZIeG+t>G$zlGX`!p`aMf_MzReXR^6A1nGoMZE4~Ed6q-BW3(> zTXWxoT+*Z?Sl=Tg@_A%RGV^}}$PBpYQe`~FK(FDa< zjVaW^wd{PRJqsh7ucp@KS*Chn;8h4GXhJH*sc1wT#+=L*8nR8)GD1*I0iFpU_y!pw z3a6_WJjLl@AO`CWNRkJT4bb0*OL)9y2gJ7oo*)ATnn_rSbupSc5*oaXk=&hsW5&f5 zfqlTJH;65?NgmrWzcM9AFyD<^mO=tHZy0j&c#(d0ZDlPEUp1!F94TtzPMQ)#r@U-c z889kECZX%iP>$F4uHG73Cdl-BWAhvl-Z{&l(G;p^qQzZqQ?1$RZ$9|2EmLrbR~Ln3 z)S)ty;&2KIU5irnh9Wln9^gG4dr_!90bCq@a@|eQ6R(G{e7R*l40ND8+ zS0{VTc1FWj-KlF1B2q3h1bhm}(UxLVDW*&13C4=1oTQ46NU`uMH(!_jg(HSS4Yx2+EQz_1W%k#cv`P z-QC1oY{h^04Rsegyp=}eU0MP(`arX3OJrzDOYCiul$s3Em}xL(T11i(AjmNiCiY#8 z=(4rR1M23BJE=-mjI1JYN}_F-zZyE+URFcOdp7`9QjfpQciAaS-(ibj z(CLs^$UuSLvMv+NOel`-jkT7A1wV}XvL(cFk{dd9zNP3Mc_7${mN#cZ)`w0v4tnC| z5Y?C$x8MaI796XQl(tF2DEeP2K109;n73<~opf=fy_ljN{bLGNzoI;&i~$*5(Cl|+ zZaOW{=jx=RaVI#Q_r-J=Pc;=~!2%!>TQf+Bw+wp8br(J-jDyxeH3NF0t9~HCS5eCE z>N>d#Lo@^*KX!Q=)QL};yr`%i)5S3UI&E_!k%tiLOU1Sf^$(#Hrz39gMKj-wP>M{ z30iz0bBJ=_L?rV_{x(VAh_|MM2@O1hV{H*K5DS&s$;6x>Z(@Ap;`f!(kR)ccX8(bS z8O-*TG-HO~s6Sd`?G$Xb#s6||KC+arI7@m=#&RGe{ePslgM9khYks}TSC zM1C=LgVV5nnF&x4MtzCMOS|c-n?PPuFDe+Awmp`x`I*EJy|R;tfOB;H*$rcEgiIJe zsa{DOoJ)m}G;N}FE~ukr!v0Sb?Y3~-Xsp-*{o|w42@R-lA=;x~$LRF;EPPL#wq(fk zRVE7Z?xk^%(SBSE<^oOC>iO%k$Rs?r1AAHzM70jbnuNqP zt1aD!9s>^)%$-%p8k>d*A(yoR^OZ>?wBO{qo0L=nisf8C%yCIZ#qvJ@_(T|3m8cNUw){`hN@ zyVOfdlM$aGG-~=CP`7e|FeCDnQ)qV*Y6Y0eNdu6-T*hnV(S#M{BfRgyjqmeu4p*I8 z5iWQs60*OTU@Q0}DR{;7dNk6{sEOZYp%62vRdNdj6MvOHic@8;AeXYA;}Gts?|mM| z>p6A=0&2WH%38cEQLuK0|138Sli7HX>HtRGyxML&8(&%|R^C*RDA-6R$a!iL(TF}6 zx`&a{qv!?~e6yN?PP;zcQy_FJJ82PRJk;rAWGJno&S#f=p)5>UHKP#NT(xE&97m)# zMv2GlVYgPc0b@kGGW^UoVj(FWa(2G*Y_3*n^WApGCkk06;R_y}V9^0ba=8Sip$~nt zc^+4GCu#QMsl$O2ZbSP#vGr>`skg^vF7Y=Y0vYrY+J8()TL`rI)`U3!Jd8 zOj)$1l4x;roA4V?Efj^qMiCKdcgLREgj7|er~W&lYK84)kc@3YA;8@Oa6TtFUsu8V zL2C+zY}q*I2Az-mE0UzDktz#yF23sO%0K1spqH%DEg7<|gO3`JBagKnV;8$jS_W%V zGCXJnrvnOetqKL&B)FQt3dmwklEx*EZ)X|$=tlnX5SqT+PEl|RGiBXUKdGz+qS;aZ z)F5ABqrqAtSiScZ;f046$)^QzZwVRirCD5At!ut`%OaymEta;PGHV(w@djWhUpP0%LD#7{cKL{~&ha7J;wMRi4~ zT!aG0r)i&n`kw8XUtM{T0&gbQ2e`GaTZM1uuYHe1jtZF!SkFQ+C{p=O_`7XdqTf&t zbSfV(dyCH8sV6Fi4LbumyF<UZBm)<4j5-B_qqM!goQmVa~w_?8R76 zQbaI$d5BslF%+sooZs~+>KnbI(~3!!hOLqD+{woK$p|Qk#fT#re30|m#9E@{v}YNh zaD;8+Cbj!d9uPN5O){rJqXLbNj2Nw^5I_;jGuv}CZkUtakB|uWf@NC^s&1dgNIu5a zr8r&bn@BBAgx}}i?`K?ZJO0xc`6RZ6L5jtKf)kxznkU{D(U~=2i=6bsoff}KmAh+$ zW{S6A3}mP9EU3W z&!aq*890(iK4x%M7JFJB4J<_hnsmY{!A?Y>?Vzgii1(+Sxg^Z$X`WAtII2Ha#gXOV zgfWsuVq{YSnpu2Oo%cBio0^S~!HHexHgp3Z8hw#AVSdCV(&<)ZL3x4G;vV=3eSNrj zbH=v{LAkaIpkL*6(dC8vM%&o1Pdlb&bjL?S#J?ulFC=ob+bB}FM!1u1dY zb0s#R2h993(|S?&%6_)}fuoGHJ%d&?4vMr+C&uR-uCnF=RKL0ftsN26md$8Zl^fP5 zRAF3bm^E{XavA{{Or-Npps2#rp{#z93fQ2qvXv>`fu00MG{6}wCHvY4+&S$4V6Vuy6(CZ#M?O9KmxSMUH#1jD2sL?=Z_nVM-XaXFB(QMIm~62n4ge!{<#tWwOER;hD?C&$Vc?CG;KtTLc| z^n@=psV<|?AU^rA*2zd69jOH%35is1;Y|`bv(d<*hPI~Ihvqn3UC*_M<23lB7PYWzvVEuvYyYR_jc zNa|R?t{oQD0=dAVXwQUK$H^_eHzffwmh}*#i}h^e&U2@N5?NpMWw@y&hu372J+v|E zrgB7Hkh+th4*~^f;fo-YSEw4f%Tgx9AT^w_D^wUh#TwBthHkste z7L8{kr!i9eN+?x5c%n{dO(d!MT@)a_Ov=AsMY2=KM9cg(<^8*-AF1L1aEB{exTWyx zv{&POUAA6@!fZ8em$Z7^MF5gfM-E6HhXs%qLr=B)V@9&yiAgL8oj%=#y;(d)R(*iq zod^864w>0KyLG!MN4h@aRE2S4bj`pi&nEs4yeao0ZZeeVc&OfHBb=z;Nad-j7*Po) zVsA|+n^_7|)Y!*%Lwz;%X7SdyPi#_1s}6AoZE9PLlI!<=42SPsdQ59o6T4 zsr=We)li%fq6TF=sf*)GQYwsU*6~;`(v)dN{8be(R|V23%8h(F)>9V{pO@weX#%o> zIqNw*Kd*S9kem8DA-}Pbtbuuv!n92SEGIU03xt+L8*7~_(i(K?@iz%IayJ6GO5-6P zE}-h1z@_*iKqO?ShZ0i|FDUq`O60iUx+zmh@*o(d>YTzod}hxm!~{ni+VtUx@tT?# z&e_lMPi&GftDRJxZa2e*bRT2ls2|{TiW*u%w@PR;0d)|17LX?udnG7YtXx|ff{jSv zWX?j%r(st-w~NULOUz0jF9}W)1C2Z>+`8Sfw zQm;)@`+G#xffi@5@V|z7)5sk>xETJ7&(tCyQk#X|tJYpV2;8aPJ;H+^GQ`MGLk^yl zTM0Kb`jWGFw}@fu@xCe|K7P;JekN$0vKSH`I|xQXiLvxErqn+}7WN~!1-Ly%;6sqI zoh_+9tUU6qfMMk5F(gKfjDZwBBCEDV@M;w(pF)}4d|ix%$dTcg8-bK3L1^3sgALE` z>rwAG&7Ql;5g2klnjW}O$%=D4o#_biOfN@!Y@bP2QwZ{%>SB2r*OB46M) ziu#Ix%?N4_{>D!SM7;f00uOZkr>Ngazkf+6SaNH4sH*Q+>Db7rI^4Aj?5&|WZ)`H` zC}PE|7*o@^kHsmaZ+fzp(h`H4_soMp3L}UMpnZhUoDoArTCvXcdSa7oh-zCOA~0NX z5|v1qM!9H57D46>AQ|r_vJXtYhCpPknLW*`!K~s#CIRO~n7%85^Wi}$S zvey{Bd;cT*FO;9t-LnEkC>9Z*3qtP7CS*zAJ?m<=ogAEwqvQQGvG3}g9rw8ntAffc zCn}Hgbmvq4IiiryJ1AQPtu?QDS1ndPB36>vQj3qm*bkaVC1;Aq>+4ou+=a}@KZeZp zn9(CHX7M~fBrWhI?$FYPNF>5OA?SI!DhD-5LGXv3k+hkL9Gdj+K5FH&L=l;$REHD( zcz`hIvq(a;p;ZC2%NtBus9~ZP}toutl$}Z$wjn-gh{a`h8 z&7E|K+S+^!V|qSDh-eYzdV8`Mg8;5Avn@TYzSdP?N0r_4NNd!A@@m=>I?`K@tw5B-9Gx7*w0dGJr|Nyh6uxth?vE z@g`^-X?;xO(W9&)K`u-O5-j9elErY}8%Jnm8RbG;)XDC@`E*$kF{RYMv!vvF#B|4& z6KYZ2v7J#=zk2|h<2D*X5RpDeA(Eoy8QlEii;S}z(c^SM84>g95*FMMP%a?!gFZ^Y zRZ3VAm+m_yLMR5~!eBPEbfpX``lRYK5Ql(?7^3z`6zYcq^7L?GBr!IM3(+w^%4t1{ z#>9c1EyU9uCaods2jfy#Dg&f<5NX}{ES;wYx9FYjo5o=f=Wdca0WqksRS0gADwm@* z1l+kzKiuV6hJ+XmRviZ^v09ScOQsxW-u;E{LQ7xUM;E$Q(mG_eX_Z)}g*gmwedqL1 zLM|S&m;c<5Pldrc`^@xXwuLTo1Qw4K!%d|p(=aE)JP={RJB|hK?G_m<`m4LWCf2kY zCiM14Pev0ym}||5>6P-{cxmU|_E-lwN?VeSknlHEWPN%0<6@HB+F-a{nNCh zQudczc=nH)m}9KB_}76QIO(b z5TMQhS_V*Gfhsygxn?7UN#-roYS$&LIqm5`7qS{qX7Q#;gR-)UNl0lTdPvbDoW&-n z-<@9hwVn-;bTwXM9{s`rg(XB zyWIcP6fgS`M`0rUK~GPA3KkHB`aYK47oH2Rx7LkPF1Sz{hsH=72(uaUaZ zk=X#t7(^zc_2ClAqSgX2m19tEM$`p7N(LD$_iyj*bSCH$A-99)C9E437$fNVNiK`B z7U`szk?rFiN_lGz!Ewa`qIqi1 zqn|s&hT}!haTV|u!&O+se*0WhH+=GyWiul9kueAnSwf|kilti3scH%CD5@inqQ5X; zE&(L=W`v4Rbp}aYs$2^EvXKms@GA=ER)kL2kpwYZO*ARlv5o;Uf*~jazsHYI)=|tf zJ9y%uyAYUDbE;;H(zCR@(BLaATWjR-N~`LZ8jZ4q41bx1!&+A#sDDBtu$J`u{e241 z6`JfIhj{^4l9$3TV$lPYRlFHQm*y7j_+xC08au8S5j&9jTDj}p)JpknGlp+!SobO3 z8I^u4l2Gp`4MlGAx-oqUg-N7a)f(?Bj(#=QwUGFdg#sT9m)VULWs;a($84-q>0G!X z?yM#D>D#uX{SM7m_p>+yyXk%OA%^JnBWF)EDa&1J0EkERd{ddymIEJlL+?)JfrNa~ zngQGfu{w-k3131xXV-q)duEfvj2SDxhc2gttJIsz@nB_*^Qr@w#9gEEiAaQ^yc3Er zy4snwHiDHY6OpqXS{eC1M|9OmgRKM@R;%!{^aj3-Ef(T=HNiWJ83%*J%BB@&88W7}AxJ@}3^ z$dQ^E--}98>7O3~v8PdZg_|8J#yYYdI7;8$KU^}+0+XzV6w#&|MddPwf6{vo9zcQjFqCO_CS90W^?bGIl zVCOEEgn5%nM!K!!DAvnA@2Xe({^?+MUzmN}K&uSC$!r>4k?wD9o&a?a$Jghk&gfBE zZ+pw-jII`g#Htrvw7lv#OY{!9-6c2&RJS@ILmP7~5fVWxC0%LKHkI&`^ggf^Sg75U zE$r{ppmU-UpxG{XoXsA%%LDDud7oE+*@|@W69uVGH8vB$yxaP}#QmxFfI&3ZF4w*0 z)eWofLTPZmUszBg%@oU|sj|!31lqc~)oY>r1e^T!YnN14uCJnzCeXohO`uyMIxvcG znIbFVbylq&8?#U*k>P@Aw-!|#&)o?Zz*6+q;(Kh@@Ta!WkN-TDZ(uvphEvhE^{A35 z+c=C2@*M&Gf!FwnfiQfpGKxV40TBpTm3ufZH#rki+w%pZqy2jT3Q8Dj!5dU||B7CM zyqt-e<3bxhjYh-A%eN;PEF=$z^!BQpZ9T!gm5WWHW04<)q9bb!0<3orxCrd`pOrko zMbrQI$*2K}R`-YfK?ZXNbo(Xq;`l%RS^<0h7y!}${k13cL9C6*p5{;-c9)U2WQO0E z2~;<&9$1OyGl2AR#tte_;Kr7zC=ikUW@c04KbH6{T!7!0MFE;9Ld z$@Fk(B9eaQrVkWau8Jyro*;4ZpWz&AevM<|)-~yxc+_jy&l1i$X%`k5RNJ83i zU)tW#IbMXaeUp``jVW@Q=CO3K0^HD6Z5OqEeV8M?Nrd;U3gS)a!3FT0My(|4gJ~!d z>{cYaB?Th|G}ZH`1}RD|yrq7_3+q*s`Gra#v-c`Dvd=_S4%!m)~heGfs5>BwK5r$fXrCBx;YDxV)Ue=p5RR{ z{r|BvdS%;*Yd;(@esHc%4#5gfuBm;P{c>YaONRic{!tBfJ(zjTQfTV*CEi|~pP6;& zcJXMK#gs2EH**SD3SgjeK@@+p8d6mz|15nJsF`lynu})!SWJ1pf|!8^3g_Hy^|;um z`&v`(;6LY_T-V&^{A-bXwv%ZV(rG6_)b@X&+^gU-4^yb_1+c31kLd#t?a7Bis^xP=Cm>N_ zSMbp}>J&8S!V6z>CKh=1U#Op2JsuG|xzj>bn0bHcw05KGCoLjzI9il|$}pm90@*m1 z9Lw4p)cc%7U8dxj>GxgxH=5b{9c|Z3!B~yVz>LwPUV@L1(uG=Sk8syf6%%s$iL9h- zxRRv^$>_TUcP>jvR8E-C<{dgIE|esu1ww>wiRW z|ACmI@o5HNYpI7<5U+lx*YL1c3I*M94Wg3BC&t!T<)PJ>Z4MIG>{5z2MS>g|`R-0( zhFH`PnXLE9re+`TR!r?{u>hUCc{IJLY_3r#ky3=ewlzK5dCX&gStOhqY8Ggt!$j%k zY*5a5C--3+;+wH?thO(v$El{7RM2Od!H+P66Z6rN#Iix8O@pL$>>`)8WY2qEBY`F- zrm!i(DjN^H1aK+EE*c|;DcLlPdVdiu3fC)vT&WlfG7`{4HURZXo4i*CSTShiJgfblDxdgq4iEu|2N-LPg z=w0v-`^cPIWscAMJ~qcM;st7AYrLkD{Hah=%rP(P+eL*HQhSZS+*;W58g?0Hw8B!x z36)kSRerwOUuxGP)b^sy{8bWxwM+{{-eajzJ+K*(Lkw0@QSi;Bc9MBst)&K_342yy z$+#-Z5d$-beY?;W2ZrJK8p(9f*d|I>i4qz`+v?w~k?x2_bq-3;oP(=!&WRm9JaeSB z(X0oWEdOmOsHHQXG-;ZPi|?dNj;$GYRpDI^&BLULBWmZPZH@oYXYF7(_ZnjnANMT}y5oVoU#vKIsX&1r1XD#EIs&*5uOFZ1CPHDLE>lM4JZp0V( zrr+5$N2EsKq*=WUwcqCf8k$SO(5wD)TB1Fvbv6+Z5=5koG3bve+paUOs-j55|B5Gd zZQbQ2s%4ELV8lOGK37oLrDPplbKW`p8nmCRxHxvM2ZT+QIUgK^QCmwBxio7roWm(# zmOOQ1R+B~~PXZP0D1sSmQ!xAlGl>U+lY7SJD6h;;S{=2iCQF$}#+L*(n3y6Gyt;s{ zuaCd#wc=S34-!EnmYIgtwn_DdnMO6=ClV4{8tEsydryniFX;x;IEHZjMPAx3Bs_)Z zRrRJ>ql%PPlXsIqnKWPC!Sr>gy01yo$!UpZu>_SCc#3AiOJ}PyZSpD514(L4JeQp$ zLjg)_FYE;sB`GQ|<}oo>`n9wwbe1PRorU5eHxxN2m_(GB3Oc16l^&( zg%6Ta_au%$Nb$I*-Zo_1aRcqG@FaE@3E6tH(fSYl$2cPLrJM5_Ev`Gxy2n+OyMK;g zbD5r}wtu;S{$k?$kuu;(R+!NIl`l>QfDBL z7{p;NbSmo=eoq{lO;s8a)2PtFy9qRVCZH&o_&xs%n&iO{Iy#SrY+K4LgGH{}W|gc0 zxRePLnONTxJ1LVU>_iH5Ij-ol;tGM5L(ONNo9eN@_eDGN)?4 zle0*)K1Z_ruJWM`$x0#Fo^7$0LZI z(`fSKW?_f6Efa>KL&AouRSM=3&LRbGCAau21*onT;~bzXlzU?m#(iNBRZjpHHQ0a2 zaTP+pJj^P-m@}rpf!BAkPS44s6J-@9R|&@WrX{Bmu0Ubh&qgksLb~k5QpfmTcYEaD z?vs!wad2M&+<2!Ci040+g*uU4B;atN%wOTvoMjkXqMaFz%&4EsEW z(B2O*m214p^8$eiK(Y7^iLlfaVQ#Drm7!Q51gR2p3z{t- zq6?4NlVd_a@1myz4}bAW;=V-gxZP|kXvci9O;L!#ohuSzWBVd`ij*-gqIEwb+XPWT zb49PPR;@CAM*lU&C&>q4mKxL3PJ#-^U4|l>!l_gT5#wx-%miGk6iU-o_WzvW^b~9-|adJCI==?iYXb3u<4RpZTEUl*TRIJdZS#0u!DPq z`>^Hd`*#;E7TRW!_n^HL4%m-!!SAx>{%x^Dxh z#YwunVe@)-9o&z&M?b&!81dEeOEN2B=_|n_w%P|HN=HyhQqlcL*$q11bxgRCLg`)e z0%(o?9=BlYdd)@Gp?=@`?BWwDyGCVu?b3WlHSBRjQ-o_+qZB`YJzF6`)bP(eax`vzCe z2p3S%NvB~HQ)SmN_6=51D_H45&#u{`GfYI|{c>P%^khWsF9jI6oslwb3yPXjHEeU5 zM?ZE=Q{vE-YjoN~2y#oX-U`}`8MNetYouA_@gPs{O04$ z+pF?5;V2b;wkegW%2>jqEhP1w2pHKa+RaeOO8w?_a4!SsXcTlKTx%+&z98ey&(c9- zv>DP>J1XBnh*WruIrMtuad4?GU5r&a;Wn9@b@nWzS9?HqIDvWM`!h=kIW5WP1OU|2 z5gi=AK3rd_Ua9f0)~+?Yx*b0H6yHUQDO2(3VN1&9k&m39n1?qi;o>k~|1t0B{c(z% zJxYN|Rh#RXEr<5W1SI89q*8Yfbj34L*1f!hreA#EzYax z^!G(P6LC%d<9zg(w-fTeH>GSIC((hL2~^^$L|OiGXUKFsj4|iQ^7n|b0Hg^n_z|8dbk+?&_6aMPXi9x zk$E;#d*9mKbv5qr{h#&^^Zx7BFp9mCNReDWT{gnxp}TK#nJQZsYR4Xjjy7rvLD3}| z>0*EDE_-%Nj&F;RQ=z+{uZwlJz;wvQN;F?fB&ABVxrjKOENLl_5;~^lWer30R)Owq z=T_(ZOW%}*X>aIoPxmD?QK2whAwD)?e$R1VCExvZHQ^@=#ILp9F8j5vlj}PJd=mCc zbNVFh(R<3>`?qX7(a8j>ZC!IDPd(=ojF-8+Sxw>98|{KJ=AO$=;<1vb#bcpMU&8QV zCtA!9AIvi)m1TR3!S&6J3&U;%nUbF~QQnw7xy`tklg|%(swW>H+u+l7q>)c% zxG~d?aAh`%7Y{i7&QYf5KV9FPi%&KAjT6SYZe-cuE<4k&k1$uZN}z3wwTtT9PaQR6 z^m%vJ5oFPO>5rI13RTy=*CeLED!^-3A(H&sL!}BH8;Mt+p*aiokg(yKCi10_*Fn9Z6iseh;ww0^n@9}N z!1o}Zg*OVSs9$}pC~4(XM43mJt5x1)KghAIA+k_bk-RmEc=SDRgvQg4N`{b%M&Fv( zQtFRiT;;YbeG8O?`eohdgT$7D?2knj?q__Qdh^H`!bLR3G1ItiLndY3L#y`u9Yg)F zzs!+L;wmCmDj=!2RExEC_9+y~R}~$NC(^pqE5ou}7c5(Qt8&Hk5(!esa974|DfS7`;j~01-HIP2ZbOdargh76{%G9E>nW&&G_%Zwm?}KXB&K!z zS<0q>g_CQUlO(;aA|{%YrI=Hm3Wb8DC10}(@!=FnV?GA|O)nh*M9=4Ah4^Jm=S5}+ zgMVH^5n|`U&@Jcwl_;c06YeT%rFBQ9NFYMF#l0q?G@zz<%vSlIF$)8%Cp;m~LvC>& zmgK%gS(r*t=UAkZHtS`ZK*S9@xfWG!{g|t2Cbs}ABG?dgK z5tQ?D)B@Duat#*AL+K>`XyiK_E&L`w@DRfZmhYP70-~FAp#S;Z{`L#1UA%M8ILs}X zyU{m#xu2@(M5v~Fme@``Rh!KeyWo@~D+ebst(^~*l5BPDBt^O#P0QLUC%kWrC&$k? z7$s_b8I2`ce&})VzDv985I0_g7n0hJ)MO%}qO76xWIPoXNJEs|%$XQ$bA&x6>NVRD zGK9M^H5lf{kS@dq)fwv0>XsUhw79=4>hBgH_LYF@;En(yU=BbC2n1>XSO7tQ$3RN3 z4tMX~)`%8Zt-ahnT>>v0-YWlqD4yCS-4Q^R7MArGrn?3qPL@zle6x=zzHH94YN823 z)#Bq_S9B?R5k2G*B<|U@b2Mt(*KQ^rC!8ybMaGpAu@yl=ZyTu^Re zc2IwXEAA)7E74Epa`$|?rOMWC9geIn!!0Rf8LBoF^{up)Cee{A8oZ~8^&_{13#|bo z|Zg;S8~5#C(8>pG4eQ&z`s3Ssf)cV zIW5ekv<8}`drP4%`}AF0vnOlY`al&?UIcnm+(P`N#R*@D-RznRfJ@v~DY;zcu&D>r z7%^uK2w|DiEa-tU8m3Mhz~dX(WXEthM(_AH^ER;m`~4nXoRrgLXqh%%-91ozPa_DMlh>MM~ zq2zCTwAl_JrPNyhM*aiiT>`tpuDord6J4t_6Rl}W;RuypU8l%ysQhnY!&nmPPM}uArH=eD&vrziLkQF(OAZP8fdVQ+f-IzQR2gmw>r`d4 z#+KYJL+**uRf*8iH1Rd?!8;TYxXWoync8)mzj1_@bSzHUqpA#_N{PfrbnhF?*$We_ zpq#xMblbwE_42TZI>q@|X(F%8^NkCDKsUUjUgDN97C1gXo(LUNMMQk(1wn=>rz9g5 zN>`AQQ`R#m@NY@s*fST*QYDI*x@jU3Dm)k~cRlz%N*Q7j-~2nManCrcA%ja(=jtt= z%zl`yk9D^E)P}v(5lmkyUb1Pa%#ijB0Oc+@b`U5d6|+Jc=ID z*B2Io(fw{dse?xvf7YMNBJYR+YavESa5-$p4T!r_9exuyr#!%q=;&;cWPb;}j8;tS z5~wM#@+$3XUePC}%0j3OE{w)XzAn5oNMqrbd5&yl7%L(Xzi_A_CJp?hV55@W>PpLS z7DdYG4`~%(?=9w+@}aTQ5)}RIg*X-tD7`6)ix}rc4006D2>A5Lb6%6yi-fHrB3cB{ z^8(hNJ#eBKZ6-DP*`kg2Rqr+_1)ZeEZlP1@j$LjtjuDk2_SeQlF!?)l~V)C zIDwf{zZT_NCswP;6bT1qoKh>Qvs}2@aEMSzpDyfcJ5S=|Sdd{c=h&cOFVfjdbH`D* z*C_FMs(xqN|H|s%&W_2c&szW{H8aM<^i`kEZWZKB8I4k}{NTTF~Mc z$qJ51GSFz)zoqrj2p;5IBW>>gd)BS>lCEnev!{JQ0Xbc&l_ZGBuxa7bKX4(e)(?|F zR~=%RNLFBH?U8LuOxTUgsUC1XMn$g4CW_1wCg!Ft&Qj$18-Wz$Zq*#g9wnP`{vdRu zuagM1vD8xe`s)Xebltc_nSn-B_Ghy$;zU#eiWKz^V?kj10bZI$@)w8<*qRcbouz2|})n;>>(k(7F z%)OSo(~3A*_}7P|tod-S_+p5WL|X&WQF38JUeAyt;$C=MxffOPh0bL~=#>&5sZtZT z@|Skaqm%SmL%Sbi^!YtMEWGb;c&m$S-$R*;Un4YphMrLqxqYg+w)+o;&=XI)eKalL zziZ3j_)EADF;pwYrm|AEhef!R{JMjxkC?dLDb1rChQV@lNz-IG!1@xRh$6z|V`sGx z#0n?StnPLxlbvOm#?k+&W!;PP<%J&5R@XNrTjqkgUgzw2**|5>pCiSUDsIF9m=GBl z*X#edyg@uqfqKs#3%n?+ha^6r?uSGxr(8~ALbfMl6*ooQS_*S<%rpS%2id->>+5;e zSgI1@I18r`Nr^$a1K|E9o4)HILe#V_W>{2o_+x)%LcOGO@>>w zLP1m>#_9gJsB8;A?ct5ej& zV3u1D43xs|QO;}2<`{xZJe;UH{aZjX(|!bw+{@c5<~X3(&#H&tbIlA1m3b&s1xd|P zjLR?4U&S3Q5EC-7p0Z3*AnEnhP&o3KF<^8bvAfiT(wxATOTQOjw;|z@$*bTvgrkc3wiRA}xArXAwb~dS1~Zadf6dV-}K*GP^l3 zpNG@WOG>xER)GSm-S4eQ7giEOZ9>zu*b-?RpIV&6xF!IFSB0~r?J5OI>~00<(*i_g z1O28UNeNPCgg_!fv?;=zESyDC21{0U?~;SF)FNWxJ_3wBj?)CwP%y+TW0WrvEntnS z<6_pqiDJAXi@TyRlg=|g9^nVY4*_D@fsHo z@OHItx2W@fHdAZM(i%N9e3qQs%6fM%mM~qlwCT~*v`DR(+|$I+>N8Y>=!nhm8z6d@bM&{ zMqwm|mT>YJl<5{vT7Fn2N`jXtVdnpBBKz`ERm{sZ5;8QA7p!wWaX1xH-!@l0b;P_CToVBi3qn1b zKw^@1B_bV3)nW zBi)>IP_#2pjRQ%mlb!hI(MoS1x)4j`pBsvTTvLM&pw*^YEaD>H#arLv4Hk&kSnmq#ir^b*dJ#lG)scKyJn+}DEc{D=MBOk=?IDih zRdZx9Hd5sU6k*x`8KD%;F%*2LxM@QiXhVm5^3Kj+3{p=7h69%zZxQict)g zC_%c>e*!ajwnu6|+>ZX0Sb{@jI~o;eKLAF$C`SeQVB}kdf&?`4D z;$99wbwz(ogXoW<`P%(l@yUQm5gV3Zzv=K+A{M#XwFrESP`1AF zLUbH-YlbEdzkFxB$q*z}M+6dGyxie?V05)QctQxMxmu)r1n^ul3t|RaAxkui)NUoO z8G{6;(71z-kO(=vV>cODggiW7uq}K@{+>EGMF7c)QOha{b<%`R52-%>Q z9?$SU@rR2=CU{u2)+Q3_&;K*H? z_-QU>3>sIZh z(ZjW+EFg0~tm!6^HBycj(@X>-1j!8(1=7d28f4BQw1C_x-s7ObZugXWin51^Vuy>oRk0 zqai!QLbrLZksLQ*b%fj-D9FW>|WkDe_8NdI^=5iA54xDPt4XoQi77Q=7EA!)QxIe`qC{66i`-^ z&I?INXa!s->8=c-)V#G;1l(mHOHZI9sg6dr41ch@@UhGSU37)ViLWL?M+kzTLy*yQ zY%N$+2f)j1lkdXv95XT{N?rPCtdoacAu2X80T|nqi9gb1F-ry_$jFuHUjhjQ!8^KO zvr(W>b(FWGM7&+k1J$A@Ta84On?x}aB(B75AmQ9_e=&%u#4mDh6HA;cu;juYupue^ zKi?FiqL|D;;wx;{+&#cwat$6HECz4D3vs~Qd3d(Z^gn{_pwK2hM4DJ5JIx_R9r&%W z(#?!s#890a(AFHB(*(LYrOUa^dyTPPA{^XoZX9tksT8aAgf|xPlPva$u-`?@HPlRS z+-Eb0vOKV3nqnrkmKbF^#EN-@83>Zi(L}DeXJK`6IPddvCU!mTcGp}Abx!6Le}R|FWlP#1ZGfTQ6Bfkm|Y5j1-=Kvv*QE9}zZjG#kzbr&IiFpBWb@4Ip zXpN4GUTYnkCNci>9&!fx8~IsC@YkE1RH_^>awI~er)>|CA$n_uiONJOXG`vqEFOXd zLjR^kX3=dW_6NH+3mhL<&jp(+iGKkAsvUVED+|)XYRWZZzl2}-*Z|GwUr>covE=Jz zQh$v)dh7$Q%}_(lbW-Fl!S?PenYzw9FtjMfD$ul#rkHtnl}x&zn5f}uZl>2H2;)os zGs%kww}5@`Vp;I<(^Q*;U)nCh#?uv zQdeGI70m0JC|BK@N#%u%W>S;u8Bh%>xFo8W<>X}LnAv)mr;uSOSWuy6L@vPX;#{!& z=QY{C(FHCDCTDA(bVxQ&a|sej4cqP^Cz&MYn7vO}?;7O6Q*j_40|q8*tnYiQ!z2f` z?y&L=nzE1dJD2JNhiTcun`L%roFd9O6-BS*vaVbJLq;_b4fBi0NGXezyVJQ#wY4nk z#HDZOEBa7NLh{4qd!IEim^k zpeahgC5h-TPzwY`LnOMxoGv$5%?=4vN%+8L%71tove5woaKlDAmn4{N_|T`^Oqjt7 zO&J7NcL|kfr~#T@wTkZqQa~{zKFPuk75X9{8StT)Wi=lmxowRen=%}>5+wbM z>KN*CTJb!9-GiHD%xm@grBnhChYrSt}pRMjUER?IBq$vQv)$s)M*DH>N6yc_$rO z19%P={m@gnTnJJ->7%LCk!{d+;6nN=bq&}-KU5?^)X)E|Ax`BxOY1%X3*xo!^iwW7 zefCQnn9GSD&zrBxQRh?`?c1bqc~Xy_-AnlL08T)38mRWX(8JM_t{dL+(H z<{RxEE;9zE;>=A**mU#%@X*Pj=oypFH~{#@|MmKROk%1p1n?D6f!V5^)sbh%O5;LJ_&F>~>uh zsfBw6cH!`{dJ$WdfV{i06Vg?7g*Zpn%1Uat6LFhBIO)qEfUyOlqJak@g8e$i%`(I; zra2)^iyjc*7iERCA=WXXVcsIYd`gaiI5fgFkO~tUIZFlfvzYbwo>J$+9mF{XA!;54 zBQqcGKIADLRD(Q1TY!Rgjnc=JByMb$2~$XlfE7T@KA^2qY@!-bl8_7v&fm{Ws8B*s z6Q>;{2|!~x2=t`LA!BkNoltsP`D==-iV15o;zn4)zg3vO2=Kua>=24H4%Io7Q;hXN zLY}L+wHHs|a;t;X(ZWcTN+ZSNek-GYOw5;Z$`dk9CG$8DaBtmlEh_2w!jaN0rkjs4 zAyo7@PlDGAc`(Rt`efNB7b3LN6M~p;5`?SHKpDoRR&QKnAc%}d4jnXW_mw2}xSW@g zE3LDsZ{1FRH?1d6wNVJ(d1pmb*-x`>cUln5H@K3Bo{Q%w&W-g?Qo zmEOt^ef5mz+c)d8FiS`njwN@^x@Y$>t8q`FURFT}Ru>@kHi}YI%@9r6Bc+!LOAxlF z&284puu?C|69As|GPd-Plg9FW%0tP9cdUEKV)aRYWFF_3tefkmi&~ORMM#hmKt_;3 zO#BT|Y9I-;)tV*!MI}L9c@`C1QzmC1_akd?ns62=ON!Uo&d!YJ{YA8pnK)zX>cSzg zWeE`!Uy&|xCO5pYiinB2Ui6|X+E19`Qc%ZR=i*{%C4X`#`^?stTvT?Q)IRE&qGe9; zo0&sg7)?!4uWh^dWh+E=vPB6vPBy8fj#mrGP(iTK zWVVL;p}n%Ny8oo)6Qkrr5vfGGO$nquYylB(6E{lbHD;>C2SXLgq8M3i4A5PN!4791 zrIG&fYT_`Q^XjXVja#6iE`?~3DT!9AXDp)BI_)DRvQiv|34I~m`b1liDvZdHz8IgI zaIc<~pZG^R#%RB@#RotwH$e9&W?L+(eX35pWcrr4V6op0f0_C;~Z{Xmkjc^oAMu zkY*%BP9J1fJal*ASZM+jD^?{kX|5&3{XQ*)8!>Tek2lJ}CQH>@dJw*Z7heFfb+GO9 zJ<=+(W=fLorp=5nnC~TgR2t4qjR-=CIw?0s(3SoGF0RnYp%bJb6J$*D`7c=7pic6F z9*~4?t0J|2Vk8tn$hBmS)7`D4@w7hDX$GLmIjM|fIYgT24K@SjOBf+$vo+vMjr$m( zh4_?}gvQu+22IE`AoL&9c~*1``Zh8|6ry-c0nw0=TbX-W_G|y)naWejD^8}9675y< ziHnv(q=OhwtR=;*JbB1>Vx6w{m5D8kAErKW9FV{%&Lw{4~n{JoL(Ew)t4EIQ+l7RfCbqs@8 ze+x!PBu9P6iPZsD?kjDcVEKcLxT!8|%$3O>Z+}YqLbJjjY>-=IRW+{B2^AI`^ePXd z<=@B-xc{FUQmPThrG*rbh^>eVK6mS#lbxCPwG9EERxmeVR1v+%YUQu+X`%B zuF%GIy)J~#slqN?HrT^L8lG`nF|~;j;jddgWmYxI_l)a=v&^=#Y2{SXw{n~Sq3nCo zsJhxc9^W{-PP4s^o9I)9EhD3jUASNe=Fkvoz{2(UoZT5p*b?+hkZZ^7rRK8A<|p_ zVdNz+Ap!H)q3*U(iU20Eva1O$F}yM~-co zIW4ocEb&nnVmfCvu?SgyClPC`oXmupAMkb6rU1fzlzQp^)eTfhRR zWAxW}(0mFL`0S_H$YJeBtyqFk=LLB5^YD{KE2NDS?1`EhTROw=kH*eZlTA6i6VQFs z{?TA+ynB5?`^N5LYgOU{62XR@A->j5R;ZXYb2jDBXTdPmOjtq}7EK}buWuJ`{g9kd@i?fW}xiJ1v5*u)-muHEaj_(PqfGD^u+f4ZT(CkUB>9ks04 zLRhGl*%9O&o&5`o+7=BZekMm0^h`B6yP-*~Rx5#>@RZuU*tvo^I46+WQX){h9?258 zLLIZ(BeQYGbmA7+!?E=TJ&I?wU*eM042@Wf07pFUIE-Nf3Eo-OJ*F~@F6m5;Kb}d5 zHZN8T(X;af_`->X&T7nl;$ZIB*o9aoFZ}@vkS>hP-@SEd+ppN5)!B(6b*{rx5jb!b zTZ`Ej8SheiS+F*hkV7%UsF_yzR!w~TYbOUCz#G^yzX^aLTlrq8Zhj+BA6U-KqmmJF zkZdvmgBRFJtY6xA=;4tpxKvSonLroO0WDNg#)D0yR@8dPbQ1!bl6AWfkf7+V|4nji zMPrI=<{O=>tsRn=5(y&$ehQ%>TBmI~nrJ3w>)4mx)~QXYkP`~Y+p2T7%R6jg0cnRkVh1nL5F)y0V~1LT zyCS$O`J8psGQY@0(n7TT=HaKkFk4cI`4ijJ76Z$Z9u?E1maei^S7u~VV@*3<35Ynx z*#qrLVJzL|f+5QMTO5mY-F^VuUGc9a+7OqkTwKK*N|$N&0AS)YTp?hm^vf0 zT3nM@e5Jfp8j3w1J#Ak`;o(Z+FJ0Lf#KjC=gQgeyTx>%{Mb$ysT4T7r_QKExipL4T zyLu=J#b#xmTSu@+Rbz#o!3+`vq z{FOyeC<{Mjx~fqYSF9QbFdJGC^&!|xfpAIbieV&X_N1d`w&tf3Z>nKaIMcq8Ff2vt z<h>#6rUko%L(_Um5oM%11 zSkYz7Y*!$QZM?GjkrmovlqNbq@xnKjEfTp$X=E7@O0XdZX6rPM8ixdiA!ISXs?G-i zb&(QH`4KR*NLuTO=E$hAS-K-txa-{+A$TtjLvbcMr4 z^)0gRgl>p1hBYhGEE__@mJ>{c7G;)GmLdT4)>g}m)Ubr#^RUSAJx^?y;`bbOL)ml6 zwxz~o1fY{vkElZ?UY@onh{k@nY%T683E{Jgd;Cw(^Sk4&#Gm0ZgF3|Tu|6YZ9Osjf zP?j$2lC^buUM(KDsz_gK!V?Nna1zTo%9~okD4!Xa>WmcTSZIt;@|=U=blRj$BNYzM&~9-Db|0ptDI% z`pdOY@EuZ3WmB67kfu{x#`t*788BVc3(nFBPqN>v#65M%H|hw22q8DgqInVmyuSab zO(@w~rXss#4)ygE)-5f2b7_U86rzjvnnT!xGN#wQeO3%)#i^pBi(yohuOq+1Kvgyc zNA`k*X0I2OK&-gBQb9&)|gut|gbeL#3>kN)R z-8|CQB7cZoTt7%$6O6NsE7JV6t_F8f!?Q!hP>qa=TSL}Y4y?}?a;CH?wyiW@F21s< z8WrrS^y+aMdXyE4jMnT@WlzsLz&(vU4KqdDyh)V>$9MwGrG6Ff{Yu#Dl|Yk-*+7g$8i41ONv@+ z`0A08Vg$n6C9a7oU*#~m>1IsRVA@QGa3UOG^&t?W1s$VL(|pm|Gb9sG>NJxcC{8Ze zgeT26e@vf^j*xp^jufkBx#eWSU@A({&FMfKrd0HH71OkN!XD#2EfC9@mSkDuCoJf- zxntxY$?AM((9fPqy9yMZnL!7hLRs{a zBRp!dolS8rllhCdYY4vD>9GdPK6H5g@uzO^m6W3Mvrq-TaZ_EgR9&ZAemJ$K_{jjLv=h8D8V2u zVgx5;7#D=vk-T~Yuq}Z+uL{XUKtfm%M!sQg+%s30L#&bI=K?k?pL~dLUN#hbKvB-U zkZk&)xH3gN8316|xzx$g#9m;I;_(z)DGWGRngJFerbCfV!=)qoYXtC=9}!F^%)z%k zh#F)vgM1*G&3u^@K^w-&ZR)RECEEl@5^9;2yL9iNzCdesIDHE5Pk&t&>oo92ov)#; z_o^g~@j0FQvFb;n&Gy@L3|){feMqo$j!?aB(A~i@gKbnT)j>rXVRsz`FvbmV%qX*M z)Y@xE8X_aIIy5yRz7@?Fh;y>2@{%Bl=qil|fvlyHL5aMV)eHOzNxEUqU5*nBGWEWIt zEW{gVEL8;Ei0>vrpH|cO-TW!H+1W$_SYl)6*S!za?1JQluf6RgoxLr>C77p8XVY3z z#SHkRiBI(5w50GtOuCF@zl8u-k-Rh>YQu(XTno}W?zaqLCNKSJ)OOt7OZ3qK`CBt4>*>O)t{J_aqSct&)Yx zkt8-s36INc%WK}K!|Y(>AXHh~)QPkniONce`Itz9JDOWrANF?%y|g(V$W}>vdN!EG zOO~C_^r|Joyi=u;5C+ge+3TprW%97J7M|P4qcW-{fftm`!&a^)fheH5DXGY#h22~> zUlYUne|1=F_#0@uZy({LROxV=rFl=DaZ4kDb0hGB;VDd$lp@H1QhhiNhM>N7sd`3# ziCg*;*rf4nsEfd9lGFM|f;qur_GH z5GKRn3cM?=z`O|QsM1n<($#Ca6e!Uc%4${KmR_Y|ks_S9UYi2h%43W$+f(r*%mTbG zXZHvbh}U;I2Ix(HH-G0>#^hngFw+~W>We(SS^EK&{y=dUP_6`xD+Pzdc=LFa3|(-I zER;@P;U+W+^*mrp6sLHHEfJe!6-b;@7hersnC7FEN*Wx&^*XEsLjhv|>p-BONsuMz z53mGW1+)U%0M!6scC-b$WRLa21MQ)6=y5dtaZ&4$CIfDZ$;@Eh4Y0i5%l9Mj`o_+8 zq^so6cQYz^5IRn#(bFzEW0qyX6&qt{OWxo_2*Soz@(Cx`Xcjg`%~k|L`jJx=(cML) zE})UG{$8;qRBo$*MFrfpCnK&U7RO~J^`pSLvOTk+zf~Pj93N<+92=eX(mrd`&+3=$ zRohm;R*icn>=(w!Ai}~QvF$!$42`_iPOQx|@m<;TiRT1GwaiVny|;78uC+5%(KoHS z-d_4?i=1^N;RyqpCM)4+=r>z^OD7+9=+jqCWca)z$!DzWuvd2;k(Y9I5On1pk|+CB z3b|#paS)gX1m5DbyA33|->?=5go&(2C|u;%sv0g%?l{Jx`I&%8cfApz3aIV@3I|Lc z5PSm$9Wnh3F@H}Gt#8WF%`Y?0UJuP?5v?HvpE}h-_A6v9bnDr`D`P5I#9*gBOP;nY z9s(ngWvh4Fza%Ys3W06NI&wxZA~xk10S{4+5MPrF-$ZE}0f;JYO0|p#$=+eaG_|1^ zfqb^jH!LlcfBum=8QNUS>0V_Hcwy&_yinxEBT-wH`V*Jiskn_?Zs=Cv&`n*b+7P@F zko!j?-^q04Je0O5+i2y;ql5_GH2PEj8Gn&nivAQ*cL3YF~*`YK&IXYjO z2?~hROQaWDPzXjAs^YY`v5FbiWLLaFA?5l`rLmZotvs)`o|^LVevGLeMDi3ixGTi~k_up9fdoJXI2}OHaZ#mUS%pxS z4CR*ZgG^9A#x(tJvmqP{#mhD*?QoEr6kOT8QB{b1k|GShZC%7eWo#;*@y6;#7Xio^ zZ)5aHh`N<(lo1GVniz|$NhV0DRs$MH+|f6BObGd~B}H}bj*bY6Vu-Yg##cmS5tWrO zAZ1o$v?Uf>d7Rv=2Hx08GskF8UH8T=Duu}DXRm?94oF!>wyUT4Da&$^*xy(t1T;>> z#7%zW_d{XKM+sRw&4=HU4K@bQfpd%tPpfPT6UFfrW&tG<3PEWn@KH4KuVjt#Wwp(r50YWBffb3#H0DcJx`L=;!Z zUoJV&5g^YD(w{R@DDLSy*Gx^DlvdNUiZB5itvB_b$~rK_vf7U*Bh?GxyKm6=>nY<)hby8VZ;{l0G72ufO6i7`qOLZ&8x zZheL!eeJQ!@uR33OH5^yLBUBknyh|$c>&H(Z_lEd9;pT;lvu-(nOG%{f``zs?NL2q zK4ufC64Ts%1&!uicfEhbz{`eKp5FaROS#!kv|0q6OaHq3*lLJTZ%UN8Yq#rbqjoxi z*om;>cI*ib71J=rNZCApU3xe&w_Ea|Br|ky?!MKLlZGB9<*jo5@Bm5iV&lo@$fcrH z;xhU_!#0-THMLh!sqx7XM08PvfnuUZAfToMal}nizRbrLHq@A073+eg#Th_2oCPx6 z2t1^pkEE_&d)sU6&a6W$Y>_>A76+r4h}+41>qtBCty@YFIH7shkONlNIL?~8{+wjX zp?aMwKKn${7Qz3Or8jVMj`L?+eqxlr3x}@m&M2PjjX7)HBu24gbp}qT7;UP++G*Ev zCQ3aMyz8IQl89@uRs&-M{E*8$dYA$n?Gx{1?+xU^igNXHe;UL^f_XUsJ~En89))R* zW*!v-w{+{lh2Du6Sku0N70ZvC-)6!-e1WIR4Jw~VJ(}G{${(B6_aC9Hw{jIQ(RqoF zvNj}NlNWk(>NU9;e-C+Eaym*blqCAh5?Lw;TvJu$bUY(W(9?Ied2RTETq<%107UFv zFB4rl&;#knNkK-V(B@`1wXonA2~Q;Suu3d4oXGz*)~UoQVu7xjA+tlN220r___UAi zBq+HlPmcc;8c#;PJWdrPazklbyCaR?xO|kmktUGN!$yy^BlZa2APHEHM7|dC#NtFc z4Cy%d;OQ@PWZV|$VO8lUxX*bT>y`9gfJI{+HjqHXrh^u|_?iv}v5kp97>Ceo;W|E^ zC=j<;i<@>TAfbXABKgj_LVmJZ*=3)tKF(}{&4qVyo%f70@u7naJ z{t@8S@MNg$Q~7w0cvIjLU{7J?uDEASrqfS?9{o)FKM=*@kU~bzJpaZm-BZgQdt419 zglj~S?DBU5U#O{Z5~Uy@Q9SU9RL(55!D%cc*jKr@NU4NgyPLvq(HV>|TQ1KCp^YBw zh~k9Ju8|iZheWa`C2+19Fq5REnpPqhnk746BEm)cRb?aaW3F)WrD4XQnl0g%p{wvSb4?U8?P7kLZT#P$cqr4^^zXVWKTlk-3Y$VYlZJgmdY#9 zfTpvXT}~giQwOSM_{Lu<%CbT5gE&E8QyVuUgvT5qi;md#wg>YnVr;{<`JHQ4a14WrU$GepMg+@_;r z;{~mSZ(Y1#&`PxjqYWo`Zh%HA^B!NP`8<83)vK*g-h?KP#Uu9Z$f#oH3qvq3mmvM^ zW9<_eSIU5{*y2kF8`~0FYWwdh--fscLj5X zPEXj^S-YZ^0sD+HNjVRkDs99@M9|Tji<^}0_z892%?#FxUy^xC$iH8S(8(sg$@uTJ zUMnXO?2tHY6xl4ZaBO7SVgjb&s#(9153iir4J8BM%cjAAoZXnD0nHB>>y^|*ai>S? z!5_xoZCK+QcIO+72}*^yu*s{~z>5}T0SlcVhJ<6&T)j-nSs<`JZYox;aoIn0lf7tN z=H#f$Y?!x3ltJ-Pt4bU!wS2;A{m-0;aYhAN($K&xbhd3E%!IZwVH0s1tF^6mi~mv8 z;M3wM{Y=yL@u-Uz0G9<+ZZ%?HrFJeW z5(qhi+O>h)C4$>0Ct0@m<%Me)mgON#t28mX4c=-pC=45#ElDJiT72bc_q{3163>&( zfFJQ2NJD=W|D*V(yK8wgrb!xcU9v0G8naIf%kcF$UunIbUWgc3{;FMdVm5wSr)Kz> ze=hxfK#FkAK9J(}^1Mz%UVUG-`thSh6jOIEP9-%F6!FE^ZBT*Z0n=A04_y@U6cMYV{gSlQYyFv?h?K=2xpfanBjbJ;5OR1+ zb|PfjQ+0!(QAmVON`QYsrN42G=pjYQ+pz~4u>`cBJs2ycWWu#VLPlO0k)}vtD)}wE zR!TG&c$H%*GQvbT7suQubaK&3eajeOe6POzO)B;-AO)CoP{oR%OlaiB>_UY0rVu(< zy^w^up6<10Vw_gqhnP<66alc{h{HDE5Jl-c3ZI4#xrXtA+vJQRSU4lna5IocoFR{# zj=J9yM?q+4^QqGTMDheK;SKw+wn-FU2$*KM0FJR0bt=8jQ2eEKZikPH%CyqV=!dlW z5O3^cPT?x5HQUuY%Mad9VcVYRI+YHMp$k#Ypocx}BpDcKf^mlim2C+V-phFdWI7}9 z4@1?T!36{=KT|3yICzH9i)_2dshJE^(emmH_ky2wBozpa<~=zgu?xpiu8s!iDX&lp zr$ZnT8@kMHOXR$XAVGDY-9&7iNKm$D03l)g9g^8GWJ&WG*fGO|eaHwJ$IBfK0Dg8e zIXf|nvc9I&C1UTj{OYiJjRJA07`jn{@F|mt^-(*Zh_JFr7%^uInOx%?-+Qqj2i z^>WGuXi-hO-?MITviM@zIIaeK25`F=0Xqt$S|~t;JNmC4QPvCCf*(kt1UraI!nwan zji+@wsYjJMp|?eQvlgLywqUVIJu@XFAYfdwmpjB@07*c$ zzf??s_FtiHjmU<)!x5Kp$dD?*7brzR#-2SA7p)$maS~clBj_(3e#S0BGgFyre|%Mm z`a%OJmjI%ark+o26d^I?3Vq~=%$_IPNncKYP!EM>kag2VO zCofRRc7NbgN#IwgG@(o-B1s+*6eYqdN|0S^1fdFpjX02{mmPj&5m;l8v$hGgnP`!R=%fqAi~tX2xKfp zmKox0Z7tWmOE={hYV)>D=rSW#I`T}~1&||M-B52u4-v&!T4J;yfti=|nJHi5um zwBi}dmJdzl7#Uh_Q7R5ce=PDW$ZaV7N)V#f7lK0^6T(wX?H3C2v9EiZ;E z6+t4EtqYBBSO+Bft(H@yx7q}3d2hf`c!{f0pAq_(A z6r&x-cbI}-&jJSnPRI!X4w!|mrlxoQiw??n$s5)~O$bho3#76Y`WFbL4ki5vN&<*3 ziT=`5C_@OfEfciDi05aB0D)}`YJghWx;DNHh6N)4&vLCBf4M;s6{g*gNe>e6Ls$yt z7mhWg)rq#I2yq~{Gb^=eS}+s~7TN!}BAP*7Q4!=_q#;G>QI#S%s}mMNxH3d8eQ}ZZ z)-X=tOQdv9p%pRrBI6QES$_R*GVz&s`zob0GlRi0Q<+FF+d7=LtKFKEL*Hk5OjMoZ zsebNfvXGJyCWGaPsMYkg)Gxh#9kg@f_t}b_8>+0AzD~I)vvmz=FA_3O1rP5nAHFAF zohwt;#F0S^D#oB9Nhvx^!vt`RH;g^Fv!bdW zdZD1kRTZnY>sOs^;JK9oV}@rHzOPn+rc*qG$8=BsD@d-pb{0~-#!Dhh;=!@0dqRe- zmbJSv+Qmc4Z&jn-(BA!t6G)~BVNBK0^_*3Mt*E0TGVRG7--ybiE>1}WEnPEW)@bs* z|8j&$gxGSB<|*}Ej^e2qAn=UU0d}Bi$atH!E;{ezf|$>Oc>iU-6H*c2m8jK(0&t3Q zS_#_J;zs5y%IJt#f7eW%zaWpHYYx>~VHph+w<%sfUFogn?rhMMF$9J#w>IHOv(g0D zcErFhX5U^~^Gd8f(W(0@P5Qf2y=%d)I7A}^x~~>pRp)AYQ`zcL#1&HNX4bb){Ao8H zWtMrau{>j9Mbg-txkffl+@8g~3`UU(CQ
    X(Qc17khp5!JkLEBB9EV^VwNq- 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 z

    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 EOv8zGTL1t6 literal 0 HcmV?d00001 From ca65bafb5f62619ffa191199776370e9f0f3145b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 12:48:35 -0700 Subject: [PATCH 091/160] LDoc: use custom stylesheet to make navigation panel fixed --- docs/config.ld | 1 + docs/ldoc.css | 304 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 305 insertions(+) create mode 100644 docs/ldoc.css diff --git a/docs/config.ld b/docs/config.ld index cf42efe..f728405 100644 --- a/docs/config.ld +++ b/docs/config.ld @@ -2,6 +2,7 @@ project = "Cleaner" title = "Cleaner mod for Minetest" format = "markdown" boilerplate = false +style = true file = { "init.lua", diff --git a/docs/ldoc.css b/docs/ldoc.css new file mode 100644 index 0000000..21f93c8 --- /dev/null +++ b/docs/ldoc.css @@ -0,0 +1,304 @@ +/* BEGIN RESET + +Copyright (c) 2010, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.8.2r1 +*/ +html { + color: #000; + background: #FFF; +} +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td { + margin: 0; + padding: 0; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +fieldset,img { + border: 0; +} +address,caption,cite,code,dfn,em,strong,th,var,optgroup { + font-style: inherit; + font-weight: inherit; +} +del,ins { + text-decoration: none; +} +li { + margin-left: 20px; +} +caption,th { + text-align: left; +} +h1,h2,h3,h4,h5,h6 { + font-size: 100%; + font-weight: bold; +} +q:before,q:after { + content: ''; +} +abbr,acronym { + border: 0; + font-variant: normal; +} +sup { + vertical-align: baseline; +} +sub { + vertical-align: baseline; +} +legend { + color: #000; +} +input,button,textarea,select,optgroup,option { + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; +} +input,button,textarea,select {*font-size:100%; +} +/* END RESET */ + +body { + margin-left: 1em; + margin-right: 1em; + font-family: arial, helvetica, geneva, sans-serif; + background-color: #ffffff; margin: 0px; +} + +code, tt { font-family: monospace; font-size: 1.1em; } +span.parameter { font-family:monospace; } +span.parameter:after { content:":"; } +span.types:before { content:"("; } +span.types:after { content:")"; } +.type { font-weight: bold; font-style:italic } + +body, p, td, th { font-size: .95em; line-height: 1.2em;} + +p, ul { margin: 10px 0 0 0px;} + +strong { font-weight: bold;} + +em { font-style: italic;} + +h1 { + font-size: 1.5em; + margin: 20px 0 20px 0; +} +h2, h3, h4 { margin: 15px 0 10px 0; } +h2 { font-size: 1.25em; } +h3 { font-size: 1.15em; } +h4 { font-size: 1.06em; } + +a:link { font-weight: bold; color: #004080; text-decoration: none; } +a:visited { font-weight: bold; color: #006699; text-decoration: none; } +a:link:hover { text-decoration: underline; } + +hr { + color:#cccccc; + background: #00007f; + height: 1px; +} + +blockquote { margin-left: 3em; } + +ul { list-style-type: disc; } + +p.name { + font-family: "Andale Mono", monospace; + padding-top: 1em; +} + +pre { + background-color: rgb(245, 245, 245); + border: 1px solid #C0C0C0; /* silver */ + padding: 10px; + margin: 10px 0 10px 0; + overflow: auto; + font-family: "Andale Mono", monospace; +} + +pre.example { + font-size: .85em; +} + +table.index { border: 1px #00007f; } +table.index td { text-align: left; vertical-align: top; } + +#container { + margin-left: 1em; + margin-right: 1em; + background-color: #f0f0f0; +} + +#product { + text-align: center; + border-bottom: 1px solid #cccccc; + background-color: #ffffff; +} + +#product big { + font-size: 2em; +} + +#main { + background-color: #f0f0f0; + border-left: 2px solid #cccccc; +} + +#navigation { + float: left; + width: 14em; + vertical-align: top; + background-color: #f0f0f0; + overflow: visible; + position: fixed; +} + +#navigation h2 { + background-color:#e7e7e7; + font-size:1.1em; + color:#000000; + text-align: left; + padding:0.2em; + border-top:1px solid #dddddd; + border-bottom:1px solid #dddddd; +} + +#navigation ul +{ + font-size:1em; + list-style-type: none; + margin: 1px 1px 10px 1px; +} + +#navigation li { + text-indent: -1em; + display: block; + margin: 3px 0px 0px 22px; +} + +#navigation li li a { + margin: 0px 3px 0px -1em; +} + +#content { + margin-left: 14em; + padding: 1em; + width: 700px; + border-left: 2px solid #cccccc; + border-right: 2px solid #cccccc; + background-color: #ffffff; +} + +#about { + clear: both; + padding: 5px; + border-top: 2px solid #cccccc; + background-color: #ffffff; +} + +@media print { + body { + font: 12pt "Times New Roman", "TimeNR", Times, serif; + } + a { font-weight: bold; color: #004080; text-decoration: underline; } + + #main { + background-color: #ffffff; + border-left: 0px; + } + + #container { + margin-left: 2%; + margin-right: 2%; + background-color: #ffffff; + } + + #content { + padding: 1em; + background-color: #ffffff; + } + + #navigation { + display: none; + } + pre.example { + font-family: "Andale Mono", monospace; + font-size: 10pt; + page-break-inside: avoid; + } +} + +table.module_list { + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.module_list td { + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.module_list td.name { background-color: #f0f0f0; min-width: 200px; } +table.module_list td.summary { width: 100%; } + + +table.function_list { + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.function_list td { + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.function_list td.name { background-color: #f0f0f0; min-width: 200px; } +table.function_list td.summary { width: 100%; } + +ul.nowrap { + overflow:auto; + white-space:nowrap; +} + +dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;} +dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;} +dl.table h3, dl.function h3 {font-size: .95em;} + +/* stop sublists from having initial vertical space */ +ul ul { margin-top: 0px; } +ol ul { margin-top: 0px; } +ol ol { margin-top: 0px; } +ul ol { margin-top: 0px; } + +/* make the target distinct; helps when we're navigating to a function */ +a:target + * { + background-color: #FF9; +} + + +/* styles for prettification of source */ +pre .comment { color: #558817; } +pre .constant { color: #a8660d; } +pre .escape { color: #844631; } +pre .keyword { color: #aa5050; font-weight: bold; } +pre .library { color: #0e7c6b; } +pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; } +pre .string { color: #8080ff; } +pre .number { color: #f8660d; } +pre .operator { color: #2239a8; font-weight: bold; } +pre .preprocessor, pre .prepro { color: #a33243; } +pre .global { color: #800080; } +pre .user-keyword { color: #800080; } +pre .prompt { color: #558817; } +pre .url { color: #272fc2; text-decoration: underline; } + From 43dadcb7063f56fb293c029f417b66ba7d90e967 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 12:48:48 -0700 Subject: [PATCH 092/160] Re-generate HTML docs --- docs/reference/index.html | 2 +- docs/reference/ldoc.css | 1 + docs/reference/topics/api.html | 2 +- docs/reference/topics/commands.html | 2 +- docs/reference/topics/settings.html | 2 +- docs/reference/topics/tools.html | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/reference/index.html b/docs/reference/index.html index 85effb5..3efb441 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -68,7 +68,7 @@

    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:39:47 +Last updated 2021-07-29 12:47:04
    diff --git a/docs/reference/ldoc.css b/docs/reference/ldoc.css index 415843e..1fa3a99 100644 --- a/docs/reference/ldoc.css +++ b/docs/reference/ldoc.css @@ -156,6 +156,7 @@ table.index td { text-align: left; vertical-align: top; } vertical-align: top; background-color: #f0f0f0; overflow: visible; + position: fixed; } #navigation h2 { diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index 2d2357b..a9ed398 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -389,7 +389,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:39:47 +Last updated 2021-07-29 12:47:04
    diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index 41b198e..c175c64 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -306,7 +306,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:39:47 +Last updated 2021-07-29 12:47:04
    diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index df25bda..3e2c0ec 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -104,7 +104,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:39:47 +Last updated 2021-07-29 12:47:04
    diff --git a/docs/reference/topics/tools.html b/docs/reference/topics/tools.html index 2c0be7a..1909e94 100644 --- a/docs/reference/topics/tools.html +++ b/docs/reference/topics/tools.html @@ -114,7 +114,7 @@ use (left-click):
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:39:47 +Last updated 2021-07-29 12:47:04
    From 4f9e5a643418f07d0989e917a4d680a3d587a3f2 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 13:38:10 -0700 Subject: [PATCH 093/160] Move pencil into tools.lua --- docs/config.ld | 2 +- init.lua | 46 +--------------------------------------------- tools.lua | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 46 deletions(-) create mode 100644 tools.lua diff --git a/docs/config.ld b/docs/config.ld index f728405..3be1927 100644 --- a/docs/config.ld +++ b/docs/config.ld @@ -5,10 +5,10 @@ boilerplate = false style = true file = { - "init.lua", "settings.lua", "api.lua", "chat.lua", + "tools.lua", } new_type("chatcmd", "Chat Commands") diff --git a/init.lua b/init.lua index 0f34630..71d9ef2 100644 --- a/init.lua +++ b/init.lua @@ -1,9 +1,4 @@ ---- Cleaner --- --- @topic tools - - cleaner = {} cleaner.modname = core.get_current_modname() cleaner.modpath = core.get_modpath(cleaner.modname) @@ -41,6 +36,7 @@ local scripts = { "settings", "api", "chat", + "tools", "entities", "nodes", "items", @@ -50,43 +46,3 @@ local scripts = { for _, script in ipairs(scripts) do dofile(cleaner.modpath .. "/" .. script .. ".lua") end - - -local S = core.get_translator(cleaner.modname) - - -local sound_handle - ---- Master Pencil --- --- @tool cleaner:pencil --- @img cleaner_pencil.png --- @privs server --- @usage --- place (right-click): --- - when not pointing at a node, changes modes --- - when pointing at a node, sets node to be used --- --- use (left-click): --- - executes action for current mode: --- - erase: erases pointed node --- - write: adds node --- - swap: replaces pointed node -core.register_tool(cleaner.modname .. ":pencil", { - description = S("Master Pencil"), - inventory_image = "cleaner_pencil.png", - liquids_pointable = true, - on_use = aux.tool.on_use, - on_secondary_use = aux.tool.on_secondary_use, - on_place = aux.tool.on_place, -}) - -core.register_tool(cleaner.modname .. ":pencil_1", { - description = S("Master Pencil"), - inventory_image = "cleaner_pencil.png^[transformFXFY", - liquids_pointable = true, - groups = {not_in_creative_inventory=1}, - on_use = aux.tool.on_use, - on_secondary_use = aux.tool.on_secondary_use, - on_place = aux.tool.on_place, -}) diff --git a/tools.lua b/tools.lua new file mode 100644 index 0000000..c6c3f80 --- /dev/null +++ b/tools.lua @@ -0,0 +1,46 @@ + +--- Cleaner Tools +-- +-- @topic tools + + +local S = core.get_translator(cleaner.modname) + + +local aux = dofile(cleaner.modpath .. "/misc_functions.lua") + +local sound_handle + +--- Master Pencil +-- +-- @tool cleaner:pencil +-- @img cleaner_pencil.png +-- @privs server +-- @usage +-- place (right-click): +-- - when not pointing at a node, changes modes +-- - when pointing at a node, sets node to be used +-- +-- use (left-click): +-- - executes action for current mode: +-- - erase: erases pointed node +-- - write: adds node +-- - swap: replaces pointed node +core.register_tool(cleaner.modname .. ":pencil", { + description = S("Master Pencil"), + inventory_image = "cleaner_pencil.png", + liquids_pointable = true, + on_use = aux.tool.on_use, + on_secondary_use = aux.tool.on_secondary_use, + on_place = aux.tool.on_place, +}) + +core.register_tool(cleaner.modname .. ":pencil_1", { + description = S("Master Pencil"), + inventory_image = "cleaner_pencil.png^[transformFXFY", + liquids_pointable = true, + groups = {not_in_creative_inventory=1}, + on_use = aux.tool.on_use, + on_secondary_use = aux.tool.on_secondary_use, + on_place = aux.tool.on_place, +}) From 14394db3ea40e54589c1499d803ec0dd62e79d25 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 13:38:29 -0700 Subject: [PATCH 094/160] Add to TODO list --- TODO.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.txt b/TODO.txt index deaf629..74c1528 100644 --- a/TODO.txt +++ b/TODO.txt @@ -9,3 +9,4 @@ TODO: - add "radius" option for pencil or "xlen", "ylen", & "zlen" options - add "xrotate" & "zrorate" modes for pencil - fix pencil "write" mode when pointing to side of node (node gets placed below) +- add config file usage to HTML docs From 982a746e236ec941665f0ac2864a5ec753de406e Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 13:38:53 -0700 Subject: [PATCH 095/160] Re-generate HTML docs --- docs/reference/index.html | 12 ++++++------ docs/reference/topics/api.html | 4 ++-- docs/reference/topics/commands.html | 4 ++-- docs/reference/topics/settings.html | 4 ++-- docs/reference/topics/tools.html | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/reference/index.html b/docs/reference/index.html index 3efb441..0f8df68 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -32,10 +32,10 @@

    Topics

    @@ -46,10 +46,6 @@

    Topics

    - - - - @@ -62,13 +58,17 @@ + + + +
    toolsCleaner
    settings Cleaner Settingscommands Cleaner Chat Commands
    toolsCleaner Tools
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:47:04 +Last updated 2021-07-29 13:38:35
    diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index a9ed398..0d90465 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -40,10 +40,10 @@

    Topics

    @@ -389,7 +389,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:47:04 +Last updated 2021-07-29 13:38:35
    diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index c175c64..047abaa 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -40,10 +40,10 @@

    Topics

    @@ -306,7 +306,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:47:04 +Last updated 2021-07-29 13:38:35
    diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index 3e2c0ec..835fab0 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -39,10 +39,10 @@

    Topics

    @@ -104,7 +104,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:47:04 +Last updated 2021-07-29 13:38:35
    diff --git a/docs/reference/topics/tools.html b/docs/reference/topics/tools.html index 1909e94..754f481 100644 --- a/docs/reference/topics/tools.html +++ b/docs/reference/topics/tools.html @@ -39,10 +39,10 @@

    Topics

    @@ -50,7 +50,7 @@

    Topic tools

    -

    Cleaner

    +

    Cleaner Tools

    @@ -114,7 +114,7 @@ use (left-click):
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 12:47:04 +Last updated 2021-07-29 13:38:35
    From 182726e9997638fe3bbc95d6b729a535ab274b83 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 29 Jul 2021 15:47:03 -0700 Subject: [PATCH 096/160] Clean up tool mode switching --- chat.lua | 2 +- misc_functions.lua | 50 +++++++++++++++++++++++++++++++--------------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/chat.lua b/chat.lua index 8cc399f..ae8fbf2 100644 --- a/chat.lua +++ b/chat.lua @@ -485,7 +485,7 @@ core.register_chatcommand("cleaner", { local player = core.get_player_by_name(name) local stack = player:get_wielded_item() - local iname = stack:get_name() + local iname = aux.tool:format_name(stack) local imeta = stack:get_meta() if iname ~= "cleaner:pencil" then diff --git a/misc_functions.lua b/misc_functions.lua index 12fc564..df6bfd4 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -71,10 +71,9 @@ end local tool = { modes = { - erase = true, - write = true, - swap = true, + ["cleaner:pencil"] = {"erase", "write", "swap"}, }, + format_name = function(self, stack) local iname = stack:get_name() if iname == "cleaner:pencil_1" then @@ -87,7 +86,7 @@ local tool = { set_mode = function(self, stack, mode, pname) local iname = self:format_name(stack) - if not self.modes[mode] then + if not self.modes[iname] then if pname then core.chat_send_player(pname, iname .. ": " .. S("unknown mode: @1", mode)) end @@ -116,6 +115,31 @@ local tool = { return new_stack end, + next_mode = function(self, stack, pname) + local iname = self:format_name(stack) + local modes = self.modes[iname] + + if not modes then + return false, stack, "modes for tool \"" .. stack:get_name() .. "\" not available." + end + + local imeta = stack:get_meta() + local current_mode = imeta:get_string("mode") + if not current_mode or current_mode:trim() == "" then + return true, self:set_mode(stack, modes[1], pname) + end + + local idx = 1 + for _, m in ipairs(modes) do + if current_mode == m then + break + end + idx = idx + 1 + end + + return true, self:set_mode(stack, modes[idx+1] or modes[1], pname) + end, + set_node = function(self, stack, node, pname) local imeta = stack:get_meta() imeta:set_string("node", node) @@ -157,7 +181,6 @@ tool.on_use = function(stack, user, pointed_thing) if mode == "swap" then core.swap_node(npos, {name=new_node_name}) sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) - return stack elseif mode == "write" then local node_above = core.get_node_or_nil(pointed_thing.above) if not node_above or node_above.name == "air" then @@ -166,11 +189,11 @@ tool.on_use = function(stack, user, pointed_thing) else core.chat_send_player(pname, S("Can't place node there.")) end - - return stack else core.chat_send_player(pname, S("Unknown mode: @1", mode)) end + + return stack end core.chat_send_player(pname, S("Cannot place unknown node: @1", new_node_name)) @@ -187,17 +210,12 @@ tool.on_secondary_use = function(stack, user, pointed_thing) return stack end - local imeta = stack:get_meta() - local mode = imeta:get_string("mode") - if mode == "erase" or mode == "" then - mode = "write" - elseif mode == "write" then - mode = "swap" - else - mode = "erase" + local success, stack, msg = tool.next_mode(tool, stack, pname) + if not success then + core.chat_send_player(pname, msg) end - return tool:set_mode(stack, mode, pname) + return stack end tool.on_place = function(stack, placer, pointed_thing) From a708add44daed72d675d2c645e2e0340c724d540 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 15:29:26 -0700 Subject: [PATCH 097/160] Add/update localization strings --- TODO.txt | 1 - locale/cleaner.es.tr | 9 +++++++++ locale/template.txt | 9 +++++++++ misc_functions.lua | 10 ++++------ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/TODO.txt b/TODO.txt index 74c1528..e76f3e4 100644 --- a/TODO.txt +++ b/TODO.txt @@ -5,7 +5,6 @@ TODO: - creative - storage (chests, etc.) - add LBM when removing an item if it is a node -- update localization files - add "radius" option for pencil or "xlen", "ylen", & "zlen" options - add "xrotate" & "zrorate" modes for pencil - fix pencil "write" mode when pointing to side of node (node gets placed below) diff --git a/locale/cleaner.es.tr b/locale/cleaner.es.tr index 37b5bce..407037a 100644 --- a/locale/cleaner.es.tr +++ b/locale/cleaner.es.tr @@ -42,3 +42,12 @@ No unknown nodes found.=No se encontraron nodos desconocidos. Ore "@1" not found, not unregistering.=No se encontró el mineral "@1", se mantiene registrado. Unregistered @1 ores (this will be undone after server restart).=Se anuló @1 minerales del registro. Success!=¡Éxito! + +# tools: +@1: mode set to: @2=@1: modo configurado para: @2 +@1: node set to: @2=@1: nodo configurado para: @2 +Modes for tool "@1" not available.=Modos para "@1" no disponibles. +You do not have permission to use this item. Missing privs: @1=No tienes permiso para usar este artículo. Privs que faltan: @1 +Unknown mode: @1=Modo desconocido: @1 +Can't place node there.=No se puede poner nodo allí. +Cannot place unknown node: @1=No se puede poner nodo desconocido: @1 diff --git a/locale/template.txt b/locale/template.txt index 4f81862..e19a586 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -42,3 +42,12 @@ No unknown nodes found.= Ore "@1" not found, not unregistering.= Unregistered @1 ores (this will be undone after server restart).= Success!= + +# tools: +@1: mode set to: @2= +Modes for tool "@1" not available.= +@1: node set to: @2= +You do not have permission to use this item. Missing privs: @1= +Can't place node there.= +Unknown mode: @1= +Cannot place unknown node: @1= diff --git a/misc_functions.lua b/misc_functions.lua index df6bfd4..76378af 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -98,8 +98,7 @@ local tool = { imeta:set_string("mode", mode) if pname then - core.chat_send_player(pname, iname .. ": " - .. S("mode set to: @1", imeta:get_string("mode"))) + core.chat_send_player(pname, S("@1: mode set to: @2", iname, imeta:get_string("mode"))) end local new_stack @@ -120,7 +119,7 @@ local tool = { local modes = self.modes[iname] if not modes then - return false, stack, "modes for tool \"" .. stack:get_name() .. "\" not available." + return false, stack, S('Modes for tool "@1" not available.', stack:get_name()) end local imeta = stack:get_meta() @@ -145,8 +144,7 @@ local tool = { imeta:set_string("node", node) if pname then - core.chat_send_player(pname, stack:get_name() .. ": " - .. S("node set to: @1", imeta:get_string("node"))) + core.chat_send_player(pname, S("@1: node set to: @2", stack:get_name(), imeta:get_string("node"))) end return stack @@ -158,7 +156,7 @@ tool.on_use = function(stack, user, pointed_thing) local pname = user:get_player_name() if not core.get_player_privs(pname).server then - core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: server")) + core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server")) return stack end From cc11d749c2ee1b01971e9bc14ea44f939265e539 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 15:30:12 -0700 Subject: [PATCH 098/160] Add to TODO list --- TODO.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODO.txt b/TODO.txt index e76f3e4..7238766 100644 --- a/TODO.txt +++ b/TODO.txt @@ -9,3 +9,5 @@ TODO: - add "xrotate" & "zrorate" modes for pencil - fix pencil "write" mode when pointing to side of node (node gets placed below) - add config file usage to HTML docs +- move HTML docs to gh-pages branch +- change "cleaner" chat command to something like "cleanertool" or "ctool" From c5ae889ee5748f049f0e194ed21e9cc8e47ebfd2 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 16:13:23 -0700 Subject: [PATCH 099/160] Fix typo in changelog --- changelog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index e57265b..a302fe6 100644 --- a/changelog.txt +++ b/changelog.txt @@ -8,7 +8,7 @@ v1.2 - replace_items - replace_nodes - find_unknown_nodes - - replace_ores (unsafe) + - remove_ores (unsafe) - added support for unregistering ores (unsafe) - added setting for enabling "unsafe" methods & commands - all types are loaded from /cleaner.json file From 64f31da3f250c62ed1973c71f61add7e8a6fffd2 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 16:15:21 -0700 Subject: [PATCH 100/160] LDoc: Add some functionality to config.ld --- docs/config.ld | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ docs/gendoc.sh | 2 +- 2 files changed, 87 insertions(+), 1 deletion(-) diff --git a/docs/config.ld b/docs/config.ld index 3be1927..08c3987 100644 --- a/docs/config.ld +++ b/docs/config.ld @@ -1,6 +1,17 @@ + +local print, error, type, ipairs +if import then + print = import("print") + error = import("error") + type = import("type") + ipairs = import("ipairs") +end + + project = "Cleaner" title = "Cleaner mod for Minetest" format = "markdown" +not_luadoc=true boilerplate = false style = true @@ -14,6 +25,7 @@ file = { new_type("chatcmd", "Chat Commands") new_type("setting", "Settings") new_type("tool", "Tools") +new_type("json", "JSON Configurations") custom_tags = { { @@ -24,10 +36,12 @@ custom_tags = { { "settype", title = "Setting Type", + hidden = true, }, { "default", title = "Default Value", + hidden = true, }, -- craft items/tools { @@ -38,3 +52,75 @@ custom_tags = { end, }, } + + +local registered = { + settings = {}, +} + +local function format_setting_tag(desc, value) + return "\n- `" .. desc .. ":` `" .. value .. "`" +end + +local function setting_handler(item) + print("\nsetting_handler: " .. item.name) + + if not ipairs or not type then + return item + end + + local tags = { + {"settype", "type"}, + {"default"}, + {"min", "minimum value"}, + {"max", "maximum value"}, + } + + local def = { + ["settype"] = format_setting_tag("type", "string"), + } + + for _, t in ipairs(tags) do + local name = t[1] + local desc = t[2] + if not desc then desc = name end + + local value = item.tags[name] + if type(value) == "table" then + if #value > 1 then + local msg = item.file.filename .. " (line " .. item.lineno + .. "): multiple instances of tag \"" .. name .. "\" found" + if error then + error(msg) + elseif print then + print("WARNING: " .. msg) + end + end + + if value[1] then + def[name] = format_setting_tag(desc, value[1]) + end + end + end + + item.description = item.description .. "\n\n**Definition:**\n" .. def.settype + for _, t in ipairs({def.default, def.min, def.max}) do + if t then + item.description = item.description .. t + end + end + + registered.settings[item.name] = true + + return item +end + +function custom_display_name_handler(item, default_handler) + if item.type == "setting" and not registered.settings[item.name] then + item = setting_handler(item) + end + + if item then + return default_handler(item) + end +end diff --git a/docs/gendoc.sh b/docs/gendoc.sh index 9af5ed7..e159050 100644 --- a/docs/gendoc.sh +++ b/docs/gendoc.sh @@ -10,4 +10,4 @@ cd "${root}" rm -rf "${docs}/reference" # Create new files -ldoc -c "${config}" -d "${docs}/reference" "${root}" +ldoc --UNSAFE_NO_SANDBOX -c "${config}" -d "${docs}/reference" "${root}" From 4c5069447c90aa288f2050c61a726964482d519b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 16:15:52 -0700 Subject: [PATCH 101/160] Add some details to settings docstrings --- settings.lua | 5 +++-- settingtypes.txt | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/settings.lua b/settings.lua index 3729f8b..16c2f42 100644 --- a/settings.lua +++ b/settings.lua @@ -4,9 +4,10 @@ -- @topic settings ---- Enables unsafe methods. +--- Enables unsafe methods & chat commands. -- --- `cleaner.remove_ore` +-- - `cleaner.remove_ore` +-- - `/remove_ores` -- -- @setting cleaner.unsafe -- @settype bool diff --git a/settingtypes.txt b/settingtypes.txt index 80cca37..b5debc7 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -1,5 +1,6 @@ -# Enables unsafe methods. +# Enables unsafe methods & chat commands. # # - cleaner.remove_ore +# - /remove_ores cleaner.unsafe (Enable unsafe methods) bool false From e0bf9a56e665ad3b38fbe10b144e768547b93980 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 16:16:47 -0700 Subject: [PATCH 102/160] LDoc: add world path config file usage to HTML docs --- TODO.txt | 1 - docs/config.ld | 1 + docs/config.luadoc | 53 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 docs/config.luadoc diff --git a/TODO.txt b/TODO.txt index 7238766..a79691b 100644 --- a/TODO.txt +++ b/TODO.txt @@ -8,6 +8,5 @@ TODO: - add "radius" option for pencil or "xlen", "ylen", & "zlen" options - add "xrotate" & "zrorate" modes for pencil - fix pencil "write" mode when pointing to side of node (node gets placed below) -- add config file usage to HTML docs - move HTML docs to gh-pages branch - change "cleaner" chat command to something like "cleanertool" or "ctool" diff --git a/docs/config.ld b/docs/config.ld index 08c3987..0bfde0f 100644 --- a/docs/config.ld +++ b/docs/config.ld @@ -20,6 +20,7 @@ file = { "api.lua", "chat.lua", "tools.lua", + "docs/config.luadoc", } new_type("chatcmd", "Chat Commands") diff --git a/docs/config.luadoc b/docs/config.luadoc new file mode 100644 index 0000000..89accf8 --- /dev/null +++ b/docs/config.luadoc @@ -0,0 +1,53 @@ + +--- World Path Configuration +-- +-- @topic config + + +--- Main configuration file. +-- +-- Registering items, entities, etc. for cleaning can be done in ***cleaner.json*** +-- in the world directory (`/cleaner.json`). If it does not exist +-- it will be created automatically when the server is started. +-- +-- It is formatted as follows: +-- +-- { +-- "entities" : +-- { +-- "remove" : [] +-- }, +-- "items" : +-- { +-- "replace" : {} +-- }, +-- "nodes" : +-- { +-- "remove" : [], +-- "replace" : {} +-- }, +-- "ores" : +-- { +-- "remove" : [] +-- } +-- } +-- +-- `remove` key works for nodes, entities, & ores. `replace` key works for +-- nodes & items. Their functions are self-explanatory. +-- +-- @json cleaner.json +-- @usage +-- Cleaning nodes example: +-- { +-- "nodes" : +-- { +-- "remove" : [ +-- "old:node_1", +-- "old:node_2", +-- ], +-- "replace" : { +-- "old:node_3" : "new:node_1", +-- "old:node_4" : "new:node_2", +-- } +-- }, +-- } From 3a708a03b65105ed2c8fc3c283a0f2f3381b6bfe Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 16:17:09 -0700 Subject: [PATCH 103/160] Re-generate HTML docs --- docs/reference/index.html | 7 +- docs/reference/topics/api.html | 3 +- docs/reference/topics/commands.html | 3 +- docs/reference/topics/config.html | 151 ++++++++++++++++++++++++++++ docs/reference/topics/settings.html | 28 ++++-- docs/reference/topics/tools.html | 3 +- 6 files changed, 181 insertions(+), 14 deletions(-) create mode 100644 docs/reference/topics/config.html diff --git a/docs/reference/index.html b/docs/reference/index.html index 0f8df68..fb7f023 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -36,6 +36,7 @@
  • api
  • commands
  • tools
  • +
  • config
  • @@ -62,13 +63,17 @@ tools Cleaner Tools + + config + World Path Configuration +
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 13:38:35 +Last updated 2021-07-30 16:16:51
    diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html index 0d90465..27d26cc 100644 --- a/docs/reference/topics/api.html +++ b/docs/reference/topics/api.html @@ -44,6 +44,7 @@
  • api
  • commands
  • tools
  • +
  • config
  • @@ -389,7 +390,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 13:38:35 +Last updated 2021-07-30 16:16:51
    diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html index 047abaa..d94b775 100644 --- a/docs/reference/topics/commands.html +++ b/docs/reference/topics/commands.html @@ -44,6 +44,7 @@
  • api
  • commands
  • tools
  • +
  • config
  • @@ -306,7 +307,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 13:38:35 +Last updated 2021-07-30 16:16:51
    diff --git a/docs/reference/topics/config.html b/docs/reference/topics/config.html new file mode 100644 index 0000000..76b2e6b --- /dev/null +++ b/docs/reference/topics/config.html @@ -0,0 +1,151 @@ + + + + + Cleaner mod for Minetest + + + + +
    + +
    + +
    +
    +
    + + +
    + + + + + + +
    + +

    Topic config

    +

    World Path Configuration

    +

    + +

    + + +

    JSON Configurations

    + + + + + +
    cleaner.jsonMain configuration file.
    + +
    +
    + + +

    JSON Configurations

    + +
    +
    + + cleaner.json +
    +
    + Main configuration file.

    + +

    Registering items, entities, etc. for cleaning can be done in cleaner.json + in the world directory (<world_path>/cleaner.json). If it does not exist + it will be created automatically when the server is started.

    + +

    It is formatted as follows:

    + +
    {
    +  "entities" :
    +  {
    +    "remove" : []
    +  },
    +  "items" :
    +  {
    +    "replace" : {}
    +  },
    +  "nodes" :
    +  {
    +    "remove" : [],
    +    "replace" : {}
    +  },
    +  "ores" :
    +  {
    +    "remove" : []
    +  }
    +}
    +
    + +

    remove key works for nodes, entities, & ores. replace key works for + nodes & items. Their functions are self-explanatory. + + + + + + + + + + +

    Usage:

    +
      +
      Cleaning nodes example:
      +{
      +  "nodes" :
      +  {
      +    "remove" : [
      +      "old:node_1",
      +      "old:node_2",
      +    ],
      +    "replace" : {
      +      "old:node_3" : "new:node_1",
      +      "old:node_4" : "new:node_2",
      +    }
      +  },
      +}
      +
    + +
    +
    + + +
    +
    +
    +generated by LDoc 1.4.6-antum-dev +Last updated 2021-07-30 16:16:51 +
    +
    + + diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html index 835fab0..823da59 100644 --- a/docs/reference/topics/settings.html +++ b/docs/reference/topics/settings.html @@ -43,6 +43,7 @@
  • api
  • commands
  • tools
  • +
  • config
  • @@ -60,7 +61,7 @@ - +
    cleaner.unsafeEnables unsafe methods.Enables unsafe methods & chat commands.
    @@ -76,18 +77,25 @@ cleaner.unsafe
    - Enables unsafe methods.

    -

    cleaner.remove_ore +

    Enables unsafe methods & chat commands.

    + +
      +
    • cleaner.remove_ore
    • +
    • /remove_ores
    • +
    + + +

    Definition:

    + +
      +
    • type: bool
    • +
    • default: false
    • +
    + -

    Setting Type:

    -
      - bool
    -

    Default Value:

    -
      - false
    @@ -104,7 +112,7 @@
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 13:38:35 +Last updated 2021-07-30 16:16:51
    diff --git a/docs/reference/topics/tools.html b/docs/reference/topics/tools.html index 754f481..40f9e99 100644 --- a/docs/reference/topics/tools.html +++ b/docs/reference/topics/tools.html @@ -43,6 +43,7 @@
  • api
  • commands
  • tools
  • +
  • config
  • @@ -114,7 +115,7 @@ use (left-click):
    generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-29 13:38:35 +Last updated 2021-07-30 16:16:51
    From c98f6a656ef781aac5464e0f8da15c31013c86bc Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 16:30:52 -0700 Subject: [PATCH 104/160] Change "cleaner" chat command to "ctool" --- TODO.txt | 1 - changelog.txt | 14 +++++++------- chat.lua | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/TODO.txt b/TODO.txt index a79691b..9333bc6 100644 --- a/TODO.txt +++ b/TODO.txt @@ -9,4 +9,3 @@ TODO: - add "xrotate" & "zrorate" modes for pencil - fix pencil "write" mode when pointing to side of node (node gets placed below) - move HTML docs to gh-pages branch -- change "cleaner" chat command to something like "cleanertool" or "ctool" diff --git a/changelog.txt b/changelog.txt index a302fe6..463af85 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,12 @@ v1.2 ---- - added API +- added support for unregistering ores (unsafe) +- added setting for enabling "unsafe" methods & commands +- all types are loaded from /cleaner.json file +- added localization support +- added Spanish localization +- added pencil tool for erasing, adding, & swapping nodes - added chat commands: - remove_entities - remove_nodes @@ -9,13 +15,7 @@ v1.2 - replace_nodes - find_unknown_nodes - remove_ores (unsafe) -- added support for unregistering ores (unsafe) -- added setting for enabling "unsafe" methods & commands -- all types are loaded from /cleaner.json file -- added localization support -- added Spanish localization -- added pencil tool for erasing, adding, & swapping nodes -- added "cleaner" chat command for managing pencil tool settings + - ctool (manages pencil tool settings) v1.1 ---- diff --git a/chat.lua b/chat.lua index ae8fbf2..bee3a2a 100644 --- a/chat.lua +++ b/chat.lua @@ -465,10 +465,10 @@ end --- Manages settings for wielded cleaner tool. -- --- @chatcmd cleaner +-- @chatcmd ctool -- @param action Action to execute. Can be "status", "setmode", or "setnode". -- @param value Mode or node to be set for tool. -core.register_chatcommand("cleaner", { +core.register_chatcommand("ctool", { privs = {server=true}, description = S("Manage settings for wielded cleaner tool.") .. "\n\n" .. S("Params:") .. "\n action: Action to execute. Can be one of \"status\", \"setmode\", or \"setnode\"." From 4d959e69cbf49fc06850af32fd1b984e3031ee12 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 17:17:48 -0700 Subject: [PATCH 105/160] Update help strings for "ctool" chat command --- chat.lua | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/chat.lua b/chat.lua index bee3a2a..fe11fee 100644 --- a/chat.lua +++ b/chat.lua @@ -32,6 +32,9 @@ local param_def = { old_item = {name=S("old_item"), desc=S("Technical name of item to be replaced.")}, new_item = {name=S("new_item"), desc=S("Technical name of item to be used in place.")}, ore = {name=S("ore"), desc=S("Ore technical name.")}, + action = {name=S("action"), + desc=S('Action to execute. Can be one of "@1", "@2", or "@3".', "status", "setmode", "setnode")}, + value = {name=S("value"), desc=S('Mode or node to be set for tool (not required for "@1" action).', "status")}, } local cmd_repo = { @@ -62,6 +65,10 @@ local cmd_repo = { cmd = "remove_ores", params = {"ore"}, }, + tool = { + cmd = "ctool", + params = {"action", "value"}, + }, param = { missing = S("Missing parameter."), excess = S("Too many parameters."), @@ -468,12 +475,11 @@ end -- @chatcmd ctool -- @param action Action to execute. Can be "status", "setmode", or "setnode". -- @param value Mode or node to be set for tool. -core.register_chatcommand("ctool", { +core.register_chatcommand(cmd_repo.tool.cmd, { privs = {server=true}, description = S("Manage settings for wielded cleaner tool.") .. "\n\n" - .. S("Params:") .. "\n action: Action to execute. Can be one of \"status\", \"setmode\", or \"setnode\"." - .. "\n value: Mode or node to be set for tool.", - params = " ", + .. format_params(cmd_repo.tool.cmd), + params = cmd_repo.tool.help.param_string, func = function(name, param) local action, value = param local idx = param:find(" ") @@ -483,23 +489,25 @@ core.register_chatcommand("ctool", { value = param[2] end + local help = format_help(cmd_repo.tool.cmd) + local player = core.get_player_by_name(name) local stack = player:get_wielded_item() local iname = aux.tool:format_name(stack) local imeta = stack:get_meta() if iname ~= "cleaner:pencil" then - return false, S("Unrecognized wielded item: @1", iname) + return false, S("Unrecognized wielded item: @1", iname) .. "\n\n" .. help end if action == "status" then - core.chat_send_player(name, iname .. ": " - .. S("mode=@1, node=@2", imeta:get_string("mode"), imeta:get_string("node"))) + core.chat_send_player(name, iname .. ": " .. S("mode") .. "=" .. imeta:get_string("mode") + .. ", " .. S("node") .. "=" .. imeta:get_string("node")) return true end if not action or not value then - return false, S("Missing parameter.") + return false, S("Missing parameter.") .. "\n\n" .. help end if action == "setmode" then @@ -507,7 +515,7 @@ core.register_chatcommand("ctool", { elseif action == "setnode" then stack = aux.tool:set_node(stack, value, name) else - return false, S("Unrecognized action: @1", action) + return false, S("Unrecognized action: @1", action) .. "\n\n" .. help end return player:set_wielded_item(stack) From fbcfe1646a193d9b41636d6c9a4335695efbc76c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 17:18:37 -0700 Subject: [PATCH 106/160] Update localization template & Spanish translation --- locale/cleaner.es.tr | 12 ++++++++++-- locale/template.txt | 8 ++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/locale/cleaner.es.tr b/locale/cleaner.es.tr index 407037a..df75ee6 100644 --- a/locale/cleaner.es.tr +++ b/locale/cleaner.es.tr @@ -5,6 +5,7 @@ # chat commands entity=entidad +mode=modo node=nodo radius=radio old_item=objeto_antiguo @@ -12,6 +13,8 @@ new_item=objeto_nuevo old_node=nodo_antiguo new_node=nodo_nuevo ore=mineral +action=acción +value=valor Usage:=Uso: Params:=Parámetros: default: @1=por defecto: @1 @@ -23,6 +26,8 @@ Technical name of node to be used in place.=Nombre técnico del nodo de reemplaz Technical name of item to be replaced.=Nombre técnico del objeto reemplazado. Technical name of item to be used in place.=Nombre técnico del objeto de reemplazo. Ore technical name.=Nombre técnico de mineral. +Action to execute. Can be one of "@1", "@2", or "@3".=La acción para ejecutar. Puede ser "@1", "@2", o "@3". +Mode or node to be set for tool (not required for "@1" action).=Modo o nodo para configurar a la herramienta (no se requiere para la acción de "@1"). Remove an entity from game.=Eliminar una entidad del juego. Remove a node from game.=Eliminar un nodo del juego. Replace an item in game.=Sustituir un objecto del juego. @@ -42,12 +47,15 @@ No unknown nodes found.=No se encontraron nodos desconocidos. Ore "@1" not found, not unregistering.=No se encontró el mineral "@1", se mantiene registrado. Unregistered @1 ores (this will be undone after server restart).=Se anuló @1 minerales del registro. Success!=¡Éxito! +Manage settings for wielded cleaner tool.=Administrar a los ajustes de la herramienta cleaner empuñada. +Unrecognized wielded item: @1=Objeto empuñado desconocido: @1 +Unrecognized action: @1=Acción desconocido: @1 # tools: @1: mode set to: @2=@1: modo configurado para: @2 @1: node set to: @2=@1: nodo configurado para: @2 -Modes for tool "@1" not available.=Modos para "@1" no disponibles. -You do not have permission to use this item. Missing privs: @1=No tienes permiso para usar este artículo. Privs que faltan: @1 +Modes for tool "@1" not available.=Modos para herramienta "@1" no disponibles. +You do not have permission to use this item. Missing privs: @1=No tienes permiso para usar este objeto. Privs que faltan: @1 Unknown mode: @1=Modo desconocido: @1 Can't place node there.=No se puede poner nodo allí. Cannot place unknown node: @1=No se puede poner nodo desconocido: @1 diff --git a/locale/template.txt b/locale/template.txt index e19a586..9e5961d 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -5,6 +5,7 @@ # chat commands entity= +mode= node= radius= old_item= @@ -12,6 +13,8 @@ new_item= old_node= new_node= ore= +action= +value= Usage:= Params:= default: @1= @@ -23,6 +26,8 @@ Technical name of node to be used in place.= Technical name of item to be replaced.= Technical name of item to be used in place.= Ore technical name.= +Action to execute. Can be one of "@1", "@2", or "@3".= +Mode or node to be set for tool (not required for "@1" action).= Remove an entity from game.= Remove a node from game.= Replace an item in game.= @@ -42,6 +47,9 @@ No unknown nodes found.= Ore "@1" not found, not unregistering.= Unregistered @1 ores (this will be undone after server restart).= Success!= +Manage settings for wielded cleaner tool.= +Unrecognized wielded item: @1= +Unrecognized action: @1= # tools: @1: mode set to: @2= From 99544d286f45aefc32cba4a1bd57f193e3e69f59 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 17:19:48 -0700 Subject: [PATCH 107/160] LDoc: set executable bit for gendoc.sh script --- docs/gendoc.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 docs/gendoc.sh diff --git a/docs/gendoc.sh b/docs/gendoc.sh old mode 100644 new mode 100755 From c13f78b471ad73a52eb50ec335c37756d9cc8f9c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 17:54:33 -0700 Subject: [PATCH 108/160] LDoc: move files for generating docs into ".ldoc" directory --- {docs => .ldoc}/config.ld | 6 ++---- {docs => .ldoc}/config.luadoc | 0 .ldoc/gendoc.sh | 39 +++++++++++++++++++++++++++++++++++ {docs => .ldoc}/ldoc.css | 0 docs/gendoc.sh | 13 ------------ 5 files changed, 41 insertions(+), 17 deletions(-) rename {docs => .ldoc}/config.ld (93%) rename {docs => .ldoc}/config.luadoc (100%) create mode 100755 .ldoc/gendoc.sh rename {docs => .ldoc}/ldoc.css (100%) delete mode 100755 docs/gendoc.sh diff --git a/docs/config.ld b/.ldoc/config.ld similarity index 93% rename from docs/config.ld rename to .ldoc/config.ld index 0bfde0f..8703578 100644 --- a/docs/config.ld +++ b/.ldoc/config.ld @@ -20,7 +20,7 @@ file = { "api.lua", "chat.lua", "tools.lua", - "docs/config.luadoc", + ".ldoc/config.luadoc", } new_type("chatcmd", "Chat Commands") @@ -49,7 +49,7 @@ custom_tags = { "img", title = "Image", format = function(value) - return "" + return "" end, }, } @@ -64,8 +64,6 @@ local function format_setting_tag(desc, value) end local function setting_handler(item) - print("\nsetting_handler: " .. item.name) - if not ipairs or not type then return item end diff --git a/docs/config.luadoc b/.ldoc/config.luadoc similarity index 100% rename from docs/config.luadoc rename to .ldoc/config.luadoc diff --git a/.ldoc/gendoc.sh b/.ldoc/gendoc.sh new file mode 100755 index 0000000..ead6b19 --- /dev/null +++ b/.ldoc/gendoc.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +# place this file in mod ".ldoc" directory + + +d_ldoc="$(dirname $(readlink -f $0))" +f_config="${d_ldoc}/config.ld" + +cd "${d_ldoc}/.." + +d_root="$(pwd)" +d_ref="${d_root}/docs/reference" +d_data="${d_ref}/data" + +cmd_ldoc="${d_ldoc}/ldoc/ldoc.lua" +if test ! -x "${cmd_ldoc}"; then + cmd_ldoc="ldoc" +fi + +# clean old files +rm -rf "${d_ref}" + +# create new files +"${cmd_ldoc}" --UNSAFE_NO_SANDBOX -c "${f_config}" -d "${d_ref}" "${d_root}" + +# check exit status +retval=$? +if test ${retval} -ne 0; then + exit ${retval} +fi + +# copy textures to data directory +echo -e "\ncopying textures ..." +mkdir -p "${d_data}" +for png in $(find "${d_root}/textures" -maxdepth 1 -type f -name "*.png"); do + cp -v "${png}" "${d_data}" +done + +echo -e "\nDone!" diff --git a/docs/ldoc.css b/.ldoc/ldoc.css similarity index 100% rename from docs/ldoc.css rename to .ldoc/ldoc.css diff --git a/docs/gendoc.sh b/docs/gendoc.sh deleted file mode 100755 index e159050..0000000 --- a/docs/gendoc.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -docs="$(dirname $(readlink -f $0))" -root="$(dirname ${docs})" -config="${docs}/config.ld" - -cd "${root}" - -# Clean old files -rm -rf "${docs}/reference" - -# Create new files -ldoc --UNSAFE_NO_SANDBOX -c "${config}" -d "${docs}/reference" "${root}" From f4b3e2e7c2f2fedf2f02826e333bfd84aacd304c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 17:55:50 -0700 Subject: [PATCH 109/160] Add GitHub workflow for building HTML docs on gh-pages branch --- .github/workflows/reference.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/reference.yml diff --git a/.github/workflows/reference.yml b/.github/workflows/reference.yml new file mode 100644 index 0000000..cd61ab9 --- /dev/null +++ b/.github/workflows/reference.yml @@ -0,0 +1,31 @@ +name: Build Reference + +on: + push: + branches: + - master + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Lua + uses: leafo/gh-actions-lua@v8 + with: + luaVersion: 5.4 + - name: Setup Lua Rocks + uses: leafo/gh-actions-luarocks@v4 + - name: Setup LDoc dependencies + run: luarocks install --only-deps https://raw.githubusercontent.com/lunarmodules/LDoc/master/ldoc-scm-3.rockspec + - name: Setup LDoc + run: git clone --single-branch --branch=custom https://github.com/AntumDeluge/ldoc.git .ldoc/ldoc && chmod +x .ldoc/ldoc/ldoc.lua + - name: Generate docs + run: chmod +x .ldoc/gendoc.sh && ./.ldoc/gendoc.sh + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs/ From c41f6e8a0a9c0b5b8564b5915a02a4502f3aa6bc Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 17:56:24 -0700 Subject: [PATCH 110/160] Delete static HTML docs --- docs/reference/index.html | 80 ------ docs/reference/ldoc.css | 304 --------------------- docs/reference/topics/api.html | 397 ---------------------------- docs/reference/topics/commands.html | 314 ---------------------- docs/reference/topics/config.html | 151 ----------- docs/reference/topics/settings.html | 119 --------- docs/reference/topics/tools.html | 122 --------- 7 files changed, 1487 deletions(-) delete mode 100644 docs/reference/index.html delete mode 100644 docs/reference/ldoc.css delete mode 100644 docs/reference/topics/api.html delete mode 100644 docs/reference/topics/commands.html delete mode 100644 docs/reference/topics/config.html delete mode 100644 docs/reference/topics/settings.html delete mode 100644 docs/reference/topics/tools.html diff --git a/docs/reference/index.html b/docs/reference/index.html deleted file mode 100644 index fb7f023..0000000 --- a/docs/reference/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - Cleaner mod for Minetest - - - - -
    - -
    - -
    -
    -
    - - -
    - - - - - - -
    - - - -

    Topics

    - - - - - - - - - - - - - - - - - - - - - -
    settingsCleaner Settings
    apiCleaner API
    commandsCleaner Chat Commands
    toolsCleaner Tools
    configWorld Path Configuration
    - -
    -
    -
    -generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-30 16:16:51 -
    -
    - - diff --git a/docs/reference/ldoc.css b/docs/reference/ldoc.css deleted file mode 100644 index 1fa3a99..0000000 --- a/docs/reference/ldoc.css +++ /dev/null @@ -1,304 +0,0 @@ -/* BEGIN RESET - -Copyright (c) 2010, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.com/yui/license.html -version: 2.8.2r1 -*/ -html { - color: #000; - background: #FFF; -} -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td { - margin: 0; - padding: 0; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -fieldset,img { - border: 0; -} -address,caption,cite,code,dfn,em,strong,th,var,optgroup { - font-style: inherit; - font-weight: inherit; -} -del,ins { - text-decoration: none; -} -li { - margin-left: 20px; -} -caption,th { - text-align: left; -} -h1,h2,h3,h4,h5,h6 { - font-size: 100%; - font-weight: bold; -} -q:before,q:after { - content: ''; -} -abbr,acronym { - border: 0; - font-variant: normal; -} -sup { - vertical-align: baseline; -} -sub { - vertical-align: baseline; -} -legend { - color: #000; -} -input,button,textarea,select,optgroup,option { - font-family: inherit; - font-size: inherit; - font-style: inherit; - font-weight: inherit; -} -input,button,textarea,select {*font-size:100%; -} -/* END RESET */ - -body { - margin-left: 1em; - margin-right: 1em; - font-family: arial, helvetica, geneva, sans-serif; - background-color: #ffffff; margin: 0px; -} - -code, tt { font-family: monospace; font-size: 1.1em; } -span.parameter { font-family:monospace; } -span.parameter:after { content:":"; } -span.types:before { content:"("; } -span.types:after { content:")"; } -.type { font-weight: bold; font-style:italic } - -body, p, td, th { font-size: .95em; line-height: 1.2em;} - -p, ul { margin: 10px 0 0 0px;} - -strong { font-weight: bold;} - -em { font-style: italic;} - -h1 { - font-size: 1.5em; - margin: 20px 0 20px 0; -} -h2, h3, h4 { margin: 15px 0 10px 0; } -h2 { font-size: 1.25em; } -h3 { font-size: 1.15em; } -h4 { font-size: 1.06em; } - -a:link { font-weight: bold; color: #004080; text-decoration: none; } -a:visited { font-weight: bold; color: #006699; text-decoration: none; } -a:link:hover { text-decoration: underline; } - -hr { - color:#cccccc; - background: #00007f; - height: 1px; -} - -blockquote { margin-left: 3em; } - -ul { list-style-type: disc; } - -p.name { - font-family: "Andale Mono", monospace; - padding-top: 1em; -} - -pre { - background-color: rgb(245, 245, 245); - border: 1px solid #C0C0C0; /* silver */ - padding: 10px; - margin: 10px 0 10px 0; - overflow: auto; - font-family: "Andale Mono", monospace; -} - -pre.example { - font-size: .85em; -} - -table.index { border: 1px #00007f; } -table.index td { text-align: left; vertical-align: top; } - -#container { - margin-left: 1em; - margin-right: 1em; - background-color: #f0f0f0; -} - -#product { - text-align: center; - border-bottom: 1px solid #cccccc; - background-color: #ffffff; -} - -#product big { - font-size: 2em; -} - -#main { - background-color: #f0f0f0; - border-left: 2px solid #cccccc; -} - -#navigation { - float: left; - width: 14em; - vertical-align: top; - background-color: #f0f0f0; - overflow: visible; - position: fixed; -} - -#navigation h2 { - background-color:#e7e7e7; - font-size:1.1em; - color:#000000; - text-align: left; - padding:0.2em; - border-top:1px solid #dddddd; - border-bottom:1px solid #dddddd; -} - -#navigation ul -{ - font-size:1em; - list-style-type: none; - margin: 1px 1px 10px 1px; -} - -#navigation li { - text-indent: -1em; - display: block; - margin: 3px 0px 0px 22px; -} - -#navigation li li a { - margin: 0px 3px 0px -1em; -} - -#content { - margin-left: 14em; - padding: 1em; - width: 700px; - border-left: 2px solid #cccccc; - border-right: 2px solid #cccccc; - background-color: #ffffff; -} - -#about { - clear: both; - padding: 5px; - border-top: 2px solid #cccccc; - background-color: #ffffff; -} - -@media print { - body { - font: 12pt "Times New Roman", "TimeNR", Times, serif; - } - a { font-weight: bold; color: #004080; text-decoration: underline; } - - #main { - background-color: #ffffff; - border-left: 0px; - } - - #container { - margin-left: 2%; - margin-right: 2%; - background-color: #ffffff; - } - - #content { - padding: 1em; - background-color: #ffffff; - } - - #navigation { - display: none; - } - pre.example { - font-family: "Andale Mono", monospace; - font-size: 10pt; - page-break-inside: avoid; - } -} - -table.module_list { - border-width: 1px; - border-style: solid; - border-color: #cccccc; - border-collapse: collapse; -} -table.module_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #cccccc; -} -table.module_list td.name { background-color: #f0f0f0; min-width: 200px; } -table.module_list td.summary { width: 100%; } - - -table.function_list { - border-width: 1px; - border-style: solid; - border-color: #cccccc; - border-collapse: collapse; -} -table.function_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #cccccc; -} -table.function_list td.name { background-color: #f0f0f0; min-width: 200px; } -table.function_list td.summary { width: 100%; } - -ul.nowrap { - overflow:auto; - white-space:nowrap; -} - -dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;} -dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;} -dl.table h3, dl.function h3 {font-size: .95em;} - -/* stop sublists from having initial vertical space */ -ul ul { margin-top: 0px; } -ol ul { margin-top: 0px; } -ol ol { margin-top: 0px; } -ul ol { margin-top: 0px; } - -/* make the target distinct; helps when we're navigating to a function */ -a:target + * { - background-color: #FF9; -} - - -/* styles for prettification of source */ -pre .comment { color: #558817; } -pre .constant { color: #a8660d; } -pre .escape { color: #844631; } -pre .keyword { color: #aa5050; font-weight: bold; } -pre .library { color: #0e7c6b; } -pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; } -pre .string { color: #8080ff; } -pre .number { color: #f8660d; } -pre .operator { color: #2239a8; font-weight: bold; } -pre .preprocessor, pre .prepro { color: #a33243; } -pre .global { color: #800080; } -pre .user-keyword { color: #800080; } -pre .prompt { color: #558817; } -pre .url { color: #272fc2; text-decoration: underline; } - diff --git a/docs/reference/topics/api.html b/docs/reference/topics/api.html deleted file mode 100644 index 27d26cc..0000000 --- a/docs/reference/topics/api.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - - Cleaner mod for Minetest - - - - -
    - -
    - -
    -
    -
    - - -
    - - - - - - -
    - -

    Topic api

    -

    Cleaner API

    -

    - -

    - - -

    Functions

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    cleaner.get_replace_items ()Retrieves list of items to be replaced.
    cleaner.get_replace_nodes ()Retrieves list of nodes to be replaced.
    cleaner.register_entity_removal (src)Registers an entity to be removed.
    cleaner.register_node_removal (src)Registers a node to be removed.
    cleaner.replace_item (src, tgt[, update_players])Replaces an item with another registered item.
    cleaner.register_item_replacement (src, tgt)Registeres an item to be replaced.
    cleaner.register_node_replacement (src, tgt)Registers a node to be replaced.
    -

    Unsafe methods

    - - - - - - - - - - - - - -
    cleaner.get_remove_ores ()Retrieves list of ores to be removed.
    cleaner.register_ore_removal (src)Registers an ore to be removed after server startup.
    cleaner.remove_ore (src)Removes an ore definition.
    - -
    -
    - - -

    Functions

    - -
    -
    - - cleaner.get_replace_items () -
    -
    - Retrieves list of items to be replaced. - - - - - - - -

    Returns:

    -
      - - table - Items to be replaced. -
    - - - - -
    -
    - - cleaner.get_replace_nodes () -
    -
    - Retrieves list of nodes to be replaced. - - - - - - - -

    Returns:

    -
      - - table - Nodes to be replaced. -
    - - - - -
    -
    - - cleaner.register_entity_removal (src) -
    -
    - Registers an entity to be removed. - - - - - - -

    Parameters:

    -
      -
    • src - string - Entity technical name. -
    • -
    - - - - - -
    -
    - - cleaner.register_node_removal (src) -
    -
    - Registers a node to be removed. - - - - - - -

    Parameters:

    -
      -
    • src - string - Node technical name. -
    • -
    - - - - - -
    -
    - - cleaner.replace_item (src, tgt[, update_players]) -
    -
    - Replaces an item with another registered item. - - - - - - -

    Parameters:

    -
      -
    • src - string - Technical name of item to be replaced. -
    • -
    • tgt - string - Technical name of item to be used in place. -
    • -
    • update_players - bool - true updates inventory lists associated with players (default: false). - (optional) -
    • -
    - - - - - -
    -
    - - cleaner.register_item_replacement (src, tgt) -
    -
    - Registeres an item to be replaced. - - - - - - -

    Parameters:

    -
      -
    • src - string - Technical name of item to be replaced. -
    • -
    • tgt - string - Technical name of item to be used in place. -
    • -
    - - - - - -
    -
    - - cleaner.register_node_replacement (src, tgt) -
    -
    - Registers a node to be replaced. - - - - - - -

    Parameters:

    -
      -
    • src - string - Technical name of node to be replaced. -
    • -
    • tgt - string - Technical name of node to be used in place. -
    • -
    - - - - - -
    -
    -

    Unsafe methods

    - -
    - Enabled with cleaner.unsafe setting. -
    -
    -
    - - cleaner.get_remove_ores () -
    -
    - Retrieves list of ores to be removed. - - - - - - - -

    Returns:

    -
      - - table - Ores to be replaced. -
    - - - - -
    -
    - - cleaner.register_ore_removal (src) -
    -
    - Registers an ore to be removed after server startup. - - - - - - -

    Parameters:

    -
      -
    • src - string - Ore technical name. -
    • -
    - - - - - -
    -
    - - cleaner.remove_ore (src) -
    -
    - Removes an ore definition. - - - - - - -

    Parameters:

    -
      -
    • src - string - Ore technical name. -
    • -
    - - - - - -
    -
    - - -
    -
    -
    -generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-30 16:16:51 -
    -
    - - diff --git a/docs/reference/topics/commands.html b/docs/reference/topics/commands.html deleted file mode 100644 index d94b775..0000000 --- a/docs/reference/topics/commands.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - Cleaner mod for Minetest - - - - -
    - -
    - -
    -
    -
    - - -
    - - - - - - -
    - -

    Topic commands

    -

    Cleaner Chat Commands

    -

    - -

    - - -

    Chat Commands

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    remove_entitiesRemoves nearby entities.
    remove_nodesRemoves nearby nodes.
    replace_itemsReplaces an item.
    replace_nodesReplaces nearby nodes.
    find_unknown_nodesChecks for nearby unknown nodes.
    cleanerManages settings for wielded cleaner tool.
    -

    Unsafe commands

    - - - - - -
    remove_oresRegisters an ore to be removed.
    - -
    -
    - - -

    Chat Commands

    - -
    -
    - - remove_entities -
    -
    - Removes nearby entities. - - - - - - -
      -
    • entity - Entity technical name. -
    • -
    • radius - int - - - - (optional) -
    • -
    - - - - - -
    -
    - - remove_nodes -
    -
    - Removes nearby nodes. - - - - - - -
      -
    • node - Node technical name. -
    • -
    • radius - int - - - - (optional) -
    • -
    - - - - - -
    -
    - - replace_items -
    -
    - Replaces an item. - - - - - - -
      -
    • old_item - Technical name of item to replace. -
    • -
    • new_item - Technical name of item to be used in place. -
    • -
    - - - - - -
    -
    - - replace_nodes -
    -
    - Replaces nearby nodes. - - - - - - -
      -
    • old_node - Technical name of node to replace. -
    • -
    • new_node - Technical name of node to be used in place. -
    • -
    • radius - int - - - - (optional) -
    • -
    - - - - - -
    -
    - - find_unknown_nodes -
    -
    - Checks for nearby unknown nodes. - - - - - - -
      -
    • radius - int - Search radius. - (optional) -
    • -
    - - - - - -
    -
    - - cleaner -
    -
    - Manages settings for wielded cleaner tool. - - - - - - -
      -
    • action - Action to execute. Can be "status", "setmode", or "setnode". -
    • -
    • value - Mode or node to be set for tool. -
    • -
    - - - - - -
    -
    -

    Unsafe commands

    - -
    - Enabled with cleaner.unsafe setting. -
    -
    -
    - - remove_ores -
    -
    - Registers an ore to be removed. - - - - - - -
      -
    • ore - Ore technical name. -
    • -
    - - - - - -
    -
    - - -
    -
    -
    -generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-30 16:16:51 -
    -
    - - diff --git a/docs/reference/topics/config.html b/docs/reference/topics/config.html deleted file mode 100644 index 76b2e6b..0000000 --- a/docs/reference/topics/config.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - Cleaner mod for Minetest - - - - -
    - -
    - -
    -
    -
    - - -
    - - - - - - -
    - -

    Topic config

    -

    World Path Configuration

    -

    - -

    - - -

    JSON Configurations

    - - - - - -
    cleaner.jsonMain configuration file.
    - -
    -
    - - -

    JSON Configurations

    - -
    -
    - - cleaner.json -
    -
    - Main configuration file.

    - -

    Registering items, entities, etc. for cleaning can be done in cleaner.json - in the world directory (<world_path>/cleaner.json). If it does not exist - it will be created automatically when the server is started.

    - -

    It is formatted as follows:

    - -
    {
    -  "entities" :
    -  {
    -    "remove" : []
    -  },
    -  "items" :
    -  {
    -    "replace" : {}
    -  },
    -  "nodes" :
    -  {
    -    "remove" : [],
    -    "replace" : {}
    -  },
    -  "ores" :
    -  {
    -    "remove" : []
    -  }
    -}
    -
    - -

    remove key works for nodes, entities, & ores. replace key works for - nodes & items. Their functions are self-explanatory. - - - - - - - - - - -

    Usage:

    -
      -
      Cleaning nodes example:
      -{
      -  "nodes" :
      -  {
      -    "remove" : [
      -      "old:node_1",
      -      "old:node_2",
      -    ],
      -    "replace" : {
      -      "old:node_3" : "new:node_1",
      -      "old:node_4" : "new:node_2",
      -    }
      -  },
      -}
      -
    - -
    -
    - - -
    -
    -
    -generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-30 16:16:51 -
    -
    - - diff --git a/docs/reference/topics/settings.html b/docs/reference/topics/settings.html deleted file mode 100644 index 823da59..0000000 --- a/docs/reference/topics/settings.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - Cleaner mod for Minetest - - - - -
    - -
    - -
    -
    -
    - - -
    - - - - - - -
    - -

    Topic settings

    -

    Cleaner Settings

    -

    - -

    - - -

    Settings

    - - - - - -
    cleaner.unsafeEnables unsafe methods & chat commands.
    - -
    -
    - - -

    Settings

    - -
    -
    - - cleaner.unsafe -
    -
    - -

    Enables unsafe methods & chat commands.

    - -
      -
    • cleaner.remove_ore
    • -
    • /remove_ores
    • -
    - - -

    Definition:

    - -
      -
    • type: bool
    • -
    • default: false
    • -
    - - - - - - - - - - - - -
    -
    - - -
    -
    -
    -generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-30 16:16:51 -
    -
    - - diff --git a/docs/reference/topics/tools.html b/docs/reference/topics/tools.html deleted file mode 100644 index 40f9e99..0000000 --- a/docs/reference/topics/tools.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - Cleaner mod for Minetest - - - - -
    - -
    - -
    -
    -
    - - -
    - - - - - - -
    - -

    Topic tools

    -

    Cleaner Tools

    -

    - -

    - - -

    Tools

    - - - - - -
    cleaner:pencilMaster Pencil
    - -
    -
    - - -

    Tools

    - -
    -
    - - cleaner:pencil -
    -
    - Master Pencil - -

    Required Privileges:

    -
      - server -
    - - -

    Image:

    -
      - -
    - - - - - -

    Usage:

    -
      -
      place (right-click):
      -- when not pointing at a node, changes modes
      -- when pointing at a node, sets node to be used
      -
      -use (left-click):
      -- executes action for current mode:
      -  - erase: erases pointed node
      -  - write: adds node
      -  - swap:  replaces pointed node
      -
    - -
    -
    - - -
    -
    -
    -generated by LDoc 1.4.6-antum-dev -Last updated 2021-07-30 16:16:51 -
    -
    - - From 970d8b3aaba50f6b1f64a69854fd110992caae34 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 17:57:26 -0700 Subject: [PATCH 111/160] Update API reference link in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 970dd5b..613d2ec 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ cleaner.unsafe - [![ContentDB](https://content.minetest.net/packages/AntumDeluge/cleaner/shields/title/)][ContentDB] - [Forum](https://forum.minetest.net/viewtopic.php?t=18381) - [Git repo](https://github.com/AntumMT/mod-cleaner) -- [API](https://antummt.github.io/mod-cleaner/docs/reference) +- [Reference](https://antummt.github.io/mod-cleaner/reference) - [Changelog](changelog.txt) - [TODO](TODO.txt) From 90525433016c95dd69931ebd43fdd9103bbf5bb0 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 18:09:00 -0700 Subject: [PATCH 112/160] Minor changes to Lua docstrings --- api.lua | 2 +- chat.lua | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api.lua b/api.lua index 5bc795c..000b3f4 100644 --- a/api.lua +++ b/api.lua @@ -143,7 +143,7 @@ end --- Unsafe methods. -- --- Enabled with `cleaner.unsafe` setting. +-- Enabled with [cleaner.unsafe](settings.html#cleaner.unsafe) setting. -- -- @section unsafe diff --git a/chat.lua b/chat.lua index fe11fee..29fba41 100644 --- a/chat.lua +++ b/chat.lua @@ -424,7 +424,7 @@ core.register_chatcommand(cmd_repo.find_node.cmd, { --- Unsafe commands. -- --- Enabled with `cleaner.unsafe` setting. +-- Enabled with [cleaner.unsafe](settings.html#cleaner.unsafe) setting. -- -- @section unsafe @@ -474,7 +474,7 @@ end -- -- @chatcmd ctool -- @param action Action to execute. Can be "status", "setmode", or "setnode". --- @param value Mode or node to be set for tool. +-- @param value Mode or node to be set for tool (not required for "status" action).. core.register_chatcommand(cmd_repo.tool.cmd, { privs = {server=true}, description = S("Manage settings for wielded cleaner tool.") .. "\n\n" From cbc6235f251d6356ce7a67daf48709c2bc1861d5 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 18:17:55 -0700 Subject: [PATCH 113/160] LDoc: set min-height for "content" element --- .ldoc/ldoc.css | 1 + 1 file changed, 1 insertion(+) diff --git a/.ldoc/ldoc.css b/.ldoc/ldoc.css index 21f93c8..dc1d328 100644 --- a/.ldoc/ldoc.css +++ b/.ldoc/ldoc.css @@ -193,6 +193,7 @@ table.index td { text-align: left; vertical-align: top; } border-left: 2px solid #cccccc; border-right: 2px solid #cccccc; background-color: #ffffff; + min-height: 425px; } #about { From f4b105306464cb1b25420bc27c37e47155363e83 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 23:00:10 -0700 Subject: [PATCH 114/160] LDoc: some touch-ups to gendoc.sh script --- .ldoc/gendoc.sh | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/.ldoc/gendoc.sh b/.ldoc/gendoc.sh index ead6b19..4233611 100755 --- a/.ldoc/gendoc.sh +++ b/.ldoc/gendoc.sh @@ -9,8 +9,8 @@ f_config="${d_ldoc}/config.ld" cd "${d_ldoc}/.." d_root="$(pwd)" -d_ref="${d_root}/docs/reference" -d_data="${d_ref}/data" +d_export="${d_export:-${d_root}/docs/reference}" +d_data="${d_export}/data" cmd_ldoc="${d_ldoc}/ldoc/ldoc.lua" if test ! -x "${cmd_ldoc}"; then @@ -18,22 +18,29 @@ if test ! -x "${cmd_ldoc}"; then fi # clean old files -rm -rf "${d_ref}" +rm -rf "${d_export}" -# create new files -"${cmd_ldoc}" --UNSAFE_NO_SANDBOX -c "${f_config}" -d "${d_ref}" "${d_root}" +# generate new doc files +"${cmd_ldoc}" --UNSAFE_NO_SANDBOX -c "${f_config}" -d "${d_export}" "${d_root}"; retval=$? # check exit status -retval=$? if test ${retval} -ne 0; then + echo -e "\nan error occurred (ldoc return code: ${retval})" exit ${retval} fi # copy textures to data directory echo -e "\ncopying textures ..." mkdir -p "${d_data}" +texture_count=0 for png in $(find "${d_root}/textures" -maxdepth 1 -type f -name "*.png"); do - cp -v "${png}" "${d_data}" + if test -f "${d_data}/$(basename ${png})"; then + echo "WARNING: not overwriting existing file: ${png}" + else + cp "${png}" "${d_data}" + texture_count=$((texture_count + 1)) + printf "\rcopied ${texture_count} textures" + fi done -echo -e "\nDone!" +echo -e "\n\nDone!" From df515241ed077ba2154e995e014274493a733b56 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 23:16:37 -0700 Subject: [PATCH 115/160] Add git attributes to exclude some dirs & files from releases --- .gitattributes | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8cd26bb --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +.gitattributes export-ignore +.github/ export-ignore +.ldoc/ export-ignore +sounds_src/ export-ignore From 657ba25890bc77ca2227aa281c5410dc65316eb1 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 23:20:45 -0700 Subject: [PATCH 116/160] Add screenshot --- README.md | 2 ++ screenshot.png | Bin 0 -> 187429 bytes 2 files changed, 2 insertions(+) create mode 100644 screenshot.png diff --git a/README.md b/README.md index 613d2ec..5a76f26 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & items. Originally forked from [PilzAdam's ***clean*** mod][f.pilzadam]. +![screenshot](screenshot.png) + ### Licensing: - Code: [MIT](LICENSE.txt) diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..639655d76fd7569b87e347e4911290501b6ff2ad GIT binary patch literal 187429 zcmYhi1yCGew=}$qyNBQ`t^tC(yF>8c?(Vv{ySuvvcXxLuI0OhD+&

    -uu^Ib+)Ez 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�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%0AMu$k*f9L_R>(hJc!WfS2g&c^nDTqusR;X#zgIp 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 literal 0 HcmV?d00001 From 44f643195c574f5caa057209a53f2967166b8ce2 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 23:48:00 -0700 Subject: [PATCH 117/160] Add .cdb.json file for ContentDB updates --- .cdb.json | 11 +++++++++++ .gitattributes | 4 +--- 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 .cdb.json diff --git a/.cdb.json b/.cdb.json new file mode 100644 index 0000000..b54c648 --- /dev/null +++ b/.cdb.json @@ -0,0 +1,11 @@ +{ + "type": "MOD", + "title": "Cleaner", + "short_description": "Remove/Replace unknown entities, nodes, & items.", + "license": "MIT", + "media_license": "CC0", + "tags": ["world_tools"], + "repo": "https://github.com/AntumMT/mod-cleaner", + "issue_tracker": "https://github.com/AntumMT/mod-cleaner/issues", + "forums": "18381", +} diff --git a/.gitattributes b/.gitattributes index 8cd26bb..8e94d42 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,2 @@ -.gitattributes export-ignore -.github/ export-ignore -.ldoc/ export-ignore +.* export-ignore sounds_src/ export-ignore From 1277f7a7846486fb4230a76326f4a0680b2927d7 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 30 Jul 2021 23:55:08 -0700 Subject: [PATCH 118/160] Update TODO list --- TODO.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/TODO.txt b/TODO.txt index 9333bc6..5893206 100644 --- a/TODO.txt +++ b/TODO.txt @@ -8,4 +8,3 @@ TODO: - add "radius" option for pencil or "xlen", "ylen", & "zlen" options - add "xrotate" & "zrorate" modes for pencil - fix pencil "write" mode when pointing to side of node (node gets placed below) -- move HTML docs to gh-pages branch From 09d6475ce06d22a9a8d2a9e63614a0ffe6b8687b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 01:10:48 -0700 Subject: [PATCH 119/160] Fix missing sound_hand declaration --- misc_functions.lua | 2 ++ tools.lua | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/misc_functions.lua b/misc_functions.lua index 76378af..9380d14 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -151,6 +151,8 @@ local tool = { end, } +local sound_handle + tool.on_use = function(stack, user, pointed_thing) if not user:is_player() then return end diff --git a/tools.lua b/tools.lua index c6c3f80..fb8e20d 100644 --- a/tools.lua +++ b/tools.lua @@ -9,8 +9,6 @@ local S = core.get_translator(cleaner.modname) local aux = dofile(cleaner.modpath .. "/misc_functions.lua") -local sound_handle - --- Master Pencil -- -- @tool cleaner:pencil From 95adf18f235145196076298036920be54cb23dc4 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 01:17:07 -0700 Subject: [PATCH 120/160] Check chat command radius parameter & limit max to 100 --- chat.lua | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/chat.lua b/chat.lua index 29fba41..fe45ac0 100644 --- a/chat.lua +++ b/chat.lua @@ -188,6 +188,23 @@ local function format_help(cmd) end +local function check_radius(radius, pname) + local is_admin = core.check_player_privs(pname, {server=true}) + + if not is_admin and radius > 10 then + radius = 10 + return radius, S("You do not have permission to set radius that high. Reduced to @1.", radius) + end + + if radius > 100 then + radius = 100 + return radius, S("Radius is too high. Reduced to @1.", radius) + end + + return radius +end + + --- Removes nearby entities. -- -- @chatcmd remove_entities @@ -216,6 +233,11 @@ core.register_chatcommand(cmd_repo.entity.cmd, { err = cmd_repo.param.mal_radius end + local radius, msg = check_radius(radius, name) + if msg then + core.chat_send_player(name, msg) + end + if err then return false, err .. "\n\n" .. format_help(cmd_repo.entity.cmd) end @@ -271,6 +293,11 @@ core.register_chatcommand(cmd_repo.rem_node.cmd, { err = cmd_repo.param.mal_radius end + local radius, msg = check_radius(radius, name) + if msg then + core.chat_send_player(name, msg) + end + if err then return false, err .. "\n\n" .. format_help(cmd_repo.rem_node.cmd) end @@ -349,6 +376,11 @@ core.register_chatcommand(cmd_repo.rep_node.cmd, { return false, cmd_repo.param.mal_radius .. "\n\n" .. help end + local radius, msg = check_radius(radius, name) + if msg then + core.chat_send_player(name, msg) + end + if not core.registered_nodes[tgt] then return false, S('Cannot use unknown node "@1" as replacement.', tgt) end @@ -395,6 +427,11 @@ core.register_chatcommand(cmd_repo.find_node.cmd, { return false, cmd_repo.param.mal_radius .. "\n\n" .. help end + local radius, msg = check_radius(radius, name) + if msg then + core.chat_send_player(name, msg) + end + local ppos = core.get_player_by_name(name):get_pos() local checked_nodes = {} From 0acbd3318b1eacc72a7f9bacacfeb6225a85da52 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 01:17:58 -0700 Subject: [PATCH 121/160] Fix message for find_unknown_nodes chat command --- chat.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chat.lua b/chat.lua index fe45ac0..6db9806 100644 --- a/chat.lua +++ b/chat.lua @@ -447,9 +447,9 @@ core.register_chatcommand(cmd_repo.find_node.cmd, { end end - local msg - if #unknown_nodes > 0 then - msg = S("Found unknown nodes: @1", table.concat(unknown_nodes, ", ")) + local node_count = #unknown_nodes + if node_count > 0 then + msg = S("Found unknown nodes: @1", node_count) .. "\n " .. table.concat(unknown_nodes, ", ") else msg = S("No unknown nodes found.") end From 0dbd7b12433c2310a04a9ce0bd24f42b0d25d045 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 01:19:52 -0700 Subject: [PATCH 122/160] Add chat command to find names of nearby nodes --- changelog.txt | 1 + chat.lua | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/changelog.txt b/changelog.txt index 463af85..27ba6f7 100644 --- a/changelog.txt +++ b/changelog.txt @@ -14,6 +14,7 @@ v1.2 - replace_items - replace_nodes - find_unknown_nodes + - find_neaby_nodes - remove_ores (unsafe) - ctool (manages pencil tool settings) diff --git a/chat.lua b/chat.lua index 6db9806..4862832 100644 --- a/chat.lua +++ b/chat.lua @@ -57,6 +57,10 @@ local cmd_repo = { cmd = "find_unknown_nodes", oparams = {radius=100}, }, + near_node = { + cmd = "find_nearby_nodes", + oparams = {radius=5}, + }, item = { cmd = "replace_items", params = {"old_item", "new_item"}, @@ -458,6 +462,63 @@ core.register_chatcommand(cmd_repo.find_node.cmd, { end, }) +--- Finds names of nearby nodes. +-- +-- @chatcmd find_neaby_nodes +-- @tparam[opt] int radius Search radius. +core.register_chatcommand(cmd_repo.near_node.cmd, { + privs = {server=true}, + description = S("Find names of nearby nodes.") .. "\n\n" + .. format_params(cmd_repo.near_node.cmd), + params = cmd_repo.near_node.help.param_string, + func = function(name, param) + local help = format_help(cmd_repo.near_node.cmd) + + if param:find(" ") then + return false, cmd_repo.param.excess .. "\n\n" .. help + end + + local radius = cmd_repo.near_node.oparams.radius + if param and param:trim() ~= "" then + radius = tonumber(param) + end + + if not radius then + return false, cmd_repo.param.mal_radius .. "\n\n" .. help + end + + local radius, msg = check_radius(radius, name) + if msg then + core.chat_send_player(name, msg) + end + + local ppos = core.get_player_by_name(name):get_pos() + + local node_names = {} + for _, npos in ipairs(pos_list(ppos, radius)) do + local node = core.get_node_or_nil(npos) + if node and not node_names[node.name] then + node_names[node.name] = true + end + end + + local found_nodes = {} + for k, _ in pairs(node_names) do + table.insert(found_nodes, k) + end + + local msg + local node_count = #found_nodes + if node_count > 0 then + msg = S("Nearby nodes: @1", node_count) .. "\n " .. table.concat(found_nodes, ", ") + else + msg = S("No nearby nodes found.") + end + + return true, msg + end, +}) + --- Unsafe commands. -- From 9972213c9b45e0868408a778681ff5fc694779e2 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 01:20:16 -0700 Subject: [PATCH 123/160] Update localization template & Spanish translation --- locale/cleaner.es.tr | 7 ++++++- locale/template.txt | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/locale/cleaner.es.tr b/locale/cleaner.es.tr index df75ee6..bbc0007 100644 --- a/locale/cleaner.es.tr +++ b/locale/cleaner.es.tr @@ -32,7 +32,8 @@ Remove an entity from game.=Eliminar una entidad del juego. Remove a node from game.=Eliminar un nodo del juego. Replace an item in game.=Sustituir un objecto del juego. Replace a node in game.=Sustituir un nodo del juego. -Find names of unknown nodes.=Encontrar los nombres de nodos desconocidos. +Find names of unknown nodes.=Descubrir los nombres de nodos desconocidos. +Find names of nearby nodes.=Descubrir los nombres de nodos cercanos. Remove an ore from game.=Eliminar un mineral del juego. Missing parameter.=Parámetro extraviado. Too many parameters.=Demasiados parámetros. @@ -44,12 +45,16 @@ Removed @1 nodes.=Se eliminaron @1 nodos. Removed @1 entities.=Se eliminaron @1 entidades. Found unknown nodes: @1=Se encontraron @1 nodos desconocidos. No unknown nodes found.=No se encontraron nodos desconocidos. +Nearby nodes: @1=Nodos cercanos: @1 +No nearby nodes found.=No se encontraron nodos cercanos. Ore "@1" not found, not unregistering.=No se encontró el mineral "@1", se mantiene registrado. Unregistered @1 ores (this will be undone after server restart).=Se anuló @1 minerales del registro. Success!=¡Éxito! Manage settings for wielded cleaner tool.=Administrar a los ajustes de la herramienta cleaner empuñada. Unrecognized wielded item: @1=Objeto empuñado desconocido: @1 Unrecognized action: @1=Acción desconocido: @1 +You do not have permission to set radius that high. Reduced to @1.=No tienes permiso para poner al radio tan alto. Se reduce a @1. +Radius is too high. Reduced to @1.=El radio es demasiado alto. Se reduce a @1. # tools: @1: mode set to: @2=@1: modo configurado para: @2 diff --git a/locale/template.txt b/locale/template.txt index 9e5961d..5373fb7 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -33,6 +33,7 @@ Remove a node from game.= Replace an item in game.= Replace a node in game.= Find names of unknown nodes.= +Find names of nearby nodes.= Remove an ore from game.= Missing parameter.= Too many parameters.= @@ -44,12 +45,16 @@ Removed @1 nodes.= Removed @1 entities.= Found unknown nodes: @1= No unknown nodes found.= +Nearby nodes: @1= +No nearby nodes found.= Ore "@1" not found, not unregistering.= Unregistered @1 ores (this will be undone after server restart).= Success!= Manage settings for wielded cleaner tool.= Unrecognized wielded item: @1= Unrecognized action: @1= +You do not have permission to set radius that high. Reduced to @1.= +Radius is too high. Reduced to @1.= # tools: @1: mode set to: @2= From 29f772dc92b519cb1aa963693e4da3220b5d159b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 01:20:34 -0700 Subject: [PATCH 124/160] Add to TODO list --- TODO.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODO.txt b/TODO.txt index 5893206..946e503 100644 --- a/TODO.txt +++ b/TODO.txt @@ -8,3 +8,5 @@ TODO: - add "radius" option for pencil or "xlen", "ylen", & "zlen" options - add "xrotate" & "zrorate" modes for pencil - fix pencil "write" mode when pointing to side of node (node gets placed below) +- don't require "server" priv for "find_unknown_nodes" & "find_neaby_nodes" commands +- add chat command to find nodes with specified attributes From 9c80a957e3d9e7e9f0b08fa23b9cb3ffdeca3e92 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 03:36:19 -0700 Subject: [PATCH 125/160] Fix typo in docstring --- chat.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chat.lua b/chat.lua index 4862832..adaf63d 100644 --- a/chat.lua +++ b/chat.lua @@ -464,7 +464,7 @@ core.register_chatcommand(cmd_repo.find_node.cmd, { --- Finds names of nearby nodes. -- --- @chatcmd find_neaby_nodes +-- @chatcmd find_nearby_nodes -- @tparam[opt] int radius Search radius. core.register_chatcommand(cmd_repo.near_node.cmd, { privs = {server=true}, From 689f911cb3d04a9cd7450c8c3c6ed817140c77a8 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 04:17:50 -0700 Subject: [PATCH 126/160] LDoc: new tags for embedding videos --- .ldoc/config.ld | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.ldoc/config.ld b/.ldoc/config.ld index 8703578..c183c39 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -28,11 +28,35 @@ new_type("setting", "Settings") new_type("tool", "Tools") new_type("json", "JSON Configurations") + +local function video_frame(src) + return '' +end + custom_tags = { { "privs", title = "Required Privileges", }, + { + "video", + title = "Video", + format = video_frame, + }, + { + "youtube", + title = "Video", + format = function(value) + return video_frame("https://www.youtube.com/embed/" .. value) + --[[ + return '' + ]] + end, + }, -- settings { "settype", From df81a7755b9353e86bfc49b3d07637008dba73d4 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 04:19:35 -0700 Subject: [PATCH 127/160] Touch up docstrings --- .ldoc/config.luadoc | 8 +++++--- api.lua | 2 +- chat.lua | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.ldoc/config.luadoc b/.ldoc/config.luadoc index 89accf8..7cb0044 100644 --- a/.ldoc/config.luadoc +++ b/.ldoc/config.luadoc @@ -41,13 +41,15 @@ -- { -- "nodes" : -- { --- "remove" : [ +-- "remove" : +-- [ -- "old:node_1", -- "old:node_2", -- ], --- "replace" : { +-- "replace" : +-- { -- "old:node_3" : "new:node_1", -- "old:node_4" : "new:node_2", --- } +-- }, -- }, -- } diff --git a/api.lua b/api.lua index 000b3f4..17b2a1b 100644 --- a/api.lua +++ b/api.lua @@ -141,7 +141,7 @@ function cleaner.register_node_replacement(src, tgt) end ---- Unsafe methods. +--- Unsafe Methods. -- -- Enabled with [cleaner.unsafe](settings.html#cleaner.unsafe) setting. -- diff --git a/chat.lua b/chat.lua index adaf63d..73f9c52 100644 --- a/chat.lua +++ b/chat.lua @@ -520,7 +520,7 @@ core.register_chatcommand(cmd_repo.near_node.cmd, { }) ---- Unsafe commands. +--- Unsafe Commands. -- -- Enabled with [cleaner.unsafe](settings.html#cleaner.unsafe) setting. -- @@ -568,7 +568,7 @@ end --- @section end ---- Manages settings for wielded cleaner tool. +--- Manages settings for wielded [cleaner tool](tools.html). -- -- @chatcmd ctool -- @param action Action to execute. Can be "status", "setmode", or "setnode". From 28f1f355c0754a2315c632ea0181c2928d3a3c8a Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 04:21:41 -0700 Subject: [PATCH 128/160] LDoc: clean up config --- .ldoc/config.ld | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.ldoc/config.ld b/.ldoc/config.ld index c183c39..dc84930 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -50,11 +50,6 @@ custom_tags = { title = "Video", format = function(value) return video_frame("https://www.youtube.com/embed/" .. value) - --[[ - return '' - ]] end, }, -- settings From fd6032a879734128cc0e65b52e120b3e756321f0 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 13:30:14 -0700 Subject: [PATCH 129/160] Fix node placement with pencil in write mode --- TODO.txt | 1 - misc_functions.lua | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/TODO.txt b/TODO.txt index 946e503..d49535a 100644 --- a/TODO.txt +++ b/TODO.txt @@ -7,6 +7,5 @@ TODO: - add LBM when removing an item if it is a node - add "radius" option for pencil or "xlen", "ylen", & "zlen" options - add "xrotate" & "zrorate" modes for pencil -- fix pencil "write" mode when pointing to side of node (node gets placed below) - don't require "server" priv for "find_unknown_nodes" & "find_neaby_nodes" commands - add chat command to find nodes with specified attributes diff --git a/misc_functions.lua b/misc_functions.lua index 9380d14..899b981 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -184,7 +184,7 @@ tool.on_use = function(stack, user, pointed_thing) elseif mode == "write" then local node_above = core.get_node_or_nil(pointed_thing.above) if not node_above or node_above.name == "air" then - core.place_node(pointed_thing.above, {name=new_node_name}) + core.set_node(pointed_thing.above, {name=new_node_name}) sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) else core.chat_send_player(pname, S("Can't place node there.")) From 7f9e6459009638cdd6445c9885230509dce0fe0c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 14:37:27 -0700 Subject: [PATCH 130/160] Increment version to 1.2 --- mod.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod.conf b/mod.conf index a1a6472..150080d 100644 --- a/mod.conf +++ b/mod.conf @@ -1,6 +1,6 @@ name = cleaner description = A mod that can be used to remove/replace unknown entities, nodes, & items. -version = 1.1 +version = 1.2 license = MIT author = PilzAdam, Jordan Irwin (AntumDeluge) min_minetest_version = 5.0 From bb528d74a8dfd30d002ed473c5e2f51c51194817 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 15:42:50 -0700 Subject: [PATCH 131/160] LDoc: add chat command handler --- .ldoc/config.ld | 61 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/.ldoc/config.ld b/.ldoc/config.ld index dc84930..b85f38b 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -1,10 +1,13 @@ -local print, error, type, ipairs +local print, error, type, table, ipairs, string, tostring if import then print = import("print") error = import("error") type = import("type") + table = import("table") ipairs = import("ipairs") + string = import("string") + tostring = import("tostring") end @@ -74,9 +77,34 @@ custom_tags = { } -local registered = { - settings = {}, -} +-- START: handling items to prevent re-parsing + +local registered_items = {} + +local function is_registered(item) + if not registered_items[item.type] then return false end + + for _, tbl in ipairs(registered_items[item.type]) do + if item == tbl then + return true + end + end + + return false +end + +local function register(item) + if not registered_items[item.type] then + registered_items[item.type] = {} + end + + if not is_registered(item) then + table.insert(registered_items[item.type], item) + end +end + +-- END: + local function format_setting_tag(desc, value) return "\n- `" .. desc .. ":` `" .. value .. "`" @@ -128,17 +156,36 @@ local function setting_handler(item) end end - registered.settings[item.name] = true + return item +end + +local function chatcmd_handler(item) + for _, p in ipairs(item.params) do + if item.modifiers.param[p].opt then + item.name = item.name .. " [" .. p .. "]" + else + item.name = item.name .. " <" .. p .. ">" + end + end + + if #item.params > 0 then + item.description = item.description .. "\n\n### Parameters:" + end return item end function custom_display_name_handler(item, default_handler) - if item.type == "setting" and not registered.settings[item.name] then - item = setting_handler(item) + if not is_registered(item) then + if item.type == "setting" then + item = setting_handler(item) + elseif item.type == "chatcmd" then + item = chatcmd_handler(item) + end end if item then + register(item) return default_handler(item) end end From c00ee93e79d169efaa48d930dc4f6e14b848ce3e Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 15:43:58 -0700 Subject: [PATCH 132/160] Docstrings update --- api.lua | 2 +- chat.lua | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/api.lua b/api.lua index 17b2a1b..a894148 100644 --- a/api.lua +++ b/api.lua @@ -153,7 +153,7 @@ if cleaner.unsafe then --- Retrieves list of ores to be removed. -- - -- @treturn table Ores to be replaced. + -- @treturn table Ores to be removed. function cleaner.get_remove_ores() return remove_ores end diff --git a/chat.lua b/chat.lua index 73f9c52..83a6e34 100644 --- a/chat.lua +++ b/chat.lua @@ -211,9 +211,16 @@ end --- Removes nearby entities. -- +--

    Required Privileges:

    +-- +-- - server +-- -- @chatcmd remove_entities -- @param entity Entity technical name. --- @tparam[opt] int radius +-- @tparam[opt] int radius Search radius (default: 100). +-- @usage +-- # remove all mobs:horse entities within a radius of 10 nodes +-- /remove_entities mobs:horse 10 core.register_chatcommand(cmd_repo.entity.cmd, { privs = {server=true}, description = S("Remove an entity from game.") .. "\n\n" @@ -271,9 +278,16 @@ core.register_chatcommand(cmd_repo.entity.cmd, { --- Removes nearby nodes. -- +--

    Required Privileges:

    +-- +-- - server +-- -- @chatcmd remove_nodes -- @param node Node technical name. --- @tparam[opt] int radius +-- @tparam[opt] int radius Search radius (default: 5). +-- @usage +-- # remove all default:dirt nodes within a radius of 10 +-- /remove_nodes default:dirt 10 core.register_chatcommand(cmd_repo.rem_node.cmd, { privs = {server=true}, description = S("Remove a node from game.") .. "\n\n" @@ -323,9 +337,16 @@ core.register_chatcommand(cmd_repo.rem_node.cmd, { --- Replaces an item. -- +--

    Required Privileges:

    +-- +-- - server +-- -- @chatcmd replace_items -- @param old_item Technical name of item to replace. -- @param new_item Technical name of item to be used in place. +-- @usage +-- # replace default:sword_wood with default:sword_mese +-- /replace_items default:sword_wood default:sword_mese core.register_chatcommand(cmd_repo.item.cmd, { privs = {server=true}, description = S("Replace an item in game.") .. "\n\n" @@ -351,10 +372,17 @@ core.register_chatcommand(cmd_repo.item.cmd, { --- Replaces nearby nodes. -- +--

    Required Privileges:

    +-- +-- - server +-- -- @chatcmd replace_nodes -- @param old_node Technical name of node to replace. -- @param new_node Technical name of node to be used in place. --- @tparam[opt] int radius +-- @tparam[opt] int radius Search radius (default: 5). +-- @usage +-- # replace all default:dirt nodes with default:cobble within a radius of 10 +-- /replace_nodes default:dirt default:cobble 10 core.register_chatcommand(cmd_repo.rep_node.cmd, { privs = {server=true}, description = S("Replace a node in game.") .. "\n\n" @@ -408,8 +436,15 @@ core.register_chatcommand(cmd_repo.rep_node.cmd, { --- Checks for nearby unknown nodes. -- +--

    Required Privileges:

    +-- +-- - server +-- -- @chatcmd find_unknown_nodes --- @tparam[opt] int radius Search radius. +-- @tparam[opt] int radius Search radius (default: 100). +-- @usage +-- # print names of all unknown nodes within radius of 10 +-- /find_unknown_nodes 10 core.register_chatcommand(cmd_repo.find_node.cmd, { privs = {server=true}, description = S("Find names of unknown nodes.") .. "\n\n" @@ -464,8 +499,15 @@ core.register_chatcommand(cmd_repo.find_node.cmd, { --- Finds names of nearby nodes. -- +--

    Required Privileges:

    +-- +-- - server +-- -- @chatcmd find_nearby_nodes --- @tparam[opt] int radius Search radius. +-- @tparam[opt] int radius Search radius (default: 5). +-- @usage +-- # print names of all node types found within radius of 10 +-- /find_nearby_nodes 10 core.register_chatcommand(cmd_repo.near_node.cmd, { privs = {server=true}, description = S("Find names of nearby nodes.") .. "\n\n" @@ -530,8 +572,15 @@ core.register_chatcommand(cmd_repo.near_node.cmd, { if cleaner.unsafe then --- Registers an ore to be removed. -- + --

    Required Privileges:

    + -- + -- - server + -- -- @chatcmd remove_ores -- @param ore Ore technical name. + -- @usage + -- # remove all registered ores that add default:stone_with_iron to world + -- /remove_ores default:stone_with_iron core.register_chatcommand(cmd_repo.ore.cmd, { privs = {server=true}, description = S("Remove an ore from game.") .. "\n\n" @@ -570,9 +619,17 @@ end --- Manages settings for wielded [cleaner tool](tools.html). -- +--

    Required Privileges:

    +-- +-- - server +-- -- @chatcmd ctool -- @param action Action to execute. Can be "status", "setmode", or "setnode". --- @param value Mode or node to be set for tool (not required for "status" action).. +-- @param value Mode or node to be set for tool (not required for "status" action). +-- @usage +-- # while cleaner:pencil is wielded, configure to place default:dirt node when used +-- /ctool setmode write +-- /ctool setnode default:dirt core.register_chatcommand(cmd_repo.tool.cmd, { privs = {server=true}, description = S("Manage settings for wielded cleaner tool.") .. "\n\n" From b6ce5239571248ff2fc584414940bfca2852a910 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 17:42:42 -0700 Subject: [PATCH 133/160] LDoc: add some special tags handling --- .ldoc/config.ld | 89 ++++++++++++++++++++++++++----------------------- .ldoc/tags.ld | 81 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 42 deletions(-) create mode 100644 .ldoc/tags.ld diff --git a/.ldoc/config.ld b/.ldoc/config.ld index b85f38b..313ff11 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -1,6 +1,7 @@ -local print, error, type, table, ipairs, string, tostring +local dofile, print, error, type, table, ipairs, string, tostring if import then + dofile = import("dofile") print = import("print") error = import("error") type = import("type") @@ -38,43 +39,9 @@ local function video_frame(src) .. ' allow="fullscreen;">' end -custom_tags = { - { - "privs", - title = "Required Privileges", - }, - { - "video", - title = "Video", - format = video_frame, - }, - { - "youtube", - title = "Video", - format = function(value) - return video_frame("https://www.youtube.com/embed/" .. value) - end, - }, - -- settings - { - "settype", - title = "Setting Type", - hidden = true, - }, - { - "default", - title = "Default Value", - hidden = true, - }, - -- craft items/tools - { - "img", - title = "Image", - format = function(value) - return "" - end, - }, -} + +local tags +tags, custom_tags = dofile(".ldoc/tags.ld") -- START: handling items to prevent re-parsing @@ -172,6 +139,27 @@ local function chatcmd_handler(item) item.description = item.description .. "\n\n### Parameters:" end + if item.tags.chatparam then + local pstring = "### Parameters:\n" + for _, cp in ipairs(item.tags.chatparam) do + local idx, key, desc = cp:find(" ") + if idx then + key = cp:sub(1, idx-1) + value = cp:sub(idx) + else + key = cp + end + + pstring = pstring .. '\n- ' + .. key .. '' + if value then + pstring = pstring .. value + end + + item.description = item.description .. "\n\n" .. pstring + end + end + return item end @@ -182,10 +170,27 @@ function custom_display_name_handler(item, default_handler) elseif item.type == "chatcmd" then item = chatcmd_handler(item) end + + local parse_tags = {"priv", "note"} + for _, pt in ipairs(parse_tags) do + local tvalues = item.tags[pt] + if tvalues then + local tstring = "" + + local title = tags.get_title(pt) + if title then + tstring = tstring .. "\n\n### " .. title .. ":\n" + end + + for _, tv in ipairs(tvalues) do + tstring = tstring .. "\n- " .. tags.format(pt, tv) + end + + item.description = item.description .. tstring + end + end end - if item then - register(item) - return default_handler(item) - end + register(item) + return default_handler(item) end diff --git a/.ldoc/tags.ld b/.ldoc/tags.ld new file mode 100644 index 0000000..91ab6dd --- /dev/null +++ b/.ldoc/tags.ld @@ -0,0 +1,81 @@ + +local tags = {} +local tag_list = {} +local custom_tags = {} + +local register_tag = function(name, tag) + local new_tag = {name, title=tag.title, hidden=tag.hidden, format=tag.format} + table.insert(custom_tags, new_tag) + tag_list[name] = {title=tag.title, format=tag.format} +end + +tags.get_title = function(tname) + local t = tag_list[tname] + if t then + return t.title + end +end + +tags.format = function(tname, value) + local t = tag_list[tname] + if t then + if type(t.format) == "function" then + value = t.format(value) + end + end + + return value +end + + +local new_tags = { + ["priv"] = { + title = "Required Privileges", + hidden = true, + }, + ["note"] = { + title = "Notes", + hidden = true, + format = function(value) + return "*" .. value .. "*" + end, + }, + ["video"] = { + title = "Video", + format = video_frame, + }, + ["youtube"] = { + title = "Video", + format = function(value) + return video_frame("https://www.youtube.com/embed/" .. value) + end, + }, + -- settings + ["settype"] = { + title = "Setting Type", + hidden = true, + }, + ["default"] = { + title = "Default Value", + hidden = true, + }, + -- craft items/tools + ["img"] = { + title = "Image", + format = function(value) + return "" + end, + }, + -- chat commands + ["chatparam"] = { + title = "Parameters", + hidden = true, + }, +} + +for k, v in pairs(new_tags) do + register_tag(k, v) +end + + +return tags, custom_tags From e5e0d7f620fbadbd971026b2362307c9d985e9cb Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 18:44:54 -0700 Subject: [PATCH 134/160] LDoc: format chat command parameters the same as functions --- .ldoc/config.ld | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/.ldoc/config.ld b/.ldoc/config.ld index 313ff11..b454873 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -136,28 +136,32 @@ local function chatcmd_handler(item) end if #item.params > 0 then - item.description = item.description .. "\n\n### Parameters:" - end - - if item.tags.chatparam then local pstring = "### Parameters:\n" - for _, cp in ipairs(item.tags.chatparam) do - local idx, key, desc = cp:find(" ") - if idx then - key = cp:sub(1, idx-1) - value = cp:sub(idx) - else - key = cp - end + for k, param in pairs(item.params) do + if type(k) == "number" then + local value = item.params.map[param] - pstring = pstring .. '\n- ' - .. key .. '' - if value then - pstring = pstring .. value - end + pstring = pstring .. '\n- ' + .. param .. '' - item.description = item.description .. "\n\n" .. pstring + local modifiers = item.modifiers.param[param] + if modifiers and modifiers.type then + pstring = pstring .. ' `' .. modifiers.type .. '`' + end + + if value then + pstring = pstring .. value + end + + if modifiers and modifiers.opt then + pstring = pstring .. " *(optional)*" + end + end end + + item.description = item.description .. "\n\n" .. pstring + -- clear parameter list + item.params = {} end return item From da24ace035271b3457394b0cece16ae44cf2e3c5 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 18:47:34 -0700 Subject: [PATCH 135/160] Update docstrings --- chat.lua | 37 +++++++++---------------------------- tools.lua | 2 +- 2 files changed, 10 insertions(+), 29 deletions(-) diff --git a/chat.lua b/chat.lua index 83a6e34..4a22126 100644 --- a/chat.lua +++ b/chat.lua @@ -211,13 +211,10 @@ end --- Removes nearby entities. -- ---

    Required Privileges:

    --- --- - server --- -- @chatcmd remove_entities -- @param entity Entity technical name. -- @tparam[opt] int radius Search radius (default: 100). +-- @priv server -- @usage -- # remove all mobs:horse entities within a radius of 10 nodes -- /remove_entities mobs:horse 10 @@ -278,13 +275,10 @@ core.register_chatcommand(cmd_repo.entity.cmd, { --- Removes nearby nodes. -- ---

    Required Privileges:

    --- --- - server --- -- @chatcmd remove_nodes -- @param node Node technical name. -- @tparam[opt] int radius Search radius (default: 5). +-- @priv server -- @usage -- # remove all default:dirt nodes within a radius of 10 -- /remove_nodes default:dirt 10 @@ -337,13 +331,10 @@ core.register_chatcommand(cmd_repo.rem_node.cmd, { --- Replaces an item. -- ---

    Required Privileges:

    --- --- - server --- -- @chatcmd replace_items -- @param old_item Technical name of item to replace. -- @param new_item Technical name of item to be used in place. +-- @priv server -- @usage -- # replace default:sword_wood with default:sword_mese -- /replace_items default:sword_wood default:sword_mese @@ -372,14 +363,11 @@ core.register_chatcommand(cmd_repo.item.cmd, { --- Replaces nearby nodes. -- ---

    Required Privileges:

    --- --- - server --- -- @chatcmd replace_nodes -- @param old_node Technical name of node to replace. -- @param new_node Technical name of node to be used in place. -- @tparam[opt] int radius Search radius (default: 5). +-- @priv server -- @usage -- # replace all default:dirt nodes with default:cobble within a radius of 10 -- /replace_nodes default:dirt default:cobble 10 @@ -436,12 +424,9 @@ core.register_chatcommand(cmd_repo.rep_node.cmd, { --- Checks for nearby unknown nodes. -- ---

    Required Privileges:

    --- --- - server --- -- @chatcmd find_unknown_nodes -- @tparam[opt] int radius Search radius (default: 100). +-- @priv server -- @usage -- # print names of all unknown nodes within radius of 10 -- /find_unknown_nodes 10 @@ -499,12 +484,9 @@ core.register_chatcommand(cmd_repo.find_node.cmd, { --- Finds names of nearby nodes. -- ---

    Required Privileges:

    --- --- - server --- -- @chatcmd find_nearby_nodes -- @tparam[opt] int radius Search radius (default: 5). +-- @priv server -- @usage -- # print names of all node types found within radius of 10 -- /find_nearby_nodes 10 @@ -572,12 +554,11 @@ core.register_chatcommand(cmd_repo.near_node.cmd, { if cleaner.unsafe then --- Registers an ore to be removed. -- - --

    Required Privileges:

    - -- - -- - server - -- -- @chatcmd remove_ores -- @param ore Ore technical name. + -- @priv server + -- @note This action is reverted after server restart. To make changes permanent, + -- use the [cleaner.json](config.html#cleaner.json) config. -- @usage -- # remove all registered ores that add default:stone_with_iron to world -- /remove_ores default:stone_with_iron diff --git a/tools.lua b/tools.lua index fb8e20d..cc1c405 100644 --- a/tools.lua +++ b/tools.lua @@ -13,7 +13,7 @@ local aux = dofile(cleaner.modpath .. "/misc_functions.lua") -- -- @tool cleaner:pencil -- @img cleaner_pencil.png --- @privs server +-- @priv server -- @usage -- place (right-click): -- - when not pointing at a node, changes modes From 93767a2723362b44c3265ff2e8714bb70e343428 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 21:12:43 -0700 Subject: [PATCH 136/160] LDoc: fix message in gendoc.sh script --- .ldoc/gendoc.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.ldoc/gendoc.sh b/.ldoc/gendoc.sh index 4233611..93a1389 100755 --- a/.ldoc/gendoc.sh +++ b/.ldoc/gendoc.sh @@ -34,8 +34,9 @@ echo -e "\ncopying textures ..." mkdir -p "${d_data}" texture_count=0 for png in $(find "${d_root}/textures" -maxdepth 1 -type f -name "*.png"); do - if test -f "${d_data}/$(basename ${png})"; then - echo "WARNING: not overwriting existing file: ${png}" + t_png="${d_data}/$(basename ${png})" + if test -f "${t_png}"; then + echo "WARNING: not overwriting existing file: ${t_png}" else cp "${png}" "${d_data}" texture_count=$((texture_count + 1)) From f9acae8bc70f8a70d0525916eecdd7b100c82bd4 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 21:13:29 -0700 Subject: [PATCH 137/160] LDoc: use cleaner_pencil texture for icon --- .ldoc/config.ld | 1 + 1 file changed, 1 insertion(+) diff --git a/.ldoc/config.ld b/.ldoc/config.ld index b454873..fc3c732 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -18,6 +18,7 @@ format = "markdown" not_luadoc=true boilerplate = false style = true +icon = "textures/cleaner_pencil.png" file = { "settings.lua", From 50c7a8cd983593a7009cc95e5e24f707246b2236 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 22:52:52 -0700 Subject: [PATCH 138/160] LDoc: add favicon --- .ldoc/config.ld | 1 + 1 file changed, 1 insertion(+) diff --git a/.ldoc/config.ld b/.ldoc/config.ld index fc3c732..6f0c019 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -19,6 +19,7 @@ not_luadoc=true boilerplate = false style = true icon = "textures/cleaner_pencil.png" +favicon = "https://icons.iconarchive.com/icons/papirus-team/papirus-apps/16/minetest-icon.png" file = { "settings.lua", From 3ac5558a9e76f65cc75eee5b20e435e61127b1d2 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 31 Jul 2021 23:31:41 -0700 Subject: [PATCH 139/160] LDoc: change favicon to link to Minetest official logo --- .ldoc/config.ld | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ldoc/config.ld b/.ldoc/config.ld index 6f0c019..72d7f90 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -19,7 +19,7 @@ not_luadoc=true boilerplate = false style = true icon = "textures/cleaner_pencil.png" -favicon = "https://icons.iconarchive.com/icons/papirus-team/papirus-apps/16/minetest-icon.png" +favicon = "https://www.minetest.net/media/icon.svg" file = { "settings.lua", From 8645c7aa498f7133a8e235fbfde133b96bb0ba6b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sun, 1 Aug 2021 17:09:08 -0700 Subject: [PATCH 140/160] Remove trailing comma from .cdb.json... JSON format does not support trailing commas. --- .cdb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cdb.json b/.cdb.json index b54c648..ed1da6a 100644 --- a/.cdb.json +++ b/.cdb.json @@ -7,5 +7,5 @@ "tags": ["world_tools"], "repo": "https://github.com/AntumMT/mod-cleaner", "issue_tracker": "https://github.com/AntumMT/mod-cleaner/issues", - "forums": "18381", + "forums": "18381" } From dd61f9f9cf6f3e4d1ea0bfcf816c8bd173156a2b Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sun, 1 Aug 2021 23:08:32 -0700 Subject: [PATCH 141/160] "forums" must be an integer in .cdb.json --- .cdb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cdb.json b/.cdb.json index ed1da6a..1643f48 100644 --- a/.cdb.json +++ b/.cdb.json @@ -7,5 +7,5 @@ "tags": ["world_tools"], "repo": "https://github.com/AntumMT/mod-cleaner", "issue_tracker": "https://github.com/AntumMT/mod-cleaner/issues", - "forums": "18381" + "forums": 18381 } From 319e671fc26657936578807e89521983fc609172 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sun, 1 Aug 2021 23:13:37 -0700 Subject: [PATCH 142/160] Fix media_license in .cdb.json --- .cdb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cdb.json b/.cdb.json index 1643f48..41b45b9 100644 --- a/.cdb.json +++ b/.cdb.json @@ -3,7 +3,7 @@ "title": "Cleaner", "short_description": "Remove/Replace unknown entities, nodes, & items.", "license": "MIT", - "media_license": "CC0", + "media_license": "CC0-1.0", "tags": ["world_tools"], "repo": "https://github.com/AntumMT/mod-cleaner", "issue_tracker": "https://github.com/AntumMT/mod-cleaner/issues", From 0ab5d515842c1c5689719114c18abd64f07eb641 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 2 Aug 2021 02:09:26 -0700 Subject: [PATCH 143/160] LDoc: remove custom css --- .ldoc/config.ld | 1 - .ldoc/ldoc.css | 305 ------------------------------------------------ 2 files changed, 306 deletions(-) delete mode 100644 .ldoc/ldoc.css diff --git a/.ldoc/config.ld b/.ldoc/config.ld index 72d7f90..cf24500 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -17,7 +17,6 @@ title = "Cleaner mod for Minetest" format = "markdown" not_luadoc=true boilerplate = false -style = true icon = "textures/cleaner_pencil.png" favicon = "https://www.minetest.net/media/icon.svg" diff --git a/.ldoc/ldoc.css b/.ldoc/ldoc.css deleted file mode 100644 index dc1d328..0000000 --- a/.ldoc/ldoc.css +++ /dev/null @@ -1,305 +0,0 @@ -/* BEGIN RESET - -Copyright (c) 2010, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.com/yui/license.html -version: 2.8.2r1 -*/ -html { - color: #000; - background: #FFF; -} -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td { - margin: 0; - padding: 0; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -fieldset,img { - border: 0; -} -address,caption,cite,code,dfn,em,strong,th,var,optgroup { - font-style: inherit; - font-weight: inherit; -} -del,ins { - text-decoration: none; -} -li { - margin-left: 20px; -} -caption,th { - text-align: left; -} -h1,h2,h3,h4,h5,h6 { - font-size: 100%; - font-weight: bold; -} -q:before,q:after { - content: ''; -} -abbr,acronym { - border: 0; - font-variant: normal; -} -sup { - vertical-align: baseline; -} -sub { - vertical-align: baseline; -} -legend { - color: #000; -} -input,button,textarea,select,optgroup,option { - font-family: inherit; - font-size: inherit; - font-style: inherit; - font-weight: inherit; -} -input,button,textarea,select {*font-size:100%; -} -/* END RESET */ - -body { - margin-left: 1em; - margin-right: 1em; - font-family: arial, helvetica, geneva, sans-serif; - background-color: #ffffff; margin: 0px; -} - -code, tt { font-family: monospace; font-size: 1.1em; } -span.parameter { font-family:monospace; } -span.parameter:after { content:":"; } -span.types:before { content:"("; } -span.types:after { content:")"; } -.type { font-weight: bold; font-style:italic } - -body, p, td, th { font-size: .95em; line-height: 1.2em;} - -p, ul { margin: 10px 0 0 0px;} - -strong { font-weight: bold;} - -em { font-style: italic;} - -h1 { - font-size: 1.5em; - margin: 20px 0 20px 0; -} -h2, h3, h4 { margin: 15px 0 10px 0; } -h2 { font-size: 1.25em; } -h3 { font-size: 1.15em; } -h4 { font-size: 1.06em; } - -a:link { font-weight: bold; color: #004080; text-decoration: none; } -a:visited { font-weight: bold; color: #006699; text-decoration: none; } -a:link:hover { text-decoration: underline; } - -hr { - color:#cccccc; - background: #00007f; - height: 1px; -} - -blockquote { margin-left: 3em; } - -ul { list-style-type: disc; } - -p.name { - font-family: "Andale Mono", monospace; - padding-top: 1em; -} - -pre { - background-color: rgb(245, 245, 245); - border: 1px solid #C0C0C0; /* silver */ - padding: 10px; - margin: 10px 0 10px 0; - overflow: auto; - font-family: "Andale Mono", monospace; -} - -pre.example { - font-size: .85em; -} - -table.index { border: 1px #00007f; } -table.index td { text-align: left; vertical-align: top; } - -#container { - margin-left: 1em; - margin-right: 1em; - background-color: #f0f0f0; -} - -#product { - text-align: center; - border-bottom: 1px solid #cccccc; - background-color: #ffffff; -} - -#product big { - font-size: 2em; -} - -#main { - background-color: #f0f0f0; - border-left: 2px solid #cccccc; -} - -#navigation { - float: left; - width: 14em; - vertical-align: top; - background-color: #f0f0f0; - overflow: visible; - position: fixed; -} - -#navigation h2 { - background-color:#e7e7e7; - font-size:1.1em; - color:#000000; - text-align: left; - padding:0.2em; - border-top:1px solid #dddddd; - border-bottom:1px solid #dddddd; -} - -#navigation ul -{ - font-size:1em; - list-style-type: none; - margin: 1px 1px 10px 1px; -} - -#navigation li { - text-indent: -1em; - display: block; - margin: 3px 0px 0px 22px; -} - -#navigation li li a { - margin: 0px 3px 0px -1em; -} - -#content { - margin-left: 14em; - padding: 1em; - width: 700px; - border-left: 2px solid #cccccc; - border-right: 2px solid #cccccc; - background-color: #ffffff; - min-height: 425px; -} - -#about { - clear: both; - padding: 5px; - border-top: 2px solid #cccccc; - background-color: #ffffff; -} - -@media print { - body { - font: 12pt "Times New Roman", "TimeNR", Times, serif; - } - a { font-weight: bold; color: #004080; text-decoration: underline; } - - #main { - background-color: #ffffff; - border-left: 0px; - } - - #container { - margin-left: 2%; - margin-right: 2%; - background-color: #ffffff; - } - - #content { - padding: 1em; - background-color: #ffffff; - } - - #navigation { - display: none; - } - pre.example { - font-family: "Andale Mono", monospace; - font-size: 10pt; - page-break-inside: avoid; - } -} - -table.module_list { - border-width: 1px; - border-style: solid; - border-color: #cccccc; - border-collapse: collapse; -} -table.module_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #cccccc; -} -table.module_list td.name { background-color: #f0f0f0; min-width: 200px; } -table.module_list td.summary { width: 100%; } - - -table.function_list { - border-width: 1px; - border-style: solid; - border-color: #cccccc; - border-collapse: collapse; -} -table.function_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #cccccc; -} -table.function_list td.name { background-color: #f0f0f0; min-width: 200px; } -table.function_list td.summary { width: 100%; } - -ul.nowrap { - overflow:auto; - white-space:nowrap; -} - -dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;} -dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;} -dl.table h3, dl.function h3 {font-size: .95em;} - -/* stop sublists from having initial vertical space */ -ul ul { margin-top: 0px; } -ol ul { margin-top: 0px; } -ol ol { margin-top: 0px; } -ul ol { margin-top: 0px; } - -/* make the target distinct; helps when we're navigating to a function */ -a:target + * { - background-color: #FF9; -} - - -/* styles for prettification of source */ -pre .comment { color: #558817; } -pre .constant { color: #a8660d; } -pre .escape { color: #844631; } -pre .keyword { color: #aa5050; font-weight: bold; } -pre .library { color: #0e7c6b; } -pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; } -pre .string { color: #8080ff; } -pre .number { color: #f8660d; } -pre .operator { color: #2239a8; font-weight: bold; } -pre .preprocessor, pre .prepro { color: #a33243; } -pre .global { color: #800080; } -pre .user-keyword { color: #800080; } -pre .prompt { color: #558817; } -pre .url { color: #272fc2; text-decoration: underline; } - From 5efafec098984822f0e9fed48c342619e1a088d0 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 2 Aug 2021 02:09:56 -0700 Subject: [PATCH 144/160] Fix typo in changelog & add info --- changelog.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog.txt b/changelog.txt index 27ba6f7..debb175 100644 --- a/changelog.txt +++ b/changelog.txt @@ -14,9 +14,9 @@ v1.2 - replace_items - replace_nodes - find_unknown_nodes - - find_neaby_nodes + - find_nearby_nodes - remove_ores (unsafe) - - ctool (manages pencil tool settings) + - ctool (manages wielded cleaner tool settings) v1.1 ---- From 51a812fa86bf6a30998d69b4a4c69c8dc3c114e8 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 2 Aug 2021 02:10:23 -0700 Subject: [PATCH 145/160] LDoc: add "multimodule" param to gendoc.sh script --- .ldoc/gendoc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ldoc/gendoc.sh b/.ldoc/gendoc.sh index 93a1389..6339dea 100755 --- a/.ldoc/gendoc.sh +++ b/.ldoc/gendoc.sh @@ -21,7 +21,7 @@ fi rm -rf "${d_export}" # generate new doc files -"${cmd_ldoc}" --UNSAFE_NO_SANDBOX -c "${f_config}" -d "${d_export}" "${d_root}"; retval=$? +"${cmd_ldoc}" --UNSAFE_NO_SANDBOX --multimodule -c "${f_config}" -d "${d_export}" "${d_root}"; retval=$? # check exit status if test ${retval} -ne 0; then From 0098ef5da4b63ee0acd4c1279d7a878bef9cf8cd Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sun, 8 Aug 2021 20:49:39 -0700 Subject: [PATCH 146/160] Add to TODO list --- TODO.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TODO.txt b/TODO.txt index d49535a..b800544 100644 --- a/TODO.txt +++ b/TODO.txt @@ -9,3 +9,6 @@ TODO: - add "xrotate" & "zrorate" modes for pencil - don't require "server" priv for "find_unknown_nodes" & "find_neaby_nodes" commands - add chat command to find nodes with specified attributes +- may be better to update player inventories on login than add aliases for items +- use aliases for unknown nodes instead of LBM +- only use LBM when a node to replace is still registered From 45e59dbf8bcb2ae87b3b6fe5c8787635905d3b51 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 14 Aug 2021 21:47:17 -0700 Subject: [PATCH 147/160] Use sounds mod for playing sounds --- .gitattributes | 1 - README.md | 3 --- changelog.txt | 5 +++++ misc_functions.lua | 13 ++++++++++--- mod.conf | 1 + sounds/cleaner_pencil_erase.ogg | Bin 17295 -> 0 bytes sounds/cleaner_pencil_write.ogg | Bin 21553 -> 0 bytes sounds_src/cleaner_pencil_erase.flac | Bin 83580 -> 0 bytes sounds_src/cleaner_pencil_write.flac | Bin 158861 -> 0 bytes 9 files changed, 16 insertions(+), 7 deletions(-) delete mode 100644 sounds/cleaner_pencil_erase.ogg delete mode 100644 sounds/cleaner_pencil_write.ogg delete mode 100644 sounds_src/cleaner_pencil_erase.flac delete mode 100644 sounds_src/cleaner_pencil_write.flac diff --git a/.gitattributes b/.gitattributes index 8e94d42..998f601 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1 @@ .* export-ignore -sounds_src/ export-ignore diff --git a/README.md b/README.md index 5a76f26..9900b9b 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,6 @@ A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & - Code: [MIT](LICENSE.txt) - Textures: CC0 -- Sounds: - - cleaner_pencil_write: [CC0](https://freesound.org/people/NachtmahrTV/sounds/571800/) - - cleaner_pencil_erase: [CC0](https://freesound.org/people/damsur/sounds/443241/) ### Requirements: diff --git a/changelog.txt b/changelog.txt index debb175..ae7567f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ +next +---- +- use sounds mod for sounds + + v1.2 ---- - added API diff --git a/misc_functions.lua b/misc_functions.lua index 899b981..67460b1 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -151,6 +151,7 @@ local tool = { end, } +local use_sounds = core.global_exists("sounds") local sound_handle tool.on_use = function(stack, user, pointed_thing) @@ -175,17 +176,23 @@ tool.on_use = function(stack, user, pointed_thing) if mode == "erase" then core.remove_node(npos) - sound_handle = core.sound_play("cleaner_pencil_erase", {object=user}) + if use_sounds then + local sound_handle = sounds.pencil_erase({object=user}) + end return stack elseif core.registered_nodes[new_node_name] then if mode == "swap" then core.swap_node(npos, {name=new_node_name}) - sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) + if use_sounds then + local sound_handle = sounds.pencil_write({object=user}) + end elseif mode == "write" then local node_above = core.get_node_or_nil(pointed_thing.above) if not node_above or node_above.name == "air" then core.set_node(pointed_thing.above, {name=new_node_name}) - sound_handle = core.sound_play("cleaner_pencil_write", {object=user}) + if use_sounds then + local sound_handle = sounds.pencil_write({object=user}) + end else core.chat_send_player(pname, S("Can't place node there.")) end diff --git a/mod.conf b/mod.conf index 150080d..6f24377 100644 --- a/mod.conf +++ b/mod.conf @@ -4,3 +4,4 @@ version = 1.2 license = MIT author = PilzAdam, Jordan Irwin (AntumDeluge) min_minetest_version = 5.0 +optional_depends = sounds diff --git a/sounds/cleaner_pencil_erase.ogg b/sounds/cleaner_pencil_erase.ogg deleted file mode 100644 index 1fe52457b5a858c64433fac4a140aa56d76f6a60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17295 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 z 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 XC&~pGH4_sny+;SDp~$8`mtOo|$YVf* diff --git a/sounds/cleaner_pencil_write.ogg b/sounds/cleaner_pencil_write.ogg deleted file mode 100644 index 3afa8aabf4f90889f482d3db9e415c9158af83b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21553 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 EOv8zGTL1t6 From e3959a815fa4804a9dee9a0dd671debba99b6565 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 14 Aug 2021 21:55:00 -0700 Subject: [PATCH 148/160] Add helper script for setting version --- .gitattributes | 3 ++- set_version.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100755 set_version.py diff --git a/.gitattributes b/.gitattributes index 998f601..62c4b62 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ -.* export-ignore +.* export-ignore +*.py export-ignore diff --git a/set_version.py b/set_version.py new file mode 100755 index 0000000..8c40217 --- /dev/null +++ b/set_version.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python + +import sys, os, codecs + + +f_script = os.path.realpath(__file__) +d_root = os.path.dirname(f_script) + +os.chdir(d_root) + +args = sys.argv[1:] +if len(args) < 1: + print("ERROR: must supply version as parameter") + sys.exit(1) + +new_version = args[0] + +to_update = { + "mod.conf": "version =", + "changelog.txt": "next", + os.path.normpath(".ldoc/config.ld"): "local version =", +} + +for f in to_update: + f_path = os.path.join(d_root, f) + if not os.path.isfile(f_path): + print("WARNING: {} not found, skipping ...".format(f)) + continue + + print("\nsetting version to {} in {}".format(new_version, f_path)) + + buffer = codecs.open(f_path, "r", "utf-8") + if not buffer: + print("WARNING: could not open {} for reading, skipping ...".format(f)) + continue + + read_in = buffer.read() + buffer.close() + + read_in = read_in.replace("\r\n", "\n").replace("\r", "\n") + replacement = to_update[f] + new_lines = [] + + version_set = False + for li in read_in.split("\n"): + if not version_set: + if "=" in replacement and li.startswith(replacement): + key = li.split(" = ")[0] + li = "{} = {}".format(key, new_version) + version_set = True + elif li == replacement: + li = "v{}".format(new_version) + version_set = True + + new_lines.append(li) + + write_out = "\n".join(new_lines) + if write_out == read_in: + print("no changes for {}, skipping ...".format(f)) + continue + + buffer = codecs.open(f_path, "w", "utf-8") + if not buffer: + print("WARNING: could not open {} for writing, skipping ...".format(f)) + continue + + buffer.write("\n".join(new_lines)) + buffer.close() + + print("done") From f0004e3c7bdee9208db5ae418ae1279dd0997cd5 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 14 Aug 2021 21:59:59 -0700 Subject: [PATCH 149/160] Increment version to 1.2.1 --- changelog.txt | 2 +- mod.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog.txt b/changelog.txt index ae7567f..ebbb7b4 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,5 @@ -next +v1.2.1 ---- - use sounds mod for sounds diff --git a/mod.conf b/mod.conf index 6f24377..858fb6d 100644 --- a/mod.conf +++ b/mod.conf @@ -1,6 +1,6 @@ name = cleaner description = A mod that can be used to remove/replace unknown entities, nodes, & items. -version = 1.2 +version = 1.2.1 license = MIT author = PilzAdam, Jordan Irwin (AntumDeluge) min_minetest_version = 5.0 From 6b3220048bef393f47d40e99c06175243e90b5e7 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 16 Aug 2021 02:18:29 -0700 Subject: [PATCH 150/160] LDoc: add script to build versioned docs --- .ldoc/build_versioned_docs.sh | 98 +++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100755 .ldoc/build_versioned_docs.sh diff --git a/.ldoc/build_versioned_docs.sh b/.ldoc/build_versioned_docs.sh new file mode 100755 index 0000000..728103f --- /dev/null +++ b/.ldoc/build_versioned_docs.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +# place this file in mod ".ldoc" directory + + +d_config="$(dirname $(readlink -f $0))" + +cd "${d_config}/.." + +d_root="$(pwd)" +d_export="${d_export:-${d_root}/docs/reference}" + +cmd_ldoc="${d_root}/../ldoc/ldoc.lua" +if test -f "${cmd_ldoc}"; then + if test ! -x "${cmd_ldoc}"; then + chmod +x "${cmd_ldoc}" + fi +else + cmd_ldoc="ldoc" +fi + +# clean old files +rm -rf "${d_export}" + +# store current branch +main_branch="$(git branch --show-current)" + +html_out="\n\n\n\n\n

    \n\n" + +cd "${d_root}" +git checkout ${main_branch} + +echo -e "${html_out}" > "${d_export}/index.html" + +echo -e "\nDone!" From 06e4408b91cb585ca20dec4708d3b8319afbb0fb Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 16 Aug 2021 02:23:30 -0700 Subject: [PATCH 151/160] Change workflow to build versioned docs on gh-pages --- .github/workflows/reference.yml | 20 +++++++++----------- README.md | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/reference.yml b/.github/workflows/reference.yml index cd61ab9..ac55ce8 100644 --- a/.github/workflows/reference.yml +++ b/.github/workflows/reference.yml @@ -1,31 +1,29 @@ -name: Build Reference +name: Build Reference on: push: - branches: - - master + tags: + - 'v[0-9]*' jobs: build: - name: Build + name: Build Reference runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v2 - name: Setup Lua uses: leafo/gh-actions-lua@v8 with: luaVersion: 5.4 - name: Setup Lua Rocks uses: leafo/gh-actions-luarocks@v4 - - name: Setup LDoc dependencies + - name: Setup dependencies run: luarocks install --only-deps https://raw.githubusercontent.com/lunarmodules/LDoc/master/ldoc-scm-3.rockspec - name: Setup LDoc - run: git clone --single-branch --branch=custom https://github.com/AntumDeluge/ldoc.git .ldoc/ldoc && chmod +x .ldoc/ldoc/ldoc.lua - - name: Generate docs - run: chmod +x .ldoc/gendoc.sh && ./.ldoc/gendoc.sh + run: git clone --single-branch --branch=custom https://github.com/AntumDeluge/LDoc.git ldoc + - name: Checkout & Build Docs + run: git clone https://github.com/AntumMT/mod-cleaner.git cleaner && cd cleaner && chmod +x .ldoc/build_versioned_docs.sh && ./.ldoc/build_versioned_docs.sh - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/ + publish_dir: cleaner/docs/ diff --git a/README.md b/README.md index 9900b9b..fc2276a 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ cleaner.unsafe - [![ContentDB](https://content.minetest.net/packages/AntumDeluge/cleaner/shields/title/)][ContentDB] - [Forum](https://forum.minetest.net/viewtopic.php?t=18381) - [Git repo](https://github.com/AntumMT/mod-cleaner) -- [Reference](https://antummt.github.io/mod-cleaner/reference) +- [Reference](https://antummt.github.io/mod-cleaner/reference/latest/) - [Changelog](changelog.txt) - [TODO](TODO.txt) From b261dda15c72270a16aab5e960b2704a177d1a0c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 16 Aug 2021 02:29:13 -0700 Subject: [PATCH 152/160] LDoc: update gendoc script to add version info --- .ldoc/gendoc.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.ldoc/gendoc.sh b/.ldoc/gendoc.sh index 6339dea..75ef2c3 100755 --- a/.ldoc/gendoc.sh +++ b/.ldoc/gendoc.sh @@ -10,7 +10,6 @@ cd "${d_ldoc}/.." d_root="$(pwd)" d_export="${d_export:-${d_root}/docs/reference}" -d_data="${d_export}/data" cmd_ldoc="${d_ldoc}/ldoc/ldoc.lua" if test ! -x "${cmd_ldoc}"; then @@ -20,8 +19,11 @@ fi # clean old files rm -rf "${d_export}" +vinfo="v$(grep "^version = " "${d_root}/mod.conf" | head -1 | sed -e 's/version = //')" +d_data="${d_export}/${vinfo}/data" + # generate new doc files -"${cmd_ldoc}" --UNSAFE_NO_SANDBOX --multimodule -c "${f_config}" -d "${d_export}" "${d_root}"; retval=$? +"${cmd_ldoc}" --UNSAFE_NO_SANDBOX --multimodule -c "${f_config}" -d "${d_export}/${vinfo}" "${d_root}"; retval=$? # check exit status if test ${retval} -ne 0; then @@ -29,6 +31,11 @@ if test ${retval} -ne 0; then exit ${retval} fi +# show version info +for html in $(find "${d_export}/${vinfo}" -type f -name "*.html"); do + sed -i -e "s|^

    [cC]leaner

    $|

    Cleaner (${vinfo})

    |" "${html}" +done + # copy textures to data directory echo -e "\ncopying textures ..." mkdir -p "${d_data}" From 9ca550703b68579bc66cca633bedeec088a7c4b3 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Mon, 10 Jan 2022 14:21:48 -0800 Subject: [PATCH 153/160] Fix undeclared global... https://github.com/AntumMT/mod-cleaner/issues/2 --- chat.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chat.lua b/chat.lua index 4a22126..4baf3ac 100644 --- a/chat.lua +++ b/chat.lua @@ -137,7 +137,7 @@ local function format_params(cmd) local param_count local all_params = {} if def.params then - for k, v in ipairs(def.params) do + for _, p in ipairs(def.params) do table.insert(all_params, p) end end From 93fa96d6c231d90e8de5dbdbdcf6bcfabfa31ac5 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 18 Jan 2025 02:18:34 -0800 Subject: [PATCH 154/160] Add FIXME note --- chat.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/chat.lua b/chat.lua index 4baf3ac..3f7cf43 100644 --- a/chat.lua +++ b/chat.lua @@ -135,6 +135,7 @@ local function format_params(cmd) local def = get_cmd_def(cmd) local param_count + -- FIXME: unused? local all_params = {} if def.params then for _, p in ipairs(def.params) do From 7d47f8ff5d9722b7a501ef2845f48f683a71c99a Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 18 Jan 2025 02:27:49 -0800 Subject: [PATCH 155/160] Update for name change to Luanti --- .ldoc/config.ld | 4 ++-- README.md | 16 ++++++++-------- changelog.txt | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.ldoc/config.ld b/.ldoc/config.ld index cf24500..10e46db 100644 --- a/.ldoc/config.ld +++ b/.ldoc/config.ld @@ -13,12 +13,12 @@ end project = "Cleaner" -title = "Cleaner mod for Minetest" +title = "Cleaner mod for Luanti" format = "markdown" not_luadoc=true boilerplate = false icon = "textures/cleaner_pencil.png" -favicon = "https://www.minetest.net/media/icon.svg" +favicon = "https://www.luanti.org/media/icon.svg" file = { "settings.lua", diff --git a/README.md b/README.md index fc2276a..70253ef 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -## Cleaner mod for Minetest +## Cleaner mod for Luanti ### Description: -A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & items. Originally forked from [PilzAdam's ***clean*** mod][f.pilzadam]. +A [Luanti (Minetest)][Luanti] mod that can be used to remove/replace unknown entities, nodes, & items. Originally forked from [PilzAdam's ***clean*** mod][f.pilzadam]. ![screenshot](screenshot.png) @@ -13,7 +13,7 @@ A [Minetest][] mod that can be used to remove/replace unknown entities, nodes, & ### Requirements: -- Minetest minimum version: 5.0 +- Luanti minimum version: 5.0 - Depends: none ### Usage: @@ -73,14 +73,14 @@ cleaner.unsafe ### Links: -- [![ContentDB](https://content.minetest.net/packages/AntumDeluge/cleaner/shields/title/)][ContentDB] -- [Forum](https://forum.minetest.net/viewtopic.php?t=18381) +- [![ContentDB](https://content.luanti.org/packages/AntumDeluge/cleaner/shields/title/)][ContentDB] +- [Forum](https://forum.luanti.org/viewtopic.php?t=18381) - [Git repo](https://github.com/AntumMT/mod-cleaner) - [Reference](https://antummt.github.io/mod-cleaner/reference/latest/) - [Changelog](changelog.txt) - [TODO](TODO.txt) -[Minetest]: http://www.minetest.net/ -[f.pilzadam]: https://forum.minetest.net/viewtopic.php?t=2777 -[ContentDB]: https://content.minetest.net/packages/AntumDeluge/cleaner/ +[Luanti]: https://luanti.org/ +[f.pilzadam]: https://forum.luanti.org/viewtopic.php?t=2777 +[ContentDB]: https://content.luanti.org/packages/AntumDeluge/cleaner/ diff --git a/changelog.txt b/changelog.txt index ebbb7b4..53114ba 100644 --- a/changelog.txt +++ b/changelog.txt @@ -26,7 +26,7 @@ v1.2 v1.1 ---- - uses "register_lbm" with "run_at_every_load" instead of "register_abm" to save resources - - suggested by bell07 ( https://forum.minetest.net/viewtopic.php?p=325519#p325519 ) + - suggested by bell07 ( https://forum.luanti.org/viewtopic.php?p=325519#p325519 ) v1.0 ---- From 0d42a1bdd8792f7a10a724a24948fb1057154b45 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 18 Jan 2025 02:28:17 -0800 Subject: [PATCH 156/160] Update ContentDB config for move to Codeberg --- .cdb.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.cdb.json b/.cdb.json index 41b45b9..ada3089 100644 --- a/.cdb.json +++ b/.cdb.json @@ -5,7 +5,7 @@ "license": "MIT", "media_license": "CC0-1.0", "tags": ["world_tools"], - "repo": "https://github.com/AntumMT/mod-cleaner", - "issue_tracker": "https://github.com/AntumMT/mod-cleaner/issues", + "repo": "https://codeberg.org/AntumLuanti/mod-cleaner", + "issue_tracker": "https://codeberg.org/AntumLuanti/mod-cleaner/issues", "forums": 18381 } From ecf52012201dc77a1d094b54ed0f53af0f2834dd Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 18 Jan 2025 02:31:16 -0800 Subject: [PATCH 157/160] Update version & changelog --- changelog.txt | 5 +++++ mod.conf | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 53114ba..14adc71 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ +2025-01-18 +---------- +- fix undeclared global + + v1.2.1 ---- - use sounds mod for sounds diff --git a/mod.conf b/mod.conf index 858fb6d..03b84d4 100644 --- a/mod.conf +++ b/mod.conf @@ -1,6 +1,6 @@ name = cleaner description = A mod that can be used to remove/replace unknown entities, nodes, & items. -version = 1.2.1 +version = 2025-01-18 license = MIT author = PilzAdam, Jordan Irwin (AntumDeluge) min_minetest_version = 5.0 From f35e2f1808f784698f80b3181912414820058fba Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 18 Jan 2025 02:47:43 -0800 Subject: [PATCH 158/160] Add nil check after reading world data file Closes: https://github.com/AntumMT/mod-cleaner/issues/3 --- changelog.txt | 1 + misc_functions.lua | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 14adc71..7b7aedd 100644 --- a/changelog.txt +++ b/changelog.txt @@ -7,6 +7,7 @@ v1.2.1 ---- - use sounds mod for sounds +- added nil check after reading world data file v1.2 diff --git a/misc_functions.lua b/misc_functions.lua index 67460b1..27c8654 100644 --- a/misc_functions.lua +++ b/misc_functions.lua @@ -28,8 +28,13 @@ local function get_world_data() local wdata = {} local buffer = io.open(world_file, "r") if buffer then - wdata = core.parse_json(buffer:read("*a")) + local err + wdata, err = core.parse_json(buffer:read("*a"), nil, true) buffer:close() + if wdata == nil then + cleaner.log("warning", "reading world data file failed: " .. world_file) + wdata = {} + end end local rem_types = {"entities", "nodes", "ores",} From 209008b88d5e14940ad939f1fe925d573f2b0ff0 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 18 Jan 2025 02:57:41 -0800 Subject: [PATCH 159/160] Update changelog --- changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.txt b/changelog.txt index 7b7aedd..0214081 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,7 @@ 2025-01-18 ---------- - fix undeclared global +- added nil check after reading world data file v1.2.1 From c72b710c567af659235d7e8d224066dd431a201e Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sat, 18 Jan 2025 03:03:20 -0800 Subject: [PATCH 160/160] Allow running reference workflow manually --- .github/workflows/reference.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/reference.yml b/.github/workflows/reference.yml index ac55ce8..29dec4c 100644 --- a/.github/workflows/reference.yml +++ b/.github/workflows/reference.yml @@ -4,6 +4,7 @@ on: push: tags: - 'v[0-9]*' + workflow_dispatch: jobs: build:

    V?DOl?deEo>wB;DrNlAqZbwff9|Z5{;n0$N&IIpy#t9IQ1ep|4P%TBC)C? zfo72YmHyv6B<4X9*CO!vuR`DzeUrh1$A6_+XOKkZkVG`$*5iL2`se;|h117A+vOcouY|758X z7ItcwwzKr}$hNbX5LG_=Pu72@;Fg)x6~2IT7GnLoO|AklHVA;=J$RD;D-Kx7yf63_<$%x04Ec?Lb!)vVVI5rnrZ~3qt1#1LlNK>0WQq+r*-v` z+Lms?aKn!X&;$TbWgA#k31lIqUzp~A)7 z;P~5+wbno?S-KjrO!VO%OY3|1@_n}63IKdVMgtTeQs~JGFq1!H1zFSoSuZ6>L*w8s zc{r{VCQVqX7COfNnEvvcobstMtlGq6Y4n47%sRI z2X}Jmtm3%fBM#rk6k5l@Ck4D_behz^-tXVNjh52LKfEvvt&@M`!f=&Xa{tPOX(=g| z{M8N9kW!>CS^TrX!IgryHTBQF2w#ec9**!|9#dg4+~ig%Wy1vwC0|O_f+;Go#i-z?~)1W@2viEG-o!40=x$ zW=6K5O!(9;&h&_fcK~kjBmu#}NdN#6G71l%{|jK(1NSW=vOER+&5^N6q}kzWFW8~eXT{JL8d{MWW_EBMh51%4iLEbe15Jr%go|Q4KEk& z1p>ao=bQ-u4{vVrwYB{l*S9|Jg2STXlHkS<9!LT2;JZ?K2^krX2Pqjj1(1^J1vSk} zS~|Fi{%3bh9SlH5{>NMTW1W$a|JgoE)cn;4{MkPL;a6GDmOIPJ!d}9NICyw@M5Tl! zVdSu9Fd|tQ7!Zd01Ve*i!mwdfFd|NFZZTOHB|O2zCocsffb(%+jB;`?T(~#_{Ep4T z!^h1dA_iw8!th~8FjTlQF8oOhBNvx}(ZDGr7zPY;Qe#aGJub~5&2sY!iLTx;;EYmc z`zIUil1 zFoBS?UD+pX@qPg|RzBB`)6!z-+-&bvhj`E7^uqZs`iVYM*2uj~U+v+k{AfO<LrTVEtX0F{mSRwJBsqWlSn^{N$Bo$Re(kzWXa>YhM@N{#T@ zcEXi?()|0Vq}X?>d$vC|V*4!Jh#tBNIsB8eaLSVU&ry4y);~(m^oj5W72@pph5ar1XWlgLG`5NrG1TA9CvaK56cHOx25j((~^Fvd}e zM$m4`?P!mNN@1Bk1NUT|mis=dtL%`?E?Fois+z5;rLZQTY|em#M}FDJjT*qxbM~1- zRd(ZITU2u&^u8$TQb!|RTM)G7jq?(%#~*9V-`MHH1T}bFj9mI0nIfN_-Sv|rtB%o! z%5;!-g$dt$1T~Mp<)x7&gx`LSPBz=W;AayNO3qfNPCwq4H(7|m5-H2$*U~G zuc8%1FS~81klw~2nqDY|pP~U=?fY1DY+3V6>ch!p$w@LAUNn%~y&xO@)-K+iyEmln zlm8ujuThHzWHUf@-C?Lu3dY&yZ^K_vaDx~Z@3J4#N8U1vUTqzz0cM0 zuJfm8Tu8tg1Q*R-?>#Eo=(}eXUYzTPF6Ko2IZbU$;I}FMM1+-Sjj%wi&w5dNsqCGg z`O)@80lEdlS06l&;;3T61QNJ2B*I5h_-E^a`auJ6cdrM+BNFSW)2aP%XW&mCU$W279;>Is?pwOA=30e2 z*`^0)k_vfz zz?-#%)4Pm8@NUtJ^OS&idA`-XVxQ5%iD~L2NyoZzwfchs@(4+M!X>eZs& z+&539Uz=49z<`3&YooMgrdckR>38fAp{Fy`ro8?+f*(p_+Qn*a%@U@JuMZiW5g@ml z!FxxB$mn_tsY?FC&k?b4QQzQ5)5(er1}<&+v-SBt_FQhYlP@quo+QvD3fJqn$Jc;? zF^+hT-^z`*ho*xRtf;nie|p{;WM}Ti3g+y+|73W(m(;dgyxH6i(iB0_8IGfgmi02E1gd@<(KjR(hi08CUhO1zb9|quDMC%N^`4=bFm0+MWq{0SW}5M==IleAd7hs6vEwVO zN&y;v02-dad;?AK9jk7qBQ{{$8@Nws$&_|4bEd7;>X$jm1e_(D4BTayX%v1D4AqS< z9{RdU8j0QOPa&>m*I9mQ%QC++Sb5$1xJkC+{A1BvG~n!bW~<(N#?VE)_u=Zm-e%@W ztWRh&0;%t2;%k7j+O+3pks(7TXacX=;W;KvDSQ2Rr-PwJtUQ}@OHLi12WzlW%QE|CULA{W&ismPWor{^EC6X%yR!Jxd%v zqsHuK`p3t6u6DP6Un!Efd_SnmNGbMpOF_H+u|LZe{Wm4I;IB3lOkm#fe1aT z7@Yg`DxNVpO=u#^t2P#reYu^z#TzXAMsq90N!&5ODdOeao9a^1Hy$ zwTb3wK2Dmz+1={<52|OgceTI$Z!>OFdPV7EASYQ4EUF(wAEbU|i$nXD>{Q9a*Lr$x zjqKEqeks;ef+1cr!mx)ozNdN#%Z1W8q$u{3JlWI8r3?`O!D0c7JU3)n3<`2WS@fxA z)%m|k8IIc)jL!&Hu0HeekZ{C$qJ9@5*^uTD$n`RU{6FdFhFuCqN zm)Yu5tj4jy5PCELt2@@+lj~U(ID6Ny{ZwmB zD}}$}x1;8^g7Xi4@q)C(HAgXQWg?alE}p%Sc5xBP>Ql@hJsj_vY{!K24IY@bhxk*D zGidsx&Q2`r+cdOvFYnWjcT3JLa{kiLyNPx`Bdd*bPiOC$2R%h-b~d(^zn(l22FALD zZ2HcRB-0WnZ!c+eQA+E=h$L_uBMVw-fD+}cT|hG1cA0sTzc9*%Nbg%FJUHhs{k5m+k?~(4KP5P-K^-r*4RS?0 zHP@@bbn%GIh7U03ql}S)d8HT7u?f$X)druau3mbiMiV}Oq0{$j61^-?gDR(HUL^1< z2Ci~Fsvs9M?ojBkUWB@gXwT`_J&V zu4di8={ON)Wh_&ETnzX0KYS;6b!({b+HRNGms&OQg1@D-$+aLlJ0YczmCJFOf_cLIZ;x10c|QT15}|_@_6j9a z(tz!BHyL1W+2l7sIfJCp==+qr#HFj2cD%(D%CNl3x|A_MuPIJ^a6u zM=pZS;}si(bAZWL-=twdx8i4Yb=`M22ht-LI6vD(UGnY4pd}YO_rwg}a+1AY4Sl*b zlPMJBmw9vVQ%qw`y`*lZrL6#Iwc9YhU;}F2o<#yV^^a5-Z2B(lK{X4o@dqpmj?DEjnUn198C{(z=!#YRabc0KVL zi2hu&X0U=HwFJcKKyh+#(L7SjukPiW?AeE`qHxeq!zLm>)rT{F0f`6?10q*2fd*dt zW=@u|)@J3>G;~pnZWlHqewuq2NR$0qmJfCCOZuE$N(NlGm!Ke$Y-z%_N(TRS+EF_8 zmwUC;Td8?AS^j+7BEO_#5t*O=Nwrv!p!wMUZXEzRHm}%-8qImUrK}pAwI@Sc7s1^` zS(wwO6T3M8m}N`?u%i%n>!OJXJvCA|>pZF2vOXW@9R(Bn49`()I1koTEK zqlZ8bm3?c;@RgNGwqE*Ntp!yqKXc{>bWtE*q;%W8?2gk=&SbW`yOh*SQ~uJ-l9l!t zGLC#fd71;8k>cB%Nw+i9WD7Qmwhf=++Nv<$ggVomHV57Lra7|~&Y}TM4SM7sz2=v_ z+gm?n#mU{i-J;{V?!#b|`@8Y5M=vQC-P0=`QZi`?a0=~M#?u3E-zLBL>V^4zTunkW z0-?Qx9y;h_=n|e6*tUKBB_@>}uz-ac8JE+wZPEi-O2&Wz+)+(%*Tx#J9j>ufZODtw zIsv>j@SS_Cc=7K0wIO({>@T^;J~^uU65wmlN#S z;c0iLE`C69_5DKM11^Uq2a>9fh&Fv92AMps&1x!YHY__X1BEWN=^71^+=T>A4JWyj z#u}@&_q*FB)2OB*T7DKr3#q52$SjOH)q0ENk-!m&P(@xt(9$zWtfZ_x|O2HUqcpMNy3v>a-%%u37amB#A3)ve_Xb zzqB&Z-l6MhxAihx4gxZ5`Eg0R1bX=?J1Uf10Feq%F=A!nO;OcoP{MQQTd9Y%-AnlcY2xRRtf290 zv=-$WH|$&N52@BBb?H?Hwa^xc&zs-uHTfrM{S4Q~t1i{A6Vc+RIp(ZQ58}oo} znyv!X2@ysMH@Pnl>b&vNaIIB!UZfv^d%+I`Brjkcr7je6A+gepEg6X5FVvX`WKlc1 zo!2Z2dEa=jyX7)P0baDCIN=)+aW-4Rergm?Bi}ai?@nF|*LC%HIjXz!zuSw4yj=R& zscL|SP%Wp0kJ>;%1SZeByY-EJk(-|%8-2#I{3C|02(%*if z+*W#%3N7KgI>@s95p_bV~>b5idXwx_PntYzpV9dEA}Q6 z$}8oaUc~0Q%;oRa(9(**PCr!B{U|VW|8Q)iz^u7)qAfcqeD7v5tsxqD8?X#5v}uge z>f#L_m3>FVItUPWj-8qa)NK@@}DZv?pP^9fDCWxeiYxa{fFysc)oyH!+J z?BSQSy2A{I7b>wFJ(Jx>B<2AR+cl58>M3O-dz!;StIs9a!*E3?#uSA0Tz3)JcF#8( z4NDW46$o*9Ly2FB*Eo*mT=#t1tW*Ne-_+lp99%v07#t00eZf$UO}eHeA(E5)I6qeA znAoH7TDf^R!E792cwyUf@kW<`fh93{;>u%~uc1bWFY54;jX9R;Gda_|eR0BxgSb@- zKi~VDm#Lp!pYt8iyvM$_g7`ms&zBL1KRO$zuV4-?Qhh!k>3NnP5V#&{OQm8*i$6s- z=u}PaV{&V*-&~^HJg2u*#>|oTcx9K?Y?r8ja%}h>QM4#tZhf?$`AaZzJp|w0OfE$9 z7ur)~b0>Xyzp-~;0`NsTtD%@lWt?>JvVp*ajbh>0wN&?L7$2K)7cX@f!>SQsgL~N~ z+VO`XxgE#GpdL|yL>m}YajKC->w;M9{fl9}M7!;r#9dC0^|*Vx?e><}T?^CCM5mh= z1&{M|){k@b-L0a3US#0}bDmEgd=Bhw*|P2>h2E$1obO@SR90sZ6u9+3#*tY~vB zv`^C9zX!Gs#T>j2T288!ufq5+w+$I+XL2-Kl28JPrlt?b*fl2Qj`<%hN_sD>vpT!3~YUXcqk zP9a@*^$e?VNR*3k_-NG*zjz$ZuF&Ic)tza&;Bi(DYW(2)d-BU8=Oc)g_jD`!wQKvr zjw*iJhNeTd+tSF!-t5pcZ$|*t3$cZ!%v!D4OW8b|6=`J4o!!)#MPuZ#u}|h@Zib0= z4b>x`ZQ6)Tt*50RO|rBY99@MFTgh?ndnAIe$GJBLt<~TgLaltkrSTEhdJ~j5HC|y= z954h_ylq@LT6kT2JYSGnF)@wm@@RNrs6+=58{Tt-7%w~&D@yZM~Xk_ zLTG02?5g*B?eRr)(&X>+{F8RryiM!%H5Jj0uh^y2G`pjgQ{R?=<5qOkkH)?W;HCnR zTwF!Z2lJ27y#S}B&mKsd&gbJhy)sni9Fv_Cl-G&7Wy<)KYx1!?EA~NVHQ{yKK97E^ zv_C#3n#s<(0q=!+^($0y7Dsofy06y+8c*RVxOo6(!#?FhJ z%RlR`EX{DL4B3w#5CC!BH=eaF*pIU#!|7rjJ~VhCiSm=;SR)p?mbYGH}5h4 z;w=gu!YhUT%15)=&H)lrgT8hAORgKEuZ|q`KRKL? ztrH-4puMBNk5HmnrETPLyA-(Fc3mB6G3fTQnJ8FW+wfj3QcpQx$!xM2DT0w#a$se8 z`?{-4L~A=A-#mRNy?LdJE*v}Hl9jD4D!qAk6zTrDUdyuqOGU{KZ8nJ>K;^yJE`>rg zxE;5XjK^{Qr2D&d(}ym)s;!~EZs^26-4sVdQ6!o`MPz;-rfA%QvjN-NCUxeg zZ|#+`gm&to4FNi%;Hu_qu-Xt`?st>KwHG%bruXW3JULm?O##Mvpz4Kp)gxKXxjM{K zF=qxz;Uc&2jf~oT(S%zc!91a8CrIKIW;P|)05J7}7?3gAUAPuqk>~wP_bEl~;?bH2 z!>M>jm0~t^hYBIjRto4wu3(-+jq-i-{?gRO?)rYqKjZH1&ev(7TkP`u;bT&B6A{)P z+YS1)ydgHg3r%;0W%d2^$U`Q+%{y<6ZJj*FYg-zN%;oHI6|-s4pwa2=xrPaFB2H%a z7sc-3Ln#j!|DL^p-B34~OC7~zPME;O(Yb)R08lI&(?vyg+9iR(?49SGgNI)|be27( z?VhHNSUUUq8gkHmXf$O!eV<(4?m8ix0V(gs^O`_r1mXI#<g_BJFOswS-qj9M6ZYD}J2R+fr=CpQ@zCOW zvG`Y{RQJYJ705vEQfW_nd4xTF{(>Iu>P%*MR&CB4vXbnXpGH<%?wTyeZR3qQ#j#Z+GkbCv|~FJuiNr=aD34`4hd#RVhf;0n<=w7PEvL;dDk?(9r2#s)RG41N$p(~`!etgQLiI4aVQhJe?aR#nh8TP_Ct;JfDv*!Uh{5Wp? z5jb?6?w|JkZ0Eb^qPxGT!@+686dVO@1Q@M`pzZ+(TXPcFKox4EPb1qLJP-U#|PiFlnek*X)8{{fL!f~BkoOT%%DZ*9M>_EN5KoH1!4e6 zS9?`)mUjw0N3n1L{v)ZBBsH?CdJNyogYcjAmOi+}RVO zoim9O1@M-C1Udf7GNO|qYaWDh12r#J`jQceyAU&U{0hh~7$dhEYC7pwEo(!|AdR{9 zV^O|&pG6e9wMdbnzhTyHKKy*;yBq8E3iKl5p)tUY$^KR}+CV1C)=^&SBi%DoHopQw zi!wKR_l3x>+sA>=zPMs(`$wj2x9cT6f4P?6<(4;l!al)iBAQNHD4hYx$Wp*Z4n_%+ zvruKhA1f4_YpZ7_`dDc8LOMq5u1~_NYNRQRCOMC6df45mD3;2x`c-f``+?OLYHP~m z{2dRz=oc164~cG7zcnPuzmA&UOjn{JdrG8Yp=K-y8GZERHx4yMFq3c2W+|tZG$7Ob zSM6IU35xmp(7Si7{aS!Pv-^F`$fO=_JwOfJeZ94H@|2)^E+pxE}3=eG28c&w{R zX_15l&Rvx+9gGc_jXvdH&M<&@T5E^i;L0Qh^>wauk|X0K7n2D(0EVcv9sJjvfTU)$~6!x8a?@(!>xd@Cymky znL38=WWBXVy7I9NPdw})`K9#WSm|lAf{VT!XWAk<1#f{i=u35QN{iv8)N>)22j4Lb z-$=8*RQ>zXjXoxNh@7JFEtaT_*_3G~Qv*MlG&DZDWxac>DM|pCCmQG)VaAxrVyvsn z7SlW@{^70oaodJo>)!V~9AT0s=xO}+BIVl=`}0CiZWoR(lTpP`;`_6;;BPK>!yUR3 zmle9+9+J%p9;LaqnNS>CJgD1xDa5Epl(A7-EZNjy z*BwOy8Ybtz>Jg!RwEXl2n~ZObjvnP(@&wuX<79?B#BS(y<7+lGUlP*&WBVhExUkLV zX=cv&d*0Y%8|{yiZ011K_c?_MCj7{_lBygBU~@2b^g+G z$-7b-JaqMZP_D)B$S2-`cCa5ODOCvV2bb4;B$`n!-A1BmQxv#;F=Bh^z{yv2KBK!b zYh^--Js*e5qBUe?6lDFJ$TUd{^UpDJ@gFqs3wW)os&dOOY&Y*w7of^;qi^T)oa}dH zM%#RrDRl!W4(76XJy1>N-M8@b=^ltA+avqS;XXILo7I_svy(~17ozh1vvuDgJL zI1y(wmBGi6yQ)t!*L9Vt6sgds6Cm>PB_cT*WvgrmN~PQ)}YK?Na{j%s0&XR8S7aCaET{}{xUaAg1fg=78brG5Co>{=wdv1;%~_b7YC16H3;EUFU1 zmDJn6rlK^@x8pOy`cL+xsJhSIfT2qrds)_X*$HpXfRITsL(k1)rIaylNknM9$w!9J zeF1K31>^Pj_i0mi1csq&^tT8$#pOu`1E#gL)!wZbsyUhs1&EusxDFeFM`71E| zv+klPE*UQS(pb`Ga#*8S*Mbx23}mja>3k%nVF4B@*Ycmxdig001SK(+vu`r{qZH{l z1lm~;-20MAQ75j%5yQSHN+B6qosg}%-od7&T^<9nt0q(FLq&h=23fqhGxz(pCjPU` z9=IcLem*GA=#sa;@em^P^X59mP)yvc(%9>5Q~|9WxnPJ~dK}TG50sfsj>e6)j*PpZ zn;7*qx|fWtq*q;{TdEc5t!_^Mo$Llk`b9JsgJsa>&o`h`jMJ94q#K_j(ZTc)?_$;+ zmNv4J9%>$%Cz_q+Q?YYs7Z(jEOH?7~f)vXZxJ5=f>40yGB`d`0xiQvub-)X9)y6;w zBiOZ-Ia=-76pOx12)68Hse^>PXafj4Z2ZmkxgfS?9>I+CIks%ld;8BL)CZU|MmEVH z%o|Jzv(i^IC)K{QI`5kre+eQ~n&uNy)552If9|l?AegzSZcrr!)$LSpQ6C3? z_s+Jf$}MO<{7)ukBfjBs-iFd_@Q>D+M~Em{@CDDM-r^*%#IAk+6fm8G zX4^ohn%z>!@;UFI+e@*t%>PI&*MWP-_&8a|ldJ|~jOCogRCmL_Q|{HZZnNjE_xf=; zLtL89Z~T{^C{?;nXvrxw`XJhQTC?E z4e=OTNnn#<%ZKD&%1CJ^>cOS;HgW1^J%>scbCO0be8Ry@)csJmx$*s)ujK}rSZ1WU zZ4w$G@)(Hj^t7q8YS1xyPfXhda(3muFWkP^Xnf9R_cy_kq{wA>uchnY?h9z-^{M0K z@5iRw45xFmsj?99TU6)Dt__&w&y-*1E?eRbmri^^M`onvW^FDhzV1kbQ1@b{+2S-e zN57sGUfYyO>%NOcE^YAHU;&r#^_k7bBDDTYcPbFd+QRt&Xa~o)bXcxE5D7C{O_k>j zqG@{EX+s7@y@8imZhsZ^diIFp9rApE=2z_7FNe<(qIPfH8NU`bao_ILmr15xFcLnG zL}V*efqGNV z0}Udmeq6rVSv3c3sakfW~eyr}S=>kwF}Ml32+^r>gVuH~t5U2}Q4UufiVVxM$gE%`Ejzn`gIe5|$@);<2@-a{}a!trs`PsnaT-2f6|)&x_CI{9>&YBkqP>_-Fz zFRIZ=Rw>+Imh+RGRmT>O`FmsAtoM_W96!&>pgZ*VC1UizE(s!*ndN!ByQo8|Z+)!d zYc*4si4ixV=B&#r;OFXMTXyZn4p8qhUunFRd0Xvw@$ZmFPg7R$t@s*(Om#Q8*x_zotT9{N>&y9N4?l zMbDOOhxOAT=|+`{sFQ-*lzMII%lnzEBKiD;9%Las6WzGFK66Y(qbWr6T10*=5yW)I z8utCTy^K2iPY7QKdq;rynWMCHlf{0AH}sLT2o)Gc&962BdR|{;DhD3`NeQLO8>8k< zh=Q1GFI%-ywj9m-X7AdKZw=AhZ+8nHGGMS50^RKvLg_p2EG$4|Q--%g2amN9LjtSK zL~Au!7<5hq?kjjI(N}NHCJk#&tK)&gUM$IH`{+h%$*VnlZYTJ>C3Bl>dI%q=2mHxK zxTGVh_wq;&8z@Iuo5wZOS)ZT^r$*1gU*3csc}G~^LSO9T4E*X9a|7fG67Ml3w?@#J zR=sPxpPPOz_wJk1r$yB4x|9jl!@A_>Np9;782fUc z5PNhIx5|;;?N|Vw+9q}I;p^iIItRvI+Sus$s+a*wh?IQ1%G=nF$aZ!J9h~UyX#;zx z&X9Wx?Q9@P6rt|~%Xc;FAfHXc<^C%iN+YEUhD}x9`=cQ{->cyb4k{x9tP7T>ADWxP zd5B*dlg_r*hL>BX?1~i~!P+?k#77`yZHtcF1nG(Ry4uIIdpw}gDQAQB^SK*!+}Z)DnT-s<>Bqdm(2TIrMV5`^~9T{yOJ`xf(a39|j>cACN~54-a4#(;LZRcKM-{lcb+L%!lgCGqPV` zgEsp1%JZIfpd8=CpT0$6OpEw7c5dAL*ecpx8mT=*^|~Vyx+G&{+k%XD4Lfr@+37`1 zdgvO8NUs4`ozy3WuHCkBcDAmMMftl>&RZia%#GVRFGjL><3T)j1$YJvAo?UKXd^q3 zMy!U8XcmcZ(iID@4unAzqIO@=Zn$~y7@#ohkX?$NlUJ<+;U4i&dED^ePLRxnjzjAoht5kf$D*o7i-SqfhTu7pj@++ zWj2puU-=D^C&x3c$NLukTTh<7o|DIbdq0w`Ou`VHB*U+Enuty=2|hUN{DY`XhRLyu zO-AhBFX11pPBs~ZKkJ%l4OXhfREu3E#FGmeY#`aQB^}UtybS6-_8vZqg5A-Xo!zjz z2=O&ipW->|iz;+`mQ6AGd{u0!S~u$>=H{PYanA3{fr+_1JDGj$bJvW~&n+`UJx|3; z(%+cXp0Obt{k7^UBdAJG>{;ZSzK++)sXrWC_!?PDJu(IxHJH+#!m35F?xo|d4ez-f z=e(kfq-^SI?Ar9Scf)yo`({7S_PhNIEhx(;lX>n$U}(pht@ny;tFKRQ19kU9xR1W# zF@elM#*F#4`MixrA&%D;6$1HiN*HlAh1(n&LpGXz=)?-& zl@XOB-vV%pZ}`(V0;fZxBAZ{sY7(0Hk{3VmnDd9H>oWd~a?QcGDNL(jn)@3WpvAe@ zA>Z9uhH&~+i>T^h$X?C1&`O#1o~EX0qZnGl*wFW7hc&v!n3$xG){fbHif3%Xwg%X- zV@@3{tL1N-=R>wN(^hZ^=rw`Nsww{d&+eue{BTuU?@_^Y19J?~<{fS8*Bs<-EkcW7 z-R$>UuBtV$qZbA122!UxWNb_JzuIRq-TMyo%rw!D@m@!3A{A761E+PxX2Zm1P~{oc zv8jBvf~^-BFb4+HwHfk7|7NfC4l$ccUJz(GvOy3CKu`$5v! zRdv_se?2UHWmH9-GdT4)ce-CdTZQ*3Gu{Anpzv@kPVpSe;&L09&{DHRN>2bL_yBT~ znb$_oQ%6iIDPLT98?>N6`IX`Yc+OyNlR`MkP%kZP)tcx$Ck{EA;p4anW$SZQa=qyC zG5rJhkzSJIlaqVW`K=O~NElCf88g1965VKAV?w^IG1^W7seo$Po_O5Q~nbK#4%2@I-cP6?2yJ%OhgD*NyJrSbgGPH!0m;*?rNwdkCQ{(FK5W7U)uQ#(V&15Q6fiX zG5TZ{lhZ}-9$iQOqIbw_H2QR=1nV@46wFS=55;F1+pT7#dyr}-Y$Q-H(#P101}l)X z5QWbsLSWhCtE65qrp2JMb%X>`+56Ywr{8)}`0eb1aVv2l1ux>=a6onZGuYEAL(r-q z%aUF%vK>O-BbiNzjev{q2>-Q#g2;ePH!B!(B9Fd5WW0AyAW{h@x(#8N z5Uh3v7SyI=NDDXVt^iUAwr)(cb%ZMj#RX3@XPKcauW5T(=l|NcKi*c#rgBuLtXLL^ zyI+;MbSBd$Y6o#BCDA{-Zid*U$$XYE8{VF2Yl2pqm67l%W}rRUUi#LhZ}A8Ld431L zq`#U(vb@mm#B5SV*Z*8S9m@H0ez8j*__(*c*y*S7VtTuxpCOcu> zTzo%w%{;FLS&4QC#!5mGCq!?}o?7L7_V8W=*2YSgt!;azdnErdd3f0A-YIv)8C{j1v)*Hx zMPQqmpyl1i`4v!J1p^k&f*Xu&G~WZ7 z0LfHhv*WHsq%zpDHHu~u?SH;PIRywX14r(CP#Ht!U z2$h(^#@-gc2b^YZhBC#?Uy6jvXfcbtpfcDTrZvwfuBJTf_Yuew&tKtp0hNCd8`u^q znX~^}|kE-cL|cpZ=tW;56pHv01_fV@}Sid|nyvDND-Yb~=Kc?NF|x@b2@z z08*lQtj+W^cCp+>-*riEm`m>w5R-GC6nRGRKHGC4tAUJ~b#+y}(@w_awMIBY`M7OK zYL4*jjIEQv=_F;P1ZgG-*F=LiEU5bW!h(Y2A_8aF;D%>A(Eg`pW5DVz*Ww-I$-M7+ zzKArV%D=S^R9p`%k!@7@==|aBYvqsl-(3@Y!Nb4q1Fv83u#oDMFWMpUTO@nMQyxJ>;*7iUOVu% zwB_-AEeElw?#SRlx~bIAg1}J=^Q*nnD9Ryh8V)rc=Hr`OxuUi2=}?iG>kI%02KI=-M|~jES6t<%72WQ?MBi zOUj-ujWNs~i)|36^fkBa+miW-^o>nBsoTZZFNVP7^gG_|H_W9ql?dW~KTFX^z0TpSYX>d?oALs@Cv zrIJ2SP4ySQ#KibwZy#1Wm#H*dn3V@s(%X+H{1{S3t;?Ec+bJ)zB41$AV0%imBx8Qx zW!`r#1C?%eM z+R^T}oM3zvryP}v>oc)WdUxhWj%{+3mM&S{A(X@;XE;={(;wel%N8tH^WE6{DJk#@ zZ$ZWyJ;$@Qy1co1PUCk8j~DH~Tc?>8W2h#wH?ph7P(e9MS24N>O^ZEC=vD94)-VL= zo_P=K3Ro&?gW~f}YtD;--w9TXCdQ^(kPdKDvlLqH#Q8wF5QeD{&+DU)^joqIDLO9c z*PYYXd0#1Or|RZYL22xcX1+7`_tpHTME*5+ET1S=iWjT!wg)J(RB##md9d%Durao) zAN5{^g83d~hHxcZb(({z%5eU#02B@D^8LoD6|3fB-9vh2O3z<2$65VmICkmtS#K`S z*qcvG>BS180Q5!`3}E6XDw+TR?p|-NW9^zqy{yZWXXozjRBGvmWfRw*0Z-djE?F-2 zd#g>2U;ZTyz3XqhLpWUve0e1kP^A+O|UW=K2>RmEd1!hXLF~wTD3D zMzw-~0eb*qFheg`3qIHUPE`0?Vo^q_N7;LR=$N!RG6r|uA(77LovOs`D%?g@t7#36 zw04@F_2a`-goG)@Vf?N0)8Yn)jNL|h9fl?EWV=dMLvHz0e=XIK^LZ`dI;#DCesZ(` z>_%B9#b8*TVD6V^$3es~U$INFAgFo4w$0KlES1B_TAQ_=9U%E zEFH%;8B`N1S?CCA5+FTAla`R;r8o>mzn6M8rC00v>Y^&LhuGU=+T&+`DP8}qoXDD; zlnBe!?J|O9lSru+3&{#dQpW7Nih9&FmSV5JjTx#kD^jrz8g}l+hlUn3H)+oF7;wN{ zirkhh9vgng3@XJ(S)c%KuNi2Dj&uY!%CwH@1CtkmBn1DI(tludk@f!8N7RzGuh-n$ zUOY3)Uo8K>b6?KLe&Z+qes4NCE&t)r>B-pmp2-u!b?58*TcttWKRc~v1@vKXh09iYK_#; zG&R>Df;nC4K+y)OEMk9k-!Po^jgVK*rd6K!O7hry%)|U_nYuCBG$ZzPE9$oaLO!onzZyz*Fa=ryD-SYYnb2qeJ_ogu z#xak8LiNI52UVOPHuBL>u+Vy8t*-#1Thgj3gdpf=#pyrjvZj0>Jbm`=%|DJV{MKL3 zzk2Rl&p+t-#c8lS)Y0(f+4!1IfBXHrn`5|q;chVZ=%!(4FdUBO=7;$D*{1wFmv=cF zZPU^Ei#N5k;6iE0rnxnU#V{TociAOuI2VdIbgNC}bTnI8H=1TBr3!njQ(9_eYX?%qPD?I-p^w$4brSi^Uc!X zS`}?uT5X!mp!us72;J=T-K<8X+7F=aIhR_s1VdJ$0a|b=&@w<`DglzHnUt=yY`z`q z0{#Z&DT77yi2_iuz0nB}}2RO3LSORt=`AX@VDQj+NCvm%{R|EMcn_i%io*N^mszi#GUz-mD{I$jiUc;IR7S1l=xhEcCq-$O)7kPA-_TK^3aXVO&IUdiX)k z@!Q?^?LB4ILpRDumbbn9#~%CzJn;1SWo#^#5%->syFC0(UT-YEbYA&0Sge{wxQgvB zt1j|#)mo#MSf=w&4sB^0JyZZB^mdiiGtIwUBaIK# z2kmP)2^=*?^swe&zb(2pvq*=GO>+X3lt4G%=aVo+k~mOpS|O}O)5hnxobuob<^>z6}C2Xh=C}AquQS!0k3NHS0VeV;vM*4MsE^DquuuR~70p40=16)~mRZ zs>+}y#ROglB~KPv5Yx`X3-#dq$3msoKGEe#2T&`%k^xfaGE|$tHh;Ac2M3({&NTqbiou;Snv&}Laq*BQT z|Itx2ZS%=9L+Fs$25Ab<>@90Z14OKu?ANoKaoH0Tnx-_bbM0ha)1XHKUIWVrkIoXH zR&WAO=pn$Hz(H#vKb{RUDm-)S)@T`sqjLh@2i3cdhGE;4RzDH#JZNmRU6o7>U#X1s2P>~`HVc0btMyZq!GN!wc8f`o2sU&Kr^D7T1ky zV7cL{Y=%phk)TikoS?wONiggB0 zJ9YQj_Fx2%Lz3~a*P}F#>n$q1Zn~`Wwe&ruFpUo5@yT^*Y@`;S+BJKR z&e-avlbD`-uK(Wi)pU9Cv1gqEG;!@I58ve-liYB=-E2O>d6cc-E-(FJv6GhRQIm4H zQE7JcI8*YGf^8QSJ(^K>>(Z|uFV01uP3f9wKm!lBo9&9-dtw-G_L-BWsjMi$=z6*1 zwYT@U`HRc0@}x8*_0#Q5Z@u6v-n(t4c^g=F<7i-j0!TctDK3Ek=GD>Y0RAR@?zJKV zG!r4(r1zurp#_EzizjnZw-FV?zzZRS#-01WCA-aGZRWzxGF#LCC$Gphb*|}6jktGu z^f+Aqr*}H_I>Q%w=~YznPVWy>rN(Lc>GYGntIS_bMRw4PODaE_>aat(Bqc&*_4}P8 z0M}kNIp4nq`ulGtZE!aabIdewhdMsj?rH4yYmaJrobO+&Thr}$Y??7-ac;Li3}f!D zx#65Svw-U*pLZ{Nac%HDz86!Q{7 zQ(dtOn|<@&miNe;gd2CuGqCk*+zCZ$LS2Ca2!PQViaORI<9LCaI~f2~1^y=eyVnO4 zaDX=H*WOQDK(PTk8DJ6%m87bK9{b>f)h{j@w#KNetwzK1;!8qk zzWFX&OkE?s*s+1FZywFy3lDMW+54GM{1sxm@XHY;7 zI0uY13V_K8DH>6OQOKYO9w*&=FL$~E4iG2Zd@pyp0uG=Of`CLsL~QWz!ypKPU^uLA z70v2$#r>F``?=RlW0IVwZ~76C(4QcX0POg*MgfT1V?rJdWfWX|C`|VN+b2j%hE;BAMATls9G%+zUH2?qr0RQ;O7y!an03`q^ z051SQ09OE60A~Pk0BZnr0F3~TwI|P%n4b}QzNi5pMhS3Ff**r~f+9m9if2ifeoMVz z@a?RH6IX@_22m2S)j#qSYcMOx5_fJ*9d$uLw0Wk&lAcp2ibqB{9Hu~(WzLgAX9kVe zI)V$~>FYaXFN#YgQRRpgf@BbOZJ5n!k;AAaXt}8=qdst-6$m)~7eOWg5$u-! zRVn$-u=P5NxbdUED`JpWs3xzflUHWjK@6U6M$&+BTP|y|DKp{;wItwCl2lj5X**)X zZQ5MO&_#>3cvp;&w{Bm>Gy6Txo4}(TeaM{q50*uwmoOaE_80I~COpD{I*?gW|+XHXxc?d1S~DDN;@Ui7iNmM=(ZTn@XK9Zit8l>n|uq zhSd~xWpklpEEkz#MgV-nAS8U^3#R2zVON?(oR&k%wz7l!R9Q)Y=uwrD3;n6PYXAr^k}{qh>C2iQ*u94lH%kG z+ex0Z=7KN@35T(EVD+lVgHtbx92I}WePL5nPGTmJcqdyijD_|TQ8|&Wi(Q9*07x#v z&m!ayaE;7L@Cgi`c*Nv)vS=cL%JVaH(rP+RnjqV%oFxV3eWxGx)DV!F3u8e;>m3Ma z`ig}ZP7J?;Vn)KlC5QbK35A5p6J&Ap*-|6Th@m=hgifp?3X#6!*c~A3#yQYsl@_^lJVc{KlWf;r z?t~xIWZ<66D}gr&z#$fgL_q~d1E3%o7*FU!PM$M{;9lveq=?Lgv4Y=~iMbrwYP`elv0rx{Mz#DWd%K&ClvZG3ZUr>kUfWge)@bX3}^mVr%X zVyNkUx5=%7R!;m8clmq7SV3pf?OFo7sc4-gf0CX}7~=@xi8@nkUzVQCNkqC2;ZLT^ZuAtz$&jen;tq z5kOhp%rY&nTQJ#%_vrluO)5R2wq-faT>e0C)kB$L`vYp zsg$TDB}L9XoJS;;FVcNQDpb)`sJ((#N+_I9PKwd-(dPty9y1oz;*=OpjBtUUy13J0 z!g-1Er4f|x*3442T=<$9==mfO|NQcyBl%~QAt*q{-&&CHRZKo0OLyHlK>Je`P73Ey zS7bu==ujozl*P&@OhW&yVu@3!d-tbq-X7+6Z0&0M7EIu+JXdWK{> z+}V$UCYI}3)#{LU>t8CNCR1xdB} zKbrQp2rm6ZiTaDJ*RCUPPK10ssUk&Ms$)K0p~mPC^h=khGhVe*N82qnv1|2^VV-5I z5l)JX;q=!QH2qWS<;~`Z8&WIdXtPqaOX$$Gx}LDIYS;*wEh|Q=Z6Tfs{vm}HFlU*b z`qg((FkY#IKXQ?qrK-$WC+C!t*{rS+pb#W}qWrv%d1||eti3O-5co0m9W6B?F*w$y z6BV#uLOjbif*)2k>XK^V(%FR1<`jWdK$BUcA!fCT(Ss2o51fbv*NOb zHz09R5D=mcp?{`ODie@6+EF2FR<9=Jb^2{dHd zz(FtCMJf#+8$SkGdN(=w?utCF5LAev)x&%j2m&UQV-|T+4@Je(QAu2BK`uIch8Z+3 z!g8g-r^EtyNlu6f_=9D@pCZ9qUv^obXeMJ#F+fMg0)ooue6k!Uyg5Z#RV;E`1boFo$+ z5e&HUL)Yr2nlU`&FtSN>ghi7iRDjAN&%aZ;&lc|th<$ORMK*MU>7RAqI3qE^v1g40 z2E>s`rosd;#*&8!58xFfgQ%*3Tbzm;C+4Pr;qk>s!>|dtf{V;UT)N5+J{oV#A`m=C z%1*FOn+*VrLTNZYNpCL{bt9gvFYz4=i~4@@GJ!xbHF7wDvN%&M2q1yIVy>=lRUyQJteOGa>L$nL{Tlr3fZ9qXMTQW8n%codQKkk)XM~2{w$BaGeA}>d9o; zWiAT9FQBXlYj+$|iM&8XLKdk3O0i>EDrhDuW{_CL0dYhkmIv?xO#Yn=iXG64{R+8O zCsS866cH1Zf(#U*AC`+L5g(1iVgd7<2^FEU#Fl+R0eBiFW`s$wH`eAPWYO{E2vYY( zLX0fenr#>$WLO)pd`U{(0}IgNAtN@C)na)mWLTYM~mEwZTlsNJf%}b9^6p8A6JowjEvLYuhLurQ(HOQy+JT_Dq#lCEuw{3hm+ez0`caw?TjvvfPv zJdEL>fm~57rW%s#>+7F#yQ1Y$ZA)m27^eSi;Z0k5w|g0V3rVR!PC<%fbKKSA{Rq}K z`II$UthUP%BuG$)wZ)DdO_othP@*iLWt#un?-6mT$A8aZYB{cT?2G-@eb(CQ&;Cpy1%3R(fCc4 zbTm;a=M+Mz<*1UARosp;n|3(%|C@_otE=_e+26M!?=pKGY3quyCEBiQeh_!`^sLB9 zCRPw_*1A#REI87qxTF2*-c~n9QYLKR!79|Tb&W`-re&VCGk?-7ueB!!UZ~B4Btxm~ z@k^r3FpctA$;B%f!k(A=(=T?3$q%i%kAWw${{wenK=SRO_vr-i{d6( z#FLigv3|&&mL;(emf39c>y%Ra zQ+-*GLSM_8`%~)ud>YP69w`JeVv!N-@{&tCc$|9Cc3EUa2U!;&bV)O$OQtU2Dy76q zZ+j2(spr{d&|#(RO%-0=rkGCpI$u&VfM(F&_?G5;2K}>}RE8+d4;2Fi+$D4Fq6 zN7gde-;%AZYFG)%MylWNKk8rX|L))J-|XM--|}DW|Lwo@zwnl%l>j2K@oo9jfHV!U zz6KyW?$A{fX=xzOon_8SCB65gDYcqfSfV6y^%rWQ+@_5yfifCuXGw`QT(m7wA8%52 zj*|;%$;+;-aATW=SK!GZ^YEhh3y-r znmXLc6K1IGk~LqU5G~&JKBg}10zGKGzui?Dm(S(9cGYrMoyc4!XB*ayZeM3~qJlEC zJyFEHv6|YqRqX|3*g1TswDDvpYXiI}A~)jdAWu!p5}+&k{UNIpi3Q{YFLs0b z7^^tm&0O8wRc%)2T#F@{UJ2lN_j}yjp*sl+)FM`RQiPEmxh<6&2F_q7x2kGDR~mH) z_2{fXTP-s}KwhR3>S;&XYBp+E_&~LhJ{?(dx~H&AreX$jwXoCVpSSe-xV^-wT+-a#F4H;vM-oWA{L@;1 z-UU?oj`3L1^Oy>x&Gc*2aHVD!jTrDpl8D?R)x^nkR!sn&^;y1d*Gq6);`hyGb3M?- z)~WEMf_v~{jWTJZT|ZaUqTOZ$*OJqVCZ6N@L>yK-MSa{##@tB}uc|HjPT$CCEqUM7 z!R1JMM2|8FP$*TMXcK%!K&p*~KWlS5;wF(8~1a27H+D@P+TcI)%UTn{VUt@}L z4n!1=+pZ?ojk}1- zBqpqyRgCTra8zya`wW}UNWygVTCv{xzQvr4i17&;?n-JnL{O=MULloHrTQk;ChlZi zbOL1M?vqmvUr0!{&Ctfki;Qh0X0q*KjaP)crP!**SgeK8F3A>qQEuA`f;$nAv>jkd z;uD5B;*hh2f01AJNtd3$V70W5c+Ht2h5u_r=8CrqD~0FkWE6Ho+GnO?Y_&8F{nn)AwfWzx}yIxL|@dVS)M528azl$4G|JG z>_tUwAxb88)rnl&V}4hZ5@P!E8z$ zENqT<#lfdm_Hp7w&vnSd1O(Zpi)ue|<>GZ$C0VLO16sqr29;wA9*( zcy%5Kp|VTW36XV;iv@7AZG=cqVYsZ??U8b+68f?VG@wElmI>%66O>WUpJ@1znJE%# z?m_7%hm?A%6l5Z9*twSk>eM6!lt2S7ArCdt(c|JP|tni&J1sL4hB+oP^US?3PwM3yF zgkahW}~rj zQpy$ou{N*Ksm@BuO_d+uu_EYXfo<`=EXt1%{K}fvow|{3IPtnz zTo5Nm5tEa~OmM)Ld0N@T%5k|yy<|~?c{)K+Sx}MT4v6e$(KO}frso#rff`K}EySY4 z%C5|x-fg0sDD51`(*+Udu9$P1M-e8$f}K+>qT4f zXO3=sriNH?V;#BPOW200NS!UAjm)!Yoog~`@ z)!i3V;i_KP&b};^y7Ln+eu`2A6(jN#bTL-SO=VYXwAPSqy(;@iMJ0j>Q&k`#VR8*7 z9k-@61!RnwWTqhz2{LFCA%$N()KR)YD_nA!WmI)zK8YznzoJe$cS`Sky?Oa=htf#` z-z*ymJ0tQ?a^9UkoI{DA$qRA`MUR;M zZwa?dCwUy~yNt|^|E-G>3AkA#DQrnnPiWm0${*uFjjeBFk(_iK9Bq^~ESC-m^9(dn zhc{W8h-y-UWba(Tqnzcj`kWE0N6_A)LCAv)#QTg&V&{72T z=k4W0h*2S!n%;?3vgN(>I?|XaUZiU=dGbfpvc~};5k%6w`7RC0Dqu3_l6R@d{Zy#~ znmoZl9c#AS-8(yrm!whlBKE3eGuTA)VyHD&Op7vVF^8{(( zS#5UuXX;H5Z+VTvMh7M3te=>9DUwIZUT5RymzhszvXM*KH9zEXY9T;T%{Z=+EPnE_ ztZMOYNq4HA7WXG_@-Kr9=8UG~a{R zR;D(e{Ky~rN0R%PD2r-}1rVWG2+Eez(m{n)`7?BMh)|NU|B?rmiE+hbnu*q=xitf z(32GgmoRcbJgnQOwkDf@6bTmy*xa33_IAjxj^!4cq_pDMNi@uRrC86xc)5gs$OuQZb@O3$oo!zLjsMe4R0wVvnA%lj~0FU{vSX3_>+`Jyt9 z$*?+wkbCr0Gtyk7K#SNR_6 z@!A>KE{LmTOgj44jhMy8q_E~o96GVT=QJo#pr~M2Kr|$L`1;{8O$fF1e(7JBwJkj- zC00g4PEN+!bVVd9tjna%v+Iedwm42y*zF&mA%o7au7^k-J`f)g9U5pzsbUQ{){NPu zMq;*i{;_i0l$9!-TiX>Llu6YL^(LOxSyhMl+^q}Dwx!ZMxuG4@Y+=rimPkJ9M@^no zp~oMf(j_=4T>kt`N%t9){^#_yr}l_1vpe)a@t>~{D{;1)xX(JGj(qc%c%ZPey}oht z1{N4PK1isWN-j*fRN6;Elx)aM&t9CDuWp_B59`#;GXEmSRu{geVqyX%i=|OE5lVtR zX!5C4O;YG6kL4azqNLKMvooX=-ICc7w}7X!JKU!;ZjH^p$4l6D#;EL7bES?NEL^j% zJbB`1zME7I>PL%K>QLHq3mW4`CXytZrAd_>A;7TkVa6PUwT#i$%aR%|!^pBAC|D8&3<3jz0Ki~)Kr!OpAu^XXbP)oe z6(0mcqbI<)$b71zB02ZTQ0K)oz$7Rn4+8}Q2oiw{N>@!3E|AN{%ZTKP6JE=m*eXSn_!Usd{#YSKCN!6v2n2+ha468HmM!@V?L~AZ`7}t2{m}WD z7wfO8UMyO6u}?hETf+qd#ik)M)z%75U#f*#bX30dSF|i67txvs`G%lg1U5=8iy1|v zt~7d`w=nOsd*2V)dNW1nCwT;NN^O!k8bz&qctq3|Fl@(q%oby19e+Fi&uJaVrC*^k z)M3gg?G7}shngZeBvXh<7fcqxdvxkAmlN3+#@-d})l`}tD!BoA5%Vq(6C|>h=%u*! zR-mwgjz*;~N0xbWLgL+d!VhgKWdca>s%cJy3zca5uuBJDZV;;FwFOtdDu#>RE+T@8 zX?duB^Ho$H6B6%Rx?D%To#8mMUQ@{^h%veviNqWsI+QRq9BQJAc2_`@Ha&8PrdvO| z{Pb5}OtPsvy5Hb8Bllvgr(VwfsS}?xUd*P(5>Xrwf$~X>+r_49b^a;hVZv>cNd=yt zi6kL#LK;FS%SRr9Q|;VO36@44R+mdz)X}!KPF+4Cb2aR$`YzFS;!i|Ke=5;r4k)h#8L4Tum7U#S0neNePI}T`(>-Eiz8SKB}^C*XypnO^E2WVCAxbn zURZFRqSHJ>JYvQ5FL|nR%pk!E(-|yV66YJULNP=5*s^7jcE#XbPs1<4*%`cB`G1lA zdW0&f$5Eox=OL8cDTF2OGslRS#spLzLM~Y4!mxwIufSLYM14kayA~7OB1-q zBZyJKOZh1$5lK@#stFa;9WI&C7n*i?8IA%nu5PcdM4*Z=gK*z{waQV_d`CzvLufyG ziEl{eTTxe3vzGH(DxVsoTtJimNcG)A3CXERjbCwd>u+jlPMkk#<47w@eF8QVHdvop zUx+rRYRoy6Ukf&==hn<}iDGKTFcenWU11s^?lFaVYg_S&p%*1mnPq9E)Ra`Ct*NWo zR{G>iD_x1WDr@=?vIrTWO!(d*eilOuXNW>cV9FjbVpM*!%U5fYV2OobiY}5DVjGF` z4w54mcLnXNs)o)@<*hpXnOa_x-pL55iK>CpQFSU=cG%i}{3vbq8;_Cg-z2`fOyky` zFO{Tf4jG(0UE!(5^1n4@BP5f(B)cE73Orm%-^DkgiQ@i24Z&$a80E-8K9+vT5$DYe z+G?tiwHa0yUTp4pGe4nTO+9Mt5v4soaI$4M(wMKQ8Ext$u8@Qj+Fw;DuE~M=jzy+N&&rrWvA3DSuga7^6g9PSj)cm)NpuU;8b2?^nbM3XoM5y222=rls{C zrEaX>ChzfIJACO|3#e78Hs$xi`0*0YK9$*HNL{P@H`U(qs4PY%tok3M66N=tEBdUt zBuygA2Hc$ZlI%mOuai{b3P){Lb!}7Bl?zue`gBK&;V!lOe(*k-0(4*gG=WK7`qtJx^$n957JpFs@MlDrwQ2;f@@gu#iAyR0`lqSRm z$RBd(VHUcMSam0*XrXM>(UlNiZ$@_J|IRfxQtP&!;X~>dOUR(#DGt%ZZvN9zEN+bz z->=p)F6B?H+gVmos=~t*myj|jSMY7Gs1~I+%yq`VQnU-SeMDeUA&Fgbn6O}fa zdqk#oL3-(#_X}2w@OH!m2;pps%2|4}Lv3~l|Laou)o94lD$hUlk;dC)Li{fEQKejM zGWLZMqq087o7Zf^DsYJpB1<}es|?MN4nvw&>8`T-vnpP=m9aeuqP`j0Sj^!?jI;V; zX>xLq%O6?adm=^k$;BB<>;^lNN`ttgp zI6E(CWtv1zuF7+hs!>uKrdK{gB$r`LTyCu8m<2DZ?`n!~44C;j4YAQgTnh&AV`Xu- zi@(V(->#a%hr~%yQs|UsC3HYwBO}lqf|TGQk)}4PuP$JgEkB*#0z$C}$;ZSzq(ds7 zYU{nQ`_VVS1A}DZNtU}J0_I}3!a!vrUv#)b;YQ3;a5I!O^Zj7)j_!r=_B7)DEAc(mq~NUJS9h@03+qqX#ux8)$AdCH+A z)UppkbB4u8$VR}0^Mf*n92Aeta0NogW%pceo%oO@$;f*31W|?97MzeoR-qK~5pxMH zp&~<4v{Ixqq`_el_!JPBO|K!@iBO`u_m5%oakgm`sIv|pN#haA^jvQO>!$(FVeWSSQ z&d6*`x<^bQJfGYKOnvN=_}-1+nZj(86`d5^?m*=eV>JHjw5dt^!qgr%6tm_b7g~38r&lTU<}xQ(curv?4`|iU}fXCMMXYhC)wUl)O^%o9DDDcwm>ei8<#M zot>?m`Rh|qd_rN1MOJ!}^!!)T_p_#!l`CNI|9uMjbZoHu?_RU=X$>8^=eLPbDzW)N zA_*7ps3ez3E(lkY%Q+jmPR%x~B0MB24pz?dXO!cw3{Onw5{t*HU8Eyx`OL%RXqh2T zO(e#Jne!;Urxq@l(iW85XH~egkBZT4r|}sFJ7Pi2hMblnB5yP-(;0Brig>NR#QFXg zspW^t1oReqNYnk7bc@_8NfT_r)`?MWN5|^2R-8>}3P>9)q;*?d%ip6iEV>EOTU$zY zq@uDCIDf|)%rZ2zCupmE+->SqV1<)Po#uPSEbC&CQG89eH+u8me`M4YW+W;E1MUMX z0!muf^MxC*u}6O@br%5rC{E;{BxPmo7%UnjBDL6(NUtV{ol-x$-u zA^}q7j#SnhtEw_{?b*c&R*i2SE5?dkFs5=zjFB$~rpD|Ahl*O2GR2uOmRhL=1x;O#z|@I*6D4ex4^sU^<;a!w<3#2qkm*3s zFB%&KH&@zbY(&Do#033>By}Cmum<~5?KrfYC(Qtf7xt|e+ATw*Ku|Cy183EX7g)5~ z!y&=a#wH&HB=9OPSsmps^#t{nTmjS{S&6Ksf} z=|of$shMtOS3TGb%1=VkcVut77*3jkZ$^#GDv6!DGD6IXA~Laq{$;9^o({vJ z_0h)12iI59;=3g-Yg0FBq#oHEx4w}Aux(j>$ZevckDYB+A?lIP`1*%~wsE0ZbN}D?Do;qqE zl}4ry@vw+>IEiPuD#WOsZ(1PG*6y+2s5L_EBe6#cJuwGcCC#0P8GKy+)1x0UmrQUe zBpb^@-vq(Cb7s1Jty|Jn-zD$o`V$RfMnwHdG*9EKi057Vl8A>)hCVLe|`Vu>*6QUzE3s7 zC1p>Shm{gx1Vo^df7Kv&IbeP>5)iAMN)gZQcvGP(noiNnVjOQ1w$|Gw;OwCbB#JED zqjg6D&B%x_z|kQvu{y}bYA{%V*t1GV>+b(*-P>P?RBwQk*5b~NPv>1M2*pz^xS{C_ z1cVHn^rZQnD-x-?MvRlxt`{iilc`)rAvLINdUOygyvr2{(}d;j0bxF@iqfRh6>XMpaDgIp|IN@(v?RGKAW@nPwss!8H-ufs;M^xrJvO^jBg(PvL8^o?*Plfoys(}otO{UvUAB99U z=~;qARuXiv)L){PA|}END#yis;Mh3JMR(mA5{Q!J+|gUCTDwj_-IBf|oaDi~YKhbNQqrzGL(H$CB)?U3WSUaKvupB^ z);7|Xi9dJUvXmYqr3)e5Ur+bmroE72R=L2dR^;ZN~D$6shW!8G~!AM?2jA zNLY}WuB1ON@fLPgy*05aDV;qD_@ZrTva%oRq@%iVaznDlmX$L{StMlLM=JG^o)i<9 zOE!zgNRV-T%j#~W*C1YuK9hk^5?i z_EhWGy=Lz%kx5y;%wVPr3g;n?loxcL=XoddRO>6A%bZ5ZB(QUo%85GLYmxlb<oZ??887p~>rR3v)BoqxeOC#2i^^yCya=XrW*vGjbUM^uIkGhQu&P=l8Q zyznWH6x6Jl2~EvmJVU%#d=ekHfF>3kCgn>?PI5|Zjs~;A12(p#Vcj5?(K;rgqlUy5 zT*24_p$GS?iJE^@n242F%!ryt6jN0#lE!ThF~i=W6`2K|cyXA!`V122Fm!M#Fm+-q zN0KraSb$BSCOBWp^+vFaLT48!*xd}I{+A?C8S*n-Dx6FtV{|Xd9_SX>^E?Xz;6lL* z*;V{8D5()9()a#2UFG)(`JDJ+P=JWZj`YADx%Bb4AcD!7g4iN;LbI~m?&KiYk%6?0 zjG%!bO4Gf4SzyH5F%ohMkxLO%lMQU8brrU!50EBjE-7wkOowrzjJ+&kJO-?A(A1v*4oPq3_J^6lJm zqIXbin=Se*T;cAvnPM3tQJYdLe8y%(UaW6@EH=4f#JTSMXVoIxqnP&Vq@3@+R{Uj> zRswgNq)f{MZ0MnKucXNWnNiMp0#wvKyrN!UWQvR>nWA61+m9M+FNv$cGL(o7Baz=+ zwoJRoy19Ey;y|;gLlY^p!Ofgh!#P)Oi&C{n%!?ErVx{X+`HAE?QdvhUrnmE~|lQ?NL{e5=9Wx1`blBNl1 z)UxMTLbV!)5OkYG-=#CM^i&EgzQ*=fB2JN4h)?q-MAE43F3JiGg{vJCY-0GbTYj7% zl;~Jmup}vjXkKa0pNj&5K`TKaEwu!m!yt;Nj>MqRh5{^lZnVe52FW#kazU{e5IxnS zyh$90lCWyzXunkeaBBYKg@y$&1d!8B45?9Z>N0H_O<1kfL@P;6&LCR#x&qBl1v=gc z71)tfnr*gxG(yfOtztpN&+#e34aM30GNv3P%TB-)N+YbR9uOdu(37KgzL^6xBLS#+q)=yydec)jv=V~V1yLnXjev!r zrg@Ux2(i+_7jg~=d(a8V3)944h8@q&LNXFec+2yti-pG))-}{&xp}dSvg@rdymW(g zzj0>jM4@Xoy?aw;2tw$rl>Vh9QCC&>ZtMw&>Lj5dHG}jeIVHcs)F=Cc1gA*}mPFbp zM2D`a3n84GAtOe~RI=9P7GQ+&m-MpUvs#tfF+UJ~NgA|NJ=L}K%D**<`3auZwokZY zilkG@_*SKM%p!A_IY>&?x%kFrh}fHQr}khh3gyEG=%e&3>luF$TKWuavAwqlan7tCIbY^tPwA>2Zuey^BJ*BuL6>VNqpvFle* zUM}R=3G0@efpw=T%s70+CsR3FinKRL>W3;3T}0ti$FvwkkwfyPpyR!kP88krZ2IXb zw9zeKWy6t>i+t!Mgw$qhufkA_e>V5wllaP%)A1DukB_;>PhC!6i<-k>Nf?pb$JDX& zU@5A5dE{6Vp0Hdl&c`ip=2xVo&TJxOh)Fh8f41At%7>-G*RF!Nyg_^ZT$DXm3J3}L z?B$9K{m9N|rG!RFf0NM#1wCYegj`6^#ZV=uS-4P(k7-0( zHyht2$WT&~{ZOdeCgK`GHjS$mNaBhN=JZ8bJDQGwE+LWX8$H#;(wimQ)aa?x?pmQE z@@yy+P9{$?0HH7S#}lJ~&w9EN2&ky)+!ajf$WtM4H-Mz z)^*d>RYLy5RHBLQoZTk9LmLZz_QO4Fg-ZOR3~k?jm@tO$|Mxs`uCJF;?ivIGS{H9U zih&450#+eYYx#4na)~b`i(F0yI@1|TdBCr}CXpIzSXzkfYKKZ$LIHo0 zn|i6Vv78HB6L}CX(ms(t1~a#D=4>&zEK)6W;zCTctvMuM^W9^^ zdo!n;x&Psjiyala+!glMPu$jHu$8SigOSae=>$$Rg`&JB|lYzeB1FCWRwW$8R$rOQT} zx&i)YSc|)vAeC?;uVL!!Kp+iOQWEr$Bja3T+M06j?2OW-+LZ|0-E63ln%7WyxBV<< zeVt8v@xgm=jmryb3?u?V`QcYD;FzNbP>rEWaTS6FvP@GnAkz<%Wd$cWi#q`H)gr@{ zmNwJZogId;IO>o{Rg@-PBioYx@=kpz+`r$VJ8qVX+Bni92B}kxmJtx`G+)Z)#%Wk? zYv?T^{EoCkY{rgOX_=m;tvR7_;>`z;jVnE>JaG10_Q>SM4DG+Qc%#1*P;|tgSP@XpEDB28; z;7aWOjVQ`XEPJJ@1;wNyby#w&%)L)S^W4jhj57QXp~-}@H+;C@F_D=hSs8OMbrZf$ zP`uM#B^9VW>iT*2-!n3__d7z;mDMv5lO(#11I*>i@en%_o~=q(XdX*nC`LqaMp43G zdq9VJu*k&Nh&vXH{Yvfz0FU5~XB#e$5K*Xd{NSJ=-NF82V;U-k8-*OLf>o8I$D){U zTw#vB##clnIJizHYd;d6#BXvD+Dj2J)1IN$wnWLe2BLvmBrzCr65w_kIl(| z)UMwN^{G?z=?2;N(0O?8O1p+<19O5iDdE`yeDPP)x>=yoHytR5lt0MyrR8vlX-bDR zSJ?Q1xMo|pWG^g& zCWR3zZh;roHPkdDsk1{utJ4)Tn+5j7WJdj?a$8e5T2iMW+1g4LBB7|Ky;yOaau9tW zBD^M`6SqlGt*(@YW;c5XiPex1UXqQE5^5oMFYy|%v8p5`GPM>aI1wQ=9M!3m)|hcT zNr1nwU>2dipc73lnBU!(pfmh zXeVBcci?9z1ap()oE_dhkJk{r#Ac?GJE>t3<;B8%VgZTpp@NpZ9o!y9kU&X%^R(os z!g~F|Y_J}K*w(39`_n2k8E*^>(vS+4PecKPTMA5-TTF4CI8ET8IAU&57KT*pt8Aqk z=n&JF3d~<1J~Ry3pd><4iUd1ZWy6|Cq~szv+9ea(3Xvis70v1dE!HD0WMHl{1ptni zTz(zLkZA5F)aPyu2$ZXL>mbx}TM!v8 zJCYMm1R_n4nrbI|nlS`m$I>XWAWt`i#;2FsYP`z_0+Up3O(d^ELyRUz@(4v=5*vwL zNcIHdpq3^w7uM>C39!idBjIU`B&Flx?!(tYQ~d@mDM3}GhVuj>!$LF@m7|JmI>zbg zKH{Qz+j2o#IB6$*X(Cl*{y4+Dt*a5po22tk0qZJdO8)CvJCWi&V+ zV*A266O;af*Q7AhKBryE`-^#CbXaj#;u9A>&l;5sCBR9k*3n-mh)Z&Iu)P{O3TcJm zP`2vPJVzi>))Ov9mmX^3RO?I=NLO72)E2@!qMJ)R5jRq{+l`?BIzgYUqhnpm$++Mn_XwNYqdXzoHho~@`Z_$}W<$A#r?w?2AE z7luL+i!7-tB_=+#N48VDq51{+Az4Bz@sH}CU&cR9G{*9*JH}<5Ps`1C&?B!HI*Bz~ zZ>{*JC{pxVXByN zsh}*Sj!uk8Rt6Gz_*uF^6nFBqWuM6ASZ?T3loW`Mrn_#CU&1Uf*M*TBEm(NxtCgvx z7~e>%cKP+Lu0_Xra#DJg$X`mIp){$JP2)ZAjj1-RFG{TkCb4)~J-mr~>|>Qo!b32i z2BhqJQ&NAE0abI-YA*}o4YWV0hI8EeZX}D)pcbSnvI%EDi7wws zD&ag=@MJAPFUcnM`SA4&w;mE{#L~!{1ItR%B7m`{YTs6tQg0TEPi$#y_TS6u zZf#+ZkOtyFLoFCQ*kDu6kJmC zv>y|n6$3ry54fI2UJ-V%%aB79dFW>A>Y#xX^`(>}EGlBtBS6`+s=@3}16_u!c??P&3&v~xYS|4~QW zvhdwM>g}6)P)W|OvRt?dT2f}9j)?SCR)F`A33{0*_GDcf09-;y1dbhphK z^Ko0Z-bNg>&v(3u0&dAj6TdUJmVyq?_8!*c;Dojl>G62ET5DR0B}Thx5z*J!PUsYf zpH{dj$-$PpoiY)}Vmy={Eq1u=Q~#@eDif=-z-J&S)%$4#S&w;w$7-ld@e%7y6v~+J zvY_?pIhFM;Z-_|bR2I*VkN1s#*^>6fApHGWZoS!Jnm(_$tjLP32I-Hi#3IT%Izj`i zC~#DFMT71PB>aA8TiH2j7A2TA+jf7gNmkt>JxMpMw7u=~LYewz86%wK`=U0T#J`mK z&e*b`@cxa&wxt3p0{*@$Q|+*<-@%clF+CZ}UKLzd73^z4gTlTF-$+Uug@ZCBY1A)Z zv}6|G_oMs!cM6)XCzZO3L~Mvb;U6Hi^dEvD`mFhM~2jGlr}U{e%BWQHLxRS z#(!?s;M^Sy`0*+Z+6wZ61YD{(%@(lQi+n;Mnt;4$7NByP`ckLaQ32YSE@@2UIu?~i zpYPx-S(1&Gp+fWK_Bwv_r?MzGFNN!b*pMsyt_Tnho$`c47L`Q6ftY2xWN))bM*`^@ zFG#Fn<6c}P7b6Qorn$IRixfs1C2oEkJrpcifSkkgrp+@nAJIdik|jP9rntYU2Ufoew=F6#N zaGA%`!oWVdR$7=e-YQTkNpR&d60`>8h)`&ka=(g+m^!7_hEj{GY%(nd6ufQ=2&CG= zMTE(&8SI!sQ5N*8FXe-g0X5_ot~}Ay0w_rp3AZ3NctJ>-@bM7h4~)L2`;*nqWwAlj zq?@_&)8fX1X;2<2sX-8|IyyQ!8cZOJR4#-jCOla>-myyYEv@?-AxMWt`F;w7ORWXW z4GG0w3Az?Ua6~jFBo%yMY%ER$*H3X1U8T7+jv4;`Xq&V7`*~4Gc`5;E0`+JR0|z?C zNN)<4s*FfUgsh9v6CV=oMV|pmx_*5ON;p%RuOJgK9HOuN`G@la4oAR-qHRSKMxz9MjJ zhN_5>hUB``J|XDO2k~MUoQyzxWJZd5z-WSO&WK1%H8D6xA|4cp4_&YlI!8`|gz-95 zd(&rR)P_{qA-jP%puLbnURrFm_*}tAN_e%~QE<>+T&^#6W@N-b(LthQ<)lmy+>}(I z#j)a{K^vp-sGwTx{Hf5X@lm7EQGoQcXiRVs3C+vVL~aaA&mAfmE;&zpBWu~&57b>! z(Ub^9s{*pa^3r3I)H9NDk>ij^QcgO4TsL6A6p*M~YRaUfDeq zu&91;auW^B0(YYU(WoqXdOa-`4u}Qj0;XaS8`8q#((#E%tbjQ)6f!k45~KP`zR5L_ z&T#el(6~|vhXz3~ zlv$0G$qftx@Q@Rl3B!XhN+$_KghFDmTE~S?{@4B&{qg?q|KtDuzuq6}-~M<2>;D64 zPR!a){n;X%+Ys%-6TdVN;T);*QBb^b6irA%H4;Qzp9>wtqMcT;1((dr-HbOGtat&~ z!^WQOVmR++Lqq>noAiwPvwvPqh`^=NPRn;s*WBA z^5M(H2M)bQskW=tr2;Q!Qf?{(MQ%k`j&hL~6udBub{_*~9fUz-?8)M66DbX~wR5h8 zOy(_20{p-(*-12ro)O@d4z$9zVi^e`dhkEmUbk|^1sAM~Z4cz?Y{Wb^@eUjF`?%j1 zMQm;yk$fc4$X~^Yr0e>85opC~ndY94WPiB|ICtajk%nm)vmgyzYEH$IudDC+VvkM- z8hFM##N9U}vteh?mjQ%$wuqtn$V06eBnn%tXql(gYcOs5+nBSH$pwIO-83RO2sU%e zSw4|i(X67 z1uJRi!tNM-4Z@bb|4cL-BhG@6VDZC!SeEgLs5(*==vFHq;ISRl+6o4`Nq&x(OBH^C z+&#DB5m@X){LW9XKk};5m}H7Wo+F&Va&(VX7F+3SuMnES&MVO|;>4y(<|97`9qaj~ z_D0%I?`FzItA5)kLm4isz?{3@L_+@Gpt@L^4IZ-^yz3o&TNVZu+UUE#lomy)eR@OY zI#Puzguv@d$&00^bGQ#BXL=Y##XItX`RDu~*E>UJLG@C`W6V?LsiU#622ig)`#*Z~ zgwbE#XKb-q7rk>yC22@r5ZP{ zU#~0j^B}>V`UsW>PWGMzwp{rKnud8283KN;>_IzRgVR4U7pU1g5mT7HpLI?y#WO8f zFJkW6rMKn}BWHzIwyNe_*U;kKYI31w5lXOCl{jIb;Vnjh$3%-Q6vd;LWS1YvUlCJD ze2j_AVxdaRJj2%EAmC=FH{!}4hcSnKWXu;JaDDK_Fr!Tnyb`^+&0p8-dF`igm3}Sy zdSWe1bdi+`S^kHZlBy4MVQdc-6~U5sLNO%<5Ou5b$x;DrQwrHL{WAF<-UyNxLr*FV zRld0^SCA;Zqqo&)=O(I^W_H&#K_+kMVdSGNY8&)){=ey>nuuh}Y!@nozIhhTC*t1o zsGzSIOhOe8-LbHOTlwyjBH)7=cBS(;k0#aTWS+vxq`86CzvD0iU8<;3&<*nP1kWr9 zZFbu+oK&cufnMX&Y9M&UEmHDKi^QAFfQI~)GF&C8jS61OB>nN4MXN)d-8@5zPPs;} zEqwfaQcp+sIMQ>oj}mXA300mY?^bm(oiETVz#EvD*#U-1GEY~4^SH%!md)}Hey|8x|$Y`UI=4+Q(| zAGo4)kr${s(sdJzw@#{y)&o46VhP%zR;-RcHC&KFoz!2KvBjcH9c?UQ#B=OllKkarO!%q$ zyjaam(~wsI3i?spXJ@~3>^L3>HSf$^UBo@K%C@eBn9=P?GzFfzF7=gd?rg8bMljbJ zhQX?J&b4dW8m_|GpfSx~TUrm{9k$gj%5ns%_U$E55G4Qm#I`e$6M+kBltm#>qKH$C z8bo8W&8I(Q<2dH3f)&A{U#_p*?6$gt6%dy->#)s>Pjm5BeWxo_rA-4_0J^|FRR+p? ztg5vpUn|2<<+C3psY+sq^f&EG$Ip7B6H4zwFC zO-Lf#>eQ+UHgRHY87AU(I=J~-PEDKdW0f`bz|1h*2Qs{F$hnmrD2GuhEXo)Ud9o2q z6MBKT`N51Y$wS(_nfS_!3mP~f4Z9^vDc>nD{705_b?337WvzY;{J$c_SqPvk#pJ-l zd{5_Eq*CNg%kYS!c+x4qROznm{JEQ4K1VY?busbXLxQ6hoUGjWR@Q>_bh*#Gu+4}z7BkVKIRySmB<{U*2b ztj$F&BF~Z!!K7WIX^O*M-xRJOt{|T@^-76cJOlpj$r15U-_?Lf=1=1LT;K4la^^F=L%uV`2oof|O}BM)M8As)PQoogyCE#Zm7A+Xxv-TOtM8SBiQyE&ynp_O9Gs$ODcR%zqE zs%H9av}c5!ROyX`(vl&+T-0i5G0vIaJr?Cwtq}u#P!>WmDCH9Df_mq6$}+pAz6@Hk z*9)QwQ|=a!DV*8*4O}w!w}h~2O@G|)V(-YgA)_Y%@OE|luMSa zt&b`%m?l$cjU$wiw@+8)$B8M&S=Q~oTq5)HsNp0;;;6=rN|0~dY25j)NJ=%fWwO%_ z&LLR1jz_zrryBXQ30h)ZK&i~r7zaf=^8Wo6v_K%Eh(pJ)+;Lt@taN~df?qJKa|^NPgo3{%CK%7o$Y_goMS_GhkSVLA<*oeRh2ByoFcC4j14ICh-pybM$3*{&V zA_9?O_=S|@Sx(6w3o%quX6!&hDHRNy<}>sp@H{pK;UOUdNtGse)K9GmQEl_Y!7{X#`ugS2g8tv6Bso+9OmUG z@as^^>RHKvgkmHW5*Z9!jL*cR!jBM7JCM`%uni1vOk!bpz?4SVl7iOOBcuIzurXhJ zgz!jyAq`7{=B*nMbE>kd_dEGbfW+KF4NsaKh?8DhsH3O*5BZY}(~Fapi3EVaWFC_e zHY1lr8wve8KdP&yy0-}fQE5>L4n4H8kMTt(+~w_pW$jTKAq+wglr=42Nz6m0vYNB6 zMc&p(-|!G83=0lK`sH*JyT7$wSe+6CYlI@TBUkg&u%yE^#XgD~h^wP2k%Cf86{Mvj z7u>G252}V!o7)IpCM8!wQ<%Vas)>ln?=1IuOvk9spx!{164S_w;iXND*|7L6$q!oWe&u z;V_u722G9_5jyuG7SyNw$|NMfDZe+My2K)(q2m(S-O})xU^a-nMl#v2X+A73)CtB( zf4I8cYqrq&Q9EWhpEN(Op^{ilYb2Uf=aJ_+-7=8YM70u1IDaG?(<-4xp)b;Ny~Ua8 zQ*e;BSlzWY-Gb4o5T|uD1DYiU9!1{!4f4OEiQk^I4Tv3jLse< zROGs6bsWg!2_`G!AE1nmBub*0{REJ5p()E<_8Tm-B3gt%FW>(rr(^n_By^>(p#q)P345qa!;5XD3B*i8(}= z(#qr0MZ=^~?zPID0vO#OiVfsLCA7BOvHr2HtFqz)73q+)?I-EROhWQSb{*XL>`Svmyl~G zwA=EIEsLZ0hG!edF(}js!f`M_CkVqqAn@H!s_PjS*%dVYY4h;iYVRA0!h(Y1@vykb z7ko`OR7U?Ppo+#_K_{}amf+LGXbV7G7mY=tQt?4T<8Jfn8tU5X+%g6Ka8+&k;8xRF z`NEy%4Y@SyV^49noy=Ejs@pXWVkaRv;EY6g69s|sBec4Z>%nnXE~=Esv50KD%DsQZ z*uZRZHW8-6lZ)ha*{Hr?lzP;;PbF1Pjm;ae-@M#v6pPq?#wVoLQBfwXl}PpDknV7; z7_m!Nyx5brARjz{gkL0TnlYO9b_~#heg3{=$b3A`VHMz42k?LHYV5yED+L zt*R|2D_ZNG7mU!-Ec=AHl1w=H%}Rxtc&FudzD=n0Mdn!!{x|;n>H9%WEH&0%gkFO* zh?)97A=x@I#9sC2ihEyA`&PBkR;|90Mzbddhh?W~?WC<%R(KLj`Oj_oUrm30@|oFD zN!#JDfptjC#hD1Gqf*tTw{78GNa;R z+{U2IFxB|{CnrCCRHW7(1>%rASh?12x(Wb@z+7#+?EI+8VzwgOi-%f;YJykr83=-k z6tX@L1-Iey2YIa(t;7q*EbF){6pD^h6)P%4vV=hZh@gEAqK~}fktB)F8W^`iwZ!`- zB8gRq(=Pu5DU*Q<64fzYti--eBbTziWfKktEm$xnCJ-iFgkkBCGjgFa#GI%x&O?J53ksV>zeB?7%8aBNstqbStv-4-5V+kA z5wubnv01L3kO_O^97t0rR0b}lOTnZ5S`-zdK3uSa)Z}X1O#!@)AGjvsR{l4GbkMeVF$~yX{esgb1C-ySm6>T|}8BL0Rm6s3bZgwYJ{0_R?h@5Gjc^6H%P0 zzk@I2S;~Clk2R)|j!=?qq=Y*2!uymiPRprf-KAz8u}K*{=_vXQDO#!(7&%><>C}-F z&|bKP>sB*Ed1a{x=29(^lEsYh@}xg%B*1KHlF1uz>soT{V($u4=MCI$OQtGc)xUM5*}_Xk8Ny4)v=uQ??h-tLJ}HCAR5nn?nPBrfl6c*d zcyf-IIx7+-yk|LPk^553LJ**}R0-WqsQqega#%@j>*lV$l4XmoWOAUp{_8zN6M%;iu%kAzxN~V$-$(eP*W(yji>))fdoV zP8TFulp0el2-zh2D{+kpfuY<HcUFphDNU9ur1VjeHZa@x1jmaI0Exmqyp9XECPg zph%|*tX@pDDzA3sjr~k4W}XBozxkim;7Njfv9IX*lS&cwCtdF5>os(U3D2Q6wtJT$0T%D9K>gS;fe=i|32R+S^h|1^G2#dAAI*uZ7toQD%P111(2 z@hzZL1(#5$L7_o(A(R9vff8v(ln@i=TMWaFMlY`Jr`0htjf@kxpDTYB`RW{_=YuuE zk4Msxls!MI#3^u)xn2JyEkXLN6WCHo!v%b?6xK}Tk#mWAQkArg+=zY9=89x5u!geJtV z(`u?EA{u>j=K&niWwfdf!hs^Ixt%6aQ39(eD&z1T^TC~)tzZyhsz2iI_>E9{j9FmX zH`dlvlTGdN&1oJ9iQfi1B6+zaUn#N@PnKMT#4%~cdxwOZv%MPA7E2%4vQOLnJVt=87cBmIeX%A8$eLW$F`=;h%%N4!CRM(xx zipwW-R4DIND`K52W-02~6tclp;T^YlXvp$U}+(l}sg zmQ5~`{xaMc0>RRi=#f)bL`7=!wwv%(!2qAd3zp}Q*q+Dg(8KUDh16=%@i{`i`ErhC zsjgp24<0Z?P1Gf#QBCy=iV6?-OsfMxi_P=Zf56P1{4%#tI6+U9ab~CXV!P_J(x1m%(npXrQlI8x`$NXLp{Y3?r zOz6nX90ZkFmC(?@DtUMl(Poq;lV^>go6(b2BC+IGGLhY@C6t8Di1{4Wt0|*bvL@;E zn8Tw^lu_|2i|LzGaY{gDz)g#O;l|3cY~ID&_~L? zhfhw2V~zfdE`;#jM6MTfhLWNsKaaY_(vKHs&?0hPb*~ea>Ud0|@Tma-_t{r062pH_ zbAjaAPG$9?i0sQkk*~~O{&6BIlY+!LsyQtgRlzi6_me7-A1zS<9D1wIA`L*QIqB#E z%^m3M-M*R_={ZSU6-5Fgj)^bDMMfx!&BVog^8dP`fNYW$7HY1hgd9|EFTO10tX3hD z%!x&&>~5qsk|UKx!lFk=BIQ|Qe1MVLGK5*sqlgqUv0IRT!fg|3i0H~gstHBp-6URy zvD<6RWzwPua!3@(Ghe;=bt;LOM7kiVUdDvm~2v*(b(4XvyKRPqU+p zUY-+mkwtV!?(A}a>Gq<>WB(iT#kl$kd@7+xg^@HaK_mIFiy;bwI$+4@e>N?4Mu-8I0%KDwX}eN{#~Z>1En8 zB=TGQD)Cpa<11bQVP`AkPem9nkdaeE3=wQiQX;`5$vGJ|iz%2x^C!o4;vC`BxKyC1 z)C$9-gcfzwQhX%>%GkfP1Xt2_QsK_%?Fx%2c~Fs&1{*R(;|gA><7K*ln~8=OiBj$G zB%}|fI+IL69=5IST=(+)WAaWI-8lqBTs+$Tv6B!&)EQsXN3{<{on~4ezT$3jYOqLCc z8&_+r;m0vl1pziGrFJF_Cm7YxKwi7W-%ve zfoitQ%#Qc<(|0bpkxk|m%o?EFgh0J6^RWS^FZ!_VTkXu^&aHcDltm9p)~R>EjiUn1 zc$Vh;R)S$^yq|wwly7Nm_*HmZU(Vd2&X#Wtg@?$W>|S0pUf4_cuB&>l|0$w;{O>z( zVz|E?nW9{>K~sKT-lM+?;__0A!W^4&g6*>1^kz2e>m~Zabm&x)rc<)HWL)q8Wp(8anMX)3Ut8 zRE}d$>^Bk1CBK%h{Xu4(kxs~&%OZD0gYODQBX(FPhJeP|M6j8P@hBM|63eBY6RwGT zBPj|L6Rrj4vLNe~+z6F-2^9ra+BV$+BEYrm=>@opmb_b7zery0mYwJ#D<#S-bD-w+ zV@}ttuO*8!FsBDWlcS&VKon}v;x`+kNSg8jT02RzGZyWmA|*m*KsBJdXacc8+C0tm z9}sc7^NG-^mxAbp+mjZpk%bx)gf~kyBomzamD=FJ3R>2afBMI}9YddJ>`c>WmrH|< z9Oa|9o+G2GAoRY!>`G@7+Obkp>mxEZ6DwTtdr47x*!WvCFp?vd>@@)nbgqrWe_#o%Q=Hzx4h`c5zWLh!B()ACC z$nq5x;jZePlct^~coYk$D?4hDstpPjZaqxGcll6IXx9g6C2);~wV~K7L-4;hgUS+& zpTw1g6c)3?dQ@N$+KnPB!5LwL)-f(;;6k(z9Ygg(ovJ{#nG&|oZXG7Pd&r4ePlie4 zluXxLw`im?Q~#-%l#Yv{A&_fIh9h{JUWe2wmCxssQ=wf(g-_ z1T^{l+d*%XIW8|VSkukEJIE*ckGRfMN(IN9l!|Teo4+H%GZHA(ncz$Gh}N@(GyV${ zs!4gcfiaY-j_paS+R(b6~FrDUj71uU}5UUG$_uJ^stb0GON!lnexxOrvT=2g^ z7t;w}Bg;xwDp?}tEi<7CR?CDRV?DimdLRjUZl(1sOFwqodw zJj)OvZ10vTsTSUwB!&{;r8=J8Ou$%%_8Dr#vUw=i+AquNFBSTCmameRA@LeF%WQj- zaa7zv3Z$pqHsNb6*ph5AZ|%@QDwL;$yKa!5+orp^eojj}br80r^;n_J@_hC-nw7Xz zY0n$(lRE8FFB=+NZZrt#xWcXzDk&qG7gw$@Z(Og}N=a%WV%!xM&PJv@gpqJ>@eB&t zFLQ+V=*v!;taHS4LozKAAdP&9o^*8md7Hu`Dr&4tvPjxf3kD=T(~7Fp(C*C=u{38Z zqb{4A!@sVsx6sajR>+Kp&Mvy5SLXQOicvu zXD-)Ma^#$p{=T$Gk25K^78CL3dSzj9kJh8HwFDW@I{2Bolnk-M;@oC= zE-2u6u-QP*7{gJfgae}p`#*^U#txAl*m@?X=F8bvDySDd9Ug)U3W?0}1`s4gors2p zJZfV#3bYXIZo}rH)B^DG%AA0#zpi{r%+D-|AT9Bgt{OldxLyXCqiIQsbD}K|`69;p zZ)+H0A_3KA91$_`T@)^%p=SxbttutXOsEFfVl@1izH3NJpe>077@2+@Ni1W;?+u+*qG)Q=MjUWW46 z$A%C$^-7i`n~_D1S>vQv5F3huGB8tZ2h9>fMR%0LL4}}ib@59fuIR27Ak#-0jRbB4 zR#ox?lk0ETO!K-`#I7d683&gdv&q>vig2>7FQ^n>_&jkD3Vk)#U@F+7=xJ_#H)fr< ztpqe`PSf5-pBR9~5@bm0r~{0kp`}9W1Wgg9%nN~w1oz|=JT{@b!^b*6iXfA!2v-F3 zYIUfQT(luFy{?v!>a?)bH^J} zeb*m{95i(Wi9BT1h+JIBWCLFW=@$1yeMT(P8&Zjvk1JBqzUp0+|AclQ;xyxosRK*dd_DMa4%v6o9Wu ziNtU*gXr|nZNfo72H1LzK1#aLP36BcF z-w7v+NcBg^pFkiuVj#+XSRv8m_*G_0W?rOC&?78uJ@b^p>oC;{}FRPY>=h|AK}wb^0L)Mazs@`wQxHX1cGajL@y;*Kq`&5uw%vfgRLvO84L zCHL-97Z}u;-f^#ICJ~SR#1%`n%b-Y`4lSikz!wU4L1^V7$hlXrI(5bpNEO0-aUiG4 z#-wZHF?p&GI${T#xf0@5OcDaZJNfu2pK~CRa_!e(XYAVW+YYOcuXLA^aJ3cGePhuMF(oY z+QMTKp7=e%5L9t#k~T;aS3%+d!SOpP(Pj`Ajz`jhS1oYBi+F?H_$Pp|&9H9p4S}T+ zBt9a!EYii32nxk(6I3u%R~y3H1r-z9XNbsw#g5qAFB=0=;wE1~8lLhIE03;x)J-|@ z0sOKN0#Pa;tB`6ZgY<0XnLIi)Y*01?4wzKA!El&c6GWKvUca&(qizDj<^r-7X{6K& z>?$D>9CUF4-|3TY#Bl(#v{+0NX{SShbwdigXghix0S$zxOgfQUi!M{80dR#CNdE{M z=wsr6{^jQKTQc!(vM9+>17w9>I2B<701SpvL>36qcl5Qyo__1{H%x~^50!JaDL1wiUqFFrgj+-@!mocUGYc=V>=k5)aZhD8 z)ll{|hih#fM!~X#jG895X#e=hs05K#{_Xzd{{Q~+{@?!V{^|bm{^kDF{{sI3wJRW7 z`!HB-7as!1R0If@fj5ceDU=N3J@$5ci1E+=qEe})|B zN7BpizqXo1LRxT9Wjj*+BE(vfzTOKR;LGLu(5H_zNJ?@hs>nhdM~6BfW*~^4eep$$ z(KD_8mEr87PE$mkbseH==-_L5?sv}OuSmB3+`yvgbh%pkxg8uV6To=whUwqmhOTCc1%y~ zXcuyYrZ|v5gXQSg9VIV#piYtrmMwWr{w?OOqk%2;%gt5rmI&REyijvvDB11x_Xtvz zNXF7e$#KFI2s=rlU!a|Dd`%<-RmX=bW;9xfiQ5nTNneUY?2;AS`2H=cjy(HymN}E- z*L535DKcW0WtQdB{I#0yX~XL)g{Jc0z6dI;ru-$wya@XBsWn%Spu&<~(;}nUoa>`x z1obk378UDy1o6YoT6Rc2HsZZg-5iwFv_ zmxqxTTyUnr-dgti#&DM zVBXY{yCH(X1N<-Wq=*ursb@gVSvCB{xW zu?RFYRV|q<%YZrps~}a;Y{^czK?YfK5eD&VUouHuMJ%d6wKlx$&$z!bwdU? z;W!>otr1r4gdYjCC^oEuq>cpU@ndMd6BwQ3TdJ=yo39@aM zpEYwWYqRu@l|hk#Q20q#ToV_m1qCohko#n=E4_$7x)V8Ff7|fGXtZCI{02zW;zrhz zx>^HtY_Sv_FxqWgx>^-s%HPjSRE?Nk?;op7Fqx7KP?U)M0G-B$=0HU*ALYnZ-D#I> z;w`c=Q-#TGWC+RPbfmO0ZURftD7*6eA-v zspZqcVoBQnr!IS^(1ckPbfW~+rwqul`BwW9DvF(vJD6aqoc)TSiG4>8$|p()pu*n8 zTZBptD8uB}iSDR4(P-1-%HX%t?+vo3-P8DGIf^5d*7e;3iUT|SOJZ^P5HB{tg zH}oR>d_=Jtkcut1ZHfnEdZe^Iz_idOu{8@n8+t2Ed@VTiTL0U)4uTFH>m;H@x#1KR zx(&6FF_AR%YAvZ-DRPc2C-yA9J6 zd;OXmY_~09tZ=*~CQ7{WuD=l|cSX?EkQKeWC!$1S%`cLRKBm-{44^m-^=rMQFu{B& z+d6`ezJfoD>E!lMn%kYYpH%t|73huHYRc1^rpo~I~OlPc_)icvH7 zrj%6zR5y95QqmwQ+nZNS!HdMU5X$POq@g02feFZwRut;V-(sb%%?KC5Bk+JgwTs3x z%1pFScF4EnGU;sM+iR0tz8b4VoATY;%41I^tP0g8<^5IC24-kP#|rr53EEVqOZ0{> zNv>XFR9-D}4vm&2s%o@&TP)KFG>qLhJYo_neDtO-3m))^SYgOk%@ZU{+?9DvqRNq- zm$IT1fls|FP*Dz}WEQfe)7nY(!h6e6V8EV?rV`mMr&W>Y)vWslV48l2iO7x2h2o9AmA3Q9ta!R>ZuZNhqAuxAnb|Z-VQXP0_!scg@@vQ-WI!*9sgZv)WUD$OF1K=))=;vXRh zV#!W6vei1SW=EEf8A+By*FC6txhSMQ)xjKkZOQfE*%(Arkn-JGI@NUmf8rHD5j zB*762l~pv@)YOrku0X|8Jyf|f22gme75bVL{b<>`?1L-0y<5^MV8%#M6Oe%ol8KcX zi_*~=b&^(Q(N*xmp^&2Pjt+Ijgk;qBh2|_9D^7_OE3+uL^i?aNf{mvcB*CO~Vx(|k z1vZE=5;I8jP9C8m`5G$fv2cK`REJ#fdaj zS!xj?c;^`~ie`?#IjnP~=P0TBm=d7{U>w`&%5|Et%@Re{`?4yavlJUio0i$xu!wSG zaqKLUkk!l$7r{bgO=*Ask7h@HYN|X<;H4UPeYF`%U5x1KhBjn6tcuXlJ#7BGCsRET zP1^nBck5q7FRPx1|M8$p(L(^l1&*hmaQT*2^e*9=msA! z(k2LFQuY^-X2OmWkLX2o^DMr@WOzE;F7EUv_ELg^g-_$Bq{2tmJx*xR#R;auaU4#A z*Jq9AS|oWDI@qDc7NojeWep&{L@uhq*JP-b6=oZ>2%j?r5;xH>m`cgzRn%I|-w1@H z(8LX-V!0VSNeC{NI#9xJ!QPNOdbyWg6wz4;G`o?C<3}hJm?)wy^*kW5Dwm2uG;lyg zyAe%>%e0X+j-NxG6^=%$f&lPbA}|oLFFdkl zXma|ntUVMKCoLDP*oIpd(ap3(=#IToPvo2FIEfLrnjDa>X3hkrjSx``S98#@7g)H& z2|mIb$HW9a(4uXSy2AuR1cS32sF70c7<`!q1PPOD!)Y)@TIzgN1_#fYP1e|+ivlH9 zB4j-gG#_nD&1tw)d@cG}jbV>q>Y;-K$-wb$79v`x`T>rbX_8LcRzf8NzHMfYka?1j zCQxuk^e%-3o2^-)rANwU&J6rT0m~5rBuBeMkx#U%0T&2ALWXWi%1W=AgC;kDM?~^C zAgOaiFTy`*Zw@L=Z?q(t{f4-+p%H?~&zMUZuucndrJE5soHV%Fgc9K1PH|YMm7wc0 zI8tQf=L_`>HNn%A39KoGR=%7JSQfvq#C4=aPEZI94F_Dt& zA?;p7$zxrUZxlrw`G^)rwZv#?Gl`6g2?)hQA!aK|3YP_*(N!Gml8DNUFwQHBE8RmU zDjO~oX`vClG(p-WBv?Rg5=bB~5`;c!mfOQ#D-)ml5MSHqAPS0tjTMp*qnt8V1&urt zS%Rt-3;alvnGu{Sm4qETXQAiLluF4}=?~Ef9A1e*X+ifbzDUx&;LAY{(77_vwxu88 z)D1eCkD_zmGUAP_SxNz9!iVqj*sw8(R}>veV7CX^W+d;*-LOd4v1jZ3)I_{cBq_R2+()lOKALUzzzt zH*6$J)BS{$Qz4>7A#z@lK zMWU3=w(}%^OnlP6UChLFbttga@l+YU_CibSp(hOX~cR zvjcw$q*d~yQ5AN@@)kymk|1`G@}ryES!&(+m9xL6^E=gP-7Uq@CamDCme*ui+*@gM zy2Q|ki7O@>=ayBi2dlPXPMqXj56?5lFLOjNdk)owm541B>|1Nwc zi^WcfA#F^iP6^f=eBru{l^vW8dzqqK#IBK@TV=~!RLbhHY3IY%mJg{Wb8hR9Y^6y# z!2uJ@+b$4ofsAL)rFe=YQq36(+Fe9a#y&dYof0i%;Vp`?`IM$G1(HD&k`%v?oJHc&2R?KEla`q9kd*D5AS&WSW>}S51qw(hQlb zkRV(#O7jy=e*F^E#Mi9$yl+mWXZUiuh$<2}{in-_x4)^fveQLtiR3|Co1(zk+KLhp z7${kOmm*7qnQ``3R)B9x7FVg6!V=9lg%*SqVwd5z7jJ@9l0beOPi8o{)8zPp1 z4y8gUNkba0MWqk+HRbnCSJrjn#x>aU&X{A%3Br$L&mGk;&b`b2bc-l(REn&|R2D3; zpGdNr#caDwL)^A&95+q$9>K#5ym*~Ercb){+zh0V6$o*MR1s!WQSXSJF1*S#PAQR@ zB{s&DAu7z6#6y%EFl!SpPqeFe>}X}3_tev<`M*jr$sO!U2MQP1^QIUdYlLt_Sx0!E zq|8WS^4F~DizF?f zE?OfejYRq{K#ECV)9OwUQl~c1PvoE8kDuHT6-bTyMg_$U<+woFtrE${m`BS zGE@J4ynvX5kletuS-G&h_)F&tsS(}1O+FL+n{5s+T9IU>kW@wUICjHnqi)SLQ$sr& z7$q#$JkYHcXGWq3lFp87rd1(IQYJT|`t)DyAZL-3@U|{v;uB^Y2xY1Y?ZWx>TDdNU zmMg}zR@wNY`@gDZ8^{0o;GqK83gBFcB-YwglIS;BbtjZlW>?QQd+zbcAv=4SjxfPr z6x|<~>AR&pQmQsP8?f3nbN^aoN@`rIqziLY(s7oR-iWA=1mwj#yCgy&J8RF%tXzgq z8myv2@QHg%(`%b`Rx2gpkq@&-Q5vh-qHSj$aI~RPr<}&^0O*$lXD)6u_6=pO7T8P6 zx)@wYPZdicGa)f9=P3pH78I~e>PY=! zgreP`aJG$R$)OA5w;Rd5zjOMO;a21iYiiKBS3?vbmYmSA!->6OyOk8broPcPpQX?t zMoqHw8@Is#!zV>-WbXSu(pt~eDih;N1UJ1COR)@ zfn17iB=x()cc`N#CL}2`Gu1Mzza!(WnTpi%fnfn(~rDw3M;@!fNN z)&{1<@9akV>leM7x)utq^1YdsHsAEAQ8)OPCT4YOB+~Jo(bDqmvaIlm<)0T<+!P_f zJKn^u9Ob=*W}EDuUmT>U3FNkXnXgLCd5r6B`T`N>k=8g)Ly~TZ7!<7PeEY z+92{C2-`s;)WQuAe^9vV^*I$Z#~ejD_Qq+nGf27mNXg9wICv;RR6LKL6CtanB)Ez5 zi(IRAPh;6L6>Sq3lJwdaY{Cu2Mos8-EA0s&?V)NAkA;d+-yR5OVDO}+<)&KfcwJfw zpAn)lA>}Khwg+-=G8>F{O#Ax@4*zcHkHz+x8Y^IQ`_duh8NwtUu{I%7Kx&N3K}+S- znISzyrUIg=-6Bc67^Fb#LQdMKXc*}>nv7`YGR1YVXn;#fBrlscl$(~~ya6!BsI%C;yA zuaLv@fu=a|63;(B7s5H9l8T)xuX8GtsTQPkKCFVm1S}p0K6pku7f>`4%p)P~6D2Ql z)RsgEMm_)00z63-bYv`QZDPmFFFb^l)PV|dNv|>@CQXfGCeBCccvRpjI()DE)iTx& z)Y3NWQiI6J$17BPTB&)t(GHyf2v#Yig18tnE&O1ogRSg5=jtNAH;BVt4 z(oYAlL{07rO6(SA8EJ7IG z%;A>9P^Eb3Gu3xm)#B|+{+AbvX4t0TAP^RhZZJ^_o76P6Bd84zb0W2}l}x|92$Txp zD5?CTrK!&eqi1pUrY}We4|=3WI!pWPGbY(7teLm0l$8~Cpb@$qtFTmqU2WY#$W46- zSA3X42_<#<(}EB|$}}q^3bG}I#tA5-fv6ZG5%d}%p(82JfjnSgyd9O2ol@a?d`r?w z6~%G+EokI5Q<{Lr3>}EmcWN>Vg(&DE?bBK(l!EajF6TirqGcSk!srGeWGj$m4kBX$ zu!$JBmr24ZcnJ{ZE@=0WF#}P-slq2A5u>%*$R^4f z2SmQ|Vca*_%*1~zC3_Letj|^%k&r_C6_PVaNQOr$&zz4>dk-kS8I9HceZ5nvKZ#=a z#87{MjzIz|@UGcp^|k_US<{i&EPU=%B zGZckz{St0{YDn0p!@$h^(IabKpMC`ga;<`Nh!`WI zI?2wiXBVUfbCM_RO$JA$f)tUbvzIIonl*A+$dHFt^(I;I86(&gjyRNK;)&wPF8*he z%4xM(DvH-qcw&_#NGop9L3$xm8t?>DcgDF7TP(b3_WK_AmX9Z8 zLnv#NmyE!Q05rNq}$^ECY$?Z3W-SL^j5x1+g}LMgPiP&`Roi9w=6#1IlM zLkt|av&V*&Qt*26mT5h$#(Lev6`DqN=)76A-AKL=AtTG~jcGC)O?)+Z@2}MqE&GMVOQcdf_3rAX->W)G z3QeVBXhk%%O=-OakUwM^_Ykm6463wJR>T>+@7pv^t#P*rQ&4J&gp`Rd=}lc3*@9a} zW=-4aZLW#=Lf)*{0m%8urmO{mSEWG|t!wj6x&?khG zqH=TYLdquo{CZ_LMnCm&h(d~1SDrGbqfIp=pr=l$$a>b=G-rA0J6T??|CcH8HW8IE z_~RrjlF)iLaS|6+)2(e*Z^)MJDt{fK%#g?UrS64NdR$&hdStVU+UV1|wvZ$K*4au* z$y@CY+*?>>-YQy><8b!%jM{J|A>ok3D?ZUb4?tKN7YS`22eeo|vNgg^V@p6Y_Wx|g& z6MHU`NfwIUifR2gc`j7b^Qf!HrJwoqE`vy=cITN9q8djQ%9}-bsUKx4N`66oRJo*} zj~@BL#_!syg6p*}C#v~n+fAHSLqwCgrp^5Ef(d6_Udza| zoXX7?MKmB#c%6PuRS9^#<$76s;w-4su!6*8VSI=ecyP-rypT+9vht!p_2y? zYozu;#OubtokSqgz_Bm$OYpIE}Y62rB3qK7rRuGa-Uh*!-%a0cJBZkNV2Ws#~3W@_BTop;E zhcs003Gu?nP=PgW`oe68T3>nr@&nDvw4?ZS@g^?m5d|01W+a=K5X1ReJDFkQr+iw5 zMF9gMC?@6-Tk_V(tVscN$`Pi#wu>q=YcClValwLPE|IFq1gIuT7t{?Y7C};EgbTz8 zINNBTcBPZiWJqRtCkY@}S3yTxGa&>z6vKGRS&Pv_=O=M2gSQU@36*(aSfO%7u4N+3 z;JYJQ6Ui*1df0Gm`fM>OQcHZDp}KqWS(L^ZWkZFFzh6gPa1vJQy2df{3?rum2I^Zg zBhDt`&SM!?8hDE>LrVIE@9Q*zkG46Hd>~3{qi@kJ5uPmIX@1??8!Rk}_*r=vAXSqX zZyY&x(kNLSNGqK>5J{xYt@I5Hj!kTx1|o zo=@B|qs$mi@On*h;V4u_K!9GRB%`*Df(3MMrYoDYq~=_mukAjT(}AKEF6_zJjvx z5(}C{WTFf;4l4uFo{@BgJT09fMm!WKlK+l5i&IE91iiYJDk|f%8pMiRxi>`!U`r|{ zBdxRy#E^($$BHhX>7oc8Wa=(IBE&37gDiNAcF`p|s!Df+kL^hhyeQ615$UVYjNAF> zAbBjA;LGJ2!Gb|srONv1a;O$nLV7%%p#es6TawEcnFO`TW;0MC}8@^J>mRC08)4GWtIL5TkpBvHf_yR&prP60u27IO5&y)sJSLUUo{yEqM` zgFLE@S>U-=D8^zeb?m9Z){mG;v4MO+;>S|TD?_?jY|AGg{QFK-52zso(n4ABezop) zWe8N>b0gE_DWqe~R_x{Gl+PMfdu{%YTv@@q9hoT$OL;q#KBgW*vq`PKx@8}+uDOm} zGPQCFCQWETMg3__zi9B8jTL#b+%hayXk3NKid?CKuO43snx5jCo-DlfWR)0ETi)uV zJo`r`Y87+5FeyNTWzshq;l|YM z4O>kShfVJ#s$5#GI4(uCk~R$zI5pIW{Z>=U%Fw2@)3lOyIErM{+lGAlt9HFg)zB0x=w2#HN&g~ekvu-AUqZIhwp=>|(Wx7d>_Ot&BTnyeyFNe7kDc3$s2LTa$J zvEnGPq!TShS1W-8&`UH_Pb$60JygGckxRa7q69@u6I03tgRCr8hf6lui9)5A{!rm} zH<>pa60anWqc_qey&#naOA>mUS%y5$!-4o$U_UTNSw@W_8o%)*rwl5-H{Ls1j!#{DEkQ= zAtuY%wT#uN=>oAVq}93&$wE0ykuTj=wh<+vA{KyEHFt#p2X`;rh>>ofX5S<@Bm2D7 zl-*g=<4*?52w3$>v-7|Jchbu+Me*4J>8OXe4XP`J#EK3m70Hs6!px~zX(H#i z@o^*M5#w452r^6hBwR|eauZamQ`n6f?30Lj`AfIG4gYDycNCH{Q@kh};hOGLzPE(g zFo20~FhVM@=Oy70r*5Xi3$$iIFjMuh*Q}D(-lXxlL91Qh#5mFJMZSJlUDw zZ6vH^e|ZCEr1LqNtIHr(+i%@lzXuM4G-K zoeJYSLm>?CEM|^p_Dy_lm@%~CDx+mfl3l+86pOiPYMxyP<-WJCQn@o0PdO* zGcv@~K*<0r6ucl^A<`J|fwup_!#X@nX29yDSlToy?>1)c0(B*u`T zE{?gS_zEJ~WMX=V36CQUQ{{+ve^io3&pQzK9C5EZ9R!BNWEDs_kzgXJQL4!Cp0M+( ziT%tJb=@XxfR>!F>MSR7#GBa)I?@(U@kCkD25eu+oaaEATCsOAyZWyK;x+Cg5ehkFEvvJ3ur;0n1n|-uzEa5(GQ?e zFj)sV#fi{cJec@N3)Hfv)+2Hp381grnL!|n4#5I)Z$;suI5iQuYvtS^U*(?=d0-Jh zHFJpcrh<mGo|@fNIX+(V1B+VAsdsU ztG%KKl0E&6oPt7ucl^f9wE}EEY9R{XX53*___T=(&CQB%$Vat6cv@OauU|MNtO7IO z(u;wIa~VW%z_|c}gCfMPAn~~!7)3rqc;XXx&b;&T5j&*2%ngP7P@ayT6&4TpQKZfr z21@k84=F%^E3u{iK!A<{5AXw3xPy62!3>-!0Vqc4QXvf<>jW~cx}t=;7kL-wP3@xL zQDGRjq&PXlLASb+JPR11!y$4jp3J&T>|lugT-0C z&WaoTV*FYa$1wR4dugvGwKJ)=Y?_jkXJ<%}mLzhL%TyFrr4bh|i-~Y`4s@!A1;i^9 zQ`LPfwrb-pQ|yZ7|HijV1Us`rozWSAYxqogS#&#+-mk0?D^^8`d3UCu+K9W#GkkUdN1})}8lPj;pH7 z_hJrHhzQ7XOo3L4P?cxA%LGl)&fyb3h!cC7HeN*8A3bNm8G|oWLCZC^!@BDA4JWWH+^XzE2B{VrYf)f;RbrQS$gtij}X1e!@3_d{S4@9>iM)SqlvreEqbro zJD`bOJVR$~?OA00sGg7GB(JhN0*zsnAEc7vWulq2nj?fXz`3Fru~SSAn$Q&*yW<THJ#77+|C%u?EZoP=5{Z9Z#0bb{UGT>DiSOP=5LbPQ8m7C| z5iz{z*5UMI={}?E$#_K*1tdmoR#~F$Ucza~&x;`;UzxeFU%C``MGn;A=P&teig&cp zb4dI5?SUEq%L_~R+Dk9Ifh|{?=pyCW6Gv~hdhW>@po%l$KdU!twEEw|Bx7Edr>Dc` zjz)Bu8n{&F?QZ?n7{)xT7mRgT_cLM{kK? zQPQ@g#!)x0h}^ZJDIIJO)O2RV(OyHNaB@5%YXz^}Oh-7X3E$1jVn2SciyWg?`FzQx zLsBg!PXcSLW7P>0-s@U>r=$p;*^zqG551jV>sKsdbt@F}=Oju{Q9r)6_Q(~gxRVik z>V!BD1yUR1AJ?pTAG*0zJX1swblou~Mkr4g%OiR6%1rUq_W?{zDrabpq~Fei3+Ew; zEc+p|>XoB~RBFw+QA(RsM6C$3qBfdJ$sF{XEr623UGjYS3=MU)hE-zjVo$A10(v?Y zU${hcAPuW&^N^{OOO{7QYSaltFY%^>VMJeJ0H~)Zk|Y*HnB{^a2L||@ObMRLj_0go zqbfFko(YKw9UJJz3IxjisFfh!7I&X4{MJ;>7|ye4m?k-Vg;LIeWr&K8C-FTgCI6yd z&&@C+2uNImyI^F=M5lxY$6$EFK==%Tgoa5)!!#gOMO8?oxJ}K8wF1Qvu>?0$rlkCV z4FG(AB)&8{Vk8x{Mt)ju8Hn%00> zWC`$#ITSi0B{ZWo(XSA8R#3Q|nbO_E0If|$PVVYfHL5#_M@{pUDyTQ0r`O3F@R7M& zX0?$x&9AWi@)CE^`(j$*Q*EkB95K$=-Ekro?rT`^4XtIljNrJvf&Lx9g$wo==OqTM|OSGCjM&?Vo9qh;%V0) z$hgNYsn5xgu`cZdYZJT<{+-f@!(iHh$pyub2hCBllWt}k0;2_+0uTZs6eg~Ov~|M* zE*IXYB49ak<4A!Ju&^RDM4HMcbf)gkk{WUOvzy&8keO_(z?~c!h?B|&?9$?dNlg0O zNE8`?Sc@InTtzT(`QSw8Tedm%K{l!wFzy0-cyxwbC4;H?0E(bdvZbOj;trxIG4huP z8B3y2;}E`_HjqFOnN16j*=3C|eJiR%shkr~A@qdE43r}P!ohk0azja$r2m_aBAzbvN+wBKZ{m=!8WUV?Hy#BKg<>eF;VX#x<*$4h62er+&yZlc+7^D* zP6B)+N;Va23?gL{mqJ42A|PdA#M@D)4bh}>qh}Is+|&sXfQ*C&ju$^2vQjvaAzvsa z912O%TYSohhqFQo(6TSAp~wZuN#6z$J)n|2z}niHoA$ zNtRJ0B=p;`i9wfzv|b7D((lycCm)>zFck@J;mJN*%(hUHE&^gn7>d`~Ejq}y6BIBJ zV}Bu0F2Zk@(m+9Fgu?UsA#3>2SPHN*aA1scqU5K8S4W;@@(Xb&FHn+_?B2e4LV~*x zfJi`8PByT?<`a;1Wu9H*EE-N(MU{nc3V(AjWvRE3J zoe?N;S^Qw>09d%;R#|j$K?*95)P(C^$f*ymg1C!Ivay_Y69LD??FbmoyseTOISFNrWQY7pY1c zkDQSO2k|$_2}G4r9iCP|a@UYB;M?Coz^$qqKHtdSfUh;-;hO9&6CKE z>`+Kju5wQkyzOsa)M>vq@ybY3pn{^odl%T39~#RN$9bP}j&)y{NZ#KQX2UyBQ@t1z zC;F@i&_s^6ZXq=dvaw%8R0m3)%41AnirfU?ZtJ*tpOM6c7#s<_{pdS zpH>B>1&IZ91#SgZ1tkRx1os5`1n2~{1fR7ZF9sq1ppo`?fbR_d$OMGIKL)idNZXDG z9WWw9$wDUI?bStJ1&)j{dD9LSa9DJqw@M5QATYF{z>vYSqzD~0aIm9-K{5ia6ln2t zf6V5Ycm;olQc=4hxo1V=NApNA||Zgci2mLgvXfOp3_V zLgCmDOTnh3JlW?Cyz?opK@Cb0rZ8EmOxQ8H)GFpagCut<&>ro4ec zSIZD)!3I2dn`#sc5K+S~*=0d9BMEhkK+}Q*PBJ#jH&{d5a*_SZ=?-qU?L7L1Q?6`u z^=z_cWeJM5b+3_PSh&MyT^UuwO9euyXVJzo#-4jg5%~5w%_-8#lnE6+MfnGdH?y_V zDiKdrN1s4J`lf^u84xnrHqb5437}62DlVW;UYNw8<6?tGgd63Gq;Wx65yGqVBl=P+ zpBH?q##$XfgKX{Yt@e8Nnm*shjO}D7WF$Z$*n(RzCOSk+UXpc7`1>EPG(c&BqvpmR z!#W8mCGwcqsR~ij(}eC2_+Y@v!NMh4|7+qT2)q4W9W*TVy8OI|$Uu=|WRDIf^91cy zqmOBCKzHGlowh-cR7^Z3RcEZ3WWMSV=7naEQ3G1@Dk6Nr0yIR(6Hx`SkiQJwLIv1N~3^?d^%0#P-Kuz z2{b9OPF|H&g%8q@(5ayj0j9>5E>K*lwzexL&OZ<8HCL3-z*xvARmGed7#bR=^rDZF z2v1$v-%!OIl1em$5g8L~n%D>(sBEz{-FY8>5wo{i#72yk7J6({CPeDGmO^@`6%e@5 zNg8z@sBG}~$%aBlP6!K=`>=tSPyIWa!KAO$%Nmc4f@1?J%e7k}L6DU)I`c2qtYCzV zC%zv%C?t5$XfzAXE;o&9rfs#s8P|=p%TS8&X$h^R_Ph8f_#+jK_v%; zor2)N;gS^c2!)lPeudiu5&mH+G+9M&tt&n{O>jj`CR1k30WP$4Bx_grzT0PfJ}Bvd zAVENoO?AqYC3BsywnlOx3GW^_VnuEL8U+en4Fq2+#`LO`wbn^X6nB}uul`&_G*nID z0ns;&DT7ot)<)I`DCsp+Y7CK-#Yj zqs?6eT&*3kwDTi3Bj-zL6~(OMEtpu^V@?ZNr6l=UWv?#(9%^i>XwsDu1YC%@KtSbU zFDIFONx84-)bf@dGA)8a53oqeIQ4@zQwf)*rpmX5&718+ZIdVxT)P#;)<{))51kdj zj|M`Glh#HjA{nb@T`eXAUsUox1$HAwPB`(#nL=iTkqN2;iy15=&BL??$`zU{+ANbQ zR@yR&P36X?DY5M}5K)t9a$9?1iL2={OYrY>?ue;QAv|TX?qev)`DUdA2pB7M_C&Yx zYM4}cYTC-wsX|-kqC{R%@Rw$%YmXIU_XuMD0-)tv zaWck*c2tR>OR+m3X{6dAe_{eyFqFz9-0vwxE%8$zP$=|QKL}wc2@HQyhE7R^P?6xS zlQ5AwGenKiukevzbSb6xVs#0WVGAz&P?i$JHL=%BJ|b4g5FV#aq45E{hY_?Ep+;b2 zHERe(ha#eMZ4=#DRoH*Yp)=Mh1SN$QEkpHfXyH&nxTST$zak>UiK;hu%^?>?=0!#Q zF*OFnDKf3XK2$^`Bk6!eXlpqhP8fKHZr_3>QiC|dp^0$`!v0rtE$kYIBpV@xlYzeG<*87_Nh=>!= zQk|v^i-JUKbQ!jql?WLdsz_SB1FX;^?}Xp*wrmO!25wRtW>Ay#@05vI5XLf}f~^Iq zk)0+DSt4OUYlH-_W%oM>3)j%RKzMgwiwuMDcS%c!ycHbr6by=+y9p2ca?sH#8%-r` z2*l}I^JX%&DEg!!czE^n`X!Qc=w78P#W4{X)0AVHlG-si zwHUa~k^x=pm#ABDv{|;U^kn*3aMSE9E#I`DnMe(0!j)@}4&(JzjD&z%EZtaOLY)KE zi(QY6%^nE*>jVNpukxaxTsI?7nHBco42&@Ll!I{qu!lKz%JI;QvRiHupg`&GPnJ0| zqRR5LxVVm_Y{;xf*1NX)7*ZIwXkxMiL1wBJ1tM|<30X&w#4v`IjZ6=G8wTQrzwp5L zYYvA%#F?#=2F1XhCtSD95yCXwOe-TCOLl#X7BBREZO8ivvxKOZwG0P%4z)uyEQx&B z)FwQ7a!C*E=PqMtMZb?xh(=s@XC|AZgE1LspsB4CIL(Nmi?l>?3>iJg0?>#dba<(F zw|&9U4v}rm9B6v%DxI`ww`*hs4GiW%_^VM^f}hb^w7epavVkAFiz{F!Y$W8rG%$C` zCp(BZe25XTWcrq4MFP2?xVnnSjr4ZRRS;#lj!0uc`^O|k!7YPh7ZwT1Gi>aWx#Cmi zrChC5gi#>Cjq+`A~N%O_61TNm`XAvadWV6ZEHymRPY5Qp$k|xPYCnRSDMVvp^RB2Ht zab0ptL~9b)Mo5ZD-54EYP7s++K@1(G)G9Ca((z{q0#!?5q}hUayMi>8lOZQ)htkVA zlk`(V3MK9iRXVH6QO^DNq1B&Q&jYfpVjXBtF`ws=5+g%XNvhP3&l7t*GuoouYYG#> zR?Bpo=aXxMZzh9R(iIqzrn9Q$CZ~DbkS9TCyM2OJGm=%&f_cqRHj!yerkYlfqJI#i zncR5U@@34>9JHBqFw~ZZ=3hNsyj+q)2F>wrHN}KxUE*s(gv*hniC6!UyuNo^5+#hS z)HWgb(Rn|bvY>>L2_aCW-HZ_Rk_U6zpIneO>fQ5S3J*$}UxY*iGe4`D$sZCYojhIq zr)OEVwHw+Bt&(J9rPg_wE)}Bv21w=Yl%PWO&;}Ja4x* zHAK6E9}}RRv^di}8~aa`Y?4l4MrBt%z=o~5n+&IiW$)oyF1=JUqq;laJyeZ@^-g1L zy>ZO-bB-xvS{Is0#Qmq|6^o$42!F;r5x1bX*_c8eWhsPTG$YkKG>fY&zeI!Krs%tw z-NrZ35R(axOr~Dza$nRpUxrR3#Y>LuYf0&bm zc9cc#LHf+*Pb=DjFrc_fP8+g0_aw|q!PCW^%!|oHZd}8phRIQfdS<7Q79(*r9b0#- z@$rI#FRTK*L`dW?71Ji9i}Fvc^IlKgKV`(U`)tCBEstLcnMR)qU^ z8>$QEI=yl#JZ*&U!e}n=Zeq0xFSTqbU36ctQ#MY8<8nkuccgYAE%-O`*JtE}Opb>H z&210VUL=A$F6Y*zmt-nYDHSaKvSmVM8$y4O?VO_a+Arfbs}U12YI!!^-bcdl$NRbX znZjxAdJ%BgSSn)gtJ!2&b+p!_s&_UO;k5X;aP3Hpu-kEF>`~);S5KR%O8(+I5{w;I z`cQo(K9Cpg3A?>~9 zE?CN+`s_j$?41q7JfUc<&29b1a$^>|d*ZWpd()!SKBGg(N0xy?fMAH(N1HOj9qm=zHdR zb$_!I82G$b&$r^HL7AOudMn6RP@JTVuflyxPRq_~x4%fs|IU)BX&vE{;*BmxEiv4= zF8i*j33J}JQ^^Z1Sz<=*DG5Ekz&XU_&re&oLWTONRieia3IE&wd#`Pb(=9KdYxI@7wIYDTN$%`*E<$fa4=HAE8iymwPs8hGEeHZ5Yc8XwiK zLSmm)>dxNWIiYg%l5X%sP37Ge2yjIubTG-Kr6nX}IsZhcdl>0@R=+8~_hB9;Zf%k2 zDEHePnju7~wwx7$f)9STDly{TGSr<62{$)j=LSE;%!#){jio!6!h{!)Gq6uleU0#R zbZxGXCNEhdt}kv!l0Q@WC1>E3ZvLEzt1V-;25o=1y>k@eR0A;w%iFv9Wd{Yx3yB3( z<3~oBnN%l+$=bJK?&b+nk+LJV{2i6khQy|Nip*1r%Sa_F)o&2QU6HiJxg1cbFB)KC zm5;=@-qjjgz*8wJt*GXla+lRIm4(v+^_QST~$ zc1zTDu@IRSONqMJF}4xA6dCs2S-W|OwoN6Z8D;v+`iF8Ug1ikiQC;kK1RXNrYw1txRPx|-@%mdjfr;~rdJ{vYa3b%L1L zFjlq{8vaze;$upZT(q2u`5%(&fSSNY56jo8*CSP{=``okzCPK?Ox;;}-&(JK8M`|rI=lCoUYSGkNA(fm6EoY>rB{j{8LY4F6QmyyY}Ij** zg`{GXtOFGA{8JOCSqd^r$hemB0TsCy9FpTJ@;5+-{NdumM;y|PAi`oue(c2~rSH~+ zHKI4~;XS3_88wzwgO3oxyCQARZ^*6M0f@vF`3C0?#Q!4XB1Et^xumL+S~tHK{}8q3 zEE^@6I8mvG9znSg#%cu!5HM==CHICwn^$l2z+ISM;gX4`>oqlz%(G;(8I*|Z+{^W_ zo6hnvv_l&a6A&Fpy;fZoKw|f{D(@Hila&mJU#nDIqqpR4s5NPR(5y+gQ#U%i2t=`s z9=3SkV=;vX%mRvx7|3+`b1|Ajp~_NMt(3a9R;Q7#u>D#yf{8?X)M2?C!}*`eM)&q= z12HzD0%etGnrc{(WT`^!xHVi9qs!5JL@G+3gww&Qwq(f+En2e0+0^Sns~gjgNF%s1 z3`#vDSgAtfj2dY>l4fG>Gipk645L=#65|r_aE7w(E~qzRP^8bq zThe%P1L1*eCPm7xDw%_W;}wtHK3e7xj;Y_q*X${AR?c%Rf|>QXoD1^1JV-|;Lp{{s z_=xRdW`~xOEp0N#c|7T1@}Y>A{I{_Q9NqCuJ=Mdqr)at%5wFrt7KxY!beQf-%Y6yD zwaIZ{@jK#_L9)aErE4K@>hvS#bx7;B;J=VW$mG{c5G=kWBKB+QD=jXml70=yW6xn) zLba|Q*g%m5-bXl&6^6(Ze3!(5(TOBNA=+egtUc9C(!8GSL@(zi-3n2IHl*6ee-H@h z253eST#_*|i{-4wq9o6yl+j>G$KvEDVX*(TCVI4NO6^pBh(OQHpo<=%vom9mo>G$G zTQ;h-xJdlcF4YT)W=7~p;*huyPjms5xD&W*j2x5{?nL=4XLutwW?ZLo6N$?w8_$RxP3v}UcQ@c|)6!GWKv2SRef+y(%S_d%y$p@GjV8JeSL;X~5oBNyI& z5SHpy8cfD#p)eu|z>dC^4>&V1GDsv!FnFZ+z3MfB=Y**ipz)HTQe)S>!OBUVP!+s? zIDuifLSwa2?peTZH`P-CKVn$W=+rJ5G0d52cjSlHlrK9j92x2mAjST2Zo1q=7@h7& zo&?=Xj|F&TI;its!35(G85CilYV_IE!7lVIlu14+iHL2F6RXH#?vh1iDSWt($r|-B zE#oBNh%y=#_f(*rkdw0SMyAsmm=8;Y$mWgX@oJ@uJjuqDgZ@Isf{O`Xi0J(2xwv+W zVbM$GflVttiYnkxA_H6o#yeh^u|N#Wc=TlelE9Res6iy2P;4hBDd5nO^TYAXMe8am z5vVLJHxU{IEgv)5fde%sEvnGtTJbqdsYS0Ejao%#441c_RwWz~rxa{MiSOyQC}e-Q zjNqh)Ct!A=j#qf#YFuhYjWRJdLRSgXH{?)X zC$bt?t*U5EF9hLsIF~ zjNg2*FyzIlWZETWSh=Zkl65Xyd^93gsQ;E)YVhX;R1ccJ zlAQ@tpI3e=%Nq8ot(K2RNj;za+I&pW$ZI<1Cl|PdzedF^=&n6gqq>)zFt6B6;CIikY$BqF6$7Mijo zR(!3?XnGM|F)dIF6E*br?ECAjHf-l9`FQTamWv_1zNh8{A6ncaP(UAM8|&h-VWY9` zi3D9%0Kp_TAj{Wq6#77&)$+Oi(5V$>Qn!nb$L)(p}!eUce2*$?w0ZH*Q()ZBcHSt`b;2O5x_D>p7V zK7y)tb5AscNk4NB!Aj;%%c4qe!io#Z8A`@dAK#TMSza5xhWx$zYzonGDiE4PYjp}O zwxpTDdI^HFEQJ0Z3ubi1IJ9wGJSd;yQ# zsf{OBf^)+PQrapCc3mD7FBNr`m- z=7x2M+G%^-+*RMp_BcU5XL$Y8YW7=!1uxWA$u4uc(!Bi!V=J`x?K)($q}SRcI6d{xX&;{aT4R?RU3iMk^g z)p(f$LRFW?4|G8->0?NnUY+T3ks{PY@`WR0+AM`xop_LHMan)eb1^U->UXhX{ zb#=WBN@l=|;wa=!?)``u<+woh_sCg=EUr-S=#^~brroFz^oUGDj0-|(;Qj^azpDw8 zxH`ULwcP7lL?slrRh-d&O)FUC@r#a)Shz+^!V926U+foHqezjNGh1M0^lG38& zWbCu6EM?=xQZu;#Q$Vc0X#%(z&|t2v5o$#%VQyS)rm2&`m&xcwCEGEDsdrh`-Zr2z z|92Ls6_7c_A_^^6N-P}=$t!_!7Ra9QhLESX)e8%rM}VDL+#MW9Kxaa{uj1&gP)Gc9 z6@5IUxZ23*oG>Y1x0+q(`(7-0(UG5U?7e1y}@Knu#oQqL3 ze9x(Fk82QI*CpL6%DuGN^m{QGuvD0NhwD_K3oFN#+G&KF;y{A*^tCFzqw4%Eg?NIp zMo<23NJ)CRU?up-VchHcvJ_NVv!zvDj&D+Z0)(8Uoz*u&+Z`fUhSgZS^>3Q4Kuwc$ zX|3X8u3+ZU?$u9w3E=taVrtqss)e5r{SKAv)3k|8qiF9)xnaX6tqA&2{6+|Q8X;gM z>A?t^RfGhq2K8i#v#2@ux5&lYdwPC=(YgQl$ruOMR{tgcLH|SlPye3(y8pWW*Z>Fs zCjdzRWwj-r{|~Q~c$Ub27#WRc><4#x1c-~8pUP7sD0mRyIs>8LIGgLe?~ z02O2`KIFt8Uq4{B#aUP+N%0YpA%p;B;lgCVmBmATvcU=shr$OlP^so95fEK@oKc+_ zqnZ&U>IikwMrWtms!rg7J^A&#dNtq~HD`qYH?Sx`RomH%IM~V!mR#VVP5M-}?}B*O z8z8cM5h|f*t{`CgA2!Vk2aABH;5;S~wZjB>*nzX7&TN^{t+p()AepB$ zWdxKrOqYm}5W<1i;2QkTpBw{$Q@vqqD*7ZACPE39HK*$FRW4eAR4(Zv$cT_GfM~hd zAd)kbkY_sI6f+DIMuc|x;R>1PsX>P6=4ykj@)2^GGz!B46+0ZTmeA=_;X=YO3Ib^t zVW_u6mJO&`zX^;hmQ-5h$we`jg%L>55!7oHB_d&gGVvH8Qg7((j0`|On{1&8h_ECg zE{#|N-v#kxI#3^BMy5s-09b+TSxC!ur}i zUo;>{P8uGdGifRsSP{z{=vf0JGvUvd5YHLmtd8vfgba`!@{c0PM6Z_dv`T7S83a1F znS7E#vIstSXqYF#D*eruTSCdYgw%A}ga?Mu-8b$s$9)CV5D~gg`H$JhiQHtcK+UGA z5QQb59+9%5o;n1E_uLu;QU;%5!ZCHktaw+On30$~7aTBwe8%<80@qIgvj!4h%IfYH zA`2uh=!~Uswi9I&ilqeLSyE^Vc%Zp7-UWxlp+eE`tvmiR5WN!<1dxM#QjExKV}%yL zZYRB;^9IMSNC=jov6vDgvk88Vun;n543>C7T{D=bQ1yN)@WMW0;MoO$h6YX1gU0D$ zM`(d`$Pl9HbmyiO5EliEFWT-#WnJ;8I8eP^YcZEoq41m++Hfw++n zB$%5agA|@j%;ClVeuB%v80kxS@$}RbpTeUuTpn!`nebU#20!;@}?1RM0iZC*f#mwvw*M(^#km)}h zaEwtxkBn9jF_JkDH=uzabw~?LpW8SsoIDAXgUs`Zj819Boo&E4GWs}H2WlBQ`5(%U>!A^sAKPBsx3|G>ceKZ^!A zV0`3Od~w*5EMCWyQe^(ACzo5=CtyS4_{dQr_93dzA|Zwe=ES5BWDUL$5?Cj*6tl(7 z&18-S!k}@}Tp99m5DmIODAGW<>7hX-9Yj?}z9iDFCT!6K&@eaC9Pq1&;j;o288d*e zO=9XEKa{dXi--a$Q99WHLv%1Rh;X7*NU!sOC7CFVG?_97DV59Fg3;sU$&EQcx_d!1 z{JTsa-OCYOX)hE9s$|hrn+pmJje`t^J|-~V(HboKcuIsLeBX*JJ&EyPDRh zT!^uH5NI3&qh$#=Dkw|fK>7l+1sqioQV$-%NruWBiYCBQsQBCts|MyJ(J_Cb_~4(e zH=)CRBWj3&Y-;}4*9kVxhAXNvc~RkUq@lq6kCvMYnmY6C%@oy`i%yXSN|Y_eUpJeH z475~8FpYCKR2FDfCO3l#vL(UA5jKpFp(PFYWur+fL}fGlE-K%pz(kAXD&yuuBS~Gs z69j{&4Nr$cK$wt*Q~J^%5H@;kKXnCQQBzDBMEOL4xE}?6fh&bVxH!<74v^C9E}FrS zj68LWL$ptyrxdKF1g_z>3zmFLXklS1x4Wa)kB*xpcsd1S`2m1Ypgs-UN+^uI#2qZp zqRg4EZAK9eb2dp>&`lv?ltv#2Wddj)4E13XD4LGeB1&Q;nURr-86$1@!#pl3NabNwgd7k(AG_s&T?M{A8FN+=;F^azqBi=0RFA={?c) zI7SD=%FwGuL1ioS6<_2VWXp1)m`G^Z9zjMZSur5kV^-Om8)Kq5T}EiZJqnG^SFHur zFe&2;lP@lgp<;(k=Pjs6f!O=k!^(Q*zUn`S?241YM4BcAT?kmXS9B^CZ9xqbTud3t zK_>PxOoVMnCWZtALmxTe5eE@Pu~R~N2#pDyq3VpY1QmSVDyl~wpVrBj{7l+Tn5+UJ zAyPyWb3zR|NwkC_z(lE3Dt->z!F!}u6&XN^Hl!P?_}NBV@x!ME1)^x~ za_}%#VN?+_(CmeT|E26MuEQlZNwwJU!j9Y#Y2OnQSe`WDA>UVScyLLiyhwCWWu0h*WnTN~-M94x6>sK?|;HnU_6I`_+(vE`r2{IXdQ!A#QSy7E?;eIXO9{F(!J zX_ac7c~gCG)WWM7!@`Bc5X;BQIsCUL{8qkZ4gN`?Ub`B`lB}E&nLOF0DQa_1|LS9t z`!KusWYtv~L|D?I((5$JH@(n9EVsl-p1AObMQPK=w}NX|8A5?JEYD?6;u4ZQdh;HX z?y|6;#?Fo_xsq-9Bkc|9BaF}G(Nh;}RPDT#T)5eBCBoWbqdYs}(&$#b18CZk7iA)iyoH^g}EmB93gE z78B8#YZ)*9ifMg9TX&&vYBp`NV`@WY-6i+?Q}S>69?{p^mMAQv7Rwq!tB;tA7@B|U zKiT8zhAv1vZAw+>5z2{@qQM8vxJj}iS9p7wUgjEy zWi?;y>Y}U2p9+Zwn?OLbqz=t#GdnGr_?)-WmwlJU!lg}~GJ&)tJK-882?*#nua~c& zwelDmB-*8s3V?t>bWN;n927Ui-X*HY-G-;N`hLue{>t8TnAxYxFPD=&^?msT2$1@F zm9et9Qdx#mE;ev@DisYGSdn$6DRE6FsOuYrWNJs^bN=ihp4tS8jS?#)fv)0xy7+-Z z2@Ki~dZHtw>e$Yu zwVVi&Wnmh(KhnWMCzuu!E@&bu7YhrV8Z7VDk+%7>75ar?$T@xlJCMAEdYQd2qG)W(c4+ViRpg0f;gw8xrBwQ>QXv?zG zP*NueL0DQZ1|hf-gVBh_b#K_;+aKHC-ap?@;t%7WKjt4e?YPI$8zl8 zR)ct$0oX+NXiL#O=n7G)vSKt*Oj<^fme0jv4N$6ut9;ZT&UWSn=w`Jg#Ikye57VPe z=w^WAV1WHEq!Fv7!<$LzX_XAf`B^WCYF3c`h+goK79=ZEkT@fy+DmQeYHjgqjn$H3 zuDur3uWlFo|9@OsL>Q62l>{wsmpwb5xe&prGW0F_SJS1qw}NQpRF6?V<=lAxmx*2c zPb?QEtZ(@0yw34WIel3e1$|WI5Ra{zw6;?^bR@Ou9&)sAR>}WqE~wT0n>6gXDx|HA z65$DNY8+}p&kNy||B4*q{Wa9@8`xpSe0uwmRe2*W)W_uglXB+>a(dN7aWlr^+?i=O z?)4eJTk=R!8ol(C>kKB`M~sS3R0S>N@u#iZEcoQGfoUgy;{ zcg{#)w5QB7Lz-TqL)^7V84CR%rl^qArlsU?DC-A4iP5g0gFDrYY(?rvt?ZuzHC*4r z|69gPuMb_R@>UszXj2n>_qS^BnN3q@#dY4N>NmDFp>6AWOZsO2qW7a0HzxNVS*-SM*5A4m1*x=STGT1wuu(xt zxRy+vd(|R$5MoMNqbxUj1in^;_Q>N}<3YTRYI#AK83Xlxu2#TLx1A{`bIdsrJ!c)r z3|XjSE(-j2o|b4@PZxG^H!9}7!Z))Lu(6ltsNhcPG&ABxfnTn#ZmzT&`xSZTZ3z3f z$2QKXTDx6Ty!SQfJ#ieXSfV#;R~T2&?Jnq^Ufu4sw=7K5-k+`J`H;8CI|QDmW>XU- z%1G7sbLBTBpp2IrNim9%eODleJ%-c=gsw@|B~IB9TGDchT(Xl=|9-)K@g_5qn6IxG zxrvaL2RS9GJ@2)Q(%sV+>|jiuw`{Svm5ob@c;0tEluTP3H^bYT9d?%2^z=kqtNtgQ zHfFh_|K(aCgzoe$ZX`e@LeQ0;7s=eqH&ePA$k<~&tC<>vsum^bIf{y+(OC()#g!}T zQCw}bYUc!g)jO=oVsHM7D~+g!F=soYMeC3_bR#CSmZTMsvKy8=V(^A?;Gx*r88W1V1ARF9U@J>vSUzZnB9y8zi5wHguWD+C)ORP!pVUH)f2kl`y=|V$ zbuCB`!7JQIxr2?#=+j)GZld{6?PTS3N0L@NP?~(+qeIhdxjRof2z^vmn!V*j=lg2c zE@8`KG@I`WDa%_ph%&a_1Q z;z;(C+%<5xrX1UyPhj2?g6Yn`*qT!x&Mr$s6m(4ou!ps9@HGt2jvmghAh_KB~JkF>MEg1XwOpJhr@ zuU#0kt9h9k$d&Djj5~}F$olLe)KAVyET)tuvJ*h%p0c<(#qCPH>%D%*m~KflYvCZ8 zYIEEyl{R&j(>#-H{Tw%1*2IYx!R&dVe5NwF>*tS+-Ocj9D>WD@J^92Bb} zP8B7Q(_;i3yoX>{PdRi-@9ZWbomUApAPI&^@)#U+_^B>Ps>vD+kb><6GbDgjcCxZpSP{3WP{#uz(AdE-uIpWl)4>$yuQ@7x#p#z67S)Re&Su zDpG5!qNE%&;$T;7?@G3aadiMXMyfnr^Kf8@Am5%(L2{2PLRPq=(w^qg8akRYiR2CN zgrL~dp;_>oH5(x!fG62e^LUgI5=YrhxdgT-iYb;{P{xR=I67Im0yEx+i#S~YQ6<4Z zO%TdoRElDOSFR@96H=lm6H21nEuEV~krsR;t1zji4cYeR^h^z4jP6kj)vSTLv;t-b zJ||3!oYqd!QpRmQlFOfIJdFy)rWs?AX1CgZb>Ru%Bz9jw$?F2=1ZD9TR3DVYG;Bd} zQ>UJaX)C@sl?moAOyLw}oLxO~HFC(+!AxCJDK>c%e-W73rSd=sm>5`$6UJ^+MM?xv z5d;e=E|M%vNXoVwO)^ZR5QzrZj&id5UVo_new`Hs5pt=N0%#agSSlf#Ca;ksGeY0Y z9zHY1N_3H;^(5Is%PiS5;^rG7zh?3?YyGXlbh<-YfVLn&2trl_G1iy7(N5GEc( zr5+U?4T0#)JL>!j*Fc%55Z7Yiu_X#SuR7qW$VGDY(Pu*dTy)|EQ`0cC76}y#EwjE7 zyUUw0O`79J#`Yj^H3LcAo?4&N;REXgM31@>RsUc&*ec25XlFo8Zw#~6)0V_NthQ?_aGE_gz{?!07na`HpvX13S_Inpr%baQ!Ene z4Yok}91(W2Dkv4HV8~>mm^MxU$gR+TddQwC5fkhA)>P3pg$)!bP&BFyO&ZuvktI_6 zIvvVLnSnKec6$56IuKaLGWL-yY$`xI@$@1RNhN_vns^4F>q@SvC~F2);js~8<#TX# zlHf@`(a=a-fV9|4n0`@zWPZ7|p@|Z#Pa!&}h?A%|-iZr&%GKJ}WE!J#ru1%Qv3^CD z7I#9pRWhpQk8cpj{SH)T1j!dfXsRNn4=A#@GsP?!cC|7I5eW2h5XMLBA2MjuN;_tQ z?T@vPg`c}xZt$)oDXe+J&c+7UVKxb+nCAbJ!IW1?T*Re6w`ZdIFkulACKN5BqA6Iw zgOMxQRkpnyiIJKlUBZIK%Dqgb6Zhynl!Gdk-y0bWTeX?KKOih%Wk_~%ju2Lj*mut)OJ4X*JeDK(Tf=Q-V*NQWWm3gNxMT|u& z&_i;MxH3S2V<+}pyPOMe)07n>u%kcUyLWrEEw(5+@%LYOn!RqK%>Ur_r}Qa%6rFPE z@Po;`kqk(+Xj=00TB(l7n6QalX~jP&p2EQbqXb=6o(NW~c#XjrkM*!;5Mr?MKAJyh zqTy7f>93+AQU#f)V?-*G=GMh1{#$jPJV;F0TBTEUJjCx6$xY-d@iXcQNa19=2<&BL zs5bcS>#pve6_-s{40p%)$kMJvgM-H2CY<>HuD`ldb#Z+m}~On z5fO7bjV1rf(phn4R%$8scf1oB1_7fY>OV&6@?x=0QKlt!Aqc{>XN{lTR8(UbmTKB0{vJjd0(aMWkp|x712I z16WaL3J3*8iVBomV&k0APC#tCK!IkYrKjv=^P%9te0-6f9@5^)^i2T_1+$&a&{q(b z($IDY$;2s0E(#O`3oKHYB>{w@==Mo7^Fynk%7Y{1BBHeLCWO+a74IBC`Bo_oDlne1cL~L!DMrzuR0eL zRf0NIVl@>x^q5m^f#`l(4#KtUMBjiCp#S*Es0g)4*E`nr*Cp50*)X)CzOw{JsskvB zASga4ASzJWnRdzf-%d!z=c-9g)R3*dJL8FEDKj{lf(1}@JijB?`DJoihcsdsO)T z_sY4DAz^z_yCQQJ{Pv_IC0G(RFdG&HK#GE)Q6RvT#}4pTwjvT%J(l`gFEsbH8mOy@ z(`1~BRAh_kBq1|dvsY*TiIz1?@H>C z{J-#q$@4`gbYWHWCzP3jfncaiP}4=p&nK1NhHO^` zcn)I4ys6OUo~;U2wyWH7vScs1n^I?y!oG$?q8y#hy`RGW6;h&sVG#k-`vmXvN(K^ zFhr{)f{WBgE?KSe^}Dy))TKT`{H&51aE+UT~uJ5>)C%2TwaV5B49v)prHLl%p<~w7La%%f$gW$G zx!GEBU6sG>2J&ox(!sGa=S7Q*knkoU!U|Xr_^GZgQF2fFSF^u_x2ycw8TG`UqCq1o zRii2`o{Y0+3SxCEbo_?<5X&Ky;%LVa6(3&Fl8fhM3NnSFV!pDyWmi!OQa$@_w?6E- z3(G$0#>Qi$irkVzJ;$bt4QlQsDp9>mMoyBw%@owRvEnoa2s~M+bWVws4xvc%4^}Iv zyzGc(^?RFyJY2_;OW!YKVWs*sm-MT)$hB7JoSL|1pVTwUYTT{Qh8@;ygNYg*MqE+Y z!N%V_ZCedj&b4o0Of-sEwY#=3c{MivI(=>xjinDMaL$PMiE~3SU ze`P=xq1~A|8-TrE2>G2RXdX0R(u3kiEN=icn~Pk zC(k-mAgMF!5S%?i`Fip>9gX5IXR8xiv=iq;g*CppVd-(7J^NnX6S6y00BUDurxOmeWV12%$wW4-8GP;EMl_Z6F^BgP+>C*+m^Hk2h$!oU2`YQKvQ;#$FvyX)S-J|eM&sz7Ttuj*%cyMQ17L#UNU+i2ks)iQYVg7(nTq1p z5it^~jzGUcAI$b@RX!3cMr{rTMhV`AZbL8Bu!&-^60@YaVGAMfl0;vqrN2Jn(BO(M4W7~Ilu$iW$Q zO$0;1Hj|x&&lkdaXZ3ihf})EFp@cTGq_=gB3-P6iweu06*gWZx$4?ceJpDulN(`;S zIQcRK%nIG0=-@=855*0%>QWa58N0;A6D>trfl3`%f(OJMG_ESLDbY@s zrsnVRri4L28wZG|M4LlD_cSsG0xBV`b{Z0qxPl4((3(cdC#Z{y3Xs4T7>eu!#F75e z&vEq{5vfkrWC^8=I$%tag>T{x-$Wf)%ET^D0)^T(wdjcOojh#e`LHVCT{!%zV44tA z<__U@zoMGP^u_5A^5x9x7t@Y;p+Pg7|QB3kO)U zkL?DGi8n5F3@)h*8MMeBqDt4yrQ6Fc3W_5QMNvVMABI-{Bf@}GV^~d+Nb&TgCF8Ef za6@arkvOK-HjhnF)gR*vpj;Y5v4w*{UYJm?URdgc3-d-t256(@kFB^DJ+xmWu867N z=##}o&ne*hhKi}zgvTTNq=g93XmmjoAYFsQ@Zw1AFU5el%J*|eVncWBAu@clBR0S1P0`y!8V#BSe6XN2Dkzv2M6=# zrf)(}3WAee6VY_WmI#E2s(LHBqJ~<17aLU!s5Z72y6$1tAWeu_z`KKi6+?^N(Pm7V zsy`&JjKFwDgwHcSbuvw)eHj}#Bh2Yq6$%cjXUC$f?e zDb()a_|Kg>B>B-~LT@O3khjrc6xP}-c7L?oXI5=(Crh~zP>~x})$Cps%UE@L!oB(= zf@C68kX)1Jiu~9(He^xLL`b3RuBX^0^E#GVCW4VZAr*|a7EN@QN^l5>IzS>MeSIgo z{tT-!1pkz)h|TntCu7Csa#i10+zf#LPotkU);ph+GGKNBkr8BRAHLG07ku!&9tn#C zMhLRfE|R<0NSk_M2<2vvyo-@gOn9nM6A);2Q9}JLp@Zww5JvQ~yrW_TZL>luTSRnF z`C_ClnZr3bMqu}b$AY23eiSljx)YwzfSLq8{u}Wix{Dt$T!wn7<%djt-9r ziW4}@()gkML{Tvv6u$_p!aeH*hf;BPMFvu3E&c7m^b&26E8aHjjURb;I^y$UDhr^Z zu!053U#0;Po~FRl6=Ficz&Q2JrVObDD*wl7hGcChpv zO6M3O62(OYNGQ3m^dBZr90O{M7(cR->Rd#Du_{tH=e1UwHE|{4hPK5b#3Z$!IKlzY zEjH4zO|o*6)u!lCI^F0t788*PC7itRvciXIu*7ga3}f`yzG;`84+yFYDl%vwDohCx z!#ogwBbE9@!J{!D)tN|B=Fk=-2!li9l)ju#2dMd`th`jX&D3ibz*YWE-9rpKC1jp$ zsh(1Ux0aXL)l+i4h|E2=A?;Tz2M&!>g%5&6bi`5IMTMxLit5u%l|xxBXe zku$NR1*F>f{ajH$K1#~^>_z(s)Q~elW=U-0D3J8Pl_rtR>xS#JRz;1T$ncK@SO`c6 znaZ3%=54b;+@Wuj+L>`Krb<*^p?!%p!U>a_5!8Zf=%-6vJ%y$Sdi6F^-&^SIAq)!X ziKWT?&|o{s0>KIeSr(@1oN~HlX^~%?4i@EC%;?(10#;rmDMf;}x5wf2^hEpm{`5cV zAT+=@NGZG-K{D@CuByAOiG93Dnz;(#mdf@n$9DB~oZ%)C0Q7J|p@b;=}| zGB?k?;a-A1cvW$FNK;(XDsudEiT$ap2wY#4p)?d3GkSK`C&67LmwL5b-$%mus-j6> zx+E(k7o8K>bf+Eo>iM2Lo8IoDNoqy?KTO_UdPucA-DQtZh-7VUIW2rLZkl6NO>-r> z$*&EzAN&CyPqem(4}#|eNQreHZ}&${!rjdS8-=Pxo-0fk?%drCHrphI zIWZMJw>fT~;Y$K?7Y8^B-$yd}7q36|JyeT4rk3aFh)5NjG)Kdv^6QH#VsfKYKJ~t* z=!nzEl=7s+nj-ao@j0p@(GiP#iW8LEf;Rk`G#|=mRT5f;%A1j)A4zaw(;f`WiPx1) zG1*qo61{9Rbx3oErH%Jv)cK@h8J|FhhcpikNJk8;IxVZS6*3CnvTb49k~XEH!9q-2 z>+J4RuH?M!$y!vd@9r%4AD9%A5RsBx=d`Ze*TO`rML#Q~8D&ZwgzS)6Z6mdmFn%{h zCp|18`Hq(V9dT|&Y>-H!nrb}M<-s~kg6=u6rO3cga>8t>)hxSlram0Ie^ZfV_s_0V z3=CQ1O%iEYsmiMY_a~uATULJdio9#ftJ}E++=|b}k2;qECQLoE!ZwLc-gFryAY;E! zS>nSKzMP$(G*wqg>9;PsWVzLkJZ2mlwNp0?ijP_oh!#jBwv(DVPs-X*SX@*8#kAaf zRAj%h4cYsXA?|2iU5>Jz^4eXIX10ZBJ9jB#Lyq&ySEw`De7{efFoaHUdOvUB$bxfa zC#C(y-7gy=s@pmmHpFKmR%K*z8pT>zx=W#d5-DXwipvfHnqfl%DN1ZTG#PE{K_J zj0c5&%9tt{>cYVlE_wwz*YU1FpZPfv>Q?Vnm5;SvRqHIJKPlA0kg}_Mj}i!>6}t)< zSenzCMH;G79ClYr^UlEmc}tgs#T$unATPMgz_Yy)?;3n9R_35c<9PgnxpuWwv^afI zyF|QPhEX!L%boQSX(1CLiAE$fJsl}@`PpZ39@!3=zX_6J&Mm#wMSE*z>oF4fZf|RE zDc`mer<48-(-G2%7!~7OfuWKd&sj_^BASHv8wW|TU|Fv7222GmT1k=lVV{HC(}6+S z+HG?Cy9$|x@T8x@KHaJ_7{D?jvoXThiv&+m1jG-Gunx@@Iw!cV&InfqFBdC2>L?z9?_spCWccCy?!cKDyxD- zg*#Q*DSh%pr`yZ|n1^9Y0xA~13N9(pg<67zlY)eN5;qe240iSECt~p5BNz07Bm#tC zuh0tzzN#2D8(%N8lrj{d%xuN!a4B*{{C5WeTx3qod|W6W9VA|_#J0eML26UW2ukk| zqBt#PK2C7RZg&RDQV1GsP$}xKg}9_NDrR!xIn#h*!_91F6 zvigkFDAeArkVvL!yqdglvU2vt4?mdDOWFvV__-O8ZpT)ezj2C~LEx?0i?S;ITe|y1 z(92WAbrO;?i91OTI-?{Im?42o?Gl$cIw3hWMqVP%30Reg_`AIv{8mlzF<2ujjM3n{mIjE$ zV(Vf`AcJJ;3)DvQ49I7I`u0Hp82DaC)gXymLe)m-y-!k@d;i@96Zk{iB*%&&d=v6+IO^@T69uCuK%BA z)&*Q+^Y)b`?~*GNNs$<+q?x0hpu#DNc!BOzH6M zqS(NmCf5;egsOI_AiV_jzm-G%jFmA)muMr+vqV*+x~`Zz$MOnFH!((v8JGTGX9b1} zcJ4^Z5~^g%dab}cF&mv?^)4P{FZ%6+ZV}{tSMcFRKe~7G@X)G(gd!M#SsTAuET3rdm?9U z5o6=>LcN~nCyc+2J5zMLk)H~ylH#SN)h)G@b6txYNHMXG8E4RqVh%T5miUuIqlwfQ z);jb^-e#yFVC@#YF~SHKaU41&g(1gyME8V*is6YZnqxGGeAabbW$!%@Or~xiz?=6F z#G5DxPY6Uw=Axz*$&aWmkx~g#Gi?tDKT?SVlv5fh`b>6{RFJ2u9VVOEPCA}@al@rb z&}PAfT6J92F2l|h`HRapd8W!@)S^pLyqc>q;Rn#~F-9=hl5{*fDA6)@?YLIpPBbwQ zRgE)1s|r&l#%4$nZJrC!5g}<@&%52XeJ?~No+LPZgAcV(d`8Hnp;o)v;Mxd#Cm^RT zE5T_r;zd1B?REx|c-IXJE~Q_T5g?VrImpPWe1%fz5J1<6Nlrkm=FK;Vtdo&N&;FL~7i5y2CPYEqer#o*n%*WwmMJ;G2FxS+nMjdLh_Oqh zrd>{~Ad*O9Y-xj7Jj}U98T^qFbKwaGNESuM8G7n7r@dyQR0GTI|D{r4BnH$Xma$YS zs{G0dJwP&M;`LY}zE&Si#>=7FTN_KUBF>c62hIvBcDXaD)k|gFh!x(u@0&{>iP1D9 zGm3KLN}`m)gVL`iwc%nJvRP~IaM~43nm<5Zb)!E=iPjwQ)jX@ls?-@_GHFnUb`>3J%Cy zSuJQ{?pg3?X2Qy8-tChU!A_h{opVJIDyp4+ts3c+x58_pA}9XT*U|rRSFR@$7J1-T zp%S;bI3Y7_E~xtAMku%`O=_Z*M0FD?TK5;pk=N&RE^pVYm zskZDUH)xZ?82a|qXVoualLJDQH*HjV8U*E_k=N$5OwT~NAr0C)eOV$Ld9g$b+F@+k zuvZCkeYt8#vKY|UL#aK~>9Excqy#F6J=dfs*twp00SDuANLTIjXKo)LYK+6T?;3mV z7^dDSOrwE6A3kql#KXD|y!pzw1`PIwCyQ;GXxx}CKxey7>MB?3B6x>IsNYtHiaU6o zBOpeIvd-p+v5T;XQ#+w@u;!uBvl8>oVq-@ zIx_l`zL#)+8)Ag5(7xtKNU<^df&mNhX2{gY(n_f%WsFp~5ySuwCYuH( z4#|4M7w3}N5k>LHkeb+fP9T{Ak2HENEyj&>XeH#XLBQn@X@P5K zg9FuUF@>rv?-tC|MWJupQ>{|u9(J=02x!d^lZ6mj6UZTC2Z$*JM>uKa1uB7IhNqxG zuZ=7v$gq&n1d@9E5J3VIj>n`(jgqmhWh|_c;+yh1c*AQ+>JnmB2_Q+!nCX{o+0;>m9@y*MEb=tY2$23UEbStziOg9jjJ zP)R_R4`3u{4|XFQ9w;@^78d%4ld;P#QFtYQMAyDi^KUPGCQzD3L(~&E*g^)eX%0xS zrGpKGhzdj{z+gCFL_knrFtr4PE?`qJ5<%kci;K{;5qzD&6 z9;#3%sFXdY0+Mj1g$y`o<^xJp7GxeR5$q^vaz&+LOl(tKSclojSwZ#885J5~(X@^e zeO+9NSE^(U1XC^K(k)_*U*NLgM1-}`1^|~Z@!{u$GmZv}Jt&GC>IR@)Bb*~FW~={n zMWSNyaHy#x^H#`{JcwOoy8@N&fdnFDAtGEfIMl)cBd{6)Pm2_V!9<82CgH;rpH@9V zd3rQqScCiz0w}uWK^+nWR-t_rV4e%=2RE>wNA4O~MJF+13Km=7fdoW|7<(m!ra>U~ z(|V#pAC>mQ)K!|6eKpx6oVr*2*LOy8{)-b_Aed)iY%r2?OThw3qzoA%7#4ZKOu!cC zB@B%im&d#;Rq7-|NBoFuhVj3{Xl$W%)#BJMUZ6f(7q^hF^g=e#XOUPuC(j4DqXGrE z*x-fFhJZalnAX8bLPe}v)H4yGZNPMebi)7Er_VE_$Hbai1kF>CwT~s(h8cNc4~Za1 zw-*i!C#MW0C=xKnaEM7k3bJ6y#1D1l=z1H|k!b|tK`W;&9yzz$Da168nMB$UksOa( zM>4@l;I$}7V9J0i2`lkLxP(N4&65@-B9D-e(rRtv3iTl-YFmVQ)i)e8Mss6HP#q8u zms>dUN;ERyrw$!~0j>}lfT%Uy8VL^dfHl`xsRsgW1_jh8%e5MXy3f=T3@bQQR*nn> z(^yGW4Y1}RmxvM@HEwwVmP;;1aT=FIiVUpvy$C)qbD2T(gpdwUdK9tnAoOPXfYg;Jy@a`UA6USO$|z&cu`7h$ zQNwf;6;&n^&QgZEYkx8&IHw+U%M6_Z&*5ds2|ioV@pFiUwVtWQkO?>{Veqm`tWw{f z*rMQ>h6lPP$5BkjFwI%QX9xYybq}J7W$BPy)8R}wE6~Tff(Vm9Lroh5jE*9-Ssoea zLZy-sV`Ua}g4=4$B@)^MRKc)#+ZRlXnpjx%s zhIrtjDoR7!Xj%BI_B13~g=o`$E-b-S+N%_3gKdc<9guL`CQla-a5M<~N^T;hUIX<5Nm6=jf@5*MgKF?mMHeFJ~8 z2gn*!mX^%@fWWCC2P&u0&AK4nOGoOIpp~KQ>kLXvr&(J}7{h9Kh71(2wA!bhl3X$Psodn9kMU`GB zl-hMN!9-BPuDnJ2+_@p7Hi%I>Jk7&JA+Hna0A@j8?czx&VP;a+>*wrRO|pdcwTO`P z2^=Nmr1aa$d{!o4+ermmMcr@+8Wl-kLghx$TTw0}kwg!k zc(qrrOFnHYUAYg)!1FojVuYSWE{thK$+gf)KWXND;NNRdqb&LXYze z4`#`0w5VimTt}BCB(lk0c%xmEPunXu_LQQ^P0gMOZK#&$Xq)47xm4znNw~y3;$+m> zIJM58bs7Z()|p0-5({*6CFTqb$WHCEPMqZCA)-4JaHhhtcbVd=a!ez}0RkCA2Lgz3 z^-lG+LygoU!-Cx?p@+%Q_o~`@s<}Zj)jj4c5Zs7cbrblrL8{tnC%tq~ z-UVz!cp+1bG^dCb9CedMh>VG%%nFcv&_i@OO9z=wN(iHug5?X<0tz%yhtC>dF;O9M zhEiXz+?R*e zlTVrXGr8IN9pbr;Qv1mVj>TkrLVZFG9vDQgO2*kCc!A zR6wi0>NSzIhgE2zg)xLPCWRwJ2EPEgkrX#s5+bz=J)96MR;k9nNjCEEL&}m#O^pi} zsRF`}#ga1@ZkX`}=BdRpi%@Xd^Ql)~uV88JRS|>NWx=4J_M@{uFD*~dtI{#C1J~sp zaztk|j?ldoAb3L`oW`iNiw+o|$|9(u8KD9eLyM;a1K0ggjeefeM=%zH&LJeqG&FJM zj|z(?!fS`;%N9uz3~>cyn$;0H&FLg@bNdWvrf6>lk_sAV;YLA!@v$*c0u3RUi+D({ zt~vEef~J^-ZY-4;KS|^gY~f*n%QRW?=f(Q($##bt!btOJcO{WJMCyhUG5?_fNK|Dk zfkEJ)QlBvRjD>$hjgVo(4_>}u1ru#@dDJU7`LjkB6@Qiu646EkhY~WVT$$dwN=Ke> zg<_)I+dX2!Fwxv_S&))y#Q`xyA_GQ`OHr$XV&~^{HrKeK&T2dICwX>TCvRE=$TiKA z;;mRD2?mW3dh3(;BPZDf3@N0ovFGx-3L8a2L9yQ|$oLx3rH|EOzV8mWzk;rcEP}sgz^|jFy z%09*4J-Xw816o+4+#ovX7FE*85{ljqCyHZbxCyeh=ZUyR#CC?8*7?AI!wo@02ZLf} zXrnWe!U=5y>O2b?;6l=Qh$&mE?zF-06!n!LYPdP|{$I+EM!g)r?!sM*Y_ zj1!_{7z&FcZm&|b_0*dd52nKIa=sb8zm4=QjV!ud13drww7cKZrsP9HL+8t~kZ#>> z^w9Yc!boqK(pgAt(X!YeubfiHx*D*BYBg{ygCD#T3Wy9DLP}a%PoGsheR8ZkiyL9R zot>&dyf4|Wv#6uKSnWftTwQReh)fkI;GUM|WNXtr+v23uXEb>8?W~fe#~xeQL!}a| zVz)T(dfMpJ2?Aj;#}zNM?B~0(Ov3XImO*8f1?|mtXHvTzLxz#;z@qER>(NUsBD>lU=fBmoT8%C){h_)%|nI2-4 ztWol@qNZ6psVP1mvr|H1NKq98LeJ%!#n>gboYMG#N7zM_{k12IdhKuMB2Yz?FmV4e zS*emplhmvM`2fCvI)D$q{*U`#`v?4K{d4|ae-OWH7Ni#h63F+ypwh3@0-=Ee5RCOe z*MY7DWUBEPpOcWGQuMCiJxb718#FIzU%f*X#5`q++6uf-72=rK!?Q9(=h337ax-g< zY;BIIhpiZus2IKqZaq?Nt6+pi1S+NT62~i7_M(^2#E7)>wj8<0mbZ$%0isvQ7t)1ux zW;3!(7Rd_v5Zj4YC>6e9m!UMW737qdK*;2cS0@b7)jly^khH&4^%VMZQj*r}Pj4Nd zew13EY9%FZm`X>VvFI47kv+U%mC9@d=f#`-+mb|#m(ak%D%2Z?!5@qvsI1|U4*Y}C z4;%z#J(leL;3+AW6ymcLH@72z)Dxs3n3sYuht3_d!=hu@aN9(7GG1u7a#(qzs&7q2 ziBG;OaOd#S7o_ahT4#C$qB$0p=2jz2BhVvakaNx8rshI1Uk9=+#k{_(LtZy6xw)3} zb@uF*IfzBOFY-*590yn>gIHK}R<1cxvYvp)L~UlBxMJ!sQk*~`r8p_n$Ptt9tw8s5 zCG{*bp=%UKV?r<##^GCN)xnU#aBjmVhJ|nnAjKl3qZN2bX0WFboP0Cc+U-pJAFx~8 zL-px-gum04F4&{ItutHI$_ii^5SF5g$qwBt3C)r;KWNe%ms*R`*8Z3O+ur!Y>T=?R=lj+sGSfA}< z95x7252o7V-SdIBLhH<^*y>!+f>^m@H0c73m%f>a9&NQb>H zcAMLc_!f4iIs+rv(<}5?@NRg=TqZCfMfwR~Ry_p_LOPM9eUg*Z{hF0GF$vc+5AS3~ z2vkadwOEz5@TX_c)sX;>y<1}s*KdQwu(Iuk56d`q@fEny7`Rhdli@0yJykI)r>{r_ zp^D(SsKyeJPE6N1PTZ(MN8EiK^+WdLLN|%Xv^R=0jIb>#@qxaRoiM!QxwWXx9uEF& zAbW4=&lL2qZj>%Jyr&`|yJo5dGm@bAtha{~fiEF;jzM4CGDdU7JUT5F3+6!d@uuoV z#yL1@K{drnl_VS2V5^cuteO;uVIjb@z@-)>SBO&_q9nvth$S@5>?M$&wI_5?<+^61 zQjS`5y&?G7BNQf3zd?ErM-?8N2^OlRRjit9qe3^QLJ7WoW-u~XT^5y z7YyPsa?4b#3Oum>D%I}q5y!!L*T{z^tUap*CaK5~ z74|hS3U<_ulRm$-8x6_%Fu{w&stD5+C>ZvLgk_`l}{6PElsg0x?2$0g^;_$rzPAgxQScNAkp7s#jz`V#Y;?&-WmxoV&fVM#kvGmF$%6 zBFnfD#_~Byg>FFsxiTMFQj9q?k$j|{-b0%FQwZloTDCJ1NmG&VN+N?`a#tlaq!mGVXa)M)+cBUXj!C`>0e zED)hIBk$JmzbK&ASrnHAG$aX77&Td7^x447C}VM`iN~)&qP(%ZM(rD?)6J64C>Nfe#E|Rvo`0tq*ut}$53ES3d$`MtOc z&HH(~1cDZy-+i1J_rO5P>%-mwlFuY8l6p4!_$tUPZB2jJY z*Gz@_=6?te(4$nA4AmS0H>=?v6P~#*SVBPLjC5Q%{~p`dMs3yGm4CCQdWuVen^TKS{wbq;kB` zpp8q}M!@0BEaR7lN}o%$iPk#ilhZD4b{0yctdY5T&rtqUS{Suy|1`cw8r9^=lbfP{ zF4L<}^{Pfm&Eq^|O5=7nLre)Cr;RgLEQ7PB#hDW1bpo=jHWZQKVLYA0%?ucj9W@Z6 zFu-DO+`@t|gigUxn9Q%H1(+q>_Ru+wGlip9kPI7}+(8b~U%~SOJ;tJmH-#08+CQ%LG4v+SCF@&m zd-za=I4tu@J5&rBLEXQ_@LSF<~+##*O0;<-yKeMZKj9-l^@{GAf7$N;BQup*<)BrG?J_ zrg(y4pjKE$+t75xsDzCpk@2i$ z=z2-2QuK3*S+XuxJh zE>NMq3lQ#GmBqch#Dof!lnvPtoZynT21s=FlaKB4XR#KR7?#l>&38>IP?TQow7jH4@Nm5kFeCTG~3q)Xvyy(YNG zMSx%Z#x$hVOG3>et>XEQeYD8K9l|x}8oY(=Ek0@&?2P?61ECNoPND`lBP+tGO^J?q zW%@sewzi=yWoT91{+2aRErc2NJI|^>n2qyS5z)x52^jW7NQ&0)+crfdWL$38p8#Hn z+dM3A67xA(n?6($35JwDT65!<3&ttrKHkcjvxB2WdDV)MPjHbVaXCqOO0*$r)#3s6 zO&U7*CW3won&F{y;@(8#B* z%&6r1G0)&ydMONM=m;|(K+$8oa;QUwWXzfxt-srU3Y;#Xk{0=pK93?|tE4L(iNQI( zIN&Zm8Xitm7U**?snt}6CteofC)F|Xb$&gwe?1ad&}>_|=+qm8Z%8H>C_XA>o)A*; z!5ZBue0W1+AG%JPWXkt3BV5RAL8H?xuo!^c3PmL13G){b4J=4I&`QpT2^>|Wh{P&M zQ8FJBF>-hBrcDqLP!R@>1>nRh1UrxmfA~avX*cO?U6lCny~6ej_4Y^;rbeYonefDl zQlkQaW00&uF&>CQOTVc&UVhtqh)5P?c|Ki#Hnt!h%OjiAL|h%nZQXr<$NxA`7}nTHf0}hfAiB zsSl$Oed~x!8%JEP!6A^?NEa6@MW|jq24NTygd%!Efe?d3qyvTQSCV6WFH@uU68poq zH~B5viz6Ord>jc4v}{fZOhEJvNI@AK!Bb|>4T0uZdiIw~VP_Zcl#YGR{GG6fx%5JS zSh#?Ypu%I388}WS2jC|+CBTSyWE?`lLZUObsx4Dn8&7*@p76QD-o*UKk?D|;vtq+_ z?rCf!n`PCKdU`D7$L2-Et<|h0#P>}_XOCMHf9LmAjis9LiNVt{1tUU7Mc@B)Qe6>B zFTZ}-Nu2yf5D~8O&o1p0zVlFO-?v9CG+J>vB_0`@Jv~(6shWnF#d-OJG%^dHvOHB> zi-bjQjTSMvyQ0v_ha8~icRSFYp-Gzaz1k;@2l8(P(L;;b}O1*1E9He#H zvOKI;r1K_B_*V+ef-ytlB8E!5V#bFyolZ$)Q4HG3UApdEWDuLUP^$KdagM*9g3m5g zQe~F*bbMHTFB227L&I|ZYHAqLD(CCP+*=4Hx}J;%#|_Dom0L)w?69MLsWQ(seZ6id z8JV3B5}KpqMb*bAE{q7;*j7kmsNzpk@RV58-GX!usAcvP`3y*t>O-PI_cbA5SY}Wp zT8(4cDwS!!kc*4okj^0_Zy=agY%n@Ee8&wfC*M`Nxn?6m!Tldvyj@NPt3?ip7nX4U zL}I1UIjG2m5kyl9VqaEVH_@66Qqfaq+1`&ndSZ0c`dV4l>OeUVosz0W=daxOun-D_ z1F-^cMbVAyvP=K?$*2muRu1M7WD}MZRTk735g7j&e;K$Lni%>R0JSE!{gPikdoGrN zC-)7gEr$1H2BjwIP2I||;)hx!nzb)^^@l3KV@z`xfR>B`;n|-r|ZS$mv8~;`Bmpq=i}p znNqP*ZQ73ycKA!)aAAuIh=&T8>Rxr{z9dzA8+TbR~1AojytHv&@<@!#8MK z@m8M`7z_gKyd*r{n{F4iF>d|I%h_zhMN;mz)eWMj<hs=ef$bA}aR5(F0wu=Wad2<6Ta zSgWY-Q<(p2EPfFhA2MJ>M1h>r^ZfWVuV>ZUrBeBf_9;mYmv>S*=7xyYr{1G^P_cn3 zg6tJEEO_~4S}sihxyE&YsHhcm5$wS`qKPoK&Lo!L1M0p2#lg} zi3VSB3ON_AEnnJ>B%j(fXa76V5x3eCIHfs_GFLtEa)&7p6WUn%1%;D*$&!c@;PtCj zRyR$l3t6mchS{rE4W*qA5a$L?=*LPa(J~I03CDyb)xv{MML?t#w)l>nO|rR0q(i-3 zQY0`#i6R9*H7JjIyz)cB4sU2s)}X_e5JGRd;t>n}U4^%yY@+!0+D?Mb||-eZ&mJktHot#2;~W!uSRb zXe*d(gRwEd@&yz`kVtE(j~=>hjnP3r!4OsP7%DS{c#YdkP#9}h+6n|3o+wi;9mSuN zF7~+qr$shl-A#a%mE{f3PA4jl@LyQ0ArI@GY_;z%?tP*ZNyVONu)v48hMwewUH zCk8lsK;qm)yI5H`3)bh66DT&uN$5`v3XTbl5ah)ZI(kHwXN?`r%8hDUd}qQ5EuR9$ z20j=50}w2iQ-jF(I!u=Z)e(}NJ*pc_%oMLdj(e#zY>>EH%)tR^WbrdlG_e@^)K+FZ z<>gSCX|;j`O0dg6;WdT`?iV{ig>Bwh9h5P6jzPWlaus9Pog^&7^oH#ZXPd z>#_CpK&mJqv&Te@lx*|j35hYuxwXF}s=Vbh{!+1j}4a4XJzTNTsztK%%j&#XhPUfGKwS__b88?zG^o zUx0-mKcffwC_)PQVse;~mxq=r>OR>iTx63Q*3I}sFgD7rc;Qlx=$MfJj;OTPaZZw9 zqyFUo!D?>sKNA1loYe*rHP`ckwT4djb2p2rhXutV-g%m@>fkP zcQ+&;7lXG%JVn%MP@W}HxQXcf1qIr&5dVe;l|KLUG3^nbOdKmk$sO{nk};K2si^!+ zNj4cpEc;!$9<*;1~l(WFWwQLz~mj5~p(*pz#_HnR*8ZIKzEG+)o~pWwth zThl5|dE0GxK{ERGv#lnTT%%}@GkN(DO1hh#Ru!_Uq?^ps2p4`~2z|W7qaG$yqKai0 zPA**(F{O8(l4O<>D{10>BG8LO9=PhC=CYJwza@I(>0PbEmQGoXq|lC;F%s!TcXh-i zST=m5%OkkyLn=8s*Wo4O_MhpgC6zwfzj20}RW%`o)cSs<5w>8{hvC#nBaQhj%9c&3 zeMHQPV`!x<+jNpMlno@9A_1|42_pq#pXICEAQ}w4k)yQ_hVh}q&aL7fvNxQ<_u-hb zk8ZeBc`#TNVjeu`6_!016iAvR0|DW{C4iF+ff@Da+h2v?si!pK*9xSpgtLAm$4-aQ z)lWfa;*k9kB%(m&5)dUK!ymtu1YCxgggR9?)S#tCD3MP^Yo z&2lk~htpHK=s_jnK9oymma!8g!C?xJqze-v1FM$6@rOBLREchicu{;TXqW_NtUNd@ z6c?wgM-)rMGz^%l8fZ2 zDEbLG(?^^9>$W6)Klv==@u=E!?^H+Z=XVoHD^*eWUR`9Z_EwY)X|i(@mvf0`!Gy_Pyjc_V z7nl=|f<-SLUT+epG~u?vV~|*LY?wMokNjmT$vMw4>pwJxCxP=`TOz8~el$|;T9hIa z3>caA@<&zWBq%M5t@Xht8Lc+IVm37iK|Hq$1QIBD3pkUuGV+kLIJ6gwVsD0#u+%PY zj#8X7VhcfiXrxO?F_c2>bd+Erd~0N~jWXX3Ufmv~lwBqsFwj6JG71upi9!h!k^)Lv z5L_!zhPEi5wnal|(4f#zCNCI>P14BGLtP8#@}5@WU;2TSf=R{B3n~58mcNlG3T`4} z%rv8E)k@{1WkBO&!&xGYQ_MXB^PXc<=LU>4>XyoAM|Ir&1ZVKOaT&P!Fx3Z)U25!t z$UZ%!D`tg`Jr5C7=8&=tB3+CVBwI%dL@$?aO^;*yjS#W}NR*JDEmk1HT%W>``beP< zGEG%QP)j%6i2oZjxy|~*KZ9_vry@`2lpXP>8e>{hB!hNdb&wJ$YqtX2U8ylnmETdS zBpj1y!$(9ydb7(J@SJHknq9txnX5!nPwlr`y~v z17Id2K->;~h!U3;K01>^A(qSDgkc=*42v0g>X5W%HF8%?r-~j1g~~M_gAlCe`^N;H zPUWw{BMC$x*ig&h^7Jc8PutO#qQ%5ryBLs)NKO4z+wX(Ji;hGu$X}ERGiK1mtJpX) zOkr4Q8MdkH%^1O5JeL;pak!iqTe+^ZxD0!E6v( z_OS#S_0~iSlV_64Q$b}$q^R>ddMh89|03~Gp;N9Hx=b=A;s~O5O>z0mR_)?<#Wo}rJZ+@s@mvlv&HgG*n1UBDJMUy#%l0cZiqXZ0|(z$65$}MkB2t?xY zb?kr3%lKZ>_gnL~pAsmV+HFgv{g9KUY~|M)G-0ycF__}&6iREQ%*f|jN}k!SF^)=k z(pw9*B1DRnh;&4ToHSmxpU~5DThuMM)Wc7(dA+i41V7#8(8A*=g_*( z9A8TvOp5P{zxkk${hs)LPerh8L zfM^sCgzxg?HAW5v0mik9KwM4B@qpLkERpgNf_$hmP1s?`@NV*_|Bj|ypE zlCGJp0^_%s(3%Iv0pXXWc7oIr8X!PrAeeaE^ZxX2?8ux>6T6p4N4I}*1~_G7uoNRF zR&Xc3T1Q&>;gKVXNTihT~vL zM6@Mujbh9KCw5TaC{X87jQ$-fYBZpWui|Q4Z>@@fS&%LkFxDB(UZ{g0y95*=AjBRv zBB?rP8_hrxG$K=NyJ@(6LpJfnJgzXX6VU3=*WwZDkoHFelqDX zI0p|QhT?mK;0homB7Wi$kz%llW~^2*S@oKPwNZLyx9{;mSAOqR_$oY95bVfN#7P)L zVK@Y%%21Ycb@UPcL%1}Vdz|4{d2JceCK>`0{O$SMK zh6TU$_OhE_Gaglh6*j99HdC8~Jd);PZ;lxi8whMQKgm^E+ohDrB(NaLDUd$mNf^k! zWud4xOj8ZYc(F-D-;_Qw4S6*vx%O2d0=#d73EM1@$;g-zH`CuZf+y_(1eR|o69%}L z{}jkje{M|VK4tS8V;w`E2!}~lD zEFmr%;{*p{;kF`S5l0YLQ+#y_MJ1FffQyeJ{*ybTSX8k_oe1h8kxumO30=-R6)TP~ z)kX>2gBL5-qR2}BI?{}*c^_p&_BE;Dbgo4>EjcXPpDiielcgKKN09T& zjm0ApB)dJPw94EpjMdvwwk}Nf_2whYs-)<~;L~nb$cRXSw`*0IghrEYClK;?IK9m% zc1BJhX1gAe=pwDH9j$znbhDYxVWZFM=D2I+h1~HBS>!~Zkr%3nvM%Ybv=P=ZTC=66&MrbhCB6}O_d2r=;mq-R0+lyUlEW)eftRUjYls^{Z9^{-%T|nB zIO;6CESW1Jz?^wVsu&YF%vER+tWG&dViQDgs7dPY4~M52XVDn3C0D~|kzx4boxrjZnqhX&Byn?Xd^NJ!%4Sv`ezqZJ;Fpi7}bdT}+{F@d6AjK#;lY>=~> zPSs<{vbP$Zw9FhVa*ws7H^c~Z;U&;wInX3qDg8L~BTjV&P*m>!cPfmD79mc}Cb-ouTv|@gt&( z&_jt!1d24dL37BO(WI4ykggV=)Yo00)SbO)sJqIk@7fv|W*6g_c`0m>y$UE=+v!5+5PPD zO2soqMJ^OY#r}BM*OIN4t7WQF=0A-l@^hsYE(vlFP7&TX3Q0HIT<4IYc+g0^kvy4U z0k*byjbu|qE0wq8Gux|XmRaeXRH^OlH?T?T-8G3M<1|Ha%DLfD6cpI~X?Pjp()jLv5ew})R66_U9&OA@l!qV-Y zL0TuW3tb}WY_te2n$0p(FtZ`1-a*=^Djq|T!pxqUl0|$PQrr=eOd$*SjxH#kGQy%7 zGtF~LSs3Pp3uwJuc?kAI!3Q$Hy_s*cB{Zk5*OoUh=mA-_(pCLk_aibCy#8UB#TkCYo0GGK>r$?`;^Eg?}5OQ{k?bQazeqNAO*DHNIP zi4aNW`e!3sQ3P<3nRFAhAG3 z@&EYA7z^`O{&4;-{q+6F{hj@A{b2oK{Ym{~{c8P+wl|aUGdb)9_4`}>=k=$-k0}#? zafE8pdW^qTgndZT(qonCR|rF%ln8VKE}SW_r85>BYG^!(;<2_rl6$WNmmq@+f~aX| z!iOA@PSTDX;8er}83USv0&R5dz`5s*lnL_7E*U-uera$qIj;FTu%YH;LU#JW z;?X7PFG@S!qe4OZ5)1cK5LmZ_ug`LXkr{7UkQ-{L#hXSY zmjIAg9zWB^i-b{a8a9b)L>fO@sY(TCv-TBKAw>Vlsxebw^JCu*zzGfaq@7kY9yUhe zX+lhtEhb!?-LK@Sj%=iC!kU!(jKevHAZmB_5J7C|SXwL{6_p=wS3p|CG>J#l64DRpBk zEFfNJAr|CYm#RupgtL2AuuuC9Oa4#~t+UeqWvDJ~Tgw$qF0_DD9D+e$P+!a{E-4zq7Bq2g2T}rgqTa9ho`GeY=$i*N^sVDTrYX-cZ)t6 zkwpBdp$jO0xoXES2~wgorK?jKN2Dx+V^D}2SsV?3z*w;8_S=HgOPSh8f^`LIvqZW{ znCK_(HT9vRoo`BDKXAc?lmxBVahgE8E+K+}4L%n6btrhf^FKaDqHIbaT@`duuPhMi zx^0j&K%$nVK1+C^#H68*z)0KajtA>d@m9C8;xwg}Z;k>5Kj4ZaibR!+CY{ec+Pv5y zYw~RP`YlACL`h3Wc%+dFo5Yoay7c6{!&pQ*&@5_q*o4UA!FWiTB88+`@L^BULJBX~T59Exl@M71tW_gOdE`bWzG(9m65oc{t3|J)$~fT! z*(ABt1C==3#3hU*c||=@uNkmir^P7K%_#*V=}osm!I(k8;;^sch|fc(v{<85g=1QV z`6P^aj^~m>nv#bQdl@dyILIi0>JgscMx!B(d(@J`0xbf3m4;_M;R3XOvB(|7PZpOB zz6Uw6glfVoEjV&wVDzO5aOxPp`Era9S?(-B40URYR*0b!;{t_?ivA>k1DCe#S~#KB})n^prU!wB!L1dPadL}gPdV=B$GrPRD;TUl0eK#xo+XsU?j*nTP258 zAfl*(Uc_P%3+#}M&LZ1x1XBA@cLf)b=%_eR0@*~Au9%}_GeDPjliCD9QR64?$p&5Qtq+<$OEL7vID-kwHNGQV=Pm)1g zv_o8ln0IQO(UK@p{Ul-lu4;NaLy-}ZS&nw8CGEe6T(O^Wa4{@5MlM3G8Icp zE6p)X_#%#7ku?0yBDAS9w(D9b=VTfcMg+@xc+D}pz?`f9x(Mu znZ$d@WRys$zDpQGt1n_j6q%}}yIqT+gsR;D(U##EMOzD~;SI`llp;Qjql!rzGTc z%w;1nI7g2D6Qp$rDWZ)pCp<9Tgo$#g8Yb5JKl1x z5T)4=A{MhGqBG-cs1-_Ds@0g(5+l*XCN>Zen+uiFh;xr(V5S{xHcGBYWHo0J5Ot!S zrX(oTckC7PVN`uI z;tEBULQ0WHAp+BQD1k|`NkchDGl#E59Ph!lVgi$|&oeY}D(4v_!X?@J$a1)mOS*yw z8G`JaW5ib~AcM#}D$u3d7AgfRT4`F#R#cIqmQgT9;-4pdG0#HGWqLEEzXK@iEeV%V zYQnbV0Ys})Xh(?STZpzZA2xDAko7~(MyrbxK0!hy1JcO|edp_|h6LL!+Z2iZW^J@o zpwHjOT5S#x$CEPCIdY4OxVywEO+{s)iFb-PmGf7!=@gB*k`zDf4%VV;d2Zs9Ubp`s z#74?LC#@C#+<}CxVFSw|7^QTNNWw^?auOk=C`keM(HK{KrrC)h@!5}>BA}(p`Erp; zYyU_xVd^ABC5kW5))pb+m}@iA>3<~(RFhLmw9{Sc%BXUQ!cxfmXW_8OS77wKr*#sU z(L+eikH7xqFlr*{x+|ZhMSeA8US$6x5Q9N;c}IDc_U8Ps;?VIWIdf~p!<7PR$gEsW zwBBS{iE_}r7i6~wDG6yi(+dB-T@hvyPjly1MdE0WUb~k^mm3BuePMn`rgi+L;&tbs zi`z8}d{#W7;jLwv>h`TecA^}NCFZ7zO|H;VJSG>*?0v>^=544eMZVnXF3j;cZ7cFR z!dlvqlaItg#ro!C?8zH-d+C~%Ha5||fqO?9t|bMCC3uwN5G6^}!;Pl($q&YqA(GTrY3cl+uKy5%eJ0_%nRH zq-j%YY;ru_+wFgHlgGp|h_s8+mRAW<=?F?^J~K`yTA>#DmRzMQqFz?c8BT*^|8M zL-nc(l9&{nPp0Oa#!4kD@XI2SOX$O>jjuBw<}E@xsVd)_UzIg@v-P=x$)uk6E{6{iSxt2jE##5DEeZK0%_Il8!6R9~^?~QUPP4({&FA3IUAEMc zMh#8a*_%=CmdQr^w2+%bm`OSkCc!!9^HkK97WE!AaK+>kq>qtc@q+?W{-SRPG&Xci z=#oyM`vO$}lx3(a2_~SSC!|o4OXm1VMzjsmeGCw{fhUe2X}`322aro}{#Cr!tXg0q zQhQ!s8n*k~DzDl}XCrjWABwT;KTzC0Sw8DK~!AcOY> zlq_CtK#R&Kh$Uc1j!B%01e(3kEG%CO8DO!y14YSaK7IBVWD8RiVYET0l7W_Rds0K) z<#vf^pF0*Fk?IM>P+j3ZABXNOx{I;QLlzdz*QgLnli|WEO|@;6r>wO<+GL9mDEYit zl4mHCo)u)q9?KF{#dK6x9cPUxm_Y1X8jE9!AYJr=z4y$UE#;fVXQ47_FL-S^U8gua zfU%T3DFC4iw|HX3ae^L4C_Od6LqEDt^bhyjV6#C7mTM3-0SX?UGMrZ&Uji&Jbj*fw z1OznHXn_$rwzY~9ES+-*K)p%x9qATgxCmv5r5sf-ldC|i95xKd6c{uD&<9MikkFB4 zV^ZK*1PooMNgzV%MmGFG;yAL9EYOExLL7VvQIzNqc)nJMDdWshEa{;MlSVr2wY(_Q zf`=Zo++u7}$tdDih(pX}mXLu@4=7N?(hSdGLUbYBC~v8K>vq@pVr3H3VpJferU&%r zNx*}}K+vO+!+0@DFiZHhlo4SF8jdy#deB89$)4p-EsKJY!9&u8feX<{W%DV9_)r?G z640g!4c}ZF;e~o_A)!L5G_fimFa}K;38R7`rzp^Z`ca`zHckI70GWPZJ-;PTF=5(TQ4*s-YMG|bIS8c>4{c>~_-(i?K@ zYZK`YEo7s-S|OyV{$<1X)s|3VlyPlAuuz9mnpl&F8Y`$+veJZbm5V%8HK9Yna$vyE z3l@_~(Muz2!ied8fusmTq2VZMFyOx}VYk^gyIF<^7D%^YGdB7N6ulm@&||Q*y4%GA z>sh15f-t{Mt%X3pMu=g);#c$fAq*?aJem@50`=#KD5502JWuh2wJNe`fMOhKN%3&u zN#+`bo9?Shp{;1&IWn5?m9mQer&`)Af|96tjIc}DbJe}94hD<`#8={19JIAAVhI0}ck&a`UlYwnY z9*88RakHU1r;9?YLrb!eYAaN0?HkZ5k0HbjTAf?*5Q0mjYeX%!vYYfI>sDj<)T{W2 z9GeX(Lh+3_GfyOjmJl^A`zTW8l9vzO66+bvDhBPEsdIGPQO|?QR|CZ-|En~^Q4!0P zZyr1|P6sAQP2m+1Ca&1(3q&k~;csI}V>oU93Ms*DXjj8Jr322P2ROE_lZ1#yyzO6> zFV0y_E|mn0u7`ac$sac8#0W|n(CJGYeJFx%-pgTePktW9vS_~c@?RKSB@)W0F4II#J<^OJ%eEvS0TFq}66q@gQFok({TqDt5?=}gSIweN-ahORPU z@R_}`gcjAUl5=1|Ws$D&6xTs>IS(wxaBodQepV&gLd>MA)b=t@f!s=bAs`o@FG$$24Gr7cG5 zQm9kNswB(74`WS*Njm8gKUX;6oXyNI^+)4Fr7b7 z;gvmRvVj(~r|#YM!#uBEYF`LMpp_#ZR3SzAEtEh;wQ3l*7aXZ@vW;enoO=n;9~!39 zBmXrfspm!0B??|zRv~&6q@3Kzk4aI3rn25{Ih(&tGddbeW1$SZX?UUtqK`3zvkx-V zr6Dp15}!dZBv##v*HT@1?aTbxt9 z$K>iNu};;TV71c+U`ZS56ivEf2;ow_bg~XEmV^*tQ46sF;SN>YcdBxB*h5DxAMs=k zlNabEhBC4+=q-~*as@sPnv7m8%0(WM4}#f1LiOu*4Az>lHH!@Wi69<+SQ4O1NUenZsf)oi&KcoM_^XM zqUHx#P=@Q2g*%WWAz}-x1bo_x6T&3pTqC7kqMJ=PskTZGXHxP)I#p6>R711bZZo5+ zlI3Ey5LYP=RQic9%pjCS;hf45*PAc1G6+%`nF6*16NWNnF9@8jtX5d3tprA@3M9$q zHON+o?`|uCGSO;7Crso?1eLvPbfIv#jw2^IllP}fi$KorRyEdwtm2efqodIRgq)6b zqTnCZF#z}oBI!YU( zvD8@!5e6rFnd-Mq-4s!zLOep@U#k_K1x?S8^NYkfrId<&ilD zhRbV&$ifaaMvEC)^LgU2@Y5DmmTH`k&iLZ?)mY@F`Z<=C<$5XDvyTw^H^^0@#E_n4 zB0R!Ix_}X<|M+70f~VF3tDrCu3qT`1);;9+<>f6X#wCzVvINB zLKqMbj37XVHb6pwrEy@Us1-n=>ED0T%`6`T_$nHW?s* z+MHr3&Nd1-qL3YX0)qD{h_)Z2043uwn1PZEKn$!wA;@8h0(wx+sLDqL5FYTTI+Qco zes(A!2{i~2$T_+Y2FzSW2p|@O1{M{zK%x#k1SLIl3LF|KM}#tDe-H!$(h#FEDFhe@ zSQG{Z;Gj>$LjeMX3|Oig>irIi)j+)oLZ~3YV1RHy!W)c%zDi*V6GX%~P%{()1B^g8 z$2Lwr#0#C&po0U1M}UIRB8M0Ohy!&bC>R=20|!dfp@snLry0OkO5>T25m+EjLxW<# z5YQQ?Fb$l6ARs&lhbmyN%zPAt#R`+f0EbOTphJce(xoDS8zBH>eF$YTvOxfqOX5Ek zu@B5C1qva}m|;j9Pw>G(g941GFcY~DA{Y_ggcw~y9!SJR2t$e#XizEyDxwbYR0u#( z4YRxh8VNQ4hMNJ5L{1C^<7|{21`ZrZ;4jiY7J-O9Htr}8V9^07#vnonQvjQpm>_ck zFgNZ}3L(W_QsAZ4D7q~QN)!wu3?V|G0#F7Wnh-D$P(~(^e!k!_bG(KQbG@b)v95RLoP=+#!P|?RD7#65!5riqm zQ4TQ>Cmd>&!y=te|609juM-W^jq3bg@b~qynP|6rm6Aa^c zFym1L;K~s@|HuFD|I7dk05kwZ02BaH*k8`f*n^ft{)x(XzySgW;F&?lCl=mdD~~4N zE1whsf~$o19AX<7&wz?BkO&OGqzue4XfQc|>@#>Oj%v7CEFbC|Kfpo^+=5`h!-gpkyc;OYSN9aOek$eMIE133olX!|ff$No z5EGJ^&D4|x0`c$^&@g4R=p4GcBz z=ovD63|s^R#$Y3rx~vU~U4?;3okNN}Q6n4}T$RQc0s%nB28;xRGmH_$;E5)17aXJLZ}dehWW}cKPAL4egf2=976)SqoOG)hDr+% zVFdyO0gLAd5bqAyBkGt|FubLv0|Ea6c#aNqh&W@4UUDJv26&{RArh1yYDZogeyda2x?94Vm5GbKHGP7`VvVlW<=pQM;^;Hz0 zqY+4JQ9~;9W(E-A@YE@W1c)s#;X()&g5W5s%sZgxZle%~FLWl{!2>Fc!s z(i4bN5<1vo3?_fnWQfMDC;NfwZ$WC0Tp zJ1}MJM+oj1H4VxsLkLY>Ub2G};haoTK*ljm1kA@2jDZ9pi@z8MLW1EiWKcu~nxs*2 diff --git a/sounds_src/cleaner_pencil_write.flac b/sounds_src/cleaner_pencil_write.flac deleted file mode 100644 index e047fa63755d5d75977167546e0cae2da85f6dfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158861 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
    X(Qc17khp5!JkLEBB9EV^VwNq- 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
    twX)^eZioq@Pg-vNu3cE*0 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 z