[ InsertSub ancestor; receive_action = ##Insert; if (second==d_obj || player in second) <>; if (parent(noun)~=player) return L__M(##Insert,1,noun); ancestor = CommonAncestor(noun, second); if (ancestor == noun) return L__M(##Insert, 5, noun); if (ObjectIsUntouchable(second)) return; if (second ~= ancestor) { action=##Receive; if (RunRoutines(second,before)~=0) { action=##Insert; rtrue; } action=##Insert; if (second has container && second hasnt open) return L__M(##Insert,3,second); } if (second hasnt container) return L__M(##Insert,2,second); if (noun has worn) { L__M(##Insert,6,noun); ; if (noun has worn) return; } if (children(second) >= ValueOrRun(second,capacity)) return L__M(##Insert,7,second); move noun to second; if (AfterRoutines()==1) rtrue; if (second ~= ancestor) { action=##Receive; if (RunRoutines(second,after)~=0) { action=##Insert; rtrue; } action=##Insert; } if (keep_silent==1) rtrue; if (multiflag==1) return L__M(##Insert,8,noun); L__M(##Insert,9,noun); ];