diff --git a/scripts/external-tests.pd b/scripts/external-tests.pd
new file mode 100644
index 0000000000000000000000000000000000000000..db9d2d323576b2cd2e82c81477bc34e5934e4834
--- /dev/null
+++ b/scripts/external-tests.pd
@@ -0,0 +1,777 @@
+#N canvas 154 25 751 635 12;
+#X msg 513 70 bang;
+#N canvas 273 114 533 496 get_extensions 0;
+#X obj 17 44 inlet;
+#X obj 17 70 bang;
+#X msg 17 105 platform;
+#X obj 17 131 pdinfo;
+#X obj 49 289 pdinfo;
+#X msg 49 261 arch;
+#X msg 17 205 .pd_linux;
+#X obj 17 156 select linux freebsd darwin win32;
+#X msg 355 205 .so;
+#X obj 399 205 print warning: unknown platform;
+#X obj 17 231 t a b;
+#X obj 49 315 sel ia32 x64 arm;
+#X msg 49 352 .l_i386;
+#X msg 119 352 .l_ia64;
+#X msg 195 352 .l_arm;
+#X obj 17 397 list;
+#X msg 106 205 .pd_darwin .d_fat;
+#X obj 299 397 list;
+#X msg 246 205 .dll .m_i386;
+#X obj 17 460 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 7 0;
+#X connect 4 0 11 0;
+#X connect 5 0 4 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 7 1 6 0;
+#X connect 7 2 16 0;
+#X connect 7 3 18 0;
+#X connect 7 4 8 0;
+#X connect 7 4 9 0;
+#X connect 8 0 17 0;
+#X connect 10 0 15 0;
+#X connect 10 1 5 0;
+#X connect 11 0 12 0;
+#X connect 11 1 13 0;
+#X connect 11 2 14 0;
+#X connect 12 0 15 1;
+#X connect 13 0 15 1;
+#X connect 14 0 15 1;
+#X connect 15 0 19 0;
+#X connect 16 0 17 0;
+#X connect 17 0 19 0;
+#X connect 18 0 17 0;
+#X restore 97 345 pd get_extensions;
+#N canvas 453 108 450 323 get_libdir 0;
+#X obj 119 58 inlet;
+#X obj 119 135 pdinfo;
+#X obj 119 84 b;
+#X msg 119 110 libdir;
+#X obj 119 161 outlet;
+#X connect 0 0 2 0;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X restore 513 95 pd get_libdir;
+#N canvas 107 123 756 233 load_hcs/folder_list 0;
+#X obj 306 40 inlet;
+#X obj 306 133 s pd-\$0-hcs/folder_list;
+#N canvas 0 0 450 300 \$0-hcs/folder_list 0;
+#X obj 5 5 receive 1003-fl-in;
+#X obj 5 30 /usr/lib/pd-l2ork/extra/hcs/folder_list;
+#X obj 5 55 send 1003-fl-out;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 37 97 pd \$0-hcs/folder_list;
+#X obj 37 40 inlet;
+#X obj 37 65 s \$0-fl-in;
+#X obj 37 128 r \$0-fl-out;
+#X obj 37 154 outlet;
+#X msg 306 77 clear \, obj 5 5 receive \$0-fl-in \, obj 5 30 \$1/extra/hcs/folder_list
+\, obj 5 55 send \$0-fl-out \, connect 0 0 1 0 \, connect 1 0 2 0;
+#X connect 0 0 7 0;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 7 0 1 0;
+#X restore 97 569 pd load_hcs/folder_list;
+#N canvas 0 0 450 300 add_.pd 0;
+#X obj 66 29 inlet;
+#X obj 66 55 list append .pd;
+#X obj 66 80 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 97 371 pd add_.pd;
+#X obj 97 425 t a a;
+#X obj 97 487 pack s s s;
+#X obj 37 19 loadbang;
+#X obj 130 453 s \$0-ext;
+#X obj 332 596 r \$0-reset;
+#X obj 150 317 s \$0-reset;
+#X msg 150 285 bang;
+#N canvas 0 0 450 300 remove_ext 0;
+#X obj 28 30 inlet;
+#X obj 78 150 r \$0-ext;
+#X obj 78 205 list length;
+#X obj 28 55 list fromsymbol;
+#X obj 28 260 list split;
+#X obj 28 80 t a a;
+#X obj 60 115 list length;
+#X obj 60 230 -;
+#X obj 28 285 list tosymbol;
+#X obj 28 310 outlet;
+#X obj 78 175 list fromsymbol;
+#X connect 0 0 3 0;
+#X connect 1 0 10 0;
+#X connect 2 0 7 1;
+#X connect 3 0 5 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 5 1 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 4 1;
+#X connect 8 0 9 0;
+#X connect 10 0 2 0;
+#X restore 97 624 pd remove_ext;
+#N canvas 314 37 450 472 remove_help 0;
+#X obj 40 14 inlet;
+#X obj 126 18 r \$0-ext;
+#X obj 126 43 sel .pd;
+#X msg 126 98 1;
+#X msg 169 98 0;
+#X obj 169 71 b;
+#X obj 40 136 list prepend;
+#X obj 40 161 route 0 1;
+#X obj 122 251 list fromsymbol;
+#X obj 122 276 t a a;
+#X obj 154 304 list length;
+#X obj 154 329 - 8;
+#X obj 122 363 list split;
+#X obj 155 394 list tosymbol;
+#X obj 155 419 sel -help.pd;
+#X msg 155 444 0;
+#X obj 116 485 spigot;
+#X obj 90 189 t a a b;
+#X msg 353 448 1;
+#X obj 40 526 symbol;
+#X obj 40 551 outlet;
+#X obj 117 218 symbol;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 5 0;
+#X connect 3 0 6 1;
+#X connect 4 0 6 1;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 19 0;
+#X connect 7 1 17 0;
+#X connect 8 0 9 0;
+#X connect 9 0 12 0;
+#X connect 9 1 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 1;
+#X connect 12 1 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 1;
+#X connect 16 0 19 0;
+#X connect 17 0 16 0;
+#X connect 17 1 21 0;
+#X connect 17 2 18 0;
+#X connect 18 0 16 1;
+#X connect 19 0 20 0;
+#X connect 21 0 8 0;
+#X restore 97 594 pd remove_help;
+#X obj 513 120 s \$0-libdir;
+#X text 293 407 \$0-ext - library extension (platform specific);
+#X text 293 427 \$0-libdir - directory containing doc and extra;
+#X text 293 447 \$0-reset - reset state for each libdir;
+#X obj 197 453 r \$0-libdir;
+#X obj 77 285 t a b a b;
+#N canvas 443 86 450 557 get-creator-names 0;
+#X obj 41 22 inlet;
+#X obj 51 316 outlet;
+#X obj 141 54 r \$0-last-objectmaker-methodspace-length;
+#X obj 100 167 -;
+#X obj 41 107 classinfo objectmaker;
+#X msg 41 82 methods;
+#X obj 51 208 until;
+#X obj 51 249 f;
+#X obj 94 249 + 1;
+#X obj 51 284 classinfo objectmaker;
+#X obj 151 181 t a;
+#X obj 41 47 bang;
+#X connect 0 0 11 0;
+#X connect 2 0 3 1;
+#X connect 2 0 10 0;
+#X connect 3 0 6 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 1;
+#X connect 9 0 1 0;
+#X connect 10 0 7 1;
+#X connect 11 0 5 0;
+#X restore 77 686 pd get-creator-names;
+#N canvas 227 231 450 346 test-object 0;
+#X obj 86 36 inlet;
+#X text 132 34 creator_name argtype1 argtype2 etc.;
+#N canvas 150 78 649 452 right_outlet_for_aliases 0;
+#X obj 70 25 inlet;
+#X obj 70 50 t a a;
+#X obj 102 78 list split 1;
+#X obj 102 103 t b a;
+#X msg 102 128 0;
+#X obj 102 183 b;
+#X msg 102 208 0;
+#X msg 162 208 1;
+#X obj 70 248 list prepend;
+#X obj 70 273 route 0 1;
+#X obj 70 358 outlet;
+#X obj 121 358 outlet;
+#X obj 102 158 classinfo;
+#X text 196 23 Check if we're a lone creator name with no corresponding
+class name. If so \, we are an alias and should skip the next class-based
+test(s) by going to the right outlet.;
+#X obj 70 298 list;
+#X obj 107 298 list;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 1 1 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 12 1;
+#X connect 4 0 12 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 1;
+#X connect 7 0 8 1;
+#X connect 8 0 9 0;
+#X connect 9 0 14 0;
+#X connect 9 1 15 0;
+#X connect 12 0 5 0;
+#X connect 12 1 7 0;
+#X connect 14 0 10 0;
+#X connect 15 0 11 0;
+#X restore 86 61 pd right_outlet_for_aliases;
+#N canvas 181 94 522 576 namespace_collisions 0;
+#X obj 40 15 inlet;
+#X obj 60 98 list split 1;
+#X obj 60 123 t b a;
+#X msg 60 148 externdir;
+#X obj 310 63 r \$0-current-libdir-name;
+#X obj 219 63 r \$0-libdir;
+#X obj 180 108 symbol;
+#X obj 246 107 symbol;
+#X msg 180 168 symbol \$1/extra/\$2;
+#X obj 60 174 classinfo;
+#X obj 60 232 select;
+#X obj 40 40 t a a b b;
+#X msg 60 257 0;
+#X obj 98 256 b;
+#X msg 98 281 1;
+#X obj 40 321 list prepend;
+#X obj 40 346 route 0 1;
+#X obj 40 521 outlet;
+#X obj 70 457 s \$0-fail;
+#X obj 70 403 pack s s s;
+#X obj 70 377 list split 1;
+#X obj 60 199 trigger anything anything;
+#X msg 70 431 \$1: externdir mismatch: expected \$2 but got \$3;
+#X obj 180 143 pack s s;
+#X obj 40 489 list;
+#X connect 0 0 11 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 9 1;
+#X connect 3 0 9 0;
+#X connect 4 0 7 1;
+#X connect 5 0 6 1;
+#X connect 6 0 23 0;
+#X connect 7 0 23 1;
+#X connect 8 0 10 1;
+#X connect 8 0 19 1;
+#X connect 9 0 21 0;
+#X connect 10 0 12 0;
+#X connect 10 1 13 0;
+#X connect 11 0 15 0;
+#X connect 11 1 1 0;
+#X connect 11 2 6 0;
+#X connect 11 3 7 0;
+#X connect 12 0 15 1;
+#X connect 13 0 14 0;
+#X connect 14 0 15 1;
+#X connect 15 0 16 0;
+#X connect 16 0 24 0;
+#X connect 16 1 20 0;
+#X connect 19 0 22 0;
+#X connect 20 0 19 0;
+#X connect 21 0 10 0;
+#X connect 21 1 19 2;
+#X connect 22 0 18 0;
+#X connect 23 0 8 0;
+#X connect 24 0 17 0;
+#X restore 86 101 pd namespace_collisions;
+#N canvas 104 25 740 671 load_the_object 0;
+#X obj 22 13 inlet;
+#X obj 86 115 list split 1;
+#N canvas 238 121 613 490 set_args 0;
+#X obj 36 20 inlet;
+#N canvas 245 192 382 392 drip 0;
+#X obj 67 30 inlet;
+#X obj 102 83 list length;
+#X obj 102 108 until;
+#X obj 102 163 f;
+#X obj 102 188 + 1;
+#X msg 274 263 set;
+#X msg 66 307 \$1 \,;
+#X obj 66 263 list;
+#X msg 102 263 adddollar \$1 \, addcomma;
+#X msg 150 126 0;
+#X obj 66 332 symbol;
+#X obj 66 357 outlet;
+#X obj 67 55 trigger anything anything bang;
+#X obj 144 224 b;
+#X connect 0 0 12 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 3 1;
+#X connect 4 0 8 0;
+#X connect 5 0 6 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 3 1;
+#X connect 10 0 11 0;
+#X connect 12 0 7 0;
+#X connect 12 1 1 0;
+#X connect 12 2 5 0;
+#X connect 12 2 9 0;
+#X connect 12 2 13 0;
+#X connect 13 0 7 1;
+#X restore 139 78 pd drip;
+#X msg 239 157 add2 \$0-test-array;
+#X msg 139 158 add2 1e+06;
+#X msg 518 157 set;
+#X msg 139 203;
+#X obj 36 45 trigger bang anything anything;
+#X obj 139 248 outlet;
+#X text 359 226 With A_GIMME we have no way to figure out the proper
+args \, so we just stay blank here and hope the external author made
+sane defaults that at least allow the object to create with no arguments
+given., f 22;
+#X obj 139 103 select A_FLOAT A_SYMBOL A_GIMME A_DEFSYM A_DEFFLOAT
+;
+#X text 358 400 Same with A_DEFSYM and A_DEFFLOAT;
+#X text 31 307 Unforunately some externals don't have sane defaults--
+they require arguments just to instantiate. Here we fill in some dummy
+arguments in order to continue the tests, f 45;
+#X msg 388 157 add2;
+#X obj 518 104 t b b;
+#X obj 550 248 outlet;
+#X connect 0 0 6 0;
+#X connect 1 0 9 0;
+#X connect 2 0 5 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 6 0 5 0;
+#X connect 6 1 1 0;
+#X connect 6 2 13 0;
+#X connect 9 0 3 0;
+#X connect 9 1 2 0;
+#X connect 9 2 12 0;
+#X connect 9 3 12 0;
+#X connect 9 4 12 0;
+#X connect 12 0 5 0;
+#X connect 13 0 4 0;
+#X connect 13 1 14 0;
+#X restore 193 168 pd set_args;
+#X obj 126 140 route bang;
+#X obj 86 213 list;
+#X obj 86 351 s pd-\$0-load_the_object_subpatch;
+#X obj 86 238 t a b;
+#X msg 118 264 clear;
+#X text 216 107 Try to instantiate the object and connect up the primary
+inlet and outlet;
+#X msg 54 400 find \$1;
+#X msg 86 291 obj 5 30 \$@ \, obj 5 100 r \$0-load_canvasinfo_input
+\, obj 5 130 canvasinfo \, obj 5 160 s \$0-load_canvasinfo_output \,
+connect 1 0 2 0 \, connect 2 0 3 0;
+#X obj 54 425 s \$0-load_canvasinfo_input;
+#X obj 54 450 r \$0-load_canvasinfo_output;
+#X obj 54 475 list split 1;
+#X text 261 399 <-- find the object by box text-- it was the first
+one on the canvas to get created so it will get returned first if there
+are any duplicate matches;
+#X text 149 475 <-- filter out any duplicate matches from our "helper"
+object chain;
+#X obj 54 500 t b a;
+#X msg 54 525 class;
+#X obj 54 550 objectinfo;
+#X obj 54 575 select text;
+#X text 140 574 <-- the "text" class is an internal class that essentially
+represents an object box that currently holds no object. So if we query
+our object and get "text" here \, it means Pd couldn't load the object.
+;
+#X obj 54 376 trigger anything anything;
+#N canvas 365 98 450 323 fail 0;
+#X obj 41 34 inlet;
+#X obj 112 34 inlet;
+#X text 153 34 creator name;
+#X obj 41 98 symbol;
+#X obj 41 175 s \$0-fail;
+#X obj 112 59 list split 1;
+#X msg 41 150 couldn't create object '\$1';
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 3 0 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 4 0;
+#X restore 54 600 pd fail;
+#X obj 22 625 outlet;
+#N canvas 436 87 569 401 plain_then_with_libdir_prefix 0;
+#X obj 35 26 inlet;
+#X text 128 26 try both the lone creator name and the libdir prefix:
+e.g. \, foo and libdir/foo;
+#X text 128 156 we could probably add an absolute path here as well
+if we want to test that \, too.;
+#X text 128 66 This extra test was added because it appears miXed/cyclone
+is doing strange things with the libdir prefixes. For example-- maxtrix~
+requires two float args while cyclone/matrix~ just segfaults. There
+may be other oddities in external libs with regard to libdir prefixes.
+;
+#X obj 88 246 r \$0-current-libdir-name;
+#X obj 35 281 pack s s;
+#X obj 35 391 outlet;
+#X msg 35 306 symbol \$1 \, symbol \$2/\$1;
+#X obj 35 201 list split 1;
+#X obj 330 246 t a;
+#X obj 35 358 list append;
+#X connect 0 0 8 0;
+#X connect 4 0 5 1;
+#X connect 5 0 7 0;
+#X connect 7 0 10 0;
+#X connect 8 0 5 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 6 0;
+#X restore 128 57 pd plain_then_with_libdir_prefix;
+#X obj 22 38 t a a;
+#X obj 54 89 t a a;
+#X connect 0 0 25 0;
+#X connect 1 0 4 0;
+#X connect 1 1 3 0;
+#X connect 2 0 4 1;
+#X connect 2 1 4 1;
+#X connect 3 0 4 1;
+#X connect 3 1 2 0;
+#X connect 4 0 6 0;
+#X connect 6 0 10 0;
+#X connect 6 1 7 0;
+#X connect 7 0 5 0;
+#X connect 9 0 11 0;
+#X connect 10 0 5 0;
+#X connect 12 0 13 0;
+#X connect 13 0 16 0;
+#X connect 16 0 17 0;
+#X connect 16 1 18 1;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 22 0;
+#X connect 21 0 9 0;
+#X connect 21 1 22 1;
+#X connect 25 0 23 0;
+#X connect 25 1 24 0;
+#X connect 25 1 26 0;
+#X connect 26 0 21 0;
+#X connect 26 1 1 0;
+#X restore 86 156 pd load_the_object;
+#X obj 272 101 t a;
+#N canvas 268 243 450 346 \$0-load_the_object_subpatch 0;
+#X restore 231 157 pd \$0-load_the_object_subpatch;
+#X msg 86 241 clear;
+#X obj 86 266 s pd-\$0-load_the_object_subpatch;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 4 0;
+#X connect 7 0 8 0;
+#X restore 77 716 pd test-object;
+#X obj 249 340 classinfo objectmaker;
+#X msg 249 315 methods;
+#X text 293 467 \$0-last-objectmaker-methodspace-length;
+#X obj 249 370 s \$0-last-objectmaker-methodspace-length;
+#X text 293 487 \$0-current-libdir-name;
+#X text 293 507 \$0-fail;
+#N canvas 245 192 382 392 drip 0;
+#X obj 67 30 inlet;
+#X obj 102 83 list length;
+#X obj 102 108 until;
+#X obj 102 163 f;
+#X obj 102 188 + 1;
+#X msg 274 263 set;
+#X msg 66 307 \$1 \, \$2 \, \$3 \, \$4 \, \$5 \, \$6 \, \$7 \, \$8
+\, \$9 \, \$10 \, \$11 \, \$12 \, \$13 \, \$14 \, \$15 \, \$16 \, \$17
+\, \$18 \, \$19 \, \$20 \, \$21 \, \$22 \, \$23 \, \$24 \, \$25 \,
+\$26 \, \$27 \, \$28 \, \$29 \, \$30 \, \$31 \, \$32 \, \$33 \,;
+#X obj 66 263 list;
+#X msg 102 263 adddollar \$1 \, addcomma;
+#X msg 150 126 0;
+#X obj 66 332 symbol;
+#X obj 66 357 outlet;
+#X obj 67 55 trigger anything anything bang;
+#X obj 144 224 b;
+#X connect 0 0 12 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 3 1;
+#X connect 4 0 8 0;
+#X connect 5 0 6 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 3 1;
+#X connect 10 0 11 0;
+#X connect 12 0 7 0;
+#X connect 12 1 1 0;
+#X connect 12 2 5 0;
+#X connect 12 2 9 0;
+#X connect 12 2 13 0;
+#X connect 13 0 7 1;
+#X restore 77 198 pd drip;
+#N canvas 245 192 382 392 drip 0;
+#X obj 67 30 inlet;
+#X obj 102 83 list length;
+#X obj 102 108 until;
+#X obj 102 163 f;
+#X obj 102 188 + 1;
+#X msg 274 263 set;
+#X msg 66 307 \$1 \, \$2 \, \$3 \,;
+#X obj 66 263 list;
+#X msg 102 263 adddollar \$1 \, addcomma;
+#X msg 150 126 0;
+#X obj 66 332 symbol;
+#X obj 66 357 outlet;
+#X obj 67 55 trigger anything anything bang;
+#X obj 144 224 b;
+#X connect 0 0 12 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 3 1;
+#X connect 4 0 8 0;
+#X connect 5 0 6 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 3 1;
+#X connect 10 0 11 0;
+#X connect 12 0 7 0;
+#X connect 12 1 1 0;
+#X connect 12 2 5 0;
+#X connect 12 2 9 0;
+#X connect 12 2 13 0;
+#X connect 13 0 7 1;
+#X restore 97 398 pd drip;
+#X msg 97 542 list \$3/extra/\$2/*\$1;
+#N canvas 500 53 450 404 test_path 0;
+#X obj 41 33 inlet;
+#X obj 41 138 outlet;
+#X obj 94 33 r \$0-libdir;
+#X obj 41 63 pack s s;
+#X msg 41 113 symbol \$2/extra/\$1;
+#X connect 0 0 3 0;
+#X connect 2 0 3 1;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 269 569 pd test_path;
+#X obj 269 594 t a b;
+#N canvas 384 25 589 486 test_load_and_path_with_declare 0;
+#X obj 64 21 inlet;
+#N canvas 0 0 450 300 \$0-load_declare 0;
+#X restore 647 149 pd \$0-load_declare;
+#X obj 153 161 f;
+#X obj 183 161 + 1;
+#X obj 153 186 * 30;
+#X obj 153 216 pack f s;
+#X obj 153 291 s pd-\$0-load_declare;
+#X obj 596 22 inlet;
+#X obj 596 77 t b b;
+#X msg 171 132 0;
+#X msg 628 246 clear;
+#X msg 153 246 obj 5 \$1 declare -lib \$2;
+#X obj 64 56 trigger bang bang anything;
+#X msg 64 246 clear;
+#X text 59 324 Load each object by dynamically instantiating a [declare
+-lib libname]. We must clear the subpatch afterward as well to make
+sure we don't accidentally start with some loaded libs after editing
+this patch. Since Pd doesn't have any way to unload a library this
+works.;
+#X obj 334 21 inlet;
+#X obj 423 161 f;
+#X obj 453 161 + 1;
+#X obj 423 186 * 30;
+#X obj 423 216 pack f s;
+#X msg 441 132 0;
+#X obj 334 56 trigger bang bang anything;
+#X msg 334 246 clear;
+#X msg 423 246 obj 5 \$1 declare -path \$2;
+#X text 111 21 load a lib;
+#X text 380 22 set a path;
+#X connect 0 0 12 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 1;
+#X connect 4 0 5 0;
+#X connect 5 0 11 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 20 0;
+#X connect 8 1 10 0;
+#X connect 9 0 2 1;
+#X connect 10 0 6 0;
+#X connect 11 0 6 0;
+#X connect 12 0 13 0;
+#X connect 12 1 2 0;
+#X connect 12 2 5 1;
+#X connect 13 0 6 0;
+#X connect 15 0 21 0;
+#X connect 16 0 17 0;
+#X connect 16 0 18 0;
+#X connect 17 0 16 1;
+#X connect 18 0 19 0;
+#X connect 19 0 23 0;
+#X connect 20 0 16 1;
+#X connect 21 0 22 0;
+#X connect 21 1 16 0;
+#X connect 21 2 19 1;
+#X connect 22 0 6 0;
+#X connect 23 0 6 0;
+#X restore 97 654 pd test_load_and_path_with_declare;
+#N canvas 259 121 571 514 results 0;
+#X obj 62 25 inlet;
+#X obj 235 33 r \$0-current-libdir-name;
+#X obj 146 33 r \$0-fail;
+#X obj 146 86 list prepend;
+#X msg 235 58 \$1:;
+#X obj 146 187 print error;
+#X text 251 141 add counter;
+#X obj 156 214 b;
+#X obj 156 239 f;
+#X obj 196 239 + 1;
+#X floatatom 196 276 5 0 0 0 failures - -, f 5;
+#X obj 62 258 f;
+#X msg 94 327 gui;
+#X obj 94 352 pdinfo;
+#X obj 62 384 list prepend;
+#X msg 180 389 all tests succeeded!;
+#X obj 180 414 print info;
+#X obj 180 324 sel 0 1;
+#X msg 343 389 1 test failed;
+#X msg 356 359 \$1 tests failed;
+#X obj 62 410 route 0;
+#X obj 62 435 != 0;
+#X obj 62 485 s pd;
+#X msg 62 460 quit \$1;
+#X obj 343 414 print error;
+#X obj 146 112 list prepend add;
+#X obj 146 137 list trim;
+#X obj 146 162 textfile;
+#X obj 62 283 t a b a b;
+#X obj 79 60 t b b;
+#X msg 22 123 rewind;
+#X obj 22 83 until;
+#X connect 0 0 11 0;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 2 0 7 0;
+#X connect 3 0 25 0;
+#X connect 4 0 3 1;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 8 1;
+#X connect 9 0 10 0;
+#X connect 9 0 11 1;
+#X connect 11 0 28 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 1;
+#X connect 14 0 20 0;
+#X connect 15 0 16 0;
+#X connect 17 0 15 0;
+#X connect 17 1 18 0;
+#X connect 17 2 19 0;
+#X connect 18 0 24 0;
+#X connect 19 0 24 0;
+#X connect 20 0 21 0;
+#X connect 21 0 23 0;
+#X connect 23 0 22 0;
+#X connect 25 0 26 0;
+#X connect 26 0 27 0;
+#X connect 27 0 5 0;
+#X connect 27 1 31 1;
+#X connect 28 0 14 0;
+#X connect 28 1 12 0;
+#X connect 28 2 17 0;
+#X connect 28 3 29 0;
+#X connect 29 0 31 0;
+#X connect 29 1 30 0;
+#X connect 30 0 27 0;
+#X connect 31 0 27 0;
+#X restore 37 756 pd results;
+#X obj 249 284 s \$0-current-libdir-name;
+#X obj 77 223 trigger anything anything;
+#X obj 674 284 t a;
+#X obj 674 504 t a;
+#X msg 77 72 libdir cyclone zexy creb cxc iemlib list-abs mapping markex
+maxlib memento mjlib motex osx pddp pdogg pixeltango pmpd rradical
+sigpack smlib unauthorized vbap pan freeverb~ hcs jmmmp ext13 ggee
+iem_anything ekext hexloader disis lyonpotpourri;
+#X obj 37 44 t b b b b;
+#N canvas 340 199 450 300 libs_not_loaded_by_default 1;
+#X obj 10 11 inlet;
+#X obj 10 231 outlet;
+#X msg 10 36 adaptive arraysize autotune~ bassemu~ bob~ boids bonk~
+bsaylor choice comport controctopus fluid~ hid iem16 iem_adaptfilt
+iem_ambi iem_bin_ambi iem_delay iemgui iemmatrix iem_roomsim iem_spec2
+iem_tab iemxmlrpc jasch_lib K12 la-kitchen loop~ lrshift~ memento-p
+mjlib moocow moonlib motex mrpeach nsend pan pd~ pdcontainer pd-wavelet
+pique plugin~ pmpd purepd rjlib rradical rtc sfruit sigmund~ stdout
+timestretch tof windowing;
+#X text 110 172 ratchet up as we go;
+#X obj 10 173 list split 12;
+#X connect 0 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 1 0;
+#X restore 57 164 pd libs_not_loaded_by_default;
+#X connect 0 0 2 0;
+#X connect 1 0 4 0;
+#X connect 2 0 14 0;
+#X connect 3 0 13 0;
+#X connect 4 0 29 0;
+#X connect 5 0 6 0;
+#X connect 5 1 8 0;
+#X connect 6 0 30 0;
+#X connect 7 0 40 0;
+#X connect 9 0 33 2;
+#X connect 11 0 10 0;
+#X connect 12 0 33 0;
+#X connect 13 0 12 0;
+#X connect 18 0 6 2;
+#X connect 18 0 3 1;
+#X connect 19 0 20 0;
+#X connect 19 1 1 0;
+#X connect 19 2 6 1;
+#X connect 19 3 10 0;
+#X connect 19 3 23 0;
+#X connect 20 0 21 0;
+#X connect 22 0 25 0;
+#X connect 23 0 22 0;
+#X connect 28 0 36 0;
+#X connect 29 0 5 0;
+#X connect 30 0 3 0;
+#X connect 31 0 32 0;
+#X connect 32 0 33 1;
+#X connect 32 1 33 2;
+#X connect 36 0 19 0;
+#X connect 36 1 35 0;
+#X connect 36 1 37 0;
+#X connect 37 0 38 0;
+#X connect 38 0 31 0;
+#X connect 39 0 28 0;
+#X connect 40 0 34 0;
+#X connect 40 1 41 0;
+#X connect 40 2 39 0;
+#X connect 40 3 0 0;
+#X connect 41 0 28 0;