diff --git a/README.md b/README.md
index dfecd8854feb9be94796f8900a5add4e850ba6cd..7e64c5d428b5885ba50a867416a2ba5cdcdaf7d2 100644
--- a/README.md
+++ b/README.md
@@ -69,5 +69,5 @@ Please make sure to read the Issue Reporting Checklist before opening an issue.
 
 ## Changelog
 
-Detailed changes for each release are documented in the corresponding [CHANGELOG](./CHANGELOG) file.
+Detailed changes for each release are documented in the corresponding CHANGELOG files.
 
diff --git a/docs/Monster.Namespace.html b/docs/Monster.Namespace.html
index 050a451a51d720ea1e889f540e5484c1325ea1ea..d80f9b50060cc7de89d6e2133e9ae799cceb26f3 100644
--- a/docs/Monster.Namespace.html
+++ b/docs/Monster.Namespace.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/Monster_Constraints.AbstractConstraint.html b/docs/Monster_Constraints.AbstractConstraint.html
index c09780a77eec85a3ecb3ab5c538904097d551b0e..8b5f85f179fcea2f23aaa34b860bfcf01f61cdd6 100644
--- a/docs/Monster_Constraints.AbstractConstraint.html
+++ b/docs/Monster_Constraints.AbstractConstraint.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/Monster_Constraints.AbstractOperator.html b/docs/Monster_Constraints.AbstractOperator.html
index 607de64fb8e3f986e104aa6d0364f5a09ed2fa18..a810aa4f55251d7c4e265d52a4ca86bdfcf1890d 100644
--- a/docs/Monster_Constraints.AbstractOperator.html
+++ b/docs/Monster_Constraints.AbstractOperator.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/Monster_Constraints.AndOperator.html b/docs/Monster_Constraints.AndOperator.html
index 2e853f371b92d5947f5c412a2be1e3d721de082b..c01027fc2e6c9f84bcde982b9c1d97e399344c03 100644
--- a/docs/Monster_Constraints.AndOperator.html
+++ b/docs/Monster_Constraints.AndOperator.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -57,14 +57,14 @@
         
             <div class="class-description usertext"><p>The AndOperator is used to link several contraints. The constraint is fulfilled if all constraints of the operators are fulfilled.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
 new Monster.Constraint.AndOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';
-import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';
+import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
 new AndOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
 &lt;/script>
 </code></pre></div>
diff --git a/docs/Monster_Constraints.Invalid.html b/docs/Monster_Constraints.Invalid.html
index 5d935c7c9765867a886b39d5b08c5e7308796396..c05f2de9b2cc2b26fe44513173c2b5306acbab1d 100644
--- a/docs/Monster_Constraints.Invalid.html
+++ b/docs/Monster_Constraints.Invalid.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -58,13 +58,13 @@
             <div class="class-description usertext"><p>the invalid constraint allows an always invalid query to be performed. this contraint is mainly intended for testing.</p>
 <p>you can call the method via the monster namespace <code>new Monster.Constraint.Invalid()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
 new Monster.Constraint.Invalid().catch(()=>console.log(true));
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';
+import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
 new Invalid().catch(()=>console.log(true));
 &lt;/script>
 </code></pre></div>
diff --git a/docs/Monster_Constraints.IsArray.html b/docs/Monster_Constraints.IsArray.html
index 74bdb33f78fe5669b073d07983f655a5e49cd376..dcc25021cb7a38653660b8883f455d8016c6cb46 100644
--- a/docs/Monster_Constraints.IsArray.html
+++ b/docs/Monster_Constraints.IsArray.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -57,13 +57,13 @@
         
             <div class="class-description usertext"><p>you can call the method via the monster namespace <code>new Monster.Constraint.IsObject()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
 console.log(new Monster.Constraint.IsArray())
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';
+import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
 console.log(new IsArray())
 &lt;/script>
 </code></pre></div>
diff --git a/docs/Monster_Constraints.IsObject.html b/docs/Monster_Constraints.IsObject.html
index 9788f6a24fa92a0db7ac5bde64639948d41b701d..9362f72b8d033fed7bcf943192605b91b5312b8f 100644
--- a/docs/Monster_Constraints.IsObject.html
+++ b/docs/Monster_Constraints.IsObject.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -57,13 +57,13 @@
         
             <div class="class-description usertext"><p>you can call the method via the monster namespace <code>new Monster.Constraint.IsObject()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
 console.log(new Monster.Constraint.IsObject())
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';
+import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
 console.log(new IsObject())
 &lt;/script>
 </code></pre></div>
diff --git a/docs/Monster_Constraints.OrOperator.html b/docs/Monster_Constraints.OrOperator.html
index 10dabe077105c9249d66578ccea4a4fd72f0db99..d7db072ecf6f2003bc049adc7086f90cfadb4bd6 100644
--- a/docs/Monster_Constraints.OrOperator.html
+++ b/docs/Monster_Constraints.OrOperator.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -57,14 +57,14 @@
         
             <div class="class-description usertext"><p>The OrOperator is used to link several constraints. The constraint is fulfilled if one of the constraints is fulfilled.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
 new Monster.Constraint.OrOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';
-import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';
+import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
 new OrOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
 &lt;/script>
 </code></pre></div>
diff --git a/docs/Monster_Constraints.Valid.html b/docs/Monster_Constraints.Valid.html
index bae4248da42a423efd7e620d77322994e49776b5..d398e0dadffc845a63fecd5334bc4a8bd241ab6c 100644
--- a/docs/Monster_Constraints.Valid.html
+++ b/docs/Monster_Constraints.Valid.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -58,13 +58,13 @@
             <div class="class-description usertext"><p>the valid constraint allows an always valid query to be performed. this contraint is mainly intended for testing.</p>
 <p>you can call the method via the monster namespace <code>new Monster.Constraint.Valid()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
 new Monster.Constraint.Valid().then(()=>console.log(true));
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';
+import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
 new Valid().then(()=>console.log(true));
 &lt;/script>
 </code></pre></div>
diff --git a/docs/Monster_Constraints.html b/docs/Monster_Constraints.html
index 98942c826ea7fb6d27fd8405db4e901040920337..39d9e3804a9ad69803bf435845661e035d2e3b79 100644
--- a/docs/Monster_Constraints.html
+++ b/docs/Monster_Constraints.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/Monster_Math.html b/docs/Monster_Math.html
index d2d757c5660f68ca47e741bdef5902f3501e2547..ccb272096672f622c7a147c0a51637463fae401c 100644
--- a/docs/Monster_Math.html
+++ b/docs/Monster_Math.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -202,13 +202,13 @@
     <p>this function uses crypt and returns a random number.</p>
 <p>you can call the method via the monster namespace <code>Monster.Math.random()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
 console.log(Monster.Math.random(1,10)) // ↦ 5
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';
+import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
 console.log(random(1,10)) // ↦ 5
 &lt;/script>
 </code></pre>
diff --git a/docs/Monster_Types.ID.html b/docs/Monster_Types.ID.html
index c1eda4b5e1baa98979bb4a4caeaacff119082017..e82388f13b7fc6a47e94a38da4265232abbc8a54 100644
--- a/docs/Monster_Types.ID.html
+++ b/docs/Monster_Types.ID.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -58,15 +58,13 @@
             <div class="class-description usertext"><p>id class</p>
 <p>you can call the method via the monster namespace <code>new Monster.Types.ID()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
-console.log(new Monster.Types.ID())
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
 console.log(new Monster.Types.ID())
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
-console.log(new ID())
+import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
 console.log(new ID())
 &lt;/script>
 </code></pre></div>
@@ -96,7 +94,7 @@ console.log(new ID())
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_id.js.html">types/id.js</a>, <a href="types_id.js.html#line40">line 40</a>
+        <a href="types_id.js.html">types/id.js</a>, <a href="types_id.js.html#line38">line 38</a>
     </li></ul></dd>
     
 
diff --git a/docs/Monster_Types.Object.html b/docs/Monster_Types.Object.html
index 783308c71c98cb1a9501f1a49a6b4be7da1440d6..48fc86f47130226b3cf7a00bee5fa68120e19656 100644
--- a/docs/Monster_Types.Object.html
+++ b/docs/Monster_Types.Object.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -58,14 +58,14 @@
             <div class="class-description usertext"><p>This is the base class from which all monster classes are derived.</p>
 <p>you can call the method via the monster namespace <code>new Monster.Types.Object()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
 console.log(new Monster.Types.Object())
 console.log(new Monster.Types.Object())
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';
+import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
 console.log(new Object())
 console.log(new Object())
 &lt;/script>
diff --git a/docs/Monster_Types.Observer.html b/docs/Monster_Types.Observer.html
index 751a80b01ec52ffb0399443a4e6817460608c776..03f48dffd1bd3991c227008a2379894d04a32830 100644
--- a/docs/Monster_Types.Observer.html
+++ b/docs/Monster_Types.Observer.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -58,13 +58,13 @@
             <div class="class-description usertext"><p>an observer manages a callback function</p>
 <p>you can call the method via the monster namespace <code>new Monster.Types.Observer()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
 console.log(new Monster.Types.Observer())
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';
+import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
 console.log(Observer())
 &lt;/script>
 </code></pre>
@@ -114,7 +114,7 @@ Observer(function(a, b, c) {
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line65">line 65</a>
+        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line66">line 66</a>
     </li></ul></dd>
     
 
@@ -316,7 +316,7 @@ Observer(function(a, b, c) {
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line89">line 89</a>
+        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line91">line 91</a>
     </li></ul></dd>
     
 
@@ -466,7 +466,7 @@ Observer(function(a, b, c) {
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line108">line 108</a>
+        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line110">line 110</a>
     </li></ul></dd>
     
 
@@ -567,7 +567,7 @@ Observer(function(a, b, c) {
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line117">line 117</a>
+        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line119">line 119</a>
     </li></ul></dd>
     
 
@@ -717,7 +717,7 @@ Observer(function(a, b, c) {
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line99">line 99</a>
+        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line101">line 101</a>
     </li></ul></dd>
     
 
@@ -867,7 +867,7 @@ Observer(function(a, b, c) {
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line126">line 126</a>
+        <a href="types_observer.js.html">types/observer.js</a>, <a href="types_observer.js.html#line128">line 128</a>
     </li></ul></dd>
     
 
diff --git a/docs/Monster_Types.ObserverList.html b/docs/Monster_Types.ObserverList.html
index f796f677181828b9b8f7a57e87a3f7ac686b4e30..dfac1e0af6eba7f3154992baa9b470e9fbc0b482 100644
--- a/docs/Monster_Types.ObserverList.html
+++ b/docs/Monster_Types.ObserverList.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -58,14 +58,14 @@
             <div class="class-description usertext"><p>With the help of the ObserverList class, observer can be managed.</p>
 <p>you can call the method via the monster namespace <code>new Monster.Types.ObserverList()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
 console.log(new Monster.Types.ObserverList()) 
 console.log(new Monster.Types.ObserverList()) 
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';
+import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
 console.log(ObserverList())
 console.log(ObserverList())
 &lt;/script>
diff --git a/docs/Monster_Types.ProxyObserver.html b/docs/Monster_Types.ProxyObserver.html
index 0d8674fabc8d6717d2b27356af3c589b8372aa02..f85f2ea9f6fd41997590c2576540bbf89cd71dbf 100644
--- a/docs/Monster_Types.ProxyObserver.html
+++ b/docs/Monster_Types.ProxyObserver.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -58,13 +58,13 @@
             <div class="class-description usertext"><p>an observer manages a callback function</p>
 <p>you can call the method via the monster namespace <code>new Monster.Types.Observer()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
 console.log(new Monster.Types.ProxyObserver())
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';
+import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
 console.log(new ProxyObserver())
 &lt;/script>
 </code></pre>
@@ -117,7 +117,7 @@ s.a.b.c = false;
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line74">line 74</a>
+        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line66">line 66</a>
     </li></ul></dd>
     
 
@@ -276,7 +276,7 @@ s.a.b.c = false;
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line114">line 114</a>
+        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line110">line 110</a>
     </li></ul></dd>
     
 
@@ -430,7 +430,7 @@ s.a.b.c = false;
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line144">line 144</a>
+        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line140">line 140</a>
     </li></ul></dd>
     
 
@@ -580,7 +580,7 @@ s.a.b.c = false;
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line125">line 125</a>
+        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line121">line 121</a>
     </li></ul></dd>
     
 
@@ -734,7 +734,7 @@ s.a.b.c = false;
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line104">line 104</a>
+        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line100">line 100</a>
     </li></ul></dd>
     
 
@@ -839,7 +839,7 @@ s.a.b.c = false;
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line96">line 96</a>
+        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line91">line 91</a>
     </li></ul></dd>
     
 
@@ -945,7 +945,7 @@ s.a.b.c = false;
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line135">line 135</a>
+        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line131">line 131</a>
     </li></ul></dd>
     
 
diff --git a/docs/Monster_Types.Queue.html b/docs/Monster_Types.Queue.html
new file mode 100644
index 0000000000000000000000000000000000000000..ab6ecd98b5fb33c1d3703d9b40a9c873840230f5
--- /dev/null
+++ b/docs/Monster_Types.Queue.html
@@ -0,0 +1,794 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    
+    <meta charset="utf-8">
+    <title>Queue - awaken the monster in you; javascript library by schukai GmbH</title>
+    
+    <meta name="description" content="javascript library for optimal use on fast and flexible pages." />
+    
+    
+    
+    <script src="scripts/prettify/prettify.js"></script>
+    <script src="scripts/prettify/lang-css.js"></script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
+    <script src="scripts/nav.js" defer></script>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+</head>
+<body>
+
+<input type="checkbox" id="nav-trigger" class="nav-trigger" />
+<label for="nav-trigger" class="navicon-button x">
+  <div class="navicon"></div>
+</label>
+
+<label for="nav-trigger" class="overlay"></label>
+
+<nav >
+    
+    <input type="text" id="nav-search" placeholder="Search" />
+    
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
+</nav>
+
+<div id="main">
+    
+    <h1 class="page-title">Queue</h1>
+    
+
+    
+
+
+
+
+<section>
+
+<header>
+    
+        <h2>
+            <span class="ancestors"><a href="Monster_Types.html">Monster/Types</a>.</span>
+        
+        Queue
+        </h2>
+        
+            <div class="class-description usertext"><p>queue class</p>
+<p>you can call the method via the monster namespace <code>new Monster.Types.Queue()</code>.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+console.log(new Monster.Types.Queue())
+&lt;/script>
+</code></pre>
+<p>Alternatively, you can also integrate this function individually.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+console.log(new Queue())
+&lt;/script>
+</code></pre></div>
+        
+    
+</header>
+
+<article>
+    
+        <div class="container-overview">
+        
+            
+
+    
+    <h2>Constructor</h2>
+    
+
+    <h4 class="name" id="Queue"><span class="type-signature"></span>new Queue<span class="signature">()</span><span class="type-signature"></span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_queue.js.html">types/queue.js</a>, <a href="types_queue.js.html#line28">line 28</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+    <dt class="tag-since">Since:</dt>
+    <dd class="tag-since"><ul class="dummy"><li>1.4.0</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+    <dt class="tag-copyright">Copyright:</dt>
+    <dd class="tag-copyright"><ul class="dummy"><li>schukai GmbH</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        
+        </div>
+    
+
+    
+
+    
+
+    
+    
+    
+
+     
+
+    
+
+    
+
+    
+        <h3 class="subsection-title">Methods</h3>
+
+        
+            
+
+    
+
+    <h4 class="name" id="add"><span class="type-signature"></span>add<span class="signature">(value)</span><span class="type-signature"> &rarr; {Queue}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_queue.js.html">types/queue.js</a>, <a href="types_queue.js.html#line65">line 65</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>Add a new element to the end of the queue.</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>value</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">*</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">Queue</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="clear"><span class="type-signature"></span>clear<span class="signature">()</span><span class="type-signature"> &rarr; {Queue}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_queue.js.html">types/queue.js</a>, <a href="types_queue.js.html#line75">line 75</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>remove all entries</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">Queue</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="isEmpty"><span class="type-signature"></span>isEmpty<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_queue.js.html">types/queue.js</a>, <a href="types_queue.js.html#line42">line 42</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">boolean</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="peek"><span class="type-signature"></span>peek<span class="signature">()</span><span class="type-signature"> &rarr; {*}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_queue.js.html">types/queue.js</a>, <a href="types_queue.js.html#line51">line 51</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>Read the element at the front of the queue without removing it.</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">*</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="poll"><span class="type-signature"></span>poll<span class="signature">()</span><span class="type-signature"> &rarr; {*}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_queue.js.html">types/queue.js</a>, <a href="types_queue.js.html#line86">line 86</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>Remove the element at the front of the queue
+If the queue is empty, return undefined.</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">*</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+    
+
+    
+
+    
+</article>
+
+</section>
+
+
+
+
+    
+    
+</div>
+
+<br class="clear">
+
+<footer>
+</footer>
+
+<script>prettyPrint();</script>
+<script src="scripts/polyfill.js"></script>
+<script src="scripts/linenumber.js"></script>
+
+<script src="scripts/search.js" defer></script>
+
+
+<script src="scripts/collapse.js" defer></script>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/Monster_Types.Stack.html b/docs/Monster_Types.Stack.html
new file mode 100644
index 0000000000000000000000000000000000000000..8c65b32270cb8511c4f7ae8c8e817de171726d4c
--- /dev/null
+++ b/docs/Monster_Types.Stack.html
@@ -0,0 +1,795 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    
+    <meta charset="utf-8">
+    <title>Stack - awaken the monster in you; javascript library by schukai GmbH</title>
+    
+    <meta name="description" content="javascript library for optimal use on fast and flexible pages." />
+    
+    
+    
+    <script src="scripts/prettify/prettify.js"></script>
+    <script src="scripts/prettify/lang-css.js"></script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
+    <script src="scripts/nav.js" defer></script>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+</head>
+<body>
+
+<input type="checkbox" id="nav-trigger" class="nav-trigger" />
+<label for="nav-trigger" class="navicon-button x">
+  <div class="navicon"></div>
+</label>
+
+<label for="nav-trigger" class="overlay"></label>
+
+<nav >
+    
+    <input type="text" id="nav-search" placeholder="Search" />
+    
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
+</nav>
+
+<div id="main">
+    
+    <h1 class="page-title">Stack</h1>
+    
+
+    
+
+
+
+
+<section>
+
+<header>
+    
+        <h2>
+            <span class="ancestors"><a href="Monster_Types.html">Monster/Types</a>.</span>
+        
+        Stack
+        </h2>
+        
+            <div class="class-description usertext"><p>Stack class</p>
+<p>you can call the method via the monster namespace <code>new Monster.Types.Queue()</code>.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/stack.js';
+console.log(new Monster.Types.Stack())
+&lt;/script>
+</code></pre>
+<p>Alternatively, you can also integrate this function individually.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/stack.js';
+console.log(new Stack())
+&lt;/script>
+</code></pre></div>
+        
+    
+</header>
+
+<article>
+    
+        <div class="container-overview">
+        
+            
+
+    
+    <h2>Constructor</h2>
+    
+
+    <h4 class="name" id="Stack"><span class="type-signature"></span>new Stack<span class="signature">()</span><span class="type-signature"></span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_stack.js.html">types/stack.js</a>, <a href="types_stack.js.html#line28">line 28</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+    <dt class="tag-since">Since:</dt>
+    <dd class="tag-since"><ul class="dummy"><li>1.4.0</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+    <dt class="tag-copyright">Copyright:</dt>
+    <dd class="tag-copyright"><ul class="dummy"><li>schukai GmbH</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        
+        </div>
+    
+
+    
+
+    
+
+    
+    
+    
+
+     
+
+    
+
+    
+
+    
+        <h3 class="subsection-title">Methods</h3>
+
+        
+            
+
+    
+
+    <h4 class="name" id="clear"><span class="type-signature"></span>clear<span class="signature">()</span><span class="type-signature"> &rarr; {Queue}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_stack.js.html">types/stack.js</a>, <a href="types_stack.js.html#line75">line 75</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>remove all entries</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">Queue</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="isEmpty"><span class="type-signature"></span>isEmpty<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_stack.js.html">types/stack.js</a>, <a href="types_stack.js.html#line42">line 42</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">boolean</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="peek"><span class="type-signature"></span>peek<span class="signature">()</span><span class="type-signature"> &rarr; {*}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_stack.js.html">types/stack.js</a>, <a href="types_stack.js.html#line51">line 51</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>looks at the object at the top of this stack without removing it from the stack.</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">*</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="pop"><span class="type-signature"></span>pop<span class="signature">()</span><span class="type-signature"> &rarr; {*}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_stack.js.html">types/stack.js</a>, <a href="types_stack.js.html#line87">line 87</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>removes the object at the top of this stack and returns
+that object as the value of this function. is the stack empty
+the return value is undefined.</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">*</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="push"><span class="type-signature"></span>push<span class="signature">(value)</span><span class="type-signature"> &rarr; {Queue}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_stack.js.html">types/stack.js</a>, <a href="types_stack.js.html#line65">line 65</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>pushes an item onto the top of this stack.</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>value</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">*</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">Queue</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+    
+
+    
+
+    
+</article>
+
+</section>
+
+
+
+
+    
+    
+</div>
+
+<br class="clear">
+
+<footer>
+</footer>
+
+<script>prettyPrint();</script>
+<script src="scripts/polyfill.js"></script>
+<script src="scripts/linenumber.js"></script>
+
+<script src="scripts/search.js" defer></script>
+
+
+<script src="scripts/collapse.js" defer></script>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/Monster_Types.TokenList.html b/docs/Monster_Types.TokenList.html
index 81041aa4071bff5c41e6707e2875f9d12ee44930..97dfb3b1a8703dd7e00c5389a6c4c606dd32755d 100644
--- a/docs/Monster_Types.TokenList.html
+++ b/docs/Monster_Types.TokenList.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -59,14 +59,14 @@
 <p>The tokenlist offers various functions to manipulate values. For example, you can add, remove or replace a class in a CSS list.</p>
 <p>you can call the method via the monster namespace <code>new Monster.Types.TokenList()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
 console.log(new Monster.Types.TokenList(&quot;myclass row&quot;))
 console.log(new Monster.Types.TokenList(&quot;myclass row&quot;))
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';
+import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
 console.log(new TokenList(&quot;myclass row&quot;))
 console.log(new TokenList(&quot;myclass row&quot;))
 &lt;/script>
diff --git a/docs/Monster_Types.UniqueQueue.html b/docs/Monster_Types.UniqueQueue.html
new file mode 100644
index 0000000000000000000000000000000000000000..4fdf2178babe5ff5ee87ef612fc9bed112f6fb3a
--- /dev/null
+++ b/docs/Monster_Types.UniqueQueue.html
@@ -0,0 +1,617 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    
+    <meta charset="utf-8">
+    <title>UniqueQueue - awaken the monster in you; javascript library by schukai GmbH</title>
+    
+    <meta name="description" content="javascript library for optimal use on fast and flexible pages." />
+    
+    
+    
+    <script src="scripts/prettify/prettify.js"></script>
+    <script src="scripts/prettify/lang-css.js"></script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
+    <script src="scripts/nav.js" defer></script>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+</head>
+<body>
+
+<input type="checkbox" id="nav-trigger" class="nav-trigger" />
+<label for="nav-trigger" class="navicon-button x">
+  <div class="navicon"></div>
+</label>
+
+<label for="nav-trigger" class="overlay"></label>
+
+<nav >
+    
+    <input type="text" id="nav-search" placeholder="Search" />
+    
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
+</nav>
+
+<div id="main">
+    
+    <h1 class="page-title">UniqueQueue</h1>
+    
+
+    
+
+
+
+
+<section>
+
+<header>
+    
+        <h2>
+            <span class="ancestors"><a href="Monster_Types.html">Monster/Types</a>.</span>
+        
+        UniqueQueue
+        </h2>
+        
+            <div class="class-description usertext"><p>UniqueQueue class</p>
+<p>you can call the method via the monster namespace <code>new Monster.Types.Queue()</code>.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+console.log(new Monster.Types.UniqueQueue())
+&lt;/script>
+</code></pre>
+<p>Alternatively, you can also integrate this function individually.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+console.log(new UniqueQueue())
+&lt;/script>
+</code></pre></div>
+        
+    
+</header>
+
+<article>
+    
+        <div class="container-overview">
+        
+            
+
+    
+    <h2>Constructor</h2>
+    
+
+    <h4 class="name" id="UniqueQueue"><span class="type-signature"></span>new UniqueQueue<span class="signature">()</span><span class="type-signature"></span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_uniquequeue.js.html">types/uniquequeue.js</a>, <a href="types_uniquequeue.js.html#line29">line 29</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+    <dt class="tag-since">Since:</dt>
+    <dd class="tag-since"><ul class="dummy"><li>1.4.0</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+    <dt class="tag-copyright">Copyright:</dt>
+    <dd class="tag-copyright"><ul class="dummy"><li>schukai GmbH</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        
+        </div>
+    
+
+    
+
+    
+
+    
+    
+    
+
+     
+
+    
+
+    
+
+    
+        <h3 class="subsection-title">Methods</h3>
+
+        
+            
+
+    
+
+    <h4 class="name" id="add"><span class="type-signature"></span>add<span class="signature">(value)</span><span class="type-signature"> &rarr; {Queue}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_uniquequeue.js.html">types/uniquequeue.js</a>, <a href="types_uniquequeue.js.html#line46">line 46</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>Add a new element to the end of the queue.</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>value</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">object</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Throws:</h5>
+
+        
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>value is not a object</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+
+    
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">Queue</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="clear"><span class="type-signature"></span>clear<span class="signature">()</span><span class="type-signature"> &rarr; {Queue}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_uniquequeue.js.html">types/uniquequeue.js</a>, <a href="types_uniquequeue.js.html#line63">line 63</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>remove all entries</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">Queue</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="poll"><span class="type-signature"></span>poll<span class="signature">()</span><span class="type-signature"> &rarr; {object}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_uniquequeue.js.html">types/uniquequeue.js</a>, <a href="types_uniquequeue.js.html#line75">line 75</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>Remove the element at the front of the queue
+If the queue is empty, return undefined.</p>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">object</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+    
+
+    
+
+    
+</article>
+
+</section>
+
+
+
+
+    
+    
+</div>
+
+<br class="clear">
+
+<footer>
+</footer>
+
+<script>prettyPrint();</script>
+<script src="scripts/polyfill.js"></script>
+<script src="scripts/linenumber.js"></script>
+
+<script src="scripts/search.js" defer></script>
+
+
+<script src="scripts/collapse.js" defer></script>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/Monster_Types.Version.html b/docs/Monster_Types.Version.html
index bf3de4d20f1d3346635d5f25edd4ad564b27328f..6fab2082f7273a5faab29e877df0d7a6615d0c72 100644
--- a/docs/Monster_Types.Version.html
+++ b/docs/Monster_Types.Version.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -58,14 +58,14 @@
             <div class="class-description usertext"><p>the version object contains a sematic version number</p>
 <p>you can create the object via the monster namespace <code>new Monster.Types.Version()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
 console.log(new Monster.Types.Version('1.2.3')) // ↦ 1.2.3
 console.log(new Monster.Types.Version('1')) // ↦ 1.0.0
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this class individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
 console.log(new Version('1.2.3')) // ↦ 1.2.3
 console.log(new Version('1')) // ↦ 1.0.0
 &lt;/script>
diff --git a/docs/Monster_Types.html b/docs/Monster_Types.html
index 795f1c8015adaff097264ca3c897ad92b57c81fb..5b44bb1943f86800858eb793073261ca92441e44 100644
--- a/docs/Monster_Types.html
+++ b/docs/Monster_Types.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -142,9 +142,18 @@
             <dt><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a></dt>
             <dd></dd>
         
+            <dt><a href="Monster_Types.Queue.html">Queue</a></dt>
+            <dd></dd>
+        
+            <dt><a href="Monster_Types.Stack.html">Stack</a></dt>
+            <dd></dd>
+        
             <dt><a href="Monster_Types.TokenList.html">TokenList</a></dt>
             <dd></dd>
         
+            <dt><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a></dt>
+            <dd></dd>
+        
             <dt><a href="Monster_Types.Version.html">Version</a></dt>
             <dd></dd>
         </dl>
@@ -227,14 +236,14 @@
     <p>checks whether the value passed is a array</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.isArray()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(Monster.Types.isArray('2')) // ↦ false
 console.log(Monster.Types.isArray([])) // ↦ true
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(isArray('2'))  // ↦ false
 console.log(isArray([]))  // ↦ true
 &lt;/script>
@@ -401,7 +410,7 @@ console.log(isArray([]))  // ↦ true
     <p>checks whether the value passed is a boolean</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.isBoolean()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(Monster.Types.isBoolean('2')) // ↦ false
 console.log(Monster.Types.isBoolean([])) // ↦ false
 console.log(Monster.Types.isBoolean(true)) // ↦ true
@@ -409,7 +418,7 @@ console.log(Monster.Types.isBoolean(true)) // ↦ true
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(isBoolean('2'))  // ↦ false
 console.log(isBoolean([]))  // ↦ false
 console.log(isBoolean(2>4))  // ↦ true
@@ -577,7 +586,7 @@ console.log(isBoolean(2>4))  // ↦ true
     <p>checks whether the value passed is a function</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.isFunction()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(Monster.Types.isFunction(()=>{})) // ↦ true
 console.log(Monster.Types.isFunction('2')) // ↦ false
 console.log(Monster.Types.isFunction([])) // ↦ false
@@ -585,7 +594,7 @@ console.log(Monster.Types.isFunction([])) // ↦ false
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(isFunction(()=>{})) // ↦ true
 console.log(isFunction('2'))  // ↦ false
 console.log(isFunction([]))  // ↦ false
@@ -666,6 +675,182 @@ console.log(isFunction([]))  // ↦ false
 
 
 
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">boolean</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id=".isInteger"><span class="type-signature">(static) </span>isInteger<span class="signature">(value)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_is.js.html">types/is.js</a>, <a href="types_is.js.html#line320">line 320</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+    <dt class="tag-since">Since:</dt>
+    <dd class="tag-since"><ul class="dummy"><li>1.4.0</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+    <dt class="tag-copyright">Copyright:</dt>
+    <dd class="tag-copyright"><ul class="dummy"><li>schukai GmbH</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>checks whether the value passed is an integer</p>
+<p>you can call the method via the monster namespace <code>Monster.Types.isFunction()</code>.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+console.log(Monster.Types.isInteger(()=>{})) // ↦ true
+console.log(Monster.Types.isInteger('2')) // ↦ false
+console.log(Monster.Types.isInteger(2)) // ↦ true
+&lt;/script>
+</code></pre>
+<p>Alternatively, you can also integrate this function individually.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {isInteger} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+console.log(isInteger(()=>{})) // ↦ true
+console.log(isInteger('2'))  // ↦ false
+console.log(isInteger(2))  // ↦ true
+&lt;/script>
+</code></pre>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>value</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">*</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <h5>Returns:</h5>
 
         
@@ -753,7 +938,7 @@ console.log(isFunction([]))  // ↦ false
     <p>with this function you can check if a value is iterable</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.isPrimitive()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(Monster.Types.isIterable(null)) // ↦ false
 console.log(Monster.Types.isIterable('hello')) // ↦ true
 console.log(Monster.Types.isIterable([])) // ↦ true
@@ -761,7 +946,7 @@ console.log(Monster.Types.isIterable([])) // ↦ true
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(isIterable(null))  // ↦ false
 console.log(isIterable('hello'))  // ↦ true
 console.log(isIterable([]))  // ↦ true
@@ -929,7 +1114,7 @@ console.log(isIterable([]))  // ↦ true
     <p>checks whether the value passed is a object</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.isObject()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(Monster.Types.isObject('2')) // ↦ false
 console.log(Monster.Types.isObject([])) // ↦ false
 console.log(Monster.Types.isObject({})) // ↦ true
@@ -937,7 +1122,7 @@ console.log(Monster.Types.isObject({})) // ↦ true
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(isObject('2'))  // ↦ false
 console.log(isObject([]))  // ↦ false
 &lt;/script>
@@ -1104,14 +1289,14 @@ console.log(isObject([]))  // ↦ false
     <p>checks whether the value passed is a primitive (string, number, boolean, NaN, undefined, null or symbol)</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.isPrimitive()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(Monster.Types.isPrimitive('2')) // ↦ false
 console.log(Monster.Types.isPrimitive([])) // ↦ true
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(isPrimitive('2'))  // ↦ true
 console.log(isPrimitive([]))  // ↦ false
 &lt;/script>
@@ -1278,14 +1463,14 @@ console.log(isPrimitive([]))  // ↦ false
     <p>checks whether the value passed is a string</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.isString()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(Monster.Types.isString('2')) // ↦ true
 console.log(Monster.Types.isString([])) // ↦ false
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
 console.log(isString('2'))  // ↦ true
 console.log(isString([]))  // ↦ false
 &lt;/script>
@@ -1403,7 +1588,7 @@ console.log(isString([]))  // ↦ false
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_validate.js.html">types/validate.js</a>, <a href="types_validate.js.html#line233">line 233</a>
+        <a href="types_validate.js.html">types/validate.js</a>, <a href="types_validate.js.html#line232">line 232</a>
     </li></ul></dd>
     
 
@@ -1452,14 +1637,14 @@ console.log(isString([]))  // ↦ false
     <p>this method checks if the type matches the array type. this function is identical to isArray() except that a TypeError is thrown.</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.validateArray()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(Monster.Types.validateArray('2')) // ↦ TypeError
 console.log(Monster.Types.validateArray([])) // ↦ undefined
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(validateArray('2'))  // ↦ TypeError
 console.log(validateArray([]))  // ↦ undefined
 &lt;/script>
@@ -1655,7 +1840,7 @@ console.log(validateArray([]))  // ↦ undefined
     <p>this method checks if the type matches the boolean type. this function is identical to isBoolean() except that a TypeError is thrown.</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.validateBoolean()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(Monster.Types.validateBoolean(true)) // ↦ undefined
 console.log(Monster.Types.validateBoolean('2')) // ↦ TypeError
 console.log(Monster.Types.validateBoolean([])) // ↦ TypeError
@@ -1663,7 +1848,7 @@ console.log(Monster.Types.validateBoolean([])) // ↦ TypeError
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(validateBoolean(false))  // ↦ undefined
 console.log(validateBoolean('2'))  // ↦ TypeError
 console.log(validateBoolean([]))  // ↦ TypeError
@@ -1811,7 +1996,7 @@ console.log(validateBoolean([]))  // ↦ TypeError
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_validate.js.html">types/validate.js</a>, <a href="types_validate.js.html#line271">line 271</a>
+        <a href="types_validate.js.html">types/validate.js</a>, <a href="types_validate.js.html#line270">line 270</a>
     </li></ul></dd>
     
 
@@ -1860,7 +2045,7 @@ console.log(validateBoolean([]))  // ↦ TypeError
     <p>this method checks if the type matches the function type. this function is identical to isFunction() except that a TypeError is thrown.</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.validateFunction()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(Monster.Types.validateFunction(()=>{})) // ↦ undefined
 console.log(Monster.Types.validateFunction('2')) // ↦ TypeError
 console.log(Monster.Types.validateFunction([])) // ↦ TypeError
@@ -1868,7 +2053,7 @@ console.log(Monster.Types.validateFunction([])) // ↦ TypeError
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(validateFunction(()=>{})) // ↦ undefined
 console.log(validateFunction('2'))  // ↦ TypeError
 console.log(validateFunction([]))  // ↦ TypeError
@@ -2004,6 +2189,211 @@ console.log(validateFunction([]))  // ↦ TypeError
 
     
 
+    <h4 class="name" id=".validateInteger"><span class="type-signature">(static) </span>validateInteger<span class="signature">(value)</span><span class="type-signature"> &rarr; {undefined}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="types_validate.js.html">types/validate.js</a>, <a href="types_validate.js.html#line308">line 308</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+    <dt class="tag-since">Since:</dt>
+    <dd class="tag-since"><ul class="dummy"><li>1.4.0</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+    <dt class="tag-copyright">Copyright:</dt>
+    <dd class="tag-copyright"><ul class="dummy"><li>schukai GmbH</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+<div class="description usertext">
+    <p>this method checks if the type is an integer. this function is identical to isInteger() except that a TypeError is thrown.</p>
+<p>you can call the method via the monster namespace <code>Monster.Types.validateInteger()</code>.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+console.log(Monster.Types.validateInteger(true)) // ↦ TypeError
+console.log(Monster.Types.validateInteger('2')) // ↦ TypeError
+console.log(Monster.Types.validateInteger(2)) // ↦ undefined
+&lt;/script>
+</code></pre>
+<p>Alternatively, you can also integrate this function individually.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+console.log(validateInteger(true)) // ↦ TypeError
+console.log(validateInteger('2'))  // ↦ TypeError
+console.log(validateInteger(2))  // ↦ undefined
+&lt;/script>
+</code></pre>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>value</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">*</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Throws:</h5>
+
+        
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>value is not an integer</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+
+    
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">undefined</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
     <h4 class="name" id=".validateIterable"><span class="type-signature">(static) </span>validateIterable<span class="signature">(value)</span><span class="type-signature"> &rarr; {undefined}</span></h4>
 
     
@@ -2076,14 +2466,14 @@ console.log(validateFunction([]))  // ↦ TypeError
     <p>this method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.validatePrimitive()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(Monster.Types.validateIterable('2')) // ↦ TypeError
 console.log(Monster.Types.validateIterable([])) // ↦ undefined
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(validateIterable('2'))  // ↦ TypeError
 console.log(validateIterable([]))  // ↦ undefined
 &lt;/script>
@@ -2230,7 +2620,7 @@ console.log(validateIterable([]))  // ↦ undefined
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_validate.js.html">types/validate.js</a>, <a href="types_validate.js.html#line197">line 197</a>
+        <a href="types_validate.js.html">types/validate.js</a>, <a href="types_validate.js.html#line196">line 196</a>
     </li></ul></dd>
     
 
@@ -2279,7 +2669,7 @@ console.log(validateIterable([]))  // ↦ undefined
     <p>this method checks if the type matches the object type. this function is identical to isObject() except that a TypeError is thrown.</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.validateObject()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(Monster.Types.validateObject({})) // ↦ undefined
 console.log(Monster.Types.validateObject('2')) // ↦ TypeError
 console.log(Monster.Types.validateObject([])) // ↦ TypeError
@@ -2287,7 +2677,7 @@ console.log(Monster.Types.validateObject([])) // ↦ TypeError
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(validateObject({}))  // ↦ undefined
 console.log(validateObject('2'))  // ↦ TypeError
 console.log(validateObject([]))  // ↦ TypeError
@@ -2495,14 +2885,14 @@ console.log(validateObject([]))  // ↦ TypeError
     <p>this method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.validatePrimitive()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(Monster.Types.validatePrimitive('2')) // ↦ undefined
 console.log(Monster.Types.validatePrimitive([])) // ↦ TypeError
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(validatePrimitive('2'))  // ↦ undefined
 console.log(validatePrimitive([]))  // ↦ TypeError
 &lt;/script>
@@ -2649,7 +3039,7 @@ console.log(validatePrimitive([]))  // ↦ TypeError
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_validate.js.html">types/validate.js</a>, <a href="types_validate.js.html#line158">line 158</a>
+        <a href="types_validate.js.html">types/validate.js</a>, <a href="types_validate.js.html#line157">line 157</a>
     </li></ul></dd>
     
 
@@ -2698,14 +3088,14 @@ console.log(validatePrimitive([]))  // ↦ TypeError
     <p>this method checks if the type matches the string type. this function is identical to isString() except that a TypeError is thrown.</p>
 <p>you can call the method via the monster namespace <code>Monster.Types.validateString()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(Monster.Types.validateString('2')) // ↦ undefined
 console.log(Monster.Types.validateString([])) // ↦ TypeError
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
 console.log(validateString('2'))  // ↦ undefined
 console.log(validateString([]))  // ↦ TypeError
 &lt;/script>
diff --git a/docs/Monster_Util.Comparator.html b/docs/Monster_Util.Comparator.html
index 9f47407ee5439a9d0b19e61b45cdcd4d2410e193..7f35d9dc2ed0f2dce7f1efb26a905d5694aaf7c7 100644
--- a/docs/Monster_Util.Comparator.html
+++ b/docs/Monster_Util.Comparator.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -57,14 +57,14 @@
         
             <div class="class-description usertext"><p>the comparator allows a comparison function to be abstracted.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
 console.log(new Monster.Util.Comparator())
 console.log(new Monster.Util.Comparator())
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
+import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
 console.log(new Util())
 console.log(new Util())
 &lt;/script>
diff --git a/docs/Monster_Util.Pathfinder.html b/docs/Monster_Util.Pathfinder.html
new file mode 100644
index 0000000000000000000000000000000000000000..6d09422f7547a1c1418c2d0464f8a71e72d9b1b2
--- /dev/null
+++ b/docs/Monster_Util.Pathfinder.html
@@ -0,0 +1,1062 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    
+    <meta charset="utf-8">
+    <title>Pathfinder - awaken the monster in you; javascript library by schukai GmbH</title>
+    
+    <meta name="description" content="javascript library for optimal use on fast and flexible pages." />
+    
+    
+    
+    <script src="scripts/prettify/prettify.js"></script>
+    <script src="scripts/prettify/lang-css.js"></script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
+    <script src="scripts/nav.js" defer></script>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+</head>
+<body>
+
+<input type="checkbox" id="nav-trigger" class="nav-trigger" />
+<label for="nav-trigger" class="navicon-button x">
+  <div class="navicon"></div>
+</label>
+
+<label for="nav-trigger" class="overlay"></label>
+
+<nav >
+    
+    <input type="text" id="nav-search" placeholder="Search" />
+    
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
+</nav>
+
+<div id="main">
+    
+    <h1 class="page-title">Pathfinder</h1>
+    
+
+    
+
+
+
+
+<section>
+
+<header>
+    
+        <h2>
+            <span class="ancestors"><a href="Monster_Util.html">Monster/Util</a>.</span>
+        
+        Pathfinder
+        </h2>
+        
+            <div class="class-description usertext"><p>Pathfinder class</p>
+<p>you can call the method via the monster namespace <code>new Monster.Util.Pathfinder()</code>.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/pathfinder.js';
+console.log(new Monster.Util.Pathfinder())
+&lt;/script>
+</code></pre>
+<p>Alternatively, you can also integrate this function individually.</p>
+<pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
+import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/pathfinder.js';
+console.log(new Pathfinder())
+&lt;/script>
+</code></pre>
+<p>With the help of the pathfinder, values can be read and written from an object construct.</p>
+<pre class="prettyprint source"><code>new Pathfinder({
+a: {
+    b: {
+        f: [
+            {
+                g: false,
+            }
+        ],
+    }
+}
+}).getVia(&quot;a.b.f.0.g&quot;); // ↦ false
+</code></pre>
+<p>if a value is not present or has the wrong type, a corresponding exception is thrown.</p>
+<pre class="prettyprint source"><code>new Pathfinder({}).getVia(&quot;a.b.f.0.g&quot;); // ↦ Error
+</code></pre>
+<p>The <code>Pathfinder.exists()</code> method can be used to check whether access to the path is possible.</p>
+<pre class="prettyprint source"><code>new Pathfinder({}).exists(&quot;a.b.f.0.g&quot;); // ↦ false
+</code></pre>
+<p>pathfinder can also be used to build object structures. to do this, the <code>Pathfinder.setVia()</code> method must be used.</p>
+<pre class="prettyprint source"><code>obj = {};
+new Pathfinder(obj).setVia('a.b.0.c', true); // ↦ {a:{b:[{c:true}]}}
+</code></pre></div>
+        
+    
+</header>
+
+<article>
+    
+        <div class="container-overview">
+        
+            
+
+    
+    <h2>Constructor</h2>
+    
+
+    <h4 class="name" id="Pathfinder"><span class="type-signature"></span>new Pathfinder<span class="signature">(value)</span><span class="type-signature"></span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="util_pathfinder.js.html">util/pathfinder.js</a>, <a href="util_pathfinder.js.html#line81">line 81</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+    <dt class="tag-since">Since:</dt>
+    <dd class="tag-since"><ul class="dummy"><li>1.4.0</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+    <dt class="tag-copyright">Copyright:</dt>
+    <dd class="tag-copyright"><ul class="dummy"><li>schukai GmbH</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>value</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">array</span>
+|
+
+<span class="param-type">object</span>
+|
+
+<span class="param-type">Map</span>
+|
+
+<span class="param-type">Set</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        
+        </div>
+    
+
+    
+
+    
+
+    
+    
+    
+
+     
+
+    
+
+    
+
+    
+        <h3 class="subsection-title">Methods</h3>
+
+        
+            
+
+    
+
+    <h4 class="name" id="exists"><span class="type-signature"></span>exists<span class="signature">(path)</span><span class="type-signature"> &rarr; {bool}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="util_pathfinder.js.html">util/pathfinder.js</a>, <a href="util_pathfinder.js.html#line132">line 132</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+    <dt class="tag-since">Since:</dt>
+    <dd class="tag-since"><ul class="dummy"><li>1.4.0</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>path</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Throws:</h5>
+<ul>
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>unsupported type</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>value is not a string</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>value is not an integer</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    </ul>
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">bool</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="getVia"><span class="type-signature"></span>getVia<span class="signature">(path)</span><span class="type-signature"> &rarr; {*}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="util_pathfinder.js.html">util/pathfinder.js</a>, <a href="util_pathfinder.js.html#line102">line 102</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+    <dt class="tag-since">Since:</dt>
+    <dd class="tag-since"><ul class="dummy"><li>1.4.0</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>path</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Throws:</h5>
+<ul>
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>unsupported type</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>the journey is not at its end</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">Error</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>value is not a string</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>value is not an integer</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    </ul>
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">*</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+            
+
+    
+
+    <h4 class="name" id="setVia"><span class="type-signature"></span>setVia<span class="signature">(path, value)</span><span class="type-signature"> &rarr; {Pathfinder}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="util_pathfinder.js.html">util/pathfinder.js</a>, <a href="util_pathfinder.js.html#line117">line 117</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+    <dt class="tag-since">Since:</dt>
+    <dd class="tag-since"><ul class="dummy"><li>1.4.0</li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>path</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>value</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">*</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Throws:</h5>
+<ul>
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>unsupported type</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>value is not a string</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>value is not an integer</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    </ul>
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">Pathfinder</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+    
+
+    
+
+    
+</article>
+
+</section>
+
+
+
+
+    
+    
+</div>
+
+<br class="clear">
+
+<footer>
+</footer>
+
+<script>prettyPrint();</script>
+<script src="scripts/polyfill.js"></script>
+<script src="scripts/linenumber.js"></script>
+
+<script src="scripts/search.js" defer></script>
+
+
+<script src="scripts/collapse.js" defer></script>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/Monster_Util.html b/docs/Monster_Util.html
index 69b1cad26acdd82e2e9f067bdcee52f08b5ab0ff..6b1863d80932518465f3ad109e67d1699ed544b6 100644
--- a/docs/Monster_Util.html
+++ b/docs/Monster_Util.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -129,6 +129,9 @@
         <dl>
             <dt><a href="Monster_Util.Comparator.html">Comparator</a></dt>
             <dd></dd>
+        
+            <dt><a href="Monster_Util.Pathfinder.html">Pathfinder</a></dt>
+            <dd></dd>
         </dl>
     
     
@@ -213,13 +216,13 @@ Global objects such as windows are also not cloned,</p>
 <p>If an object has a method <code>getClone()</code>, this method is used to create the clone.</p>
 <p>you can call the method via the monster namespace <code>Monster.Util.clone()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
 console.log(Monster.Util.clone({}))
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';
+import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
 console.log(clone({}))
 &lt;/script>
 </code></pre>
@@ -414,13 +417,13 @@ console.log(clone({}))
     <p>deep freeze a object</p>
 <p>you can call the method via the monster namespace <code>Monster.Util.deepFreeze()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';
 console.log(Monster.Util.deepFreeze({})) 
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';
+import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';
 console.log(deepFreeze({}))  
 &lt;/script>
 </code></pre>
diff --git a/docs/constraints_abstract.js.html b/docs/constraints_abstract.js.html
index 15c9c0be9ad8d2b7d8575f983b3d6d6bdbec9d1b..6c82a3c31f312edb781969c668f2b3a9a4500ded 100644
--- a/docs/constraints_abstract.js.html
+++ b/docs/constraints_abstract.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/constraints_abstractoperator.js.html b/docs/constraints_abstractoperator.js.html
index 2a887356e6b8549d38a98c78b0a2a0c9410ed477..5aa7d6d4ec8dc87074e7ca45bb6454479ce40aa7 100644
--- a/docs/constraints_abstractoperator.js.html
+++ b/docs/constraints_abstractoperator.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/constraints_andoperator.js.html b/docs/constraints_andoperator.js.html
index 04a1e087da165d248c2f57d0257b240a82df88b1..2d4828a3113c2a9c20f289d19fd61a44d68f6afa 100644
--- a/docs/constraints_andoperator.js.html
+++ b/docs/constraints_andoperator.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -61,7 +61,7 @@ import {AbstractOperator} from "./abstractoperator.js";
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
  * new Monster.Constraint.AndOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * &lt;/script>
  * ```
@@ -70,8 +70,8 @@ import {AbstractOperator} from "./abstractoperator.js";
  *
  * ```
  * &lt;script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
  * new AndOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * &lt;/script>
  * ```
diff --git a/docs/constraints_invalid.js.html b/docs/constraints_invalid.js.html
index 42909b5985a7398aeb142b489d1ee00a78861a20..506d089505121f8712c07ea5ed96049c20b35f86 100644
--- a/docs/constraints_invalid.js.html
+++ b/docs/constraints_invalid.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -62,7 +62,7 @@ import {Monster, AbstractConstraint} from "./abstract.js";
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
  * new Monster.Constraint.Invalid().catch(()=>console.log(true));
  * &lt;/script>
  * ```
@@ -71,7 +71,7 @@ import {Monster, AbstractConstraint} from "./abstract.js";
  *
  * ```
  * &lt;script type="module">
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
  * new Invalid().catch(()=>console.log(true));
  * &lt;/script>
  * ```
diff --git a/docs/constraints_isarray.js.html b/docs/constraints_isarray.js.html
index d023a521f5ea63f85734e642b98f9dde38730e2f..62db456af54eefba9db27ec7e6f5725c3237a105 100644
--- a/docs/constraints_isarray.js.html
+++ b/docs/constraints_isarray.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -63,7 +63,7 @@ import {isArray} from "../types/is.js";
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
  * console.log(new Monster.Constraint.IsArray())
  * &lt;/script>
  * ```
@@ -72,7 +72,7 @@ import {isArray} from "../types/is.js";
  *
  * ```
  * &lt;script type="module">
- * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';
+ * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
  * console.log(new IsArray())
  * &lt;/script>
  * ```
diff --git a/docs/constraints_isobject.js.html b/docs/constraints_isobject.js.html
index 6ecd82959b8fa51a71cd552cf30164ebd9385e5e..5c8fb8e72ddc05fe68eb89331548fb64654665f4 100644
--- a/docs/constraints_isobject.js.html
+++ b/docs/constraints_isobject.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -63,7 +63,7 @@ import {isObject} from "../types/is.js";
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
  * console.log(new Monster.Constraint.IsObject())
  * &lt;/script>
  * ```
@@ -72,7 +72,7 @@ import {isObject} from "../types/is.js";
  *
  * ```
  * &lt;script type="module">
- * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';
+ * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
  * console.log(new IsObject())
  * &lt;/script>
  * ```
diff --git a/docs/constraints_namespace.js.html b/docs/constraints_namespace.js.html
index fb3b3b7f4f7ff741e2b800a2b83ea8aa74815c29..75e108d39bd3ec3cf07e753ed750c31b1347a22b 100644
--- a/docs/constraints_namespace.js.html
+++ b/docs/constraints_namespace.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/constraints_oroperator.js.html b/docs/constraints_oroperator.js.html
index 955f81d6664c2a6a0b456f2753a71e9e019ea1b4..6cc106a03fe5460aa186464195512f302daf1a95 100644
--- a/docs/constraints_oroperator.js.html
+++ b/docs/constraints_oroperator.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -60,7 +60,7 @@ import {Monster, AbstractOperator} from "./abstractoperator.js";
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
  * new Monster.Constraint.OrOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * &lt;/script>
  * ```
@@ -69,8 +69,8 @@ import {Monster, AbstractOperator} from "./abstractoperator.js";
  *
  * ```
  * &lt;script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
  * new OrOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * &lt;/script>
  * ```
diff --git a/docs/constraints_valid.js.html b/docs/constraints_valid.js.html
index 8123b4217f6021b451c5fefda792f009c8e825a3..9384829407eff1655df22cf752fee1d7915ab34c 100644
--- a/docs/constraints_valid.js.html
+++ b/docs/constraints_valid.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -62,7 +62,7 @@ import {Monster, AbstractConstraint} from "./abstract.js";
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
  * new Monster.Constraint.Valid().then(()=>console.log(true));
  * &lt;/script>
  * ```
@@ -71,7 +71,7 @@ import {Monster, AbstractConstraint} from "./abstract.js";
  *
  * ```
  * &lt;script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
  * new Valid().then(()=>console.log(true));
  * &lt;/script>
  * ```
diff --git a/docs/global.html b/docs/global.html
index ddd0b21053dc6fc71160ad1178d2ea1d1f40aec6..6a0498e87b8476e2a0713b44d8456deb778b5192 100644
--- a/docs/global.html
+++ b/docs/global.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -192,9 +192,19 @@
 
 
         
+    
+
+    
+        <h3 class="subsection-title">Methods</h3>
+
+        
             
-<h4 class="name" id="proxySet"><span class="type-signature"></span>proxySet<span class="type-signature"> :WeakSet.&lt;object></span></h4>
 
+    
+
+    <h4 class="name" id="getValueViaPath"><span class="type-signature"></span>getValueViaPath<span class="signature">(object, string}, boolean})</span><span class="type-signature"> &rarr; {*}</span></h4>
+
+    
 
 
 
@@ -204,7 +214,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="types_proxyobserver.js.html">types/proxyobserver.js</a>, <a href="types_proxyobserver.js.html#line19">line 19</a>
+        <a href="util_pathfinder.js.html">util/pathfinder.js</a>, <a href="util_pathfinder.js.html#line158">line 158</a>
     </li></ul></dd>
     
 
@@ -243,28 +253,223 @@
 
 
 
-<div class="description usertext">
-    <p>store proxy objects</p>
-</div>
 
 
 
-    <h5>Type:</h5>
-    <ul>
-        <li>
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>object</code></td>
             
-<span class="param-type">WeakSet.&lt;object></span>
 
+            <td class="type">
+            
+                
+<span class="param-type">*</span>
 
-        </li>
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>string}</code></td>
+            
+
+            <td class="type">
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>path</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>boolean}</code></td>
+            
+
+            <td class="type">
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>check</p></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Throws:</h5>
+<ul>
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>unsupported type</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>the journey is not at its end</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">Error</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
     </ul>
 
 
+<h5>Returns:</h5>
+
+        
+
 
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">*</span>
+
+
+    </dd>
+</dl>
+
+    
 
 
 
         
+            
+
+    
+
+    <h4 class="name" id="setValueViaPath"><span class="type-signature"></span>setValueViaPath<span class="signature">(object, path, value)</span><span class="type-signature"> &rarr; {undefined|*}</span></h4>
+
+    
+
+
+
+
+<dl class="details">
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="util_pathfinder.js.html">util/pathfinder.js</a>, <a href="util_pathfinder.js.html#line214">line 214</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
     
 
     
@@ -272,6 +477,241 @@
     
 
     
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>object</code></td>
+            
+
+            <td class="type">
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>path</code></td>
+            
+
+            <td class="type">
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>value</code></td>
+            
+
+            <td class="type">
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Throws:</h5>
+<ul>
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>unsupported type</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>unsupported type</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">TypeError</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    
+        <li>
+
+<dl>
+    <dt>
+        <div class="param-desc usertext">
+        <p>the journey is not at its end</p>
+        </div>
+    </dt>
+    <dd></dd>
+    <dt>
+        <dl class="param-type">
+            <dt>
+                Type
+            </dt>
+            <dd>
+                
+<span class="param-type">Error</span>
+
+
+            </dd>
+        </dl>
+    </dt>
+    <dd></dd>
+</dl>
+
+</li>
+    </ul>
+
+
+<h5>Returns:</h5>
+
+        
+
+
+<dl class="param-type">
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">undefined</span>
+|
+
+<span class="param-type">*</span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+        
+    
+
+    
+
+    
 </article>
 
 </section>
diff --git a/docs/global.html#Monster b/docs/global.html#Monster
index ded3d8ed81f1ead1131cbbb3b76bc8c3432084dd..8f3ce7ade87d77403be8874097a914dde154acef 100644
--- a/docs/global.html#Monster
+++ b/docs/global.html#Monster
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -204,7 +204,7 @@
 <p>you must call the method in the monster namespace. this allows you to mount your own classes, objects and functions into the namespace.</p>
 <p>To avoid confusion and so that you do not accidentally overwrite existing functions, you should use the custom namespace <code>X</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/namespace.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/namespace.js';
 function hello() {
            console.log('Hello World!');
        }
@@ -397,14 +397,14 @@ Monster.X.hello(); // ↦ Hello World!
     <p>Version of monster</p>
 <p>you can call the method via the monster namespace <code>Monster.getVersion()</code>.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
 console.log(Monster.getVersion())
 console.log(Monster.getVersion())
 &lt;/script>
 </code></pre>
 <p>Alternatively, you can also integrate this function individually.</p>
 <pre class="prettyprint source"><code>&lt;script type=&quot;module&quot;>
-import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
 console.log(getVersion())
 console.log(getVersion())
 &lt;/script>
diff --git a/docs/index.html b/docs/index.html
index ea7f4b54002b945d6fd91263bb60a475cc086b22..c362547650ab608f6d849ab4b782037913d8e2ed 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -124,7 +124,7 @@ make npm-publish-${PACKAGES}
 </ul>
 <p><strong>you can also purchase a commercial licence</strong></p>
 <h2>Changelog</h2>
-<p>Detailed changes for each release are documented in the corresponding CHANGELOG file.</p></article>
+<p>Detailed changes for each release are documented in the corresponding CHANGELOG files.</p></article>
     </section>
 
 
diff --git a/docs/math_namespace.js.html b/docs/math_namespace.js.html
index 300c33a07767d35d05a00629353827a3d51a8e8f..11122090f58af9a84d6a1352fe9ccb100113d0af 100644
--- a/docs/math_namespace.js.html
+++ b/docs/math_namespace.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/math_random.js.html b/docs/math_random.js.html
index dac846d66abdfc71bb989171a3a8240234b473b0..8bca844935c7ec5b6e2f0b1357c6f0455ba8d3f0 100644
--- a/docs/math_random.js.html
+++ b/docs/math_random.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -63,7 +63,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
  * console.log(Monster.Math.random(1,10)) // ↦ 5
  * &lt;/script>
  * ```
@@ -72,7 +72,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * &lt;script type="module">
- * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';
+ * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
  * console.log(random(1,10)) // ↦ 5
  * &lt;/script>
  * ```
diff --git a/docs/namespace.js.html b/docs/namespace.js.html
index 496cbeb06e0b8d5e0a6bbe5100441e8cf3cd08e9..1ba9d404064bd8a0026edb4f7815275bb61384e8 100644
--- a/docs/namespace.js.html
+++ b/docs/namespace.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -120,7 +120,7 @@ assignToNamespace('Monster', assignToNamespace);
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/namespace.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/namespace.js';
  * function hello() {
  *            console.log('Hello World!');
  *        }
diff --git a/docs/types_id.js.html b/docs/types_id.js.html
index 461703b69c9216773cfd7f347d11fde7738fde53..fec899507e96dc8cb0b0e6f36f2868261a63067e 100644
--- a/docs/types_id.js.html
+++ b/docs/types_id.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -66,8 +66,7 @@ let internalCounter = 0;
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
- * console.log(new Monster.Types.ID())
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Monster.Types.ID())
  * &lt;/script>
  * ```
@@ -76,8 +75,7 @@ let internalCounter = 0;
  *
  * ```
  * &lt;script type="module">
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
- * console.log(new ID())
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new ID())
  * &lt;/script>
  * ```
diff --git a/docs/types_is.js.html b/docs/types_is.js.html
index 0706e3eb706a36df54c835b4b1278c7097a233d9..e6d06ace9f200b2eb4b8df130e15867d3f81a5bd 100644
--- a/docs/types_is.js.html
+++ b/docs/types_is.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -62,7 +62,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isIterable(null)) // ↦ false
  * console.log(Monster.Types.isIterable('hello')) // ↦ true
  * console.log(Monster.Types.isIterable([])) // ↦ true
@@ -73,7 +73,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * &lt;script type="module">
- * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isIterable(null))  // ↦ false
  * console.log(isIterable('hello'))  // ↦ true
  * console.log(isIterable([]))  // ↦ true
@@ -100,7 +100,7 @@ function isIterable(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isPrimitive('2')) // ↦ false
  * console.log(Monster.Types.isPrimitive([])) // ↦ true
  * &lt;/script>
@@ -110,7 +110,7 @@ function isIterable(value) {
  *
  * ```
  * &lt;script type="module">
- * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isPrimitive('2'))  // ↦ true
  * console.log(isPrimitive([]))  // ↦ false
  * &lt;/script>
@@ -145,7 +145,7 @@ function isPrimitive(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isBoolean('2')) // ↦ false
  * console.log(Monster.Types.isBoolean([])) // ↦ false
  * console.log(Monster.Types.isBoolean(true)) // ↦ true
@@ -156,7 +156,7 @@ function isPrimitive(value) {
  *
  * ```
  * &lt;script type="module">
- * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isBoolean('2'))  // ↦ false
  * console.log(isBoolean([]))  // ↦ false
  * console.log(isBoolean(2>4))  // ↦ true
@@ -185,7 +185,7 @@ function isBoolean(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isString('2')) // ↦ true
  * console.log(Monster.Types.isString([])) // ↦ false
  * &lt;/script>
@@ -195,7 +195,7 @@ function isBoolean(value) {
  *
  * ```
  * &lt;script type="module">
- * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isString('2'))  // ↦ true
  * console.log(isString([]))  // ↦ false
  * &lt;/script>
@@ -221,7 +221,7 @@ function isString(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isObject('2')) // ↦ false
  * console.log(Monster.Types.isObject([])) // ↦ false
  * console.log(Monster.Types.isObject({})) // ↦ true
@@ -232,7 +232,7 @@ function isString(value) {
  *
  * ```
  * &lt;script type="module">
- * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isObject('2'))  // ↦ false
  * console.log(isObject([]))  // ↦ false
  * &lt;/script>
@@ -263,7 +263,7 @@ function isObject(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isArray('2')) // ↦ false
  * console.log(Monster.Types.isArray([])) // ↦ true
  * &lt;/script>
@@ -273,7 +273,7 @@ function isObject(value) {
  *
  * ```
  * &lt;script type="module">
- * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isArray('2'))  // ↦ false
  * console.log(isArray([]))  // ↦ true
  * &lt;/script>
@@ -299,7 +299,7 @@ function isArray(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isFunction(()=>{})) // ↦ true
  * console.log(Monster.Types.isFunction('2')) // ↦ false
  * console.log(Monster.Types.isFunction([])) // ↦ false
@@ -310,7 +310,7 @@ function isArray(value) {
  *
  * ```
  * &lt;script type="module">
- * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isFunction(()=>{})) // ↦ true
  * console.log(isFunction('2'))  // ↦ false
  * console.log(isFunction([]))  // ↦ false
@@ -335,8 +335,44 @@ function isFunction(value) {
 
 }
 
-Monster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable);
-export {Monster, isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable}
+/**
+ * checks whether the value passed is an integer
+ *
+ * you can call the method via the monster namespace `Monster.Types.isFunction()`.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+ * console.log(Monster.Types.isInteger(()=>{})) // ↦ true
+ * console.log(Monster.Types.isInteger('2')) // ↦ false
+ * console.log(Monster.Types.isInteger(2)) // ↦ true
+ * &lt;/script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {isInteger} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+ * console.log(isInteger(()=>{})) // ↦ true
+ * console.log(isInteger('2'))  // ↦ false
+ * console.log(isInteger(2))  // ↦ true
+ * &lt;/script>
+ * ```
+ *
+ * @param {*} value
+ * @returns {boolean}
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+function isInteger(value) {
+    return Number.isInteger(value);
+}
+
+
+Monster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger);
+export {Monster, isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger}
 </code></pre>
         </article>
     </section>
diff --git a/docs/types_namespace.js.html b/docs/types_namespace.js.html
index b38ae2d745eb8be309f4057d1c475f9fbf996449..326e909238bb1590f4ea72149131a4f4ded86dcb 100644
--- a/docs/types_namespace.js.html
+++ b/docs/types_namespace.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/types_object.js.html b/docs/types_object.js.html
index 244d551b56a8033a1464a9a85799a589a8bfc365..f6df9c577e2c6eb25308c6ccd78fba4eafe57283 100644
--- a/docs/types_object.js.html
+++ b/docs/types_object.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -63,7 +63,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
  * console.log(new Monster.Types.Object())
  * console.log(new Monster.Types.Object())
  * &lt;/script>
@@ -73,7 +73,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * &lt;script type="module">
- * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';
+ * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
  * console.log(new Object())
  * console.log(new Object())
  * &lt;/script>
diff --git a/docs/types_observer.js.html b/docs/types_observer.js.html
index c6f7b8841faa19e0bc696c4ae3bcec4603b4682f..eede49098c870946a5e8d922fe0e6bb9aa19b3a5 100644
--- a/docs/types_observer.js.html
+++ b/docs/types_observer.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -57,6 +57,7 @@ import {Monster} from '../namespace.js';
 import {TokenList} from '../types/tokenlist.js';
 import {isObject} from '../types/is.js';
 import '../types/object.js';
+import {UniqueQueue} from '../types/uniquequeue.js';
 
 /**
  * an observer manages a callback function
@@ -65,7 +66,7 @@ import '../types/object.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
  * console.log(new Monster.Types.Observer())
  * &lt;/script>
  * ```
@@ -74,7 +75,7 @@ import '../types/object.js';
  *
  * ```
  * &lt;script type="module">
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
  * console.log(Observer())
  * &lt;/script>
  * ```
@@ -103,7 +104,7 @@ import '../types/object.js';
  * }, "a", 2, true)
  * &lt;/script>
  * ```
- * 
+ *
  * the callback function must have as many parameters as arguments are given.
  *
  *
@@ -128,6 +129,7 @@ class Observer extends Monster.Types.Object {
         this.callback = callback;
         this.arguments = args;
         this.tags = new TokenList;
+        this.queue = new UniqueQueue();
     }
 
     /**
@@ -179,8 +181,28 @@ class Observer extends Monster.Types.Object {
             if (!isObject(subject)) {
                 reject("subject must be an object");
             }
-            let result = self.callback.apply(subject, self.arguments);
-            resolve(result);
+
+            self.queue.add(subject);
+
+            setTimeout(() => {
+
+                // the queue and the settimeout ensure that an object is not 
+                // informed of the same change more than once.
+                if (self.queue.isEmpty()) {
+                    resolve();
+                    return;
+                }
+
+                let s = self.queue.poll();
+                let result = self.callback.apply(s, self.arguments);
+
+                if (isObject(result) &amp;&amp; result instanceof Promise) {
+                    result.then(resolve).catch(reject);
+                    return;
+                }
+
+                resolve(result);
+            }, 0)
 
         });
 
diff --git a/docs/types_observerlist.js.html b/docs/types_observerlist.js.html
index 10f1fbf0ee091d356e6d74733879ee68fb187e57..740f4490b8ac3f7e7018a2fbbc740f191a5faa9e 100644
--- a/docs/types_observerlist.js.html
+++ b/docs/types_observerlist.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -63,7 +63,7 @@ import '../types/object.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
  * console.log(new Monster.Types.ObserverList()) 
  * console.log(new Monster.Types.ObserverList()) 
  * &lt;/script>
@@ -73,7 +73,7 @@ import '../types/object.js';
  *
  * ```
  * &lt;script type="module">
- * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';
+ * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
  * console.log(ObserverList())
  * console.log(ObserverList())
  * &lt;/script>
diff --git a/docs/types_proxyobserver.js.html b/docs/types_proxyobserver.js.html
index 6c1ddb3d4d16c243db75526969bbe885354bb1dc..5eb2dfbcd476f1fa2080f35909ee80aa26d25fde 100644
--- a/docs/types_proxyobserver.js.html
+++ b/docs/types_proxyobserver.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -58,16 +58,8 @@ import {Object} from '../types/object.js';
 import {validateObject} from "./validate.js";
 import {ObserverList} from "./observerlist.js";
 import {Observer} from "./observer.js";
-import {isObject, isArray} from "./is.js";
+import {isObject, isArray, isPrimitive} from "./is.js";
 
-/**
- * store proxy objects
- *
- * @type {WeakSet&lt;object>}
- */
-var proxySet = new WeakSet();
-
-// language=JavaScript
 /**
  * an observer manages a callback function
  *
@@ -75,7 +67,7 @@ var proxySet = new WeakSet();
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
  * console.log(new Monster.Types.ProxyObserver())
  * &lt;/script>
  * ```
@@ -84,7 +76,7 @@ var proxySet = new WeakSet();
  *
  * ```
  * &lt;script type="module">
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
  * console.log(new ProxyObserver())
  * &lt;/script>
  * ```
@@ -131,7 +123,10 @@ class ProxyObserver extends Object {
         validateObject(object);
         this.realSubject = object
         this.subject = new Proxy(object, getHandler.call(this));
-        proxySet.add(this.subject);
+
+        this.objectMap = new WeakMap();
+        this.objectMap.set(this.realSubject, this.subject);
+
         this.observers = new ObserverList;
     }
 
@@ -150,7 +145,8 @@ class ProxyObserver extends Object {
      * get the proxied object
      *
      * @returns {object}
-     */    getRealSubject() {
+     */
+    getRealSubject() {
         return this.realSubject
     }
 
@@ -213,52 +209,79 @@ function getHandler() {
     const handler = {
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
-        get: function (target, property, receiver) {
-            const prop = target?.[property];
+        get: function (target, key, receiver) {
+
+            const value = Reflect.get(target, key, receiver);
 
-            // return if property not found
-            if (prop === undefined) {
-                return undefined;
+            if (typeof key === "symbol") {
+                return value;
+            }
+
+            if (isPrimitive(value)) {
+                return value;
             }
 
             // set value as proxy if object or array
-            if (isArray(prop) || isObject(prop) &amp;&amp; !proxySet.has(prop)) {
-                target[property] = new Proxy(prop, handler);
-                proxySet.add(prop);
+            if ((isArray(value) || isObject(value))) {
+                if (proxy.objectMap.has(value)) {
+                    return proxy.objectMap.get(value);
+                } else {
+                    let p = new Proxy(value, handler);
+                    proxy.objectMap.set(value, p);
+                    return p;
+                }
+
             }
 
-            return target[property];
+            return value;
 
         },
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver 
-        set: function (target, property, value, receiver) {
-            target[property] = value
-            proxy.observers.notify(proxy);
-            return true;
+        set: function (target, key, value, receiver) {
+            const result = Reflect.set(target, key, value, receiver);
+            if (typeof property !== "symbol") {
+                proxy.observers.notify(proxy);
+            }
+
+            return result;
         },
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p
-        deleteProperty: function (target, property) {
-            if (property in target) {
-                delete target[property];
-                proxy.observers.notify(proxy);
+        deleteProperty: function (target, key) {
+            if (key in target) {
+                delete target[key];
+
+                if (typeof key !== "symbol") {
+                    proxy.observers.notify(proxy);
+                }
+
+
                 return true;
             }
             return false;
         },
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc
-        defineProperty: function (target, property, descriptor) {
-            let result = Reflect.defineProperty(target, property, descriptor);
-            proxy.observers.notify(proxy);
-            return parseURLToResultingURLRecord();
+        defineProperty: function (target, key, descriptor) {
+            let result = Reflect.defineProperty(target, key, descriptor);
+
+            if (typeof key !== "symbol") {
+                proxy.observers.notify(proxy);
+            }
+
+
+            return result;
         },
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v
-        setPrototypeOf: function (target, prototype) {
-            let result = Reflect.setPrototypeOf(object1, prototype);
-            proxy.observers.notify(proxy);
+        setPrototypeOf: function (target, key) {
+            let result = Reflect.setPrototypeOf(object1, key);
+
+            if (typeof key !== "symbol") {
+                proxy.observers.notify(proxy);
+            }
+
             return result;
         }
 
diff --git a/docs/types_queue.js.html b/docs/types_queue.js.html
new file mode 100644
index 0000000000000000000000000000000000000000..b5cb718b9e718d1dbc3f50e92fae87835958424a
--- /dev/null
+++ b/docs/types_queue.js.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    
+    <meta charset="utf-8">
+    <title>types/queue.js - awaken the monster in you; javascript library by schukai GmbH</title>
+    
+    <meta name="description" content="javascript library for optimal use on fast and flexible pages." />
+    
+    
+    
+    <script src="scripts/prettify/prettify.js"></script>
+    <script src="scripts/prettify/lang-css.js"></script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
+    <script src="scripts/nav.js" defer></script>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+</head>
+<body>
+
+<input type="checkbox" id="nav-trigger" class="nav-trigger" />
+<label for="nav-trigger" class="navicon-button x">
+  <div class="navicon"></div>
+</label>
+
+<label for="nav-trigger" class="overlay"></label>
+
+<nav >
+    
+    <input type="text" id="nav-search" placeholder="Search" />
+    
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
+</nav>
+
+<div id="main">
+    
+    <h1 class="page-title">types/queue.js</h1>
+    
+
+    
+
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source linenums"><code>import {Monster, Object} from "./object.js";
+
+/**
+ * queue class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+ * console.log(new Monster.Types.Queue())
+ * &lt;/script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+ * console.log(new Queue())
+ * &lt;/script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+class Queue extends Object {
+
+    /**
+     *
+     */
+    constructor() {
+        super();
+        this.data = [];
+    }
+
+
+    /**
+     * @return {boolean}
+     */
+    isEmpty() {
+        return this.data.length === 0;
+    }
+
+    /**
+     * Read the element at the front of the queue without removing it.
+     *
+     * @return {*}
+     */
+    peek() {
+        if (this.isEmpty()) {
+            return undefined;
+        }
+
+        return this.data[0];
+    }
+
+    /**
+     * Add a new element to the end of the queue.
+     *
+     * @param {*} value
+     * @returns {Queue}
+     */
+    add(value) {
+        this.data.push(value)
+        return this;
+    }
+
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+    clear() {
+        this.data = [];
+        return this;
+    }
+
+    /**
+     * Remove the element at the front of the queue
+     * If the queue is empty, return undefined.
+     *
+     * @return {*}
+     */
+    poll() {
+        if (this.isEmpty()) {
+            return undefined;
+        }
+        return this.data.shift();
+    }
+
+
+}
+
+Monster.assignToNamespace('Monster.Types', Queue);
+export {Monster, Queue}
+</code></pre>
+        </article>
+    </section>
+
+
+
+
+    
+    
+</div>
+
+<br class="clear">
+
+<footer>
+</footer>
+
+<script>prettyPrint();</script>
+<script src="scripts/polyfill.js"></script>
+<script src="scripts/linenumber.js"></script>
+
+<script src="scripts/search.js" defer></script>
+
+
+<script src="scripts/collapse.js" defer></script>
+
+
+</body>
+</html>
diff --git a/docs/types_stack.js.html b/docs/types_stack.js.html
new file mode 100644
index 0000000000000000000000000000000000000000..fb1ab886fcf03cc31feef181d6890bc7733dd1f8
--- /dev/null
+++ b/docs/types_stack.js.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    
+    <meta charset="utf-8">
+    <title>types/stack.js - awaken the monster in you; javascript library by schukai GmbH</title>
+    
+    <meta name="description" content="javascript library for optimal use on fast and flexible pages." />
+    
+    
+    
+    <script src="scripts/prettify/prettify.js"></script>
+    <script src="scripts/prettify/lang-css.js"></script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
+    <script src="scripts/nav.js" defer></script>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+</head>
+<body>
+
+<input type="checkbox" id="nav-trigger" class="nav-trigger" />
+<label for="nav-trigger" class="navicon-button x">
+  <div class="navicon"></div>
+</label>
+
+<label for="nav-trigger" class="overlay"></label>
+
+<nav >
+    
+    <input type="text" id="nav-search" placeholder="Search" />
+    
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
+</nav>
+
+<div id="main">
+    
+    <h1 class="page-title">types/stack.js</h1>
+    
+
+    
+
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source linenums"><code>import {Monster, Object} from "./object.js";
+
+/**
+ * Stack class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/stack.js';
+ * console.log(new Monster.Types.Stack())
+ * &lt;/script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/stack.js';
+ * console.log(new Stack())
+ * &lt;/script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+class Stack extends Object {
+
+    /**
+     *
+     */
+    constructor() {
+        super();
+        this.data = [];
+    }
+
+
+    /**
+     * @return {boolean}
+     */
+    isEmpty() {
+        return this.data.length === 0;
+    }
+
+    /**
+     * looks at the object at the top of this stack without removing it from the stack.
+     *
+     * @return {*}
+     */
+    peek() {
+        if (this.isEmpty()) {
+            return undefined;
+        }
+
+        return this.data?.[this.data.length-1];
+    }
+
+    /**
+     * pushes an item onto the top of this stack.
+     *
+     * @param {*} value
+     * @returns {Queue}
+     */
+    push(value) {
+        this.data.push(value)
+        return this;
+    }
+
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+    clear() {
+        this.data = [];
+        return this;
+    }
+
+    /**
+     * removes the object at the top of this stack and returns 
+     * that object as the value of this function. is the stack empty
+     * the return value is undefined.
+     *
+     * @return {*}
+     */
+    pop() {
+        if (this.isEmpty()) {
+            return undefined;
+        }
+        return this.data.pop();
+    }
+
+
+}
+
+Monster.assignToNamespace('Monster.Types', Stack);
+export {Monster, Stack}
+</code></pre>
+        </article>
+    </section>
+
+
+
+
+    
+    
+</div>
+
+<br class="clear">
+
+<footer>
+</footer>
+
+<script>prettyPrint();</script>
+<script src="scripts/polyfill.js"></script>
+<script src="scripts/linenumber.js"></script>
+
+<script src="scripts/search.js" defer></script>
+
+
+<script src="scripts/collapse.js" defer></script>
+
+
+</body>
+</html>
diff --git a/docs/types_tokenlist.js.html b/docs/types_tokenlist.js.html
index 801687c015b72005d12a69c48be90269eaf6917f..30e1961496dda7f086298bec6b38cac00f14b2c8 100644
--- a/docs/types_tokenlist.js.html
+++ b/docs/types_tokenlist.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -67,7 +67,7 @@ import {validateString, validateFunction} from '../types/validate.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
  * console.log(new Monster.Types.TokenList("myclass row"))
  * console.log(new Monster.Types.TokenList("myclass row"))
  * &lt;/script>
@@ -77,7 +77,7 @@ import {validateString, validateFunction} from '../types/validate.js';
  *
  * ```
  * &lt;script type="module">
- * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';
+ * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
  * console.log(new TokenList("myclass row"))
  * console.log(new TokenList("myclass row"))
  * &lt;/script>
diff --git a/docs/types_uniquequeue.js.html b/docs/types_uniquequeue.js.html
new file mode 100644
index 0000000000000000000000000000000000000000..22eb2989bfbcb89c3a5bf3d0193a28120c390bd3
--- /dev/null
+++ b/docs/types_uniquequeue.js.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    
+    <meta charset="utf-8">
+    <title>types/uniquequeue.js - awaken the monster in you; javascript library by schukai GmbH</title>
+    
+    <meta name="description" content="javascript library for optimal use on fast and flexible pages." />
+    
+    
+    
+    <script src="scripts/prettify/prettify.js"></script>
+    <script src="scripts/prettify/lang-css.js"></script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
+    <script src="scripts/nav.js" defer></script>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+</head>
+<body>
+
+<input type="checkbox" id="nav-trigger" class="nav-trigger" />
+<label for="nav-trigger" class="navicon-button x">
+  <div class="navicon"></div>
+</label>
+
+<label for="nav-trigger" class="overlay"></label>
+
+<nav >
+    
+    <input type="text" id="nav-search" placeholder="Search" />
+    
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
+</nav>
+
+<div id="main">
+    
+    <h1 class="page-title">types/uniquequeue.js</h1>
+    
+
+    
+
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source linenums"><code>import {Monster, Queue} from "./queue.js";
+import {validateObject} from "./validate.js";
+
+/**
+ * UniqueQueue class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+ * console.log(new Monster.Types.UniqueQueue())
+ * &lt;/script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+ * console.log(new UniqueQueue())
+ * &lt;/script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+class UniqueQueue extends Queue {
+
+    /**
+     *
+     */
+    constructor() {
+        super();
+        this.unique = new WeakSet();
+    }
+
+    /**
+     * Add a new element to the end of the queue.
+     *
+     * @param {object} value
+     * @returns {Queue}
+     * @throws {TypeError} value is not a object
+     */
+    add(value) {
+        
+        validateObject(value);
+        
+        if (!this.unique.has(value)) {
+            this.unique.add(value);
+            super.add(value);
+        }
+        
+        return this;
+    }
+
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+    clear() {
+        super.clear();
+        this.unique = new WeakSet;
+        return this;
+    }
+
+    /**
+     * Remove the element at the front of the queue
+     * If the queue is empty, return undefined.
+     *
+     * @return {object}
+     */
+    poll() {
+
+        if (this.isEmpty()) {
+            return undefined;
+        }
+        let value = this.data.shift();
+        this.unique.delete(value);
+        return value;
+    }
+
+
+}
+
+Monster.assignToNamespace('Monster.Types', UniqueQueue);
+export {Monster, UniqueQueue}
+</code></pre>
+        </article>
+    </section>
+
+
+
+
+    
+    
+</div>
+
+<br class="clear">
+
+<footer>
+</footer>
+
+<script>prettyPrint();</script>
+<script src="scripts/polyfill.js"></script>
+<script src="scripts/linenumber.js"></script>
+
+<script src="scripts/search.js" defer></script>
+
+
+<script src="scripts/collapse.js" defer></script>
+
+
+</body>
+</html>
diff --git a/docs/types_validate.js.html b/docs/types_validate.js.html
index c67ae847332a75a2905cd6541b26da8d91fb4feb..420055cd2f1fd2a81e7eaff8bf038ae51d3f907c 100644
--- a/docs/types_validate.js.html
+++ b/docs/types_validate.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -54,7 +54,7 @@
  */
 
 import {Monster} from '../namespace.js';
-import {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable} from '../types/is.js';
+import {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger} from '../types/is.js';
 
 /**
  * this method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.
@@ -63,7 +63,7 @@ import {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isItera
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateIterable('2')) // ↦ TypeError
  * console.log(Monster.Types.validateIterable([])) // ↦ undefined
  * &lt;/script>
@@ -73,7 +73,7 @@ import {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isItera
  *
  * ```
  * &lt;script type="module">
- * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateIterable('2'))  // ↦ TypeError
  * console.log(validateIterable([]))  // ↦ undefined
  * &lt;/script>
@@ -102,7 +102,7 @@ function validateIterable(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validatePrimitive('2')) // ↦ undefined
  * console.log(Monster.Types.validatePrimitive([])) // ↦ TypeError
  * &lt;/script>
@@ -112,7 +112,7 @@ function validateIterable(value) {
  *
  * ```
  * &lt;script type="module">
- * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validatePrimitive('2'))  // ↦ undefined
  * console.log(validatePrimitive([]))  // ↦ TypeError
  * &lt;/script>
@@ -141,7 +141,7 @@ function validatePrimitive(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateBoolean(true)) // ↦ undefined
  * console.log(Monster.Types.validateBoolean('2')) // ↦ TypeError
  * console.log(Monster.Types.validateBoolean([])) // ↦ TypeError
@@ -152,7 +152,7 @@ function validatePrimitive(value) {
  *
  * ```
  * &lt;script type="module">
- * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateBoolean(false))  // ↦ undefined
  * console.log(validateBoolean('2'))  // ↦ TypeError
  * console.log(validateBoolean([]))  // ↦ TypeError
@@ -180,7 +180,7 @@ function validateBoolean(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateString('2')) // ↦ undefined
  * console.log(Monster.Types.validateString([])) // ↦ TypeError
  * &lt;/script>
@@ -190,7 +190,7 @@ function validateBoolean(value) {
  *
  * ```
  * &lt;script type="module">
- * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateString('2'))  // ↦ undefined
  * console.log(validateString([]))  // ↦ TypeError
  * &lt;/script>
@@ -201,7 +201,6 @@ function validateBoolean(value) {
  * @since 1.0.0
  * @copyright schukai GmbH
  * @memberOf Monster/Types
-
  * @throws {TypeError} value is not a string
  */
 function validateString(value) {
@@ -218,7 +217,7 @@ function validateString(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateObject({})) // ↦ undefined
  * console.log(Monster.Types.validateObject('2')) // ↦ TypeError
  * console.log(Monster.Types.validateObject([])) // ↦ TypeError
@@ -229,7 +228,7 @@ function validateString(value) {
  *
  * ```
  * &lt;script type="module">
- * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateObject({}))  // ↦ undefined
  * console.log(validateObject('2'))  // ↦ TypeError
  * console.log(validateObject([]))  // ↦ TypeError
@@ -256,7 +255,7 @@ function validateObject(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateArray('2')) // ↦ TypeError
  * console.log(Monster.Types.validateArray([])) // ↦ undefined
  * &lt;/script>
@@ -266,7 +265,7 @@ function validateObject(value) {
  *
  * ```
  * &lt;script type="module">
- * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateArray('2'))  // ↦ TypeError
  * console.log(validateArray([]))  // ↦ undefined
  * &lt;/script>
@@ -292,7 +291,7 @@ function validateArray(value) {
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateFunction(()=>{})) // ↦ undefined
  * console.log(Monster.Types.validateFunction('2')) // ↦ TypeError
  * console.log(Monster.Types.validateFunction([])) // ↦ TypeError
@@ -303,7 +302,7 @@ function validateArray(value) {
  *
  * ```
  * &lt;script type="module">
- * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateFunction(()=>{})) // ↦ undefined
  * console.log(validateFunction('2'))  // ↦ TypeError
  * console.log(validateFunction([]))  // ↦ TypeError
@@ -323,7 +322,45 @@ function validateFunction(value) {
     }
 }
 
-Monster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable);
+/**
+ * this method checks if the type is an integer. this function is identical to isInteger() except that a TypeError is thrown.
+ *
+ * you can call the method via the monster namespace `Monster.Types.validateInteger()`.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+ * console.log(Monster.Types.validateInteger(true)) // ↦ TypeError
+ * console.log(Monster.Types.validateInteger('2')) // ↦ TypeError
+ * console.log(Monster.Types.validateInteger(2)) // ↦ undefined
+ * &lt;/script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+ * console.log(validateInteger(true)) // ↦ TypeError
+ * console.log(validateInteger('2'))  // ↦ TypeError
+ * console.log(validateInteger(2))  // ↦ undefined
+ * &lt;/script>
+ * ```
+ *
+ * @param {*} value
+ * @return {undefined}
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ * @throws {TypeError} value is not an integer
+ */
+function validateInteger(value) {
+    if (!isInteger(value)) {
+        throw new TypeError('value is not an integer')
+    }
+}
+
+Monster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable, validateInteger);
 export {
     Monster,
     validatePrimitive,
@@ -332,7 +369,8 @@ export {
     validateObject,
     validateArray,
     validateFunction,
-    validateIterable
+    validateIterable,
+    validateInteger
 }
 </code></pre>
         </article>
diff --git a/docs/types_version.js.html b/docs/types_version.js.html
index b6671db26b6105f1f8f698cf0d3f9763d627c003..1dc103126626ad75e2574d05f2f2d8ea476cf4a0 100644
--- a/docs/types_version.js.html
+++ b/docs/types_version.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -59,7 +59,7 @@ import '../types/object.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(new Monster.Types.Version('1.2.3')) // ↦ 1.2.3
  * console.log(new Monster.Types.Version('1')) // ↦ 1.0.0
  * &lt;/script>
@@ -69,7 +69,7 @@ import '../types/object.js';
  *
  * ```
  * &lt;script type="module">
- * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(new Version('1.2.3')) // ↦ 1.2.3
  * console.log(new Version('1')) // ↦ 1.0.0
  * &lt;/script>
@@ -199,7 +199,7 @@ let monsterVersion;
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(Monster.getVersion())
  * console.log(Monster.getVersion())
  * &lt;/script>
@@ -209,7 +209,7 @@ let monsterVersion;
  *
  * ```
  * &lt;script type="module">
- * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(getVersion())
  * console.log(getVersion())
  * &lt;/script>
@@ -226,7 +226,7 @@ function getVersion() {
         return monsterVersion;
     }
     /**#@+ dont touch, replaced by make with package.json version */
-    monsterVersion = new Version('1.3.0')
+    monsterVersion = new Version('1.4.0')
     /**#@-*/
     return monsterVersion;
 
diff --git a/docs/util_clone.js.html b/docs/util_clone.js.html
index bf2caf49e2c3244662f775201318470f6e4e3b4c..f9f258323294bef615ee6e00d7616035090013cd 100644
--- a/docs/util_clone.js.html
+++ b/docs/util_clone.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -70,7 +70,7 @@ import {isObject, isFunction, isPrimitive, isArray} from '../types/is.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
  * console.log(Monster.Util.clone({}))
  * &lt;/script>
  * ```
@@ -79,7 +79,7 @@ import {isObject, isFunction, isPrimitive, isArray} from '../types/is.js';
  *
  * ```
  * &lt;script type="module">
- * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';
+ * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
  * console.log(clone({}))
  * &lt;/script>
  * ```
diff --git a/docs/util_comparator.js.html b/docs/util_comparator.js.html
index cd72a9e07ccbabd5fa21fdf7ea8cae2d8cfe8a35..da0cc7f456bcd1f7704f1711dd22cbdbbafd7343 100644
--- a/docs/util_comparator.js.html
+++ b/docs/util_comparator.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -61,7 +61,7 @@ import {isFunction} from '../types/is.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Monster.Util.Comparator())
  * console.log(new Monster.Util.Comparator())
  * &lt;/script>
@@ -71,7 +71,7 @@ import {isFunction} from '../types/is.js';
  *
  * ```
  * &lt;script type="module">
- * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
+ * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Util())
  * console.log(new Util())
  * &lt;/script>
diff --git a/docs/util_freeze.js.html b/docs/util_freeze.js.html
index 9001f62dee2503f8b109774a9fcced0df7b828fa..e04c9c45df818a777c41e3a46d700d0a922746b2 100644
--- a/docs/util_freeze.js.html
+++ b/docs/util_freeze.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
@@ -63,7 +63,7 @@ import {validateObject} from '../types/validate.js';
  *
  * ```
  * &lt;script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';
  * console.log(Monster.Util.deepFreeze({})) 
  * &lt;/script>
  * ```
@@ -72,7 +72,7 @@ import {validateObject} from '../types/validate.js';
  *
  * ```
  * &lt;script type="module">
- * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';
+ * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';
  * console.log(deepFreeze({}))  
  * &lt;/script>
  * ```
diff --git a/docs/util_namespace.js.html b/docs/util_namespace.js.html
index 7acfbfa98129f558831587d2e909b5eb480d6865..3451a0310bad31425f22c19102baf2970e031c2d 100644
--- a/docs/util_namespace.js.html
+++ b/docs/util_namespace.js.html
@@ -32,7 +32,7 @@
     
     <input type="text" id="nav-search" placeholder="Search" />
     
-    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#proxySet">proxySet</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
 </nav>
 
 <div id="main">
diff --git a/docs/util_pathfinder.js.html b/docs/util_pathfinder.js.html
new file mode 100644
index 0000000000000000000000000000000000000000..350a628b592b85f38595e8623a3df20c17891e3d
--- /dev/null
+++ b/docs/util_pathfinder.js.html
@@ -0,0 +1,350 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    
+    <meta charset="utf-8">
+    <title>util/pathfinder.js - awaken the monster in you; javascript library by schukai GmbH</title>
+    
+    <meta name="description" content="javascript library for optimal use on fast and flexible pages." />
+    
+    
+    
+    <script src="scripts/prettify/prettify.js"></script>
+    <script src="scripts/prettify/lang-css.js"></script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
+    <script src="scripts/nav.js" defer></script>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+</head>
+<body>
+
+<input type="checkbox" id="nav-trigger" class="nav-trigger" />
+<label for="nav-trigger" class="navicon-button x">
+  <div class="navicon"></div>
+</label>
+
+<label for="nav-trigger" class="overlay"></label>
+
+<nav >
+    
+    <input type="text" id="nav-search" placeholder="Search" />
+    
+    <h2><a href="index.html">Home</a></h2><h2><a href="https://www.schukai.com/" target="_blank" class="menu-item" id="schukai_link" >schukai GmbH</a></h2><h2><a href="https://www.npmjs.com/package/@schukai/monster" target="_blank" class="menu-item" id="npm_link" >NPM</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#Monster">Monster</a><ul class='methods'><li data-type='method' style='display: none;'><a href="global.html#Monster#.assignToNamespace">assignToNamespace</a></li><li data-type='method' style='display: none;'><a href="global.html#Monster#.getVersion">getVersion</a></li></ul></li><li><a href="Monster_Constraints.html">Monster/Constraints</a></li><li><a href="Monster_Math.html">Monster/Math</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Math.html#.random">random</a></li></ul></li><li><a href="Monster_Types.html">Monster/Types</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isArray">isArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isBoolean">isBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isFunction">isFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isInteger">isInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isIterable">isIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isObject">isObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isPrimitive">isPrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.isString">isString</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateArray">validateArray</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateBoolean">validateBoolean</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateFunction">validateFunction</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateInteger">validateInteger</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateIterable">validateIterable</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateObject">validateObject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validatePrimitive">validatePrimitive</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.html#.validateString">validateString</a></li></ul></li><li><a href="Monster_Util.html">Monster/Util</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.html#.deepFreeze">deepFreeze</a></li></ul></li></ul><h3>Classes</h3><ul><li><a href="Monster.Namespace.html">Namespace</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#getNamespace">getNamespace</a></li><li data-type='method' style='display: none;'><a href="Monster.Namespace.html#toString">toString</a></li></ul></li><li><a href="Monster_Constraints.AbstractConstraint.html">AbstractConstraint</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AbstractConstraint.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.AbstractOperator.html">AbstractOperator</a></li><li><a href="Monster_Constraints.AndOperator.html">AndOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.AndOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Invalid.html">Invalid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Invalid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsArray.html">IsArray</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsArray.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.IsObject.html">IsObject</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.IsObject.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.OrOperator.html">OrOperator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.OrOperator.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Constraints.Valid.html">Valid</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Constraints.Valid.html#isValid">isValid</a></li></ul></li><li><a href="Monster_Types.ID.html">ID</a></li><li><a href="Monster_Types.Object.html">Object</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Object.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.Observer.html">Observer</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#addTag">addTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#getTags">getTags</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#hasTag">hasTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#removeTag">removeTag</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Observer.html#update">update</a></li></ul></li><li><a href="Monster_Types.ObserverList.html">ObserverList</a></li><li><a href="Monster_Types.ProxyObserver.html">ProxyObserver</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#attachObserver">attachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#containsObserver">containsObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#detachObserver">detachObserver</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getRealSubject">getRealSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#getSubject">getSubject</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.ProxyObserver.html#notifyObservers">notifyObservers</a></li></ul></li><li><a href="Monster_Types.Queue.html">Queue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Queue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Stack.html">Stack</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#isEmpty">isEmpty</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#peek">peek</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#pop">pop</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Stack.html#push">push</a></li></ul></li><li><a href="Monster_Types.TokenList.html">TokenList</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#contains">contains</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#entries">entries</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#forEach">forEach</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#getIterator">getIterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#remove">remove</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#replace">replace</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#Symbol.iterator">Symbol.iterator</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toggle">toggle</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.TokenList.html#toString">toString</a></li></ul></li><li><a href="Monster_Types.UniqueQueue.html">UniqueQueue</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#clear">clear</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.UniqueQueue.html#poll">poll</a></li></ul></li><li><a href="Monster_Types.Version.html">Version</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#compareTo">compareTo</a></li><li data-type='method' style='display: none;'><a href="Monster_Types.Version.html#toString">toString</a></li></ul></li><li><a href="Monster_Util.Comparator.html">Comparator</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#equal">equal</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThan">greaterThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#greaterThanOrEqual">greaterThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThan">lessThan</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#lessThanOrEqual">lessThanOrEqual</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Comparator.html#reverse">reverse</a></li></ul></li><li><a href="Monster_Util.Pathfinder.html">Pathfinder</a><ul class='methods'><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#exists">exists</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#getVia">getVia</a></li><li data-type='method' style='display: none;'><a href="Monster_Util.Pathfinder.html#setVia">setVia</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#getValueViaPath">getValueViaPath</a></li><li><a href="global.html#setValueViaPath">setValueViaPath</a></li></ul>
+</nav>
+
+<div id="main">
+    
+    <h1 class="page-title">util/pathfinder.js</h1>
+    
+
+    
+
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source linenums"><code>'use strict';
+
+/**
+ * @author schukai GmbH
+ */
+
+import {Monster} from '../namespace.js';
+import {isObject, isArray, isInteger} from '../types/is.js';
+import {validateString, validateInteger} from '../types/validate.js';
+import {Object} from "../types/object.js";
+import {Stack} from "../types/stack.js";
+
+/**
+ * path separator
+ *
+ * @private
+ * @type {string}
+ */
+const DELIMITER = '.';
+
+/**
+ * Pathfinder class
+ *
+ * you can call the method via the monster namespace `new Monster.Util.Pathfinder()`.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/pathfinder.js';
+ * console.log(new Monster.Util.Pathfinder())
+ * &lt;/script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * &lt;script type="module">
+ * import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/pathfinder.js';
+ * console.log(new Pathfinder())
+ * &lt;/script>
+ * ```
+ *
+ * With the help of the pathfinder, values can be read and written from an object construct.
+ *
+ * ```
+ * new Pathfinder({
+ * a: {
+ *     b: {
+ *         f: [
+ *             {
+ *                 g: false,
+ *             }
+ *         ],
+ *     }
+ * }
+ * }).getVia("a.b.f.0.g"); // ↦ false
+ * ```
+ *
+ * if a value is not present or has the wrong type, a corresponding exception is thrown.
+ *
+ * ```
+ * new Pathfinder({}).getVia("a.b.f.0.g"); // ↦ Error
+ * ```
+ *
+ * The `Pathfinder.exists()` method can be used to check whether access to the path is possible.
+ *
+ * ```
+ * new Pathfinder({}).exists("a.b.f.0.g"); // ↦ false
+ * ```
+ *
+ * pathfinder can also be used to build object structures. to do this, the `Pathfinder.setVia()` method must be used.
+ *
+ * ```
+ * obj = {};
+ * new Pathfinder(obj).setVia('a.b.0.c', true); // ↦ {a:{b:[{c:true}]}}
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Util
+ */
+class Pathfinder extends Object {
+
+    /**
+     * @param {array|object|Map|Set} value
+     * @since 1.4.0
+     **/
+    constructor(object) {
+        super();
+        this.object = object;
+    }
+
+    /**
+     *
+     * @param {string} path
+     * @since 1.4.0
+     * @returns {*}
+     * @throws {TypeError} unsupported type
+     * @throws {Error} the journey is not at its end
+     * @throws {TypeError} value is not a string
+     * @throws {TypeError} value is not an integer
+     */
+    getVia(path) {
+        validateString(path);
+        return getValueViaPath(this.object, path);
+    }
+
+    /**
+     *
+     * @param {string} path
+     * @param {*} value
+     * @returns {Pathfinder}
+     * @since 1.4.0
+     * @throws {TypeError} unsupported type
+     * @throws {TypeError} value is not a string
+     * @throws {TypeError} value is not an integer
+     */
+    setVia(path, value) {
+        validateString(path);
+        setValueViaPath(this.object, path, value);
+        return this;
+    }
+
+    /**
+     *
+     * @param {string} path
+     * @return {bool}
+     * @throws {TypeError} unsupported type
+     * @throws {TypeError} value is not a string
+     * @throws {TypeError} value is not an integer
+     * @since 1.4.0
+     */
+    exists(path) {
+        validateString(path);
+        try {
+            getValueViaPath(this.object, path, true);
+            return true;
+        } catch (e) {
+
+        }
+
+        return false;
+    }
+
+}
+
+Monster.assignToNamespace('Monster.Util', Pathfinder);
+export {Monster, Pathfinder}
+
+/**
+ *
+ * @param {*} object
+ * @param [string} path
+ * @param [boolean} check 
+ * @returns {*}
+ * @throws {TypeError} unsupported type
+ * @throws {Error} the journey is not at its end
+ */
+function getValueViaPath(object, path, check) {
+
+    if (path === "") {
+        return object;
+    }
+
+    let parts = path.split(DELIMITER)
+    let current = parts.shift();
+
+    if (isObject(object) || isArray(object)) {
+
+        let anchor;
+        if (object instanceof Map) {
+            anchor = object.get(current);
+        } else if (object instanceof Set) {
+            current = parseInt(current);
+            validateInteger(current)
+            anchor = [...object]?.[current];
+        } else if (isArray(object)) {
+            current = parseInt(current);
+            validateInteger(current)
+            anchor = object?.[current];
+        } else {
+            anchor = object?.[current];
+        }
+
+        if (isObject(anchor) || isArray(anchor)) {
+            return getValueViaPath(anchor, parts.join(DELIMITER), check)
+        }
+
+        if (parts.length > 0) {
+            throw Error("the journey is not at its end (" + parts.join(DELIMITER) + ")");
+        }
+
+        if (check === true &amp;&amp; !object.hasOwnProperty(current)) {
+            throw Error('unknown value');
+        }
+
+        return anchor;
+
+    }
+
+    throw TypeError("unsupported type")
+
+}
+
+/**
+ *
+ * @param object
+ * @param path
+ * @param value
+ * @returns {undefined|*}
+ * @throws {TypeError} unsupported type
+ * @throws {TypeError} unsupported type
+ * @throws {Error} the journey is not at its end
+ */
+function setValueViaPath(object, path, value) {
+
+    let parts = path.split(DELIMITER)
+    let last = parts.pop();
+    let subpath = parts.join(DELIMITER);
+
+    let stack = new Stack()
+    let current = subpath;
+    while (true) {
+
+        try {
+            getValueViaPath(object, current, true)
+            break;
+        } catch (e) {
+
+        }
+
+        stack.push(current);
+        parts.pop();
+        current = parts.join(DELIMITER);
+
+        if (current === "") break;
+    }
+
+    while (!stack.isEmpty()) {
+        current = stack.pop();
+        let obj = {};
+
+        if (!stack.isEmpty()) {
+            let n = stack.peek().split(DELIMITER).pop();
+            if (isInteger(parseInt(n))) {
+                obj = [];
+            }
+
+        }
+
+
+        setValueViaPath(object, current, obj);
+    }
+
+    let anchor = getValueViaPath(object, subpath);
+
+    if (!isObject(object) &amp;&amp; !isArray(object)) {
+        throw TypeError("unsupported type: " + typeof object);
+    }
+
+    if (anchor instanceof Map) {
+        anchor.set(last, value);
+    } else if (anchor instanceof Set) {
+        anchor.append(value)
+    } else if (isArray(anchor)) {
+        last = parseInt(last);
+        validateInteger(last)
+        anchor[last] = value;
+    } else {
+        anchor[last] = value;
+    }
+
+    return anchor;
+
+}</code></pre>
+        </article>
+    </section>
+
+
+
+
+    
+    
+</div>
+
+<br class="clear">
+
+<footer>
+</footer>
+
+<script>prettyPrint();</script>
+<script src="scripts/polyfill.js"></script>
+<script src="scripts/linenumber.js"></script>
+
+<script src="scripts/search.js" defer></script>
+
+
+<script src="scripts/collapse.js" defer></script>
+
+
+</body>
+</html>
diff --git a/package-lock.json b/package-lock.json
index 2343d88fa2148abe29240fa061c0112ac3252f5f..06c79a22f57cd1381e62c73e5ab828f595530d4a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1737,6 +1737,26 @@
       "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==",
       "dev": true
     },
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+      "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+      "dev": true,
+      "dependencies": {
+        "@humanwhocodes/object-schema": "^1.2.0",
+        "debug": "^4.1.1",
+        "minimatch": "^3.0.4"
+      },
+      "engines": {
+        "node": ">=10.10.0"
+      }
+    },
+    "node_modules/@humanwhocodes/object-schema": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
+      "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+      "dev": true
+    },
     "node_modules/@import-maps/resolve": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-1.0.1.tgz",
@@ -2145,9 +2165,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "15.12.5",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz",
-      "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==",
+      "version": "16.0.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz",
+      "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==",
       "dev": true
     },
     "node_modules/@types/parse5": {
@@ -2179,18 +2199,18 @@
       }
     },
     "node_modules/@types/ws": {
-      "version": "7.4.5",
-      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.5.tgz",
-      "integrity": "sha512-8mbDgtc8xpxDDem5Gwj76stBDJX35KQ3YBoayxlqUQcL5BZUthiqP/VQ4PQnLHqM4PmlbyO74t98eJpURO+gPA==",
+      "version": "7.4.6",
+      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.6.tgz",
+      "integrity": "sha512-ijZ1vzRawI7QoWnTNL8KpHixd2b2XVb9I9HAqI3triPsh1EC0xH0Eg6w2O3TKbDCgiNNlJqfrof6j4T2I+l9vw==",
       "dev": true,
       "dependencies": {
         "@types/node": "*"
       }
     },
     "node_modules/@types/yauzl": {
-      "version": "2.9.1",
-      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
-      "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
+      "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -4216,9 +4236,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001240",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001240.tgz",
-      "integrity": "sha512-nb8mDzfMdxBDN7ZKx8chWafAdBp5DAAlpWvNyUGe5tcDWd838zpzDN3Rah9cjCqhfOKkrvx40G2SDtP0qiWX/w==",
+      "version": "1.0.30001241",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz",
+      "integrity": "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==",
       "dev": true,
       "funding": {
         "type": "opencollective",
@@ -4405,31 +4425,49 @@
       "dev": true
     },
     "node_modules/chrome-launcher": {
-      "version": "0.13.4",
-      "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz",
-      "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==",
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.11.2.tgz",
+      "integrity": "sha512-jx0kJDCXdB2ARcDMwNCtrf04oY1Up4rOmVu+fqJ5MTPOOIG8EhRcEU9NZfXZc6dMw9FU8o1r21PNp8V2M0zQ+g==",
       "dev": true,
       "dependencies": {
         "@types/node": "*",
-        "escape-string-regexp": "^1.0.5",
-        "is-wsl": "^2.2.0",
+        "is-wsl": "^2.1.0",
         "lighthouse-logger": "^1.0.0",
-        "mkdirp": "^0.5.3",
-        "rimraf": "^3.0.2"
+        "mkdirp": "0.5.1",
+        "rimraf": "^2.6.1"
       }
     },
+    "node_modules/chrome-launcher/node_modules/minimist": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+      "dev": true
+    },
     "node_modules/chrome-launcher/node_modules/mkdirp": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
       "dev": true,
       "dependencies": {
-        "minimist": "^1.2.5"
+        "minimist": "0.0.8"
       },
       "bin": {
         "mkdirp": "bin/cmd.js"
       }
     },
+    "node_modules/chrome-launcher/node_modules/rimraf": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+      "dev": true,
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      }
+    },
     "node_modules/chrome-remote-interface": {
       "version": "0.28.2",
       "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.28.2.tgz",
@@ -4880,9 +4918,9 @@
       "hasInstallScript": true
     },
     "node_modules/core-js-compat": {
-      "version": "3.15.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.1.tgz",
-      "integrity": "sha512-xGhzYMX6y7oEGQGAJmP2TmtBLvR4nZmRGEcFa3ubHOq5YEp51gGN9AovVa0AoujGZIq+Wm6dISiYyGNfdflYww==",
+      "version": "3.15.2",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz",
+      "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==",
       "dev": true,
       "dependencies": {
         "browserslist": "^4.16.6",
@@ -5539,9 +5577,9 @@
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.3.759",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.759.tgz",
-      "integrity": "sha512-nM76xH0t2FBH5iMEZDVc3S/qbdKjGH7TThezxC8k1Q7w7WHvIAyJh8lAe2UamGfdRqBTjHfPDn82LJ0ksCiB9g==",
+      "version": "1.3.766",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.766.tgz",
+      "integrity": "sha512-u2quJ862q9reRKh/je3GXis3w38+RoXH1J9N3XjtsS6NzmUAosNsyZgUVFZPN/ZlJ3v6T0rTyZR3q/J5c6Sy5w==",
       "dev": true
     },
     "node_modules/elliptic": {
@@ -5897,13 +5935,14 @@
       }
     },
     "node_modules/eslint": {
-      "version": "7.29.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz",
-      "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==",
+      "version": "7.30.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz",
+      "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "7.12.11",
         "@eslint/eslintrc": "^0.4.2",
+        "@humanwhocodes/config-array": "^0.5.0",
         "ajv": "^6.10.0",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
@@ -6858,9 +6897,9 @@
       }
     },
     "node_modules/flatted": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
-      "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.0.tgz",
+      "integrity": "sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==",
       "dev": true
     },
     "node_modules/flow-bin": {
@@ -9974,6 +10013,15 @@
         "node": ">=8.10.0"
       }
     },
+    "node_modules/mocaccino/node_modules/serialize-javascript": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+      "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+      "dev": true,
+      "dependencies": {
+        "randombytes": "^2.1.0"
+      }
+    },
     "node_modules/mocaccino/node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -9993,15 +10041,15 @@
       "dev": true
     },
     "node_modules/mocha": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.1.tgz",
-      "integrity": "sha512-9zwsavlRO+5csZu6iRtl3GHImAbhERoDsZwdRkdJ/bE+eVplmoxNKE901ZJ9LdSchYBjSCPbjKc5XvcAri2ylw==",
+      "version": "9.0.2",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz",
+      "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==",
       "dev": true,
       "dependencies": {
         "@ungap/promise-all-settled": "1.1.2",
         "ansi-colors": "4.1.1",
         "browser-stdout": "1.3.1",
-        "chokidar": "3.5.1",
+        "chokidar": "3.5.2",
         "debug": "4.3.1",
         "diff": "5.0.0",
         "escape-string-regexp": "4.0.0",
@@ -10014,12 +10062,12 @@
         "minimatch": "3.0.4",
         "ms": "2.1.3",
         "nanoid": "3.1.23",
-        "serialize-javascript": "5.0.1",
+        "serialize-javascript": "6.0.0",
         "strip-json-comments": "3.1.1",
         "supports-color": "8.1.1",
         "which": "2.0.2",
         "wide-align": "1.1.3",
-        "workerpool": "6.1.4",
+        "workerpool": "6.1.5",
         "yargs": "16.2.0",
         "yargs-parser": "20.2.4",
         "yargs-unparser": "2.0.0"
@@ -10038,13 +10086,13 @@
     },
     "node_modules/mocha-chrome": {
       "name": "@stagas/mocha-chrome",
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@stagas/mocha-chrome/-/mocha-chrome-2.2.0.tgz",
-      "integrity": "sha512-jhORqtlBJUjXNaInBdlKH/qOj1dRhcXs9ACFepMKIPt2ymZoDJTvT/2OuMVEewaa2t5sArYNLCo9UHSxb8NaZw==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/@stagas/mocha-chrome/-/mocha-chrome-2.2.1.tgz",
+      "integrity": "sha512-2EDfGqn7ca4NkFnvIDNmZMZ9DQrl4pR6WiqH4hUz9RYM5HZU43POyd5oe6Ewpkl7ReEhoNij7gN0ZWHY+UzVOw==",
       "dev": true,
       "dependencies": {
         "chalk": "^2.0.1",
-        "chrome-launcher": "^0.13.4",
+        "chrome-launcher": "^0.11.2",
         "chrome-remote-interface": "^0.28.0",
         "chrome-unmirror": "^0.1.0",
         "debug": "^4.1.1",
@@ -10626,67 +10674,12 @@
         "node": ">=4"
       }
     },
-    "node_modules/mocha/node_modules/anymatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
-      "dev": true,
-      "dependencies": {
-        "normalize-path": "^3.0.0",
-        "picomatch": "^2.0.4"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/mocha/node_modules/argparse": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
       "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
       "dev": true
     },
-    "node_modules/mocha/node_modules/binary-extensions": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/mocha/node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-      "dev": true,
-      "dependencies": {
-        "fill-range": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/mocha/node_modules/chokidar": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
-      "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
-      "dev": true,
-      "dependencies": {
-        "anymatch": "~3.1.1",
-        "braces": "~3.0.2",
-        "glob-parent": "~5.1.0",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.5.0"
-      },
-      "engines": {
-        "node": ">= 8.10.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.1"
-      }
-    },
     "node_modules/mocha/node_modules/escape-string-regexp": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -10699,18 +10692,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/mocha/node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-      "dev": true,
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/mocha/node_modules/has-flag": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -10720,27 +10701,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/mocha/node_modules/is-binary-path": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-      "dev": true,
-      "dependencies": {
-        "binary-extensions": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/mocha/node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
     "node_modules/mocha/node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -10759,18 +10719,6 @@
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "dev": true
     },
-    "node_modules/mocha/node_modules/readdirp": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
-      "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
-      "dev": true,
-      "dependencies": {
-        "picomatch": "^2.2.1"
-      },
-      "engines": {
-        "node": ">=8.10.0"
-      }
-    },
     "node_modules/mocha/node_modules/supports-color": {
       "version": "8.1.1",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -10786,18 +10734,6 @@
         "url": "https://github.com/chalk/supports-color?sponsor=1"
       }
     },
-    "node_modules/mocha/node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
     "node_modules/mochify": {
       "version": "8.1.0",
       "resolved": "https://registry.npmjs.org/mochify/-/mochify-8.1.0.tgz",
@@ -12043,9 +11979,9 @@
       "dev": true
     },
     "node_modules/puppeteer": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.0.0.tgz",
-      "integrity": "sha512-AxHvCb9IWmmP3gMW+epxdj92Gglii+6Z4sb+W+zc2hTTu10HF0yg6hGXot5O74uYkVqG3lfDRLfnRpi6WOwi5A==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.1.0.tgz",
+      "integrity": "sha512-bsyDHbFBvbofZ63xqF7hMhuKBX1h4WsqFIAoh1GuHr/Y9cewh+EFNAOdqWSkQRHLiBU/MY6M+8PUnXXjAPtuSg==",
       "dev": true,
       "hasInstallScript": true,
       "dependencies": {
@@ -12188,6 +12124,7 @@
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
       "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+      "deprecated": "The",
       "dev": true,
       "engines": {
         "node": ">=0.4.x"
@@ -12953,9 +12890,9 @@
       "dev": true
     },
     "node_modules/serialize-javascript": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
-      "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+      "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
       "dev": true,
       "dependencies": {
         "randombytes": "^2.1.0"
@@ -15223,9 +15160,9 @@
       "dev": true
     },
     "node_modules/workerpool": {
-      "version": "6.1.4",
-      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.4.tgz",
-      "integrity": "sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g==",
+      "version": "6.1.5",
+      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
+      "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
       "dev": true
     },
     "node_modules/wrap-ansi": {
@@ -15291,9 +15228,9 @@
       "dev": true
     },
     "node_modules/ws": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz",
-      "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==",
+      "version": "7.5.1",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.1.tgz",
+      "integrity": "sha512-2c6faOUH/nhoQN6abwMloF7Iyl0ZS2E9HGtsiLrWn0zOOMWlhtDmdf/uihDt6jnuCxgtwGBNy6Onsoy2s2O2Ow==",
       "dev": true,
       "engines": {
         "node": ">=8.3.0"
@@ -16698,6 +16635,23 @@
         }
       }
     },
+    "@humanwhocodes/config-array": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+      "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+      "dev": true,
+      "requires": {
+        "@humanwhocodes/object-schema": "^1.2.0",
+        "debug": "^4.1.1",
+        "minimatch": "^3.0.4"
+      }
+    },
+    "@humanwhocodes/object-schema": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
+      "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+      "dev": true
+    },
     "@import-maps/resolve": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-1.0.1.tgz",
@@ -17062,9 +17016,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "15.12.5",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz",
-      "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==",
+      "version": "16.0.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz",
+      "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==",
       "dev": true
     },
     "@types/parse5": {
@@ -17096,18 +17050,18 @@
       }
     },
     "@types/ws": {
-      "version": "7.4.5",
-      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.5.tgz",
-      "integrity": "sha512-8mbDgtc8xpxDDem5Gwj76stBDJX35KQ3YBoayxlqUQcL5BZUthiqP/VQ4PQnLHqM4PmlbyO74t98eJpURO+gPA==",
+      "version": "7.4.6",
+      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.6.tgz",
+      "integrity": "sha512-ijZ1vzRawI7QoWnTNL8KpHixd2b2XVb9I9HAqI3triPsh1EC0xH0Eg6w2O3TKbDCgiNNlJqfrof6j4T2I+l9vw==",
       "dev": true,
       "requires": {
         "@types/node": "*"
       }
     },
     "@types/yauzl": {
-      "version": "2.9.1",
-      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
-      "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
+      "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -18910,9 +18864,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001240",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001240.tgz",
-      "integrity": "sha512-nb8mDzfMdxBDN7ZKx8chWafAdBp5DAAlpWvNyUGe5tcDWd838zpzDN3Rah9cjCqhfOKkrvx40G2SDtP0qiWX/w==",
+      "version": "1.0.30001241",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz",
+      "integrity": "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==",
       "dev": true
     },
     "catharsis": {
@@ -19053,26 +19007,40 @@
       "dev": true
     },
     "chrome-launcher": {
-      "version": "0.13.4",
-      "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz",
-      "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==",
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.11.2.tgz",
+      "integrity": "sha512-jx0kJDCXdB2ARcDMwNCtrf04oY1Up4rOmVu+fqJ5MTPOOIG8EhRcEU9NZfXZc6dMw9FU8o1r21PNp8V2M0zQ+g==",
       "dev": true,
       "requires": {
         "@types/node": "*",
-        "escape-string-regexp": "^1.0.5",
-        "is-wsl": "^2.2.0",
+        "is-wsl": "^2.1.0",
         "lighthouse-logger": "^1.0.0",
-        "mkdirp": "^0.5.3",
-        "rimraf": "^3.0.2"
+        "mkdirp": "0.5.1",
+        "rimraf": "^2.6.1"
       },
       "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+          "dev": true
+        },
         "mkdirp": {
-          "version": "0.5.5",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-          "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+          "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
           "dev": true,
           "requires": {
-            "minimist": "^1.2.5"
+            "minimist": "0.0.8"
+          }
+        },
+        "rimraf": {
+          "version": "2.7.1",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
           }
         }
       }
@@ -19470,9 +19438,9 @@
       "dev": true
     },
     "core-js-compat": {
-      "version": "3.15.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.1.tgz",
-      "integrity": "sha512-xGhzYMX6y7oEGQGAJmP2TmtBLvR4nZmRGEcFa3ubHOq5YEp51gGN9AovVa0AoujGZIq+Wm6dISiYyGNfdflYww==",
+      "version": "3.15.2",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz",
+      "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==",
       "dev": true,
       "requires": {
         "browserslist": "^4.16.6",
@@ -20037,9 +20005,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.3.759",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.759.tgz",
-      "integrity": "sha512-nM76xH0t2FBH5iMEZDVc3S/qbdKjGH7TThezxC8k1Q7w7WHvIAyJh8lAe2UamGfdRqBTjHfPDn82LJ0ksCiB9g==",
+      "version": "1.3.766",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.766.tgz",
+      "integrity": "sha512-u2quJ862q9reRKh/je3GXis3w38+RoXH1J9N3XjtsS6NzmUAosNsyZgUVFZPN/ZlJ3v6T0rTyZR3q/J5c6Sy5w==",
       "dev": true
     },
     "elliptic": {
@@ -20347,13 +20315,14 @@
       }
     },
     "eslint": {
-      "version": "7.29.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz",
-      "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==",
+      "version": "7.30.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz",
+      "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "7.12.11",
         "@eslint/eslintrc": "^0.4.2",
+        "@humanwhocodes/config-array": "^0.5.0",
         "ajv": "^6.10.0",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
@@ -21131,9 +21100,9 @@
       }
     },
     "flatted": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
-      "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.0.tgz",
+      "integrity": "sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==",
       "dev": true
     },
     "flow-bin": {
@@ -23547,6 +23516,15 @@
             "picomatch": "^2.2.1"
           }
         },
+        "serialize-javascript": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+          "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+          "dev": true,
+          "requires": {
+            "randombytes": "^2.1.0"
+          }
+        },
         "to-regex-range": {
           "version": "5.0.1",
           "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -23565,15 +23543,15 @@
       }
     },
     "mocha": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.1.tgz",
-      "integrity": "sha512-9zwsavlRO+5csZu6iRtl3GHImAbhERoDsZwdRkdJ/bE+eVplmoxNKE901ZJ9LdSchYBjSCPbjKc5XvcAri2ylw==",
+      "version": "9.0.2",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz",
+      "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==",
       "dev": true,
       "requires": {
         "@ungap/promise-all-settled": "1.1.2",
         "ansi-colors": "4.1.1",
         "browser-stdout": "1.3.1",
-        "chokidar": "3.5.1",
+        "chokidar": "3.5.2",
         "debug": "4.3.1",
         "diff": "5.0.0",
         "escape-string-regexp": "4.0.0",
@@ -23586,100 +23564,35 @@
         "minimatch": "3.0.4",
         "ms": "2.1.3",
         "nanoid": "3.1.23",
-        "serialize-javascript": "5.0.1",
+        "serialize-javascript": "6.0.0",
         "strip-json-comments": "3.1.1",
         "supports-color": "8.1.1",
         "which": "2.0.2",
         "wide-align": "1.1.3",
-        "workerpool": "6.1.4",
+        "workerpool": "6.1.5",
         "yargs": "16.2.0",
         "yargs-parser": "20.2.4",
         "yargs-unparser": "2.0.0"
       },
       "dependencies": {
-        "anymatch": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-          "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
-          "dev": true,
-          "requires": {
-            "normalize-path": "^3.0.0",
-            "picomatch": "^2.0.4"
-          }
-        },
         "argparse": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
           "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
           "dev": true
         },
-        "binary-extensions": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-          "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-          "dev": true
-        },
-        "braces": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-          "dev": true,
-          "requires": {
-            "fill-range": "^7.0.1"
-          }
-        },
-        "chokidar": {
-          "version": "3.5.1",
-          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
-          "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
-          "dev": true,
-          "requires": {
-            "anymatch": "~3.1.1",
-            "braces": "~3.0.2",
-            "fsevents": "~2.3.1",
-            "glob-parent": "~5.1.0",
-            "is-binary-path": "~2.1.0",
-            "is-glob": "~4.0.1",
-            "normalize-path": "~3.0.0",
-            "readdirp": "~3.5.0"
-          }
-        },
         "escape-string-regexp": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
           "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
           "dev": true
         },
-        "fill-range": {
-          "version": "7.0.1",
-          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-          "dev": true,
-          "requires": {
-            "to-regex-range": "^5.0.1"
-          }
-        },
         "has-flag": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "is-binary-path": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-          "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-          "dev": true,
-          "requires": {
-            "binary-extensions": "^2.0.0"
-          }
-        },
-        "is-number": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-          "dev": true
-        },
         "js-yaml": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -23695,15 +23608,6 @@
           "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
           "dev": true
         },
-        "readdirp": {
-          "version": "3.5.0",
-          "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
-          "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
-          "dev": true,
-          "requires": {
-            "picomatch": "^2.2.1"
-          }
-        },
         "supports-color": {
           "version": "8.1.1",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -23712,26 +23616,17 @@
           "requires": {
             "has-flag": "^4.0.0"
           }
-        },
-        "to-regex-range": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-          "dev": true,
-          "requires": {
-            "is-number": "^7.0.0"
-          }
         }
       }
     },
     "mocha-chrome": {
-      "version": "npm:@stagas/mocha-chrome@2.2.0",
-      "resolved": "https://registry.npmjs.org/@stagas/mocha-chrome/-/mocha-chrome-2.2.0.tgz",
-      "integrity": "sha512-jhORqtlBJUjXNaInBdlKH/qOj1dRhcXs9ACFepMKIPt2ymZoDJTvT/2OuMVEewaa2t5sArYNLCo9UHSxb8NaZw==",
+      "version": "npm:@stagas/mocha-chrome@2.2.1",
+      "resolved": "https://registry.npmjs.org/@stagas/mocha-chrome/-/mocha-chrome-2.2.1.tgz",
+      "integrity": "sha512-2EDfGqn7ca4NkFnvIDNmZMZ9DQrl4pR6WiqH4hUz9RYM5HZU43POyd5oe6Ewpkl7ReEhoNij7gN0ZWHY+UzVOw==",
       "dev": true,
       "requires": {
         "chalk": "^2.0.1",
-        "chrome-launcher": "^0.13.4",
+        "chrome-launcher": "^0.11.2",
         "chrome-remote-interface": "^0.28.0",
         "chrome-unmirror": "^0.1.0",
         "debug": "^4.1.1",
@@ -25197,9 +25092,9 @@
       "dev": true
     },
     "puppeteer": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.0.0.tgz",
-      "integrity": "sha512-AxHvCb9IWmmP3gMW+epxdj92Gglii+6Z4sb+W+zc2hTTu10HF0yg6hGXot5O74uYkVqG3lfDRLfnRpi6WOwi5A==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.1.0.tgz",
+      "integrity": "sha512-bsyDHbFBvbofZ63xqF7hMhuKBX1h4WsqFIAoh1GuHr/Y9cewh+EFNAOdqWSkQRHLiBU/MY6M+8PUnXXjAPtuSg==",
       "dev": true,
       "requires": {
         "debug": "4.3.1",
@@ -25928,9 +25823,9 @@
       }
     },
     "serialize-javascript": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
-      "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+      "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
       "dev": true,
       "requires": {
         "randombytes": "^2.1.0"
@@ -27804,9 +27699,9 @@
       "dev": true
     },
     "workerpool": {
-      "version": "6.1.4",
-      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.4.tgz",
-      "integrity": "sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g==",
+      "version": "6.1.5",
+      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
+      "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
       "dev": true
     },
     "wrap-ansi": {
@@ -27859,9 +27754,9 @@
       "dev": true
     },
     "ws": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz",
-      "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==",
+      "version": "7.5.1",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.1.tgz",
+      "integrity": "sha512-2c6faOUH/nhoQN6abwMloF7Iyl0ZS2E9HGtsiLrWn0zOOMWlhtDmdf/uihDt6jnuCxgtwGBNy6Onsoy2s2O2Ow==",
       "dev": true,
       "requires": {}
     },
diff --git a/packages/monster-dom/README.md b/packages/monster-dom/README.md
index 688ff54eb24214f2e924da9f475cbe35625c8ff0..6e5b5826dc620d98c1431d3efdcf6f94da3a50b2 100644
--- a/packages/monster-dom/README.md
+++ b/packages/monster-dom/README.md
@@ -31,7 +31,7 @@ npm install @schukai/monster @schukai/monster-dom
 
 ```
 <script type="module">
-  import {Monster} from 'https://unpkg.com/@schukai/monster@1.3.0/dist/modules/monster.js';
+  import {Monster} from 'https://unpkg.com/@schukai/monster@1.4.0/dist/modules/monster.js';
   import 'https://unpkg.com/@schukai/monster-dom@0.9.2/dist/modules/monster.js';
   console.log(Module.getVersion())
 </script>
@@ -40,9 +40,9 @@ npm install @schukai/monster @schukai/monster-dom
 nomodule for backwards compatibility
 
 ```
-<script type="module" src="https://unpkg.com/@schukai/monster@1.3.0/dist/modules/monster.js"></script>
+<script type="module" src="https://unpkg.com/@schukai/monster@1.4.0/dist/modules/monster.js"></script>
 <script type="module" src="https://unpkg.com/@schukai/monster-dom@0.9.2/dist/modules/monster.js"></script>
-<script nomodule src="https://unpkg.com/@schukai/monster@1.3.0/dist/monster.js"></script>
+<script nomodule src="https://unpkg.com/@schukai/monster@1.4.0/dist/monster.js"></script>
 <script nomodule src="https://unpkg.com/@schukai/monster-dom@0.9.2/dist/monster.js"></script>
 ```
 
diff --git a/packages/monster/CHANGELOG b/packages/monster/CHANGELOG
index f5e3cf6a15e609adb1fdc69fc6f26b5db8632d28..4729783fbac562531d47d92ba0c2b6d59ba661ac 100644
--- a/packages/monster/CHANGELOG
+++ b/packages/monster/CHANGELOG
@@ -2,6 +2,21 @@
 
 All notable changes to this project will be documented in this file.
 
+## [1.4.0] - 2021-07-04
+
+### Added
+
+- [new Monster.Types.Queue](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/6)
+- [new Monster.Types.UniqueQueue](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/6)
+- [new Monster.Types.Stack](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/7)
+- [new Monster.Types.validateInteger](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/8)
+- [new Monster.Types.isInteger](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/8)
+- [new Monster.Util.Pathfinder](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/9)
+
+### Changed
+
+- [ensure that an object is not informed of the same change more than once](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/5)
+
 ## [1.3.0] - 2021-06-30
 
 ### Added
diff --git a/packages/monster/README.md b/packages/monster/README.md
index f20f855b93b019a7978d1c8dd73a85872ac1c729..17841870294a9c1200c179381d676317761df2aa 100644
--- a/packages/monster/README.md
+++ b/packages/monster/README.md
@@ -29,7 +29,7 @@ thus supports all browsers that are compatible with ES5.
 
 ```
 <script type="module">
-  import {Monster} from 'https://unpkg.com/@schukai/monster@1.3.0/dist/modules/monster.js';
+  import {Monster} from 'https://unpkg.com/@schukai/monster@1.4.0/dist/modules/monster.js';
   console.log(Module.getVersion())
 </script>
 ```
@@ -37,8 +37,8 @@ thus supports all browsers that are compatible with ES5.
 nomodule for backwards compatibility
 
 ```
-<script type="module" src="https://unpkg.com/@schukai/monster@1.3.0/dist/modules/monster.js"></script>
-<script nomodule src="https://unpkg.com/@schukai/monster@1.3.0/dist/monster.js"></script>
+<script type="module" src="https://unpkg.com/@schukai/monster@1.4.0/dist/modules/monster.js"></script>
+<script nomodule src="https://unpkg.com/@schukai/monster@1.4.0/dist/monster.js"></script>
 ```
 
 ## Documentation
diff --git a/packages/monster/dist/modules/constraints/abstract.js b/packages/monster/dist/modules/constraints/abstract.js
index ee9becc63938efe155364b3953639da7dd73486c..3a54245f9f487d97bfbc601f571b0957351c4c57 100644
--- a/packages/monster/dist/modules/constraints/abstract.js
+++ b/packages/monster/dist/modules/constraints/abstract.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster}from"../namespace.js";import{Object}from"../types/object.js";class AbstractConstraint extends Object{constructor(){super()}isValid(value){return Promise.reject(value)}}Monster.assignToNamespace("Monster.Constraints",AbstractConstraint);export{Monster,AbstractConstraint};
diff --git a/packages/monster/dist/modules/constraints/abstractoperator.js b/packages/monster/dist/modules/constraints/abstractoperator.js
index 32c4e3df7f4e2bc4c0ebec16b19ede2a29d5cbda..b019f7ef0e8926a0905386b0c311df95d3ed86ce 100644
--- a/packages/monster/dist/modules/constraints/abstractoperator.js
+++ b/packages/monster/dist/modules/constraints/abstractoperator.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster,AbstractConstraint}from"./abstract.js";class AbstractOperator extends AbstractConstraint{constructor(operantA,operantB){super();if(!(operantA instanceof AbstractConstraint)||!(operantB instanceof AbstractConstraint)){throw new TypeError("parameters must be from type AbstractConstraint")}this.operantA=operantA;this.operantB=operantB}}Monster.assignToNamespace("Monster.Constraints",AbstractOperator);export{Monster,AbstractOperator};
diff --git a/packages/monster/dist/modules/constraints/andoperator.js b/packages/monster/dist/modules/constraints/andoperator.js
index 57504bcae386df36574b074bf50a2822f0481d0a..30117a4af7f4a0758d2511f82292f970925caa50 100644
--- a/packages/monster/dist/modules/constraints/andoperator.js
+++ b/packages/monster/dist/modules/constraints/andoperator.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster,AbstractConstraint}from"./abstract.js";import{AbstractOperator}from"./abstractoperator.js";class AndOperator extends AbstractOperator{isValid(value){return Promise.all([this.operantA.isValid(value),this.operantB.isValid(value)])}}Monster.assignToNamespace("Monster.Constraints",AndOperator);export{Monster,AndOperator};
diff --git a/packages/monster/dist/modules/constraints/invalid.js b/packages/monster/dist/modules/constraints/invalid.js
index c13149726c4ebcaafa3a64d9a85dc7b6bf669be3..e5dba655eb1aee510518c81f0a365e31276a3604 100644
--- a/packages/monster/dist/modules/constraints/invalid.js
+++ b/packages/monster/dist/modules/constraints/invalid.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster,AbstractConstraint}from"./abstract.js";class Invalid extends AbstractConstraint{isValid(value){return Promise.reject(value)}}Monster.assignToNamespace("Monster.Constraints",Invalid);export{Monster,Invalid};
diff --git a/packages/monster/dist/modules/constraints/isarray.js b/packages/monster/dist/modules/constraints/isarray.js
index 7b408ae7995060cbd9f5fcf8b4eee9ebf3064cae..07035fe60648072536e32af997a56a29da869d0b 100644
--- a/packages/monster/dist/modules/constraints/isarray.js
+++ b/packages/monster/dist/modules/constraints/isarray.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster,AbstractConstraint}from"./abstract.js";import{isArray}from"../types/is.js";class IsArray extends AbstractConstraint{isValid(value){if(isArray(value)){return Promise.resolve(value)}return Promise.reject(value)}}Monster.assignToNamespace("Monster.Constraints",IsArray);export{Monster,IsArray};
diff --git a/packages/monster/dist/modules/constraints/isobject.js b/packages/monster/dist/modules/constraints/isobject.js
index 4a5d8ab925ad63a5b173dd78dae34d7bddac4c9f..e887a45400e11682c3399cd4057ce66476a8aa2e 100644
--- a/packages/monster/dist/modules/constraints/isobject.js
+++ b/packages/monster/dist/modules/constraints/isobject.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster,AbstractConstraint}from"./abstract.js";import{isObject}from"../types/is.js";class IsObject extends AbstractConstraint{isValid(value){if(isObject(value)){return Promise.resolve(value)}return Promise.reject(value)}}Monster.assignToNamespace("Monster.Constraints",IsObject);export{Monster,IsObject};
diff --git a/packages/monster/dist/modules/constraints/namespace.js b/packages/monster/dist/modules/constraints/namespace.js
index a5fe9f16ee924f70dea895bcd41d447d51b5468d..bb9537a914626709eeb83d2ac4e73087f4c2d3c1 100644
--- a/packages/monster/dist/modules/constraints/namespace.js
+++ b/packages/monster/dist/modules/constraints/namespace.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';
diff --git a/packages/monster/dist/modules/constraints/oroperator.js b/packages/monster/dist/modules/constraints/oroperator.js
index e28e451981f40980aea4a8497b15df251ded7c64..7e4310496983de91102ba0d50264d77167525a32 100644
--- a/packages/monster/dist/modules/constraints/oroperator.js
+++ b/packages/monster/dist/modules/constraints/oroperator.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster,AbstractOperator}from"./abstractoperator.js";class OrOperator extends AbstractOperator{isValid(value){var self=this;return new Promise(function(resolve,reject){let a,b;self.operantA.isValid(value).then(function(){resolve()}).catch(function(){a=false;if(b===false){reject()}});self.operantB.isValid(value).then(function(){resolve()}).catch(function(){b=false;if(a===false){reject()}})})}}Monster.assignToNamespace("Monster.Constraints",OrOperator);export{Monster,OrOperator};
diff --git a/packages/monster/dist/modules/constraints/valid.js b/packages/monster/dist/modules/constraints/valid.js
index f873be488f86a89a1b7bad4e7cdc2aa57c791249..6a87514fcb3bcc1c897a2fdc4cb367e35008e389 100644
--- a/packages/monster/dist/modules/constraints/valid.js
+++ b/packages/monster/dist/modules/constraints/valid.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster,AbstractConstraint}from"./abstract.js";class Valid extends AbstractConstraint{isValid(value){return Promise.resolve(value)}}Monster.assignToNamespace("Monster.Constraints",Valid);export{Monster,Valid};
diff --git a/packages/monster/dist/modules/math/namespace.js b/packages/monster/dist/modules/math/namespace.js
index a5fe9f16ee924f70dea895bcd41d447d51b5468d..bb9537a914626709eeb83d2ac4e73087f4c2d3c1 100644
--- a/packages/monster/dist/modules/math/namespace.js
+++ b/packages/monster/dist/modules/math/namespace.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';
diff --git a/packages/monster/dist/modules/math/random.js b/packages/monster/dist/modules/math/random.js
index c17da2d1138fb6ad51750594622b3e38fde7a0b6..42b793c1bbf863e537fe1ab866c46cd9b72cba78 100644
--- a/packages/monster/dist/modules/math/random.js
+++ b/packages/monster/dist/modules/math/random.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster}from"../namespace.js";function random(min,max){if(min===undefined){min=0}if(max===undefined){max=MAX}if(max<min){throw new Error("max must be greater than min")}return Math.round(create(min,max))}var MAX=1000000000;Math.log2=Math.log2||function(n){return Math.log(n)/Math.log(2)};function create(min,max){var crypt;if(typeof global!=="undefined"){crypt=global?.["crypto"]||global?.["msCrypto"]}else{crypt=typeof crypto!=="undefined"?crypto:undefined}if(typeof crypt==="undefined"){throw new Error("missing crypt")}let rval=0;const range=max-min;if(range<2){return min}const bitsNeeded=Math.ceil(Math.log2(range));if(bitsNeeded>53){throw new Error("we cannot generate numbers larger than 53 bits.")}const bytesNeeded=Math.ceil(bitsNeeded/8);const mask=Math.pow(2,bitsNeeded)-1;const byteArray=new Uint8Array(bytesNeeded);crypt.getRandomValues(byteArray);let p=(bytesNeeded-1)*8;for(var i=0;i<bytesNeeded;i++){rval+=byteArray[i]*Math.pow(2,p);p-=8}rval=rval&mask;if(rval>=range){return create(min,max)}return min+rval}Monster.assignToNamespace("Monster.Math",random);export{Monster,random};
diff --git a/packages/monster/dist/modules/monster.js b/packages/monster/dist/modules/monster.js
index 8776fd17d331062ba7867c53740178cdfc82cc76..b4edf1b92b3e354aa89fed7a6da2325ad47e7721 100644
--- a/packages/monster/dist/modules/monster.js
+++ b/packages/monster/dist/modules/monster.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster}from"./namespace.js";import"./types/id.js";import"./types/is.js";import"./types/object.js";import"./types/observer.js";import"./types/observerlist.js";import"./types/proxyobserver.js";import"./types/version.js";import"./types/tokenlist.js";import"./types/validate.js";import"./types/version.js";import"./math/random.js";import"./util/clone.js";import"./util/comparator.js";import"./util/freeze.js";import"./constraints/abstract.js";import"./constraints/andoperator.js";import"./constraints/invalid.js";import"./constraints/isarray.js";import"./constraints/isobject.js";import"./constraints/abstractoperator.js";import"./constraints/oroperator.js";import"./constraints/valid.js";Monster.Util.deepFreeze(Monster);export{Monster};
diff --git a/packages/monster/dist/modules/namespace.js b/packages/monster/dist/modules/namespace.js
index 5b06f46a3d750ccaea41c574bad4eedbb00201fc..13312b8763a01fe0fce9dd2099f378db0a96ce25 100644
--- a/packages/monster/dist/modules/namespace.js
+++ b/packages/monster/dist/modules/namespace.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';class Namespace{constructor(namespace){if(namespace===undefined||typeof namespace!=="string"){throw new Error("namespace is not a string")}this.namespace=namespace}getNamespace(){return this.namespace}toString(){return this.getNamespace()}}export const Monster=new Namespace("Monster");assignToNamespace("Monster",assignToNamespace);function assignToNamespace(ns,...obj){let current=namespaceFor(ns.split("."));for(let i=0,l=obj.length;i<l;i++){current[objectName(obj[i])]=obj[i]}}function objectName(fn){try{if(typeof fn!=="function"){throw new Error("the first argument is not a function or class.")}if(fn.hasOwnProperty("name")){return fn.name}if("function"===typeof fn.toString){let s=fn.toString();let f=s.match(/^\s*function\s+([^\s(]+)/);if(Array.isArray(f)&&typeof f[1]==="string"){return f[1]}let c=s.match(/^\s*class\s+([^\s(]+)/);if(Array.isArray(c)&&typeof c[1]==="string"){return c[1]}}}catch(e){throw new Error("exception "+e)}throw new Error("the name of the class or function cannot be resolved.")}function namespaceFor(parts){var space=Monster,ns="Monster";for(let i=0;i<parts.length;i++){if("Monster"===parts[i]){continue}ns+="."+parts[i];if(!space.hasOwnProperty(parts[i])){space[parts[i]]=new Namespace(ns)}space=space[parts[i]]}return space}export{assignToNamespace};
diff --git a/packages/monster/dist/modules/types/id.js b/packages/monster/dist/modules/types/id.js
index 89af6cbb9f88c9fac2bda74b096bf709c5334bd6..c5ff1bf7dc27d882a928bdd37570839e68bd0d8e 100644
--- a/packages/monster/dist/modules/types/id.js
+++ b/packages/monster/dist/modules/types/id.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster}from"../namespace.js";import{random}from"../math/random.js";import"../types/object.js";let internalCounter=0;class ID extends Monster.Types.Object{constructor(){super();internalCounter+=1;this.id=global.btoa(random(1,10000)).replace(/=/g,"").replace(/^[0-9]+/,"X")+internalCounter}toString(){return this.id}}Monster.assignToNamespace("Monster.Types",ID);export{Monster,ID};
diff --git a/packages/monster/dist/modules/types/is.js b/packages/monster/dist/modules/types/is.js
index e5f910b6e7dd5f45a33db3dd24f781fc9577c0bd..911d261874e03a48c655deb1330cba9f7ef8d2e7 100644
--- a/packages/monster/dist/modules/types/is.js
+++ b/packages/monster/dist/modules/types/is.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-'use strict';import{Monster}from"../namespace.js";function isIterable(value){if(value===undefined)return false;if(value===null)return false;return typeof value?.[Symbol.iterator]==="function"}function isPrimitive(value){var type;if(value===undefined||value===null||value===NaN){return true}type=typeof value;if(type==="string"||type==="number"||type==="boolean"||type==="symbol"){return true}return false}function isBoolean(value){if(value===true||value===false){return true}return false}function isString(value){if(value===undefined||typeof value!=="string"){return false}return true}function isObject(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(typeof value==="object"){return true}return false}function isArray(value){if(Array.isArray(value)){return true}return false}function isFunction(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(typeof value==="function"){return true}return false}Monster.assignToNamespace("Monster.Types",isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable);export{Monster,isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable};
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+'use strict';import{Monster}from"../namespace.js";function isIterable(value){if(value===undefined)return false;if(value===null)return false;return typeof value?.[Symbol.iterator]==="function"}function isPrimitive(value){var type;if(value===undefined||value===null||value===NaN){return true}type=typeof value;if(type==="string"||type==="number"||type==="boolean"||type==="symbol"){return true}return false}function isBoolean(value){if(value===true||value===false){return true}return false}function isString(value){if(value===undefined||typeof value!=="string"){return false}return true}function isObject(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(typeof value==="object"){return true}return false}function isArray(value){if(Array.isArray(value)){return true}return false}function isFunction(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(typeof value==="function"){return true}return false}function isInteger(value){return Number.isInteger(value)}Monster.assignToNamespace("Monster.Types",isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable,isInteger);export{Monster,isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable,isInteger};
diff --git a/packages/monster/dist/modules/types/namespace.js b/packages/monster/dist/modules/types/namespace.js
index a5fe9f16ee924f70dea895bcd41d447d51b5468d..bb9537a914626709eeb83d2ac4e73087f4c2d3c1 100644
--- a/packages/monster/dist/modules/types/namespace.js
+++ b/packages/monster/dist/modules/types/namespace.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';
diff --git a/packages/monster/dist/modules/types/object.js b/packages/monster/dist/modules/types/object.js
index 4d9aa844c1259ef806e960c10d0adc1ac67c95f1..fdede1b5ca12ff4d6c03054efee03b38f93c1334 100644
--- a/packages/monster/dist/modules/types/object.js
+++ b/packages/monster/dist/modules/types/object.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster}from"../namespace.js";class Object{constructor(){}toString(){return JSON.stringify(this)}}Monster.assignToNamespace("Monster.Types",Object);export{Monster,Object};
diff --git a/packages/monster/dist/modules/types/observer.js b/packages/monster/dist/modules/types/observer.js
index 236e7b43fa9bdbeb389085b8d0f2f4f6f91e11e2..351b1b0268053fb69d4ebf7fc0c70e5080d60202 100644
--- a/packages/monster/dist/modules/types/observer.js
+++ b/packages/monster/dist/modules/types/observer.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-'use strict';import{Monster}from"../namespace.js";import{TokenList}from"../types/tokenlist.js";import{isObject}from"../types/is.js";import"../types/object.js";class Observer extends Monster.Types.Object{constructor(callback,...args){super();if(typeof callback!=="function"){throw new Error("observer callback must be a function")}this.callback=callback;this.arguments=args;this.tags=new TokenList}addTag(tag){this.tags.add(tag);return this}removeTag(tag){this.tags.remove(tag);return this}getTags(){return this.tags.entries()}hasTag(tag){return this.tags.contains(tag)}update(subject){let self=this;return new Promise(function(resolve,reject){if(!isObject(subject)){reject("subject must be an object")}let result=self.callback.apply(subject,self.arguments);resolve(result)})}}Monster.assignToNamespace("Monster.Types",Observer);export{Monster,Observer};
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+'use strict';import{Monster}from"../namespace.js";import{TokenList}from"../types/tokenlist.js";import{isObject}from"../types/is.js";import"../types/object.js";import{UniqueQueue}from"../types/uniquequeue.js";class Observer extends Monster.Types.Object{constructor(callback,...args){super();if(typeof callback!=="function"){throw new Error("observer callback must be a function")}this.callback=callback;this.arguments=args;this.tags=new TokenList;this.queue=new UniqueQueue}addTag(tag){this.tags.add(tag);return this}removeTag(tag){this.tags.remove(tag);return this}getTags(){return this.tags.entries()}hasTag(tag){return this.tags.contains(tag)}update(subject){let self=this;return new Promise(function(resolve,reject){if(!isObject(subject)){reject("subject must be an object")}self.queue.add(subject);setTimeout(()=>{if(self.queue.isEmpty()){resolve();return}let s=self.queue.poll();let result=self.callback.apply(s,self.arguments);if(isObject(result)&&result instanceof Promise){result.then(resolve).catch(reject);return}resolve(result)},0)})}}Monster.assignToNamespace("Monster.Types",Observer);export{Monster,Observer};
diff --git a/packages/monster/dist/modules/types/observerlist.js b/packages/monster/dist/modules/types/observerlist.js
index 3799f4982f44d28777303ba994f87461e3ca22c2..4773c7d5382d3e531dce0348c304461ebc5a3dc5 100644
--- a/packages/monster/dist/modules/types/observerlist.js
+++ b/packages/monster/dist/modules/types/observerlist.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster}from"../namespace.js";import"../types/object.js";class ObserverList extends Monster.Types.Object{constructor(){super();this.observers=[]}attach(observer){checkIsObserver(observer);this.observers.push(observer);return this}detach(observer){checkIsObserver(observer);var i=0,l=this.observers.length;for(;i<l;i++){if(this.observers[i]===observer){this.observers.splice(i,1)}}return this}contains(observer){checkIsObserver(observer);var i=0,l=this.observers.length;for(;i<l;i++){if(this.observers[i]===observer){return true}}return false}notify(subject){let pomises=[];var i=0,l=this.observers.length;for(;i<l;i++){pomises.push(this.observers[i].update(subject))}return Promise.all(pomises)}}function checkIsObserver(observer){if(!(observer instanceof Monster.Types.Observer)){throw new Error("argument must be instance of observer")}return true}Monster.assignToNamespace("Monster.Types",ObserverList);export{Monster,ObserverList};
diff --git a/packages/monster/dist/modules/types/proxyobserver.js b/packages/monster/dist/modules/types/proxyobserver.js
index dfd169dc1064757775c05b4bb696b6d9c9b4265f..5d6ca767de0a6b1473b1c04555c536c59f0cfcbf 100644
--- a/packages/monster/dist/modules/types/proxyobserver.js
+++ b/packages/monster/dist/modules/types/proxyobserver.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-'use strict';import{Monster}from"../namespace.js";import{Object}from"../types/object.js";import{validateObject}from"./validate.js";import{ObserverList}from"./observerlist.js";import{Observer}from"./observer.js";import{isObject,isArray}from"./is.js";var proxySet=new WeakSet;class ProxyObserver extends Object{constructor(object){super();validateObject(object);this.realSubject=object;this.subject=new Proxy(object,getHandler.call(this));proxySet.add(this.subject);this.observers=new ObserverList}getSubject(){return this.subject}getRealSubject(){return this.realSubject}attachObserver(observer){this.observers.attach(observer);return this}detachObserver(observer){this.observers.detach(observer);return this}notifyObservers(){this.observers.notify(this);return this}containsObserver(observer){return this.observers.contains(observer)}}Monster.assignToNamespace("Monster.Types",ProxyObserver);export{Monster,ProxyObserver};function getHandler(){const proxy=this;const handler={get:function(target,property,receiver){const prop=target?.[property];if(prop===undefined){return undefined}if(isArray(prop)||isObject(prop)&&!proxySet.has(prop)){target[property]=new Proxy(prop,handler);proxySet.add(prop)}return target[property]},set:function(target,property,value,receiver){target[property]=value;proxy.observers.notify(proxy);return true},deleteProperty:function(target,property){if(property in target){delete target[property];proxy.observers.notify(proxy);return true}return false},defineProperty:function(target,property,descriptor){let result=Reflect.defineProperty(target,property,descriptor);proxy.observers.notify(proxy);return parseURLToResultingURLRecord()},setPrototypeOf:function(target,prototype){let result=Reflect.setPrototypeOf(object1,prototype);proxy.observers.notify(proxy);return result}};return handler}
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+'use strict';import{Monster}from"../namespace.js";import{Object}from"../types/object.js";import{validateObject}from"./validate.js";import{ObserverList}from"./observerlist.js";import{Observer}from"./observer.js";import{isObject,isArray,isPrimitive}from"./is.js";class ProxyObserver extends Object{constructor(object){super();validateObject(object);this.realSubject=object;this.subject=new Proxy(object,getHandler.call(this));this.objectMap=new WeakMap;this.objectMap.set(this.realSubject,this.subject);this.observers=new ObserverList}getSubject(){return this.subject}getRealSubject(){return this.realSubject}attachObserver(observer){this.observers.attach(observer);return this}detachObserver(observer){this.observers.detach(observer);return this}notifyObservers(){this.observers.notify(this);return this}containsObserver(observer){return this.observers.contains(observer)}}Monster.assignToNamespace("Monster.Types",ProxyObserver);export{Monster,ProxyObserver};function getHandler(){const proxy=this;const handler={get:function(target,key,receiver){const value=Reflect.get(target,key,receiver);if(typeof key==="symbol"){return value}if(isPrimitive(value)){return value}if(isArray(value)||isObject(value)){if(proxy.objectMap.has(value)){return proxy.objectMap.get(value)}else{let p=new Proxy(value,handler);proxy.objectMap.set(value,p);return p}}return value},set:function(target,key,value,receiver){const result=Reflect.set(target,key,value,receiver);if(typeof property!=="symbol"){proxy.observers.notify(proxy)}return result},deleteProperty:function(target,key){if(key in target){delete target[key];if(typeof key!=="symbol"){proxy.observers.notify(proxy)}return true}return false},defineProperty:function(target,key,descriptor){let result=Reflect.defineProperty(target,key,descriptor);if(typeof key!=="symbol"){proxy.observers.notify(proxy)}return result},setPrototypeOf:function(target,key){let result=Reflect.setPrototypeOf(object1,key);if(typeof key!=="symbol"){proxy.observers.notify(proxy)}return result}};return handler}
diff --git a/packages/monster/dist/modules/types/queue.js b/packages/monster/dist/modules/types/queue.js
new file mode 100644
index 0000000000000000000000000000000000000000..7af91f4d0105f7344db5dbcd408bf12079845197
--- /dev/null
+++ b/packages/monster/dist/modules/types/queue.js
@@ -0,0 +1,2 @@
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+import{Monster,Object}from"./object.js";class Queue extends Object{constructor(){super();this.data=[]}isEmpty(){return this.data.length===0}peek(){if(this.isEmpty()){return undefined}return this.data[0]}add(value){this.data.push(value);return this}clear(){this.data=[];return this}poll(){if(this.isEmpty()){return undefined}return this.data.shift()}}Monster.assignToNamespace("Monster.Types",Queue);export{Monster,Queue};
diff --git a/packages/monster/dist/modules/types/stack.js b/packages/monster/dist/modules/types/stack.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c9b48d46ae8cad96acbcc81aa855c22f6d69266
--- /dev/null
+++ b/packages/monster/dist/modules/types/stack.js
@@ -0,0 +1,2 @@
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+import{Monster,Object}from"./object.js";class Stack extends Object{constructor(){super();this.data=[]}isEmpty(){return this.data.length===0}peek(){if(this.isEmpty()){return undefined}return this.data?.[this.data.length-1]}push(value){this.data.push(value);return this}clear(){this.data=[];return this}pop(){if(this.isEmpty()){return undefined}return this.data.pop()}}Monster.assignToNamespace("Monster.Types",Stack);export{Monster,Stack};
diff --git a/packages/monster/dist/modules/types/tokenlist.js b/packages/monster/dist/modules/types/tokenlist.js
index 5e0b7935a0ee69cd2f3ae0db34ad4c833838e850..61ba4886f22c1dc7ecada5b92cff994e56403fb7 100644
--- a/packages/monster/dist/modules/types/tokenlist.js
+++ b/packages/monster/dist/modules/types/tokenlist.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster}from"../namespace.js";import{Object}from"../types/object.js";import{isString,isIterable}from"../types/is.js";import{validateString,validateFunction}from"../types/validate.js";class TokenList extends Object{constructor(init){super();this.tokens=new Set;if(typeof init!=="undefined"){this.add(init)}}getIterator(){return this[Symbol.iterator]()}[Symbol.iterator](){let index=0;let entries=this.entries();return{next:()=>{if(index<entries.length){return{value:entries?.[index++],done:false}}else{return{done:true}}}}}contains(value){if(isString(value)){value=value.trim();let counter=0;value.split(" ").forEach(token=>{if(this.tokens.has(token.trim())===false)return false;counter++});return counter>0?true:false}if(isIterable(value)){let counter=0;for(let token of value){validateString(token);if(this.tokens.has(token.trim())===false)return false;counter++}return counter>0?true:false}return false}add(value){if(isString(value)){value.split(" ").forEach(token=>{this.tokens.add(token.trim())})}else if(isIterable(value)){for(let token of value){validateString(token);this.tokens.add(token.trim())}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}clear(){this.tokens.clear();return this}remove(value){if(isString(value)){value.split(" ").forEach(token=>{this.tokens.delete(token.trim())})}else if(isIterable(value)){for(let token of value){validateString(token);this.tokens.delete(token.trim())}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}replace(token,newToken){validateString(token);validateString(newToken);if(!this.contains(token)){return this}let a=Array.from(this.tokens);let i=a.indexOf(token);if(i===-1)return this;a.splice(i,1,newToken);this.tokens=new Set;this.add(a);return this}toggle(value){if(isString(value)){value.split(" ").forEach(token=>{toggleValue.call(this,token)})}else if(isIterable(value)){for(let token of value){toggleValue.call(this,token)}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}entries(){return Array.from(this.tokens)}forEach(callback){validateFunction(callback);this.tokens.forEach(callback);return this}toString(){return this.entries().join(" ")}}function toggleValue(token){if(!(this instanceof TokenList))throw Error("must be called with TokenList.call");validateString(token);token=token.trim();if(this.contains(token)){this.remove(token);return this}this.add(token);return this}Monster.assignToNamespace("Monster.Types",TokenList);export{Monster,TokenList};
diff --git a/packages/monster/dist/modules/types/uniquequeue.js b/packages/monster/dist/modules/types/uniquequeue.js
new file mode 100644
index 0000000000000000000000000000000000000000..39b5cb02c6677d59fd327015f1914e259a0714b3
--- /dev/null
+++ b/packages/monster/dist/modules/types/uniquequeue.js
@@ -0,0 +1,2 @@
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+import{Monster,Queue}from"./queue.js";import{validateObject}from"./validate.js";class UniqueQueue extends Queue{constructor(){super();this.unique=new WeakSet}add(value){validateObject(value);if(!this.unique.has(value)){this.unique.add(value);super.add(value)}return this}clear(){super.clear();this.unique=new WeakSet;return this}poll(){if(this.isEmpty()){return undefined}let value=this.data.shift();this.unique.delete(value);return value}}Monster.assignToNamespace("Monster.Types",UniqueQueue);export{Monster,UniqueQueue};
diff --git a/packages/monster/dist/modules/types/validate.js b/packages/monster/dist/modules/types/validate.js
index eac331d3328edcc923bddde8ba49595523a95734..6a1a9f11aac4a85efdf4cd0405476787bead1258 100644
--- a/packages/monster/dist/modules/types/validate.js
+++ b/packages/monster/dist/modules/types/validate.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-'use strict';import{Monster}from"../namespace.js";import{isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable}from"../types/is.js";function validateIterable(value){if(!isIterable(value)){throw new TypeError("value is not iterable")}}function validatePrimitive(value){if(!isPrimitive(value)){throw new TypeError("value is not a primitive")}}function validateBoolean(value){if(!isBoolean(value)){throw new TypeError("value is not a boolean")}}function validateString(value){if(!isString(value)){throw new TypeError("value is not a string")}}function validateObject(value){if(!isObject(value)){throw new TypeError("value is not a object")}}function validateArray(value){if(!isArray(value)){throw new TypeError("value is not not a array")}}function validateFunction(value){if(!isFunction(value)){throw new TypeError("value is not a function")}}Monster.assignToNamespace("Monster.Types",validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,validateIterable);export{Monster,validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,validateIterable};
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+'use strict';import{Monster}from"../namespace.js";import{isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable,isInteger}from"../types/is.js";function validateIterable(value){if(!isIterable(value)){throw new TypeError("value is not iterable")}}function validatePrimitive(value){if(!isPrimitive(value)){throw new TypeError("value is not a primitive")}}function validateBoolean(value){if(!isBoolean(value)){throw new TypeError("value is not a boolean")}}function validateString(value){if(!isString(value)){throw new TypeError("value is not a string")}}function validateObject(value){if(!isObject(value)){throw new TypeError("value is not a object")}}function validateArray(value){if(!isArray(value)){throw new TypeError("value is not not a array")}}function validateFunction(value){if(!isFunction(value)){throw new TypeError("value is not a function")}}function validateInteger(value){if(!isInteger(value)){throw new TypeError("value is not an integer")}}Monster.assignToNamespace("Monster.Types",validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,validateIterable,validateInteger);export{Monster,validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,validateIterable,validateInteger};
diff --git a/packages/monster/dist/modules/types/version.js b/packages/monster/dist/modules/types/version.js
index 84fc15ff5f1c223c7da5b983dcd2e0f140ca6223..c4aa40bcd424393acc512fa755241234dceafa21 100644
--- a/packages/monster/dist/modules/types/version.js
+++ b/packages/monster/dist/modules/types/version.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-'use strict';import{Monster}from"../namespace.js";import"../types/object.js";class Version extends Monster.Types.Object{constructor(major,minor,patch){super();if(typeof major==="string"&&minor===undefined&&patch===undefined){let parts=major.toString().split(".");major=parseInt(parts[0]||0);minor=parseInt(parts[1]||0);patch=parseInt(parts[2]||0)}if(major===undefined){throw new Error("major version is undefined")}if(minor===undefined){minor=0}if(patch===undefined){patch=0}this.major=parseInt(major);this.minor=parseInt(minor);this.patch=parseInt(patch);if(isNaN(this.major)){throw new Error("major is not a number")}if(isNaN(this.minor)){throw new Error("minor is not a number")}if(isNaN(this.patch)){throw new Error("patch is not a number")}}toString(){return this.major+"."+this.minor+"."+this.patch}compareTo(version){if(version instanceof Version){version=version.toString()}if(typeof version!=="string"){throw new Error("type exception")}if(version===this.toString()){return 0}let a=[this.major,this.minor,this.patch];let b=version.split(".");let len=Math.max(a.length,b.length);for(let i=0;i<len;i+=1){if(a[i]&&!b[i]&&parseInt(a[i])>0||parseInt(a[i])>parseInt(b[i])){return 1}else if(b[i]&&!a[i]&&parseInt(b[i])>0||parseInt(a[i])<parseInt(b[i])){return-1}}return 0}}Monster.assignToNamespace("Monster.Types",Version);let monsterVersion;function getVersion(){if(monsterVersion instanceof Version){return monsterVersion}monsterVersion=new Version("1.3.0");return monsterVersion}Monster.assignToNamespace("Monster",getVersion);export{Monster,Version,getVersion};
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+'use strict';import{Monster}from"../namespace.js";import"../types/object.js";class Version extends Monster.Types.Object{constructor(major,minor,patch){super();if(typeof major==="string"&&minor===undefined&&patch===undefined){let parts=major.toString().split(".");major=parseInt(parts[0]||0);minor=parseInt(parts[1]||0);patch=parseInt(parts[2]||0)}if(major===undefined){throw new Error("major version is undefined")}if(minor===undefined){minor=0}if(patch===undefined){patch=0}this.major=parseInt(major);this.minor=parseInt(minor);this.patch=parseInt(patch);if(isNaN(this.major)){throw new Error("major is not a number")}if(isNaN(this.minor)){throw new Error("minor is not a number")}if(isNaN(this.patch)){throw new Error("patch is not a number")}}toString(){return this.major+"."+this.minor+"."+this.patch}compareTo(version){if(version instanceof Version){version=version.toString()}if(typeof version!=="string"){throw new Error("type exception")}if(version===this.toString()){return 0}let a=[this.major,this.minor,this.patch];let b=version.split(".");let len=Math.max(a.length,b.length);for(let i=0;i<len;i+=1){if(a[i]&&!b[i]&&parseInt(a[i])>0||parseInt(a[i])>parseInt(b[i])){return 1}else if(b[i]&&!a[i]&&parseInt(b[i])>0||parseInt(a[i])<parseInt(b[i])){return-1}}return 0}}Monster.assignToNamespace("Monster.Types",Version);let monsterVersion;function getVersion(){if(monsterVersion instanceof Version){return monsterVersion}monsterVersion=new Version("1.4.0");return monsterVersion}Monster.assignToNamespace("Monster",getVersion);export{Monster,Version,getVersion};
diff --git a/packages/monster/dist/modules/util/clone.js b/packages/monster/dist/modules/util/clone.js
index 4be4ed09843f43ac64a35397e9893e0ba2bf7378..f5ce507119edd06d1361de1974e801d39116bc98 100644
--- a/packages/monster/dist/modules/util/clone.js
+++ b/packages/monster/dist/modules/util/clone.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster}from"../namespace.js";import{isObject,isFunction,isPrimitive,isArray}from"../types/is.js";function clone(obj){if(null===obj){return obj}if(isPrimitive(obj)){return obj}if(isFunction(obj)){return obj}if(isArray(obj)){let copy=[];for(var i=0,len=obj.length;i<len;i++){copy[i]=clone(obj[i])}return copy}if(isObject(obj)){if(obj instanceof Date){let copy=new Date;copy.setTime(obj.getTime());return copy}if(typeof Element!=="undefined"&&obj instanceof Element)return obj;if(typeof HTMLDocument!=="undefined"&&obj instanceof HTMLDocument)return obj;if(typeof DocumentFragment!=="undefined"&&obj instanceof DocumentFragment)return obj;if(typeof globalContext!=="undefined"&&obj===globalContext)return obj;if(typeof window!=="undefined"&&obj===window)return obj;if(typeof document!=="undefined"&&obj===document)return obj;if(typeof navigator!=="undefined"&&obj===navigator)return obj;if(typeof JSON!=="undefined"&&obj===JSON)return obj;try{if(obj instanceof Proxy){return obj}}catch(e){}return cloneObject(obj)}throw new Error("unable to clone obj! its type isn't supported.")}function cloneObject(obj){var copy;if(typeof obj.hasOwnProperty("getClone")&&obj.getClone==="function"){return obj.getClone()}copy={};if(typeof obj.constructor==="function"&&typeof obj.constructor.call==="function"){copy=new obj.constructor}for(let key in obj){if(!obj.hasOwnProperty(key)){continue}if(Monster.Types.isPrimitive(obj[key])){copy[key]=obj[key];continue}copy[key]=clone(obj[key])}return copy}Monster.assignToNamespace("Monster.Util",clone);export{Monster,clone};
diff --git a/packages/monster/dist/modules/util/comparator.js b/packages/monster/dist/modules/util/comparator.js
index c58e223f348eb3a2ad02a87ee43c94d740ca856b..b32d7b0316f9e48ab690d796a0daf1f39fade055 100644
--- a/packages/monster/dist/modules/util/comparator.js
+++ b/packages/monster/dist/modules/util/comparator.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster,Object}from"../types/object.js";import{isFunction}from"../types/is.js";class Comparator extends Object{constructor(callback){super();if(isFunction(callback)){this.compare=callback}else if(callback!==undefined){throw new TypeError("unsupported type")}else{this.compare=function(a,b){if(typeof a!==typeof b){throw new TypeError("impractical comparison")}if(a===b){return 0}return a<b?-1:1}}}reverse(){const original=this.compare;this.compare=(a,b)=>original(b,a);return this}equal(a,b){return this.compare(a,b)===0}greaterThan(a,b){return this.compare(a,b)>0}greaterThanOrEqual(a,b){return this.greaterThan(a,b)||this.equal(a,b)}lessThanOrEqual(a,b){return this.lessThan(a,b)||this.equal(a,b)}lessThan(a,b){return this.compare(a,b)<0}}Monster.assignToNamespace("Monster.Util",Comparator);export{Monster,Comparator};
diff --git a/packages/monster/dist/modules/util/freeze.js b/packages/monster/dist/modules/util/freeze.js
index 0aa43f294de3b4696dad33795b098b696700c641..096cfc917578b67d4c9428328f1a0c23d8db1c08 100644
--- a/packages/monster/dist/modules/util/freeze.js
+++ b/packages/monster/dist/modules/util/freeze.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';import{Monster}from"../namespace.js";import{validateObject}from"../types/validate.js";function deepFreeze(object){validateObject(object);var propNames=Object.getOwnPropertyNames(object);for(let name of propNames){let value=object[name];object[name]=value&&typeof value==="object"?deepFreeze(value):value}return Object.freeze(object)}Monster.assignToNamespace("Monster.Util",deepFreeze);export{Monster,deepFreeze};
diff --git a/packages/monster/dist/modules/util/namespace.js b/packages/monster/dist/modules/util/namespace.js
index a5fe9f16ee924f70dea895bcd41d447d51b5468d..bb9537a914626709eeb83d2ac4e73087f4c2d3c1 100644
--- a/packages/monster/dist/modules/util/namespace.js
+++ b/packages/monster/dist/modules/util/namespace.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
 'use strict';
diff --git a/packages/monster/dist/modules/util/pathfinder.js b/packages/monster/dist/modules/util/pathfinder.js
new file mode 100644
index 0000000000000000000000000000000000000000..7129efe8155f618077a6b2f211d7c0bb84bd8f91
--- /dev/null
+++ b/packages/monster/dist/modules/util/pathfinder.js
@@ -0,0 +1,2 @@
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+'use strict';import{Monster}from"../namespace.js";import{isObject,isArray,isInteger}from"../types/is.js";import{validateString,validateInteger}from"../types/validate.js";import{Object}from"../types/object.js";import{Stack}from"../types/stack.js";const DELIMITER=".";class Pathfinder extends Object{constructor(object){super();this.object=object}getVia(path){validateString(path);return getValueViaPath(this.object,path)}setVia(path,value){validateString(path);setValueViaPath(this.object,path,value);return this}exists(path){validateString(path);try{getValueViaPath(this.object,path,true);return true}catch(e){}return false}}Monster.assignToNamespace("Monster.Util",Pathfinder);export{Monster,Pathfinder};function getValueViaPath(object,path,check){if(path===""){return object}let parts=path.split(DELIMITER);let current=parts.shift();if(isObject(object)||isArray(object)){let anchor;if(object instanceof Map){anchor=object.get(current)}else if(object instanceof Set){current=parseInt(current);validateInteger(current);anchor=[...object]?.[current]}else if(isArray(object)){current=parseInt(current);validateInteger(current);anchor=object?.[current]}else{anchor=object?.[current]}if(isObject(anchor)||isArray(anchor)){return getValueViaPath(anchor,parts.join(DELIMITER),check)}if(parts.length>0){throw Error("the journey is not at its end ("+parts.join(DELIMITER)+")")}if(check===true&&!object.hasOwnProperty(current)){throw Error("unknown value")}return anchor}throw TypeError("unsupported type")}function setValueViaPath(object,path,value){let parts=path.split(DELIMITER);let last=parts.pop();let subpath=parts.join(DELIMITER);let stack=new Stack;let current=subpath;while(true){try{getValueViaPath(object,current,true);break}catch(e){}stack.push(current);parts.pop();current=parts.join(DELIMITER);if(current==="")break}while(!stack.isEmpty()){current=stack.pop();let obj={};if(!stack.isEmpty()){let n=stack.peek().split(DELIMITER).pop();if(isInteger(parseInt(n))){obj=[]}}setValueViaPath(object,current,obj)}let anchor=getValueViaPath(object,subpath);if(!isObject(object)&&!isArray(object)){throw TypeError("unsupported type: "+typeof object)}if(anchor instanceof Map){anchor.set(last,value)}else if(anchor instanceof Set){anchor.append(value)}else if(isArray(anchor)){last=parseInt(last);validateInteger(last);anchor[last]=value}else{anchor[last]=value}return anchor}
diff --git a/packages/monster/dist/monster.dev.js b/packages/monster/dist/monster.dev.js
index 4813a0269bc28a00bf1c5426a4c58b9334f38e54..e2a24649affb6ba66dd1f5be35d1a7a6638b2dbe 100644
--- a/packages/monster/dist/monster.dev.js
+++ b/packages/monster/dist/monster.dev.js
@@ -211,7 +211,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
  * new Monster.Constraint.AndOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -220,8 +220,8 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
  * new AndOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -310,7 +310,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
  * new Monster.Constraint.Invalid().catch(()=>console.log(true));
  * </script>
  * ```
@@ -319,7 +319,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
  * new Invalid().catch(()=>console.log(true));
  * </script>
  * ```
@@ -410,7 +410,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
  * console.log(new Monster.Constraint.IsArray())
  * </script>
  * ```
@@ -419,7 +419,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';
+ * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
  * console.log(new IsArray())
  * </script>
  * ```
@@ -514,7 +514,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
  * console.log(new Monster.Constraint.IsObject())
  * </script>
  * ```
@@ -523,7 +523,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';
+ * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
  * console.log(new IsObject())
  * </script>
  * ```
@@ -614,7 +614,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
  * new Monster.Constraint.OrOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -623,8 +623,8 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
  * new OrOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -736,7 +736,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
  * new Monster.Constraint.Valid().then(()=>console.log(true));
  * </script>
  * ```
@@ -745,7 +745,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
  * new Valid().then(()=>console.log(true));
  * </script>
  * ```
@@ -813,7 +813,7 @@ var _namespace = require("../namespace.js");
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
  * console.log(Monster.Math.random(1,10)) // ↦ 5
  * </script>
  * ```
@@ -822,7 +822,7 @@ var _namespace = require("../namespace.js");
  *
  * ```
  * <script type="module">
- * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';
+ * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
  * console.log(random(1,10)) // ↦ 5
  * </script>
  * ```
@@ -982,7 +982,7 @@ require("./constraints/valid.js");
 
 _namespace.Monster.Util.deepFreeze(_namespace.Monster);
 
-},{"./constraints/abstract.js":1,"./constraints/abstractoperator.js":2,"./constraints/andoperator.js":3,"./constraints/invalid.js":4,"./constraints/isarray.js":5,"./constraints/isobject.js":6,"./constraints/oroperator.js":7,"./constraints/valid.js":8,"./math/random.js":9,"./namespace.js":11,"./types/id.js":12,"./types/is.js":13,"./types/object.js":14,"./types/observer.js":15,"./types/observerlist.js":16,"./types/proxyobserver.js":17,"./types/tokenlist.js":18,"./types/validate.js":19,"./types/version.js":20,"./util/clone.js":21,"./util/comparator.js":22,"./util/freeze.js":23}],11:[function(require,module,exports){
+},{"./constraints/abstract.js":1,"./constraints/abstractoperator.js":2,"./constraints/andoperator.js":3,"./constraints/invalid.js":4,"./constraints/isarray.js":5,"./constraints/isobject.js":6,"./constraints/oroperator.js":7,"./constraints/valid.js":8,"./math/random.js":9,"./namespace.js":11,"./types/id.js":12,"./types/is.js":13,"./types/object.js":14,"./types/observer.js":15,"./types/observerlist.js":16,"./types/proxyobserver.js":17,"./types/tokenlist.js":19,"./types/validate.js":21,"./types/version.js":22,"./util/clone.js":23,"./util/comparator.js":24,"./util/freeze.js":25}],11:[function(require,module,exports){
 'use strict';
 /**
  * @namespace Monster
@@ -1077,7 +1077,7 @@ assignToNamespace('Monster', assignToNamespace);
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/namespace.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/namespace.js';
  * function hello() {
  *            console.log('Hello World!');
  *        }
@@ -1221,8 +1221,7 @@ var internalCounter = 0;
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
- * console.log(new Monster.Types.ID())
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Monster.Types.ID())
  * </script>
  * ```
@@ -1231,8 +1230,7 @@ var internalCounter = 0;
  *
  * ```
  * <script type="module">
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
- * console.log(new ID())
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new ID())
  * </script>
  * ```
@@ -1295,6 +1293,7 @@ exports.isObject = isObject;
 exports.isArray = isArray;
 exports.isFunction = isFunction;
 exports.isIterable = isIterable;
+exports.isInteger = isInteger;
 Object.defineProperty(exports, "Monster", {
   enumerable: true,
   get: function get() {
@@ -1313,7 +1312,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isIterable(null)) // ↦ false
  * console.log(Monster.Types.isIterable('hello')) // ↦ true
  * console.log(Monster.Types.isIterable([])) // ↦ true
@@ -1324,7 +1323,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
  *
  * ```
  * <script type="module">
- * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isIterable(null))  // ↦ false
  * console.log(isIterable('hello'))  // ↦ true
  * console.log(isIterable([]))  // ↦ true
@@ -1349,7 +1348,7 @@ function isIterable(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isPrimitive('2')) // ↦ false
  * console.log(Monster.Types.isPrimitive([])) // ↦ true
  * </script>
@@ -1359,7 +1358,7 @@ function isIterable(value) {
  *
  * ```
  * <script type="module">
- * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isPrimitive('2'))  // ↦ true
  * console.log(isPrimitive([]))  // ↦ false
  * </script>
@@ -1395,7 +1394,7 @@ function isPrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isBoolean('2')) // ↦ false
  * console.log(Monster.Types.isBoolean([])) // ↦ false
  * console.log(Monster.Types.isBoolean(true)) // ↦ true
@@ -1406,7 +1405,7 @@ function isPrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isBoolean('2'))  // ↦ false
  * console.log(isBoolean([]))  // ↦ false
  * console.log(isBoolean(2>4))  // ↦ true
@@ -1435,7 +1434,7 @@ function isBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isString('2')) // ↦ true
  * console.log(Monster.Types.isString([])) // ↦ false
  * </script>
@@ -1445,7 +1444,7 @@ function isBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isString('2'))  // ↦ true
  * console.log(isString([]))  // ↦ false
  * </script>
@@ -1473,7 +1472,7 @@ function isString(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isObject('2')) // ↦ false
  * console.log(Monster.Types.isObject([])) // ↦ false
  * console.log(Monster.Types.isObject({})) // ↦ true
@@ -1484,7 +1483,7 @@ function isString(value) {
  *
  * ```
  * <script type="module">
- * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isObject('2'))  // ↦ false
  * console.log(isObject([]))  // ↦ false
  * </script>
@@ -1515,7 +1514,7 @@ function isObject(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isArray('2')) // ↦ false
  * console.log(Monster.Types.isArray([])) // ↦ true
  * </script>
@@ -1525,7 +1524,7 @@ function isObject(value) {
  *
  * ```
  * <script type="module">
- * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isArray('2'))  // ↦ false
  * console.log(isArray([]))  // ↦ true
  * </script>
@@ -1553,7 +1552,7 @@ function isArray(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isFunction(()=>{})) // ↦ true
  * console.log(Monster.Types.isFunction('2')) // ↦ false
  * console.log(Monster.Types.isFunction([])) // ↦ false
@@ -1564,7 +1563,7 @@ function isArray(value) {
  *
  * ```
  * <script type="module">
- * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isFunction(()=>{})) // ↦ true
  * console.log(isFunction('2'))  // ↦ false
  * console.log(isFunction([]))  // ↦ false
@@ -1589,8 +1588,44 @@ function isFunction(value) {
 
   return false;
 }
+/**
+ * checks whether the value passed is an integer
+ *
+ * you can call the method via the monster namespace `Monster.Types.isFunction()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+ * console.log(Monster.Types.isInteger(()=>{})) // ↦ true
+ * console.log(Monster.Types.isInteger('2')) // ↦ false
+ * console.log(Monster.Types.isInteger(2)) // ↦ true
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {isInteger} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+ * console.log(isInteger(()=>{})) // ↦ true
+ * console.log(isInteger('2'))  // ↦ false
+ * console.log(isInteger(2))  // ↦ true
+ * </script>
+ * ```
+ *
+ * @param {*} value
+ * @returns {boolean}
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+
+
+function isInteger(value) {
+  return Number.isInteger(value);
+}
 
-_namespace.Monster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable);
+_namespace.Monster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger);
 
 },{"../namespace.js":11}],14:[function(require,module,exports){
 'use strict';
@@ -1624,7 +1659,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
  * console.log(new Monster.Types.Object())
  * console.log(new Monster.Types.Object())
  * </script>
@@ -1634,7 +1669,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
  *
  * ```
  * <script type="module">
- * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';
+ * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
  * console.log(new Object())
  * console.log(new Object())
  * </script>
@@ -1698,6 +1733,8 @@ var _is = require("../types/is.js");
 
 require("../types/object.js");
 
+var _uniquequeue = require("../types/uniquequeue.js");
+
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
@@ -1725,7 +1762,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
  * console.log(new Monster.Types.Observer())
  * </script>
  * ```
@@ -1734,7 +1771,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
  * console.log(Observer())
  * </script>
  * ```
@@ -1763,7 +1800,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  * }, "a", 2, true)
  * </script>
  * ```
- * 
+ *
  * the callback function must have as many parameters as arguments are given.
  *
  *
@@ -1800,6 +1837,7 @@ var Observer = /*#__PURE__*/function (_Monster$Types$Object) {
 
     _this.arguments = args;
     _this.tags = new _tokenlist.TokenList();
+    _this.queue = new _uniquequeue.UniqueQueue();
     return _this;
   }
   /**
@@ -1863,8 +1901,25 @@ var Observer = /*#__PURE__*/function (_Monster$Types$Object) {
           reject("subject must be an object");
         }
 
-        var result = self.callback.apply(subject, self.arguments);
-        resolve(result);
+        self.queue.add(subject);
+        setTimeout(function () {
+          // the queue and the settimeout ensure that an object is not 
+          // informed of the same change more than once.
+          if (self.queue.isEmpty()) {
+            resolve();
+            return;
+          }
+
+          var s = self.queue.poll();
+          var result = self.callback.apply(s, self.arguments);
+
+          if ((0, _is.isObject)(result) && result instanceof Promise) {
+            result.then(resolve)["catch"](reject);
+            return;
+          }
+
+          resolve(result);
+        }, 0);
       });
     }
   }]);
@@ -1876,7 +1931,7 @@ exports.Observer = Observer;
 
 _namespace.Monster.assignToNamespace('Monster.Types', Observer);
 
-},{"../namespace.js":11,"../types/is.js":13,"../types/object.js":14,"../types/tokenlist.js":18}],16:[function(require,module,exports){
+},{"../namespace.js":11,"../types/is.js":13,"../types/object.js":14,"../types/tokenlist.js":19,"../types/uniquequeue.js":20}],16:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -1926,7 +1981,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
  * console.log(new Monster.Types.ObserverList()) 
  * console.log(new Monster.Types.ObserverList()) 
  * </script>
@@ -1936,7 +1991,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';
+ * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
  * console.log(ObserverList())
  * console.log(ObserverList())
  * </script>
@@ -2041,8 +2096,6 @@ _namespace.Monster.assignToNamespace('Monster.Types', ObserverList);
  * @author schukai GmbH
  */
 
-function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
@@ -2066,6 +2119,8 @@ var _observer = require("./observer.js");
 
 var _is = require("./is.js");
 
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
@@ -2086,13 +2141,6 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
 
 function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
 
-/**
- * store proxy objects
- *
- * @type {WeakSet<object>}
- */
-var proxySet = new WeakSet(); // language=JavaScript
-
 /**
  * an observer manages a callback function
  *
@@ -2100,7 +2148,7 @@ var proxySet = new WeakSet(); // language=JavaScript
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
  * console.log(new Monster.Types.ProxyObserver())
  * </script>
  * ```
@@ -2109,7 +2157,7 @@ var proxySet = new WeakSet(); // language=JavaScript
  *
  * ```
  * <script type="module">
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
  * console.log(new ProxyObserver())
  * </script>
  * ```
@@ -2145,7 +2193,6 @@ var proxySet = new WeakSet(); // language=JavaScript
  * @copyright schukai GmbH
  * @memberOf Monster/Types
  */
-
 var ProxyObserver = /*#__PURE__*/function (_Object) {
   _inherits(ProxyObserver, _Object);
 
@@ -2164,7 +2211,10 @@ var ProxyObserver = /*#__PURE__*/function (_Object) {
     (0, _validate.validateObject)(object);
     _this.realSubject = object;
     _this.subject = new Proxy(object, getHandler.call(_assertThisInitialized(_this)));
-    proxySet.add(_this.subject);
+    _this.objectMap = new WeakMap();
+
+    _this.objectMap.set(_this.realSubject, _this.subject);
+
     _this.observers = new _observerlist.ObserverList();
     return _this;
   }
@@ -2261,54 +2311,234 @@ function getHandler() {
 
   var handler = {
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
-    get: function get(target, property, receiver) {
-      var prop = target === null || target === void 0 ? void 0 : target[property]; // return if property not found
+    get: function get(target, key, receiver) {
+      var value = Reflect.get(target, key, receiver);
 
-      if (prop === undefined) {
-        return undefined;
+      if (_typeof(key) === "symbol") {
+        return value;
+      }
+
+      if ((0, _is.isPrimitive)(value)) {
+        return value;
       } // set value as proxy if object or array
 
 
-      if ((0, _is.isArray)(prop) || (0, _is.isObject)(prop) && !proxySet.has(prop)) {
-        target[property] = new Proxy(prop, handler);
-        proxySet.add(prop);
+      if ((0, _is.isArray)(value) || (0, _is.isObject)(value)) {
+        if (proxy.objectMap.has(value)) {
+          return proxy.objectMap.get(value);
+        } else {
+          var p = new Proxy(value, handler);
+          proxy.objectMap.set(value, p);
+          return p;
+        }
       }
 
-      return target[property];
+      return value;
     },
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver 
-    set: function set(target, property, value, receiver) {
-      target[property] = value;
-      proxy.observers.notify(proxy);
-      return true;
+    set: function set(target, key, value, receiver) {
+      var result = Reflect.set(target, key, value, receiver);
+
+      if ((typeof property === "undefined" ? "undefined" : _typeof(property)) !== "symbol") {
+        proxy.observers.notify(proxy);
+      }
+
+      return result;
     },
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p
-    deleteProperty: function deleteProperty(target, property) {
-      if (property in target) {
-        delete target[property];
-        proxy.observers.notify(proxy);
+    deleteProperty: function deleteProperty(target, key) {
+      if (key in target) {
+        delete target[key];
+
+        if (_typeof(key) !== "symbol") {
+          proxy.observers.notify(proxy);
+        }
+
         return true;
       }
 
       return false;
     },
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc
-    defineProperty: function defineProperty(target, property, descriptor) {
-      var result = Reflect.defineProperty(target, property, descriptor);
-      proxy.observers.notify(proxy);
-      return parseURLToResultingURLRecord();
+    defineProperty: function defineProperty(target, key, descriptor) {
+      var result = Reflect.defineProperty(target, key, descriptor);
+
+      if (_typeof(key) !== "symbol") {
+        proxy.observers.notify(proxy);
+      }
+
+      return result;
     },
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v
-    setPrototypeOf: function setPrototypeOf(target, prototype) {
-      var result = Reflect.setPrototypeOf(object1, prototype);
-      proxy.observers.notify(proxy);
+    setPrototypeOf: function setPrototypeOf(target, key) {
+      var result = Reflect.setPrototypeOf(object1, key);
+
+      if (_typeof(key) !== "symbol") {
+        proxy.observers.notify(proxy);
+      }
+
       return result;
     }
   };
   return handler;
 }
 
-},{"../namespace.js":11,"../types/object.js":14,"./is.js":13,"./observer.js":15,"./observerlist.js":16,"./validate.js":19}],18:[function(require,module,exports){
+},{"../namespace.js":11,"../types/object.js":14,"./is.js":13,"./observer.js":15,"./observerlist.js":16,"./validate.js":21}],18:[function(require,module,exports){
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "Monster", {
+  enumerable: true,
+  get: function get() {
+    return _object.Monster;
+  }
+});
+exports.Queue = void 0;
+
+var _object = require("./object.js");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+/**
+ * queue class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+ * console.log(new Monster.Types.Queue())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+ * console.log(new Queue())
+ * </script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+var Queue = /*#__PURE__*/function (_Object) {
+  _inherits(Queue, _Object);
+
+  var _super = _createSuper(Queue);
+
+  /**
+   *
+   */
+  function Queue() {
+    var _this;
+
+    _classCallCheck(this, Queue);
+
+    _this = _super.call(this);
+    _this.data = [];
+    return _this;
+  }
+  /**
+   * @return {boolean}
+   */
+
+
+  _createClass(Queue, [{
+    key: "isEmpty",
+    value: function isEmpty() {
+      return this.data.length === 0;
+    }
+    /**
+     * Read the element at the front of the queue without removing it.
+     *
+     * @return {*}
+     */
+
+  }, {
+    key: "peek",
+    value: function peek() {
+      if (this.isEmpty()) {
+        return undefined;
+      }
+
+      return this.data[0];
+    }
+    /**
+     * Add a new element to the end of the queue.
+     *
+     * @param {*} value
+     * @returns {Queue}
+     */
+
+  }, {
+    key: "add",
+    value: function add(value) {
+      this.data.push(value);
+      return this;
+    }
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+
+  }, {
+    key: "clear",
+    value: function clear() {
+      this.data = [];
+      return this;
+    }
+    /**
+     * Remove the element at the front of the queue
+     * If the queue is empty, return undefined.
+     *
+     * @return {*}
+     */
+
+  }, {
+    key: "poll",
+    value: function poll() {
+      if (this.isEmpty()) {
+        return undefined;
+      }
+
+      return this.data.shift();
+    }
+  }]);
+
+  return Queue;
+}(Object);
+
+exports.Queue = Queue;
+
+_object.Monster.assignToNamespace('Monster.Types', Queue);
+
+},{"./object.js":14}],19:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -2370,7 +2600,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
  * console.log(new Monster.Types.TokenList("myclass row"))
  * console.log(new Monster.Types.TokenList("myclass row"))
  * </script>
@@ -2380,7 +2610,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';
+ * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
  * console.log(new TokenList("myclass row"))
  * console.log(new TokenList("myclass row"))
  * </script>
@@ -2753,7 +2983,156 @@ function toggleValue(token) {
 
 _namespace.Monster.assignToNamespace('Monster.Types', TokenList);
 
-},{"../namespace.js":11,"../types/is.js":13,"../types/object.js":14,"../types/validate.js":19}],19:[function(require,module,exports){
+},{"../namespace.js":11,"../types/is.js":13,"../types/object.js":14,"../types/validate.js":21}],20:[function(require,module,exports){
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "Monster", {
+  enumerable: true,
+  get: function get() {
+    return _queue.Monster;
+  }
+});
+exports.UniqueQueue = void 0;
+
+var _queue = require("./queue.js");
+
+var _validate = require("./validate.js");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
+
+function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+/**
+ * UniqueQueue class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+ * console.log(new Monster.Types.UniqueQueue())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+ * console.log(new UniqueQueue())
+ * </script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+var UniqueQueue = /*#__PURE__*/function (_Queue) {
+  _inherits(UniqueQueue, _Queue);
+
+  var _super = _createSuper(UniqueQueue);
+
+  /**
+   *
+   */
+  function UniqueQueue() {
+    var _this;
+
+    _classCallCheck(this, UniqueQueue);
+
+    _this = _super.call(this);
+    _this.unique = new WeakSet();
+    return _this;
+  }
+  /**
+   * Add a new element to the end of the queue.
+   *
+   * @param {object} value
+   * @returns {Queue}
+   * @throws {TypeError} value is not a object
+   */
+
+
+  _createClass(UniqueQueue, [{
+    key: "add",
+    value: function add(value) {
+      (0, _validate.validateObject)(value);
+
+      if (!this.unique.has(value)) {
+        this.unique.add(value);
+
+        _get(_getPrototypeOf(UniqueQueue.prototype), "add", this).call(this, value);
+      }
+
+      return this;
+    }
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+
+  }, {
+    key: "clear",
+    value: function clear() {
+      _get(_getPrototypeOf(UniqueQueue.prototype), "clear", this).call(this);
+
+      this.unique = new WeakSet();
+      return this;
+    }
+    /**
+     * Remove the element at the front of the queue
+     * If the queue is empty, return undefined.
+     *
+     * @return {object}
+     */
+
+  }, {
+    key: "poll",
+    value: function poll() {
+      if (this.isEmpty()) {
+        return undefined;
+      }
+
+      var value = this.data.shift();
+      this.unique["delete"](value);
+      return value;
+    }
+  }]);
+
+  return UniqueQueue;
+}(_queue.Queue);
+
+exports.UniqueQueue = UniqueQueue;
+
+_queue.Monster.assignToNamespace('Monster.Types', UniqueQueue);
+
+},{"./queue.js":18,"./validate.js":21}],21:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -2769,6 +3148,7 @@ exports.validateObject = validateObject;
 exports.validateArray = validateArray;
 exports.validateFunction = validateFunction;
 exports.validateIterable = validateIterable;
+exports.validateInteger = validateInteger;
 Object.defineProperty(exports, "Monster", {
   enumerable: true,
   get: function get() {
@@ -2787,7 +3167,7 @@ var _is = require("../types/is.js");
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateIterable('2')) // ↦ TypeError
  * console.log(Monster.Types.validateIterable([])) // ↦ undefined
  * </script>
@@ -2797,7 +3177,7 @@ var _is = require("../types/is.js");
  *
  * ```
  * <script type="module">
- * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateIterable('2'))  // ↦ TypeError
  * console.log(validateIterable([]))  // ↦ undefined
  * </script>
@@ -2825,7 +3205,7 @@ function validateIterable(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validatePrimitive('2')) // ↦ undefined
  * console.log(Monster.Types.validatePrimitive([])) // ↦ TypeError
  * </script>
@@ -2835,7 +3215,7 @@ function validateIterable(value) {
  *
  * ```
  * <script type="module">
- * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validatePrimitive('2'))  // ↦ undefined
  * console.log(validatePrimitive([]))  // ↦ TypeError
  * </script>
@@ -2865,7 +3245,7 @@ function validatePrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateBoolean(true)) // ↦ undefined
  * console.log(Monster.Types.validateBoolean('2')) // ↦ TypeError
  * console.log(Monster.Types.validateBoolean([])) // ↦ TypeError
@@ -2876,7 +3256,7 @@ function validatePrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateBoolean(false))  // ↦ undefined
  * console.log(validateBoolean('2'))  // ↦ TypeError
  * console.log(validateBoolean([]))  // ↦ TypeError
@@ -2905,7 +3285,7 @@ function validateBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateString('2')) // ↦ undefined
  * console.log(Monster.Types.validateString([])) // ↦ TypeError
  * </script>
@@ -2915,7 +3295,7 @@ function validateBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateString('2'))  // ↦ undefined
  * console.log(validateString([]))  // ↦ TypeError
  * </script>
@@ -2926,7 +3306,6 @@ function validateBoolean(value) {
  * @since 1.0.0
  * @copyright schukai GmbH
  * @memberOf Monster/Types
-
  * @throws {TypeError} value is not a string
  */
 
@@ -2943,7 +3322,7 @@ function validateString(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateObject({})) // ↦ undefined
  * console.log(Monster.Types.validateObject('2')) // ↦ TypeError
  * console.log(Monster.Types.validateObject([])) // ↦ TypeError
@@ -2954,7 +3333,7 @@ function validateString(value) {
  *
  * ```
  * <script type="module">
- * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateObject({}))  // ↦ undefined
  * console.log(validateObject('2'))  // ↦ TypeError
  * console.log(validateObject([]))  // ↦ TypeError
@@ -2982,7 +3361,7 @@ function validateObject(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateArray('2')) // ↦ TypeError
  * console.log(Monster.Types.validateArray([])) // ↦ undefined
  * </script>
@@ -2992,7 +3371,7 @@ function validateObject(value) {
  *
  * ```
  * <script type="module">
- * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateArray('2'))  // ↦ TypeError
  * console.log(validateArray([]))  // ↦ undefined
  * </script>
@@ -3019,7 +3398,7 @@ function validateArray(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateFunction(()=>{})) // ↦ undefined
  * console.log(Monster.Types.validateFunction('2')) // ↦ TypeError
  * console.log(Monster.Types.validateFunction([])) // ↦ TypeError
@@ -3030,7 +3409,7 @@ function validateArray(value) {
  *
  * ```
  * <script type="module">
- * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateFunction(()=>{})) // ↦ undefined
  * console.log(validateFunction('2'))  // ↦ TypeError
  * console.log(validateFunction([]))  // ↦ TypeError
@@ -3051,10 +3430,49 @@ function validateFunction(value) {
     throw new TypeError('value is not a function');
   }
 }
+/**
+ * this method checks if the type is an integer. this function is identical to isInteger() except that a TypeError is thrown.
+ *
+ * you can call the method via the monster namespace `Monster.Types.validateInteger()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+ * console.log(Monster.Types.validateInteger(true)) // ↦ TypeError
+ * console.log(Monster.Types.validateInteger('2')) // ↦ TypeError
+ * console.log(Monster.Types.validateInteger(2)) // ↦ undefined
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+ * console.log(validateInteger(true)) // ↦ TypeError
+ * console.log(validateInteger('2'))  // ↦ TypeError
+ * console.log(validateInteger(2))  // ↦ undefined
+ * </script>
+ * ```
+ *
+ * @param {*} value
+ * @return {undefined}
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ * @throws {TypeError} value is not an integer
+ */
+
+
+function validateInteger(value) {
+  if (!(0, _is.isInteger)(value)) {
+    throw new TypeError('value is not an integer');
+  }
+}
 
-_namespace.Monster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable);
+_namespace.Monster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable, validateInteger);
 
-},{"../namespace.js":11,"../types/is.js":13}],20:[function(require,module,exports){
+},{"../namespace.js":11,"../types/is.js":13}],22:[function(require,module,exports){
 'use strict';
 
 function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
@@ -3102,7 +3520,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(new Monster.Types.Version('1.2.3')) // ↦ 1.2.3
  * console.log(new Monster.Types.Version('1')) // ↦ 1.0.0
  * </script>
@@ -3112,7 +3530,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(new Version('1.2.3')) // ↦ 1.2.3
  * console.log(new Version('1')) // ↦ 1.0.0
  * </script>
@@ -3255,7 +3673,7 @@ var monsterVersion;
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(Monster.getVersion())
  * console.log(Monster.getVersion())
  * </script>
@@ -3265,7 +3683,7 @@ var monsterVersion;
  *
  * ```
  * <script type="module">
- * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(getVersion())
  * console.log(getVersion())
  * </script>
@@ -3285,7 +3703,7 @@ function getVersion() {
   /**#@+ dont touch, replaced by make with package.json version */
 
 
-  monsterVersion = new Version('1.3.0');
+  monsterVersion = new Version('1.4.0');
   /**#@-*/
 
   return monsterVersion;
@@ -3293,7 +3711,7 @@ function getVersion() {
 
 _namespace.Monster.assignToNamespace('Monster', getVersion);
 
-},{"../namespace.js":11,"../types/object.js":14}],21:[function(require,module,exports){
+},{"../namespace.js":11,"../types/object.js":14}],23:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -3329,7 +3747,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
  * console.log(Monster.Util.clone({}))
  * </script>
  * ```
@@ -3338,7 +3756,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
  *
  * ```
  * <script type="module">
- * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';
+ * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
  * console.log(clone({}))
  * </script>
  * ```
@@ -3454,7 +3872,7 @@ function cloneObject(obj) {
 
 _namespace.Monster.assignToNamespace('Monster.Util', clone);
 
-},{"../namespace.js":11,"../types/is.js":13}],22:[function(require,module,exports){
+},{"../namespace.js":11,"../types/is.js":13}],24:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -3502,7 +3920,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Monster.Util.Comparator())
  * console.log(new Monster.Util.Comparator())
  * </script>
@@ -3512,7 +3930,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
+ * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Util())
  * console.log(new Util())
  * </script>
@@ -3676,7 +4094,7 @@ exports.Comparator = Comparator;
 
 _object.Monster.assignToNamespace('Monster.Util', Comparator);
 
-},{"../types/is.js":13,"../types/object.js":14}],23:[function(require,module,exports){
+},{"../types/is.js":13,"../types/object.js":14}],25:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -3712,7 +4130,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';
  * console.log(Monster.Util.deepFreeze({})) 
  * </script>
  * ```
@@ -3721,7 +4139,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
  *
  * ```
  * <script type="module">
- * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';
+ * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';
  * console.log(deepFreeze({}))  
  * </script>
  * ```
@@ -3758,5 +4176,5 @@ function deepFreeze(object) {
 
 _namespace.Monster.assignToNamespace('Monster.Util', deepFreeze);
 
-},{"../namespace.js":11,"../types/validate.js":19}]},{},[10])
+},{"../namespace.js":11,"../types/validate.js":21}]},{},[10])
 //# sourceMappingURL=monster.dev.js.map
diff --git a/packages/monster/dist/monster.dev.js.map b/packages/monster/dist/monster.dev.js.map
index 42f6229989e0b833816951d632c1383ba977143e..3db8b9bdc1b2a978cfcfd96e429efe636f85ed24 100644
--- a/packages/monster/dist/monster.dev.js.map
+++ b/packages/monster/dist/monster.dev.js.map
@@ -19,7 +19,9 @@
     "packages/monster/source/types/observer.js",
     "packages/monster/source/types/observerlist.js",
     "packages/monster/source/types/proxyobserver.js",
+    "packages/monster/source/types/queue.js",
     "packages/monster/source/types/tokenlist.js",
+    "packages/monster/source/types/uniquequeue.js",
     "packages/monster/source/types/validate.js",
     "packages/monster/source/types/version.js",
     "packages/monster/source/util/clone.js",
@@ -27,33 +29,35 @@
     "packages/monster/source/util/freeze.js"
   ],
   "names": [],
-  "mappings": "AAAA;ACAA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,kB;;;;;AAEF;AACJ;AACA;AACI,gCAAc;AAAA;;AAAA;AAEb;AAED;AACJ;AACA;AACA;AACA;AACA;;;;;WACI,iBAAQ,KAAR,EAAe;AACX,aAAO,OAAO,CAAC,MAAR,CAAe,KAAf,CAAP;AACH;;;;EAjB4B,M;;;;AAoBjC,mBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,kBAAjD;;;ACvCA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,gB;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,4BAAY,QAAZ,EAAsB,QAAtB,EAAgC;AAAA;;AAAA;;AAC5B;;AAEA,QAAI,EAAE,QAAQ,YAAY,4BAAtB,KAA6C,EAAE,QAAQ,YAAY,4BAAtB,CAAjD,EAA4F;AACxF,YAAM,IAAI,SAAJ,CAAc,iDAAd,CAAN;AACH;;AAED,UAAK,QAAL,GAAgB,QAAhB;AACA,UAAK,QAAL,GAAgB,QAAhB;AAR4B;AAU/B;;;EAlB0B,4B;;;;AAuB/B,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,gBAAjD;;;ACtCA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,W;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,aAAO,OAAO,CAAC,GAAR,CAAY,CAAC,KAAK,QAAL,CAAc,OAAd,CAAsB,KAAtB,CAAD,EAA+B,KAAK,QAAL,CAAc,OAAd,CAAsB,KAAtB,CAA/B,CAAZ,CAAP;AACH;;;;EAVqB,kC;;;;AAc1B,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,WAAjD;;;AC/CA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,O;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,aAAO,OAAO,CAAC,MAAR,CAAe,KAAf,CAAP;AACH;;;;EAViB,4B;;;;AActB,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,OAAjD;;;AC/CA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,O;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,UAAG,iBAAQ,KAAR,CAAH,EAAmB;AACf,eAAO,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAP;AACH;;AAED,aAAO,OAAO,CAAC,MAAR,CAAe,KAAf,CAAP;AACH;;;;EAdiB,4B;;;;AAkBtB,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,OAAjD;;;ACpDA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,Q;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,eAAO,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAP;AACH;;AAED,aAAO,OAAO,CAAC,MAAR,CAAe,KAAf,CAAP;AACH;;;;EAdkB,4B;;;;AAkBvB,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,QAAjD;;;ACpDA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,U;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,UAAI,IAAI,GAAG,IAAX;AAEA,aAAO,IAAI,OAAJ,CAAY,UAAU,OAAV,EAAmB,MAAnB,EAA2B;AAC1C,YAAI,CAAJ,EAAO,CAAP;AAEA,QAAA,IAAI,CAAC,QAAL,CAAc,OAAd,CAAsB,KAAtB,EACK,IADL,CACU,YAAY;AACd,UAAA,OAAO;AACV,SAHL,WAGa,YAAY;AACrB,UAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAI,CAAC,KAAK,KAAV,EAAiB;AACb,YAAA,MAAM;AACT;AACJ,SATD;AAWA,QAAA,IAAI,CAAC,QAAL,CAAc,OAAd,CAAsB,KAAtB,EACK,IADL,CACU,YAAY;AACd,UAAA,OAAO;AACV,SAHL,WAGa,YAAY;AACrB,UAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAI,CAAC,KAAK,KAAV,EAAiB;AACb,YAAA,MAAM;AACT;AACJ,SATD;AAUH,OAxBM,CAAP;AAyBH;;;;EApCoB,kC;;;;AAyCzB,0BAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,UAAjD;;;ACzEA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,K;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,aAAO,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAP;AACH;;;;EAVe,4B;;;;AAcpB,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,KAAjD;;;;AC/CA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAT,CAAgB,GAAhB,EAAqB,GAArB,EAA0B;AAEtB,MAAI,GAAG,KAAK,SAAZ,EAAuB;AACnB,IAAA,GAAG,GAAG,CAAN;AACH;;AACD,MAAI,GAAG,KAAK,SAAZ,EAAuB;AACnB,IAAA,GAAG,GAAG,GAAN;AACH;;AAED,MAAI,GAAG,GAAG,GAAV,EAAe;AACX,UAAM,IAAI,KAAJ,CAAU,8BAAV,CAAN;AACH;;AAED,SAAO,IAAI,CAAC,KAAL,CAAW,MAAM,CAAC,GAAD,EAAM,GAAN,CAAjB,CAAP;AAEH;;AAED,IAAI,GAAG,GAAG,UAAV;;AAEA,IAAI,CAAC,IAAL,GAAY,IAAI,CAAC,IAAL,IAAa,UAAU,CAAV,EAAa;AAClC,SAAO,IAAI,CAAC,GAAL,CAAS,CAAT,IAAc,IAAI,CAAC,GAAL,CAAS,CAAT,CAArB;AACH,CAFD;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,MAAT,CAAgB,GAAhB,EAAqB,GAArB,EAA0B;AACtB,MAAI,KAAJ;;AAEA,MAAI,OAAO,MAAP,KAAkB,WAAtB,EAAmC;AAAA;;AAC/B,IAAA,KAAK,GAAG,YAAA,MAAM,UAAN,0CAAS,QAAT,mBAAsB,MAAtB,6CAAsB,SAAS,UAAT,CAAtB,CAAR;AACH,GAFD,MAEO;AACH,IAAA,KAAK,GAAG,OAAO,MAAP,KAAkB,WAAlB,GAAgC,MAAhC,GAAyC,SAAjD;AACH;;AAED,MAAI,OAAO,KAAP,KAAiB,WAArB,EAAkC;AAC9B,UAAM,IAAI,KAAJ,CAAU,eAAV,CAAN;AACH;;AAED,MAAI,IAAI,GAAG,CAAX;AACA,MAAM,KAAK,GAAG,GAAG,GAAG,GAApB;;AACA,MAAI,KAAK,GAAG,CAAZ,EAAe;AACX,WAAO,GAAP;AACH;;AAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAL,CAAU,IAAI,CAAC,IAAL,CAAU,KAAV,CAAV,CAAnB;;AACA,MAAI,UAAU,GAAG,EAAjB,EAAqB;AACjB,UAAO,IAAI,KAAJ,CAAU,iDAAV,CAAP;AACH;;AACD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAL,CAAU,UAAU,GAAG,CAAvB,CAApB;AACA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,UAAZ,IAA0B,CAAvC;AAEA,MAAM,SAAS,GAAG,IAAI,UAAJ,CAAe,WAAf,CAAlB;AACA,EAAA,KAAK,CAAC,eAAN,CAAsB,SAAtB;AAEA,MAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAf,IAAoB,CAA5B;;AACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,WAApB,EAAiC,CAAC,EAAlC,EAAsC;AAClC,IAAA,IAAI,IAAI,SAAS,CAAC,CAAD,CAAT,GAAe,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAvB;AACA,IAAA,CAAC,IAAI,CAAL;AACH;;AAED,EAAA,IAAI,GAAG,IAAI,GAAG,IAAd;;AAEA,MAAI,IAAI,IAAI,KAAZ,EAAmB;AACf,WAAO,MAAM,CAAC,GAAD,EAAM,GAAN,CAAb;AACH;;AAED,SAAO,GAAG,GAAG,IAAb;AAEH;;AAED,mBAAQ,iBAAR,CAA0B,cAA1B,EAA0C,MAA1C;;;;;ACjHA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,mBAAQ,IAAR,CAAa,UAAb,CAAwB,kBAAxB;;;ACjCA;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;IACM,S;AAEF;AACJ;AACA;AACA;AACA;AACI,qBAAY,SAAZ,EAAuB;AAAA;;AACnB,QAAI,SAAS,KAAK,SAAd,IAA2B,OAAO,SAAP,KAAqB,QAApD,EAA8D;AAC1D,YAAM,IAAI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AACD,SAAK,SAAL,GAAiB,SAAjB;AACH;AAED;AACJ;AACA;AACA;;;;;WACI,wBAAe;AACX,aAAO,KAAK,SAAZ;AACH;AAED;AACJ;AACA;AACA;;;;WACI,oBAAW;AACP,aAAO,KAAK,YAAL,EAAP;AACH;;;;;AAGL;AACA;AACA;AACA;AACA;;;AACO,IAAM,OAAO,GAAG,IAAI,SAAJ,CAAc,SAAd,CAAhB;AAGP;AACA;AACA;;;AACA,iBAAiB,CAAC,SAAD,EAAY,iBAAZ,CAAjB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAAS,iBAAT,CAA2B,EAA3B,EAAuC;AACnC,MAAI,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,KAAH,CAAS,GAAT,CAAD,CAA1B;;AAEA,OAAK,IAAI,CAAC,GAAG,CAAR,EAAW,CAAC,mDAAjB,EAAgC,CAAC,GAAG,CAApC,EAAuC,CAAC,EAAxC,EAA4C;AACxC,IAAA,OAAO,CAAC,UAAU,CAAK,CAAL,gCAAK,CAAL,6BAAK,CAAL,MAAX,CAAP,GAAkC,CAAlC,gCAAkC,CAAlC,6BAAkC,CAAlC;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,UAAT,CAAoB,EAApB,EAAwB;AACpB,MAAI;AAEA,QAAI,OAAO,EAAP,KAAc,UAAlB,EAA8B;AAC1B,YAAO,IAAI,KAAJ,CAAU,gDAAV,CAAP;AACH;;AAED,QAAI,EAAE,CAAC,cAAH,CAAkB,MAAlB,CAAJ,EAA+B;AAC3B,aAAO,EAAE,CAAC,IAAV;AACH;;AAED,QAAI,eAAe,OAAO,EAAE,CAAC,QAA7B,EAAuC;AACnC,UAAI,CAAC,GAAG,EAAE,CAAC,QAAH,EAAR;AACA,UAAI,CAAC,GAAG,CAAC,CAAC,KAAF,CAAQ,0BAAR,CAAR;;AACA,UAAI,KAAK,CAAC,OAAN,CAAc,CAAd,KAAoB,OAAO,CAAC,CAAC,CAAD,CAAR,KAAgB,QAAxC,EAAkD;AAC9C,eAAO,CAAC,CAAC,CAAD,CAAR;AACH;;AACD,UAAI,CAAC,GAAG,CAAC,CAAC,KAAF,CAAQ,uBAAR,CAAR;;AACA,UAAI,KAAK,CAAC,OAAN,CAAc,CAAd,KAAoB,OAAO,CAAC,CAAC,CAAD,CAAR,KAAgB,QAAxC,EAAkD;AAC9C,eAAO,CAAC,CAAC,CAAD,CAAR;AACH;AACJ;AAEJ,GAtBD,CAsBE,OAAO,CAAP,EAAU;AACR,UAAM,IAAI,KAAJ,CAAU,eAAe,CAAzB,CAAN;AACH;;AAED,QAAO,IAAI,KAAJ,CAAU,uDAAV,CAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,YAAT,CAAsB,KAAtB,EAA6B;AACzB,MAAI,KAAK,GAAG,OAAZ;AAAA,MAAqB,EAAE,GAAG,SAA1B;;AAEA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,KAAK,CAAC,MAA1B,EAAkC,CAAC,EAAnC,EAAuC;AAEnC,QAAI,cAAc,KAAK,CAAC,CAAD,CAAvB,EAA4B;AACxB;AACH;;AAED,IAAA,EAAE,IAAI,MAAM,KAAK,CAAC,CAAD,CAAjB;;AAEA,QAAI,CAAC,KAAK,CAAC,cAAN,CAAqB,KAAK,CAAC,CAAD,CAA1B,CAAL,EAAqC;AACjC,MAAA,KAAK,CAAC,KAAK,CAAC,CAAD,CAAN,CAAL,GAAkB,IAAI,SAAJ,CAAc,EAAd,CAAlB;AACH;;AAED,IAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAD,CAAN,CAAb;AACH;;AAED,SAAO,KAAP;AACH;;;;AC7JD;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAI,eAAe,GAAG,CAAtB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM,E;;;;;AAEF;AACJ;AACA;AACI,gBAAc;AAAA;;AAAA;;AACV;AAEA,IAAA,eAAe,IAAI,CAAnB;AAEA,UAAK,EAAL,GAAU,MAAM,CAAC,IAAP,CAAY,oBAAO,CAAP,EAAU,KAAV,CAAZ,EACL,OADK,CACG,IADH,EACS,EADT;AAEN;AAFM,KAGL,OAHK,CAGG,SAHH,EAGc,GAHd,IAGqB,eAH/B;AALU;AASb;;;;WAED,oBAAW;AACP,aAAO,KAAK,EAAZ;AACH;;;;EAlBY,mBAAQ,KAAR,CAAc,M;;;;AAsB/B,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,EAA3C;;;;;AC7DA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;AAEA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAT,CAAoB,KAApB,EAA2B;AACvB,MAAI,KAAK,KAAK,SAAd,EAAyB,OAAO,KAAP;AACzB,MAAI,KAAK,KAAK,IAAd,EAAoB,OAAO,KAAP;AACpB,SAAO,QAAO,KAAP,aAAO,KAAP,uBAAO,KAAK,CAAG,MAAM,CAAC,QAAV,CAAZ,MAAoC,UAA3C;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,WAAT,CAAqB,KAArB,EAA4B;AACxB,MAAI,IAAJ;;AAEA,MAAI,KAAK,KAAK,SAAV,IAAuB,KAAK,KAAK,IAAjC,IAAyC,KAAK,KAAK,GAAvD,EAA4D;AACxD,WAAO,IAAP;AACH;;AAED,EAAA,IAAI,WAAU,KAAV,CAAJ;;AAEA,MAAI,IAAI,KAAK,QAAT,IAAqB,IAAI,KAAK,QAA9B,IAA0C,IAAI,KAAK,SAAnD,IAAgE,IAAI,KAAK,QAA7E,EAAuF;AACnF,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,SAAT,CAAmB,KAAnB,EAA0B;AAEtB,MAAI,KAAK,KAAK,IAAV,IAAkB,KAAK,KAAK,KAAhC,EAAuC;AACnC,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,QAAT,CAAkB,KAAlB,EAAyB;AACrB,MAAI,KAAK,KAAK,SAAV,IAAuB,OAAO,KAAP,KAAiB,QAA5C,EAAsD;AAClD,WAAO,KAAP;AACH;;AACD,SAAO,IAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,QAAT,CAAkB,KAAlB,EAAyB;AAErB,MAAI,OAAO,CAAC,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAI,WAAW,CAAC,KAAD,CAAf,EAAwB,OAAO,KAAP;;AAExB,MAAI,QAAO,KAAP,MAAiB,QAArB,EAA+B;AAC3B,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,OAAT,CAAiB,KAAjB,EAAwB;AACpB,MAAI,KAAK,CAAC,OAAN,CAAc,KAAd,CAAJ,EAA0B;AACtB,WAAO,IAAP;AACH;;AACD,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,UAAT,CAAoB,KAApB,EAA2B;AACvB,MAAI,OAAO,CAAC,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAI,WAAW,CAAC,KAAD,CAAf,EAAwB,OAAO,KAAP;;AAExB,MAAI,OAAO,KAAP,KAAiB,UAArB,EAAiC;AAC7B,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AAEH;;AAED,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,WAA3C,EAAwD,SAAxD,EAAmE,QAAnE,EAA6E,QAA7E,EAAuF,OAAvF,EAAgG,UAAhG,EAA4G,UAA5G;;;AChSA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,O;AAEF;AACJ;AACA;AACI,oBAAc;AAAA;AACb;AAED;AACJ;AACA;AACA;;;;;WACI,oBAAW;AACP,aAAO,IAAI,CAAC,SAAL,CAAe,IAAf,CAAP;AACH;;;;;;;;AAKL,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,OAA3C;;;ACvDA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,Q;;;;;AAEF;AACJ;AACA;AACA;AACA;AACI,oBAAY,QAAZ,EAA+B;AAAA;;AAAA;;AAC3B;;AAEA,QAAI,OAAO,QAAP,KAAoB,UAAxB,EAAoC;AAChC,YAAM,IAAI,KAAJ,CAAU,sCAAV,CAAN;AACH;;AAED,UAAK,QAAL,GAAgB,QAAhB;;AAP2B,sCAAN,IAAM;AAAN,MAAA,IAAM;AAAA;;AAQ3B,UAAK,SAAL,GAAiB,IAAjB;AACA,UAAK,IAAL,GAAY,IAAI,oBAAJ,EAAZ;AAT2B;AAU9B;AAED;AACJ;AACA;AACA;AACA;;;;;WACI,gBAAO,GAAP,EAAY;AACR,WAAK,IAAL,CAAU,GAAV,CAAc,GAAd;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,mBAAU,GAAV,EAAe;AACX,WAAK,IAAL,CAAU,MAAV,CAAiB,GAAjB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;;;;WACI,mBAAU;AACN,aAAO,KAAK,IAAL,CAAU,OAAV,EAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,gBAAO,GAAP,EAAY;AACR,aAAO,KAAK,IAAL,CAAU,QAAV,CAAmB,GAAnB,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,gBAAO,OAAP,EAAgB;AACZ,UAAI,IAAI,GAAG,IAAX;AAEA,aAAO,IAAI,OAAJ,CAAY,UAAU,OAAV,EAAmB,MAAnB,EAA2B;AAC1C,YAAI,CAAC,kBAAS,OAAT,CAAL,EAAwB;AACpB,UAAA,MAAM,CAAC,2BAAD,CAAN;AACH;;AACD,YAAI,MAAM,GAAG,IAAI,CAAC,QAAL,CAAc,KAAd,CAAoB,OAApB,EAA6B,IAAI,CAAC,SAAlC,CAAb;AACA,QAAA,OAAO,CAAC,MAAD,CAAP;AAEH,OAPM,CAAP;AASH;;;;EAzEkB,mBAAQ,KAAR,CAAc,M;;;;AA6ErC,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,QAA3C;;;AC7IA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,Y;;;;;AAEF,0BAAc;AAAA;;AAAA;;AACV;AACA,UAAK,SAAL,GAAiB,EAAjB;AAFU;AAGb;;;;WAED,gBAAO,QAAP,EAAiB;AACb,MAAA,eAAe,CAAC,QAAD,CAAf;AACA,WAAK,SAAL,CAAe,IAAf,CAAoB,QAApB;AACA,aAAO,IAAP;AACH;;;WAED,gBAAO,QAAP,EAAiB;AACb,MAAA,eAAe,CAAC,QAAD,CAAf;AACA,UAAI,CAAC,GAAG,CAAR;AAAA,UAAW,CAAC,GAAG,KAAK,SAAL,CAAe,MAA9B;;AACA,aAAO,CAAC,GAAG,CAAX,EAAc,CAAC,EAAf,EAAmB;AACf,YAAI,KAAK,SAAL,CAAe,CAAf,MAAsB,QAA1B,EAAoC;AAChC,eAAK,SAAL,CAAe,MAAf,CAAsB,CAAtB,EAAyB,CAAzB;AACH;AACJ;;AAED,aAAO,IAAP;AACH;;;WAED,kBAAS,QAAT,EAAmB;AACf,MAAA,eAAe,CAAC,QAAD,CAAf;AACA,UAAI,CAAC,GAAG,CAAR;AAAA,UAAW,CAAC,GAAG,KAAK,SAAL,CAAe,MAA9B;;AACA,aAAO,CAAC,GAAG,CAAX,EAAc,CAAC,EAAf,EAAmB;AACf,YAAI,KAAK,SAAL,CAAe,CAAf,MAAsB,QAA1B,EAAoC;AAChC,iBAAO,IAAP;AACH;AACJ;;AACD,aAAO,KAAP;AACH;;;WAED,gBAAO,OAAP,EAAgB;AAEZ,UAAI,OAAO,GAAG,EAAd;AAEA,UAAI,CAAC,GAAG,CAAR;AAAA,UAAW,CAAC,GAAG,KAAK,SAAL,CAAe,MAA9B;;AACA,aAAO,CAAC,GAAG,CAAX,EAAc,CAAC,EAAf,EAAmB;AACf,QAAA,OAAO,CAAC,IAAR,CAAa,KAAK,SAAL,CAAe,CAAf,EAAkB,MAAlB,CAAyB,OAAzB,CAAb;AACH;;AAED,aAAO,OAAO,CAAC,GAAR,CAAY,OAAZ,CAAP;AACH;;;;EA9CsB,mBAAQ,KAAR,CAAc,M;AAkDzC;AACA;AACA;AACA;AACA;AACA;;;;;AACA,SAAS,eAAT,CAAyB,QAAzB,EAAmC;AAC/B,MAAI,EAAE,QAAQ,YAAY,mBAAQ,KAAR,CAAc,QAApC,CAAJ,EAAmD;AAC/C,UAAM,IAAI,KAAJ,CAAU,uCAAV,CAAN;AACH;;AACD,SAAO,IAAP;AACH;;AAED,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,YAA3C;;;ACnGA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG,IAAI,OAAJ,EAAf,C,CAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM,a;;;;;AAEF;AACJ;AACA;AACA;AACI,yBAAY,MAAZ,EAAoB;AAAA;;AAAA;;AAChB;AACA,kCAAe,MAAf;AACA,UAAK,WAAL,GAAmB,MAAnB;AACA,UAAK,OAAL,GAAe,IAAI,KAAJ,CAAU,MAAV,EAAkB,UAAU,CAAC,IAAX,+BAAlB,CAAf;AACA,IAAA,QAAQ,CAAC,GAAT,CAAa,MAAK,OAAlB;AACA,UAAK,SAAL,GAAiB,IAAI,0BAAJ,EAAjB;AANgB;AAOnB;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;;WACI,sBAAa;AACT,aAAO,KAAK,OAAZ;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WAAW,0BAAiB;AACpB,aAAO,KAAK,WAAZ;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,wBAAe,QAAf,EAAyB;AACrB,WAAK,SAAL,CAAe,MAAf,CAAsB,QAAtB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,wBAAe,QAAf,EAAyB;AACrB,WAAK,SAAL,CAAe,MAAf,CAAsB,QAAtB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,2BAAkB;AACd,WAAK,SAAL,CAAe,MAAf,CAAsB,IAAtB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;;;;WACI,0BAAiB,QAAjB,EAA2B;AACvB,aAAO,KAAK,SAAL,CAAe,QAAf,CAAwB,QAAxB,CAAP;AACH;;;;EAxEuB,M;;;;AA4E5B,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,aAA3C;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAT,GAAsB;AAElB,MAAM,KAAK,GAAG,IAAd,CAFkB,CAIlB;;AACA,MAAM,OAAO,GAAG;AAEZ;AACA,IAAA,GAAG,EAAE,aAAU,MAAV,EAAkB,QAAlB,EAA4B,QAA5B,EAAsC;AACvC,UAAM,IAAI,GAAG,MAAH,aAAG,MAAH,uBAAG,MAAM,CAAG,QAAH,CAAnB,CADuC,CAGvC;;AACA,UAAI,IAAI,KAAK,SAAb,EAAwB;AACpB,eAAO,SAAP;AACH,OANsC,CAQvC;;;AACA,UAAI,iBAAQ,IAAR,KAAiB,kBAAS,IAAT,KAAkB,CAAC,QAAQ,CAAC,GAAT,CAAa,IAAb,CAAxC,EAA4D;AACxD,QAAA,MAAM,CAAC,QAAD,CAAN,GAAmB,IAAI,KAAJ,CAAU,IAAV,EAAgB,OAAhB,CAAnB;AACA,QAAA,QAAQ,CAAC,GAAT,CAAa,IAAb;AACH;;AAED,aAAO,MAAM,CAAC,QAAD,CAAb;AAEH,KAnBW;AAqBZ;AACA,IAAA,GAAG,EAAE,aAAU,MAAV,EAAkB,QAAlB,EAA4B,KAA5B,EAAmC,QAAnC,EAA6C;AAC9C,MAAA,MAAM,CAAC,QAAD,CAAN,GAAmB,KAAnB;AACA,MAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,KAAvB;AACA,aAAO,IAAP;AACH,KA1BW;AA4BZ;AACA,IAAA,cAAc,EAAE,wBAAU,MAAV,EAAkB,QAAlB,EAA4B;AACxC,UAAI,QAAQ,IAAI,MAAhB,EAAwB;AACpB,eAAO,MAAM,CAAC,QAAD,CAAb;AACA,QAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,KAAvB;AACA,eAAO,IAAP;AACH;;AACD,aAAO,KAAP;AACH,KApCW;AAsCZ;AACA,IAAA,cAAc,EAAE,wBAAU,MAAV,EAAkB,QAAlB,EAA4B,UAA5B,EAAwC;AACpD,UAAI,MAAM,GAAG,OAAO,CAAC,cAAR,CAAuB,MAAvB,EAA+B,QAA/B,EAAyC,UAAzC,CAAb;AACA,MAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,KAAvB;AACA,aAAO,4BAA4B,EAAnC;AACH,KA3CW;AA6CZ;AACA,IAAA,cAAc,EAAE,wBAAU,MAAV,EAAkB,SAAlB,EAA6B;AACzC,UAAI,MAAM,GAAG,OAAO,CAAC,cAAR,CAAuB,OAAvB,EAAgC,SAAhC,CAAb;AACA,MAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,KAAvB;AACA,aAAO,MAAP;AACH;AAlDW,GAAhB;AAuDA,SAAO,OAAP;AACH;;;AC3ND;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,S;;;;;AAEF;AACJ;AACA;AACA;AACI,qBAAY,IAAZ,EAAkB;AAAA;;AAAA;;AACd;AACA,UAAK,MAAL,GAAc,IAAI,GAAJ,EAAd;;AAEA,QAAI,OAAO,IAAP,KAAgB,WAApB,EAAiC;AAC7B,YAAK,GAAL,CAAS,IAAT;AACH;;AANa;AAQjB;AAED;AACJ;AACA;AACA;AACA;;;;;WACI,uBAAc;AACV,aAAO,KAAK,MAAM,CAAC,QAAZ,GAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;SACK,MAAM,CAAC,Q;WAAR,iBAAoB;AAChB;AACA;AACA;AACA,UAAI,KAAK,GAAG,CAAZ;AACA,UAAI,OAAO,GAAG,KAAK,OAAL,EAAd;AAEA,aAAO;AACH,QAAA,IAAI,EAAE,gBAAM;AACR,cAAI,KAAK,GAAG,OAAO,CAAC,MAApB,EAA4B;AACxB,mBAAO;AAAC,cAAA,KAAK,EAAE,OAAF,aAAE,OAAF,uBAAE,OAAO,CAAG,KAAK,EAAR,CAAf;AAA4B,cAAA,IAAI,EAAE;AAAlC,aAAP;AACH,WAFD,MAEO;AACH,mBAAO;AAAC,cAAA,IAAI,EAAE;AAAP,aAAP;AACH;AACJ;AAPE,OAAP;AASH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,kBAAS,KAAT,EAAgB;AAAA;;AACZ,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,QAAA,KAAK,GAAG,KAAK,CAAC,IAAN,EAAR;AACA,YAAI,OAAO,GAAG,CAAd;AACA,QAAA,KAAK,CAAC,KAAN,CAAY,GAAZ,EAAiB,OAAjB,CAAyB,UAAA,KAAK,EAAI;AAC9B,cAAI,MAAI,CAAC,MAAL,CAAY,GAAZ,CAAgB,KAAK,CAAC,IAAN,EAAhB,MAAkC,KAAtC,EAA6C,OAAO,KAAP;AAC7C,UAAA,OAAO;AACV,SAHD;AAIA,eAAO,OAAO,GAAG,CAAV,GAAc,IAAd,GAAqB,KAA5B;AACH;;AAED,UAAI,oBAAW,KAAX,CAAJ,EAAuB;AACnB,YAAI,QAAO,GAAG,CAAd;;AADmB,mDAED,KAFC;AAAA;;AAAA;AAEnB,8DAAyB;AAAA,gBAAhB,KAAgB;AACrB,0CAAe,KAAf;AACA,gBAAI,KAAK,MAAL,CAAY,GAAZ,CAAgB,KAAK,CAAC,IAAN,EAAhB,MAAkC,KAAtC,EAA6C,OAAO,KAAP;AAC7C,YAAA,QAAO;AACV;AANkB;AAAA;AAAA;AAAA;AAAA;;AAOnB,eAAO,QAAO,GAAG,CAAV,GAAc,IAAd,GAAqB,KAA5B;AACH;;AAED,aAAO,KAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,aAAI,KAAJ,EAAW;AAAA;;AACP,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,QAAA,KAAK,CAAC,KAAN,CAAY,GAAZ,EAAiB,OAAjB,CAAyB,UAAA,KAAK,EAAI;AAC9B,UAAA,MAAI,CAAC,MAAL,CAAY,GAAZ,CAAgB,KAAK,CAAC,IAAN,EAAhB;AACH,SAFD;AAGH,OAJD,MAIO,IAAI,oBAAW,KAAX,CAAJ,EAAuB;AAAA,oDACR,KADQ;AAAA;;AAAA;AAC1B,iEAAyB;AAAA,gBAAhB,KAAgB;AACrB,0CAAe,KAAf;AACA,iBAAK,MAAL,CAAY,GAAZ,CAAgB,KAAK,CAAC,IAAN,EAAhB;AACH;AAJyB;AAAA;AAAA;AAAA;AAAA;AAK7B,OALM,MAKA,IAAI,OAAO,KAAP,KAAiB,WAArB,EAAkC;AACrC,cAAM,IAAI,SAAJ,CAAc,mBAAd,CAAN;AACH;;AAED,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iBAAQ;AACJ,WAAK,MAAL,CAAY,KAAZ;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,gBAAO,KAAP,EAAc;AAAA;;AACV,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,QAAA,KAAK,CAAC,KAAN,CAAY,GAAZ,EAAiB,OAAjB,CAAyB,UAAA,KAAK,EAAI;AAC9B,UAAA,MAAI,CAAC,MAAL,WAAmB,KAAK,CAAC,IAAN,EAAnB;AACH,SAFD;AAGH,OAJD,MAIO,IAAI,oBAAW,KAAX,CAAJ,EAAuB;AAAA,oDACR,KADQ;AAAA;;AAAA;AAC1B,iEAAyB;AAAA,gBAAhB,KAAgB;AACrB,0CAAe,KAAf;AACA,iBAAK,MAAL,WAAmB,KAAK,CAAC,IAAN,EAAnB;AACH;AAJyB;AAAA;AAAA;AAAA;AAAA;AAK7B,OALM,MAKA,IAAI,OAAO,KAAP,KAAiB,WAArB,EAAkC;AACrC,cAAM,IAAI,SAAJ,CAAc,mBAAd,CAAN;AACH;;AAED,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,iBAAQ,KAAR,EAAe,QAAf,EAAyB;AACrB,oCAAe,KAAf;AACA,oCAAe,QAAf;;AACA,UAAI,CAAC,KAAK,QAAL,CAAc,KAAd,CAAL,EAA2B;AACvB,eAAO,IAAP;AACH;;AAED,UAAI,CAAC,GAAG,KAAK,CAAC,IAAN,CAAW,KAAK,MAAhB,CAAR;AACA,UAAI,CAAC,GAAG,CAAC,CAAC,OAAF,CAAU,KAAV,CAAR;AACA,UAAI,CAAC,KAAK,CAAC,CAAX,EAAc,OAAO,IAAP;AAEd,MAAA,CAAC,CAAC,MAAF,CAAS,CAAT,EAAY,CAAZ,EAAe,QAAf;AACA,WAAK,MAAL,GAAc,IAAI,GAAJ,EAAd;AACA,WAAK,GAAL,CAAS,CAAT;AAEA,aAAO,IAAP;AAGH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,gBAAO,KAAP,EAAc;AAAA;;AAEV,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,QAAA,KAAK,CAAC,KAAN,CAAY,GAAZ,EAAiB,OAAjB,CAAyB,UAAA,KAAK,EAAI;AAC9B,UAAA,WAAW,CAAC,IAAZ,CAAiB,MAAjB,EAAuB,KAAvB;AACH,SAFD;AAGH,OAJD,MAIO,IAAI,oBAAW,KAAX,CAAJ,EAAuB;AAAA,oDACR,KADQ;AAAA;;AAAA;AAC1B,iEAAyB;AAAA,gBAAhB,KAAgB;AACrB,YAAA,WAAW,CAAC,IAAZ,CAAiB,IAAjB,EAAuB,KAAvB;AACH;AAHyB;AAAA;AAAA;AAAA;AAAA;AAI7B,OAJM,MAIA,IAAI,OAAO,KAAP,KAAiB,WAArB,EAAkC;AACrC,cAAM,IAAI,SAAJ,CAAc,mBAAd,CAAN;AACH;;AAED,aAAO,IAAP;AAEH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,mBAAU;AACN,aAAO,KAAK,CAAC,IAAN,CAAW,KAAK,MAAhB,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,iBAAQ,QAAR,EAAkB;AACd,sCAAiB,QAAjB;AACA,WAAK,MAAL,CAAY,OAAZ,CAAoB,QAApB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,oBAAW;AACP,aAAO,KAAK,OAAL,GAAe,IAAf,CAAoB,GAApB,CAAP;AACH;;;;EArPmB,M;AAyPxB;AACA;AACA;AACA;AACA;AACA;;;;;AACA,SAAS,WAAT,CAAqB,KAArB,EAA4B;AACxB,MAAI,EAAE,gBAAgB,SAAlB,CAAJ,EAAkC,MAAM,KAAK,CAAC,oCAAD,CAAX;AAClC,gCAAe,KAAf;AACA,EAAA,KAAK,GAAG,KAAK,CAAC,IAAN,EAAR;;AACA,MAAI,KAAK,QAAL,CAAc,KAAd,CAAJ,EAA0B;AACtB,SAAK,MAAL,CAAY,KAAZ;AACA,WAAO,IAAP;AACH;;AACD,OAAK,GAAL,CAAS,KAAT;AACA,SAAO,IAAP;AACH;;AAED,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,SAA3C;;;AC1TA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAT,CAA0B,KAA1B,EAAiC;AAC7B,MAAI,CAAC,oBAAW,KAAX,CAAL,EAAwB;AACpB,UAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,iBAAT,CAA2B,KAA3B,EAAkC;AAC9B,MAAI,CAAC,qBAAY,KAAZ,CAAL,EAAyB;AACrB,UAAM,IAAI,SAAJ,CAAc,0BAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,eAAT,CAAyB,KAAzB,EAAgC;AAC5B,MAAI,CAAC,mBAAU,KAAV,CAAL,EAAuB;AACnB,UAAM,IAAI,SAAJ,CAAc,wBAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,cAAT,CAAwB,KAAxB,EAA+B;AAC3B,MAAI,CAAC,kBAAS,KAAT,CAAL,EAAsB;AAClB,UAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;AACH;AACJ;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,cAAT,CAAwB,KAAxB,EAA+B;AAC3B,MAAI,CAAC,kBAAS,KAAT,CAAL,EAAsB;AAClB,UAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,aAAT,CAAuB,KAAvB,EAA8B;AAC1B,MAAI,CAAC,iBAAQ,KAAR,CAAL,EAAqB;AACjB,UAAM,IAAI,SAAJ,CAAc,0BAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,gBAAT,CAA0B,KAA1B,EAAiC;AAC7B,MAAI,CAAC,oBAAW,KAAX,CAAL,EAAwB;AACpB,UAAM,IAAI,SAAJ,CAAc,yBAAd,CAAN;AACH;AACJ;;AAED,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,iBAA3C,EAA8D,eAA9D,EAA+E,cAA/E,EAA+F,cAA/F,EAA+G,aAA/G,EAA8H,gBAA9H,EAAgJ,gBAAhJ;;;ACpRA;;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,O;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,mBAAY,KAAZ,EAAmB,KAAnB,EAA0B,KAA1B,EAAiC;AAAA;;AAAA;;AAC7B;;AAEA,QAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6B,KAAK,KAAK,SAAvC,IAAoD,KAAK,KAAK,SAAlE,EAA6E;AAEzE,UAAI,KAAK,GAAG,KAAK,CAAC,QAAN,GAAiB,KAAjB,CAAuB,GAAvB,CAAZ;AACA,MAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,CAAhB;AACA,MAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,CAAhB;AACA,MAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,CAAhB;AACH;;AAED,QAAI,KAAK,KAAK,SAAd,EAAyB;AACrB,YAAO,IAAI,KAAJ,CAAU,4BAAV,CAAP;AACH;;AAED,QAAI,KAAK,KAAK,SAAd,EAAyB;AACrB,MAAA,KAAK,GAAG,CAAR;AACH;;AAED,QAAI,KAAK,KAAK,SAAd,EAAyB;AACrB,MAAA,KAAK,GAAG,CAAR;AACH;;AAED,UAAK,KAAL,GAAa,QAAQ,CAAC,KAAD,CAArB;AACA,UAAK,KAAL,GAAa,QAAQ,CAAC,KAAD,CAArB;AACA,UAAK,KAAL,GAAa,QAAQ,CAAC,KAAD,CAArB;;AAEA,QAAI,KAAK,CAAC,MAAK,KAAN,CAAT,EAAuB;AACnB,YAAO,IAAI,KAAJ,CAAU,uBAAV,CAAP;AACH;;AAED,QAAI,KAAK,CAAC,MAAK,KAAN,CAAT,EAAuB;AACnB,YAAO,IAAI,KAAJ,CAAU,uBAAV,CAAP;AACH;;AAED,QAAI,KAAK,CAAC,MAAK,KAAN,CAAT,EAAuB;AACnB,YAAO,IAAI,KAAJ,CAAU,uBAAV,CAAP;AACH;;AArC4B;AAuChC;AAED;AACJ;AACA;AACA;;;;;WACI,oBAAW;AACP,aAAO,KAAK,KAAL,GAAa,GAAb,GAAmB,KAAK,KAAxB,GAAgC,GAAhC,GAAsC,KAAK,KAAlD;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;WACI,mBAAU,OAAV,EAAmB;AAEf,UAAI,OAAO,YAAY,OAAvB,EAAgC;AAC5B,QAAA,OAAO,GAAG,OAAO,CAAC,QAAR,EAAV;AACH;;AAED,UAAI,OAAO,OAAP,KAAmB,QAAvB,EAAiC;AAC7B,cAAO,IAAI,KAAJ,CAAU,gBAAV,CAAP;AACH;;AAED,UAAI,OAAO,KAAK,KAAK,QAAL,EAAhB,EAAiC;AAC7B,eAAO,CAAP;AACH;;AAED,UAAI,CAAC,GAAG,CAAC,KAAK,KAAN,EAAa,KAAK,KAAlB,EAAyB,KAAK,KAA9B,CAAR;AACA,UAAI,CAAC,GAAG,OAAO,CAAC,KAAR,CAAc,GAAd,CAAR;AACA,UAAI,GAAG,GAAG,IAAI,CAAC,GAAL,CAAS,CAAC,CAAC,MAAX,EAAmB,CAAC,CAAC,MAArB,CAAV;;AAEA,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,GAApB,EAAyB,CAAC,IAAI,CAA9B,EAAiC;AAC7B,YAAK,CAAC,CAAC,CAAD,CAAD,IAAQ,CAAC,CAAC,CAAC,CAAD,CAAV,IAAiB,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAR,GAAiB,CAAnC,IAA0C,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAR,GAAiB,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAvE,EAAgF;AAC5E,iBAAO,CAAP;AACH,SAFD,MAEO,IAAK,CAAC,CAAC,CAAD,CAAD,IAAQ,CAAC,CAAC,CAAC,CAAD,CAAV,IAAiB,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAR,GAAiB,CAAnC,IAA0C,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAR,GAAiB,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAvE,EAAgF;AACnF,iBAAO,CAAC,CAAR;AACH;AACJ;;AAED,aAAO,CAAP;AACH;;;;EA9FiB,mBAAQ,KAAR,CAAc,M;;;;AAkGpC,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,OAA3C;;AAGA,IAAI,cAAJ;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAAS,UAAT,GAAsB;AAClB,MAAI,cAAc,YAAY,OAA9B,EAAuC;AACnC,WAAO,cAAP;AACH;AACD;;;AACA,EAAA,cAAc,GAAG,IAAI,OAAJ,CAAY,OAAZ,CAAjB;AACA;;AACA,SAAO,cAAP;AAEH;;AAED,mBAAQ,iBAAR,CAA0B,SAA1B,EAAqC,UAArC;;;ACzLA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;AACA;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAT,CAAe,GAAf,EAAoB;AAEhB;AACA,MAAI,SAAS,GAAb,EAAkB;AACd,WAAO,GAAP;AACH,GALe,CAOhB;;;AACA,MAAI,qBAAY,GAAZ,CAAJ,EAAsB;AAClB,WAAO,GAAP;AACH,GAVe,CAYhB;;;AACA,MAAI,oBAAW,GAAX,CAAJ,EAAqB;AACjB,WAAO,GAAP;AACH,GAfe,CAiBhB;;;AACA,MAAI,iBAAQ,GAAR,CAAJ,EAAkB;AACd,QAAI,IAAI,GAAG,EAAX;;AACA,SAAK,IAAI,CAAC,GAAG,CAAR,EAAW,GAAG,GAAG,GAAG,CAAC,MAA1B,EAAkC,CAAC,GAAG,GAAtC,EAA2C,CAAC,EAA5C,EAAgD;AAC5C,MAAA,IAAI,CAAC,CAAD,CAAJ,GAAU,KAAK,CAAC,GAAG,CAAC,CAAD,CAAJ,CAAf;AACH;;AAED,WAAO,IAAP;AACH;;AAED,MAAI,kBAAS,GAAT,CAAJ,EAAmB;AAGf;AACA,QAAI,GAAG,YAAY,IAAnB,EAAyB;AACrB,UAAI,KAAI,GAAG,IAAI,IAAJ,EAAX;;AACA,MAAA,KAAI,CAAC,OAAL,CAAa,GAAG,CAAC,OAAJ,EAAb;;AACA,aAAO,KAAP;AACH;AAED;;;AACA,QAAI,OAAO,OAAP,KAAmB,WAAnB,IAAkC,GAAG,YAAY,OAArD,EAA8D,OAAO,GAAP;AAC9D,QAAI,OAAO,YAAP,KAAwB,WAAxB,IAAuC,GAAG,YAAY,YAA1D,EAAwE,OAAO,GAAP;AACxE,QAAI,OAAO,gBAAP,KAA4B,WAA5B,IAA2C,GAAG,YAAY,gBAA9D,EAAgF,OAAO,GAAP;AAEhF;;AACA,QAAI,OAAO,aAAP,KAAyB,WAAzB,IAAwC,GAAG,KAAK,aAApD,EAAmE,OAAO,GAAP;AACnE,QAAI,OAAO,MAAP,KAAkB,WAAlB,IAAiC,GAAG,KAAK,MAA7C,EAAqD,OAAO,GAAP;AACrD,QAAI,OAAO,QAAP,KAAoB,WAApB,IAAmC,GAAG,KAAK,QAA/C,EAAyD,OAAO,GAAP;AACzD,QAAI,OAAO,SAAP,KAAqB,WAArB,IAAoC,GAAG,KAAK,SAAhD,EAA2D,OAAO,GAAP;AAC3D,QAAI,OAAO,IAAP,KAAgB,WAAhB,IAA+B,GAAG,KAAK,IAA3C,EAAiD,OAAO,GAAP,CApBlC,CAsBf;;AACA,QAAI;AACA;AACA,UAAI,GAAG,YAAY,KAAnB,EAA0B;AACtB,eAAO,GAAP;AACH;AACJ,KALD,CAKE,OAAO,CAAP,EAAU,CACX;;AAED,WAAO,WAAW,CAAC,GAAD,CAAlB;AAEH;;AAED,QAAM,IAAI,KAAJ,CAAU,gDAAV,CAAN;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,WAAT,CAAqB,GAArB,EAA0B;AACtB,MAAI,IAAJ;AAEA;;AACA,MAAI,QAAO,GAAG,CAAC,cAAJ,CAAmB,UAAnB,CAAP,KAAyC,GAAG,CAAC,QAAJ,KAAiB,UAA9D,EAA0E;AACtE,WAAO,GAAG,CAAC,QAAJ,EAAP;AACH;;AAED,EAAA,IAAI,GAAG,EAAP;;AACA,MAAI,OAAO,GAAG,CAAC,WAAX,KAA2B,UAA3B,IACA,OAAO,GAAG,CAAC,WAAJ,CAAgB,IAAvB,KAAgC,UADpC,EACgD;AAC5C,IAAA,IAAI,GAAG,IAAI,GAAG,CAAC,WAAR,EAAP;AACH;;AAED,OAAK,IAAI,GAAT,IAAgB,GAAhB,EAAqB;AAEjB,QAAI,CAAC,GAAG,CAAC,cAAJ,CAAmB,GAAnB,CAAL,EAA8B;AAC1B;AACH;;AAED,QAAI,mBAAQ,KAAR,CAAc,WAAd,CAA0B,GAAG,CAAC,GAAD,CAA7B,CAAJ,EAAyC;AACrC,MAAA,IAAI,CAAC,GAAD,CAAJ,GAAY,GAAG,CAAC,GAAD,CAAf;AACA;AACH;;AAED,IAAA,IAAI,CAAC,GAAD,CAAJ,GAAY,KAAK,CAAC,GAAG,CAAC,GAAD,CAAJ,CAAjB;AACH;;AAED,SAAO,IAAP;AACH;;AAED,mBAAQ,iBAAR,CAA0B,cAA1B,EAA0C,KAA1C;;;ACpJA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,U;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACI,sBAAY,QAAZ,EAAsB;AAAA;;AAAA;;AAClB;;AAEA,QAAI,oBAAW,QAAX,CAAJ,EAA0B;AACtB,YAAK,OAAL,GAAe,QAAf;AACH,KAFD,MAEO,IAAI,QAAQ,KAAK,SAAjB,EAA4B;AAC/B,YAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;AACH,KAFM,MAEA;AACH;AACA,YAAK,OAAL,GAAe,UAAU,CAAV,EAAa,CAAb,EAAgB;AAE3B,YAAI,QAAO,CAAP,cAAoB,CAApB,CAAJ,EAA2B;AACvB,gBAAM,IAAI,SAAJ,CAAc,wBAAd,CAAN;AACH;;AAED,YAAI,CAAC,KAAK,CAAV,EAAa;AACT,iBAAO,CAAP;AACH;;AACD,eAAO,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAApB;AACH,OAVD;AAWH;;AApBiB;AAsBrB;AAED;AACJ;AACA;AACA;AACA;;;;;WACI,mBAAU;AACN,UAAM,QAAQ,GAAG,KAAK,OAAtB;;AACA,WAAK,OAAL,GAAe,UAAC,CAAD,EAAI,CAAJ;AAAA,eAAU,QAAQ,CAAC,CAAD,EAAI,CAAJ,CAAlB;AAAA,OAAf;;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,eAAM,CAAN,EAAS,CAAT,EAAY;AACR,aAAO,KAAK,OAAL,CAAa,CAAb,EAAgB,CAAhB,MAAuB,CAA9B;AACH;AAGD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,qBAAY,CAAZ,EAAe,CAAf,EAAkB;AACd,aAAO,KAAK,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqB,CAA5B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,4BAAmB,CAAnB,EAAsB,CAAtB,EAAyB;AACrB,aAAO,KAAK,WAAL,CAAiB,CAAjB,EAAoB,CAApB,KAA0B,KAAK,KAAL,CAAW,CAAX,EAAc,CAAd,CAAjC;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,yBAAgB,CAAhB,EAAmB,CAAnB,EAAsB;AAClB,aAAO,KAAK,QAAL,CAAc,CAAd,EAAiB,CAAjB,KAAuB,KAAK,KAAL,CAAW,CAAX,EAAc,CAAd,CAA9B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,kBAAS,CAAT,EAAY,CAAZ,EAAe;AACX,aAAO,KAAK,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqB,CAA5B;AACH;;;;EAvGoB,M;;;;AA4GzB,gBAAQ,iBAAR,CAA0B,cAA1B,EAA0C,UAA1C;;;AC/JA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAT,CAAoB,MAApB,EAA4B;AAExB,gCAAe,MAAf,EAFwB,CAIxB;;AACA,MAAI,SAAS,GAAG,MAAM,CAAC,mBAAP,CAA2B,MAA3B,CAAhB,CALwB,CAOxB;;AAPwB,6CAQP,SARO;AAAA;;AAAA;AAQxB,wDAA4B;AAAA,UAAnB,IAAmB;AACxB,UAAI,KAAK,GAAG,MAAM,CAAC,IAAD,CAAlB;AAEA,MAAA,MAAM,CAAC,IAAD,CAAN,GAAe,KAAK,IAAI,QAAO,KAAP,MAAiB,QAA1B,GACX,UAAU,CAAC,KAAD,CADC,GACS,KADxB;AAEH;AAbuB;AAAA;AAAA;AAAA;AAAA;;AAexB,SAAO,MAAM,CAAC,MAAP,CAAc,MAAd,CAAP;AACH;;AAED,mBAAQ,iBAAR,CAA0B,cAA1B,EAA0C,UAA1C",
+  "mappings": "AAAA;ACAA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,kB;;;;;AAEF;AACJ;AACA;AACI,gCAAc;AAAA;;AAAA;AAEb;AAED;AACJ;AACA;AACA;AACA;AACA;;;;;WACI,iBAAQ,KAAR,EAAe;AACX,aAAO,OAAO,CAAC,MAAR,CAAe,KAAf,CAAP;AACH;;;;EAjB4B,M;;;;AAoBjC,mBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,kBAAjD;;;ACvCA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,gB;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,4BAAY,QAAZ,EAAsB,QAAtB,EAAgC;AAAA;;AAAA;;AAC5B;;AAEA,QAAI,EAAE,QAAQ,YAAY,4BAAtB,KAA6C,EAAE,QAAQ,YAAY,4BAAtB,CAAjD,EAA4F;AACxF,YAAM,IAAI,SAAJ,CAAc,iDAAd,CAAN;AACH;;AAED,UAAK,QAAL,GAAgB,QAAhB;AACA,UAAK,QAAL,GAAgB,QAAhB;AAR4B;AAU/B;;;EAlB0B,4B;;;;AAuB/B,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,gBAAjD;;;ACtCA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,W;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,aAAO,OAAO,CAAC,GAAR,CAAY,CAAC,KAAK,QAAL,CAAc,OAAd,CAAsB,KAAtB,CAAD,EAA+B,KAAK,QAAL,CAAc,OAAd,CAAsB,KAAtB,CAA/B,CAAZ,CAAP;AACH;;;;EAVqB,kC;;;;AAc1B,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,WAAjD;;;AC/CA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,O;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,aAAO,OAAO,CAAC,MAAR,CAAe,KAAf,CAAP;AACH;;;;EAViB,4B;;;;AActB,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,OAAjD;;;AC/CA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,O;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,UAAG,iBAAQ,KAAR,CAAH,EAAmB;AACf,eAAO,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAP;AACH;;AAED,aAAO,OAAO,CAAC,MAAR,CAAe,KAAf,CAAP;AACH;;;;EAdiB,4B;;;;AAkBtB,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,OAAjD;;;ACpDA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,Q;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,eAAO,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAP;AACH;;AAED,aAAO,OAAO,CAAC,MAAR,CAAe,KAAf,CAAP;AACH;;;;EAdkB,4B;;;;AAkBvB,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,QAAjD;;;ACpDA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,U;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,UAAI,IAAI,GAAG,IAAX;AAEA,aAAO,IAAI,OAAJ,CAAY,UAAU,OAAV,EAAmB,MAAnB,EAA2B;AAC1C,YAAI,CAAJ,EAAO,CAAP;AAEA,QAAA,IAAI,CAAC,QAAL,CAAc,OAAd,CAAsB,KAAtB,EACK,IADL,CACU,YAAY;AACd,UAAA,OAAO;AACV,SAHL,WAGa,YAAY;AACrB,UAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAI,CAAC,KAAK,KAAV,EAAiB;AACb,YAAA,MAAM;AACT;AACJ,SATD;AAWA,QAAA,IAAI,CAAC,QAAL,CAAc,OAAd,CAAsB,KAAtB,EACK,IADL,CACU,YAAY;AACd,UAAA,OAAO;AACV,SAHL,WAGa,YAAY;AACrB,UAAA,CAAC,GAAG,KAAJ;AACA;;AACA,cAAI,CAAC,KAAK,KAAV,EAAiB;AACb,YAAA,MAAM;AACT;AACJ,SATD;AAUH,OAxBM,CAAP;AAyBH;;;;EApCoB,kC;;;;AAyCzB,0BAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,UAAjD;;;ACzEA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,K;;;;;;;;;;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACI,qBAAQ,KAAR,EAAe;AACX,aAAO,OAAO,CAAC,OAAR,CAAgB,KAAhB,CAAP;AACH;;;;EAVe,4B;;;;AAcpB,kBAAQ,iBAAR,CAA0B,qBAA1B,EAAiD,KAAjD;;;;AC/CA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAT,CAAgB,GAAhB,EAAqB,GAArB,EAA0B;AAEtB,MAAI,GAAG,KAAK,SAAZ,EAAuB;AACnB,IAAA,GAAG,GAAG,CAAN;AACH;;AACD,MAAI,GAAG,KAAK,SAAZ,EAAuB;AACnB,IAAA,GAAG,GAAG,GAAN;AACH;;AAED,MAAI,GAAG,GAAG,GAAV,EAAe;AACX,UAAM,IAAI,KAAJ,CAAU,8BAAV,CAAN;AACH;;AAED,SAAO,IAAI,CAAC,KAAL,CAAW,MAAM,CAAC,GAAD,EAAM,GAAN,CAAjB,CAAP;AAEH;;AAED,IAAI,GAAG,GAAG,UAAV;;AAEA,IAAI,CAAC,IAAL,GAAY,IAAI,CAAC,IAAL,IAAa,UAAU,CAAV,EAAa;AAClC,SAAO,IAAI,CAAC,GAAL,CAAS,CAAT,IAAc,IAAI,CAAC,GAAL,CAAS,CAAT,CAArB;AACH,CAFD;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,MAAT,CAAgB,GAAhB,EAAqB,GAArB,EAA0B;AACtB,MAAI,KAAJ;;AAEA,MAAI,OAAO,MAAP,KAAkB,WAAtB,EAAmC;AAAA;;AAC/B,IAAA,KAAK,GAAG,YAAA,MAAM,UAAN,0CAAS,QAAT,mBAAsB,MAAtB,6CAAsB,SAAS,UAAT,CAAtB,CAAR;AACH,GAFD,MAEO;AACH,IAAA,KAAK,GAAG,OAAO,MAAP,KAAkB,WAAlB,GAAgC,MAAhC,GAAyC,SAAjD;AACH;;AAED,MAAI,OAAO,KAAP,KAAiB,WAArB,EAAkC;AAC9B,UAAM,IAAI,KAAJ,CAAU,eAAV,CAAN;AACH;;AAED,MAAI,IAAI,GAAG,CAAX;AACA,MAAM,KAAK,GAAG,GAAG,GAAG,GAApB;;AACA,MAAI,KAAK,GAAG,CAAZ,EAAe;AACX,WAAO,GAAP;AACH;;AAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAL,CAAU,IAAI,CAAC,IAAL,CAAU,KAAV,CAAV,CAAnB;;AACA,MAAI,UAAU,GAAG,EAAjB,EAAqB;AACjB,UAAO,IAAI,KAAJ,CAAU,iDAAV,CAAP;AACH;;AACD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAL,CAAU,UAAU,GAAG,CAAvB,CAApB;AACA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,UAAZ,IAA0B,CAAvC;AAEA,MAAM,SAAS,GAAG,IAAI,UAAJ,CAAe,WAAf,CAAlB;AACA,EAAA,KAAK,CAAC,eAAN,CAAsB,SAAtB;AAEA,MAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAf,IAAoB,CAA5B;;AACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,WAApB,EAAiC,CAAC,EAAlC,EAAsC;AAClC,IAAA,IAAI,IAAI,SAAS,CAAC,CAAD,CAAT,GAAe,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAvB;AACA,IAAA,CAAC,IAAI,CAAL;AACH;;AAED,EAAA,IAAI,GAAG,IAAI,GAAG,IAAd;;AAEA,MAAI,IAAI,IAAI,KAAZ,EAAmB;AACf,WAAO,MAAM,CAAC,GAAD,EAAM,GAAN,CAAb;AACH;;AAED,SAAO,GAAG,GAAG,IAAb;AAEH;;AAED,mBAAQ,iBAAR,CAA0B,cAA1B,EAA0C,MAA1C;;;;;ACjHA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,mBAAQ,IAAR,CAAa,UAAb,CAAwB,kBAAxB;;;ACjCA;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;IACM,S;AAEF;AACJ;AACA;AACA;AACA;AACI,qBAAY,SAAZ,EAAuB;AAAA;;AACnB,QAAI,SAAS,KAAK,SAAd,IAA2B,OAAO,SAAP,KAAqB,QAApD,EAA8D;AAC1D,YAAM,IAAI,KAAJ,CAAU,2BAAV,CAAN;AACH;;AACD,SAAK,SAAL,GAAiB,SAAjB;AACH;AAED;AACJ;AACA;AACA;;;;;WACI,wBAAe;AACX,aAAO,KAAK,SAAZ;AACH;AAED;AACJ;AACA;AACA;;;;WACI,oBAAW;AACP,aAAO,KAAK,YAAL,EAAP;AACH;;;;;AAGL;AACA;AACA;AACA;AACA;;;AACO,IAAM,OAAO,GAAG,IAAI,SAAJ,CAAc,SAAd,CAAhB;AAGP;AACA;AACA;;;AACA,iBAAiB,CAAC,SAAD,EAAY,iBAAZ,CAAjB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAAS,iBAAT,CAA2B,EAA3B,EAAuC;AACnC,MAAI,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,KAAH,CAAS,GAAT,CAAD,CAA1B;;AAEA,OAAK,IAAI,CAAC,GAAG,CAAR,EAAW,CAAC,mDAAjB,EAAgC,CAAC,GAAG,CAApC,EAAuC,CAAC,EAAxC,EAA4C;AACxC,IAAA,OAAO,CAAC,UAAU,CAAK,CAAL,gCAAK,CAAL,6BAAK,CAAL,MAAX,CAAP,GAAkC,CAAlC,gCAAkC,CAAlC,6BAAkC,CAAlC;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,UAAT,CAAoB,EAApB,EAAwB;AACpB,MAAI;AAEA,QAAI,OAAO,EAAP,KAAc,UAAlB,EAA8B;AAC1B,YAAO,IAAI,KAAJ,CAAU,gDAAV,CAAP;AACH;;AAED,QAAI,EAAE,CAAC,cAAH,CAAkB,MAAlB,CAAJ,EAA+B;AAC3B,aAAO,EAAE,CAAC,IAAV;AACH;;AAED,QAAI,eAAe,OAAO,EAAE,CAAC,QAA7B,EAAuC;AACnC,UAAI,CAAC,GAAG,EAAE,CAAC,QAAH,EAAR;AACA,UAAI,CAAC,GAAG,CAAC,CAAC,KAAF,CAAQ,0BAAR,CAAR;;AACA,UAAI,KAAK,CAAC,OAAN,CAAc,CAAd,KAAoB,OAAO,CAAC,CAAC,CAAD,CAAR,KAAgB,QAAxC,EAAkD;AAC9C,eAAO,CAAC,CAAC,CAAD,CAAR;AACH;;AACD,UAAI,CAAC,GAAG,CAAC,CAAC,KAAF,CAAQ,uBAAR,CAAR;;AACA,UAAI,KAAK,CAAC,OAAN,CAAc,CAAd,KAAoB,OAAO,CAAC,CAAC,CAAD,CAAR,KAAgB,QAAxC,EAAkD;AAC9C,eAAO,CAAC,CAAC,CAAD,CAAR;AACH;AACJ;AAEJ,GAtBD,CAsBE,OAAO,CAAP,EAAU;AACR,UAAM,IAAI,KAAJ,CAAU,eAAe,CAAzB,CAAN;AACH;;AAED,QAAO,IAAI,KAAJ,CAAU,uDAAV,CAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,YAAT,CAAsB,KAAtB,EAA6B;AACzB,MAAI,KAAK,GAAG,OAAZ;AAAA,MAAqB,EAAE,GAAG,SAA1B;;AAEA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,KAAK,CAAC,MAA1B,EAAkC,CAAC,EAAnC,EAAuC;AAEnC,QAAI,cAAc,KAAK,CAAC,CAAD,CAAvB,EAA4B;AACxB;AACH;;AAED,IAAA,EAAE,IAAI,MAAM,KAAK,CAAC,CAAD,CAAjB;;AAEA,QAAI,CAAC,KAAK,CAAC,cAAN,CAAqB,KAAK,CAAC,CAAD,CAA1B,CAAL,EAAqC;AACjC,MAAA,KAAK,CAAC,KAAK,CAAC,CAAD,CAAN,CAAL,GAAkB,IAAI,SAAJ,CAAc,EAAd,CAAlB;AACH;;AAED,IAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAD,CAAN,CAAb;AACH;;AAED,SAAO,KAAP;AACH;;;;AC7JD;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAI,eAAe,GAAG,CAAtB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACM,E;;;;;AAEF;AACJ;AACA;AACI,gBAAc;AAAA;;AAAA;;AACV;AAEA,IAAA,eAAe,IAAI,CAAnB;AAEA,UAAK,EAAL,GAAU,MAAM,CAAC,IAAP,CAAY,oBAAO,CAAP,EAAU,KAAV,CAAZ,EACL,OADK,CACG,IADH,EACS,EADT;AAEN;AAFM,KAGL,OAHK,CAGG,SAHH,EAGc,GAHd,IAGqB,eAH/B;AALU;AASb;;;;WAED,oBAAW;AACP,aAAO,KAAK,EAAZ;AACH;;;;EAlBY,mBAAQ,KAAR,CAAc,M;;;;AAsB/B,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,EAA3C;;;;;AC3DA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AAEA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAT,CAAoB,KAApB,EAA2B;AACvB,MAAI,KAAK,KAAK,SAAd,EAAyB,OAAO,KAAP;AACzB,MAAI,KAAK,KAAK,IAAd,EAAoB,OAAO,KAAP;AACpB,SAAO,QAAO,KAAP,aAAO,KAAP,uBAAO,KAAK,CAAG,MAAM,CAAC,QAAV,CAAZ,MAAoC,UAA3C;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,WAAT,CAAqB,KAArB,EAA4B;AACxB,MAAI,IAAJ;;AAEA,MAAI,KAAK,KAAK,SAAV,IAAuB,KAAK,KAAK,IAAjC,IAAyC,KAAK,KAAK,GAAvD,EAA4D;AACxD,WAAO,IAAP;AACH;;AAED,EAAA,IAAI,WAAU,KAAV,CAAJ;;AAEA,MAAI,IAAI,KAAK,QAAT,IAAqB,IAAI,KAAK,QAA9B,IAA0C,IAAI,KAAK,SAAnD,IAAgE,IAAI,KAAK,QAA7E,EAAuF;AACnF,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,SAAT,CAAmB,KAAnB,EAA0B;AAEtB,MAAI,KAAK,KAAK,IAAV,IAAkB,KAAK,KAAK,KAAhC,EAAuC;AACnC,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,QAAT,CAAkB,KAAlB,EAAyB;AACrB,MAAI,KAAK,KAAK,SAAV,IAAuB,OAAO,KAAP,KAAiB,QAA5C,EAAsD;AAClD,WAAO,KAAP;AACH;;AACD,SAAO,IAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,QAAT,CAAkB,KAAlB,EAAyB;AAErB,MAAI,OAAO,CAAC,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAI,WAAW,CAAC,KAAD,CAAf,EAAwB,OAAO,KAAP;;AAExB,MAAI,QAAO,KAAP,MAAiB,QAArB,EAA+B;AAC3B,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,OAAT,CAAiB,KAAjB,EAAwB;AACpB,MAAI,KAAK,CAAC,OAAN,CAAc,KAAd,CAAJ,EAA0B;AACtB,WAAO,IAAP;AACH;;AACD,SAAO,KAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,UAAT,CAAoB,KAApB,EAA2B;AACvB,MAAI,OAAO,CAAC,KAAD,CAAX,EAAoB,OAAO,KAAP;AACpB,MAAI,WAAW,CAAC,KAAD,CAAf,EAAwB,OAAO,KAAP;;AAExB,MAAI,OAAO,KAAP,KAAiB,UAArB,EAAiC;AAC7B,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AAEH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,SAAT,CAAmB,KAAnB,EAA0B;AACtB,SAAO,MAAM,CAAC,SAAP,CAAiB,KAAjB,CAAP;AACH;;AAGD,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,WAA3C,EAAwD,SAAxD,EAAmE,QAAnE,EAA6E,QAA7E,EAAuF,OAAvF,EAAgG,UAAhG,EAA4G,UAA5G,EAAwH,SAAxH;;;ACpUA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,O;AAEF;AACJ;AACA;AACI,oBAAc;AAAA;AACb;AAED;AACJ;AACA;AACA;;;;;WACI,oBAAW;AACP,aAAO,IAAI,CAAC,SAAL,CAAe,IAAf,CAAP;AACH;;;;;;;;AAKL,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,OAA3C;;;ACvDA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,Q;;;;;AAEF;AACJ;AACA;AACA;AACA;AACI,oBAAY,QAAZ,EAA+B;AAAA;;AAAA;;AAC3B;;AAEA,QAAI,OAAO,QAAP,KAAoB,UAAxB,EAAoC;AAChC,YAAM,IAAI,KAAJ,CAAU,sCAAV,CAAN;AACH;;AAED,UAAK,QAAL,GAAgB,QAAhB;;AAP2B,sCAAN,IAAM;AAAN,MAAA,IAAM;AAAA;;AAQ3B,UAAK,SAAL,GAAiB,IAAjB;AACA,UAAK,IAAL,GAAY,IAAI,oBAAJ,EAAZ;AACA,UAAK,KAAL,GAAa,IAAI,wBAAJ,EAAb;AAV2B;AAW9B;AAED;AACJ;AACA;AACA;AACA;;;;;WACI,gBAAO,GAAP,EAAY;AACR,WAAK,IAAL,CAAU,GAAV,CAAc,GAAd;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,mBAAU,GAAV,EAAe;AACX,WAAK,IAAL,CAAU,MAAV,CAAiB,GAAjB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;;;;WACI,mBAAU;AACN,aAAO,KAAK,IAAL,CAAU,OAAV,EAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,gBAAO,GAAP,EAAY;AACR,aAAO,KAAK,IAAL,CAAU,QAAV,CAAmB,GAAnB,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,gBAAO,OAAP,EAAgB;AACZ,UAAI,IAAI,GAAG,IAAX;AAEA,aAAO,IAAI,OAAJ,CAAY,UAAU,OAAV,EAAmB,MAAnB,EAA2B;AAC1C,YAAI,CAAC,kBAAS,OAAT,CAAL,EAAwB;AACpB,UAAA,MAAM,CAAC,2BAAD,CAAN;AACH;;AAED,QAAA,IAAI,CAAC,KAAL,CAAW,GAAX,CAAe,OAAf;AAEA,QAAA,UAAU,CAAC,YAAM;AAEb;AACA;AACA,cAAI,IAAI,CAAC,KAAL,CAAW,OAAX,EAAJ,EAA0B;AACtB,YAAA,OAAO;AACP;AACH;;AAED,cAAI,CAAC,GAAG,IAAI,CAAC,KAAL,CAAW,IAAX,EAAR;AACA,cAAI,MAAM,GAAG,IAAI,CAAC,QAAL,CAAc,KAAd,CAAoB,CAApB,EAAuB,IAAI,CAAC,SAA5B,CAAb;;AAEA,cAAI,kBAAS,MAAT,KAAoB,MAAM,YAAY,OAA1C,EAAmD;AAC/C,YAAA,MAAM,CAAC,IAAP,CAAY,OAAZ,WAA2B,MAA3B;AACA;AACH;;AAED,UAAA,OAAO,CAAC,MAAD,CAAP;AACH,SAlBS,EAkBP,CAlBO,CAAV;AAoBH,OA3BM,CAAP;AA6BH;;;;EA9FkB,mBAAQ,KAAR,CAAc,M;;;;AAkGrC,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,QAA3C;;;ACnKA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,Y;;;;;AAEF,0BAAc;AAAA;;AAAA;;AACV;AACA,UAAK,SAAL,GAAiB,EAAjB;AAFU;AAGb;;;;WAED,gBAAO,QAAP,EAAiB;AACb,MAAA,eAAe,CAAC,QAAD,CAAf;AACA,WAAK,SAAL,CAAe,IAAf,CAAoB,QAApB;AACA,aAAO,IAAP;AACH;;;WAED,gBAAO,QAAP,EAAiB;AACb,MAAA,eAAe,CAAC,QAAD,CAAf;AACA,UAAI,CAAC,GAAG,CAAR;AAAA,UAAW,CAAC,GAAG,KAAK,SAAL,CAAe,MAA9B;;AACA,aAAO,CAAC,GAAG,CAAX,EAAc,CAAC,EAAf,EAAmB;AACf,YAAI,KAAK,SAAL,CAAe,CAAf,MAAsB,QAA1B,EAAoC;AAChC,eAAK,SAAL,CAAe,MAAf,CAAsB,CAAtB,EAAyB,CAAzB;AACH;AACJ;;AAED,aAAO,IAAP;AACH;;;WAED,kBAAS,QAAT,EAAmB;AACf,MAAA,eAAe,CAAC,QAAD,CAAf;AACA,UAAI,CAAC,GAAG,CAAR;AAAA,UAAW,CAAC,GAAG,KAAK,SAAL,CAAe,MAA9B;;AACA,aAAO,CAAC,GAAG,CAAX,EAAc,CAAC,EAAf,EAAmB;AACf,YAAI,KAAK,SAAL,CAAe,CAAf,MAAsB,QAA1B,EAAoC;AAChC,iBAAO,IAAP;AACH;AACJ;;AACD,aAAO,KAAP;AACH;;;WAED,gBAAO,OAAP,EAAgB;AAEZ,UAAI,OAAO,GAAG,EAAd;AAEA,UAAI,CAAC,GAAG,CAAR;AAAA,UAAW,CAAC,GAAG,KAAK,SAAL,CAAe,MAA9B;;AACA,aAAO,CAAC,GAAG,CAAX,EAAc,CAAC,EAAf,EAAmB;AACf,QAAA,OAAO,CAAC,IAAR,CAAa,KAAK,SAAL,CAAe,CAAf,EAAkB,MAAlB,CAAyB,OAAzB,CAAb;AACH;;AAED,aAAO,OAAO,CAAC,GAAR,CAAY,OAAZ,CAAP;AACH;;;;EA9CsB,mBAAQ,KAAR,CAAc,M;AAkDzC;AACA;AACA;AACA;AACA;AACA;;;;;AACA,SAAS,eAAT,CAAyB,QAAzB,EAAmC;AAC/B,MAAI,EAAE,QAAQ,YAAY,mBAAQ,KAAR,CAAc,QAApC,CAAJ,EAAmD;AAC/C,UAAM,IAAI,KAAJ,CAAU,uCAAV,CAAN;AACH;;AACD,SAAO,IAAP;AACH;;AAED,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,YAA3C;;;ACnGA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,a;;;;;AAEF;AACJ;AACA;AACA;AACI,yBAAY,MAAZ,EAAoB;AAAA;;AAAA;;AAChB;AACA,kCAAe,MAAf;AACA,UAAK,WAAL,GAAmB,MAAnB;AACA,UAAK,OAAL,GAAe,IAAI,KAAJ,CAAU,MAAV,EAAkB,UAAU,CAAC,IAAX,+BAAlB,CAAf;AAEA,UAAK,SAAL,GAAiB,IAAI,OAAJ,EAAjB;;AACA,UAAK,SAAL,CAAe,GAAf,CAAmB,MAAK,WAAxB,EAAqC,MAAK,OAA1C;;AAEA,UAAK,SAAL,GAAiB,IAAI,0BAAJ,EAAjB;AATgB;AAUnB;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;;WACI,sBAAa;AACT,aAAO,KAAK,OAAZ;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,0BAAiB;AACb,aAAO,KAAK,WAAZ;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,wBAAe,QAAf,EAAyB;AACrB,WAAK,SAAL,CAAe,MAAf,CAAsB,QAAtB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,wBAAe,QAAf,EAAyB;AACrB,WAAK,SAAL,CAAe,MAAf,CAAsB,QAAtB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,2BAAkB;AACd,WAAK,SAAL,CAAe,MAAf,CAAsB,IAAtB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;;;;WACI,0BAAiB,QAAjB,EAA2B;AACvB,aAAO,KAAK,SAAL,CAAe,QAAf,CAAwB,QAAxB,CAAP;AACH;;;;EA5EuB,M;;;;AAgF5B,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,aAA3C;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAT,GAAsB;AAElB,MAAM,KAAK,GAAG,IAAd,CAFkB,CAIlB;;AACA,MAAM,OAAO,GAAG;AAEZ;AACA,IAAA,GAAG,EAAE,aAAU,MAAV,EAAkB,GAAlB,EAAuB,QAAvB,EAAiC;AAElC,UAAM,KAAK,GAAG,OAAO,CAAC,GAAR,CAAY,MAAZ,EAAoB,GAApB,EAAyB,QAAzB,CAAd;;AAEA,UAAI,QAAO,GAAP,MAAe,QAAnB,EAA6B;AACzB,eAAO,KAAP;AACH;;AAED,UAAI,qBAAY,KAAZ,CAAJ,EAAwB;AACpB,eAAO,KAAP;AACH,OAViC,CAYlC;;;AACA,UAAK,iBAAQ,KAAR,KAAkB,kBAAS,KAAT,CAAvB,EAAyC;AACrC,YAAI,KAAK,CAAC,SAAN,CAAgB,GAAhB,CAAoB,KAApB,CAAJ,EAAgC;AAC5B,iBAAO,KAAK,CAAC,SAAN,CAAgB,GAAhB,CAAoB,KAApB,CAAP;AACH,SAFD,MAEO;AACH,cAAI,CAAC,GAAG,IAAI,KAAJ,CAAU,KAAV,EAAiB,OAAjB,CAAR;AACA,UAAA,KAAK,CAAC,SAAN,CAAgB,GAAhB,CAAoB,KAApB,EAA2B,CAA3B;AACA,iBAAO,CAAP;AACH;AAEJ;;AAED,aAAO,KAAP;AAEH,KA7BW;AA+BZ;AACA,IAAA,GAAG,EAAE,aAAU,MAAV,EAAkB,GAAlB,EAAuB,KAAvB,EAA8B,QAA9B,EAAwC;AACzC,UAAM,MAAM,GAAG,OAAO,CAAC,GAAR,CAAY,MAAZ,EAAoB,GAApB,EAAyB,KAAzB,EAAgC,QAAhC,CAAf;;AACA,UAAI,QAAO,QAAP,yCAAO,QAAP,OAAoB,QAAxB,EAAkC;AAC9B,QAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,KAAvB;AACH;;AAED,aAAO,MAAP;AACH,KAvCW;AAyCZ;AACA,IAAA,cAAc,EAAE,wBAAU,MAAV,EAAkB,GAAlB,EAAuB;AACnC,UAAI,GAAG,IAAI,MAAX,EAAmB;AACf,eAAO,MAAM,CAAC,GAAD,CAAb;;AAEA,YAAI,QAAO,GAAP,MAAe,QAAnB,EAA6B;AACzB,UAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,KAAvB;AACH;;AAGD,eAAO,IAAP;AACH;;AACD,aAAO,KAAP;AACH,KAtDW;AAwDZ;AACA,IAAA,cAAc,EAAE,wBAAU,MAAV,EAAkB,GAAlB,EAAuB,UAAvB,EAAmC;AAC/C,UAAI,MAAM,GAAG,OAAO,CAAC,cAAR,CAAuB,MAAvB,EAA+B,GAA/B,EAAoC,UAApC,CAAb;;AAEA,UAAI,QAAO,GAAP,MAAe,QAAnB,EAA6B;AACzB,QAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,KAAvB;AACH;;AAGD,aAAO,MAAP;AACH,KAlEW;AAoEZ;AACA,IAAA,cAAc,EAAE,wBAAU,MAAV,EAAkB,GAAlB,EAAuB;AACnC,UAAI,MAAM,GAAG,OAAO,CAAC,cAAR,CAAuB,OAAvB,EAAgC,GAAhC,CAAb;;AAEA,UAAI,QAAO,GAAP,MAAe,QAAnB,EAA6B;AACzB,QAAA,KAAK,CAAC,SAAN,CAAgB,MAAhB,CAAuB,KAAvB;AACH;;AAED,aAAO,MAAP;AACH;AA7EW,GAAhB;AAkFA,SAAO,OAAP;AACH;;;;;;;;;;;;;;;;;;AClPD;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,K;;;;;AAEF;AACJ;AACA;AACI,mBAAc;AAAA;;AAAA;;AACV;AACA,UAAK,IAAL,GAAY,EAAZ;AAFU;AAGb;AAGD;AACJ;AACA;;;;;WACI,mBAAU;AACN,aAAO,KAAK,IAAL,CAAU,MAAV,KAAqB,CAA5B;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,gBAAO;AACH,UAAI,KAAK,OAAL,EAAJ,EAAoB;AAChB,eAAO,SAAP;AACH;;AAED,aAAO,KAAK,IAAL,CAAU,CAAV,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,aAAI,KAAJ,EAAW;AACP,WAAK,IAAL,CAAU,IAAV,CAAe,KAAf;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iBAAQ;AACJ,WAAK,IAAL,GAAY,EAAZ;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,gBAAO;AACH,UAAI,KAAK,OAAL,EAAJ,EAAoB;AAChB,eAAO,SAAP;AACH;;AACD,aAAO,KAAK,IAAL,CAAU,KAAV,EAAP;AACH;;;;EA/De,M;;;;AAoEpB,gBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,KAA3C;;;AC/FA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,S;;;;;AAEF;AACJ;AACA;AACA;AACI,qBAAY,IAAZ,EAAkB;AAAA;;AAAA;;AACd;AACA,UAAK,MAAL,GAAc,IAAI,GAAJ,EAAd;;AAEA,QAAI,OAAO,IAAP,KAAgB,WAApB,EAAiC;AAC7B,YAAK,GAAL,CAAS,IAAT;AACH;;AANa;AAQjB;AAED;AACJ;AACA;AACA;AACA;;;;;WACI,uBAAc;AACV,aAAO,KAAK,MAAM,CAAC,QAAZ,GAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;SACK,MAAM,CAAC,Q;WAAR,iBAAoB;AAChB;AACA;AACA;AACA,UAAI,KAAK,GAAG,CAAZ;AACA,UAAI,OAAO,GAAG,KAAK,OAAL,EAAd;AAEA,aAAO;AACH,QAAA,IAAI,EAAE,gBAAM;AACR,cAAI,KAAK,GAAG,OAAO,CAAC,MAApB,EAA4B;AACxB,mBAAO;AAAC,cAAA,KAAK,EAAE,OAAF,aAAE,OAAF,uBAAE,OAAO,CAAG,KAAK,EAAR,CAAf;AAA4B,cAAA,IAAI,EAAE;AAAlC,aAAP;AACH,WAFD,MAEO;AACH,mBAAO;AAAC,cAAA,IAAI,EAAE;AAAP,aAAP;AACH;AACJ;AAPE,OAAP;AASH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,kBAAS,KAAT,EAAgB;AAAA;;AACZ,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,QAAA,KAAK,GAAG,KAAK,CAAC,IAAN,EAAR;AACA,YAAI,OAAO,GAAG,CAAd;AACA,QAAA,KAAK,CAAC,KAAN,CAAY,GAAZ,EAAiB,OAAjB,CAAyB,UAAA,KAAK,EAAI;AAC9B,cAAI,MAAI,CAAC,MAAL,CAAY,GAAZ,CAAgB,KAAK,CAAC,IAAN,EAAhB,MAAkC,KAAtC,EAA6C,OAAO,KAAP;AAC7C,UAAA,OAAO;AACV,SAHD;AAIA,eAAO,OAAO,GAAG,CAAV,GAAc,IAAd,GAAqB,KAA5B;AACH;;AAED,UAAI,oBAAW,KAAX,CAAJ,EAAuB;AACnB,YAAI,QAAO,GAAG,CAAd;;AADmB,mDAED,KAFC;AAAA;;AAAA;AAEnB,8DAAyB;AAAA,gBAAhB,KAAgB;AACrB,0CAAe,KAAf;AACA,gBAAI,KAAK,MAAL,CAAY,GAAZ,CAAgB,KAAK,CAAC,IAAN,EAAhB,MAAkC,KAAtC,EAA6C,OAAO,KAAP;AAC7C,YAAA,QAAO;AACV;AANkB;AAAA;AAAA;AAAA;AAAA;;AAOnB,eAAO,QAAO,GAAG,CAAV,GAAc,IAAd,GAAqB,KAA5B;AACH;;AAED,aAAO,KAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,aAAI,KAAJ,EAAW;AAAA;;AACP,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,QAAA,KAAK,CAAC,KAAN,CAAY,GAAZ,EAAiB,OAAjB,CAAyB,UAAA,KAAK,EAAI;AAC9B,UAAA,MAAI,CAAC,MAAL,CAAY,GAAZ,CAAgB,KAAK,CAAC,IAAN,EAAhB;AACH,SAFD;AAGH,OAJD,MAIO,IAAI,oBAAW,KAAX,CAAJ,EAAuB;AAAA,oDACR,KADQ;AAAA;;AAAA;AAC1B,iEAAyB;AAAA,gBAAhB,KAAgB;AACrB,0CAAe,KAAf;AACA,iBAAK,MAAL,CAAY,GAAZ,CAAgB,KAAK,CAAC,IAAN,EAAhB;AACH;AAJyB;AAAA;AAAA;AAAA;AAAA;AAK7B,OALM,MAKA,IAAI,OAAO,KAAP,KAAiB,WAArB,EAAkC;AACrC,cAAM,IAAI,SAAJ,CAAc,mBAAd,CAAN;AACH;;AAED,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iBAAQ;AACJ,WAAK,MAAL,CAAY,KAAZ;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,gBAAO,KAAP,EAAc;AAAA;;AACV,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,QAAA,KAAK,CAAC,KAAN,CAAY,GAAZ,EAAiB,OAAjB,CAAyB,UAAA,KAAK,EAAI;AAC9B,UAAA,MAAI,CAAC,MAAL,WAAmB,KAAK,CAAC,IAAN,EAAnB;AACH,SAFD;AAGH,OAJD,MAIO,IAAI,oBAAW,KAAX,CAAJ,EAAuB;AAAA,oDACR,KADQ;AAAA;;AAAA;AAC1B,iEAAyB;AAAA,gBAAhB,KAAgB;AACrB,0CAAe,KAAf;AACA,iBAAK,MAAL,WAAmB,KAAK,CAAC,IAAN,EAAnB;AACH;AAJyB;AAAA;AAAA;AAAA;AAAA;AAK7B,OALM,MAKA,IAAI,OAAO,KAAP,KAAiB,WAArB,EAAkC;AACrC,cAAM,IAAI,SAAJ,CAAc,mBAAd,CAAN;AACH;;AAED,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,iBAAQ,KAAR,EAAe,QAAf,EAAyB;AACrB,oCAAe,KAAf;AACA,oCAAe,QAAf;;AACA,UAAI,CAAC,KAAK,QAAL,CAAc,KAAd,CAAL,EAA2B;AACvB,eAAO,IAAP;AACH;;AAED,UAAI,CAAC,GAAG,KAAK,CAAC,IAAN,CAAW,KAAK,MAAhB,CAAR;AACA,UAAI,CAAC,GAAG,CAAC,CAAC,OAAF,CAAU,KAAV,CAAR;AACA,UAAI,CAAC,KAAK,CAAC,CAAX,EAAc,OAAO,IAAP;AAEd,MAAA,CAAC,CAAC,MAAF,CAAS,CAAT,EAAY,CAAZ,EAAe,QAAf;AACA,WAAK,MAAL,GAAc,IAAI,GAAJ,EAAd;AACA,WAAK,GAAL,CAAS,CAAT;AAEA,aAAO,IAAP;AAGH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,gBAAO,KAAP,EAAc;AAAA;;AAEV,UAAI,kBAAS,KAAT,CAAJ,EAAqB;AACjB,QAAA,KAAK,CAAC,KAAN,CAAY,GAAZ,EAAiB,OAAjB,CAAyB,UAAA,KAAK,EAAI;AAC9B,UAAA,WAAW,CAAC,IAAZ,CAAiB,MAAjB,EAAuB,KAAvB;AACH,SAFD;AAGH,OAJD,MAIO,IAAI,oBAAW,KAAX,CAAJ,EAAuB;AAAA,oDACR,KADQ;AAAA;;AAAA;AAC1B,iEAAyB;AAAA,gBAAhB,KAAgB;AACrB,YAAA,WAAW,CAAC,IAAZ,CAAiB,IAAjB,EAAuB,KAAvB;AACH;AAHyB;AAAA;AAAA;AAAA;AAAA;AAI7B,OAJM,MAIA,IAAI,OAAO,KAAP,KAAiB,WAArB,EAAkC;AACrC,cAAM,IAAI,SAAJ,CAAc,mBAAd,CAAN;AACH;;AAED,aAAO,IAAP;AAEH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,mBAAU;AACN,aAAO,KAAK,CAAC,IAAN,CAAW,KAAK,MAAhB,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,iBAAQ,QAAR,EAAkB;AACd,sCAAiB,QAAjB;AACA,WAAK,MAAL,CAAY,OAAZ,CAAoB,QAApB;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,oBAAW;AACP,aAAO,KAAK,OAAL,GAAe,IAAf,CAAoB,GAApB,CAAP;AACH;;;;EArPmB,M;AAyPxB;AACA;AACA;AACA;AACA;AACA;;;;;AACA,SAAS,WAAT,CAAqB,KAArB,EAA4B;AACxB,MAAI,EAAE,gBAAgB,SAAlB,CAAJ,EAAkC,MAAM,KAAK,CAAC,oCAAD,CAAX;AAClC,gCAAe,KAAf;AACA,EAAA,KAAK,GAAG,KAAK,CAAC,IAAN,EAAR;;AACA,MAAI,KAAK,QAAL,CAAc,KAAd,CAAJ,EAA0B;AACtB,SAAK,MAAL,CAAY,KAAZ;AACA,WAAO,IAAP;AACH;;AACD,OAAK,GAAL,CAAS,KAAT;AACA,SAAO,IAAP;AACH;;AAED,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,SAA3C;;;;;;;;;;;;;;;;;;AC1TA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,W;;;;;AAEF;AACJ;AACA;AACI,yBAAc;AAAA;;AAAA;;AACV;AACA,UAAK,MAAL,GAAc,IAAI,OAAJ,EAAd;AAFU;AAGb;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;;WACI,aAAI,KAAJ,EAAW;AAEP,oCAAe,KAAf;;AAEA,UAAI,CAAC,KAAK,MAAL,CAAY,GAAZ,CAAgB,KAAhB,CAAL,EAA6B;AACzB,aAAK,MAAL,CAAY,GAAZ,CAAgB,KAAhB;;AACA,6EAAU,KAAV;AACH;;AAED,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iBAAQ;AACJ;;AACA,WAAK,MAAL,GAAc,IAAI,OAAJ,EAAd;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,gBAAO;AAEH,UAAI,KAAK,OAAL,EAAJ,EAAoB;AAChB,eAAO,SAAP;AACH;;AACD,UAAI,KAAK,GAAG,KAAK,IAAL,CAAU,KAAV,EAAZ;AACA,WAAK,MAAL,WAAmB,KAAnB;AACA,aAAO,KAAP;AACH;;;;EAtDqB,Y;;;;AA2D1B,eAAQ,iBAAR,CAA0B,eAA1B,EAA2C,WAA3C;;;ACvFA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAT,CAA0B,KAA1B,EAAiC;AAC7B,MAAI,CAAC,oBAAW,KAAX,CAAL,EAAwB;AACpB,UAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,iBAAT,CAA2B,KAA3B,EAAkC;AAC9B,MAAI,CAAC,qBAAY,KAAZ,CAAL,EAAyB;AACrB,UAAM,IAAI,SAAJ,CAAc,0BAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,eAAT,CAAyB,KAAzB,EAAgC;AAC5B,MAAI,CAAC,mBAAU,KAAV,CAAL,EAAuB;AACnB,UAAM,IAAI,SAAJ,CAAc,wBAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,cAAT,CAAwB,KAAxB,EAA+B;AAC3B,MAAI,CAAC,kBAAS,KAAT,CAAL,EAAsB;AAClB,UAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;AACH;AACJ;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,cAAT,CAAwB,KAAxB,EAA+B;AAC3B,MAAI,CAAC,kBAAS,KAAT,CAAL,EAAsB;AAClB,UAAM,IAAI,SAAJ,CAAc,uBAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,aAAT,CAAuB,KAAvB,EAA8B;AAC1B,MAAI,CAAC,iBAAQ,KAAR,CAAL,EAAqB;AACjB,UAAM,IAAI,SAAJ,CAAc,0BAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,gBAAT,CAA0B,KAA1B,EAAiC;AAC7B,MAAI,CAAC,oBAAW,KAAX,CAAL,EAAwB;AACpB,UAAM,IAAI,SAAJ,CAAc,yBAAd,CAAN;AACH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,eAAT,CAAyB,KAAzB,EAAgC;AAC5B,MAAI,CAAC,mBAAU,KAAV,CAAL,EAAuB;AACnB,UAAM,IAAI,SAAJ,CAAc,yBAAd,CAAN;AACH;AACJ;;AAED,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,iBAA3C,EAA8D,eAA9D,EAA+E,cAA/E,EAA+F,cAA/F,EAA+G,aAA/G,EAA8H,gBAA9H,EAAgJ,gBAAhJ,EAAkK,eAAlK;;;ACzTA;;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,O;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,mBAAY,KAAZ,EAAmB,KAAnB,EAA0B,KAA1B,EAAiC;AAAA;;AAAA;;AAC7B;;AAEA,QAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6B,KAAK,KAAK,SAAvC,IAAoD,KAAK,KAAK,SAAlE,EAA6E;AAEzE,UAAI,KAAK,GAAG,KAAK,CAAC,QAAN,GAAiB,KAAjB,CAAuB,GAAvB,CAAZ;AACA,MAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,CAAhB;AACA,MAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,CAAhB;AACA,MAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAD,CAAL,IAAY,CAAb,CAAhB;AACH;;AAED,QAAI,KAAK,KAAK,SAAd,EAAyB;AACrB,YAAO,IAAI,KAAJ,CAAU,4BAAV,CAAP;AACH;;AAED,QAAI,KAAK,KAAK,SAAd,EAAyB;AACrB,MAAA,KAAK,GAAG,CAAR;AACH;;AAED,QAAI,KAAK,KAAK,SAAd,EAAyB;AACrB,MAAA,KAAK,GAAG,CAAR;AACH;;AAED,UAAK,KAAL,GAAa,QAAQ,CAAC,KAAD,CAArB;AACA,UAAK,KAAL,GAAa,QAAQ,CAAC,KAAD,CAArB;AACA,UAAK,KAAL,GAAa,QAAQ,CAAC,KAAD,CAArB;;AAEA,QAAI,KAAK,CAAC,MAAK,KAAN,CAAT,EAAuB;AACnB,YAAO,IAAI,KAAJ,CAAU,uBAAV,CAAP;AACH;;AAED,QAAI,KAAK,CAAC,MAAK,KAAN,CAAT,EAAuB;AACnB,YAAO,IAAI,KAAJ,CAAU,uBAAV,CAAP;AACH;;AAED,QAAI,KAAK,CAAC,MAAK,KAAN,CAAT,EAAuB;AACnB,YAAO,IAAI,KAAJ,CAAU,uBAAV,CAAP;AACH;;AArC4B;AAuChC;AAED;AACJ;AACA;AACA;;;;;WACI,oBAAW;AACP,aAAO,KAAK,KAAL,GAAa,GAAb,GAAmB,KAAK,KAAxB,GAAgC,GAAhC,GAAsC,KAAK,KAAlD;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;;WACI,mBAAU,OAAV,EAAmB;AAEf,UAAI,OAAO,YAAY,OAAvB,EAAgC;AAC5B,QAAA,OAAO,GAAG,OAAO,CAAC,QAAR,EAAV;AACH;;AAED,UAAI,OAAO,OAAP,KAAmB,QAAvB,EAAiC;AAC7B,cAAO,IAAI,KAAJ,CAAU,gBAAV,CAAP;AACH;;AAED,UAAI,OAAO,KAAK,KAAK,QAAL,EAAhB,EAAiC;AAC7B,eAAO,CAAP;AACH;;AAED,UAAI,CAAC,GAAG,CAAC,KAAK,KAAN,EAAa,KAAK,KAAlB,EAAyB,KAAK,KAA9B,CAAR;AACA,UAAI,CAAC,GAAG,OAAO,CAAC,KAAR,CAAc,GAAd,CAAR;AACA,UAAI,GAAG,GAAG,IAAI,CAAC,GAAL,CAAS,CAAC,CAAC,MAAX,EAAmB,CAAC,CAAC,MAArB,CAAV;;AAEA,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,GAApB,EAAyB,CAAC,IAAI,CAA9B,EAAiC;AAC7B,YAAK,CAAC,CAAC,CAAD,CAAD,IAAQ,CAAC,CAAC,CAAC,CAAD,CAAV,IAAiB,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAR,GAAiB,CAAnC,IAA0C,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAR,GAAiB,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAvE,EAAgF;AAC5E,iBAAO,CAAP;AACH,SAFD,MAEO,IAAK,CAAC,CAAC,CAAD,CAAD,IAAQ,CAAC,CAAC,CAAC,CAAD,CAAV,IAAiB,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAR,GAAiB,CAAnC,IAA0C,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAR,GAAiB,QAAQ,CAAC,CAAC,CAAC,CAAD,CAAF,CAAvE,EAAgF;AACnF,iBAAO,CAAC,CAAR;AACH;AACJ;;AAED,aAAO,CAAP;AACH;;;;EA9FiB,mBAAQ,KAAR,CAAc,M;;;;AAkGpC,mBAAQ,iBAAR,CAA0B,eAA1B,EAA2C,OAA3C;;AAGA,IAAI,cAAJ;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAAS,UAAT,GAAsB;AAClB,MAAI,cAAc,YAAY,OAA9B,EAAuC;AACnC,WAAO,cAAP;AACH;AACD;;;AACA,EAAA,cAAc,GAAG,IAAI,OAAJ,CAAY,OAAZ,CAAjB;AACA;;AACA,SAAO,cAAP;AAEH;;AAED,mBAAQ,iBAAR,CAA0B,SAA1B,EAAqC,UAArC;;;ACzLA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;AACA;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAT,CAAe,GAAf,EAAoB;AAEhB;AACA,MAAI,SAAS,GAAb,EAAkB;AACd,WAAO,GAAP;AACH,GALe,CAOhB;;;AACA,MAAI,qBAAY,GAAZ,CAAJ,EAAsB;AAClB,WAAO,GAAP;AACH,GAVe,CAYhB;;;AACA,MAAI,oBAAW,GAAX,CAAJ,EAAqB;AACjB,WAAO,GAAP;AACH,GAfe,CAiBhB;;;AACA,MAAI,iBAAQ,GAAR,CAAJ,EAAkB;AACd,QAAI,IAAI,GAAG,EAAX;;AACA,SAAK,IAAI,CAAC,GAAG,CAAR,EAAW,GAAG,GAAG,GAAG,CAAC,MAA1B,EAAkC,CAAC,GAAG,GAAtC,EAA2C,CAAC,EAA5C,EAAgD;AAC5C,MAAA,IAAI,CAAC,CAAD,CAAJ,GAAU,KAAK,CAAC,GAAG,CAAC,CAAD,CAAJ,CAAf;AACH;;AAED,WAAO,IAAP;AACH;;AAED,MAAI,kBAAS,GAAT,CAAJ,EAAmB;AAGf;AACA,QAAI,GAAG,YAAY,IAAnB,EAAyB;AACrB,UAAI,KAAI,GAAG,IAAI,IAAJ,EAAX;;AACA,MAAA,KAAI,CAAC,OAAL,CAAa,GAAG,CAAC,OAAJ,EAAb;;AACA,aAAO,KAAP;AACH;AAED;;;AACA,QAAI,OAAO,OAAP,KAAmB,WAAnB,IAAkC,GAAG,YAAY,OAArD,EAA8D,OAAO,GAAP;AAC9D,QAAI,OAAO,YAAP,KAAwB,WAAxB,IAAuC,GAAG,YAAY,YAA1D,EAAwE,OAAO,GAAP;AACxE,QAAI,OAAO,gBAAP,KAA4B,WAA5B,IAA2C,GAAG,YAAY,gBAA9D,EAAgF,OAAO,GAAP;AAEhF;;AACA,QAAI,OAAO,aAAP,KAAyB,WAAzB,IAAwC,GAAG,KAAK,aAApD,EAAmE,OAAO,GAAP;AACnE,QAAI,OAAO,MAAP,KAAkB,WAAlB,IAAiC,GAAG,KAAK,MAA7C,EAAqD,OAAO,GAAP;AACrD,QAAI,OAAO,QAAP,KAAoB,WAApB,IAAmC,GAAG,KAAK,QAA/C,EAAyD,OAAO,GAAP;AACzD,QAAI,OAAO,SAAP,KAAqB,WAArB,IAAoC,GAAG,KAAK,SAAhD,EAA2D,OAAO,GAAP;AAC3D,QAAI,OAAO,IAAP,KAAgB,WAAhB,IAA+B,GAAG,KAAK,IAA3C,EAAiD,OAAO,GAAP,CApBlC,CAsBf;;AACA,QAAI;AACA;AACA,UAAI,GAAG,YAAY,KAAnB,EAA0B;AACtB,eAAO,GAAP;AACH;AACJ,KALD,CAKE,OAAO,CAAP,EAAU,CACX;;AAED,WAAO,WAAW,CAAC,GAAD,CAAlB;AAEH;;AAED,QAAM,IAAI,KAAJ,CAAU,gDAAV,CAAN;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS,WAAT,CAAqB,GAArB,EAA0B;AACtB,MAAI,IAAJ;AAEA;;AACA,MAAI,QAAO,GAAG,CAAC,cAAJ,CAAmB,UAAnB,CAAP,KAAyC,GAAG,CAAC,QAAJ,KAAiB,UAA9D,EAA0E;AACtE,WAAO,GAAG,CAAC,QAAJ,EAAP;AACH;;AAED,EAAA,IAAI,GAAG,EAAP;;AACA,MAAI,OAAO,GAAG,CAAC,WAAX,KAA2B,UAA3B,IACA,OAAO,GAAG,CAAC,WAAJ,CAAgB,IAAvB,KAAgC,UADpC,EACgD;AAC5C,IAAA,IAAI,GAAG,IAAI,GAAG,CAAC,WAAR,EAAP;AACH;;AAED,OAAK,IAAI,GAAT,IAAgB,GAAhB,EAAqB;AAEjB,QAAI,CAAC,GAAG,CAAC,cAAJ,CAAmB,GAAnB,CAAL,EAA8B;AAC1B;AACH;;AAED,QAAI,mBAAQ,KAAR,CAAc,WAAd,CAA0B,GAAG,CAAC,GAAD,CAA7B,CAAJ,EAAyC;AACrC,MAAA,IAAI,CAAC,GAAD,CAAJ,GAAY,GAAG,CAAC,GAAD,CAAf;AACA;AACH;;AAED,IAAA,IAAI,CAAC,GAAD,CAAJ,GAAY,KAAK,CAAC,GAAG,CAAC,GAAD,CAAJ,CAAjB;AACH;;AAED,SAAO,IAAP;AACH;;AAED,mBAAQ,iBAAR,CAA0B,cAA1B,EAA0C,KAA1C;;;ACpJA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACM,U;;;;;AAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACI,sBAAY,QAAZ,EAAsB;AAAA;;AAAA;;AAClB;;AAEA,QAAI,oBAAW,QAAX,CAAJ,EAA0B;AACtB,YAAK,OAAL,GAAe,QAAf;AACH,KAFD,MAEO,IAAI,QAAQ,KAAK,SAAjB,EAA4B;AAC/B,YAAM,IAAI,SAAJ,CAAc,kBAAd,CAAN;AACH,KAFM,MAEA;AACH;AACA,YAAK,OAAL,GAAe,UAAU,CAAV,EAAa,CAAb,EAAgB;AAE3B,YAAI,QAAO,CAAP,cAAoB,CAApB,CAAJ,EAA2B;AACvB,gBAAM,IAAI,SAAJ,CAAc,wBAAd,CAAN;AACH;;AAED,YAAI,CAAC,KAAK,CAAV,EAAa;AACT,iBAAO,CAAP;AACH;;AACD,eAAO,CAAC,GAAG,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAApB;AACH,OAVD;AAWH;;AApBiB;AAsBrB;AAED;AACJ;AACA;AACA;AACA;;;;;WACI,mBAAU;AACN,UAAM,QAAQ,GAAG,KAAK,OAAtB;;AACA,WAAK,OAAL,GAAe,UAAC,CAAD,EAAI,CAAJ;AAAA,eAAU,QAAQ,CAAC,CAAD,EAAI,CAAJ,CAAlB;AAAA,OAAf;;AACA,aAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,eAAM,CAAN,EAAS,CAAT,EAAY;AACR,aAAO,KAAK,OAAL,CAAa,CAAb,EAAgB,CAAhB,MAAuB,CAA9B;AACH;AAGD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,qBAAY,CAAZ,EAAe,CAAf,EAAkB;AACd,aAAO,KAAK,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqB,CAA5B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,4BAAmB,CAAnB,EAAsB,CAAtB,EAAyB;AACrB,aAAO,KAAK,WAAL,CAAiB,CAAjB,EAAoB,CAApB,KAA0B,KAAK,KAAL,CAAW,CAAX,EAAc,CAAd,CAAjC;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,yBAAgB,CAAhB,EAAmB,CAAnB,EAAsB;AAClB,aAAO,KAAK,QAAL,CAAc,CAAd,EAAiB,CAAjB,KAAuB,KAAK,KAAL,CAAW,CAAX,EAAc,CAAd,CAA9B;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,kBAAS,CAAT,EAAY,CAAZ,EAAe;AACX,aAAO,KAAK,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqB,CAA5B;AACH;;;;EAvGoB,M;;;;AA4GzB,gBAAQ,iBAAR,CAA0B,cAA1B,EAA0C,UAA1C;;;AC/JA;AAEA;AACA;AACA;;;;;;;;;;;;;AAEA;;AACA;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAT,CAAoB,MAApB,EAA4B;AAExB,gCAAe,MAAf,EAFwB,CAIxB;;AACA,MAAI,SAAS,GAAG,MAAM,CAAC,mBAAP,CAA2B,MAA3B,CAAhB,CALwB,CAOxB;;AAPwB,6CAQP,SARO;AAAA;;AAAA;AAQxB,wDAA4B;AAAA,UAAnB,IAAmB;AACxB,UAAI,KAAK,GAAG,MAAM,CAAC,IAAD,CAAlB;AAEA,MAAA,MAAM,CAAC,IAAD,CAAN,GAAe,KAAK,IAAI,QAAO,KAAP,MAAiB,QAA1B,GACX,UAAU,CAAC,KAAD,CADC,GACS,KADxB;AAEH;AAbuB;AAAA;AAAA;AAAA;AAAA;;AAexB,SAAO,MAAM,CAAC,MAAP,CAAc,MAAd,CAAP;AACH;;AAED,mBAAQ,iBAAR,CAA0B,cAA1B,EAA0C,UAA1C",
   "file": "generated.js",
   "sourceRoot": "",
   "sourcesContent": [
     "(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()",
     "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {Object} from '../types/object.js';\n\n\n/**\n * the abstract contraint defines the api for all constraints. mainly the method isValid() is defined.\n *\n * derived classes must implement the method isValid().\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass AbstractConstraint extends Object {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n    }\n\n    /**\n     * this method must return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.reject(value);\n    }\n}\n\nMonster.assignToNamespace('Monster.Constraints', AbstractConstraint);\nexport {Monster, AbstractConstraint}",
     "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\n\n/**\n * Operators allow you to link constraints together. for example, you can check whether a value is an object or an array. each operator has two operands that are linked together.\n * \n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass AbstractOperator extends AbstractConstraint {\n\n    /**\n     *\n     * @param {AbstractConstraint} operantA\n     * @param {AbstractConstraint} operantB\n     * @throws {TypeError} \"parameters must be from type AbstractConstraint\"\n     */\n    constructor(operantA, operantB) {\n        super();\n\n        if (!(operantA instanceof AbstractConstraint) || !(operantB instanceof AbstractConstraint)) {\n            throw new TypeError(\"parameters must be from type AbstractConstraint\")\n        }\n\n        this.operantA = operantA;\n        this.operantB = operantB;\n\n    }\n\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', AbstractOperator);\nexport {Monster, AbstractOperator}",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\nimport {AbstractOperator} from \"./abstractoperator.js\";\n\n/**\n * The AndOperator is used to link several contraints. The constraint is fulfilled if all constraints of the operators are fulfilled.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';\n * new Monster.Constraint.AndOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';\n * new AndOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass AndOperator extends AbstractOperator {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.all([this.operantA.isValid(value), this.operantB.isValid(value)]);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', AndOperator);\nexport {Monster, AndOperator}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\n\n/**\n * the invalid constraint allows an always invalid query to be performed. this contraint is mainly intended for testing.\n *\n * you can call the method via the monster namespace `new Monster.Constraint.Invalid()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';\n * new Monster.Constraint.Invalid().catch(()=>console.log(true));\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';\n * new Invalid().catch(()=>console.log(true));\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass Invalid extends AbstractConstraint {\n\n    /**\n     * this method return a rejected promise\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.reject(value);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', Invalid);\nexport {Monster, Invalid}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\nimport {isArray} from \"../types/is.js\";\n\n/**\n *\n *\n * you can call the method via the monster namespace `new Monster.Constraint.IsObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';\n * console.log(new Monster.Constraint.IsArray())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';\n * console.log(new IsArray())\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass IsArray extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        if(isArray(value)) {\n            return Promise.resolve(value);\n        }\n\n        return Promise.reject(value);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', IsArray);\nexport {Monster, IsArray}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\nimport {isObject} from \"../types/is.js\";\n\n/**\n *\n *\n * you can call the method via the monster namespace `new Monster.Constraint.IsObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';\n * console.log(new Monster.Constraint.IsObject())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';\n * console.log(new IsObject())\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass IsObject extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        if (isObject(value)) {\n            return Promise.resolve(value);\n        }\n\n        return Promise.reject(value);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', IsObject);\nexport {Monster, IsObject}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractOperator} from \"./abstractoperator.js\";\n\n/**\n * The OrOperator is used to link several constraints. The constraint is fulfilled if one of the constraints is fulfilled.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';\n * new Monster.Constraint.OrOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';\n * new OrOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass OrOperator extends AbstractOperator {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            let a, b;\n\n            self.operantA.isValid(value)\n                .then(function () {\n                    resolve();\n                }).catch(function () {\n                a = false;\n                /** b has already been evaluated and was not true */\n                if (b === false) {\n                    reject();\n                }\n            });\n\n            self.operantB.isValid(value)\n                .then(function () {\n                    resolve();\n                }).catch(function () {\n                b = false;\n                /** b has already been evaluated and was not true */\n                if (a === false) {\n                    reject();\n                }\n            });\n        });\n    }\n\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', OrOperator);\nexport {Monster, OrOperator}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\n\n/**\n * the valid constraint allows an always valid query to be performed. this contraint is mainly intended for testing.\n *\n * you can call the method via the monster namespace `new Monster.Constraint.Valid()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';\n * new Monster.Constraint.Valid().then(()=>console.log(true));\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';\n * new Valid().then(()=>console.log(true));\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass Valid extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.resolve(value);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', Valid);\nexport {Monster, Valid}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\n\n\n/**\n * this function uses crypt and returns a random number.\n *\n * you can call the method via the monster namespace `Monster.Math.random()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';\n * console.log(Monster.Math.random(1,10)) // ↦ 5\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';\n * console.log(random(1,10)) // ↦ 5\n * </script>\n * ```\n *\n * @param {number} min starting value of the definition set (default is 0)\n * @param {number} max end value of the definition set (default is 1000000000)\n * @returns {number}\n * @memberOf Monster/Math\n\n * @since 1.0.0\n * @copyright schukai GmbH\n */\nfunction random(min, max) {\n\n    if (min === undefined) {\n        min = 0;\n    }\n    if (max === undefined) {\n        max = MAX;\n    }\n\n    if (max < min) {\n        throw new Error(\"max must be greater than min\");\n    }\n\n    return Math.round(create(min, max));\n\n}\n\nvar MAX = 1000000000;\n\nMath.log2 = Math.log2 || function (n) {\n    return Math.log(n) / Math.log(2);\n};\n\n/**\n *\n * @param min\n * @param max\n * @returns {*}\n * @private\n */\nfunction create(min, max) {\n    var crypt;\n\n    if (typeof global !== \"undefined\") {\n        crypt = global?.['crypto'] || global?.['msCrypto'];\n    } else {\n        crypt = typeof crypto !== \"undefined\" ? crypto : undefined;\n    }\n\n    if (typeof crypt === \"undefined\") {\n        throw new Error(\"missing crypt\")\n    }\n\n    let rval = 0;\n    const range = max - min;\n    if (range < 2) {\n        return min;\n    }\n\n    const bitsNeeded = Math.ceil(Math.log2(range));\n    if (bitsNeeded > 53) {\n        throw  new Error(\"we cannot generate numbers larger than 53 bits.\");\n    }\n    const bytesNeeded = Math.ceil(bitsNeeded / 8);\n    const mask = Math.pow(2, bitsNeeded) - 1;\n\n    const byteArray = new Uint8Array(bytesNeeded);\n    crypt.getRandomValues(byteArray);\n\n    let p = (bytesNeeded - 1) * 8;\n    for (var i = 0; i < bytesNeeded; i++) {\n        rval += byteArray[i] * Math.pow(2, p);\n        p -= 8;\n    }\n\n    rval = rval & mask;\n\n    if (rval >= range) {\n        return create(min, max);\n    }\n\n    return min + rval;\n\n}\n\nMonster.assignToNamespace('Monster.Math', random);\nexport {Monster, random}\n\n\n\n\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\nimport {AbstractOperator} from \"./abstractoperator.js\";\n\n/**\n * The AndOperator is used to link several contraints. The constraint is fulfilled if all constraints of the operators are fulfilled.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';\n * new Monster.Constraint.AndOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';\n * new AndOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass AndOperator extends AbstractOperator {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.all([this.operantA.isValid(value), this.operantB.isValid(value)]);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', AndOperator);\nexport {Monster, AndOperator}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\n\n/**\n * the invalid constraint allows an always invalid query to be performed. this contraint is mainly intended for testing.\n *\n * you can call the method via the monster namespace `new Monster.Constraint.Invalid()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';\n * new Monster.Constraint.Invalid().catch(()=>console.log(true));\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';\n * new Invalid().catch(()=>console.log(true));\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass Invalid extends AbstractConstraint {\n\n    /**\n     * this method return a rejected promise\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.reject(value);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', Invalid);\nexport {Monster, Invalid}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\nimport {isArray} from \"../types/is.js\";\n\n/**\n *\n *\n * you can call the method via the monster namespace `new Monster.Constraint.IsObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';\n * console.log(new Monster.Constraint.IsArray())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';\n * console.log(new IsArray())\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass IsArray extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        if(isArray(value)) {\n            return Promise.resolve(value);\n        }\n\n        return Promise.reject(value);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', IsArray);\nexport {Monster, IsArray}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\nimport {isObject} from \"../types/is.js\";\n\n/**\n *\n *\n * you can call the method via the monster namespace `new Monster.Constraint.IsObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';\n * console.log(new Monster.Constraint.IsObject())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';\n * console.log(new IsObject())\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass IsObject extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        if (isObject(value)) {\n            return Promise.resolve(value);\n        }\n\n        return Promise.reject(value);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', IsObject);\nexport {Monster, IsObject}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractOperator} from \"./abstractoperator.js\";\n\n/**\n * The OrOperator is used to link several constraints. The constraint is fulfilled if one of the constraints is fulfilled.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';\n * new Monster.Constraint.OrOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';\n * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';\n * new OrOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass OrOperator extends AbstractOperator {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            let a, b;\n\n            self.operantA.isValid(value)\n                .then(function () {\n                    resolve();\n                }).catch(function () {\n                a = false;\n                /** b has already been evaluated and was not true */\n                if (b === false) {\n                    reject();\n                }\n            });\n\n            self.operantB.isValid(value)\n                .then(function () {\n                    resolve();\n                }).catch(function () {\n                b = false;\n                /** b has already been evaluated and was not true */\n                if (a === false) {\n                    reject();\n                }\n            });\n        });\n    }\n\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', OrOperator);\nexport {Monster, OrOperator}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, AbstractConstraint} from \"./abstract.js\";\n\n/**\n * the valid constraint allows an always valid query to be performed. this contraint is mainly intended for testing.\n *\n * you can call the method via the monster namespace `new Monster.Constraint.Valid()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';\n * new Monster.Constraint.Valid().then(()=>console.log(true));\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';\n * new Valid().then(()=>console.log(true));\n * </script>\n * ```\n *\n * @since 1.3.0\n * @copyright schukai GmbH\n * @memberOf Monster/Constraints\n */\nclass Valid extends AbstractConstraint {\n\n    /**\n     * this method return a promise containing the result of the check.\n     *\n     * @param {*} value\n     * @returns {Promise}\n     */\n    isValid(value) {\n        return Promise.resolve(value);\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Constraints', Valid);\nexport {Monster, Valid}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\n\n\n/**\n * this function uses crypt and returns a random number.\n *\n * you can call the method via the monster namespace `Monster.Math.random()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';\n * console.log(Monster.Math.random(1,10)) // ↦ 5\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';\n * console.log(random(1,10)) // ↦ 5\n * </script>\n * ```\n *\n * @param {number} min starting value of the definition set (default is 0)\n * @param {number} max end value of the definition set (default is 1000000000)\n * @returns {number}\n * @memberOf Monster/Math\n\n * @since 1.0.0\n * @copyright schukai GmbH\n */\nfunction random(min, max) {\n\n    if (min === undefined) {\n        min = 0;\n    }\n    if (max === undefined) {\n        max = MAX;\n    }\n\n    if (max < min) {\n        throw new Error(\"max must be greater than min\");\n    }\n\n    return Math.round(create(min, max));\n\n}\n\nvar MAX = 1000000000;\n\nMath.log2 = Math.log2 || function (n) {\n    return Math.log(n) / Math.log(2);\n};\n\n/**\n *\n * @param min\n * @param max\n * @returns {*}\n * @private\n */\nfunction create(min, max) {\n    var crypt;\n\n    if (typeof global !== \"undefined\") {\n        crypt = global?.['crypto'] || global?.['msCrypto'];\n    } else {\n        crypt = typeof crypto !== \"undefined\" ? crypto : undefined;\n    }\n\n    if (typeof crypt === \"undefined\") {\n        throw new Error(\"missing crypt\")\n    }\n\n    let rval = 0;\n    const range = max - min;\n    if (range < 2) {\n        return min;\n    }\n\n    const bitsNeeded = Math.ceil(Math.log2(range));\n    if (bitsNeeded > 53) {\n        throw  new Error(\"we cannot generate numbers larger than 53 bits.\");\n    }\n    const bytesNeeded = Math.ceil(bitsNeeded / 8);\n    const mask = Math.pow(2, bitsNeeded) - 1;\n\n    const byteArray = new Uint8Array(bytesNeeded);\n    crypt.getRandomValues(byteArray);\n\n    let p = (bytesNeeded - 1) * 8;\n    for (var i = 0; i < bytesNeeded; i++) {\n        rval += byteArray[i] * Math.pow(2, p);\n        p -= 8;\n    }\n\n    rval = rval & mask;\n\n    if (rval >= range) {\n        return create(min, max);\n    }\n\n    return min + rval;\n\n}\n\nMonster.assignToNamespace('Monster.Math', random);\nexport {Monster, random}\n\n\n\n\n",
     "/**\n * @license\n * Copyright 2021 schukai GmbH\n * SPDX-License-Identifier: AGPL-3.0-only or COMMERCIAL\n * @author schukai GmbH\n */\n\n'use strict';\n\nimport {Monster} from './namespace.js';\nimport './types/id.js';\nimport './types/is.js';\nimport './types/object.js';\nimport './types/observer.js';\nimport './types/observerlist.js';\nimport './types/proxyobserver.js';\nimport './types/version.js';\nimport './types/tokenlist.js';\nimport './types/validate.js';\nimport './types/version.js';\nimport './math/random.js';\nimport './util/clone.js';\nimport './util/comparator.js';\nimport './util/freeze.js';\nimport './constraints/abstract.js';\nimport './constraints/andoperator.js';\nimport './constraints/invalid.js';\nimport './constraints/isarray.js';\nimport './constraints/isobject.js';\nimport './constraints/abstractoperator.js';\nimport './constraints/oroperator.js';\nimport './constraints/valid.js';\n\nMonster.Util.deepFreeze(Monster);\nexport {Monster};",
-    "'use strict';\n\n/**\n * @namespace Monster\n * @author schukai GmbH\n */\n\n\n/**\n * namespace class objects form the basic framework of the namespace administration.\n *\n * all functions, classes and objects of the library hang within the namespace tree.\n *\n * via `obj instanceof Monster.Namespace` it is also easy to check whether it is an object or a namespace.\n *\n * @memberOf Monster\n \n * @copyright schukai GmbH\n * @since 1.0.0\n */\nclass Namespace {\n\n    /**\n     *\n     * @param namespace\n     * @param obj\n     */\n    constructor(namespace) {\n        if (namespace === undefined || typeof namespace !== 'string') {\n            throw new Error(\"namespace is not a string\")\n        }\n        this.namespace = namespace;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    getNamespace() {\n        return this.namespace;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.getNamespace();\n    }\n}\n\n/**\n *\n * @type {Namespace}\n * @global\n */\nexport const Monster = new Namespace(\"Monster\");\n\n\n/**\n *\n */\nassignToNamespace('Monster', assignToNamespace);\n\n/**\n * To expand monster, the `Monster.assignToNamespace()` method can be used. \n *\n * you must call the method in the monster namespace. this allows you to mount your own classes, objects and functions into the namespace.\n * \n * To avoid confusion and so that you do not accidentally overwrite existing functions, you should use the custom namespace `X`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/namespace.js';\n * function hello() {\n *            console.log('Hello World!');\n *        }\n * Monster.assignToNamespace(\"Monster.X\",hello)\n * Monster.X.hello(); // ↦ Hello World!\n * </script>\n * \n * ```\n *\n * @param ns\n * @param obj\n * @memberOf Monster\n \n */\nfunction assignToNamespace(ns, ...obj) {\n    let current = namespaceFor(ns.split(\".\"));\n\n    for (let i = 0, l = obj.length; i < l; i++) {\n        current[objectName(obj[i])] = obj[i];\n    }\n}\n\n/**\n *\n * @param fn\n * @returns {string|*}\n * @private\n */\nfunction objectName(fn) {\n    try {\n\n        if (typeof fn !== 'function') {\n            throw  new Error(\"the first argument is not a function or class.\");\n        }\n\n        if (fn.hasOwnProperty('name')) {\n            return fn.name;\n        }\n\n        if (\"function\" === typeof fn.toString) {\n            let s = fn.toString();\n            let f = s.match(/^\\s*function\\s+([^\\s(]+)/);\n            if (Array.isArray(f) && typeof f[1] === 'string') {\n                return f[1];\n            }\n            let c = s.match(/^\\s*class\\s+([^\\s(]+)/);\n            if (Array.isArray(c) && typeof c[1] === 'string') {\n                return c[1];\n            }\n        }\n\n    } catch (e) {\n        throw new Error(\"exception \" + e);\n    }\n\n    throw  new Error(\"the name of the class or function cannot be resolved.\");\n}\n\n/**\n *\n * @param parts\n * @returns {Namespace}\n * @private\n */\nfunction namespaceFor(parts) {\n    var space = Monster, ns = 'Monster';\n\n    for (let i = 0; i < parts.length; i++) {\n\n        if (\"Monster\" === parts[i]) {\n            continue;\n        }\n\n        ns += '.' + parts[i];\n\n        if (!space.hasOwnProperty(parts[i])) {\n            space[parts[i]] = new Namespace(ns);\n        }\n\n        space = space[parts[i]];\n    }\n\n    return space;\n}\n\n\nexport {assignToNamespace}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {random} from '../math/random.js';\nimport '../types/object.js';\n\nlet internalCounter = 0;\n\n/**\n * id class\n *\n * you can call the method via the monster namespace `new Monster.Types.ID()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';\n * console.log(new Monster.Types.ID())\n * console.log(new Monster.Types.ID())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';\n * console.log(new ID())\n * console.log(new ID())\n * </script>\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass ID extends Monster.Types.Object {\n\n    /**\n     * create new object\n     */\n    constructor() {\n        super();\n\n        internalCounter += 1;\n\n        this.id = global.btoa(random(1, 10000))\n            .replace(/=/g, '')\n            /** No numbers at the beginning of the ID, because of possible problems with DOM */\n            .replace(/^[0-9]+/, 'X') + internalCounter;\n    }\n\n    toString() {\n        return this.id;\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Types', ID);\nexport {Monster, ID}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\n\n/**\n * with this function you can check if a value is iterable\n *\n * you can call the method via the monster namespace `Monster.Types.isPrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isIterable(null)) // ↦ false\n * console.log(Monster.Types.isIterable('hello')) // ↦ true\n * console.log(Monster.Types.isIterable([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(isIterable(null))  // ↦ false\n * console.log(isIterable('hello'))  // ↦ true\n * console.log(isIterable([]))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isIterable(value) {\n    if (value === undefined) return false;\n    if (value === null) return false;\n    return typeof value?.[Symbol.iterator] === 'function';\n}\n\n\n/**\n * checks whether the value passed is a primitive (string, number, boolean, NaN, undefined, null or symbol)\n *\n * you can call the method via the monster namespace `Monster.Types.isPrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isPrimitive('2')) // ↦ false\n * console.log(Monster.Types.isPrimitive([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(isPrimitive('2'))  // ↦ true\n * console.log(isPrimitive([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isPrimitive(value) {\n    var type;\n\n    if (value === undefined || value === null || value === NaN) {\n        return true;\n    }\n\n    type = typeof value;\n\n    if (type === 'string' || type === 'number' || type === 'boolean' || type === 'symbol') {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a boolean\n *\n * you can call the method via the monster namespace `Monster.Types.isBoolean()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isBoolean('2')) // ↦ false\n * console.log(Monster.Types.isBoolean([])) // ↦ false\n * console.log(Monster.Types.isBoolean(true)) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(isBoolean('2'))  // ↦ false\n * console.log(isBoolean([]))  // ↦ false\n * console.log(isBoolean(2>4))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isBoolean(value) {\n\n    if (value === true || value === false) {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a string\n *\n * you can call the method via the monster namespace `Monster.Types.isString()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isString('2')) // ↦ true\n * console.log(Monster.Types.isString([])) // ↦ false\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(isString('2'))  // ↦ true\n * console.log(isString([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isString(value) {\n    if (value === undefined || typeof value !== 'string') {\n        return false;\n    }\n    return true;\n}\n\n/**\n * checks whether the value passed is a object\n *\n * you can call the method via the monster namespace `Monster.Types.isObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isObject('2')) // ↦ false\n * console.log(Monster.Types.isObject([])) // ↦ false\n * console.log(Monster.Types.isObject({})) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(isObject('2'))  // ↦ false\n * console.log(isObject([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isObject(value) {\n\n    if (isArray(value)) return false;\n    if (isPrimitive(value)) return false;\n\n    if (typeof value === 'object') {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a array\n *\n * you can call the method via the monster namespace `Monster.Types.isArray()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isArray('2')) // ↦ false\n * console.log(Monster.Types.isArray([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(isArray('2'))  // ↦ false\n * console.log(isArray([]))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isArray(value) {\n    if (Array.isArray(value)) {\n        return true;\n    }\n    return false;\n}\n\n/**\n * checks whether the value passed is a function\n *\n * you can call the method via the monster namespace `Monster.Types.isFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isFunction(()=>{})) // ↦ true\n * console.log(Monster.Types.isFunction('2')) // ↦ false\n * console.log(Monster.Types.isFunction([])) // ↦ false\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';\n * console.log(isFunction(()=>{})) // ↦ true\n * console.log(isFunction('2'))  // ↦ false\n * console.log(isFunction([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isFunction(value) {\n    if (isArray(value)) return false;\n    if (isPrimitive(value)) return false;\n\n    if (typeof value === 'function') {\n        return true;\n    }\n\n    return false;\n\n}\n\nMonster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable);\nexport {Monster, isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\n\n\n/**\n * This is the base class from which all monster classes are derived.\n *\n * you can call the method via the monster namespace `new Monster.Types.Object()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';\n * console.log(new Monster.Types.Object())\n * console.log(new Monster.Types.Object())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';\n * console.log(new Object())\n * console.log(new Object())\n * </script>\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass Object {\n\n    /**\n     *\n     */\n    constructor() {\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return JSON.stringify(this);\n    };\n\n\n}\n\nMonster.assignToNamespace('Monster.Types', Object);\nexport {Monster, Object}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {TokenList} from '../types/tokenlist.js';\nimport {isObject} from '../types/is.js';\nimport '../types/object.js';\n\n/**\n * an observer manages a callback function\n *\n * you can call the method via the monster namespace `new Monster.Types.Observer()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';\n * console.log(new Monster.Types.Observer())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';\n * console.log(Observer())\n * </script>\n * ```\n *\n * the update method is called with the subject object as this pointer. for this reason the callback should not\n * be an arrow function, because it gets the this pointer of its own context.\n *\n * ```\n * <script>\n * Observer(()=>{\n *     // this is not subject\n * })\n *\n * Observer(function() {\n *     // this is subject\n * })\n * </script>\n * ```\n *\n * additional arguments can be passed to the callback. to do this, simply specify them.\n *\n * ```\n * <script>\n * Observer(function(a, b, c) {\n *     console.log(a, b, c); // ↦ \"a\", 2, true \n * }, \"a\", 2, true)\n * </script>\n * ```\n * \n * the callback function must have as many parameters as arguments are given.\n *\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass Observer extends Monster.Types.Object {\n\n    /**\n     *\n     * @param {function} callback\n     * @param {*} args\n     */\n    constructor(callback, ...args) {\n        super();\n\n        if (typeof callback !== 'function') {\n            throw new Error(\"observer callback must be a function\")\n        }\n\n        this.callback = callback;\n        this.arguments = args;\n        this.tags = new TokenList;\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {Observer}\n     */\n    addTag(tag) {\n        this.tags.add(tag);\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {Observer}\n     */\n    removeTag(tag) {\n        this.tags.remove(tag);\n        return this;\n    }\n\n    /**\n     *\n     * @returns {Array}\n     */\n    getTags() {\n        return this.tags.entries()\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {boolean}\n     */\n    hasTag(tag) {\n        return this.tags.contains(tag)\n    }\n\n    /**\n     *\n     * @param {object} subject\n     * @returns {Promise}\n     */\n    update(subject) {\n        let self = this;\n\n        return new Promise(function (resolve, reject) {\n            if (!isObject(subject)) {\n                reject(\"subject must be an object\");\n            }\n            let result = self.callback.apply(subject, self.arguments);\n            resolve(result);\n\n        });\n\n    };\n\n}\n\nMonster.assignToNamespace('Monster.Types', Observer);\nexport {Monster, Observer}\n\n\n\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport '../types/object.js';\n\n/**\n * With the help of the ObserverList class, observer can be managed.\n *\n * you can call the method via the monster namespace `new Monster.Types.ObserverList()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';\n * console.log(new Monster.Types.ObserverList()) \n * console.log(new Monster.Types.ObserverList()) \n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';\n * console.log(ObserverList())\n * console.log(ObserverList())\n * </script>\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass ObserverList extends Monster.Types.Object {\n\n    constructor() {\n        super();\n        this.observers = [];\n    }\n\n    attach(observer) {\n        checkIsObserver(observer);\n        this.observers.push(observer);\n        return this;\n    };\n\n    detach(observer) {\n        checkIsObserver(observer);\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            if (this.observers[i] === observer) {\n                this.observers.splice(i, 1);\n            }\n        }\n\n        return this;\n    };\n\n    contains(observer) {\n        checkIsObserver(observer);\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            if (this.observers[i] === observer) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    notify(subject) {\n\n        let pomises = []\n\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            pomises.push(this.observers[i].update(subject));\n        }\n\n        return Promise.all(pomises);\n    };\n\n}\n\n/**\n * \n * @param {Monster.Types.Observer} observer\n * @returns {boolean}\n * @private\n */\nfunction checkIsObserver(observer) {\n    if (!(observer instanceof Monster.Types.Observer)) {\n        throw new Error(\"argument must be instance of observer\")\n    }\n    return true;\n}\n\nMonster.assignToNamespace('Monster.Types', ObserverList);\nexport {Monster, ObserverList}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {Object} from '../types/object.js';\nimport {validateObject} from \"./validate.js\";\nimport {ObserverList} from \"./observerlist.js\";\nimport {Observer} from \"./observer.js\";\nimport {isObject, isArray} from \"./is.js\";\n\n/**\n * store proxy objects\n *\n * @type {WeakSet<object>}\n */\nvar proxySet = new WeakSet();\n\n// language=JavaScript\n/**\n * an observer manages a callback function\n *\n * you can call the method via the monster namespace `new Monster.Types.Observer()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';\n * console.log(new Monster.Types.ProxyObserver())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';\n * console.log(new ProxyObserver())\n * </script>\n * ```\n *\n * with the ProxyObserver you can attach observer for observation. with each change at the object to be observed an update takes place.\n *\n * this also applies to nested objects.\n *\n * ```javascript\n * const o = new Observer(function () {\n *    if (isObject(this) && this instanceof ProxyObserver) {\n *        // do something (this ist ProxyObserver)\n *        const subject = this.getSubject();\n *    }\n * )\n * \n * let realSubject = {\n *    a: {\n *        b: {\n *            c: true\n *        },\n *        d: 5\n *    }\n * \n * \n * const p = new ProxyObserver(realSubject);\n * p.attachObserver(o);\n * const s = p.getSubject();\n * s.a.b.c = false;\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass ProxyObserver extends Object {\n\n    /**\n     *\n     * @param {object} object\n     */\n    constructor(object) {\n        super();\n        validateObject(object);\n        this.realSubject = object\n        this.subject = new Proxy(object, getHandler.call(this));\n        proxySet.add(this.subject);\n        this.observers = new ObserverList;\n    }\n\n    /**\n     * get the real object\n     *\n     * changes to this object are not noticed by the observers, so you can make a large number of changes and inform the observers later.\n     *\n     * @returns {object}\n     */\n    getSubject() {\n        return this.subject\n    }\n\n    /**\n     * get the proxied object\n     *\n     * @returns {object}\n     */    getRealSubject() {\n        return this.realSubject\n    }\n\n    /**\n     * attach a new observer\n     *\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    attachObserver(observer) {\n        this.observers.attach(observer)\n        return this;\n    }\n\n    /**\n     * detach a observer\n     *\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    detachObserver(observer) {\n        this.observers.detach(observer)\n        return this;\n    }\n\n    /**\n     * notify all observer\n     *\n     * @returns {ProxyObserver}\n     */\n    notifyObservers() {\n        this.observers.notify(this);\n        return this;\n    }\n\n    /**\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    containsObserver(observer) {\n        return this.observers.contains(observer)\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Types', ProxyObserver);\nexport {Monster, ProxyObserver}\n\n/**\n *\n * @returns {{defineProperty: (function(*=, *=, *=): *), setPrototypeOf: (function(*, *=): boolean), set: (function(*, *, *, *): boolean), get: ((function(*=, *=, *=): (undefined))|*), deleteProperty: ((function(*, *): (boolean))|*)}}\n * @private\n * @see {@link https://gitlab.schukai.com/-/snippets/49}\n */\nfunction getHandler() {\n\n    const proxy = this;\n\n    // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots\n    const handler = {\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n        get: function (target, property, receiver) {\n            const prop = target?.[property];\n\n            // return if property not found\n            if (prop === undefined) {\n                return undefined;\n            }\n\n            // set value as proxy if object or array\n            if (isArray(prop) || isObject(prop) && !proxySet.has(prop)) {\n                target[property] = new Proxy(prop, handler);\n                proxySet.add(prop);\n            }\n\n            return target[property];\n\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver \n        set: function (target, property, value, receiver) {\n            target[property] = value\n            proxy.observers.notify(proxy);\n            return true;\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n        deleteProperty: function (target, property) {\n            if (property in target) {\n                delete target[property];\n                proxy.observers.notify(proxy);\n                return true;\n            }\n            return false;\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n        defineProperty: function (target, property, descriptor) {\n            let result = Reflect.defineProperty(target, property, descriptor);\n            proxy.observers.notify(proxy);\n            return parseURLToResultingURLRecord();\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n        setPrototypeOf: function (target, prototype) {\n            let result = Reflect.setPrototypeOf(object1, prototype);\n            proxy.observers.notify(proxy);\n            return result;\n        }\n\n    };\n\n\n    return handler;\n}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {Object} from '../types/object.js';\nimport {isString, isIterable} from '../types/is.js';\nimport {validateString, validateFunction} from '../types/validate.js';\n\n/**\n * A tokenlist allows you to manage tokens (individual character strings such as css classes in an attribute string).\n *\n * The tokenlist offers various functions to manipulate values. For example, you can add, remove or replace a class in a CSS list.\n *\n * you can call the method via the monster namespace `new Monster.Types.TokenList()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';\n * console.log(new Monster.Types.TokenList(\"myclass row\"))\n * console.log(new Monster.Types.TokenList(\"myclass row\"))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';\n * console.log(new TokenList(\"myclass row\"))\n * console.log(new TokenList(\"myclass row\"))\n * </script>\n * ```\n *\n * This class implements the [iteration protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols).\n *\n * ```\n * console.log(typeof new TokenList(\"myclass row\")[Symbol.iterator]); // \"function\"\n * ```\n *\n *\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass TokenList extends Object {\n\n    /**\n     *\n     * @param {array|string|iteratable} init\n     */\n    constructor(init) {\n        super();\n        this.tokens = new Set();\n\n        if (typeof init !== \"undefined\") {\n            this.add(init);\n        }\n\n    }\n\n    /**\n     * Iterator protocol\n     *\n     * @returns {Symbol.iterator}\n     */\n    getIterator() {\n        return this[Symbol.iterator]();\n    }\n\n    /**\n     * Iterator\n     *\n     * @returns {{next: ((function(): ({value: *, done: boolean}))|*)}}\n     */\n    [Symbol.iterator]() {\n        // Use a new index for each iterator. This makes multiple\n        // iterations over the iterable safe for non-trivial cases,\n        // such as use of break or nested looping over the same iterable.\n        let index = 0;\n        let entries = this.entries()\n\n        return {\n            next: () => {\n                if (index < entries.length) {\n                    return {value: entries?.[index++], done: false}\n                } else {\n                    return {done: true}\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns true if it contains token, otherwise false\n     *\n     * ```\n     * new TokenList(\"start middle end\").contains('start')); // ↦ true\n     * new TokenList(\"start middle end\").contains('end')); // ↦ true\n     * new TokenList(\"start middle end\").contains('xyz')); // ↦ false\n     * new TokenList(\"start middle end\").contains(['end','start','middle'])); // ↦ true\n     * new TokenList(\"start middle end\").contains(['end','start','xyz'])); // ↦ false\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {boolean}\n     */\n    contains(value) {\n        if (isString(value)) {\n            value = value.trim()\n            let counter = 0;\n            value.split(\" \").forEach(token => {\n                if (this.tokens.has(token.trim()) === false) return false;\n                counter++\n            })\n            return counter > 0 ? true : false;\n        }\n\n        if (isIterable(value)) {\n            let counter = 0;\n            for (let token of value) {\n                validateString(token);\n                if (this.tokens.has(token.trim()) === false) return false;\n                counter++\n            }\n            return counter > 0 ? true : false;\n        }\n\n        return false;\n    }\n\n    /**\n     * add tokens\n     *\n     * ```\n     * new TokenList().add(\"abc xyz\").toString(); // ↦ \"abc xyz\"\n     * new TokenList().add([\"abc\",\"xyz\"]).toString(); // ↦ \"abc xyz\"\n     * new TokenList().add(undefined); // ↦ add nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {TokenList}\n     * @throws {TypeError} unsupported value\n     */\n    add(value) {\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                this.tokens.add(token.trim());\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                validateString(token);\n                this.tokens.add(token.trim());\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n    }\n\n    /**\n     * remove all tokens\n     *\n     * @returns {TokenList}\n     */\n    clear() {\n        this.tokens.clear();\n        return this;\n    }\n\n    /**\n     * Removes token\n     *\n     * ```\n     * new TokenList(\"abc xyz\").remove(\"xyz\").toString(); // ↦ \"abc\"\n     * new TokenList(\"abc xyz\").remove([\"xyz\"]).toString(); // ↦ \"abc\"\n     * new TokenList(\"abc xyz\").remove(undefined); // ↦ remove nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {TokenList}\n     * @throws {TypeError} unsupported value\n     */\n    remove(value) {\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                this.tokens.delete(token.trim());\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                validateString(token);\n                this.tokens.delete(token.trim());\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n    }\n\n    /**\n     * this method replaces a token with a new token.\n     *\n     * if the passed token exists, it is replaced with newToken and TokenList is returned.\n     * if the token does not exist, newToken is not set and TokenList is returned.\n     *\n     * @param {string} token\n     * @param {string} newToken\n     * @returns {TokenList}\n     */\n    replace(token, newToken) {\n        validateString(token);\n        validateString(newToken);\n        if (!this.contains(token)) {\n            return this;\n        }\n\n        let a = Array.from(this.tokens)\n        let i = a.indexOf(token);\n        if (i === -1) return this;\n\n        a.splice(i, 1, newToken);\n        this.tokens = new Set();\n        this.add(a);\n\n        return this;\n\n\n    }\n\n    /**\n     * Removes token from string. If token doesn't exist it's added.\n     * \n     * ```\n     * new TokenList(\"abc def ghi\").toggle(\"def xyz\").toString(); // ↦ \"abc ghi xyz\"\n     * new TokenList(\"abc def ghi\").toggle([\"abc\",\"xyz\"]).toString(); // ↦ \"def ghi xyz\"\n     * new TokenList().toggle(undefined); // ↦ nothing\n     * ```\n     * \n     * @param {array|string|iteratable} value\n     * @returns {boolean}\n     * @throws {TypeError} unsupported value\n     */\n    toggle(value) {\n\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                toggleValue.call(this, token);\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                toggleValue.call(this, token);\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n\n    }\n\n    /**\n     * returns an array with all tokens\n     *\n     * @returns {array}\n     */\n    entries() {\n        return Array.from(this.tokens)\n    }\n\n    /**\n     * executes the provided function with each value of the set\n     *\n     * @param {function} callback\n     * @returns {TokenList}\n     */\n    forEach(callback) {\n        validateFunction(callback);\n        this.tokens.forEach(callback);\n        return this;\n    }\n\n    /**\n     * returns the individual tokens separated by a blank character\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.entries().join(' ');\n    }\n\n}\n\n/**\n * @private\n * @param token\n * @returns {toggleValue}\n * @throws {Error} must be called with TokenList.call\n */\nfunction toggleValue(token) {\n    if (!(this instanceof TokenList)) throw Error(\"must be called with TokenList.call\")\n    validateString(token);\n    token = token.trim();\n    if (this.contains(token)) {\n        this.remove(token);\n        return this;\n    }\n    this.add(token);\n    return this;\n}\n\nMonster.assignToNamespace('Monster.Types', TokenList);\nexport {Monster, TokenList}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable} from '../types/is.js';\n\n/**\n * this method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validatePrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateIterable('2')) // ↦ TypeError\n * console.log(Monster.Types.validateIterable([])) // ↦ undefined\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(validateIterable('2'))  // ↦ TypeError\n * console.log(validateIterable([]))  // ↦ undefined\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a primitive\n * @see {@link isPrimitive}\n * @see {@link Monster/Types/isPrimitive}\n * @see {@link Monster/Types#isPrimitive}\n */\nfunction validateIterable(value) {\n    if (!isIterable(value)) {\n        throw new TypeError('value is not iterable')\n    }\n}\n\n/**\n * this method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validatePrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validatePrimitive('2')) // ↦ undefined\n * console.log(Monster.Types.validatePrimitive([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(validatePrimitive('2'))  // ↦ undefined\n * console.log(validatePrimitive([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a primitive\n * @see {@link isPrimitive}\n * @see {@link Monster/Types/isPrimitive}\n * @see {@link Monster/Types#isPrimitive}\n */\nfunction validatePrimitive(value) {\n    if (!isPrimitive(value)) {\n        throw new TypeError('value is not a primitive')\n    }\n}\n\n/**\n * this method checks if the type matches the boolean type. this function is identical to isBoolean() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateBoolean()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateBoolean(true)) // ↦ undefined\n * console.log(Monster.Types.validateBoolean('2')) // ↦ TypeError\n * console.log(Monster.Types.validateBoolean([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(validateBoolean(false))  // ↦ undefined\n * console.log(validateBoolean('2'))  // ↦ TypeError\n * console.log(validateBoolean([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n\n * @throws {TypeError}  value is not primitive\n */\nfunction validateBoolean(value) {\n    if (!isBoolean(value)) {\n        throw new TypeError('value is not a boolean')\n    }\n}\n\n/**\n * this method checks if the type matches the string type. this function is identical to isString() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateString()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateString('2')) // ↦ undefined\n * console.log(Monster.Types.validateString([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(validateString('2'))  // ↦ undefined\n * console.log(validateString([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n\n * @throws {TypeError} value is not a string\n */\nfunction validateString(value) {\n    if (!isString(value)) {\n        throw new TypeError('value is not a string')\n    }\n}\n\n\n/**\n * this method checks if the type matches the object type. this function is identical to isObject() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateObject({})) // ↦ undefined\n * console.log(Monster.Types.validateObject('2')) // ↦ TypeError\n * console.log(Monster.Types.validateObject([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(validateObject({}))  // ↦ undefined\n * console.log(validateObject('2'))  // ↦ TypeError\n * console.log(validateObject([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a object\n */\nfunction validateObject(value) {\n    if (!isObject(value)) {\n        throw new TypeError('value is not a object')\n    }\n}\n\n/**\n * this method checks if the type matches the array type. this function is identical to isArray() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateArray()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateArray('2')) // ↦ TypeError\n * console.log(Monster.Types.validateArray([])) // ↦ undefined\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(validateArray('2'))  // ↦ TypeError\n * console.log(validateArray([]))  // ↦ undefined\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a array\n */\nfunction validateArray(value) {\n    if (!isArray(value)) {\n        throw new TypeError('value is not not a array')\n    }\n}\n\n/**\n * this method checks if the type matches the function type. this function is identical to isFunction() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateFunction(()=>{})) // ↦ undefined\n * console.log(Monster.Types.validateFunction('2')) // ↦ TypeError\n * console.log(Monster.Types.validateFunction([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';\n * console.log(validateFunction(()=>{})) // ↦ undefined\n * console.log(validateFunction('2'))  // ↦ TypeError\n * console.log(validateFunction([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a function\n */\nfunction validateFunction(value) {\n    if (!isFunction(value)) {\n        throw new TypeError('value is not a function')\n    }\n}\n\nMonster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable);\nexport {\n    Monster,\n    validatePrimitive,\n    validateBoolean,\n    validateString,\n    validateObject,\n    validateArray,\n    validateFunction,\n    validateIterable\n}\n",
-    "'use strict';\n\nimport {Monster} from '../namespace.js';\nimport '../types/object.js';\n\n/**\n * the version object contains a sematic version number\n *\n * you can create the object via the monster namespace `new Monster.Types.Version()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';\n * console.log(new Monster.Types.Version('1.2.3')) // ↦ 1.2.3\n * console.log(new Monster.Types.Version('1')) // ↦ 1.0.0\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';\n * console.log(new Version('1.2.3')) // ↦ 1.2.3\n * console.log(new Version('1')) // ↦ 1.0.0\n * </script>\n * ```\n *\n * some examples\n *\n * ```\n * new Monster.Types.Version('1.0.0') // 1.0.0\n * new Monster.Types.Version(1)  // 1.0.0\n * new Monster.Types.Version(1, 0, 0) // 1.0.0\n * new Monster.Types.Version('1.2.3', 4, 5) // 1.4.5\n * ```\n *\n * @since 1.0.0\n * @author schukai GmbH\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass Version extends Monster.Types.Object {\n\n    /**\n     *\n     * @param major\n     * @param minor\n     * @param patch\n     * @throws major is not a number\n     * @throws minor is not a number\n     * @throws patch is not a number\n     */\n    constructor(major, minor, patch) {\n        super();\n\n        if (typeof major === 'string' && minor === undefined && patch === undefined) {\n\n            let parts = major.toString().split('.');\n            major = parseInt(parts[0] || 0);\n            minor = parseInt(parts[1] || 0);\n            patch = parseInt(parts[2] || 0);\n        }\n\n        if (major === undefined) {\n            throw  new Error(\"major version is undefined\");\n        }\n\n        if (minor === undefined) {\n            minor = 0;\n        }\n\n        if (patch === undefined) {\n            patch = 0;\n        }\n\n        this.major = parseInt(major);\n        this.minor = parseInt(minor);\n        this.patch = parseInt(patch);\n\n        if (isNaN(this.major)) {\n            throw  new Error(\"major is not a number\");\n        }\n\n        if (isNaN(this.minor)) {\n            throw  new Error(\"minor is not a number\");\n        }\n\n        if (isNaN(this.patch)) {\n            throw  new Error(\"patch is not a number\");\n        }\n\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.major + '.' + this.minor + '.' + this.patch;\n    }\n\n    /**\n     * returns 0 if equal, -1 if the object version is less and 1 if greater\n     * then the compared version\n     *\n     * @param {string|Version} version Version to compare\n     * @returns {number}\n     */\n    compareTo(version) {\n\n        if (version instanceof Version) {\n            version = version.toString();\n        }\n\n        if (typeof version !== 'string') {\n            throw  new Error(\"type exception\");\n        }\n\n        if (version === this.toString()) {\n            return 0;\n        }\n\n        let a = [this.major, this.minor, this.patch];\n        let b = version.split('.');\n        let len = Math.max(a.length, b.length);\n\n        for (let i = 0; i < len; i += 1) {\n            if ((a[i] && !b[i] && parseInt(a[i]) > 0) || (parseInt(a[i]) > parseInt(b[i]))) {\n                return 1;\n            } else if ((b[i] && !a[i] && parseInt(b[i]) > 0) || (parseInt(a[i]) < parseInt(b[i]))) {\n                return -1;\n            }\n        }\n\n        return 0;\n    };\n\n}\n\nMonster.assignToNamespace('Monster.Types', Version);\n\n\nlet monsterVersion;\n\n/**\n * Version of monster\n *\n * you can call the method via the monster namespace `Monster.getVersion()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';\n * console.log(Monster.getVersion())\n * console.log(Monster.getVersion())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';\n * console.log(getVersion())\n * console.log(getVersion())\n * </script>\n * ```\n *\n * @returns {Monster.Types.Version}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @author schukai GmbH\n * @memberOf Monster\n */\nfunction getVersion() {\n    if (monsterVersion instanceof Version) {\n        return monsterVersion;\n    }\n    /**#@+ dont touch, replaced by make with package.json version */\n    monsterVersion = new Version('1.3.0')\n    /**#@-*/\n    return monsterVersion;\n\n}\n\nMonster.assignToNamespace('Monster', getVersion);\nexport {Monster, Version, getVersion}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {isObject, isFunction, isPrimitive, isArray} from '../types/is.js';\n\n\n/**\n * with this function, objects can be cloned.\n * the entire object tree is run through.\n *\n * Proxy, Element, HTMLDocument and DocumentFragment instances are not cloned.\n * Global objects such as windows are also not cloned,\n *\n * If an object has a method `getClone()`, this method is used to create the clone.\n *\n * you can call the method via the monster namespace `Monster.Util.clone()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';\n * console.log(Monster.Util.clone({}))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';\n * console.log(clone({}))\n * </script>\n * ```\n *\n *\n * @param {*} obj object to be cloned\n * @returns {*}\n *\n * @since 1.0.0\n * @memberOf Monster/Util\n * @copyright schukai GmbH\n * @throws {Error} unable to clone obj! its type isn't supported.\n */\nfunction clone(obj) {\n\n    // typeof null results in 'object'.  https://2ality.com/2013/10/typeof-null.html\n    if (null === obj) {\n        return obj;\n    }\n\n    // Handle the two simple types, null and undefined\n    if (isPrimitive(obj)) {\n        return obj;\n    }\n    \n    // Handle the two simple types, null and undefined\n    if (isFunction(obj)) {\n        return obj;\n    }\n\n    // Handle Array\n    if (isArray(obj)) {\n        let copy = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            copy[i] = clone(obj[i]);\n        }\n\n        return copy;\n    }\n\n    if (isObject(obj)) {\n\n\n        // Handle Date\n        if (obj instanceof Date) {\n            let copy = new Date();\n            copy.setTime(obj.getTime());\n            return copy;\n        }\n\n        /** Do not clone DOM nodes */\n        if (typeof Element !== 'undefined' && obj instanceof Element) return obj;\n        if (typeof HTMLDocument !== 'undefined' && obj instanceof HTMLDocument) return obj;\n        if (typeof DocumentFragment !== 'undefined' && obj instanceof DocumentFragment) return obj;\n\n        /** Do not clone global objects */\n        if (typeof globalContext !== 'undefined' && obj === globalContext) return obj;\n        if (typeof window !== 'undefined' && obj === window) return obj;\n        if (typeof document !== 'undefined' && obj === document) return obj;\n        if (typeof navigator !== 'undefined' && obj === navigator) return obj;\n        if (typeof JSON !== 'undefined' && obj === JSON) return obj;\n\n        // Handle Proxy-Object\n        try {\n            // try/catch because possible: TypeError: Function has non-object prototype 'undefined' in instanceof check\n            if (obj instanceof Proxy) {\n                return obj;\n            }\n        } catch (e) {\n        }\n\n        return cloneObject(obj)\n\n    }\n\n    throw new Error(\"unable to clone obj! its type isn't supported.\");\n}\n\n/**\n *\n * @param {object} obj\n * @returns {object}\n * @private\n */\nfunction cloneObject(obj) {\n    var copy;\n\n    /** Object has clone method */\n    if (typeof obj.hasOwnProperty('getClone') && obj.getClone === 'function') {\n        return obj.getClone();\n    }\n\n    copy = {};\n    if (typeof obj.constructor === 'function' &&\n        typeof obj.constructor.call === 'function') {\n        copy = new obj.constructor();\n    }\n\n    for (let key in obj) {\n\n        if (!obj.hasOwnProperty(key)) {\n            continue;\n        }\n\n        if (Monster.Types.isPrimitive(obj[key])) {\n            copy[key] = obj[key];\n            continue;\n        }\n\n        copy[key] = clone(obj[key]);\n    }\n\n    return copy;\n}\n\nMonster.assignToNamespace('Monster.Util', clone);\nexport {Monster, clone}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, Object} from '../types/object.js';\nimport {isFunction} from '../types/is.js';\n\n/**\n * the comparator allows a comparison function to be abstracted.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';\n * console.log(new Monster.Util.Comparator())\n * console.log(new Monster.Util.Comparator())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';\n * console.log(new Util())\n * console.log(new Util())\n * </script>\n * ```\n * \n * the following are some examples of the application of the class.\n *\n * ```\n * new Comparator().lessThanOrEqual(2, 5) // ↦ true\n * new Comparator().greaterThan(4, 2) // ↦ true\n * new Comparator().equal(4, 4) // ↦ true\n * new Comparator().equal(4, 5) // ↦ false\n * ```\n * \n * you can also pass your own comparison function, and thus define the comparison function.\n * \n * ```\n * new Comparator(function (a, b) {\n *      if (a.v === b.v) return 0;\n *         return a.v < b.v ? -1 : 1;\n *      }).equal({v: 2}, {v: 2});  // ↦ true\n * ```\n *\n * @since 1.3.0\n * @memberOf Monster/Util\n */\nclass Comparator extends Object {\n\n    /**\n     * create new comparator\n     *\n     * @param {function} callback\n     * @throw {TypeError} \"unsupported type\"\n     * @throw {TypeError} \"impractical comparison\"\n     */\n    constructor(callback) {\n        super();\n\n        if (isFunction(callback)) {\n            this.compare = callback\n        } else if (callback !== undefined) {\n            throw new TypeError(\"unsupported type\")\n        } else {\n            // default compare function\n            this.compare = function (a, b) {\n\n                if (typeof a !== typeof b) {\n                    throw new TypeError(\"impractical comparison\")\n                }\n\n                if (a === b) {\n                    return 0;\n                }\n                return a < b ? -1 : 1;\n            };\n        }\n\n    }\n\n    /**\n     * changes the order of the operators\n     *\n     * @return {Comparator}\n     */\n    reverse() {\n        const original = this.compare;\n        this.compare = (a, b) => original(b, a);\n        return this;\n    }\n\n    /**\n     * Checks if two variables are equal.\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    equal(a, b) {\n        return this.compare(a, b) === 0;\n    }\n\n\n    /**\n     * Checks if variable `a` is greater than `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    greaterThan(a, b) {\n        return this.compare(a, b) > 0;\n    }\n\n    /**\n     * Checks if variable `a` is greater than or equal to `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    greaterThanOrEqual(a, b) {\n        return this.greaterThan(a, b) || this.equal(a, b);\n    }\n\n    /**\n     * Checks if variable `a` is less than or equal to `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    lessThanOrEqual(a, b) {\n        return this.lessThan(a, b) || this.equal(a, b);\n    }\n\n    /**\n     * Checks if variable a is less than b\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    lessThan(a, b) {\n        return this.compare(a, b) < 0;\n    }\n\n\n}\n\nMonster.assignToNamespace('Monster.Util', Comparator);\nexport {Monster, Comparator}\n",
-    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {validateObject} from '../types/validate.js';\n\n/**\n * deep freeze a object\n *\n * you can call the method via the monster namespace `Monster.Util.deepFreeze()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';\n * console.log(Monster.Util.deepFreeze({})) \n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';\n * console.log(deepFreeze({}))  \n * </script>\n * ```\n *\n * @param {object} obj object to be freeze\n * @since 1.0.0\n * @returns {object}\n * @memberOf Monster/Util\n * @copyright schukai GmbH\n * @throws {TypeError} value is not a object\n */\nfunction deepFreeze(object) {\n    \n    validateObject(object)\n\n    // Retrieve the defined property names of the object\n    var propNames = Object.getOwnPropertyNames(object);\n\n    // Freeze properties before freezing yourself\n    for (let name of propNames) {\n        let value = object[name];\n\n        object[name] = value && typeof value === \"object\" ?\n            deepFreeze(value) : value;\n    }\n\n    return Object.freeze(object);\n}\n\nMonster.assignToNamespace('Monster.Util', deepFreeze);\nexport {Monster, deepFreeze}\n"
+    "'use strict';\n\n/**\n * @namespace Monster\n * @author schukai GmbH\n */\n\n\n/**\n * namespace class objects form the basic framework of the namespace administration.\n *\n * all functions, classes and objects of the library hang within the namespace tree.\n *\n * via `obj instanceof Monster.Namespace` it is also easy to check whether it is an object or a namespace.\n *\n * @memberOf Monster\n \n * @copyright schukai GmbH\n * @since 1.0.0\n */\nclass Namespace {\n\n    /**\n     *\n     * @param namespace\n     * @param obj\n     */\n    constructor(namespace) {\n        if (namespace === undefined || typeof namespace !== 'string') {\n            throw new Error(\"namespace is not a string\")\n        }\n        this.namespace = namespace;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    getNamespace() {\n        return this.namespace;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.getNamespace();\n    }\n}\n\n/**\n *\n * @type {Namespace}\n * @global\n */\nexport const Monster = new Namespace(\"Monster\");\n\n\n/**\n *\n */\nassignToNamespace('Monster', assignToNamespace);\n\n/**\n * To expand monster, the `Monster.assignToNamespace()` method can be used. \n *\n * you must call the method in the monster namespace. this allows you to mount your own classes, objects and functions into the namespace.\n * \n * To avoid confusion and so that you do not accidentally overwrite existing functions, you should use the custom namespace `X`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/namespace.js';\n * function hello() {\n *            console.log('Hello World!');\n *        }\n * Monster.assignToNamespace(\"Monster.X\",hello)\n * Monster.X.hello(); // ↦ Hello World!\n * </script>\n * \n * ```\n *\n * @param ns\n * @param obj\n * @memberOf Monster\n \n */\nfunction assignToNamespace(ns, ...obj) {\n    let current = namespaceFor(ns.split(\".\"));\n\n    for (let i = 0, l = obj.length; i < l; i++) {\n        current[objectName(obj[i])] = obj[i];\n    }\n}\n\n/**\n *\n * @param fn\n * @returns {string|*}\n * @private\n */\nfunction objectName(fn) {\n    try {\n\n        if (typeof fn !== 'function') {\n            throw  new Error(\"the first argument is not a function or class.\");\n        }\n\n        if (fn.hasOwnProperty('name')) {\n            return fn.name;\n        }\n\n        if (\"function\" === typeof fn.toString) {\n            let s = fn.toString();\n            let f = s.match(/^\\s*function\\s+([^\\s(]+)/);\n            if (Array.isArray(f) && typeof f[1] === 'string') {\n                return f[1];\n            }\n            let c = s.match(/^\\s*class\\s+([^\\s(]+)/);\n            if (Array.isArray(c) && typeof c[1] === 'string') {\n                return c[1];\n            }\n        }\n\n    } catch (e) {\n        throw new Error(\"exception \" + e);\n    }\n\n    throw  new Error(\"the name of the class or function cannot be resolved.\");\n}\n\n/**\n *\n * @param parts\n * @returns {Namespace}\n * @private\n */\nfunction namespaceFor(parts) {\n    var space = Monster, ns = 'Monster';\n\n    for (let i = 0; i < parts.length; i++) {\n\n        if (\"Monster\" === parts[i]) {\n            continue;\n        }\n\n        ns += '.' + parts[i];\n\n        if (!space.hasOwnProperty(parts[i])) {\n            space[parts[i]] = new Namespace(ns);\n        }\n\n        space = space[parts[i]];\n    }\n\n    return space;\n}\n\n\nexport {assignToNamespace}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {random} from '../math/random.js';\nimport '../types/object.js';\n\nlet internalCounter = 0;\n\n/**\n * id class\n *\n * you can call the method via the monster namespace `new Monster.Types.ID()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';\n * console.log(new Monster.Types.ID())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';\n * console.log(new ID())\n * </script>\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass ID extends Monster.Types.Object {\n\n    /**\n     * create new object\n     */\n    constructor() {\n        super();\n\n        internalCounter += 1;\n\n        this.id = global.btoa(random(1, 10000))\n            .replace(/=/g, '')\n            /** No numbers at the beginning of the ID, because of possible problems with DOM */\n            .replace(/^[0-9]+/, 'X') + internalCounter;\n    }\n\n    toString() {\n        return this.id;\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Types', ID);\nexport {Monster, ID}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\n\n/**\n * with this function you can check if a value is iterable\n *\n * you can call the method via the monster namespace `Monster.Types.isPrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isIterable(null)) // ↦ false\n * console.log(Monster.Types.isIterable('hello')) // ↦ true\n * console.log(Monster.Types.isIterable([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(isIterable(null))  // ↦ false\n * console.log(isIterable('hello'))  // ↦ true\n * console.log(isIterable([]))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isIterable(value) {\n    if (value === undefined) return false;\n    if (value === null) return false;\n    return typeof value?.[Symbol.iterator] === 'function';\n}\n\n\n/**\n * checks whether the value passed is a primitive (string, number, boolean, NaN, undefined, null or symbol)\n *\n * you can call the method via the monster namespace `Monster.Types.isPrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isPrimitive('2')) // ↦ false\n * console.log(Monster.Types.isPrimitive([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(isPrimitive('2'))  // ↦ true\n * console.log(isPrimitive([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isPrimitive(value) {\n    var type;\n\n    if (value === undefined || value === null || value === NaN) {\n        return true;\n    }\n\n    type = typeof value;\n\n    if (type === 'string' || type === 'number' || type === 'boolean' || type === 'symbol') {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a boolean\n *\n * you can call the method via the monster namespace `Monster.Types.isBoolean()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isBoolean('2')) // ↦ false\n * console.log(Monster.Types.isBoolean([])) // ↦ false\n * console.log(Monster.Types.isBoolean(true)) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(isBoolean('2'))  // ↦ false\n * console.log(isBoolean([]))  // ↦ false\n * console.log(isBoolean(2>4))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isBoolean(value) {\n\n    if (value === true || value === false) {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a string\n *\n * you can call the method via the monster namespace `Monster.Types.isString()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isString('2')) // ↦ true\n * console.log(Monster.Types.isString([])) // ↦ false\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(isString('2'))  // ↦ true\n * console.log(isString([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isString(value) {\n    if (value === undefined || typeof value !== 'string') {\n        return false;\n    }\n    return true;\n}\n\n/**\n * checks whether the value passed is a object\n *\n * you can call the method via the monster namespace `Monster.Types.isObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isObject('2')) // ↦ false\n * console.log(Monster.Types.isObject([])) // ↦ false\n * console.log(Monster.Types.isObject({})) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(isObject('2'))  // ↦ false\n * console.log(isObject([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isObject(value) {\n\n    if (isArray(value)) return false;\n    if (isPrimitive(value)) return false;\n\n    if (typeof value === 'object') {\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * checks whether the value passed is a array\n *\n * you can call the method via the monster namespace `Monster.Types.isArray()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isArray('2')) // ↦ false\n * console.log(Monster.Types.isArray([])) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(isArray('2'))  // ↦ false\n * console.log(isArray([]))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isArray(value) {\n    if (Array.isArray(value)) {\n        return true;\n    }\n    return false;\n}\n\n/**\n * checks whether the value passed is a function\n *\n * you can call the method via the monster namespace `Monster.Types.isFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isFunction(()=>{})) // ↦ true\n * console.log(Monster.Types.isFunction('2')) // ↦ false\n * console.log(Monster.Types.isFunction([])) // ↦ false\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(isFunction(()=>{})) // ↦ true\n * console.log(isFunction('2'))  // ↦ false\n * console.log(isFunction([]))  // ↦ false\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isFunction(value) {\n    if (isArray(value)) return false;\n    if (isPrimitive(value)) return false;\n\n    if (typeof value === 'function') {\n        return true;\n    }\n\n    return false;\n\n}\n\n/**\n * checks whether the value passed is an integer\n *\n * you can call the method via the monster namespace `Monster.Types.isFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(Monster.Types.isInteger(()=>{})) // ↦ true\n * console.log(Monster.Types.isInteger('2')) // ↦ false\n * console.log(Monster.Types.isInteger(2)) // ↦ true\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {isInteger} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';\n * console.log(isInteger(()=>{})) // ↦ true\n * console.log(isInteger('2'))  // ↦ false\n * console.log(isInteger(2))  // ↦ true\n * </script>\n * ```\n *\n * @param {*} value\n * @returns {boolean}\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nfunction isInteger(value) {\n    return Number.isInteger(value);\n}\n\n\nMonster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger);\nexport {Monster, isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\n\n\n/**\n * This is the base class from which all monster classes are derived.\n *\n * you can call the method via the monster namespace `new Monster.Types.Object()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';\n * console.log(new Monster.Types.Object())\n * console.log(new Monster.Types.Object())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';\n * console.log(new Object())\n * console.log(new Object())\n * </script>\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass Object {\n\n    /**\n     *\n     */\n    constructor() {\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return JSON.stringify(this);\n    };\n\n\n}\n\nMonster.assignToNamespace('Monster.Types', Object);\nexport {Monster, Object}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {TokenList} from '../types/tokenlist.js';\nimport {isObject} from '../types/is.js';\nimport '../types/object.js';\nimport {UniqueQueue} from '../types/uniquequeue.js';\n\n/**\n * an observer manages a callback function\n *\n * you can call the method via the monster namespace `new Monster.Types.Observer()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';\n * console.log(new Monster.Types.Observer())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';\n * console.log(Observer())\n * </script>\n * ```\n *\n * the update method is called with the subject object as this pointer. for this reason the callback should not\n * be an arrow function, because it gets the this pointer of its own context.\n *\n * ```\n * <script>\n * Observer(()=>{\n *     // this is not subject\n * })\n *\n * Observer(function() {\n *     // this is subject\n * })\n * </script>\n * ```\n *\n * additional arguments can be passed to the callback. to do this, simply specify them.\n *\n * ```\n * <script>\n * Observer(function(a, b, c) {\n *     console.log(a, b, c); // ↦ \"a\", 2, true \n * }, \"a\", 2, true)\n * </script>\n * ```\n *\n * the callback function must have as many parameters as arguments are given.\n *\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass Observer extends Monster.Types.Object {\n\n    /**\n     *\n     * @param {function} callback\n     * @param {*} args\n     */\n    constructor(callback, ...args) {\n        super();\n\n        if (typeof callback !== 'function') {\n            throw new Error(\"observer callback must be a function\")\n        }\n\n        this.callback = callback;\n        this.arguments = args;\n        this.tags = new TokenList;\n        this.queue = new UniqueQueue();\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {Observer}\n     */\n    addTag(tag) {\n        this.tags.add(tag);\n        return this;\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {Observer}\n     */\n    removeTag(tag) {\n        this.tags.remove(tag);\n        return this;\n    }\n\n    /**\n     *\n     * @returns {Array}\n     */\n    getTags() {\n        return this.tags.entries()\n    }\n\n    /**\n     *\n     * @param {string} tag\n     * @returns {boolean}\n     */\n    hasTag(tag) {\n        return this.tags.contains(tag)\n    }\n\n    /**\n     *\n     * @param {object} subject\n     * @returns {Promise}\n     */\n    update(subject) {\n        let self = this;\n\n        return new Promise(function (resolve, reject) {\n            if (!isObject(subject)) {\n                reject(\"subject must be an object\");\n            }\n\n            self.queue.add(subject);\n\n            setTimeout(() => {\n\n                // the queue and the settimeout ensure that an object is not \n                // informed of the same change more than once.\n                if (self.queue.isEmpty()) {\n                    resolve();\n                    return;\n                }\n\n                let s = self.queue.poll();\n                let result = self.callback.apply(s, self.arguments);\n\n                if (isObject(result) && result instanceof Promise) {\n                    result.then(resolve).catch(reject);\n                    return;\n                }\n\n                resolve(result);\n            }, 0)\n\n        });\n\n    };\n\n}\n\nMonster.assignToNamespace('Monster.Types', Observer);\nexport {Monster, Observer}\n\n\n\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport '../types/object.js';\n\n/**\n * With the help of the ObserverList class, observer can be managed.\n *\n * you can call the method via the monster namespace `new Monster.Types.ObserverList()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';\n * console.log(new Monster.Types.ObserverList()) \n * console.log(new Monster.Types.ObserverList()) \n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';\n * console.log(ObserverList())\n * console.log(ObserverList())\n * </script>\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass ObserverList extends Monster.Types.Object {\n\n    constructor() {\n        super();\n        this.observers = [];\n    }\n\n    attach(observer) {\n        checkIsObserver(observer);\n        this.observers.push(observer);\n        return this;\n    };\n\n    detach(observer) {\n        checkIsObserver(observer);\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            if (this.observers[i] === observer) {\n                this.observers.splice(i, 1);\n            }\n        }\n\n        return this;\n    };\n\n    contains(observer) {\n        checkIsObserver(observer);\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            if (this.observers[i] === observer) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    notify(subject) {\n\n        let pomises = []\n\n        var i = 0, l = this.observers.length;\n        for (; i < l; i++) {\n            pomises.push(this.observers[i].update(subject));\n        }\n\n        return Promise.all(pomises);\n    };\n\n}\n\n/**\n * \n * @param {Monster.Types.Observer} observer\n * @returns {boolean}\n * @private\n */\nfunction checkIsObserver(observer) {\n    if (!(observer instanceof Monster.Types.Observer)) {\n        throw new Error(\"argument must be instance of observer\")\n    }\n    return true;\n}\n\nMonster.assignToNamespace('Monster.Types', ObserverList);\nexport {Monster, ObserverList}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {Object} from '../types/object.js';\nimport {validateObject} from \"./validate.js\";\nimport {ObserverList} from \"./observerlist.js\";\nimport {Observer} from \"./observer.js\";\nimport {isObject, isArray, isPrimitive} from \"./is.js\";\n\n/**\n * an observer manages a callback function\n *\n * you can call the method via the monster namespace `new Monster.Types.Observer()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';\n * console.log(new Monster.Types.ProxyObserver())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';\n * console.log(new ProxyObserver())\n * </script>\n * ```\n *\n * with the ProxyObserver you can attach observer for observation. with each change at the object to be observed an update takes place.\n *\n * this also applies to nested objects.\n *\n * ```javascript\n * const o = new Observer(function () {\n *    if (isObject(this) && this instanceof ProxyObserver) {\n *        // do something (this ist ProxyObserver)\n *        const subject = this.getSubject();\n *    }\n * )\n * \n * let realSubject = {\n *    a: {\n *        b: {\n *            c: true\n *        },\n *        d: 5\n *    }\n * \n * \n * const p = new ProxyObserver(realSubject);\n * p.attachObserver(o);\n * const s = p.getSubject();\n * s.a.b.c = false;\n * ```\n *\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass ProxyObserver extends Object {\n\n    /**\n     *\n     * @param {object} object\n     */\n    constructor(object) {\n        super();\n        validateObject(object);\n        this.realSubject = object\n        this.subject = new Proxy(object, getHandler.call(this));\n\n        this.objectMap = new WeakMap();\n        this.objectMap.set(this.realSubject, this.subject);\n\n        this.observers = new ObserverList;\n    }\n\n    /**\n     * get the real object\n     *\n     * changes to this object are not noticed by the observers, so you can make a large number of changes and inform the observers later.\n     *\n     * @returns {object}\n     */\n    getSubject() {\n        return this.subject\n    }\n\n    /**\n     * get the proxied object\n     *\n     * @returns {object}\n     */\n    getRealSubject() {\n        return this.realSubject\n    }\n\n    /**\n     * attach a new observer\n     *\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    attachObserver(observer) {\n        this.observers.attach(observer)\n        return this;\n    }\n\n    /**\n     * detach a observer\n     *\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    detachObserver(observer) {\n        this.observers.detach(observer)\n        return this;\n    }\n\n    /**\n     * notify all observer\n     *\n     * @returns {ProxyObserver}\n     */\n    notifyObservers() {\n        this.observers.notify(this);\n        return this;\n    }\n\n    /**\n     * @param {Observer} observer\n     * @returns {ProxyObserver}\n     */\n    containsObserver(observer) {\n        return this.observers.contains(observer)\n    }\n\n}\n\nMonster.assignToNamespace('Monster.Types', ProxyObserver);\nexport {Monster, ProxyObserver}\n\n/**\n *\n * @returns {{defineProperty: (function(*=, *=, *=): *), setPrototypeOf: (function(*, *=): boolean), set: (function(*, *, *, *): boolean), get: ((function(*=, *=, *=): (undefined))|*), deleteProperty: ((function(*, *): (boolean))|*)}}\n * @private\n * @see {@link https://gitlab.schukai.com/-/snippets/49}\n */\nfunction getHandler() {\n\n    const proxy = this;\n\n    // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots\n    const handler = {\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n        get: function (target, key, receiver) {\n\n            const value = Reflect.get(target, key, receiver);\n\n            if (typeof key === \"symbol\") {\n                return value;\n            }\n\n            if (isPrimitive(value)) {\n                return value;\n            }\n\n            // set value as proxy if object or array\n            if ((isArray(value) || isObject(value))) {\n                if (proxy.objectMap.has(value)) {\n                    return proxy.objectMap.get(value);\n                } else {\n                    let p = new Proxy(value, handler);\n                    proxy.objectMap.set(value, p);\n                    return p;\n                }\n\n            }\n\n            return value;\n\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver \n        set: function (target, key, value, receiver) {\n            const result = Reflect.set(target, key, value, receiver);\n            if (typeof property !== \"symbol\") {\n                proxy.observers.notify(proxy);\n            }\n\n            return result;\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n        deleteProperty: function (target, key) {\n            if (key in target) {\n                delete target[key];\n\n                if (typeof key !== \"symbol\") {\n                    proxy.observers.notify(proxy);\n                }\n\n\n                return true;\n            }\n            return false;\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n        defineProperty: function (target, key, descriptor) {\n            let result = Reflect.defineProperty(target, key, descriptor);\n\n            if (typeof key !== \"symbol\") {\n                proxy.observers.notify(proxy);\n            }\n\n\n            return result;\n        },\n\n        // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n        setPrototypeOf: function (target, key) {\n            let result = Reflect.setPrototypeOf(object1, key);\n\n            if (typeof key !== \"symbol\") {\n                proxy.observers.notify(proxy);\n            }\n\n            return result;\n        }\n\n    };\n\n\n    return handler;\n}\n",
+    "import {Monster, Object} from \"./object.js\";\n\n/**\n * queue class\n *\n * you can call the method via the monster namespace `new Monster.Types.Queue()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';\n * console.log(new Monster.Types.Queue())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';\n * console.log(new Queue())\n * </script>\n * ```\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass Queue extends Object {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.data = [];\n    }\n\n\n    /**\n     * @return {boolean}\n     */\n    isEmpty() {\n        return this.data.length === 0;\n    }\n\n    /**\n     * Read the element at the front of the queue without removing it.\n     *\n     * @return {*}\n     */\n    peek() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n\n        return this.data[0];\n    }\n\n    /**\n     * Add a new element to the end of the queue.\n     *\n     * @param {*} value\n     * @returns {Queue}\n     */\n    add(value) {\n        this.data.push(value)\n        return this;\n    }\n\n    /**\n     * remove all entries\n     *\n     * @returns {Queue}\n     */\n    clear() {\n        this.data = [];\n        return this;\n    }\n\n    /**\n     * Remove the element at the front of the queue\n     * If the queue is empty, return undefined.\n     *\n     * @return {*}\n     */\n    poll() {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n        return this.data.shift();\n    }\n\n\n}\n\nMonster.assignToNamespace('Monster.Types', Queue);\nexport {Monster, Queue}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {Object} from '../types/object.js';\nimport {isString, isIterable} from '../types/is.js';\nimport {validateString, validateFunction} from '../types/validate.js';\n\n/**\n * A tokenlist allows you to manage tokens (individual character strings such as css classes in an attribute string).\n *\n * The tokenlist offers various functions to manipulate values. For example, you can add, remove or replace a class in a CSS list.\n *\n * you can call the method via the monster namespace `new Monster.Types.TokenList()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';\n * console.log(new Monster.Types.TokenList(\"myclass row\"))\n * console.log(new Monster.Types.TokenList(\"myclass row\"))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';\n * console.log(new TokenList(\"myclass row\"))\n * console.log(new TokenList(\"myclass row\"))\n * </script>\n * ```\n *\n * This class implements the [iteration protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols).\n *\n * ```\n * console.log(typeof new TokenList(\"myclass row\")[Symbol.iterator]); // \"function\"\n * ```\n *\n *\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass TokenList extends Object {\n\n    /**\n     *\n     * @param {array|string|iteratable} init\n     */\n    constructor(init) {\n        super();\n        this.tokens = new Set();\n\n        if (typeof init !== \"undefined\") {\n            this.add(init);\n        }\n\n    }\n\n    /**\n     * Iterator protocol\n     *\n     * @returns {Symbol.iterator}\n     */\n    getIterator() {\n        return this[Symbol.iterator]();\n    }\n\n    /**\n     * Iterator\n     *\n     * @returns {{next: ((function(): ({value: *, done: boolean}))|*)}}\n     */\n    [Symbol.iterator]() {\n        // Use a new index for each iterator. This makes multiple\n        // iterations over the iterable safe for non-trivial cases,\n        // such as use of break or nested looping over the same iterable.\n        let index = 0;\n        let entries = this.entries()\n\n        return {\n            next: () => {\n                if (index < entries.length) {\n                    return {value: entries?.[index++], done: false}\n                } else {\n                    return {done: true}\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns true if it contains token, otherwise false\n     *\n     * ```\n     * new TokenList(\"start middle end\").contains('start')); // ↦ true\n     * new TokenList(\"start middle end\").contains('end')); // ↦ true\n     * new TokenList(\"start middle end\").contains('xyz')); // ↦ false\n     * new TokenList(\"start middle end\").contains(['end','start','middle'])); // ↦ true\n     * new TokenList(\"start middle end\").contains(['end','start','xyz'])); // ↦ false\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {boolean}\n     */\n    contains(value) {\n        if (isString(value)) {\n            value = value.trim()\n            let counter = 0;\n            value.split(\" \").forEach(token => {\n                if (this.tokens.has(token.trim()) === false) return false;\n                counter++\n            })\n            return counter > 0 ? true : false;\n        }\n\n        if (isIterable(value)) {\n            let counter = 0;\n            for (let token of value) {\n                validateString(token);\n                if (this.tokens.has(token.trim()) === false) return false;\n                counter++\n            }\n            return counter > 0 ? true : false;\n        }\n\n        return false;\n    }\n\n    /**\n     * add tokens\n     *\n     * ```\n     * new TokenList().add(\"abc xyz\").toString(); // ↦ \"abc xyz\"\n     * new TokenList().add([\"abc\",\"xyz\"]).toString(); // ↦ \"abc xyz\"\n     * new TokenList().add(undefined); // ↦ add nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {TokenList}\n     * @throws {TypeError} unsupported value\n     */\n    add(value) {\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                this.tokens.add(token.trim());\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                validateString(token);\n                this.tokens.add(token.trim());\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n    }\n\n    /**\n     * remove all tokens\n     *\n     * @returns {TokenList}\n     */\n    clear() {\n        this.tokens.clear();\n        return this;\n    }\n\n    /**\n     * Removes token\n     *\n     * ```\n     * new TokenList(\"abc xyz\").remove(\"xyz\").toString(); // ↦ \"abc\"\n     * new TokenList(\"abc xyz\").remove([\"xyz\"]).toString(); // ↦ \"abc\"\n     * new TokenList(\"abc xyz\").remove(undefined); // ↦ remove nothing\n     * ```\n     *\n     * @param {array|string|iteratable} value\n     * @returns {TokenList}\n     * @throws {TypeError} unsupported value\n     */\n    remove(value) {\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                this.tokens.delete(token.trim());\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                validateString(token);\n                this.tokens.delete(token.trim());\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n    }\n\n    /**\n     * this method replaces a token with a new token.\n     *\n     * if the passed token exists, it is replaced with newToken and TokenList is returned.\n     * if the token does not exist, newToken is not set and TokenList is returned.\n     *\n     * @param {string} token\n     * @param {string} newToken\n     * @returns {TokenList}\n     */\n    replace(token, newToken) {\n        validateString(token);\n        validateString(newToken);\n        if (!this.contains(token)) {\n            return this;\n        }\n\n        let a = Array.from(this.tokens)\n        let i = a.indexOf(token);\n        if (i === -1) return this;\n\n        a.splice(i, 1, newToken);\n        this.tokens = new Set();\n        this.add(a);\n\n        return this;\n\n\n    }\n\n    /**\n     * Removes token from string. If token doesn't exist it's added.\n     * \n     * ```\n     * new TokenList(\"abc def ghi\").toggle(\"def xyz\").toString(); // ↦ \"abc ghi xyz\"\n     * new TokenList(\"abc def ghi\").toggle([\"abc\",\"xyz\"]).toString(); // ↦ \"def ghi xyz\"\n     * new TokenList().toggle(undefined); // ↦ nothing\n     * ```\n     * \n     * @param {array|string|iteratable} value\n     * @returns {boolean}\n     * @throws {TypeError} unsupported value\n     */\n    toggle(value) {\n\n        if (isString(value)) {\n            value.split(\" \").forEach(token => {\n                toggleValue.call(this, token);\n            })\n        } else if (isIterable(value)) {\n            for (let token of value) {\n                toggleValue.call(this, token);\n            }\n        } else if (typeof value !== \"undefined\") {\n            throw new TypeError(\"unsupported value\");\n        }\n\n        return this;\n\n    }\n\n    /**\n     * returns an array with all tokens\n     *\n     * @returns {array}\n     */\n    entries() {\n        return Array.from(this.tokens)\n    }\n\n    /**\n     * executes the provided function with each value of the set\n     *\n     * @param {function} callback\n     * @returns {TokenList}\n     */\n    forEach(callback) {\n        validateFunction(callback);\n        this.tokens.forEach(callback);\n        return this;\n    }\n\n    /**\n     * returns the individual tokens separated by a blank character\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.entries().join(' ');\n    }\n\n}\n\n/**\n * @private\n * @param token\n * @returns {toggleValue}\n * @throws {Error} must be called with TokenList.call\n */\nfunction toggleValue(token) {\n    if (!(this instanceof TokenList)) throw Error(\"must be called with TokenList.call\")\n    validateString(token);\n    token = token.trim();\n    if (this.contains(token)) {\n        this.remove(token);\n        return this;\n    }\n    this.add(token);\n    return this;\n}\n\nMonster.assignToNamespace('Monster.Types', TokenList);\nexport {Monster, TokenList}\n",
+    "import {Monster, Queue} from \"./queue.js\";\nimport {validateObject} from \"./validate.js\";\n\n/**\n * UniqueQueue class\n *\n * you can call the method via the monster namespace `new Monster.Types.Queue()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';\n * console.log(new Monster.Types.UniqueQueue())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';\n * console.log(new UniqueQueue())\n * </script>\n * ```\n *\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass UniqueQueue extends Queue {\n\n    /**\n     *\n     */\n    constructor() {\n        super();\n        this.unique = new WeakSet();\n    }\n\n    /**\n     * Add a new element to the end of the queue.\n     *\n     * @param {object} value\n     * @returns {Queue}\n     * @throws {TypeError} value is not a object\n     */\n    add(value) {\n        \n        validateObject(value);\n        \n        if (!this.unique.has(value)) {\n            this.unique.add(value);\n            super.add(value);\n        }\n        \n        return this;\n    }\n\n    /**\n     * remove all entries\n     *\n     * @returns {Queue}\n     */\n    clear() {\n        super.clear();\n        this.unique = new WeakSet;\n        return this;\n    }\n\n    /**\n     * Remove the element at the front of the queue\n     * If the queue is empty, return undefined.\n     *\n     * @return {object}\n     */\n    poll() {\n\n        if (this.isEmpty()) {\n            return undefined;\n        }\n        let value = this.data.shift();\n        this.unique.delete(value);\n        return value;\n    }\n\n\n}\n\nMonster.assignToNamespace('Monster.Types', UniqueQueue);\nexport {Monster, UniqueQueue}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger} from '../types/is.js';\n\n/**\n * this method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validatePrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateIterable('2')) // ↦ TypeError\n * console.log(Monster.Types.validateIterable([])) // ↦ undefined\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(validateIterable('2'))  // ↦ TypeError\n * console.log(validateIterable([]))  // ↦ undefined\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.2.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a primitive\n * @see {@link isPrimitive}\n * @see {@link Monster/Types/isPrimitive}\n * @see {@link Monster/Types#isPrimitive}\n */\nfunction validateIterable(value) {\n    if (!isIterable(value)) {\n        throw new TypeError('value is not iterable')\n    }\n}\n\n/**\n * this method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validatePrimitive()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validatePrimitive('2')) // ↦ undefined\n * console.log(Monster.Types.validatePrimitive([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(validatePrimitive('2'))  // ↦ undefined\n * console.log(validatePrimitive([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a primitive\n * @see {@link isPrimitive}\n * @see {@link Monster/Types/isPrimitive}\n * @see {@link Monster/Types#isPrimitive}\n */\nfunction validatePrimitive(value) {\n    if (!isPrimitive(value)) {\n        throw new TypeError('value is not a primitive')\n    }\n}\n\n/**\n * this method checks if the type matches the boolean type. this function is identical to isBoolean() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateBoolean()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateBoolean(true)) // ↦ undefined\n * console.log(Monster.Types.validateBoolean('2')) // ↦ TypeError\n * console.log(Monster.Types.validateBoolean([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(validateBoolean(false))  // ↦ undefined\n * console.log(validateBoolean('2'))  // ↦ TypeError\n * console.log(validateBoolean([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n\n * @throws {TypeError}  value is not primitive\n */\nfunction validateBoolean(value) {\n    if (!isBoolean(value)) {\n        throw new TypeError('value is not a boolean')\n    }\n}\n\n/**\n * this method checks if the type matches the string type. this function is identical to isString() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateString()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateString('2')) // ↦ undefined\n * console.log(Monster.Types.validateString([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(validateString('2'))  // ↦ undefined\n * console.log(validateString([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a string\n */\nfunction validateString(value) {\n    if (!isString(value)) {\n        throw new TypeError('value is not a string')\n    }\n}\n\n\n/**\n * this method checks if the type matches the object type. this function is identical to isObject() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateObject()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateObject({})) // ↦ undefined\n * console.log(Monster.Types.validateObject('2')) // ↦ TypeError\n * console.log(Monster.Types.validateObject([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(validateObject({}))  // ↦ undefined\n * console.log(validateObject('2'))  // ↦ TypeError\n * console.log(validateObject([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a object\n */\nfunction validateObject(value) {\n    if (!isObject(value)) {\n        throw new TypeError('value is not a object')\n    }\n}\n\n/**\n * this method checks if the type matches the array type. this function is identical to isArray() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateArray()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateArray('2')) // ↦ TypeError\n * console.log(Monster.Types.validateArray([])) // ↦ undefined\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(validateArray('2'))  // ↦ TypeError\n * console.log(validateArray([]))  // ↦ undefined\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a array\n */\nfunction validateArray(value) {\n    if (!isArray(value)) {\n        throw new TypeError('value is not not a array')\n    }\n}\n\n/**\n * this method checks if the type matches the function type. this function is identical to isFunction() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateFunction()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateFunction(()=>{})) // ↦ undefined\n * console.log(Monster.Types.validateFunction('2')) // ↦ TypeError\n * console.log(Monster.Types.validateFunction([])) // ↦ TypeError\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(validateFunction(()=>{})) // ↦ undefined\n * console.log(validateFunction('2'))  // ↦ TypeError\n * console.log(validateFunction([]))  // ↦ TypeError\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not a function\n */\nfunction validateFunction(value) {\n    if (!isFunction(value)) {\n        throw new TypeError('value is not a function')\n    }\n}\n\n/**\n * this method checks if the type is an integer. this function is identical to isInteger() except that a TypeError is thrown.\n *\n * you can call the method via the monster namespace `Monster.Types.validateInteger()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(Monster.Types.validateInteger(true)) // ↦ TypeError\n * console.log(Monster.Types.validateInteger('2')) // ↦ TypeError\n * console.log(Monster.Types.validateInteger(2)) // ↦ undefined\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';\n * console.log(validateInteger(true)) // ↦ TypeError\n * console.log(validateInteger('2'))  // ↦ TypeError\n * console.log(validateInteger(2))  // ↦ undefined\n * </script>\n * ```\n *\n * @param {*} value\n * @return {undefined}\n * @since 1.4.0\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n * @throws {TypeError} value is not an integer\n */\nfunction validateInteger(value) {\n    if (!isInteger(value)) {\n        throw new TypeError('value is not an integer')\n    }\n}\n\nMonster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable, validateInteger);\nexport {\n    Monster,\n    validatePrimitive,\n    validateBoolean,\n    validateString,\n    validateObject,\n    validateArray,\n    validateFunction,\n    validateIterable,\n    validateInteger\n}\n",
+    "'use strict';\n\nimport {Monster} from '../namespace.js';\nimport '../types/object.js';\n\n/**\n * the version object contains a sematic version number\n *\n * you can create the object via the monster namespace `new Monster.Types.Version()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';\n * console.log(new Monster.Types.Version('1.2.3')) // ↦ 1.2.3\n * console.log(new Monster.Types.Version('1')) // ↦ 1.0.0\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this class individually.\n *\n * ```\n * <script type=\"module\">\n * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';\n * console.log(new Version('1.2.3')) // ↦ 1.2.3\n * console.log(new Version('1')) // ↦ 1.0.0\n * </script>\n * ```\n *\n * some examples\n *\n * ```\n * new Monster.Types.Version('1.0.0') // 1.0.0\n * new Monster.Types.Version(1)  // 1.0.0\n * new Monster.Types.Version(1, 0, 0) // 1.0.0\n * new Monster.Types.Version('1.2.3', 4, 5) // 1.4.5\n * ```\n *\n * @since 1.0.0\n * @author schukai GmbH\n * @copyright schukai GmbH\n * @memberOf Monster/Types\n */\nclass Version extends Monster.Types.Object {\n\n    /**\n     *\n     * @param major\n     * @param minor\n     * @param patch\n     * @throws major is not a number\n     * @throws minor is not a number\n     * @throws patch is not a number\n     */\n    constructor(major, minor, patch) {\n        super();\n\n        if (typeof major === 'string' && minor === undefined && patch === undefined) {\n\n            let parts = major.toString().split('.');\n            major = parseInt(parts[0] || 0);\n            minor = parseInt(parts[1] || 0);\n            patch = parseInt(parts[2] || 0);\n        }\n\n        if (major === undefined) {\n            throw  new Error(\"major version is undefined\");\n        }\n\n        if (minor === undefined) {\n            minor = 0;\n        }\n\n        if (patch === undefined) {\n            patch = 0;\n        }\n\n        this.major = parseInt(major);\n        this.minor = parseInt(minor);\n        this.patch = parseInt(patch);\n\n        if (isNaN(this.major)) {\n            throw  new Error(\"major is not a number\");\n        }\n\n        if (isNaN(this.minor)) {\n            throw  new Error(\"minor is not a number\");\n        }\n\n        if (isNaN(this.patch)) {\n            throw  new Error(\"patch is not a number\");\n        }\n\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    toString() {\n        return this.major + '.' + this.minor + '.' + this.patch;\n    }\n\n    /**\n     * returns 0 if equal, -1 if the object version is less and 1 if greater\n     * then the compared version\n     *\n     * @param {string|Version} version Version to compare\n     * @returns {number}\n     */\n    compareTo(version) {\n\n        if (version instanceof Version) {\n            version = version.toString();\n        }\n\n        if (typeof version !== 'string') {\n            throw  new Error(\"type exception\");\n        }\n\n        if (version === this.toString()) {\n            return 0;\n        }\n\n        let a = [this.major, this.minor, this.patch];\n        let b = version.split('.');\n        let len = Math.max(a.length, b.length);\n\n        for (let i = 0; i < len; i += 1) {\n            if ((a[i] && !b[i] && parseInt(a[i]) > 0) || (parseInt(a[i]) > parseInt(b[i]))) {\n                return 1;\n            } else if ((b[i] && !a[i] && parseInt(b[i]) > 0) || (parseInt(a[i]) < parseInt(b[i]))) {\n                return -1;\n            }\n        }\n\n        return 0;\n    };\n\n}\n\nMonster.assignToNamespace('Monster.Types', Version);\n\n\nlet monsterVersion;\n\n/**\n * Version of monster\n *\n * you can call the method via the monster namespace `Monster.getVersion()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';\n * console.log(Monster.getVersion())\n * console.log(Monster.getVersion())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';\n * console.log(getVersion())\n * console.log(getVersion())\n * </script>\n * ```\n *\n * @returns {Monster.Types.Version}\n * @since 1.0.0\n * @copyright schukai GmbH\n * @author schukai GmbH\n * @memberOf Monster\n */\nfunction getVersion() {\n    if (monsterVersion instanceof Version) {\n        return monsterVersion;\n    }\n    /**#@+ dont touch, replaced by make with package.json version */\n    monsterVersion = new Version('1.4.0')\n    /**#@-*/\n    return monsterVersion;\n\n}\n\nMonster.assignToNamespace('Monster', getVersion);\nexport {Monster, Version, getVersion}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {isObject, isFunction, isPrimitive, isArray} from '../types/is.js';\n\n\n/**\n * with this function, objects can be cloned.\n * the entire object tree is run through.\n *\n * Proxy, Element, HTMLDocument and DocumentFragment instances are not cloned.\n * Global objects such as windows are also not cloned,\n *\n * If an object has a method `getClone()`, this method is used to create the clone.\n *\n * you can call the method via the monster namespace `Monster.Util.clone()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';\n * console.log(Monster.Util.clone({}))\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';\n * console.log(clone({}))\n * </script>\n * ```\n *\n *\n * @param {*} obj object to be cloned\n * @returns {*}\n *\n * @since 1.0.0\n * @memberOf Monster/Util\n * @copyright schukai GmbH\n * @throws {Error} unable to clone obj! its type isn't supported.\n */\nfunction clone(obj) {\n\n    // typeof null results in 'object'.  https://2ality.com/2013/10/typeof-null.html\n    if (null === obj) {\n        return obj;\n    }\n\n    // Handle the two simple types, null and undefined\n    if (isPrimitive(obj)) {\n        return obj;\n    }\n    \n    // Handle the two simple types, null and undefined\n    if (isFunction(obj)) {\n        return obj;\n    }\n\n    // Handle Array\n    if (isArray(obj)) {\n        let copy = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            copy[i] = clone(obj[i]);\n        }\n\n        return copy;\n    }\n\n    if (isObject(obj)) {\n\n\n        // Handle Date\n        if (obj instanceof Date) {\n            let copy = new Date();\n            copy.setTime(obj.getTime());\n            return copy;\n        }\n\n        /** Do not clone DOM nodes */\n        if (typeof Element !== 'undefined' && obj instanceof Element) return obj;\n        if (typeof HTMLDocument !== 'undefined' && obj instanceof HTMLDocument) return obj;\n        if (typeof DocumentFragment !== 'undefined' && obj instanceof DocumentFragment) return obj;\n\n        /** Do not clone global objects */\n        if (typeof globalContext !== 'undefined' && obj === globalContext) return obj;\n        if (typeof window !== 'undefined' && obj === window) return obj;\n        if (typeof document !== 'undefined' && obj === document) return obj;\n        if (typeof navigator !== 'undefined' && obj === navigator) return obj;\n        if (typeof JSON !== 'undefined' && obj === JSON) return obj;\n\n        // Handle Proxy-Object\n        try {\n            // try/catch because possible: TypeError: Function has non-object prototype 'undefined' in instanceof check\n            if (obj instanceof Proxy) {\n                return obj;\n            }\n        } catch (e) {\n        }\n\n        return cloneObject(obj)\n\n    }\n\n    throw new Error(\"unable to clone obj! its type isn't supported.\");\n}\n\n/**\n *\n * @param {object} obj\n * @returns {object}\n * @private\n */\nfunction cloneObject(obj) {\n    var copy;\n\n    /** Object has clone method */\n    if (typeof obj.hasOwnProperty('getClone') && obj.getClone === 'function') {\n        return obj.getClone();\n    }\n\n    copy = {};\n    if (typeof obj.constructor === 'function' &&\n        typeof obj.constructor.call === 'function') {\n        copy = new obj.constructor();\n    }\n\n    for (let key in obj) {\n\n        if (!obj.hasOwnProperty(key)) {\n            continue;\n        }\n\n        if (Monster.Types.isPrimitive(obj[key])) {\n            copy[key] = obj[key];\n            continue;\n        }\n\n        copy[key] = clone(obj[key]);\n    }\n\n    return copy;\n}\n\nMonster.assignToNamespace('Monster.Util', clone);\nexport {Monster, clone}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster, Object} from '../types/object.js';\nimport {isFunction} from '../types/is.js';\n\n/**\n * the comparator allows a comparison function to be abstracted.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';\n * console.log(new Monster.Util.Comparator())\n * console.log(new Monster.Util.Comparator())\n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';\n * console.log(new Util())\n * console.log(new Util())\n * </script>\n * ```\n * \n * the following are some examples of the application of the class.\n *\n * ```\n * new Comparator().lessThanOrEqual(2, 5) // ↦ true\n * new Comparator().greaterThan(4, 2) // ↦ true\n * new Comparator().equal(4, 4) // ↦ true\n * new Comparator().equal(4, 5) // ↦ false\n * ```\n * \n * you can also pass your own comparison function, and thus define the comparison function.\n * \n * ```\n * new Comparator(function (a, b) {\n *      if (a.v === b.v) return 0;\n *         return a.v < b.v ? -1 : 1;\n *      }).equal({v: 2}, {v: 2});  // ↦ true\n * ```\n *\n * @since 1.3.0\n * @memberOf Monster/Util\n */\nclass Comparator extends Object {\n\n    /**\n     * create new comparator\n     *\n     * @param {function} callback\n     * @throw {TypeError} \"unsupported type\"\n     * @throw {TypeError} \"impractical comparison\"\n     */\n    constructor(callback) {\n        super();\n\n        if (isFunction(callback)) {\n            this.compare = callback\n        } else if (callback !== undefined) {\n            throw new TypeError(\"unsupported type\")\n        } else {\n            // default compare function\n            this.compare = function (a, b) {\n\n                if (typeof a !== typeof b) {\n                    throw new TypeError(\"impractical comparison\")\n                }\n\n                if (a === b) {\n                    return 0;\n                }\n                return a < b ? -1 : 1;\n            };\n        }\n\n    }\n\n    /**\n     * changes the order of the operators\n     *\n     * @return {Comparator}\n     */\n    reverse() {\n        const original = this.compare;\n        this.compare = (a, b) => original(b, a);\n        return this;\n    }\n\n    /**\n     * Checks if two variables are equal.\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    equal(a, b) {\n        return this.compare(a, b) === 0;\n    }\n\n\n    /**\n     * Checks if variable `a` is greater than `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    greaterThan(a, b) {\n        return this.compare(a, b) > 0;\n    }\n\n    /**\n     * Checks if variable `a` is greater than or equal to `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    greaterThanOrEqual(a, b) {\n        return this.greaterThan(a, b) || this.equal(a, b);\n    }\n\n    /**\n     * Checks if variable `a` is less than or equal to `b`\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    lessThanOrEqual(a, b) {\n        return this.lessThan(a, b) || this.equal(a, b);\n    }\n\n    /**\n     * Checks if variable a is less than b\n     *\n     * @param {*} a\n     * @param {*} b\n     *\n     * @return {boolean}\n     */\n    lessThan(a, b) {\n        return this.compare(a, b) < 0;\n    }\n\n\n}\n\nMonster.assignToNamespace('Monster.Util', Comparator);\nexport {Monster, Comparator}\n",
+    "'use strict';\n\n/**\n * @author schukai GmbH\n */\n\nimport {Monster} from '../namespace.js';\nimport {validateObject} from '../types/validate.js';\n\n/**\n * deep freeze a object\n *\n * you can call the method via the monster namespace `Monster.Util.deepFreeze()`.\n *\n * ```\n * <script type=\"module\">\n * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';\n * console.log(Monster.Util.deepFreeze({})) \n * </script>\n * ```\n *\n * Alternatively, you can also integrate this function individually.\n *\n * ```\n * <script type=\"module\">\n * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';\n * console.log(deepFreeze({}))  \n * </script>\n * ```\n *\n * @param {object} obj object to be freeze\n * @since 1.0.0\n * @returns {object}\n * @memberOf Monster/Util\n * @copyright schukai GmbH\n * @throws {TypeError} value is not a object\n */\nfunction deepFreeze(object) {\n    \n    validateObject(object)\n\n    // Retrieve the defined property names of the object\n    var propNames = Object.getOwnPropertyNames(object);\n\n    // Freeze properties before freezing yourself\n    for (let name of propNames) {\n        let value = object[name];\n\n        object[name] = value && typeof value === \"object\" ?\n            deepFreeze(value) : value;\n    }\n\n    return Object.freeze(object);\n}\n\nMonster.assignToNamespace('Monster.Util', deepFreeze);\nexport {Monster, deepFreeze}\n"
   ]
 }
\ No newline at end of file
diff --git a/packages/monster/dist/monster.js b/packages/monster/dist/monster.js
index 06d3e83a6feefe7a8bef066638ba116df8f7e49f..eddd9bbd3697177ef883ce5bbdbf5c91b380c123 100644
--- a/packages/monster/dist/monster.js
+++ b/packages/monster/dist/monster.js
@@ -1,2 +1,2 @@
-/** Monster 1.3.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
-(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.AbstractConstraint=void 0;var _namespace=require("../namespace.js");var _object=require("../types/object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var AbstractConstraint=function(_Object){_inherits(AbstractConstraint,_Object);var _super=_createSuper(AbstractConstraint);function AbstractConstraint(){_classCallCheck(this,AbstractConstraint);return _super.call(this)}_createClass(AbstractConstraint,[{key:"isValid",value:function isValid(value){return Promise.reject(value)}}]);return AbstractConstraint}(Object);exports.AbstractConstraint=AbstractConstraint;_namespace.Monster.assignToNamespace("Monster.Constraints",AbstractConstraint)},{"../namespace.js":11,"../types/object.js":14}],2:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.AbstractOperator=void 0;var _abstract=require("./abstract.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var AbstractOperator=function(_AbstractConstraint){_inherits(AbstractOperator,_AbstractConstraint);var _super=_createSuper(AbstractOperator);function AbstractOperator(operantA,operantB){var _this;_classCallCheck(this,AbstractOperator);_this=_super.call(this);if(!(operantA instanceof _abstract.AbstractConstraint)||!(operantB instanceof _abstract.AbstractConstraint)){throw new TypeError("parameters must be from type AbstractConstraint")}_this.operantA=operantA;_this.operantB=operantB;return _this}return AbstractOperator}(_abstract.AbstractConstraint);exports.AbstractOperator=AbstractOperator;_abstract.Monster.assignToNamespace("Monster.Constraints",AbstractOperator)},{"./abstract.js":1}],3:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.AndOperator=void 0;var _abstract=require("./abstract.js");var _abstractoperator=require("./abstractoperator.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var AndOperator=function(_AbstractOperator){_inherits(AndOperator,_AbstractOperator);var _super=_createSuper(AndOperator);function AndOperator(){_classCallCheck(this,AndOperator);return _super.apply(this,arguments)}_createClass(AndOperator,[{key:"isValid",value:function isValid(value){return Promise.all([this.operantA.isValid(value),this.operantB.isValid(value)])}}]);return AndOperator}(_abstractoperator.AbstractOperator);exports.AndOperator=AndOperator;_abstract.Monster.assignToNamespace("Monster.Constraints",AndOperator)},{"./abstract.js":1,"./abstractoperator.js":2}],4:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.Invalid=void 0;var _abstract=require("./abstract.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Invalid=function(_AbstractConstraint){_inherits(Invalid,_AbstractConstraint);var _super=_createSuper(Invalid);function Invalid(){_classCallCheck(this,Invalid);return _super.apply(this,arguments)}_createClass(Invalid,[{key:"isValid",value:function isValid(value){return Promise.reject(value)}}]);return Invalid}(_abstract.AbstractConstraint);exports.Invalid=Invalid;_abstract.Monster.assignToNamespace("Monster.Constraints",Invalid)},{"./abstract.js":1}],5:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.IsArray=void 0;var _abstract=require("./abstract.js");var _is=require("../types/is.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var IsArray=function(_AbstractConstraint){_inherits(IsArray,_AbstractConstraint);var _super=_createSuper(IsArray);function IsArray(){_classCallCheck(this,IsArray);return _super.apply(this,arguments)}_createClass(IsArray,[{key:"isValid",value:function isValid(value){if((0,_is.isArray)(value)){return Promise.resolve(value)}return Promise.reject(value)}}]);return IsArray}(_abstract.AbstractConstraint);exports.IsArray=IsArray;_abstract.Monster.assignToNamespace("Monster.Constraints",IsArray)},{"../types/is.js":13,"./abstract.js":1}],6:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.IsObject=void 0;var _abstract=require("./abstract.js");var _is=require("../types/is.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var IsObject=function(_AbstractConstraint){_inherits(IsObject,_AbstractConstraint);var _super=_createSuper(IsObject);function IsObject(){_classCallCheck(this,IsObject);return _super.apply(this,arguments)}_createClass(IsObject,[{key:"isValid",value:function isValid(value){if((0,_is.isObject)(value)){return Promise.resolve(value)}return Promise.reject(value)}}]);return IsObject}(_abstract.AbstractConstraint);exports.IsObject=IsObject;_abstract.Monster.assignToNamespace("Monster.Constraints",IsObject)},{"../types/is.js":13,"./abstract.js":1}],7:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstractoperator.Monster}});exports.OrOperator=void 0;var _abstractoperator=require("./abstractoperator.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var OrOperator=function(_AbstractOperator){_inherits(OrOperator,_AbstractOperator);var _super=_createSuper(OrOperator);function OrOperator(){_classCallCheck(this,OrOperator);return _super.apply(this,arguments)}_createClass(OrOperator,[{key:"isValid",value:function isValid(value){var self=this;return new Promise(function(resolve,reject){var a,b;self.operantA.isValid(value).then(function(){resolve()})["catch"](function(){a=false;if(b===false){reject()}});self.operantB.isValid(value).then(function(){resolve()})["catch"](function(){b=false;if(a===false){reject()}})})}}]);return OrOperator}(_abstractoperator.AbstractOperator);exports.OrOperator=OrOperator;_abstractoperator.Monster.assignToNamespace("Monster.Constraints",OrOperator)},{"./abstractoperator.js":2}],8:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.Valid=void 0;var _abstract=require("./abstract.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Valid=function(_AbstractConstraint){_inherits(Valid,_AbstractConstraint);var _super=_createSuper(Valid);function Valid(){_classCallCheck(this,Valid);return _super.apply(this,arguments)}_createClass(Valid,[{key:"isValid",value:function isValid(value){return Promise.resolve(value)}}]);return Valid}(_abstract.AbstractConstraint);exports.Valid=Valid;_abstract.Monster.assignToNamespace("Monster.Constraints",Valid)},{"./abstract.js":1}],9:[function(require,module,exports){(function(global){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.random=random;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");function random(min,max){if(min===undefined){min=0}if(max===undefined){max=MAX}if(max<min){throw new Error("max must be greater than min")}return Math.round(create(min,max))}var MAX=1e9;Math.log2=Math.log2||function(n){return Math.log(n)/Math.log(2)};function create(min,max){var crypt;if(typeof global!=="undefined"){var _global,_global2;crypt=((_global=global)===null||_global===void 0?void 0:_global["crypto"])||((_global2=global)===null||_global2===void 0?void 0:_global2["msCrypto"])}else{crypt=typeof crypto!=="undefined"?crypto:undefined}if(typeof crypt==="undefined"){throw new Error("missing crypt")}var rval=0;var range=max-min;if(range<2){return min}var bitsNeeded=Math.ceil(Math.log2(range));if(bitsNeeded>53){throw new Error("we cannot generate numbers larger than 53 bits.")}var bytesNeeded=Math.ceil(bitsNeeded/8);var mask=Math.pow(2,bitsNeeded)-1;var byteArray=new Uint8Array(bytesNeeded);crypt.getRandomValues(byteArray);var p=(bytesNeeded-1)*8;for(var i=0;i<bytesNeeded;i++){rval+=byteArray[i]*Math.pow(2,p);p-=8}rval=rval&mask;if(rval>=range){return create(min,max)}return min+rval}_namespace.Monster.assignToNamespace("Monster.Math",random)}).call(this)}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../namespace.js":11}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("./namespace.js");require("./types/id.js");require("./types/is.js");require("./types/object.js");require("./types/observer.js");require("./types/observerlist.js");require("./types/proxyobserver.js");require("./types/version.js");require("./types/tokenlist.js");require("./types/validate.js");require("./math/random.js");require("./util/clone.js");require("./util/comparator.js");require("./util/freeze.js");require("./constraints/abstract.js");require("./constraints/andoperator.js");require("./constraints/invalid.js");require("./constraints/isarray.js");require("./constraints/isobject.js");require("./constraints/abstractoperator.js");require("./constraints/oroperator.js");require("./constraints/valid.js");_namespace.Monster.Util.deepFreeze(_namespace.Monster)},{"./constraints/abstract.js":1,"./constraints/abstractoperator.js":2,"./constraints/andoperator.js":3,"./constraints/invalid.js":4,"./constraints/isarray.js":5,"./constraints/isobject.js":6,"./constraints/oroperator.js":7,"./constraints/valid.js":8,"./math/random.js":9,"./namespace.js":11,"./types/id.js":12,"./types/is.js":13,"./types/object.js":14,"./types/observer.js":15,"./types/observerlist.js":16,"./types/proxyobserver.js":17,"./types/tokenlist.js":18,"./types/validate.js":19,"./types/version.js":20,"./util/clone.js":21,"./util/comparator.js":22,"./util/freeze.js":23}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.assignToNamespace=assignToNamespace;exports.Monster=void 0;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}var Namespace=function(){function Namespace(namespace){_classCallCheck(this,Namespace);if(namespace===undefined||typeof namespace!=="string"){throw new Error("namespace is not a string")}this.namespace=namespace}_createClass(Namespace,[{key:"getNamespace",value:function getNamespace(){return this.namespace}},{key:"toString",value:function toString(){return this.getNamespace()}}]);return Namespace}();var Monster=new Namespace("Monster");exports.Monster=Monster;assignToNamespace("Monster",assignToNamespace);function assignToNamespace(ns){var current=namespaceFor(ns.split("."));for(var i=0,l=arguments.length<=1?0:arguments.length-1;i<l;i++){current[objectName(i+1<1||arguments.length<=i+1?undefined:arguments[i+1])]=i+1<1||arguments.length<=i+1?undefined:arguments[i+1]}}function objectName(fn){try{if(typeof fn!=="function"){throw new Error("the first argument is not a function or class.")}if(fn.hasOwnProperty("name")){return fn.name}if("function"===typeof fn.toString){var s=fn.toString();var f=s.match(/^\s*function\s+([^\s(]+)/);if(Array.isArray(f)&&typeof f[1]==="string"){return f[1]}var c=s.match(/^\s*class\s+([^\s(]+)/);if(Array.isArray(c)&&typeof c[1]==="string"){return c[1]}}}catch(e){throw new Error("exception "+e)}throw new Error("the name of the class or function cannot be resolved.")}function namespaceFor(parts){var space=Monster,ns="Monster";for(var i=0;i<parts.length;i++){if("Monster"===parts[i]){continue}ns+="."+parts[i];if(!space.hasOwnProperty(parts[i])){space[parts[i]]=new Namespace(ns)}space=space[parts[i]]}return space}},{}],12:[function(require,module,exports){(function(global){(function(){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.ID=void 0;var _namespace=require("../namespace.js");var _random=require("../math/random.js");require("../types/object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var internalCounter=0;var ID=function(_Monster$Types$Object){_inherits(ID,_Monster$Types$Object);var _super=_createSuper(ID);function ID(){var _this;_classCallCheck(this,ID);_this=_super.call(this);internalCounter+=1;_this.id=global.btoa((0,_random.random)(1,1e4)).replace(/=/g,"").replace(/^[0-9]+/,"X")+internalCounter;return _this}_createClass(ID,[{key:"toString",value:function toString(){return this.id}}]);return ID}(_namespace.Monster.Types.Object);exports.ID=ID;_namespace.Monster.assignToNamespace("Monster.Types",ID)}).call(this)}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../math/random.js":9,"../namespace.js":11,"../types/object.js":14}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.isPrimitive=isPrimitive;exports.isBoolean=isBoolean;exports.isString=isString;exports.isObject=isObject;exports.isArray=isArray;exports.isFunction=isFunction;exports.isIterable=isIterable;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function isIterable(value){if(value===undefined)return false;if(value===null)return false;return typeof(value===null||value===void 0?void 0:value[Symbol.iterator])==="function"}function isPrimitive(value){var type;if(value===undefined||value===null||value===NaN){return true}type=_typeof(value);if(type==="string"||type==="number"||type==="boolean"||type==="symbol"){return true}return false}function isBoolean(value){if(value===true||value===false){return true}return false}function isString(value){if(value===undefined||typeof value!=="string"){return false}return true}function isObject(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(_typeof(value)==="object"){return true}return false}function isArray(value){if(Array.isArray(value)){return true}return false}function isFunction(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(typeof value==="function"){return true}return false}_namespace.Monster.assignToNamespace("Monster.Types",isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable)},{"../namespace.js":11}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.Object=void 0;var _namespace=require("../namespace.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}var _Object=function(){function Object(){_classCallCheck(this,Object)}_createClass(Object,[{key:"toString",value:function toString(){return JSON.stringify(this)}}]);return Object}();exports.Object=_Object;_namespace.Monster.assignToNamespace("Monster.Types",_Object)},{"../namespace.js":11}],15:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.Observer=void 0;var _namespace=require("../namespace.js");var _tokenlist=require("../types/tokenlist.js");var _is=require("../types/is.js");require("../types/object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Observer=function(_Monster$Types$Object){_inherits(Observer,_Monster$Types$Object);var _super=_createSuper(Observer);function Observer(callback){var _this;_classCallCheck(this,Observer);_this=_super.call(this);if(typeof callback!=="function"){throw new Error("observer callback must be a function")}_this.callback=callback;for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key]}_this.arguments=args;_this.tags=new _tokenlist.TokenList;return _this}_createClass(Observer,[{key:"addTag",value:function addTag(tag){this.tags.add(tag);return this}},{key:"removeTag",value:function removeTag(tag){this.tags.remove(tag);return this}},{key:"getTags",value:function getTags(){return this.tags.entries()}},{key:"hasTag",value:function hasTag(tag){return this.tags.contains(tag)}},{key:"update",value:function update(subject){var self=this;return new Promise(function(resolve,reject){if(!(0,_is.isObject)(subject)){reject("subject must be an object")}var result=self.callback.apply(subject,self.arguments);resolve(result)})}}]);return Observer}(_namespace.Monster.Types.Object);exports.Observer=Observer;_namespace.Monster.assignToNamespace("Monster.Types",Observer)},{"../namespace.js":11,"../types/is.js":13,"../types/object.js":14,"../types/tokenlist.js":18}],16:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.ObserverList=void 0;var _namespace=require("../namespace.js");require("../types/object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var ObserverList=function(_Monster$Types$Object){_inherits(ObserverList,_Monster$Types$Object);var _super=_createSuper(ObserverList);function ObserverList(){var _this;_classCallCheck(this,ObserverList);_this=_super.call(this);_this.observers=[];return _this}_createClass(ObserverList,[{key:"attach",value:function attach(observer){checkIsObserver(observer);this.observers.push(observer);return this}},{key:"detach",value:function detach(observer){checkIsObserver(observer);var i=0,l=this.observers.length;for(;i<l;i++){if(this.observers[i]===observer){this.observers.splice(i,1)}}return this}},{key:"contains",value:function contains(observer){checkIsObserver(observer);var i=0,l=this.observers.length;for(;i<l;i++){if(this.observers[i]===observer){return true}}return false}},{key:"notify",value:function notify(subject){var pomises=[];var i=0,l=this.observers.length;for(;i<l;i++){pomises.push(this.observers[i].update(subject))}return Promise.all(pomises)}}]);return ObserverList}(_namespace.Monster.Types.Object);exports.ObserverList=ObserverList;function checkIsObserver(observer){if(!(observer instanceof _namespace.Monster.Types.Observer)){throw new Error("argument must be instance of observer")}return true}_namespace.Monster.assignToNamespace("Monster.Types",ObserverList)},{"../namespace.js":11,"../types/object.js":14}],17:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.ProxyObserver=void 0;var _namespace=require("../namespace.js");var _object=require("../types/object.js");var _validate=require("./validate.js");var _observerlist=require("./observerlist.js");var _observer=require("./observer.js");var _is=require("./is.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var proxySet=new WeakSet;var ProxyObserver=function(_Object){_inherits(ProxyObserver,_Object);var _super=_createSuper(ProxyObserver);function ProxyObserver(object){var _this;_classCallCheck(this,ProxyObserver);_this=_super.call(this);(0,_validate.validateObject)(object);_this.realSubject=object;_this.subject=new Proxy(object,getHandler.call(_assertThisInitialized(_this)));proxySet.add(_this.subject);_this.observers=new _observerlist.ObserverList;return _this}_createClass(ProxyObserver,[{key:"getSubject",value:function getSubject(){return this.subject}},{key:"getRealSubject",value:function getRealSubject(){return this.realSubject}},{key:"attachObserver",value:function attachObserver(observer){this.observers.attach(observer);return this}},{key:"detachObserver",value:function detachObserver(observer){this.observers.detach(observer);return this}},{key:"notifyObservers",value:function notifyObservers(){this.observers.notify(this);return this}},{key:"containsObserver",value:function containsObserver(observer){return this.observers.contains(observer)}}]);return ProxyObserver}(Object);exports.ProxyObserver=ProxyObserver;_namespace.Monster.assignToNamespace("Monster.Types",ProxyObserver);function getHandler(){var proxy=this;var handler={get:function get(target,property,receiver){var prop=target===null||target===void 0?void 0:target[property];if(prop===undefined){return undefined}if((0,_is.isArray)(prop)||(0,_is.isObject)(prop)&&!proxySet.has(prop)){target[property]=new Proxy(prop,handler);proxySet.add(prop)}return target[property]},set:function set(target,property,value,receiver){target[property]=value;proxy.observers.notify(proxy);return true},deleteProperty:function deleteProperty(target,property){if(property in target){delete target[property];proxy.observers.notify(proxy);return true}return false},defineProperty:function defineProperty(target,property,descriptor){var result=Reflect.defineProperty(target,property,descriptor);proxy.observers.notify(proxy);return parseURLToResultingURLRecord()},setPrototypeOf:function setPrototypeOf(target,prototype){var result=Reflect.setPrototypeOf(object1,prototype);proxy.observers.notify(proxy);return result}};return handler}},{"../namespace.js":11,"../types/object.js":14,"./is.js":13,"./observer.js":15,"./observerlist.js":16,"./validate.js":19}],18:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.TokenList=void 0;var _namespace=require("../namespace.js");var _object=require("../types/object.js");var _is=require("../types/is.js");var _validate=require("../types/validate.js");function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it["return"]!=null)it["return"]()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var TokenList=function(_Object){_inherits(TokenList,_Object);var _super=_createSuper(TokenList);function TokenList(init){var _this;_classCallCheck(this,TokenList);_this=_super.call(this);_this.tokens=new Set;if(typeof init!=="undefined"){_this.add(init)}return _this}_createClass(TokenList,[{key:"getIterator",value:function getIterator(){return this[Symbol.iterator]()}},{key:Symbol.iterator,value:function value(){var index=0;var entries=this.entries();return{next:function next(){if(index<entries.length){return{value:entries===null||entries===void 0?void 0:entries[index++],done:false}}else{return{done:true}}}}}},{key:"contains",value:function contains(value){var _this2=this;if((0,_is.isString)(value)){value=value.trim();var counter=0;value.split(" ").forEach(function(token){if(_this2.tokens.has(token.trim())===false)return false;counter++});return counter>0?true:false}if((0,_is.isIterable)(value)){var _counter=0;var _iterator=_createForOfIteratorHelper(value),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var token=_step.value;(0,_validate.validateString)(token);if(this.tokens.has(token.trim())===false)return false;_counter++}}catch(err){_iterator.e(err)}finally{_iterator.f()}return _counter>0?true:false}return false}},{key:"add",value:function add(value){var _this3=this;if((0,_is.isString)(value)){value.split(" ").forEach(function(token){_this3.tokens.add(token.trim())})}else if((0,_is.isIterable)(value)){var _iterator2=_createForOfIteratorHelper(value),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var token=_step2.value;(0,_validate.validateString)(token);this.tokens.add(token.trim())}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}},{key:"clear",value:function clear(){this.tokens.clear();return this}},{key:"remove",value:function remove(value){var _this4=this;if((0,_is.isString)(value)){value.split(" ").forEach(function(token){_this4.tokens["delete"](token.trim())})}else if((0,_is.isIterable)(value)){var _iterator3=_createForOfIteratorHelper(value),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var token=_step3.value;(0,_validate.validateString)(token);this.tokens["delete"](token.trim())}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}},{key:"replace",value:function replace(token,newToken){(0,_validate.validateString)(token);(0,_validate.validateString)(newToken);if(!this.contains(token)){return this}var a=Array.from(this.tokens);var i=a.indexOf(token);if(i===-1)return this;a.splice(i,1,newToken);this.tokens=new Set;this.add(a);return this}},{key:"toggle",value:function toggle(value){var _this5=this;if((0,_is.isString)(value)){value.split(" ").forEach(function(token){toggleValue.call(_this5,token)})}else if((0,_is.isIterable)(value)){var _iterator4=_createForOfIteratorHelper(value),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var token=_step4.value;toggleValue.call(this,token)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}},{key:"entries",value:function entries(){return Array.from(this.tokens)}},{key:"forEach",value:function forEach(callback){(0,_validate.validateFunction)(callback);this.tokens.forEach(callback);return this}},{key:"toString",value:function toString(){return this.entries().join(" ")}}]);return TokenList}(Object);exports.TokenList=TokenList;function toggleValue(token){if(!(this instanceof TokenList))throw Error("must be called with TokenList.call");(0,_validate.validateString)(token);token=token.trim();if(this.contains(token)){this.remove(token);return this}this.add(token);return this}_namespace.Monster.assignToNamespace("Monster.Types",TokenList)},{"../namespace.js":11,"../types/is.js":13,"../types/object.js":14,"../types/validate.js":19}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.validatePrimitive=validatePrimitive;exports.validateBoolean=validateBoolean;exports.validateString=validateString;exports.validateObject=validateObject;exports.validateArray=validateArray;exports.validateFunction=validateFunction;exports.validateIterable=validateIterable;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");var _is=require("../types/is.js");function validateIterable(value){if(!(0,_is.isIterable)(value)){throw new TypeError("value is not iterable")}}function validatePrimitive(value){if(!(0,_is.isPrimitive)(value)){throw new TypeError("value is not a primitive")}}function validateBoolean(value){if(!(0,_is.isBoolean)(value)){throw new TypeError("value is not a boolean")}}function validateString(value){if(!(0,_is.isString)(value)){throw new TypeError("value is not a string")}}function validateObject(value){if(!(0,_is.isObject)(value)){throw new TypeError("value is not a object")}}function validateArray(value){if(!(0,_is.isArray)(value)){throw new TypeError("value is not not a array")}}function validateFunction(value){if(!(0,_is.isFunction)(value)){throw new TypeError("value is not a function")}}_namespace.Monster.assignToNamespace("Monster.Types",validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,validateIterable)},{"../namespace.js":11,"../types/is.js":13}],20:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});exports.getVersion=getVersion;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.Version=void 0;var _namespace=require("../namespace.js");require("../types/object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Version=function(_Monster$Types$Object){_inherits(Version,_Monster$Types$Object);var _super=_createSuper(Version);function Version(major,minor,patch){var _this;_classCallCheck(this,Version);_this=_super.call(this);if(typeof major==="string"&&minor===undefined&&patch===undefined){var parts=major.toString().split(".");major=parseInt(parts[0]||0);minor=parseInt(parts[1]||0);patch=parseInt(parts[2]||0)}if(major===undefined){throw new Error("major version is undefined")}if(minor===undefined){minor=0}if(patch===undefined){patch=0}_this.major=parseInt(major);_this.minor=parseInt(minor);_this.patch=parseInt(patch);if(isNaN(_this.major)){throw new Error("major is not a number")}if(isNaN(_this.minor)){throw new Error("minor is not a number")}if(isNaN(_this.patch)){throw new Error("patch is not a number")}return _this}_createClass(Version,[{key:"toString",value:function toString(){return this.major+"."+this.minor+"."+this.patch}},{key:"compareTo",value:function compareTo(version){if(version instanceof Version){version=version.toString()}if(typeof version!=="string"){throw new Error("type exception")}if(version===this.toString()){return 0}var a=[this.major,this.minor,this.patch];var b=version.split(".");var len=Math.max(a.length,b.length);for(var i=0;i<len;i+=1){if(a[i]&&!b[i]&&parseInt(a[i])>0||parseInt(a[i])>parseInt(b[i])){return 1}else if(b[i]&&!a[i]&&parseInt(b[i])>0||parseInt(a[i])<parseInt(b[i])){return-1}}return 0}}]);return Version}(_namespace.Monster.Types.Object);exports.Version=Version;_namespace.Monster.assignToNamespace("Monster.Types",Version);var monsterVersion;function getVersion(){if(monsterVersion instanceof Version){return monsterVersion}monsterVersion=new Version("1.3.0");return monsterVersion}_namespace.Monster.assignToNamespace("Monster",getVersion)},{"../namespace.js":11,"../types/object.js":14}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.clone=clone;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");var _is=require("../types/is.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function clone(obj){if(null===obj){return obj}if((0,_is.isPrimitive)(obj)){return obj}if((0,_is.isFunction)(obj)){return obj}if((0,_is.isArray)(obj)){var copy=[];for(var i=0,len=obj.length;i<len;i++){copy[i]=clone(obj[i])}return copy}if((0,_is.isObject)(obj)){if(obj instanceof Date){var _copy=new Date;_copy.setTime(obj.getTime());return _copy}if(typeof Element!=="undefined"&&obj instanceof Element)return obj;if(typeof HTMLDocument!=="undefined"&&obj instanceof HTMLDocument)return obj;if(typeof DocumentFragment!=="undefined"&&obj instanceof DocumentFragment)return obj;if(typeof globalContext!=="undefined"&&obj===globalContext)return obj;if(typeof window!=="undefined"&&obj===window)return obj;if(typeof document!=="undefined"&&obj===document)return obj;if(typeof navigator!=="undefined"&&obj===navigator)return obj;if(typeof JSON!=="undefined"&&obj===JSON)return obj;try{if(obj instanceof Proxy){return obj}}catch(e){}return cloneObject(obj)}throw new Error("unable to clone obj! its type isn't supported.")}function cloneObject(obj){var copy;if(_typeof(obj.hasOwnProperty("getClone"))&&obj.getClone==="function"){return obj.getClone()}copy={};if(typeof obj.constructor==="function"&&typeof obj.constructor.call==="function"){copy=new obj.constructor}for(var key in obj){if(!obj.hasOwnProperty(key)){continue}if(_namespace.Monster.Types.isPrimitive(obj[key])){copy[key]=obj[key];continue}copy[key]=clone(obj[key])}return copy}_namespace.Monster.assignToNamespace("Monster.Util",clone)},{"../namespace.js":11,"../types/is.js":13}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _object.Monster}});exports.Comparator=void 0;var _object=require("../types/object.js");var _is=require("../types/is.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Comparator=function(_Object){_inherits(Comparator,_Object);var _super=_createSuper(Comparator);function Comparator(callback){var _this;_classCallCheck(this,Comparator);_this=_super.call(this);if((0,_is.isFunction)(callback)){_this.compare=callback}else if(callback!==undefined){throw new TypeError("unsupported type")}else{_this.compare=function(a,b){if(_typeof(a)!==_typeof(b)){throw new TypeError("impractical comparison")}if(a===b){return 0}return a<b?-1:1}}return _this}_createClass(Comparator,[{key:"reverse",value:function reverse(){var original=this.compare;this.compare=function(a,b){return original(b,a)};return this}},{key:"equal",value:function equal(a,b){return this.compare(a,b)===0}},{key:"greaterThan",value:function greaterThan(a,b){return this.compare(a,b)>0}},{key:"greaterThanOrEqual",value:function greaterThanOrEqual(a,b){return this.greaterThan(a,b)||this.equal(a,b)}},{key:"lessThanOrEqual",value:function lessThanOrEqual(a,b){return this.lessThan(a,b)||this.equal(a,b)}},{key:"lessThan",value:function lessThan(a,b){return this.compare(a,b)<0}}]);return Comparator}(Object);exports.Comparator=Comparator;_object.Monster.assignToNamespace("Monster.Util",Comparator)},{"../types/is.js":13,"../types/object.js":14}],23:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deepFreeze=deepFreeze;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");var _validate=require("../types/validate.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it["return"]!=null)it["return"]()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}function deepFreeze(object){(0,_validate.validateObject)(object);var propNames=Object.getOwnPropertyNames(object);var _iterator=_createForOfIteratorHelper(propNames),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var name=_step.value;var value=object[name];object[name]=value&&_typeof(value)==="object"?deepFreeze(value):value}}catch(err){_iterator.e(err)}finally{_iterator.f()}return Object.freeze(object)}_namespace.Monster.assignToNamespace("Monster.Util",deepFreeze)},{"../namespace.js":11,"../types/validate.js":19}]},{},[10]);
+/** Monster 1.4.0, © 2021 schukai GmbH, Released under the AGPL 3.0 License. */
+(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.AbstractConstraint=void 0;var _namespace=require("../namespace.js");var _object=require("../types/object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var AbstractConstraint=function(_Object){_inherits(AbstractConstraint,_Object);var _super=_createSuper(AbstractConstraint);function AbstractConstraint(){_classCallCheck(this,AbstractConstraint);return _super.call(this)}_createClass(AbstractConstraint,[{key:"isValid",value:function isValid(value){return Promise.reject(value)}}]);return AbstractConstraint}(Object);exports.AbstractConstraint=AbstractConstraint;_namespace.Monster.assignToNamespace("Monster.Constraints",AbstractConstraint)},{"../namespace.js":11,"../types/object.js":14}],2:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.AbstractOperator=void 0;var _abstract=require("./abstract.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var AbstractOperator=function(_AbstractConstraint){_inherits(AbstractOperator,_AbstractConstraint);var _super=_createSuper(AbstractOperator);function AbstractOperator(operantA,operantB){var _this;_classCallCheck(this,AbstractOperator);_this=_super.call(this);if(!(operantA instanceof _abstract.AbstractConstraint)||!(operantB instanceof _abstract.AbstractConstraint)){throw new TypeError("parameters must be from type AbstractConstraint")}_this.operantA=operantA;_this.operantB=operantB;return _this}return AbstractOperator}(_abstract.AbstractConstraint);exports.AbstractOperator=AbstractOperator;_abstract.Monster.assignToNamespace("Monster.Constraints",AbstractOperator)},{"./abstract.js":1}],3:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.AndOperator=void 0;var _abstract=require("./abstract.js");var _abstractoperator=require("./abstractoperator.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var AndOperator=function(_AbstractOperator){_inherits(AndOperator,_AbstractOperator);var _super=_createSuper(AndOperator);function AndOperator(){_classCallCheck(this,AndOperator);return _super.apply(this,arguments)}_createClass(AndOperator,[{key:"isValid",value:function isValid(value){return Promise.all([this.operantA.isValid(value),this.operantB.isValid(value)])}}]);return AndOperator}(_abstractoperator.AbstractOperator);exports.AndOperator=AndOperator;_abstract.Monster.assignToNamespace("Monster.Constraints",AndOperator)},{"./abstract.js":1,"./abstractoperator.js":2}],4:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.Invalid=void 0;var _abstract=require("./abstract.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Invalid=function(_AbstractConstraint){_inherits(Invalid,_AbstractConstraint);var _super=_createSuper(Invalid);function Invalid(){_classCallCheck(this,Invalid);return _super.apply(this,arguments)}_createClass(Invalid,[{key:"isValid",value:function isValid(value){return Promise.reject(value)}}]);return Invalid}(_abstract.AbstractConstraint);exports.Invalid=Invalid;_abstract.Monster.assignToNamespace("Monster.Constraints",Invalid)},{"./abstract.js":1}],5:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.IsArray=void 0;var _abstract=require("./abstract.js");var _is=require("../types/is.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var IsArray=function(_AbstractConstraint){_inherits(IsArray,_AbstractConstraint);var _super=_createSuper(IsArray);function IsArray(){_classCallCheck(this,IsArray);return _super.apply(this,arguments)}_createClass(IsArray,[{key:"isValid",value:function isValid(value){if((0,_is.isArray)(value)){return Promise.resolve(value)}return Promise.reject(value)}}]);return IsArray}(_abstract.AbstractConstraint);exports.IsArray=IsArray;_abstract.Monster.assignToNamespace("Monster.Constraints",IsArray)},{"../types/is.js":13,"./abstract.js":1}],6:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.IsObject=void 0;var _abstract=require("./abstract.js");var _is=require("../types/is.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var IsObject=function(_AbstractConstraint){_inherits(IsObject,_AbstractConstraint);var _super=_createSuper(IsObject);function IsObject(){_classCallCheck(this,IsObject);return _super.apply(this,arguments)}_createClass(IsObject,[{key:"isValid",value:function isValid(value){if((0,_is.isObject)(value)){return Promise.resolve(value)}return Promise.reject(value)}}]);return IsObject}(_abstract.AbstractConstraint);exports.IsObject=IsObject;_abstract.Monster.assignToNamespace("Monster.Constraints",IsObject)},{"../types/is.js":13,"./abstract.js":1}],7:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstractoperator.Monster}});exports.OrOperator=void 0;var _abstractoperator=require("./abstractoperator.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var OrOperator=function(_AbstractOperator){_inherits(OrOperator,_AbstractOperator);var _super=_createSuper(OrOperator);function OrOperator(){_classCallCheck(this,OrOperator);return _super.apply(this,arguments)}_createClass(OrOperator,[{key:"isValid",value:function isValid(value){var self=this;return new Promise(function(resolve,reject){var a,b;self.operantA.isValid(value).then(function(){resolve()})["catch"](function(){a=false;if(b===false){reject()}});self.operantB.isValid(value).then(function(){resolve()})["catch"](function(){b=false;if(a===false){reject()}})})}}]);return OrOperator}(_abstractoperator.AbstractOperator);exports.OrOperator=OrOperator;_abstractoperator.Monster.assignToNamespace("Monster.Constraints",OrOperator)},{"./abstractoperator.js":2}],8:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _abstract.Monster}});exports.Valid=void 0;var _abstract=require("./abstract.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Valid=function(_AbstractConstraint){_inherits(Valid,_AbstractConstraint);var _super=_createSuper(Valid);function Valid(){_classCallCheck(this,Valid);return _super.apply(this,arguments)}_createClass(Valid,[{key:"isValid",value:function isValid(value){return Promise.resolve(value)}}]);return Valid}(_abstract.AbstractConstraint);exports.Valid=Valid;_abstract.Monster.assignToNamespace("Monster.Constraints",Valid)},{"./abstract.js":1}],9:[function(require,module,exports){(function(global){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.random=random;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");function random(min,max){if(min===undefined){min=0}if(max===undefined){max=MAX}if(max<min){throw new Error("max must be greater than min")}return Math.round(create(min,max))}var MAX=1e9;Math.log2=Math.log2||function(n){return Math.log(n)/Math.log(2)};function create(min,max){var crypt;if(typeof global!=="undefined"){var _global,_global2;crypt=((_global=global)===null||_global===void 0?void 0:_global["crypto"])||((_global2=global)===null||_global2===void 0?void 0:_global2["msCrypto"])}else{crypt=typeof crypto!=="undefined"?crypto:undefined}if(typeof crypt==="undefined"){throw new Error("missing crypt")}var rval=0;var range=max-min;if(range<2){return min}var bitsNeeded=Math.ceil(Math.log2(range));if(bitsNeeded>53){throw new Error("we cannot generate numbers larger than 53 bits.")}var bytesNeeded=Math.ceil(bitsNeeded/8);var mask=Math.pow(2,bitsNeeded)-1;var byteArray=new Uint8Array(bytesNeeded);crypt.getRandomValues(byteArray);var p=(bytesNeeded-1)*8;for(var i=0;i<bytesNeeded;i++){rval+=byteArray[i]*Math.pow(2,p);p-=8}rval=rval&mask;if(rval>=range){return create(min,max)}return min+rval}_namespace.Monster.assignToNamespace("Monster.Math",random)}).call(this)}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../namespace.js":11}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("./namespace.js");require("./types/id.js");require("./types/is.js");require("./types/object.js");require("./types/observer.js");require("./types/observerlist.js");require("./types/proxyobserver.js");require("./types/version.js");require("./types/tokenlist.js");require("./types/validate.js");require("./math/random.js");require("./util/clone.js");require("./util/comparator.js");require("./util/freeze.js");require("./constraints/abstract.js");require("./constraints/andoperator.js");require("./constraints/invalid.js");require("./constraints/isarray.js");require("./constraints/isobject.js");require("./constraints/abstractoperator.js");require("./constraints/oroperator.js");require("./constraints/valid.js");_namespace.Monster.Util.deepFreeze(_namespace.Monster)},{"./constraints/abstract.js":1,"./constraints/abstractoperator.js":2,"./constraints/andoperator.js":3,"./constraints/invalid.js":4,"./constraints/isarray.js":5,"./constraints/isobject.js":6,"./constraints/oroperator.js":7,"./constraints/valid.js":8,"./math/random.js":9,"./namespace.js":11,"./types/id.js":12,"./types/is.js":13,"./types/object.js":14,"./types/observer.js":15,"./types/observerlist.js":16,"./types/proxyobserver.js":17,"./types/tokenlist.js":19,"./types/validate.js":21,"./types/version.js":22,"./util/clone.js":23,"./util/comparator.js":24,"./util/freeze.js":25}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.assignToNamespace=assignToNamespace;exports.Monster=void 0;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}var Namespace=function(){function Namespace(namespace){_classCallCheck(this,Namespace);if(namespace===undefined||typeof namespace!=="string"){throw new Error("namespace is not a string")}this.namespace=namespace}_createClass(Namespace,[{key:"getNamespace",value:function getNamespace(){return this.namespace}},{key:"toString",value:function toString(){return this.getNamespace()}}]);return Namespace}();var Monster=new Namespace("Monster");exports.Monster=Monster;assignToNamespace("Monster",assignToNamespace);function assignToNamespace(ns){var current=namespaceFor(ns.split("."));for(var i=0,l=arguments.length<=1?0:arguments.length-1;i<l;i++){current[objectName(i+1<1||arguments.length<=i+1?undefined:arguments[i+1])]=i+1<1||arguments.length<=i+1?undefined:arguments[i+1]}}function objectName(fn){try{if(typeof fn!=="function"){throw new Error("the first argument is not a function or class.")}if(fn.hasOwnProperty("name")){return fn.name}if("function"===typeof fn.toString){var s=fn.toString();var f=s.match(/^\s*function\s+([^\s(]+)/);if(Array.isArray(f)&&typeof f[1]==="string"){return f[1]}var c=s.match(/^\s*class\s+([^\s(]+)/);if(Array.isArray(c)&&typeof c[1]==="string"){return c[1]}}}catch(e){throw new Error("exception "+e)}throw new Error("the name of the class or function cannot be resolved.")}function namespaceFor(parts){var space=Monster,ns="Monster";for(var i=0;i<parts.length;i++){if("Monster"===parts[i]){continue}ns+="."+parts[i];if(!space.hasOwnProperty(parts[i])){space[parts[i]]=new Namespace(ns)}space=space[parts[i]]}return space}},{}],12:[function(require,module,exports){(function(global){(function(){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.ID=void 0;var _namespace=require("../namespace.js");var _random=require("../math/random.js");require("../types/object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var internalCounter=0;var ID=function(_Monster$Types$Object){_inherits(ID,_Monster$Types$Object);var _super=_createSuper(ID);function ID(){var _this;_classCallCheck(this,ID);_this=_super.call(this);internalCounter+=1;_this.id=global.btoa((0,_random.random)(1,1e4)).replace(/=/g,"").replace(/^[0-9]+/,"X")+internalCounter;return _this}_createClass(ID,[{key:"toString",value:function toString(){return this.id}}]);return ID}(_namespace.Monster.Types.Object);exports.ID=ID;_namespace.Monster.assignToNamespace("Monster.Types",ID)}).call(this)}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../math/random.js":9,"../namespace.js":11,"../types/object.js":14}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.isPrimitive=isPrimitive;exports.isBoolean=isBoolean;exports.isString=isString;exports.isObject=isObject;exports.isArray=isArray;exports.isFunction=isFunction;exports.isIterable=isIterable;exports.isInteger=isInteger;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function isIterable(value){if(value===undefined)return false;if(value===null)return false;return typeof(value===null||value===void 0?void 0:value[Symbol.iterator])==="function"}function isPrimitive(value){var type;if(value===undefined||value===null||value===NaN){return true}type=_typeof(value);if(type==="string"||type==="number"||type==="boolean"||type==="symbol"){return true}return false}function isBoolean(value){if(value===true||value===false){return true}return false}function isString(value){if(value===undefined||typeof value!=="string"){return false}return true}function isObject(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(_typeof(value)==="object"){return true}return false}function isArray(value){if(Array.isArray(value)){return true}return false}function isFunction(value){if(isArray(value))return false;if(isPrimitive(value))return false;if(typeof value==="function"){return true}return false}function isInteger(value){return Number.isInteger(value)}_namespace.Monster.assignToNamespace("Monster.Types",isPrimitive,isBoolean,isString,isObject,isArray,isFunction,isIterable,isInteger)},{"../namespace.js":11}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.Object=void 0;var _namespace=require("../namespace.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}var _Object=function(){function Object(){_classCallCheck(this,Object)}_createClass(Object,[{key:"toString",value:function toString(){return JSON.stringify(this)}}]);return Object}();exports.Object=_Object;_namespace.Monster.assignToNamespace("Monster.Types",_Object)},{"../namespace.js":11}],15:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.Observer=void 0;var _namespace=require("../namespace.js");var _tokenlist=require("../types/tokenlist.js");var _is=require("../types/is.js");require("../types/object.js");var _uniquequeue=require("../types/uniquequeue.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Observer=function(_Monster$Types$Object){_inherits(Observer,_Monster$Types$Object);var _super=_createSuper(Observer);function Observer(callback){var _this;_classCallCheck(this,Observer);_this=_super.call(this);if(typeof callback!=="function"){throw new Error("observer callback must be a function")}_this.callback=callback;for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key]}_this.arguments=args;_this.tags=new _tokenlist.TokenList;_this.queue=new _uniquequeue.UniqueQueue;return _this}_createClass(Observer,[{key:"addTag",value:function addTag(tag){this.tags.add(tag);return this}},{key:"removeTag",value:function removeTag(tag){this.tags.remove(tag);return this}},{key:"getTags",value:function getTags(){return this.tags.entries()}},{key:"hasTag",value:function hasTag(tag){return this.tags.contains(tag)}},{key:"update",value:function update(subject){var self=this;return new Promise(function(resolve,reject){if(!(0,_is.isObject)(subject)){reject("subject must be an object")}self.queue.add(subject);setTimeout(function(){if(self.queue.isEmpty()){resolve();return}var s=self.queue.poll();var result=self.callback.apply(s,self.arguments);if((0,_is.isObject)(result)&&result instanceof Promise){result.then(resolve)["catch"](reject);return}resolve(result)},0)})}}]);return Observer}(_namespace.Monster.Types.Object);exports.Observer=Observer;_namespace.Monster.assignToNamespace("Monster.Types",Observer)},{"../namespace.js":11,"../types/is.js":13,"../types/object.js":14,"../types/tokenlist.js":19,"../types/uniquequeue.js":20}],16:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.ObserverList=void 0;var _namespace=require("../namespace.js");require("../types/object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var ObserverList=function(_Monster$Types$Object){_inherits(ObserverList,_Monster$Types$Object);var _super=_createSuper(ObserverList);function ObserverList(){var _this;_classCallCheck(this,ObserverList);_this=_super.call(this);_this.observers=[];return _this}_createClass(ObserverList,[{key:"attach",value:function attach(observer){checkIsObserver(observer);this.observers.push(observer);return this}},{key:"detach",value:function detach(observer){checkIsObserver(observer);var i=0,l=this.observers.length;for(;i<l;i++){if(this.observers[i]===observer){this.observers.splice(i,1)}}return this}},{key:"contains",value:function contains(observer){checkIsObserver(observer);var i=0,l=this.observers.length;for(;i<l;i++){if(this.observers[i]===observer){return true}}return false}},{key:"notify",value:function notify(subject){var pomises=[];var i=0,l=this.observers.length;for(;i<l;i++){pomises.push(this.observers[i].update(subject))}return Promise.all(pomises)}}]);return ObserverList}(_namespace.Monster.Types.Object);exports.ObserverList=ObserverList;function checkIsObserver(observer){if(!(observer instanceof _namespace.Monster.Types.Observer)){throw new Error("argument must be instance of observer")}return true}_namespace.Monster.assignToNamespace("Monster.Types",ObserverList)},{"../namespace.js":11,"../types/object.js":14}],17:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.ProxyObserver=void 0;var _namespace=require("../namespace.js");var _object=require("../types/object.js");var _validate=require("./validate.js");var _observerlist=require("./observerlist.js");var _observer=require("./observer.js");var _is=require("./is.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var ProxyObserver=function(_Object){_inherits(ProxyObserver,_Object);var _super=_createSuper(ProxyObserver);function ProxyObserver(object){var _this;_classCallCheck(this,ProxyObserver);_this=_super.call(this);(0,_validate.validateObject)(object);_this.realSubject=object;_this.subject=new Proxy(object,getHandler.call(_assertThisInitialized(_this)));_this.objectMap=new WeakMap;_this.objectMap.set(_this.realSubject,_this.subject);_this.observers=new _observerlist.ObserverList;return _this}_createClass(ProxyObserver,[{key:"getSubject",value:function getSubject(){return this.subject}},{key:"getRealSubject",value:function getRealSubject(){return this.realSubject}},{key:"attachObserver",value:function attachObserver(observer){this.observers.attach(observer);return this}},{key:"detachObserver",value:function detachObserver(observer){this.observers.detach(observer);return this}},{key:"notifyObservers",value:function notifyObservers(){this.observers.notify(this);return this}},{key:"containsObserver",value:function containsObserver(observer){return this.observers.contains(observer)}}]);return ProxyObserver}(Object);exports.ProxyObserver=ProxyObserver;_namespace.Monster.assignToNamespace("Monster.Types",ProxyObserver);function getHandler(){var proxy=this;var handler={get:function get(target,key,receiver){var value=Reflect.get(target,key,receiver);if(_typeof(key)==="symbol"){return value}if((0,_is.isPrimitive)(value)){return value}if((0,_is.isArray)(value)||(0,_is.isObject)(value)){if(proxy.objectMap.has(value)){return proxy.objectMap.get(value)}else{var p=new Proxy(value,handler);proxy.objectMap.set(value,p);return p}}return value},set:function set(target,key,value,receiver){var result=Reflect.set(target,key,value,receiver);if((typeof property==="undefined"?"undefined":_typeof(property))!=="symbol"){proxy.observers.notify(proxy)}return result},deleteProperty:function deleteProperty(target,key){if(key in target){delete target[key];if(_typeof(key)!=="symbol"){proxy.observers.notify(proxy)}return true}return false},defineProperty:function defineProperty(target,key,descriptor){var result=Reflect.defineProperty(target,key,descriptor);if(_typeof(key)!=="symbol"){proxy.observers.notify(proxy)}return result},setPrototypeOf:function setPrototypeOf(target,key){var result=Reflect.setPrototypeOf(object1,key);if(_typeof(key)!=="symbol"){proxy.observers.notify(proxy)}return result}};return handler}},{"../namespace.js":11,"../types/object.js":14,"./is.js":13,"./observer.js":15,"./observerlist.js":16,"./validate.js":21}],18:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _object.Monster}});exports.Queue=void 0;var _object=require("./object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Queue=function(_Object){_inherits(Queue,_Object);var _super=_createSuper(Queue);function Queue(){var _this;_classCallCheck(this,Queue);_this=_super.call(this);_this.data=[];return _this}_createClass(Queue,[{key:"isEmpty",value:function isEmpty(){return this.data.length===0}},{key:"peek",value:function peek(){if(this.isEmpty()){return undefined}return this.data[0]}},{key:"add",value:function add(value){this.data.push(value);return this}},{key:"clear",value:function clear(){this.data=[];return this}},{key:"poll",value:function poll(){if(this.isEmpty()){return undefined}return this.data.shift()}}]);return Queue}(Object);exports.Queue=Queue;_object.Monster.assignToNamespace("Monster.Types",Queue)},{"./object.js":14}],19:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.TokenList=void 0;var _namespace=require("../namespace.js");var _object=require("../types/object.js");var _is=require("../types/is.js");var _validate=require("../types/validate.js");function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it["return"]!=null)it["return"]()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var TokenList=function(_Object){_inherits(TokenList,_Object);var _super=_createSuper(TokenList);function TokenList(init){var _this;_classCallCheck(this,TokenList);_this=_super.call(this);_this.tokens=new Set;if(typeof init!=="undefined"){_this.add(init)}return _this}_createClass(TokenList,[{key:"getIterator",value:function getIterator(){return this[Symbol.iterator]()}},{key:Symbol.iterator,value:function value(){var index=0;var entries=this.entries();return{next:function next(){if(index<entries.length){return{value:entries===null||entries===void 0?void 0:entries[index++],done:false}}else{return{done:true}}}}}},{key:"contains",value:function contains(value){var _this2=this;if((0,_is.isString)(value)){value=value.trim();var counter=0;value.split(" ").forEach(function(token){if(_this2.tokens.has(token.trim())===false)return false;counter++});return counter>0?true:false}if((0,_is.isIterable)(value)){var _counter=0;var _iterator=_createForOfIteratorHelper(value),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var token=_step.value;(0,_validate.validateString)(token);if(this.tokens.has(token.trim())===false)return false;_counter++}}catch(err){_iterator.e(err)}finally{_iterator.f()}return _counter>0?true:false}return false}},{key:"add",value:function add(value){var _this3=this;if((0,_is.isString)(value)){value.split(" ").forEach(function(token){_this3.tokens.add(token.trim())})}else if((0,_is.isIterable)(value)){var _iterator2=_createForOfIteratorHelper(value),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var token=_step2.value;(0,_validate.validateString)(token);this.tokens.add(token.trim())}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}},{key:"clear",value:function clear(){this.tokens.clear();return this}},{key:"remove",value:function remove(value){var _this4=this;if((0,_is.isString)(value)){value.split(" ").forEach(function(token){_this4.tokens["delete"](token.trim())})}else if((0,_is.isIterable)(value)){var _iterator3=_createForOfIteratorHelper(value),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var token=_step3.value;(0,_validate.validateString)(token);this.tokens["delete"](token.trim())}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}},{key:"replace",value:function replace(token,newToken){(0,_validate.validateString)(token);(0,_validate.validateString)(newToken);if(!this.contains(token)){return this}var a=Array.from(this.tokens);var i=a.indexOf(token);if(i===-1)return this;a.splice(i,1,newToken);this.tokens=new Set;this.add(a);return this}},{key:"toggle",value:function toggle(value){var _this5=this;if((0,_is.isString)(value)){value.split(" ").forEach(function(token){toggleValue.call(_this5,token)})}else if((0,_is.isIterable)(value)){var _iterator4=_createForOfIteratorHelper(value),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var token=_step4.value;toggleValue.call(this,token)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}else if(typeof value!=="undefined"){throw new TypeError("unsupported value")}return this}},{key:"entries",value:function entries(){return Array.from(this.tokens)}},{key:"forEach",value:function forEach(callback){(0,_validate.validateFunction)(callback);this.tokens.forEach(callback);return this}},{key:"toString",value:function toString(){return this.entries().join(" ")}}]);return TokenList}(Object);exports.TokenList=TokenList;function toggleValue(token){if(!(this instanceof TokenList))throw Error("must be called with TokenList.call");(0,_validate.validateString)(token);token=token.trim();if(this.contains(token)){this.remove(token);return this}this.add(token);return this}_namespace.Monster.assignToNamespace("Monster.Types",TokenList)},{"../namespace.js":11,"../types/is.js":13,"../types/object.js":14,"../types/validate.js":21}],20:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _queue.Monster}});exports.UniqueQueue=void 0;var _queue=require("./queue.js");var _validate=require("./validate.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _get(target,property,receiver){if(typeof Reflect!=="undefined"&&Reflect.get){_get=Reflect.get}else{_get=function _get(target,property,receiver){var base=_superPropBase(target,property);if(!base)return;var desc=Object.getOwnPropertyDescriptor(base,property);if(desc.get){return desc.get.call(receiver)}return desc.value}}return _get(target,property,receiver||target)}function _superPropBase(object,property){while(!Object.prototype.hasOwnProperty.call(object,property)){object=_getPrototypeOf(object);if(object===null)break}return object}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var UniqueQueue=function(_Queue){_inherits(UniqueQueue,_Queue);var _super=_createSuper(UniqueQueue);function UniqueQueue(){var _this;_classCallCheck(this,UniqueQueue);_this=_super.call(this);_this.unique=new WeakSet;return _this}_createClass(UniqueQueue,[{key:"add",value:function add(value){(0,_validate.validateObject)(value);if(!this.unique.has(value)){this.unique.add(value);_get(_getPrototypeOf(UniqueQueue.prototype),"add",this).call(this,value)}return this}},{key:"clear",value:function clear(){_get(_getPrototypeOf(UniqueQueue.prototype),"clear",this).call(this);this.unique=new WeakSet;return this}},{key:"poll",value:function poll(){if(this.isEmpty()){return undefined}var value=this.data.shift();this.unique["delete"](value);return value}}]);return UniqueQueue}(_queue.Queue);exports.UniqueQueue=UniqueQueue;_queue.Monster.assignToNamespace("Monster.Types",UniqueQueue)},{"./queue.js":18,"./validate.js":21}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.validatePrimitive=validatePrimitive;exports.validateBoolean=validateBoolean;exports.validateString=validateString;exports.validateObject=validateObject;exports.validateArray=validateArray;exports.validateFunction=validateFunction;exports.validateIterable=validateIterable;exports.validateInteger=validateInteger;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");var _is=require("../types/is.js");function validateIterable(value){if(!(0,_is.isIterable)(value)){throw new TypeError("value is not iterable")}}function validatePrimitive(value){if(!(0,_is.isPrimitive)(value)){throw new TypeError("value is not a primitive")}}function validateBoolean(value){if(!(0,_is.isBoolean)(value)){throw new TypeError("value is not a boolean")}}function validateString(value){if(!(0,_is.isString)(value)){throw new TypeError("value is not a string")}}function validateObject(value){if(!(0,_is.isObject)(value)){throw new TypeError("value is not a object")}}function validateArray(value){if(!(0,_is.isArray)(value)){throw new TypeError("value is not not a array")}}function validateFunction(value){if(!(0,_is.isFunction)(value)){throw new TypeError("value is not a function")}}function validateInteger(value){if(!(0,_is.isInteger)(value)){throw new TypeError("value is not an integer")}}_namespace.Monster.assignToNamespace("Monster.Types",validatePrimitive,validateBoolean,validateString,validateObject,validateArray,validateFunction,validateIterable,validateInteger)},{"../namespace.js":11,"../types/is.js":13}],22:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}Object.defineProperty(exports,"__esModule",{value:true});exports.getVersion=getVersion;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});exports.Version=void 0;var _namespace=require("../namespace.js");require("../types/object.js");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Version=function(_Monster$Types$Object){_inherits(Version,_Monster$Types$Object);var _super=_createSuper(Version);function Version(major,minor,patch){var _this;_classCallCheck(this,Version);_this=_super.call(this);if(typeof major==="string"&&minor===undefined&&patch===undefined){var parts=major.toString().split(".");major=parseInt(parts[0]||0);minor=parseInt(parts[1]||0);patch=parseInt(parts[2]||0)}if(major===undefined){throw new Error("major version is undefined")}if(minor===undefined){minor=0}if(patch===undefined){patch=0}_this.major=parseInt(major);_this.minor=parseInt(minor);_this.patch=parseInt(patch);if(isNaN(_this.major)){throw new Error("major is not a number")}if(isNaN(_this.minor)){throw new Error("minor is not a number")}if(isNaN(_this.patch)){throw new Error("patch is not a number")}return _this}_createClass(Version,[{key:"toString",value:function toString(){return this.major+"."+this.minor+"."+this.patch}},{key:"compareTo",value:function compareTo(version){if(version instanceof Version){version=version.toString()}if(typeof version!=="string"){throw new Error("type exception")}if(version===this.toString()){return 0}var a=[this.major,this.minor,this.patch];var b=version.split(".");var len=Math.max(a.length,b.length);for(var i=0;i<len;i+=1){if(a[i]&&!b[i]&&parseInt(a[i])>0||parseInt(a[i])>parseInt(b[i])){return 1}else if(b[i]&&!a[i]&&parseInt(b[i])>0||parseInt(a[i])<parseInt(b[i])){return-1}}return 0}}]);return Version}(_namespace.Monster.Types.Object);exports.Version=Version;_namespace.Monster.assignToNamespace("Monster.Types",Version);var monsterVersion;function getVersion(){if(monsterVersion instanceof Version){return monsterVersion}monsterVersion=new Version("1.4.0");return monsterVersion}_namespace.Monster.assignToNamespace("Monster",getVersion)},{"../namespace.js":11,"../types/object.js":14}],23:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.clone=clone;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");var _is=require("../types/is.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function clone(obj){if(null===obj){return obj}if((0,_is.isPrimitive)(obj)){return obj}if((0,_is.isFunction)(obj)){return obj}if((0,_is.isArray)(obj)){var copy=[];for(var i=0,len=obj.length;i<len;i++){copy[i]=clone(obj[i])}return copy}if((0,_is.isObject)(obj)){if(obj instanceof Date){var _copy=new Date;_copy.setTime(obj.getTime());return _copy}if(typeof Element!=="undefined"&&obj instanceof Element)return obj;if(typeof HTMLDocument!=="undefined"&&obj instanceof HTMLDocument)return obj;if(typeof DocumentFragment!=="undefined"&&obj instanceof DocumentFragment)return obj;if(typeof globalContext!=="undefined"&&obj===globalContext)return obj;if(typeof window!=="undefined"&&obj===window)return obj;if(typeof document!=="undefined"&&obj===document)return obj;if(typeof navigator!=="undefined"&&obj===navigator)return obj;if(typeof JSON!=="undefined"&&obj===JSON)return obj;try{if(obj instanceof Proxy){return obj}}catch(e){}return cloneObject(obj)}throw new Error("unable to clone obj! its type isn't supported.")}function cloneObject(obj){var copy;if(_typeof(obj.hasOwnProperty("getClone"))&&obj.getClone==="function"){return obj.getClone()}copy={};if(typeof obj.constructor==="function"&&typeof obj.constructor.call==="function"){copy=new obj.constructor}for(var key in obj){if(!obj.hasOwnProperty(key)){continue}if(_namespace.Monster.Types.isPrimitive(obj[key])){copy[key]=obj[key];continue}copy[key]=clone(obj[key])}return copy}_namespace.Monster.assignToNamespace("Monster.Util",clone)},{"../namespace.js":11,"../types/is.js":13}],24:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _object.Monster}});exports.Comparator=void 0;var _object=require("../types/object.js");var _is=require("../types/is.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var Comparator=function(_Object){_inherits(Comparator,_Object);var _super=_createSuper(Comparator);function Comparator(callback){var _this;_classCallCheck(this,Comparator);_this=_super.call(this);if((0,_is.isFunction)(callback)){_this.compare=callback}else if(callback!==undefined){throw new TypeError("unsupported type")}else{_this.compare=function(a,b){if(_typeof(a)!==_typeof(b)){throw new TypeError("impractical comparison")}if(a===b){return 0}return a<b?-1:1}}return _this}_createClass(Comparator,[{key:"reverse",value:function reverse(){var original=this.compare;this.compare=function(a,b){return original(b,a)};return this}},{key:"equal",value:function equal(a,b){return this.compare(a,b)===0}},{key:"greaterThan",value:function greaterThan(a,b){return this.compare(a,b)>0}},{key:"greaterThanOrEqual",value:function greaterThanOrEqual(a,b){return this.greaterThan(a,b)||this.equal(a,b)}},{key:"lessThanOrEqual",value:function lessThanOrEqual(a,b){return this.lessThan(a,b)||this.equal(a,b)}},{key:"lessThan",value:function lessThan(a,b){return this.compare(a,b)<0}}]);return Comparator}(Object);exports.Comparator=Comparator;_object.Monster.assignToNamespace("Monster.Util",Comparator)},{"../types/is.js":13,"../types/object.js":14}],25:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deepFreeze=deepFreeze;Object.defineProperty(exports,"Monster",{enumerable:true,get:function get(){return _namespace.Monster}});var _namespace=require("../namespace.js");var _validate=require("../types/validate.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it["return"]!=null)it["return"]()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}function deepFreeze(object){(0,_validate.validateObject)(object);var propNames=Object.getOwnPropertyNames(object);var _iterator=_createForOfIteratorHelper(propNames),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var name=_step.value;var value=object[name];object[name]=value&&_typeof(value)==="object"?deepFreeze(value):value}}catch(err){_iterator.e(err)}finally{_iterator.f()}return Object.freeze(object)}_namespace.Monster.assignToNamespace("Monster.Util",deepFreeze)},{"../namespace.js":11,"../types/validate.js":21}]},{},[10]);
diff --git a/packages/monster/package.json b/packages/monster/package.json
index 1e2fadcb16016499ce0c27c8ec9dc808b677cbdb..483d3997b46a76208b0dc969669befb8eeacf035 100644
--- a/packages/monster/package.json
+++ b/packages/monster/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@schukai/monster",
-  "version": "1.3.0",   
+  "version": "1.4.0",   
   "description": "Monster is a simple library for creating fast, robust and lightweight websites.",
   "keywords": [
     "framework",
diff --git a/packages/monster/source/constraints/andoperator.js b/packages/monster/source/constraints/andoperator.js
index 2ca15463eca4eb8a1de5a257078416b358715760..6de0b99310b4b1196ef462194855b9f3e9dc509d 100644
--- a/packages/monster/source/constraints/andoperator.js
+++ b/packages/monster/source/constraints/andoperator.js
@@ -12,7 +12,7 @@ import {AbstractOperator} from "./abstractoperator.js";
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
  * new Monster.Constraint.AndOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -21,8 +21,8 @@ import {AbstractOperator} from "./abstractoperator.js";
  *
  * ```
  * <script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/andoperator.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
  * new AndOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
diff --git a/packages/monster/source/constraints/invalid.js b/packages/monster/source/constraints/invalid.js
index 1349d7fa414fed599118d6e670c0ef9f4a144b32..7ac15566b8e9a70176bd83e19da1f8cfc2dbd01d 100644
--- a/packages/monster/source/constraints/invalid.js
+++ b/packages/monster/source/constraints/invalid.js
@@ -13,7 +13,7 @@ import {Monster, AbstractConstraint} from "./abstract.js";
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
  * new Monster.Constraint.Invalid().catch(()=>console.log(true));
  * </script>
  * ```
@@ -22,7 +22,7 @@ import {Monster, AbstractConstraint} from "./abstract.js";
  *
  * ```
  * <script type="module">
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/invalid.js';
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
  * new Invalid().catch(()=>console.log(true));
  * </script>
  * ```
diff --git a/packages/monster/source/constraints/isarray.js b/packages/monster/source/constraints/isarray.js
index 66becf6d8c6fa8a594ec178099a3e764d574a8fa..9b471dfc57ed9ac9aad41f9c6a7a756ee2c0f2a9 100644
--- a/packages/monster/source/constraints/isarray.js
+++ b/packages/monster/source/constraints/isarray.js
@@ -14,7 +14,7 @@ import {isArray} from "../types/is.js";
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
  * console.log(new Monster.Constraint.IsArray())
  * </script>
  * ```
@@ -23,7 +23,7 @@ import {isArray} from "../types/is.js";
  *
  * ```
  * <script type="module">
- * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isarray.js';
+ * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
  * console.log(new IsArray())
  * </script>
  * ```
diff --git a/packages/monster/source/constraints/isobject.js b/packages/monster/source/constraints/isobject.js
index b5ffe20f2f32ce6fcaeee01f5651a72f2e2a5d6f..b6b347749ced1b4a039d19b1480a51a7467b73d1 100644
--- a/packages/monster/source/constraints/isobject.js
+++ b/packages/monster/source/constraints/isobject.js
@@ -14,7 +14,7 @@ import {isObject} from "../types/is.js";
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
  * console.log(new Monster.Constraint.IsObject())
  * </script>
  * ```
@@ -23,7 +23,7 @@ import {isObject} from "../types/is.js";
  *
  * ```
  * <script type="module">
- * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/isobject.js';
+ * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
  * console.log(new IsObject())
  * </script>
  * ```
diff --git a/packages/monster/source/constraints/oroperator.js b/packages/monster/source/constraints/oroperator.js
index 0369f1fb8f4c2b55813c6f1989c1a2aa373ddc57..49eb8a00492e15e6b9f53d25688a46379997a4da 100644
--- a/packages/monster/source/constraints/oroperator.js
+++ b/packages/monster/source/constraints/oroperator.js
@@ -11,7 +11,7 @@ import {Monster, AbstractOperator} from "./abstractoperator.js";
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
  * new Monster.Constraint.OrOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -20,8 +20,8 @@ import {Monster, AbstractOperator} from "./abstractoperator.js";
  *
  * ```
  * <script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/valid.js';
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraint/oroperator.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
  * new OrOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
diff --git a/packages/monster/source/constraints/valid.js b/packages/monster/source/constraints/valid.js
index dda748a8aeccdfd59d8f658939f30fa82981df99..0c75047d04360f75fffb7992329c9d6fe0cc20c9 100644
--- a/packages/monster/source/constraints/valid.js
+++ b/packages/monster/source/constraints/valid.js
@@ -13,7 +13,7 @@ import {Monster, AbstractConstraint} from "./abstract.js";
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
  * new Monster.Constraint.Valid().then(()=>console.log(true));
  * </script>
  * ```
@@ -22,7 +22,7 @@ import {Monster, AbstractConstraint} from "./abstract.js";
  *
  * ```
  * <script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/constraints/valid.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
  * new Valid().then(()=>console.log(true));
  * </script>
  * ```
diff --git a/packages/monster/source/math/random.js b/packages/monster/source/math/random.js
index ee8dfd665f61191fefd4a7db537a03a239853ff1..6f94ed333cfa807b2372a851a8d342a54e5c9bf5 100644
--- a/packages/monster/source/math/random.js
+++ b/packages/monster/source/math/random.js
@@ -14,7 +14,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
  * console.log(Monster.Math.random(1,10)) // ↦ 5
  * </script>
  * ```
@@ -23,7 +23,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * <script type="module">
- * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/math/random.js';
+ * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
  * console.log(random(1,10)) // ↦ 5
  * </script>
  * ```
diff --git a/packages/monster/source/namespace.js b/packages/monster/source/namespace.js
index da4db08a0ffcd2577ebef45df9d203eeeb82971c..9c1bade47eeac7db2a68c17674a61762411929f0 100644
--- a/packages/monster/source/namespace.js
+++ b/packages/monster/source/namespace.js
@@ -71,7 +71,7 @@ assignToNamespace('Monster', assignToNamespace);
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/namespace.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/namespace.js';
  * function hello() {
  *            console.log('Hello World!');
  *        }
diff --git a/packages/monster/source/types/id.js b/packages/monster/source/types/id.js
index 90908b60eb820782cbb063c5a75c928d8b50f84a..1415a5140addce961ee35fed397cc044012c9d94 100644
--- a/packages/monster/source/types/id.js
+++ b/packages/monster/source/types/id.js
@@ -17,8 +17,7 @@ let internalCounter = 0;
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
- * console.log(new Monster.Types.ID())
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Monster.Types.ID())
  * </script>
  * ```
@@ -27,8 +26,7 @@ let internalCounter = 0;
  *
  * ```
  * <script type="module">
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
- * console.log(new ID())
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new ID())
  * </script>
  * ```
diff --git a/packages/monster/source/types/is.js b/packages/monster/source/types/is.js
index b7653c48b6b945b61fef65ac78c2ba3da764ff52..a8246d3c771f0b4755388acfe545ef9f60b38b7c 100644
--- a/packages/monster/source/types/is.js
+++ b/packages/monster/source/types/is.js
@@ -13,7 +13,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isIterable(null)) // ↦ false
  * console.log(Monster.Types.isIterable('hello')) // ↦ true
  * console.log(Monster.Types.isIterable([])) // ↦ true
@@ -24,7 +24,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * <script type="module">
- * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isIterable(null))  // ↦ false
  * console.log(isIterable('hello'))  // ↦ true
  * console.log(isIterable([]))  // ↦ true
@@ -51,7 +51,7 @@ function isIterable(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isPrimitive('2')) // ↦ false
  * console.log(Monster.Types.isPrimitive([])) // ↦ true
  * </script>
@@ -61,7 +61,7 @@ function isIterable(value) {
  *
  * ```
  * <script type="module">
- * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isPrimitive('2'))  // ↦ true
  * console.log(isPrimitive([]))  // ↦ false
  * </script>
@@ -96,7 +96,7 @@ function isPrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isBoolean('2')) // ↦ false
  * console.log(Monster.Types.isBoolean([])) // ↦ false
  * console.log(Monster.Types.isBoolean(true)) // ↦ true
@@ -107,7 +107,7 @@ function isPrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isBoolean('2'))  // ↦ false
  * console.log(isBoolean([]))  // ↦ false
  * console.log(isBoolean(2>4))  // ↦ true
@@ -136,7 +136,7 @@ function isBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isString('2')) // ↦ true
  * console.log(Monster.Types.isString([])) // ↦ false
  * </script>
@@ -146,7 +146,7 @@ function isBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isString('2'))  // ↦ true
  * console.log(isString([]))  // ↦ false
  * </script>
@@ -172,7 +172,7 @@ function isString(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isObject('2')) // ↦ false
  * console.log(Monster.Types.isObject([])) // ↦ false
  * console.log(Monster.Types.isObject({})) // ↦ true
@@ -183,7 +183,7 @@ function isString(value) {
  *
  * ```
  * <script type="module">
- * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isObject('2'))  // ↦ false
  * console.log(isObject([]))  // ↦ false
  * </script>
@@ -214,7 +214,7 @@ function isObject(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isArray('2')) // ↦ false
  * console.log(Monster.Types.isArray([])) // ↦ true
  * </script>
@@ -224,7 +224,7 @@ function isObject(value) {
  *
  * ```
  * <script type="module">
- * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isArray('2'))  // ↦ false
  * console.log(isArray([]))  // ↦ true
  * </script>
@@ -250,7 +250,7 @@ function isArray(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isFunction(()=>{})) // ↦ true
  * console.log(Monster.Types.isFunction('2')) // ↦ false
  * console.log(Monster.Types.isFunction([])) // ↦ false
@@ -261,7 +261,7 @@ function isArray(value) {
  *
  * ```
  * <script type="module">
- * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/is.js';
+ * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isFunction(()=>{})) // ↦ true
  * console.log(isFunction('2'))  // ↦ false
  * console.log(isFunction([]))  // ↦ false
@@ -286,5 +286,41 @@ function isFunction(value) {
 
 }
 
-Monster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable);
-export {Monster, isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable}
+/**
+ * checks whether the value passed is an integer
+ *
+ * you can call the method via the monster namespace `Monster.Types.isFunction()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+ * console.log(Monster.Types.isInteger(()=>{})) // ↦ true
+ * console.log(Monster.Types.isInteger('2')) // ↦ false
+ * console.log(Monster.Types.isInteger(2)) // ↦ true
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {isInteger} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+ * console.log(isInteger(()=>{})) // ↦ true
+ * console.log(isInteger('2'))  // ↦ false
+ * console.log(isInteger(2))  // ↦ true
+ * </script>
+ * ```
+ *
+ * @param {*} value
+ * @returns {boolean}
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+function isInteger(value) {
+    return Number.isInteger(value);
+}
+
+
+Monster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger);
+export {Monster, isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger}
diff --git a/packages/monster/source/types/object.js b/packages/monster/source/types/object.js
index fff2cef24487590a83e4a785ce4cf8a0ed0eda8e..4f1a1e1f28499527b1019ad12e3b53e04107f695 100644
--- a/packages/monster/source/types/object.js
+++ b/packages/monster/source/types/object.js
@@ -14,7 +14,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
  * console.log(new Monster.Types.Object())
  * console.log(new Monster.Types.Object())
  * </script>
@@ -24,7 +24,7 @@ import {Monster} from '../namespace.js';
  *
  * ```
  * <script type="module">
- * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/object.js';
+ * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
  * console.log(new Object())
  * console.log(new Object())
  * </script>
diff --git a/packages/monster/source/types/observer.js b/packages/monster/source/types/observer.js
index 9cf0b524ed9dc4b810e50764247ee197ca7f0084..d0e1453f307df36fa6caf3afe8192cebe17dfe77 100644
--- a/packages/monster/source/types/observer.js
+++ b/packages/monster/source/types/observer.js
@@ -8,6 +8,7 @@ import {Monster} from '../namespace.js';
 import {TokenList} from '../types/tokenlist.js';
 import {isObject} from '../types/is.js';
 import '../types/object.js';
+import {UniqueQueue} from '../types/uniquequeue.js';
 
 /**
  * an observer manages a callback function
@@ -16,7 +17,7 @@ import '../types/object.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
  * console.log(new Monster.Types.Observer())
  * </script>
  * ```
@@ -25,7 +26,7 @@ import '../types/object.js';
  *
  * ```
  * <script type="module">
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observer.js';
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
  * console.log(Observer())
  * </script>
  * ```
@@ -54,7 +55,7 @@ import '../types/object.js';
  * }, "a", 2, true)
  * </script>
  * ```
- * 
+ *
  * the callback function must have as many parameters as arguments are given.
  *
  *
@@ -79,6 +80,7 @@ class Observer extends Monster.Types.Object {
         this.callback = callback;
         this.arguments = args;
         this.tags = new TokenList;
+        this.queue = new UniqueQueue();
     }
 
     /**
@@ -130,8 +132,28 @@ class Observer extends Monster.Types.Object {
             if (!isObject(subject)) {
                 reject("subject must be an object");
             }
-            let result = self.callback.apply(subject, self.arguments);
-            resolve(result);
+
+            self.queue.add(subject);
+
+            setTimeout(() => {
+
+                // the queue and the settimeout ensure that an object is not 
+                // informed of the same change more than once.
+                if (self.queue.isEmpty()) {
+                    resolve();
+                    return;
+                }
+
+                let s = self.queue.poll();
+                let result = self.callback.apply(s, self.arguments);
+
+                if (isObject(result) && result instanceof Promise) {
+                    result.then(resolve).catch(reject);
+                    return;
+                }
+
+                resolve(result);
+            }, 0)
 
         });
 
diff --git a/packages/monster/source/types/observerlist.js b/packages/monster/source/types/observerlist.js
index 08ecdedeae80a9bf7756d08a1772662db277ede9..35b247f826ff468f4e97f23f9229ee8b7d720e5a 100644
--- a/packages/monster/source/types/observerlist.js
+++ b/packages/monster/source/types/observerlist.js
@@ -14,7 +14,7 @@ import '../types/object.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
  * console.log(new Monster.Types.ObserverList()) 
  * console.log(new Monster.Types.ObserverList()) 
  * </script>
@@ -24,7 +24,7 @@ import '../types/object.js';
  *
  * ```
  * <script type="module">
- * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/observerlist.js';
+ * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
  * console.log(ObserverList())
  * console.log(ObserverList())
  * </script>
diff --git a/packages/monster/source/types/proxyobserver.js b/packages/monster/source/types/proxyobserver.js
index 6810b922e1af5c07cd7e76e25c40a9ed928b3087..5077adcb6a3e67b05dde9ec3da67a676f4d1c2be 100644
--- a/packages/monster/source/types/proxyobserver.js
+++ b/packages/monster/source/types/proxyobserver.js
@@ -9,16 +9,8 @@ import {Object} from '../types/object.js';
 import {validateObject} from "./validate.js";
 import {ObserverList} from "./observerlist.js";
 import {Observer} from "./observer.js";
-import {isObject, isArray} from "./is.js";
+import {isObject, isArray, isPrimitive} from "./is.js";
 
-/**
- * store proxy objects
- *
- * @type {WeakSet<object>}
- */
-var proxySet = new WeakSet();
-
-// language=JavaScript
 /**
  * an observer manages a callback function
  *
@@ -26,7 +18,7 @@ var proxySet = new WeakSet();
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
  * console.log(new Monster.Types.ProxyObserver())
  * </script>
  * ```
@@ -35,7 +27,7 @@ var proxySet = new WeakSet();
  *
  * ```
  * <script type="module">
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/proxyobserver.js';
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
  * console.log(new ProxyObserver())
  * </script>
  * ```
@@ -82,7 +74,10 @@ class ProxyObserver extends Object {
         validateObject(object);
         this.realSubject = object
         this.subject = new Proxy(object, getHandler.call(this));
-        proxySet.add(this.subject);
+
+        this.objectMap = new WeakMap();
+        this.objectMap.set(this.realSubject, this.subject);
+
         this.observers = new ObserverList;
     }
 
@@ -101,7 +96,8 @@ class ProxyObserver extends Object {
      * get the proxied object
      *
      * @returns {object}
-     */    getRealSubject() {
+     */
+    getRealSubject() {
         return this.realSubject
     }
 
@@ -164,52 +160,79 @@ function getHandler() {
     const handler = {
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
-        get: function (target, property, receiver) {
-            const prop = target?.[property];
+        get: function (target, key, receiver) {
+
+            const value = Reflect.get(target, key, receiver);
 
-            // return if property not found
-            if (prop === undefined) {
-                return undefined;
+            if (typeof key === "symbol") {
+                return value;
+            }
+
+            if (isPrimitive(value)) {
+                return value;
             }
 
             // set value as proxy if object or array
-            if (isArray(prop) || isObject(prop) && !proxySet.has(prop)) {
-                target[property] = new Proxy(prop, handler);
-                proxySet.add(prop);
+            if ((isArray(value) || isObject(value))) {
+                if (proxy.objectMap.has(value)) {
+                    return proxy.objectMap.get(value);
+                } else {
+                    let p = new Proxy(value, handler);
+                    proxy.objectMap.set(value, p);
+                    return p;
+                }
+
             }
 
-            return target[property];
+            return value;
 
         },
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver 
-        set: function (target, property, value, receiver) {
-            target[property] = value
-            proxy.observers.notify(proxy);
-            return true;
+        set: function (target, key, value, receiver) {
+            const result = Reflect.set(target, key, value, receiver);
+            if (typeof property !== "symbol") {
+                proxy.observers.notify(proxy);
+            }
+
+            return result;
         },
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p
-        deleteProperty: function (target, property) {
-            if (property in target) {
-                delete target[property];
-                proxy.observers.notify(proxy);
+        deleteProperty: function (target, key) {
+            if (key in target) {
+                delete target[key];
+
+                if (typeof key !== "symbol") {
+                    proxy.observers.notify(proxy);
+                }
+
+
                 return true;
             }
             return false;
         },
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc
-        defineProperty: function (target, property, descriptor) {
-            let result = Reflect.defineProperty(target, property, descriptor);
-            proxy.observers.notify(proxy);
-            return parseURLToResultingURLRecord();
+        defineProperty: function (target, key, descriptor) {
+            let result = Reflect.defineProperty(target, key, descriptor);
+
+            if (typeof key !== "symbol") {
+                proxy.observers.notify(proxy);
+            }
+
+
+            return result;
         },
 
         // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v
-        setPrototypeOf: function (target, prototype) {
-            let result = Reflect.setPrototypeOf(object1, prototype);
-            proxy.observers.notify(proxy);
+        setPrototypeOf: function (target, key) {
+            let result = Reflect.setPrototypeOf(object1, key);
+
+            if (typeof key !== "symbol") {
+                proxy.observers.notify(proxy);
+            }
+
             return result;
         }
 
diff --git a/packages/monster/source/types/queue.js b/packages/monster/source/types/queue.js
new file mode 100644
index 0000000000000000000000000000000000000000..c977ff3f3f9ee0195e8f1ccab54d5ab83f173770
--- /dev/null
+++ b/packages/monster/source/types/queue.js
@@ -0,0 +1,97 @@
+import {Monster, Object} from "./object.js";
+
+/**
+ * queue class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+ * console.log(new Monster.Types.Queue())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+ * console.log(new Queue())
+ * </script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+class Queue extends Object {
+
+    /**
+     *
+     */
+    constructor() {
+        super();
+        this.data = [];
+    }
+
+
+    /**
+     * @return {boolean}
+     */
+    isEmpty() {
+        return this.data.length === 0;
+    }
+
+    /**
+     * Read the element at the front of the queue without removing it.
+     *
+     * @return {*}
+     */
+    peek() {
+        if (this.isEmpty()) {
+            return undefined;
+        }
+
+        return this.data[0];
+    }
+
+    /**
+     * Add a new element to the end of the queue.
+     *
+     * @param {*} value
+     * @returns {Queue}
+     */
+    add(value) {
+        this.data.push(value)
+        return this;
+    }
+
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+    clear() {
+        this.data = [];
+        return this;
+    }
+
+    /**
+     * Remove the element at the front of the queue
+     * If the queue is empty, return undefined.
+     *
+     * @return {*}
+     */
+    poll() {
+        if (this.isEmpty()) {
+            return undefined;
+        }
+        return this.data.shift();
+    }
+
+
+}
+
+Monster.assignToNamespace('Monster.Types', Queue);
+export {Monster, Queue}
diff --git a/packages/monster/source/types/stack.js b/packages/monster/source/types/stack.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b1ec870658a7dd471e7740abe89aa9f163688f7
--- /dev/null
+++ b/packages/monster/source/types/stack.js
@@ -0,0 +1,98 @@
+import {Monster, Object} from "./object.js";
+
+/**
+ * Stack class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/stack.js';
+ * console.log(new Monster.Types.Stack())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/stack.js';
+ * console.log(new Stack())
+ * </script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+class Stack extends Object {
+
+    /**
+     *
+     */
+    constructor() {
+        super();
+        this.data = [];
+    }
+
+
+    /**
+     * @return {boolean}
+     */
+    isEmpty() {
+        return this.data.length === 0;
+    }
+
+    /**
+     * looks at the object at the top of this stack without removing it from the stack.
+     *
+     * @return {*}
+     */
+    peek() {
+        if (this.isEmpty()) {
+            return undefined;
+        }
+
+        return this.data?.[this.data.length-1];
+    }
+
+    /**
+     * pushes an item onto the top of this stack.
+     *
+     * @param {*} value
+     * @returns {Queue}
+     */
+    push(value) {
+        this.data.push(value)
+        return this;
+    }
+
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+    clear() {
+        this.data = [];
+        return this;
+    }
+
+    /**
+     * removes the object at the top of this stack and returns 
+     * that object as the value of this function. is the stack empty
+     * the return value is undefined.
+     *
+     * @return {*}
+     */
+    pop() {
+        if (this.isEmpty()) {
+            return undefined;
+        }
+        return this.data.pop();
+    }
+
+
+}
+
+Monster.assignToNamespace('Monster.Types', Stack);
+export {Monster, Stack}
diff --git a/packages/monster/source/types/tokenlist.js b/packages/monster/source/types/tokenlist.js
index ae87911b66cb1e2fe2129fe969d5b6ad139207b5..d9f134558b97ffc3fb775e80615cbd13794dbe20 100644
--- a/packages/monster/source/types/tokenlist.js
+++ b/packages/monster/source/types/tokenlist.js
@@ -18,7 +18,7 @@ import {validateString, validateFunction} from '../types/validate.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
  * console.log(new Monster.Types.TokenList("myclass row"))
  * console.log(new Monster.Types.TokenList("myclass row"))
  * </script>
@@ -28,7 +28,7 @@ import {validateString, validateFunction} from '../types/validate.js';
  *
  * ```
  * <script type="module">
- * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/tokenlist.js';
+ * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
  * console.log(new TokenList("myclass row"))
  * console.log(new TokenList("myclass row"))
  * </script>
diff --git a/packages/monster/source/types/uniquequeue.js b/packages/monster/source/types/uniquequeue.js
new file mode 100644
index 0000000000000000000000000000000000000000..5eb069111405c3d076e9ba1ae3b099c3f31f940b
--- /dev/null
+++ b/packages/monster/source/types/uniquequeue.js
@@ -0,0 +1,89 @@
+import {Monster, Queue} from "./queue.js";
+import {validateObject} from "./validate.js";
+
+/**
+ * UniqueQueue class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+ * console.log(new Monster.Types.UniqueQueue())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+ * console.log(new UniqueQueue())
+ * </script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+class UniqueQueue extends Queue {
+
+    /**
+     *
+     */
+    constructor() {
+        super();
+        this.unique = new WeakSet();
+    }
+
+    /**
+     * Add a new element to the end of the queue.
+     *
+     * @param {object} value
+     * @returns {Queue}
+     * @throws {TypeError} value is not a object
+     */
+    add(value) {
+        
+        validateObject(value);
+        
+        if (!this.unique.has(value)) {
+            this.unique.add(value);
+            super.add(value);
+        }
+        
+        return this;
+    }
+
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+    clear() {
+        super.clear();
+        this.unique = new WeakSet;
+        return this;
+    }
+
+    /**
+     * Remove the element at the front of the queue
+     * If the queue is empty, return undefined.
+     *
+     * @return {object}
+     */
+    poll() {
+
+        if (this.isEmpty()) {
+            return undefined;
+        }
+        let value = this.data.shift();
+        this.unique.delete(value);
+        return value;
+    }
+
+
+}
+
+Monster.assignToNamespace('Monster.Types', UniqueQueue);
+export {Monster, UniqueQueue}
diff --git a/packages/monster/source/types/validate.js b/packages/monster/source/types/validate.js
index 0ca3b5499f1b01027db369a1391ddcf9d62ad055..38542d7e06c0ecb2da8a9d8785e1f4bba25d6aae 100644
--- a/packages/monster/source/types/validate.js
+++ b/packages/monster/source/types/validate.js
@@ -5,7 +5,7 @@
  */
 
 import {Monster} from '../namespace.js';
-import {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable} from '../types/is.js';
+import {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger} from '../types/is.js';
 
 /**
  * this method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.
@@ -14,7 +14,7 @@ import {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isItera
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateIterable('2')) // ↦ TypeError
  * console.log(Monster.Types.validateIterable([])) // ↦ undefined
  * </script>
@@ -24,7 +24,7 @@ import {isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isItera
  *
  * ```
  * <script type="module">
- * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateIterable('2'))  // ↦ TypeError
  * console.log(validateIterable([]))  // ↦ undefined
  * </script>
@@ -53,7 +53,7 @@ function validateIterable(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validatePrimitive('2')) // ↦ undefined
  * console.log(Monster.Types.validatePrimitive([])) // ↦ TypeError
  * </script>
@@ -63,7 +63,7 @@ function validateIterable(value) {
  *
  * ```
  * <script type="module">
- * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validatePrimitive('2'))  // ↦ undefined
  * console.log(validatePrimitive([]))  // ↦ TypeError
  * </script>
@@ -92,7 +92,7 @@ function validatePrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateBoolean(true)) // ↦ undefined
  * console.log(Monster.Types.validateBoolean('2')) // ↦ TypeError
  * console.log(Monster.Types.validateBoolean([])) // ↦ TypeError
@@ -103,7 +103,7 @@ function validatePrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateBoolean(false))  // ↦ undefined
  * console.log(validateBoolean('2'))  // ↦ TypeError
  * console.log(validateBoolean([]))  // ↦ TypeError
@@ -131,7 +131,7 @@ function validateBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateString('2')) // ↦ undefined
  * console.log(Monster.Types.validateString([])) // ↦ TypeError
  * </script>
@@ -141,7 +141,7 @@ function validateBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateString('2'))  // ↦ undefined
  * console.log(validateString([]))  // ↦ TypeError
  * </script>
@@ -152,7 +152,6 @@ function validateBoolean(value) {
  * @since 1.0.0
  * @copyright schukai GmbH
  * @memberOf Monster/Types
-
  * @throws {TypeError} value is not a string
  */
 function validateString(value) {
@@ -169,7 +168,7 @@ function validateString(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateObject({})) // ↦ undefined
  * console.log(Monster.Types.validateObject('2')) // ↦ TypeError
  * console.log(Monster.Types.validateObject([])) // ↦ TypeError
@@ -180,7 +179,7 @@ function validateString(value) {
  *
  * ```
  * <script type="module">
- * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateObject({}))  // ↦ undefined
  * console.log(validateObject('2'))  // ↦ TypeError
  * console.log(validateObject([]))  // ↦ TypeError
@@ -207,7 +206,7 @@ function validateObject(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateArray('2')) // ↦ TypeError
  * console.log(Monster.Types.validateArray([])) // ↦ undefined
  * </script>
@@ -217,7 +216,7 @@ function validateObject(value) {
  *
  * ```
  * <script type="module">
- * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateArray('2'))  // ↦ TypeError
  * console.log(validateArray([]))  // ↦ undefined
  * </script>
@@ -243,7 +242,7 @@ function validateArray(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateFunction(()=>{})) // ↦ undefined
  * console.log(Monster.Types.validateFunction('2')) // ↦ TypeError
  * console.log(Monster.Types.validateFunction([])) // ↦ TypeError
@@ -254,7 +253,7 @@ function validateArray(value) {
  *
  * ```
  * <script type="module">
- * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/validate.js';
+ * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateFunction(()=>{})) // ↦ undefined
  * console.log(validateFunction('2'))  // ↦ TypeError
  * console.log(validateFunction([]))  // ↦ TypeError
@@ -274,7 +273,45 @@ function validateFunction(value) {
     }
 }
 
-Monster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable);
+/**
+ * this method checks if the type is an integer. this function is identical to isInteger() except that a TypeError is thrown.
+ *
+ * you can call the method via the monster namespace `Monster.Types.validateInteger()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+ * console.log(Monster.Types.validateInteger(true)) // ↦ TypeError
+ * console.log(Monster.Types.validateInteger('2')) // ↦ TypeError
+ * console.log(Monster.Types.validateInteger(2)) // ↦ undefined
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+ * console.log(validateInteger(true)) // ↦ TypeError
+ * console.log(validateInteger('2'))  // ↦ TypeError
+ * console.log(validateInteger(2))  // ↦ undefined
+ * </script>
+ * ```
+ *
+ * @param {*} value
+ * @return {undefined}
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ * @throws {TypeError} value is not an integer
+ */
+function validateInteger(value) {
+    if (!isInteger(value)) {
+        throw new TypeError('value is not an integer')
+    }
+}
+
+Monster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable, validateInteger);
 export {
     Monster,
     validatePrimitive,
@@ -283,5 +320,6 @@ export {
     validateObject,
     validateArray,
     validateFunction,
-    validateIterable
+    validateIterable,
+    validateInteger
 }
diff --git a/packages/monster/source/types/version.js b/packages/monster/source/types/version.js
index 6b5214f40477b983bb9ea237469518e536e3bacd..57a312ebb3fe50edf717f4a9066ebfa94dd28f6e 100644
--- a/packages/monster/source/types/version.js
+++ b/packages/monster/source/types/version.js
@@ -10,7 +10,7 @@ import '../types/object.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(new Monster.Types.Version('1.2.3')) // ↦ 1.2.3
  * console.log(new Monster.Types.Version('1')) // ↦ 1.0.0
  * </script>
@@ -20,7 +20,7 @@ import '../types/object.js';
  *
  * ```
  * <script type="module">
- * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(new Version('1.2.3')) // ↦ 1.2.3
  * console.log(new Version('1')) // ↦ 1.0.0
  * </script>
@@ -150,7 +150,7 @@ let monsterVersion;
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(Monster.getVersion())
  * console.log(Monster.getVersion())
  * </script>
@@ -160,7 +160,7 @@ let monsterVersion;
  *
  * ```
  * <script type="module">
- * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/version.js';
+ * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(getVersion())
  * console.log(getVersion())
  * </script>
@@ -177,7 +177,7 @@ function getVersion() {
         return monsterVersion;
     }
     /**#@+ dont touch, replaced by make with package.json version */
-    monsterVersion = new Version('1.3.0')
+    monsterVersion = new Version('1.4.0')
     /**#@-*/
     return monsterVersion;
 
diff --git a/packages/monster/source/util/clone.js b/packages/monster/source/util/clone.js
index da1f03b0de9b8496f1b40baf55d7e6a19bc45fe7..78c9d223bb7cfe1497d89b1023c06660e90bdb01 100644
--- a/packages/monster/source/util/clone.js
+++ b/packages/monster/source/util/clone.js
@@ -21,7 +21,7 @@ import {isObject, isFunction, isPrimitive, isArray} from '../types/is.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
  * console.log(Monster.Util.clone({}))
  * </script>
  * ```
@@ -30,7 +30,7 @@ import {isObject, isFunction, isPrimitive, isArray} from '../types/is.js';
  *
  * ```
  * <script type="module">
- * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/clone.js';
+ * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
  * console.log(clone({}))
  * </script>
  * ```
diff --git a/packages/monster/source/util/comparator.js b/packages/monster/source/util/comparator.js
index 6f4a7ddb600b7396f8fbfe07086158a61e7a019d..237d2664085bf0aea4a2731d087da8bc21479ad1 100644
--- a/packages/monster/source/util/comparator.js
+++ b/packages/monster/source/util/comparator.js
@@ -12,7 +12,7 @@ import {isFunction} from '../types/is.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Monster.Util.Comparator())
  * console.log(new Monster.Util.Comparator())
  * </script>
@@ -22,7 +22,7 @@ import {isFunction} from '../types/is.js';
  *
  * ```
  * <script type="module">
- * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/types/id.js';
+ * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Util())
  * console.log(new Util())
  * </script>
diff --git a/packages/monster/source/util/freeze.js b/packages/monster/source/util/freeze.js
index 1977182d88ae1f059dd42001c5d88e9c5566bc0b..6ef40c2edbc471749bdb3ba8629fa4e18af563ac 100644
--- a/packages/monster/source/util/freeze.js
+++ b/packages/monster/source/util/freeze.js
@@ -14,7 +14,7 @@ import {validateObject} from '../types/validate.js';
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';
  * console.log(Monster.Util.deepFreeze({})) 
  * </script>
  * ```
@@ -23,7 +23,7 @@ import {validateObject} from '../types/validate.js';
  *
  * ```
  * <script type="module">
- * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.0/dist/modules/util/freeze.js';
+ * import {deepFreeze} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/freeze.js';
  * console.log(deepFreeze({}))  
  * </script>
  * ```
diff --git a/packages/monster/source/util/pathfinder.js b/packages/monster/source/util/pathfinder.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4f352551954ee0294ed72062d0340b5b67bb61b
--- /dev/null
+++ b/packages/monster/source/util/pathfinder.js
@@ -0,0 +1,274 @@
+'use strict';
+
+/**
+ * @author schukai GmbH
+ */
+
+import {Monster} from '../namespace.js';
+import {isObject, isArray, isInteger} from '../types/is.js';
+import {validateString, validateInteger} from '../types/validate.js';
+import {Object} from "../types/object.js";
+import {Stack} from "../types/stack.js";
+
+/**
+ * path separator
+ *
+ * @private
+ * @type {string}
+ */
+const DELIMITER = '.';
+
+/**
+ * Pathfinder class
+ *
+ * you can call the method via the monster namespace `new Monster.Util.Pathfinder()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/pathfinder.js';
+ * console.log(new Monster.Util.Pathfinder())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/pathfinder.js';
+ * console.log(new Pathfinder())
+ * </script>
+ * ```
+ *
+ * With the help of the pathfinder, values can be read and written from an object construct.
+ *
+ * ```
+ * new Pathfinder({
+ * a: {
+ *     b: {
+ *         f: [
+ *             {
+ *                 g: false,
+ *             }
+ *         ],
+ *     }
+ * }
+ * }).getVia("a.b.f.0.g"); // ↦ false
+ * ```
+ *
+ * if a value is not present or has the wrong type, a corresponding exception is thrown.
+ *
+ * ```
+ * new Pathfinder({}).getVia("a.b.f.0.g"); // ↦ Error
+ * ```
+ *
+ * The `Pathfinder.exists()` method can be used to check whether access to the path is possible.
+ *
+ * ```
+ * new Pathfinder({}).exists("a.b.f.0.g"); // ↦ false
+ * ```
+ *
+ * pathfinder can also be used to build object structures. to do this, the `Pathfinder.setVia()` method must be used.
+ *
+ * ```
+ * obj = {};
+ * new Pathfinder(obj).setVia('a.b.0.c', true); // ↦ {a:{b:[{c:true}]}}
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Util
+ */
+class Pathfinder extends Object {
+
+    /**
+     * @param {array|object|Map|Set} value
+     * @since 1.4.0
+     **/
+    constructor(object) {
+        super();
+        this.object = object;
+    }
+
+    /**
+     *
+     * @param {string} path
+     * @since 1.4.0
+     * @returns {*}
+     * @throws {TypeError} unsupported type
+     * @throws {Error} the journey is not at its end
+     * @throws {TypeError} value is not a string
+     * @throws {TypeError} value is not an integer
+     */
+    getVia(path) {
+        validateString(path);
+        return getValueViaPath(this.object, path);
+    }
+
+    /**
+     *
+     * @param {string} path
+     * @param {*} value
+     * @returns {Pathfinder}
+     * @since 1.4.0
+     * @throws {TypeError} unsupported type
+     * @throws {TypeError} value is not a string
+     * @throws {TypeError} value is not an integer
+     */
+    setVia(path, value) {
+        validateString(path);
+        setValueViaPath(this.object, path, value);
+        return this;
+    }
+
+    /**
+     *
+     * @param {string} path
+     * @return {bool}
+     * @throws {TypeError} unsupported type
+     * @throws {TypeError} value is not a string
+     * @throws {TypeError} value is not an integer
+     * @since 1.4.0
+     */
+    exists(path) {
+        validateString(path);
+        try {
+            getValueViaPath(this.object, path, true);
+            return true;
+        } catch (e) {
+
+        }
+
+        return false;
+    }
+
+}
+
+Monster.assignToNamespace('Monster.Util', Pathfinder);
+export {Monster, Pathfinder}
+
+/**
+ *
+ * @param {*} object
+ * @param [string} path
+ * @param [boolean} check 
+ * @returns {*}
+ * @throws {TypeError} unsupported type
+ * @throws {Error} the journey is not at its end
+ */
+function getValueViaPath(object, path, check) {
+
+    if (path === "") {
+        return object;
+    }
+
+    let parts = path.split(DELIMITER)
+    let current = parts.shift();
+
+    if (isObject(object) || isArray(object)) {
+
+        let anchor;
+        if (object instanceof Map) {
+            anchor = object.get(current);
+        } else if (object instanceof Set) {
+            current = parseInt(current);
+            validateInteger(current)
+            anchor = [...object]?.[current];
+        } else if (isArray(object)) {
+            current = parseInt(current);
+            validateInteger(current)
+            anchor = object?.[current];
+        } else {
+            anchor = object?.[current];
+        }
+
+        if (isObject(anchor) || isArray(anchor)) {
+            return getValueViaPath(anchor, parts.join(DELIMITER), check)
+        }
+
+        if (parts.length > 0) {
+            throw Error("the journey is not at its end (" + parts.join(DELIMITER) + ")");
+        }
+
+        if (check === true && !object.hasOwnProperty(current)) {
+            throw Error('unknown value');
+        }
+
+        return anchor;
+
+    }
+
+    throw TypeError("unsupported type")
+
+}
+
+/**
+ *
+ * @param object
+ * @param path
+ * @param value
+ * @returns {undefined|*}
+ * @throws {TypeError} unsupported type
+ * @throws {TypeError} unsupported type
+ * @throws {Error} the journey is not at its end
+ */
+function setValueViaPath(object, path, value) {
+
+    let parts = path.split(DELIMITER)
+    let last = parts.pop();
+    let subpath = parts.join(DELIMITER);
+
+    let stack = new Stack()
+    let current = subpath;
+    while (true) {
+
+        try {
+            getValueViaPath(object, current, true)
+            break;
+        } catch (e) {
+
+        }
+
+        stack.push(current);
+        parts.pop();
+        current = parts.join(DELIMITER);
+
+        if (current === "") break;
+    }
+
+    while (!stack.isEmpty()) {
+        current = stack.pop();
+        let obj = {};
+
+        if (!stack.isEmpty()) {
+            let n = stack.peek().split(DELIMITER).pop();
+            if (isInteger(parseInt(n))) {
+                obj = [];
+            }
+
+        }
+
+
+        setValueViaPath(object, current, obj);
+    }
+
+    let anchor = getValueViaPath(object, subpath);
+
+    if (!isObject(object) && !isArray(object)) {
+        throw TypeError("unsupported type: " + typeof object);
+    }
+
+    if (anchor instanceof Map) {
+        anchor.set(last, value);
+    } else if (anchor instanceof Set) {
+        anchor.append(value)
+    } else if (isArray(anchor)) {
+        last = parseInt(last);
+        validateInteger(last)
+        anchor[last] = value;
+    } else {
+        anchor[last] = value;
+    }
+
+    return anchor;
+
+}
\ No newline at end of file
diff --git a/packages/monster/test/cases/monster.js b/packages/monster/test/cases/monster.js
index e373343a742d94c689a616cc8d9dba42a4784dff..8dd8214779839917d05383bb8fa75aad4d7c5ddc 100644
--- a/packages/monster/test/cases/monster.js
+++ b/packages/monster/test/cases/monster.js
@@ -7,7 +7,7 @@ describe('Monster', function () {
         let monsterVersion
 
     /**#@+ dont touch, replaced by make with package.json version */
-    monsterVersion = new Version('1.3.0')
+    monsterVersion = new Version('1.4.0')
     /**#@-*/
 
         let m = Monster.getVersion();
diff --git a/packages/monster/test/cases/types/is.js b/packages/monster/test/cases/types/is.js
index 1711f4bf26d86e82fe81192989d03eee9eb77582..7c3388d1cabe555cba75c2ec4ffcb05f99ae605a 100644
--- a/packages/monster/test/cases/types/is.js
+++ b/packages/monster/test/cases/types/is.js
@@ -7,7 +7,8 @@ import {
     isObject,
     isArray,
     isFunction,
-    isIterable
+    isIterable,
+    isInteger
 } from "../../../source/types/is.js";
 
 import {expect} from "chai"
@@ -41,6 +42,35 @@ describe('Is', function () {
         });
 
 
+    });
+    
+    describe('.isInteger()', function () {
+
+        [
+            ['test1', false],
+            [undefined, false],
+            [null, false],
+            [() => {
+            }, false],
+            [2, true],
+            [parseInt("a"), false],
+            [false, false],
+            [true, false],
+            [4.5, false],
+            [{}, false],
+            [[1, 2, 3], false],
+            [Symbol("foo"), false],
+        ].forEach(function (data) {
+
+            let a = data.shift()
+            let b = data.shift()
+
+            it('is.isInteger(' + typeof a + ') should return ' + b, function () {
+                expect(isInteger(a)).is.equal(b)
+            });
+        });
+
+
     });
 
     describe('.isIterable()', function () {
diff --git a/packages/monster/test/cases/types/observer.js b/packages/monster/test/cases/types/observer.js
index 2a477f98f08f64c3d3cbd49c15a774e4296108ee..092f79d5f11b70387368b763803b31392df422c8 100644
--- a/packages/monster/test/cases/types/observer.js
+++ b/packages/monster/test/cases/types/observer.js
@@ -87,6 +87,34 @@ describe('Observer', function () {
 
     });
 
+    describe('run function .update() several times', function () {
+
+        let obj = {}
+        it('observer.update(' + obj + ') is ' + 1 + 3 + 6, function (done) {
+
+            let counter = 0;
+            let tempObserver = new Observer(function (a, b, c) {
+
+                counter++;
+
+                console.log(counter)
+
+
+            })
+
+
+            tempObserver.update(obj);
+            tempObserver.update(obj);
+            tempObserver.update(obj);
+            tempObserver.update(obj);
+            tempObserver.update(obj).then(_ => {
+                done()
+            });
+
+        });
+
+    });
+
     describe('.getTags()', function () {
 
         [
diff --git a/packages/monster/test/cases/types/observerlist.js b/packages/monster/test/cases/types/observerlist.js
index 97f3959f131a3b714cf9b88be058599d304b1b02..66c5bf0dc4ff3beeb0fb9b58569fa08747c23c9c 100644
--- a/packages/monster/test/cases/types/observerlist.js
+++ b/packages/monster/test/cases/types/observerlist.js
@@ -31,13 +31,18 @@ describe('ObserverList', function () {
     describe('.notify()', function () {
 
         const resultValue = "Yes!";
+        let o;
+        let observerList;
 
-        let o = new Observer(() => {
-            return resultValue
-        });
+        beforeEach(() => {
+            o = new Observer(() => {
+                return resultValue
+            });
 
-        let observerList = new ObserverList()
-        observerList.attach(o)
+            observerList = new ObserverList()
+            observerList.attach(o)
+
+        });
 
         it('should instanceof Promise', function () {
             expect(observerList.notify()).to.be.instanceOf(Promise)
diff --git a/packages/monster/test/cases/types/proxyobserver.js b/packages/monster/test/cases/types/proxyobserver.js
index 1e81a613140782c53ff3359714511c39a9213f4c..a965395884fa14c4d877ed926efe5da0c16b5dce 100644
--- a/packages/monster/test/cases/types/proxyobserver.js
+++ b/packages/monster/test/cases/types/proxyobserver.js
@@ -2,8 +2,7 @@ import {expect} from "chai"
 
 import {Monster, ProxyObserver} from "../../../source/types/proxyobserver.js";
 import {Observer} from "../../../source/types/observer.js";
-import {isObject} from "../../../source/types/is.js";
-
+import {isObject, isPrimitive} from "../../../source/types/is.js";
 
 describe('ProxyObserver', function () {
 
@@ -16,11 +15,17 @@ describe('ProxyObserver', function () {
 
     describe('notify observer', function () {
         it('should inform observer', function (done) {
+            let counter = 0;
+            // the method is called twice, once for defineProperty and for set trap
             let o = new Observer(function (a) {
-                if(isObject(this) && this instanceof ProxyObserver) {
-                    return done();
+                if (isObject(this) && this instanceof ProxyObserver) {
+                    counter++;
+                    if (counter === 1) {
+                        done();
+                    }
+                    return;
                 }
-                
+
                 done(new Error("this is not ProxyObserver"))
             }, true)
 
@@ -38,11 +43,52 @@ describe('ProxyObserver', function () {
             expect(p.attachObserver(o)).is.instanceOf(ProxyObserver);
 
             let s = p.getSubject();
-            s.a.b.c = false;
+            let r = p.getRealSubject();
+
+            s.a.d = false;
+            s.a.b.d = 2;
 
         });
     });
 
+    describe('notify observer with changes', function () {
+
+        let original, observer, proxy;
+
+        before(function () {
+            original = {};
+            proxy = new ProxyObserver(original);
+
+        });
+
+        [
+            ['a', 4, JSON.stringify({a: 4})],
+            ['b', 9, JSON.stringify({a: 4, b: 9})]
+        ].forEach(function (data) {
+
+            let a = data.shift()
+            let b = data.shift()
+            let c = data.shift()
+
+            it('set key ' + a + ' value ' + b + ' expect ' + c, function (done) {
+
+                let counter = 0;
+                observer = new Observer(function () {
+                    counter++;
+                    expect(JSON.stringify(this.getRealSubject())).is.equal(c);
+                    if (counter === 1) {
+                        this.detachObserver(observer);
+                        done();
+                    }
+                })
 
-});
+                proxy.attachObserver(observer)
+                let subject = proxy.getSubject()
+
+                subject[a] = b;
+
+            });
+        });
+    })
+})
 
diff --git a/packages/monster/test/cases/types/queue.js b/packages/monster/test/cases/types/queue.js
new file mode 100644
index 0000000000000000000000000000000000000000..52f83dd7adda6e3f422e244765c1f40043e46ff4
--- /dev/null
+++ b/packages/monster/test/cases/types/queue.js
@@ -0,0 +1,46 @@
+import {expect} from "chai"
+import {Monster, Queue} from "../../../source/types/queue.js";
+
+
+describe('Queue', function () {
+    let queue;
+    beforeEach(() => {
+        queue = new Queue;
+    })
+
+    describe('isEmpty()', function () {
+
+        it('first it should empty', function () {
+            expect(queue.isEmpty()).to.be.true;
+        });
+
+    })
+
+    describe('add sequence peek and poll', function () {
+
+        it('result a,a,a,b', function () {
+            expect(queue.add('a')).to.be.instanceOf(Queue);
+            expect(queue.isEmpty()).to.be.false;
+            expect(queue.add('b')).to.be.instanceOf(Queue);
+            expect(queue.add('c')).to.be.instanceOf(Queue);
+            expect(queue.peek()).to.be.equal('a');
+            expect(queue.peek()).to.be.equal('a');
+            expect(queue.poll()).to.be.equal('a');
+            expect(queue.peek()).to.be.equal('b');
+            expect(queue.isEmpty()).to.be.false;
+        });
+
+    })
+    
+    describe('add and clear', function () {
+
+        it('should empty', function () {
+            expect(queue.isEmpty()).to.be.true;
+            expect(queue.add('a')).to.be.instanceOf(Queue);
+            expect(queue.isEmpty()).to.be.false;
+            expect(queue.clear()).to.be.instanceOf(Queue);
+            expect(queue.isEmpty()).to.be.true;
+        });
+
+    })
+})
\ No newline at end of file
diff --git a/packages/monster/test/cases/types/stack.js b/packages/monster/test/cases/types/stack.js
new file mode 100644
index 0000000000000000000000000000000000000000..5d80654a49481984b02a2ce07b5bc7f385ce7755
--- /dev/null
+++ b/packages/monster/test/cases/types/stack.js
@@ -0,0 +1,46 @@
+import {expect} from "chai"
+import {Monster, Stack} from "../../../source/types/stack.js";
+
+
+describe('Stack', function () {
+    let stack;
+    beforeEach(() => {
+        stack = new Stack;
+    })
+
+    describe('isEmpty()', function () {
+
+        it('first it should empty', function () {
+            expect(stack.isEmpty()).to.be.true;
+        });
+
+    })
+
+    describe('add sequence peek and pull', function () {
+
+        it('result a,a,a,b', function () {
+            expect(stack.push('a')).to.be.instanceOf(Stack);
+            expect(stack.isEmpty()).to.be.false;
+            expect(stack.push('b')).to.be.instanceOf(Stack);
+            expect(stack.push('c')).to.be.instanceOf(Stack);
+            expect(stack.peek()).to.be.equal('c');
+            expect(stack.peek()).to.be.equal('c');
+            expect(stack.pop()).to.be.equal('c');
+            expect(stack.peek()).to.be.equal('b');
+            expect(stack.isEmpty()).to.be.false;
+        });
+
+    })
+    
+    describe('add and clear', function () {
+
+        it('should empty', function () {
+            expect(stack.isEmpty()).to.be.true;
+            expect(stack.push('a')).to.be.instanceOf(Stack);
+            expect(stack.isEmpty()).to.be.false;
+            expect(stack.clear()).to.be.instanceOf(Stack);
+            expect(stack.isEmpty()).to.be.true;
+        });
+
+    })
+})
\ No newline at end of file
diff --git a/packages/monster/test/cases/types/uniquequeue.js b/packages/monster/test/cases/types/uniquequeue.js
new file mode 100644
index 0000000000000000000000000000000000000000..b1a6b9a32b351bc9d4e9b8e56a3af6184e969bc5
--- /dev/null
+++ b/packages/monster/test/cases/types/uniquequeue.js
@@ -0,0 +1,61 @@
+import {expect} from "chai"
+import {Monster, UniqueQueue} from "../../../source/types/uniquequeue.js";
+
+
+describe('UniqueQueue', function () {
+    let queue;
+    beforeEach(() => {
+        queue = new UniqueQueue;
+    })
+
+    describe('isEmpty()', function () {
+
+        it('first it should empty', function () {
+            expect(queue.isEmpty()).to.be.true;
+        });
+
+    })
+
+    describe('add sequence peek and poll', function () {
+
+        it('result a,a,a,b', function () {
+            expect(queue.add({a: 1})).to.be.instanceOf(UniqueQueue);
+            expect(queue.isEmpty()).to.be.false;
+            expect(queue.add({a: 2})).to.be.instanceOf(UniqueQueue);
+            expect(queue.add({a: 3})).to.be.instanceOf(UniqueQueue);
+            expect(queue.peek()).to.deep.equal({a:1});
+            expect(queue.peek()).to.deep.equal({a:1});
+            expect(queue.poll()).to.deep.equal({a:1});
+            expect(queue.poll()).to.deep.equal({a:2});
+            expect(queue.isEmpty()).to.be.false;
+            expect(queue.peek()).to.deep.equal({a:3});
+            expect(queue.poll()).to.deep.equal({a:3});
+            expect(queue.isEmpty()).to.be.true;
+        });
+
+    })
+
+    describe('add and clear', function () {
+
+        it('should empty', function () {
+            expect(queue.isEmpty()).to.be.true;
+            expect(queue.add({a: 1})).to.be.instanceOf(UniqueQueue);
+            expect(queue.isEmpty()).to.be.false;
+            expect(queue.clear()).to.be.instanceOf(UniqueQueue);
+            expect(queue.isEmpty()).to.be.true;
+        });
+
+    })
+    
+    describe('add no object', function () {
+        it('should throw error', function () {
+            expect(()=>{queue.add([])}).to.throw(TypeError)
+            expect(()=>{queue.add(1)}).to.throw(TypeError)
+            expect(()=>{queue.add(true)}).to.throw(TypeError)
+            expect(()=>{queue.add()}).to.throw(TypeError)
+            expect(()=>{queue.add(Symbol("1"))}).to.throw(TypeError)
+            expect(()=>{queue.add(function(){})}).to.throw(TypeError)
+        });
+
+    })
+})
\ No newline at end of file
diff --git a/packages/monster/test/cases/types/validate.js b/packages/monster/test/cases/types/validate.js
index 2b4fb8c6c1c54989acfc59e482a8cfd377c388dc..e290cf169f8f02dd4a844329ff7eac79b8623350 100644
--- a/packages/monster/test/cases/types/validate.js
+++ b/packages/monster/test/cases/types/validate.js
@@ -6,6 +6,7 @@ import {
     validateObject,
     validateArray,
     validateFunction,
+    validateInteger,
     validateIterable
 } from "../../../source/types/validate.js"
 
@@ -48,6 +49,43 @@ describe('validate', function () {
         });
 
 
+    });
+    
+    describe('.validateInteger()', function () {
+
+        [
+            ['test1', false],
+            [undefined, false],
+            [null, false],
+            [() => {
+            }, false],
+            [2, true],
+            [false, false],
+            [true, false],
+            [4.5, false],
+            [{}, false],
+            [[1, 2, 3], false],
+            [Symbol("foo"), false],
+        ].forEach(function (data) {
+
+            let a = data.shift()
+            let b = data.shift()
+
+            if (b === false) {
+
+                it('.validateInteger(' + typeof a + ') should throw TypeException ' + b, function () {
+                    expect( ()=> validateInteger(a)).to.throw(TypeError);
+                });
+
+            } else {
+                it('.validateInteger(' + typeof a + ') should not throw TypeException ' + b, function () {
+                    expect(validateInteger(a)).to.be.undefined;
+                });
+            }
+
+        });
+
+
     });
 
     describe('.validateIterable()', function () {
diff --git a/packages/monster/test/cases/util/pathfinder.js b/packages/monster/test/cases/util/pathfinder.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9b31451840c2a995e8a7d1b5c73a5a45f52c6c4
--- /dev/null
+++ b/packages/monster/test/cases/util/pathfinder.js
@@ -0,0 +1,177 @@
+import {Pathfinder} from "../../../source/util/pathfinder.js";
+import {expect} from "chai"
+
+describe('Pathfinder', function () {
+
+    let pathfinder, object;
+
+    beforeEach(() => {
+
+        object = {
+            a: {
+                b: {
+                    c: [
+                        4, "test1", false, undefined, parseInt("a")
+                    ],
+                    d: undefined,
+                    e: false,
+                    f: [
+                        {
+                            g: false,
+                            h: 3,
+                            i: ["test2"]
+                        }
+                    ],
+                    j: {},
+                    k: (new Map).set('m', {n: 3}),
+                    l: (new Set).add({n: 4})
+                }
+            }
+        };
+        pathfinder = new Pathfinder(object);
+
+
+    });
+
+    describe('.setVia(x)', function () {
+
+        let pf, obj;
+
+        beforeEach(function () {
+            obj = {}
+            pf = new Pathfinder(obj);
+        });
+
+        [
+            ['a.b.0.0.c', true, '{"a":{"b":[[{"c":true}]]}}'],
+            ['a.b.0.c', true, '{"a":{"b":[{"c":true}]}}'],
+            ['a.b.3.c', true, '{"a":{"b":[null,null,null,{"c":true}]}}'],
+            ['a.b.c', true, '{"a":{"b":{"c":true}}}']
+        ].forEach(function (data) {
+
+            let a = data.shift()
+            let b = data.shift()
+            let c = data.shift()
+
+
+            it('.setVia(' + a + ', ' + b + ') should result in ' + c, function () {
+                pf.setVia(a, b)
+                expect(JSON.stringify(obj)).is.equal(c);
+            });
+
+
+        });
+
+    })
+
+    describe('.setVia()', function () {
+
+        let a;
+        let b;
+        let c;
+
+        beforeEach(function () {
+            a = "a.x";
+            b = "true";
+            c = "a.y.d";
+        })
+
+        it('.setVia(' + a + ', ' + b + ') should return Pathfinder', function () {
+            expect(pathfinder.setVia(a, b)).is.instanceOf(Pathfinder);
+        });
+
+        it('.setVia(' + a + ', ' + b + ') should change object', function () {
+            pathfinder.setVia(a, b);
+            expect(JSON.stringify(object)).is.equal('{"a":{"b":{"c":[4,"test1",false,null,null],"e":false,"f":[{"g":false,"h":3,"i":["test2"]}],"j":{},"k":{},"l":{}},"x":"true"}}');
+        });
+
+        it('.setVia(' + c + ', ' + b + ') should change object', function () {
+            pathfinder.setVia(c, b);
+            expect(JSON.stringify(object)).is.equal('{"a":{"b":{"c":[4,"test1",false,null,null],"e":false,"f":[{"g":false,"h":3,"i":["test2"]}],"j":{},"k":{},"l":{}},"y":{"d":"true"}}}');
+        });
+
+    });
+
+
+    describe('.exists()', function () {
+
+
+        [
+            ['a.b.x', false],
+            ['a.x', false],
+            ['a.b.q', false],
+            ['a.b.c.1', true],
+            ['a.b.c.0', true],
+            ['a.b.d', true],
+            ['a.b.f.0.g', true],
+            ['a.b.f.0.i.0', true],
+            ['a.b.f.0.i.2', false],
+            ['a.b.e', true],
+        ].forEach(function (data) {
+
+            let a = data.shift()
+            let b = data.shift()
+
+
+            it('.exists(' + a + ') should return ' + b + ' ', function () {
+                expect(pathfinder.exists(a)).is.equal(b);
+            });
+
+
+        });
+
+    });
+
+    describe('.getVia()', function () {
+
+
+        it('.getVia(a.b.l.0.n) with map should return 4 ', function () {
+            expect(pathfinder.getVia('a.b.l.0.n')).is.equal(4);
+        });
+
+        [
+            ['a.b.k.m.n', 3],
+            ['a.b.l.0.n', 4],
+            ['a.x', undefined],
+            ['a.b.q', undefined],
+            ['a.b.c.1', "test1"],
+            ['a.b.c.0', 4],
+            ['a.b.d', undefined],
+            ['a.b.f.0.g', false],
+            ['a.b.f.0.i.0', "test2"],
+            ['a.b.e', false],
+        ].forEach(function (data) {
+
+            let a = data.shift()
+            let b = data.shift()
+
+
+            it('.getVia(' + a + ') should return ' + b + ' ', function () {
+                expect(pathfinder.getVia(a)).is.equal(b);
+            });
+
+
+        });
+
+
+        [
+            ['a.b.d.e'],
+            ['a.b.d.x'],
+            ['a.b.l.e.n'],
+        ].forEach(function (data) {
+
+            let a = data.shift()
+
+
+            it('.getVia(' + a + ') should throw Error ', function () {
+                expect(() => pathfinder.getVia(a)).to.throw(Error)
+            });
+
+
+        });
+
+
+    });
+
+});
+
diff --git a/packages/monster/test/web/import.js b/packages/monster/test/web/import.js
index 754dc83f7a7e10a2ea17b970da364221a5ee0f0f..ddc001f9af15967218c71befb5ff27542e2afc76 100644
--- a/packages/monster/test/web/import.js
+++ b/packages/monster/test/web/import.js
@@ -1,18 +1,22 @@
 /** this file was created automatically by the make target test-browser-monster */
+import "../cases/types/queue.js";
 import "../cases/types/observer.js";
 import "../cases/types/observerlist.js";
 import "../cases/types/is.js";
 import "../cases/types/proxyobserver.js";
+import "../cases/types/uniquequeue.js";
 import "../cases/types/tokenlist.js";
 import "../cases/types/version.js";
 import "../cases/types/id.js";
 import "../cases/types/validate.js";
+import "../cases/types/stack.js";
 import "../cases/constraint/isobject.js";
 import "../cases/constraint/valid.js";
 import "../cases/constraint/invalid.js";
 import "../cases/constraint/oroperator.js";
 import "../cases/constraint/andoperator.js";
 import "../cases/constraint/isarray.js";
+import "../cases/util/pathfinder.js";
 import "../cases/util/comparator.js";
 import "../cases/util/clone.js";
 import "../cases/math/random.js";
diff --git a/packages/monster/test/web/tests.js b/packages/monster/test/web/tests.js
index 52702b2324b8203057ebcf7185b6fec2f13b4fe0..8ce91307b83d5ee4a149390cb021ffd2a5352748 100644
--- a/packages/monster/test/web/tests.js
+++ b/packages/monster/test/web/tests.js
@@ -3609,7 +3609,7 @@ Object.defineProperty(exports, 'CryptoKey', {
 exports.Crypto = Crypto;
 
 }).call(this)}).call(this,require("buffer").Buffer)
-},{"@peculiar/asn1-schema":8,"@peculiar/json-schema":17,"buffer":83,"crypto":125,"process":289,"pvtsutils":214,"tslib":245,"webcrypto-core":248}],19:[function(require,module,exports){
+},{"@peculiar/asn1-schema":8,"@peculiar/json-schema":17,"buffer":83,"crypto":125,"process":297,"pvtsutils":214,"tslib":245,"webcrypto-core":248}],19:[function(require,module,exports){
 'use strict';
 
 const asn1 = exports;
@@ -50045,7 +50045,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/andoperator.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
  * new Monster.Constraint.AndOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -50054,8 +50054,8 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraint/valid.js';
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/andoperator.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/andoperator.js';
  * new AndOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -50144,7 +50144,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/invalid.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
  * new Monster.Constraint.Invalid().catch(()=>console.log(true));
  * </script>
  * ```
@@ -50153,7 +50153,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/invalid.js';
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/invalid.js';
  * new Invalid().catch(()=>console.log(true));
  * </script>
  * ```
@@ -50244,7 +50244,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/isarray.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
  * console.log(new Monster.Constraint.IsArray())
  * </script>
  * ```
@@ -50253,7 +50253,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/isarray.js';
+ * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isarray.js';
  * console.log(new IsArray())
  * </script>
  * ```
@@ -50348,7 +50348,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/isobject.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
  * console.log(new Monster.Constraint.IsObject())
  * </script>
  * ```
@@ -50357,7 +50357,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/isobject.js';
+ * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/isobject.js';
  * console.log(new IsObject())
  * </script>
  * ```
@@ -50448,7 +50448,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraint/oroperator.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
  * new Monster.Constraint.OrOperator(new Monster.Constraint.Valid(), new Monster.Constraint.Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -50457,8 +50457,8 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraint/valid.js';
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraint/oroperator.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/valid.js';
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraint/oroperator.js';
  * new OrOperator(new Valid(), new Valid()).then(()=>console.log(true)).catch(()=>console.log(false));
  * </script>
  * ```
@@ -50570,7 +50570,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/valid.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
  * new Monster.Constraint.Valid().then(()=>console.log(true));
  * </script>
  * ```
@@ -50579,7 +50579,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/constraints/valid.js';
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/constraints/valid.js';
  * new Valid().then(()=>console.log(true));
  * </script>
  * ```
@@ -50647,7 +50647,7 @@ var _namespace = require("../namespace.js");
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/math/random.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
  * console.log(Monster.Math.random(1,10)) // ↦ 5
  * </script>
  * ```
@@ -50656,7 +50656,7 @@ var _namespace = require("../namespace.js");
  *
  * ```
  * <script type="module">
- * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/math/random.js';
+ * import {random} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/math/random.js';
  * console.log(random(1,10)) // ↦ 5
  * </script>
  * ```
@@ -50845,7 +50845,7 @@ assignToNamespace('Monster', assignToNamespace);
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/namespace.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/namespace.js';
  * function hello() {
  *            console.log('Hello World!');
  *        }
@@ -50989,8 +50989,7 @@ var internalCounter = 0;
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/id.js';
- * console.log(new Monster.Types.ID())
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Monster.Types.ID())
  * </script>
  * ```
@@ -50999,8 +50998,7 @@ var internalCounter = 0;
  *
  * ```
  * <script type="module">
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/id.js';
- * console.log(new ID())
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new ID())
  * </script>
  * ```
@@ -51062,6 +51060,7 @@ exports.isObject = isObject;
 exports.isArray = isArray;
 exports.isFunction = isFunction;
 exports.isIterable = isIterable;
+exports.isInteger = isInteger;
 Object.defineProperty(exports, "Monster", {
   enumerable: true,
   get: function get() {
@@ -51080,7 +51079,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isIterable(null)) // ↦ false
  * console.log(Monster.Types.isIterable('hello')) // ↦ true
  * console.log(Monster.Types.isIterable([])) // ↦ true
@@ -51091,7 +51090,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
  *
  * ```
  * <script type="module">
- * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {isIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isIterable(null))  // ↦ false
  * console.log(isIterable('hello'))  // ↦ true
  * console.log(isIterable([]))  // ↦ true
@@ -51116,7 +51115,7 @@ function isIterable(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isPrimitive('2')) // ↦ false
  * console.log(Monster.Types.isPrimitive([])) // ↦ true
  * </script>
@@ -51126,7 +51125,7 @@ function isIterable(value) {
  *
  * ```
  * <script type="module">
- * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {isPrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isPrimitive('2'))  // ↦ true
  * console.log(isPrimitive([]))  // ↦ false
  * </script>
@@ -51162,7 +51161,7 @@ function isPrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isBoolean('2')) // ↦ false
  * console.log(Monster.Types.isBoolean([])) // ↦ false
  * console.log(Monster.Types.isBoolean(true)) // ↦ true
@@ -51173,7 +51172,7 @@ function isPrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {isBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isBoolean('2'))  // ↦ false
  * console.log(isBoolean([]))  // ↦ false
  * console.log(isBoolean(2>4))  // ↦ true
@@ -51202,7 +51201,7 @@ function isBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isString('2')) // ↦ true
  * console.log(Monster.Types.isString([])) // ↦ false
  * </script>
@@ -51212,7 +51211,7 @@ function isBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {isString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isString('2'))  // ↦ true
  * console.log(isString([]))  // ↦ false
  * </script>
@@ -51240,7 +51239,7 @@ function isString(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isObject('2')) // ↦ false
  * console.log(Monster.Types.isObject([])) // ↦ false
  * console.log(Monster.Types.isObject({})) // ↦ true
@@ -51251,7 +51250,7 @@ function isString(value) {
  *
  * ```
  * <script type="module">
- * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isObject('2'))  // ↦ false
  * console.log(isObject([]))  // ↦ false
  * </script>
@@ -51282,7 +51281,7 @@ function isObject(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isArray('2')) // ↦ false
  * console.log(Monster.Types.isArray([])) // ↦ true
  * </script>
@@ -51292,7 +51291,7 @@ function isObject(value) {
  *
  * ```
  * <script type="module">
- * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {isArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isArray('2'))  // ↦ false
  * console.log(isArray([]))  // ↦ true
  * </script>
@@ -51320,7 +51319,7 @@ function isArray(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(Monster.Types.isFunction(()=>{})) // ↦ true
  * console.log(Monster.Types.isFunction('2')) // ↦ false
  * console.log(Monster.Types.isFunction([])) // ↦ false
@@ -51331,7 +51330,7 @@ function isArray(value) {
  *
  * ```
  * <script type="module">
- * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/is.js';
+ * import {isFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
  * console.log(isFunction(()=>{})) // ↦ true
  * console.log(isFunction('2'))  // ↦ false
  * console.log(isFunction([]))  // ↦ false
@@ -51356,8 +51355,44 @@ function isFunction(value) {
 
   return false;
 }
+/**
+ * checks whether the value passed is an integer
+ *
+ * you can call the method via the monster namespace `Monster.Types.isFunction()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+ * console.log(Monster.Types.isInteger(()=>{})) // ↦ true
+ * console.log(Monster.Types.isInteger('2')) // ↦ false
+ * console.log(Monster.Types.isInteger(2)) // ↦ true
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {isInteger} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/is.js';
+ * console.log(isInteger(()=>{})) // ↦ true
+ * console.log(isInteger('2'))  // ↦ false
+ * console.log(isInteger(2))  // ↦ true
+ * </script>
+ * ```
+ *
+ * @param {*} value
+ * @returns {boolean}
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+
+
+function isInteger(value) {
+  return Number.isInteger(value);
+}
 
-_namespace.Monster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable);
+_namespace.Monster.assignToNamespace('Monster.Types', isPrimitive, isBoolean, isString, isObject, isArray, isFunction, isIterable, isInteger);
 
 },{"../namespace.js":258}],261:[function(require,module,exports){
 'use strict';
@@ -51391,7 +51426,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/object.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
  * console.log(new Monster.Types.Object())
  * console.log(new Monster.Types.Object())
  * </script>
@@ -51401,7 +51436,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
  *
  * ```
  * <script type="module">
- * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/object.js';
+ * import {Object} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/object.js';
  * console.log(new Object())
  * console.log(new Object())
  * </script>
@@ -51465,6 +51500,8 @@ var _is = require("../types/is.js");
 
 require("../types/object.js");
 
+var _uniquequeue = require("../types/uniquequeue.js");
+
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
@@ -51492,7 +51529,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/observer.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
  * console.log(new Monster.Types.Observer())
  * </script>
  * ```
@@ -51501,7 +51538,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/observer.js';
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observer.js';
  * console.log(Observer())
  * </script>
  * ```
@@ -51530,7 +51567,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  * }, "a", 2, true)
  * </script>
  * ```
- * 
+ *
  * the callback function must have as many parameters as arguments are given.
  *
  *
@@ -51567,6 +51604,7 @@ var Observer = /*#__PURE__*/function (_Monster$Types$Object) {
 
     _this.arguments = args;
     _this.tags = new _tokenlist.TokenList();
+    _this.queue = new _uniquequeue.UniqueQueue();
     return _this;
   }
   /**
@@ -51630,8 +51668,25 @@ var Observer = /*#__PURE__*/function (_Monster$Types$Object) {
           reject("subject must be an object");
         }
 
-        var result = self.callback.apply(subject, self.arguments);
-        resolve(result);
+        self.queue.add(subject);
+        setTimeout(function () {
+          // the queue and the settimeout ensure that an object is not 
+          // informed of the same change more than once.
+          if (self.queue.isEmpty()) {
+            resolve();
+            return;
+          }
+
+          var s = self.queue.poll();
+          var result = self.callback.apply(s, self.arguments);
+
+          if ((0, _is.isObject)(result) && result instanceof Promise) {
+            result.then(resolve)["catch"](reject);
+            return;
+          }
+
+          resolve(result);
+        }, 0);
       });
     }
   }]);
@@ -51643,7 +51698,7 @@ exports.Observer = Observer;
 
 _namespace.Monster.assignToNamespace('Monster.Types', Observer);
 
-},{"../namespace.js":258,"../types/is.js":260,"../types/object.js":261,"../types/tokenlist.js":265}],263:[function(require,module,exports){
+},{"../namespace.js":258,"../types/is.js":260,"../types/object.js":261,"../types/tokenlist.js":267,"../types/uniquequeue.js":268}],263:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -51693,7 +51748,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/observerlist.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
  * console.log(new Monster.Types.ObserverList()) 
  * console.log(new Monster.Types.ObserverList()) 
  * </script>
@@ -51703,7 +51758,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/observerlist.js';
+ * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/observerlist.js';
  * console.log(ObserverList())
  * console.log(ObserverList())
  * </script>
@@ -51808,8 +51863,6 @@ _namespace.Monster.assignToNamespace('Monster.Types', ObserverList);
  * @author schukai GmbH
  */
 
-function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
@@ -51833,6 +51886,8 @@ var _observer = require("./observer.js");
 
 var _is = require("./is.js");
 
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
@@ -51853,12 +51908,6 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
 
 function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
 
-/**
- * store proxy objects
- *
- * @type {WeakSet<object>}
- */
-var proxySet = new WeakSet();
 /**
  * an observer manages a callback function
  *
@@ -51866,7 +51915,7 @@ var proxySet = new WeakSet();
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/proxyobserver.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
  * console.log(new Monster.Types.ProxyObserver())
  * </script>
  * ```
@@ -51875,16 +51924,42 @@ var proxySet = new WeakSet();
  *
  * ```
  * <script type="module">
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/proxyobserver.js';
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/proxyobserver.js';
  * console.log(new ProxyObserver())
  * </script>
  * ```
  *
+ * with the ProxyObserver you can attach observer for observation. with each change at the object to be observed an update takes place.
+ *
+ * this also applies to nested objects.
+ *
+ * ```javascript
+ * const o = new Observer(function () {
+ *    if (isObject(this) && this instanceof ProxyObserver) {
+ *        // do something (this ist ProxyObserver)
+ *        const subject = this.getSubject();
+ *    }
+ * )
+ * 
+ * let realSubject = {
+ *    a: {
+ *        b: {
+ *            c: true
+ *        },
+ *        d: 5
+ *    }
+ * 
+ * 
+ * const p = new ProxyObserver(realSubject);
+ * p.attachObserver(o);
+ * const s = p.getSubject();
+ * s.a.b.c = false;
+ * ```
+ *
  * @since 1.0.0
  * @copyright schukai GmbH
  * @memberOf Monster/Types
  */
-
 var ProxyObserver = /*#__PURE__*/function (_Object) {
   _inherits(ProxyObserver, _Object);
 
@@ -51903,7 +51978,10 @@ var ProxyObserver = /*#__PURE__*/function (_Object) {
     (0, _validate.validateObject)(object);
     _this.realSubject = object;
     _this.subject = new Proxy(object, getHandler.call(_assertThisInitialized(_this)));
-    proxySet.add(_this.subject);
+    _this.objectMap = new WeakMap();
+
+    _this.objectMap.set(_this.realSubject, _this.subject);
+
     _this.observers = new _observerlist.ObserverList();
     return _this;
   }
@@ -52000,54 +52078,392 @@ function getHandler() {
 
   var handler = {
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
-    get: function get(target, property, receiver) {
-      var prop = target === null || target === void 0 ? void 0 : target[property]; // return if property not found
+    get: function get(target, key, receiver) {
+      var value = Reflect.get(target, key, receiver);
 
-      if (prop === undefined) {
-        return undefined;
+      if (_typeof(key) === "symbol") {
+        return value;
+      }
+
+      if ((0, _is.isPrimitive)(value)) {
+        return value;
       } // set value as proxy if object or array
 
 
-      if ((0, _is.isArray)(prop) || (0, _is.isObject)(prop) && !proxySet.has(prop)) {
-        target[property] = new Proxy(prop, handler);
-        proxySet.add(prop);
+      if ((0, _is.isArray)(value) || (0, _is.isObject)(value)) {
+        if (proxy.objectMap.has(value)) {
+          return proxy.objectMap.get(value);
+        } else {
+          var p = new Proxy(value, handler);
+          proxy.objectMap.set(value, p);
+          return p;
+        }
       }
 
-      return target[property];
+      return value;
     },
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver 
-    set: function set(target, property, value, receiver) {
-      target[property] = value;
-      proxy.observers.notify(proxy);
-      return true;
+    set: function set(target, key, value, receiver) {
+      var result = Reflect.set(target, key, value, receiver);
+
+      if ((typeof property === "undefined" ? "undefined" : _typeof(property)) !== "symbol") {
+        proxy.observers.notify(proxy);
+      }
+
+      return result;
     },
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p
-    deleteProperty: function deleteProperty(target, property) {
-      if (property in target) {
-        delete target[property];
-        proxy.observers.notify(proxy);
+    deleteProperty: function deleteProperty(target, key) {
+      if (key in target) {
+        delete target[key];
+
+        if (_typeof(key) !== "symbol") {
+          proxy.observers.notify(proxy);
+        }
+
         return true;
       }
 
       return false;
     },
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc
-    defineProperty: function defineProperty(target, property, descriptor) {
-      var result = Reflect.defineProperty(target, property, descriptor);
-      proxy.observers.notify(proxy);
-      return parseURLToResultingURLRecord();
+    defineProperty: function defineProperty(target, key, descriptor) {
+      var result = Reflect.defineProperty(target, key, descriptor);
+
+      if (_typeof(key) !== "symbol") {
+        proxy.observers.notify(proxy);
+      }
+
+      return result;
     },
     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v
-    setPrototypeOf: function setPrototypeOf(target, prototype) {
-      var result = Reflect.setPrototypeOf(object1, prototype);
-      proxy.observers.notify(proxy);
+    setPrototypeOf: function setPrototypeOf(target, key) {
+      var result = Reflect.setPrototypeOf(object1, key);
+
+      if (_typeof(key) !== "symbol") {
+        proxy.observers.notify(proxy);
+      }
+
       return result;
     }
   };
   return handler;
 }
 
-},{"../namespace.js":258,"../types/object.js":261,"./is.js":260,"./observer.js":262,"./observerlist.js":263,"./validate.js":266}],265:[function(require,module,exports){
+},{"../namespace.js":258,"../types/object.js":261,"./is.js":260,"./observer.js":262,"./observerlist.js":263,"./validate.js":269}],265:[function(require,module,exports){
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "Monster", {
+  enumerable: true,
+  get: function get() {
+    return _object.Monster;
+  }
+});
+exports.Queue = void 0;
+
+var _object = require("./object.js");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+/**
+ * queue class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+ * console.log(new Monster.Types.Queue())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/queue.js';
+ * console.log(new Queue())
+ * </script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+var Queue = /*#__PURE__*/function (_Object) {
+  _inherits(Queue, _Object);
+
+  var _super = _createSuper(Queue);
+
+  /**
+   *
+   */
+  function Queue() {
+    var _this;
+
+    _classCallCheck(this, Queue);
+
+    _this = _super.call(this);
+    _this.data = [];
+    return _this;
+  }
+  /**
+   * @return {boolean}
+   */
+
+
+  _createClass(Queue, [{
+    key: "isEmpty",
+    value: function isEmpty() {
+      return this.data.length === 0;
+    }
+    /**
+     * Read the element at the front of the queue without removing it.
+     *
+     * @return {*}
+     */
+
+  }, {
+    key: "peek",
+    value: function peek() {
+      if (this.isEmpty()) {
+        return undefined;
+      }
+
+      return this.data[0];
+    }
+    /**
+     * Add a new element to the end of the queue.
+     *
+     * @param {*} value
+     * @returns {Queue}
+     */
+
+  }, {
+    key: "add",
+    value: function add(value) {
+      this.data.push(value);
+      return this;
+    }
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+
+  }, {
+    key: "clear",
+    value: function clear() {
+      this.data = [];
+      return this;
+    }
+    /**
+     * Remove the element at the front of the queue
+     * If the queue is empty, return undefined.
+     *
+     * @return {*}
+     */
+
+  }, {
+    key: "poll",
+    value: function poll() {
+      if (this.isEmpty()) {
+        return undefined;
+      }
+
+      return this.data.shift();
+    }
+  }]);
+
+  return Queue;
+}(Object);
+
+exports.Queue = Queue;
+
+_object.Monster.assignToNamespace('Monster.Types', Queue);
+
+},{"./object.js":261}],266:[function(require,module,exports){
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "Monster", {
+  enumerable: true,
+  get: function get() {
+    return _object.Monster;
+  }
+});
+exports.Stack = void 0;
+
+var _object = require("./object.js");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+/**
+ * Stack class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/stack.js';
+ * console.log(new Monster.Types.Stack())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/stack.js';
+ * console.log(new Stack())
+ * </script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+var Stack = /*#__PURE__*/function (_Object) {
+  _inherits(Stack, _Object);
+
+  var _super = _createSuper(Stack);
+
+  /**
+   *
+   */
+  function Stack() {
+    var _this;
+
+    _classCallCheck(this, Stack);
+
+    _this = _super.call(this);
+    _this.data = [];
+    return _this;
+  }
+  /**
+   * @return {boolean}
+   */
+
+
+  _createClass(Stack, [{
+    key: "isEmpty",
+    value: function isEmpty() {
+      return this.data.length === 0;
+    }
+    /**
+     * looks at the object at the top of this stack without removing it from the stack.
+     *
+     * @return {*}
+     */
+
+  }, {
+    key: "peek",
+    value: function peek() {
+      var _this$data;
+
+      if (this.isEmpty()) {
+        return undefined;
+      }
+
+      return (_this$data = this.data) === null || _this$data === void 0 ? void 0 : _this$data[this.data.length - 1];
+    }
+    /**
+     * pushes an item onto the top of this stack.
+     *
+     * @param {*} value
+     * @returns {Queue}
+     */
+
+  }, {
+    key: "push",
+    value: function push(value) {
+      this.data.push(value);
+      return this;
+    }
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+
+  }, {
+    key: "clear",
+    value: function clear() {
+      this.data = [];
+      return this;
+    }
+    /**
+     * removes the object at the top of this stack and returns 
+     * that object as the value of this function. is the stack empty
+     * the return value is undefined.
+     *
+     * @return {*}
+     */
+
+  }, {
+    key: "pop",
+    value: function pop() {
+      if (this.isEmpty()) {
+        return undefined;
+      }
+
+      return this.data.pop();
+    }
+  }]);
+
+  return Stack;
+}(Object);
+
+exports.Stack = Stack;
+
+_object.Monster.assignToNamespace('Monster.Types', Stack);
+
+},{"./object.js":261}],267:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -52109,7 +52525,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/tokenlist.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
  * console.log(new Monster.Types.TokenList("myclass row"))
  * console.log(new Monster.Types.TokenList("myclass row"))
  * </script>
@@ -52119,7 +52535,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/tokenlist.js';
+ * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/tokenlist.js';
  * console.log(new TokenList("myclass row"))
  * console.log(new TokenList("myclass row"))
  * </script>
@@ -52492,7 +52908,156 @@ function toggleValue(token) {
 
 _namespace.Monster.assignToNamespace('Monster.Types', TokenList);
 
-},{"../namespace.js":258,"../types/is.js":260,"../types/object.js":261,"../types/validate.js":266}],266:[function(require,module,exports){
+},{"../namespace.js":258,"../types/is.js":260,"../types/object.js":261,"../types/validate.js":269}],268:[function(require,module,exports){
+"use strict";
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "Monster", {
+  enumerable: true,
+  get: function get() {
+    return _queue.Monster;
+  }
+});
+exports.UniqueQueue = void 0;
+
+var _queue = require("./queue.js");
+
+var _validate = require("./validate.js");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
+
+function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+/**
+ * UniqueQueue class
+ *
+ * you can call the method via the monster namespace `new Monster.Types.Queue()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+ * console.log(new Monster.Types.UniqueQueue())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/uniquequeue.js';
+ * console.log(new UniqueQueue())
+ * </script>
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ */
+var UniqueQueue = /*#__PURE__*/function (_Queue) {
+  _inherits(UniqueQueue, _Queue);
+
+  var _super = _createSuper(UniqueQueue);
+
+  /**
+   *
+   */
+  function UniqueQueue() {
+    var _this;
+
+    _classCallCheck(this, UniqueQueue);
+
+    _this = _super.call(this);
+    _this.unique = new WeakSet();
+    return _this;
+  }
+  /**
+   * Add a new element to the end of the queue.
+   *
+   * @param {object} value
+   * @returns {Queue}
+   * @throws {TypeError} value is not a object
+   */
+
+
+  _createClass(UniqueQueue, [{
+    key: "add",
+    value: function add(value) {
+      (0, _validate.validateObject)(value);
+
+      if (!this.unique.has(value)) {
+        this.unique.add(value);
+
+        _get(_getPrototypeOf(UniqueQueue.prototype), "add", this).call(this, value);
+      }
+
+      return this;
+    }
+    /**
+     * remove all entries
+     *
+     * @returns {Queue}
+     */
+
+  }, {
+    key: "clear",
+    value: function clear() {
+      _get(_getPrototypeOf(UniqueQueue.prototype), "clear", this).call(this);
+
+      this.unique = new WeakSet();
+      return this;
+    }
+    /**
+     * Remove the element at the front of the queue
+     * If the queue is empty, return undefined.
+     *
+     * @return {object}
+     */
+
+  }, {
+    key: "poll",
+    value: function poll() {
+      if (this.isEmpty()) {
+        return undefined;
+      }
+
+      var value = this.data.shift();
+      this.unique["delete"](value);
+      return value;
+    }
+  }]);
+
+  return UniqueQueue;
+}(_queue.Queue);
+
+exports.UniqueQueue = UniqueQueue;
+
+_queue.Monster.assignToNamespace('Monster.Types', UniqueQueue);
+
+},{"./queue.js":265,"./validate.js":269}],269:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -52508,6 +53073,7 @@ exports.validateObject = validateObject;
 exports.validateArray = validateArray;
 exports.validateFunction = validateFunction;
 exports.validateIterable = validateIterable;
+exports.validateInteger = validateInteger;
 Object.defineProperty(exports, "Monster", {
   enumerable: true,
   get: function get() {
@@ -52526,7 +53092,7 @@ var _is = require("../types/is.js");
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateIterable('2')) // ↦ TypeError
  * console.log(Monster.Types.validateIterable([])) // ↦ undefined
  * </script>
@@ -52536,7 +53102,7 @@ var _is = require("../types/is.js");
  *
  * ```
  * <script type="module">
- * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {validateIterable} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateIterable('2'))  // ↦ TypeError
  * console.log(validateIterable([]))  // ↦ undefined
  * </script>
@@ -52564,7 +53130,7 @@ function validateIterable(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validatePrimitive('2')) // ↦ undefined
  * console.log(Monster.Types.validatePrimitive([])) // ↦ TypeError
  * </script>
@@ -52574,7 +53140,7 @@ function validateIterable(value) {
  *
  * ```
  * <script type="module">
- * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {validatePrimitive} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validatePrimitive('2'))  // ↦ undefined
  * console.log(validatePrimitive([]))  // ↦ TypeError
  * </script>
@@ -52604,7 +53170,7 @@ function validatePrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateBoolean(true)) // ↦ undefined
  * console.log(Monster.Types.validateBoolean('2')) // ↦ TypeError
  * console.log(Monster.Types.validateBoolean([])) // ↦ TypeError
@@ -52615,7 +53181,7 @@ function validatePrimitive(value) {
  *
  * ```
  * <script type="module">
- * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {validateBoolean} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateBoolean(false))  // ↦ undefined
  * console.log(validateBoolean('2'))  // ↦ TypeError
  * console.log(validateBoolean([]))  // ↦ TypeError
@@ -52644,7 +53210,7 @@ function validateBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateString('2')) // ↦ undefined
  * console.log(Monster.Types.validateString([])) // ↦ TypeError
  * </script>
@@ -52654,7 +53220,7 @@ function validateBoolean(value) {
  *
  * ```
  * <script type="module">
- * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {validateString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateString('2'))  // ↦ undefined
  * console.log(validateString([]))  // ↦ TypeError
  * </script>
@@ -52665,7 +53231,6 @@ function validateBoolean(value) {
  * @since 1.0.0
  * @copyright schukai GmbH
  * @memberOf Monster/Types
-
  * @throws {TypeError} value is not a string
  */
 
@@ -52682,7 +53247,7 @@ function validateString(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateObject({})) // ↦ undefined
  * console.log(Monster.Types.validateObject('2')) // ↦ TypeError
  * console.log(Monster.Types.validateObject([])) // ↦ TypeError
@@ -52693,7 +53258,7 @@ function validateString(value) {
  *
  * ```
  * <script type="module">
- * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {validateObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateObject({}))  // ↦ undefined
  * console.log(validateObject('2'))  // ↦ TypeError
  * console.log(validateObject([]))  // ↦ TypeError
@@ -52721,7 +53286,7 @@ function validateObject(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateArray('2')) // ↦ TypeError
  * console.log(Monster.Types.validateArray([])) // ↦ undefined
  * </script>
@@ -52731,7 +53296,7 @@ function validateObject(value) {
  *
  * ```
  * <script type="module">
- * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {validateArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateArray('2'))  // ↦ TypeError
  * console.log(validateArray([]))  // ↦ undefined
  * </script>
@@ -52758,7 +53323,7 @@ function validateArray(value) {
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(Monster.Types.validateFunction(()=>{})) // ↦ undefined
  * console.log(Monster.Types.validateFunction('2')) // ↦ TypeError
  * console.log(Monster.Types.validateFunction([])) // ↦ TypeError
@@ -52769,7 +53334,7 @@ function validateArray(value) {
  *
  * ```
  * <script type="module">
- * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/validate.js';
+ * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
  * console.log(validateFunction(()=>{})) // ↦ undefined
  * console.log(validateFunction('2'))  // ↦ TypeError
  * console.log(validateFunction([]))  // ↦ TypeError
@@ -52790,10 +53355,49 @@ function validateFunction(value) {
     throw new TypeError('value is not a function');
   }
 }
+/**
+ * this method checks if the type is an integer. this function is identical to isInteger() except that a TypeError is thrown.
+ *
+ * you can call the method via the monster namespace `Monster.Types.validateInteger()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+ * console.log(Monster.Types.validateInteger(true)) // ↦ TypeError
+ * console.log(Monster.Types.validateInteger('2')) // ↦ TypeError
+ * console.log(Monster.Types.validateInteger(2)) // ↦ undefined
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {validateFunction} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/validate.js';
+ * console.log(validateInteger(true)) // ↦ TypeError
+ * console.log(validateInteger('2'))  // ↦ TypeError
+ * console.log(validateInteger(2))  // ↦ undefined
+ * </script>
+ * ```
+ *
+ * @param {*} value
+ * @return {undefined}
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Types
+ * @throws {TypeError} value is not an integer
+ */
+
+
+function validateInteger(value) {
+  if (!(0, _is.isInteger)(value)) {
+    throw new TypeError('value is not an integer');
+  }
+}
 
-_namespace.Monster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable);
+_namespace.Monster.assignToNamespace('Monster.Types', validatePrimitive, validateBoolean, validateString, validateObject, validateArray, validateFunction, validateIterable, validateInteger);
 
-},{"../namespace.js":258,"../types/is.js":260}],267:[function(require,module,exports){
+},{"../namespace.js":258,"../types/is.js":260}],270:[function(require,module,exports){
 'use strict';
 
 function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
@@ -52841,7 +53445,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/version.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(new Monster.Types.Version('1.2.3')) // ↦ 1.2.3
  * console.log(new Monster.Types.Version('1')) // ↦ 1.0.0
  * </script>
@@ -52851,7 +53455,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/version.js';
+ * import {Version} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(new Version('1.2.3')) // ↦ 1.2.3
  * console.log(new Version('1')) // ↦ 1.0.0
  * </script>
@@ -52994,7 +53598,7 @@ var monsterVersion;
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/version.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(Monster.getVersion())
  * console.log(Monster.getVersion())
  * </script>
@@ -53004,7 +53608,7 @@ var monsterVersion;
  *
  * ```
  * <script type="module">
- * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/version.js';
+ * import {getVersion} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/version.js';
  * console.log(getVersion())
  * console.log(getVersion())
  * </script>
@@ -53024,7 +53628,7 @@ function getVersion() {
   /**#@+ dont touch, replaced by make with package.json version */
 
 
-  monsterVersion = new Version('1.2.1');
+  monsterVersion = new Version('1.4.0');
   /**#@-*/
 
   return monsterVersion;
@@ -53032,7 +53636,7 @@ function getVersion() {
 
 _namespace.Monster.assignToNamespace('Monster', getVersion);
 
-},{"../namespace.js":258,"../types/object.js":261}],268:[function(require,module,exports){
+},{"../namespace.js":258,"../types/object.js":261}],271:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -53068,7 +53672,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/util/clone.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
  * console.log(Monster.Util.clone({}))
  * </script>
  * ```
@@ -53077,7 +53681,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
  *
  * ```
  * <script type="module">
- * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/util/clone.js';
+ * import {clone} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/clone.js';
  * console.log(clone({}))
  * </script>
  * ```
@@ -53193,7 +53797,7 @@ function cloneObject(obj) {
 
 _namespace.Monster.assignToNamespace('Monster.Util', clone);
 
-},{"../namespace.js":258,"../types/is.js":260}],269:[function(require,module,exports){
+},{"../namespace.js":258,"../types/is.js":260}],272:[function(require,module,exports){
 'use strict';
 /**
  * @author schukai GmbH
@@ -53241,7 +53845,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/id.js';
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Monster.Util.Comparator())
  * console.log(new Monster.Util.Comparator())
  * </script>
@@ -53251,7 +53855,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
  *
  * ```
  * <script type="module">
- * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.1/dist/modules/types/id.js';
+ * import {Comparator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/types/id.js';
  * console.log(new Util())
  * console.log(new Util())
  * </script>
@@ -53415,7 +54019,341 @@ exports.Comparator = Comparator;
 
 _object.Monster.assignToNamespace('Monster.Util', Comparator);
 
-},{"../types/is.js":260,"../types/object.js":261}],270:[function(require,module,exports){
+},{"../types/is.js":260,"../types/object.js":261}],273:[function(require,module,exports){
+'use strict';
+/**
+ * @author schukai GmbH
+ */
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "Monster", {
+  enumerable: true,
+  get: function get() {
+    return _namespace.Monster;
+  }
+});
+exports.Pathfinder = void 0;
+
+var _namespace = require("../namespace.js");
+
+var _is = require("../types/is.js");
+
+var _validate = require("../types/validate.js");
+
+var _object = require("../types/object.js");
+
+var _stack = require("../types/stack.js");
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+/**
+ * path separator
+ *
+ * @private
+ * @type {string}
+ */
+var DELIMITER = '.';
+/**
+ * Pathfinder class
+ *
+ * you can call the method via the monster namespace `new Monster.Util.Pathfinder()`.
+ *
+ * ```
+ * <script type="module">
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/pathfinder.js';
+ * console.log(new Monster.Util.Pathfinder())
+ * </script>
+ * ```
+ *
+ * Alternatively, you can also integrate this function individually.
+ *
+ * ```
+ * <script type="module">
+ * import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.4.0/dist/modules/util/pathfinder.js';
+ * console.log(new Pathfinder())
+ * </script>
+ * ```
+ *
+ * With the help of the pathfinder, values can be read and written from an object construct.
+ *
+ * ```
+ * new Pathfinder({
+ * a: {
+ *     b: {
+ *         f: [
+ *             {
+ *                 g: false,
+ *             }
+ *         ],
+ *     }
+ * }
+ * }).getVia("a.b.f.0.g"); // ↦ false
+ * ```
+ *
+ * if a value is not present or has the wrong type, a corresponding exception is thrown.
+ *
+ * ```
+ * new Pathfinder({}).getVia("a.b.f.0.g"); // ↦ Error
+ * ```
+ *
+ * The `Pathfinder.exists()` method can be used to check whether access to the path is possible.
+ *
+ * ```
+ * new Pathfinder({}).exists("a.b.f.0.g"); // ↦ false
+ * ```
+ *
+ * pathfinder can also be used to build object structures. to do this, the `Pathfinder.setVia()` method must be used.
+ *
+ * ```
+ * obj = {};
+ * new Pathfinder(obj).setVia('a.b.0.c', true); // ↦ {a:{b:[{c:true}]}}
+ * ```
+ *
+ * @since 1.4.0
+ * @copyright schukai GmbH
+ * @memberOf Monster/Util
+ */
+
+var Pathfinder = /*#__PURE__*/function (_Object) {
+  _inherits(Pathfinder, _Object);
+
+  var _super = _createSuper(Pathfinder);
+
+  /**
+   * @param {array|object|Map|Set} value
+   * @since 1.4.0
+   **/
+  function Pathfinder(object) {
+    var _this;
+
+    _classCallCheck(this, Pathfinder);
+
+    _this = _super.call(this);
+    _this.object = object;
+    return _this;
+  }
+  /**
+   *
+   * @param {string} path
+   * @since 1.4.0
+   * @returns {*}
+   * @throws {TypeError} unsupported type
+   * @throws {Error} the journey is not at its end
+   * @throws {TypeError} value is not a string
+   * @throws {TypeError} value is not an integer
+   */
+
+
+  _createClass(Pathfinder, [{
+    key: "getVia",
+    value: function getVia(path) {
+      (0, _validate.validateString)(path);
+      return getValueViaPath(this.object, path);
+    }
+    /**
+     *
+     * @param {string} path
+     * @param {*} value
+     * @returns {Pathfinder}
+     * @since 1.4.0
+     * @throws {TypeError} unsupported type
+     * @throws {TypeError} value is not a string
+     * @throws {TypeError} value is not an integer
+     */
+
+  }, {
+    key: "setVia",
+    value: function setVia(path, value) {
+      (0, _validate.validateString)(path);
+      setValueViaPath(this.object, path, value);
+      return this;
+    }
+    /**
+     *
+     * @param {string} path
+     * @return {bool}
+     * @throws {TypeError} unsupported type
+     * @throws {TypeError} value is not a string
+     * @throws {TypeError} value is not an integer
+     * @since 1.4.0
+     */
+
+  }, {
+    key: "exists",
+    value: function exists(path) {
+      (0, _validate.validateString)(path);
+
+      try {
+        getValueViaPath(this.object, path, true);
+        return true;
+      } catch (e) {}
+
+      return false;
+    }
+  }]);
+
+  return Pathfinder;
+}(Object);
+
+exports.Pathfinder = Pathfinder;
+
+_namespace.Monster.assignToNamespace('Monster.Util', Pathfinder);
+
+/**
+ *
+ * @param {*} object
+ * @param [string} path
+ * @param [boolean} check 
+ * @returns {*}
+ * @throws {TypeError} unsupported type
+ * @throws {Error} the journey is not at its end
+ */
+function getValueViaPath(object, path, check) {
+  if (path === "") {
+    return object;
+  }
+
+  var parts = path.split(DELIMITER);
+  var current = parts.shift();
+
+  if ((0, _is.isObject)(object) || (0, _is.isArray)(object)) {
+    var anchor;
+
+    if (object instanceof Map) {
+      anchor = object.get(current);
+    } else if (object instanceof Set) {
+      var _ref;
+
+      current = parseInt(current);
+      (0, _validate.validateInteger)(current);
+      anchor = (_ref = _toConsumableArray(object)) === null || _ref === void 0 ? void 0 : _ref[current];
+    } else if ((0, _is.isArray)(object)) {
+      current = parseInt(current);
+      (0, _validate.validateInteger)(current);
+      anchor = object === null || object === void 0 ? void 0 : object[current];
+    } else {
+      anchor = object === null || object === void 0 ? void 0 : object[current];
+    }
+
+    if ((0, _is.isObject)(anchor) || (0, _is.isArray)(anchor)) {
+      return getValueViaPath(anchor, parts.join(DELIMITER), check);
+    }
+
+    if (parts.length > 0) {
+      throw Error("the journey is not at its end (" + parts.join(DELIMITER) + ")");
+    }
+
+    if (check === true && !object.hasOwnProperty(current)) {
+      throw Error('unknown value');
+    }
+
+    return anchor;
+  }
+
+  throw TypeError("unsupported type");
+}
+/**
+ *
+ * @param object
+ * @param path
+ * @param value
+ * @returns {undefined|*}
+ * @throws {TypeError} unsupported type
+ * @throws {TypeError} unsupported type
+ * @throws {Error} the journey is not at its end
+ */
+
+
+function setValueViaPath(object, path, value) {
+  var parts = path.split(DELIMITER);
+  var last = parts.pop();
+  var subpath = parts.join(DELIMITER);
+  var stack = new _stack.Stack();
+  var current = subpath;
+
+  while (true) {
+    try {
+      getValueViaPath(object, current, true);
+      break;
+    } catch (e) {}
+
+    stack.push(current);
+    parts.pop();
+    current = parts.join(DELIMITER);
+    if (current === "") break;
+  }
+
+  while (!stack.isEmpty()) {
+    current = stack.pop();
+    var obj = {};
+
+    if (!stack.isEmpty()) {
+      var n = stack.peek().split(DELIMITER).pop();
+
+      if ((0, _is.isInteger)(parseInt(n))) {
+        obj = [];
+      }
+    }
+
+    setValueViaPath(object, current, obj);
+  }
+
+  var anchor = getValueViaPath(object, subpath);
+
+  if (!(0, _is.isObject)(object) && !(0, _is.isArray)(object)) {
+    throw TypeError("unsupported type: " + _typeof(object));
+  }
+
+  if (anchor instanceof Map) {
+    anchor.set(last, value);
+  } else if (anchor instanceof Set) {
+    anchor.append(value);
+  } else if ((0, _is.isArray)(anchor)) {
+    last = parseInt(last);
+    (0, _validate.validateInteger)(last);
+    anchor[last] = value;
+  } else {
+    anchor[last] = value;
+  }
+
+  return anchor;
+}
+
+},{"../namespace.js":258,"../types/is.js":260,"../types/object.js":261,"../types/stack.js":266,"../types/validate.js":269}],274:[function(require,module,exports){
 "use strict";
 
 var _valid = require("../../../source/constraints/valid.js");
@@ -53442,7 +54380,7 @@ describe('AndOperator', function () {
   });
 });
 
-},{"../../../source/constraints/andoperator.js":251,"../../../source/constraints/invalid.js":252,"../../../source/constraints/valid.js":256}],271:[function(require,module,exports){
+},{"../../../source/constraints/andoperator.js":251,"../../../source/constraints/invalid.js":252,"../../../source/constraints/valid.js":256}],275:[function(require,module,exports){
 "use strict";
 
 var _invalid = require("../../../source/constraints/invalid.js");
@@ -53461,7 +54399,7 @@ describe('Invalid', function () {
   });
 });
 
-},{"../../../source/constraints/invalid.js":252,"chai":84}],272:[function(require,module,exports){
+},{"../../../source/constraints/invalid.js":252,"chai":84}],276:[function(require,module,exports){
 "use strict";
 
 var _isarray = require("../../../source/constraints/isarray.js");
@@ -53482,7 +54420,7 @@ describe('IsArray', function () {
   });
 });
 
-},{"../../../source/constraints/isarray.js":253,"chai":84}],273:[function(require,module,exports){
+},{"../../../source/constraints/isarray.js":253,"chai":84}],277:[function(require,module,exports){
 "use strict";
 
 var _isobject = require("../../../source/constraints/isobject.js");
@@ -53503,7 +54441,7 @@ describe('IsObject', function () {
   });
 });
 
-},{"../../../source/constraints/isobject.js":254,"chai":84}],274:[function(require,module,exports){
+},{"../../../source/constraints/isobject.js":254,"chai":84}],278:[function(require,module,exports){
 "use strict";
 
 var _valid = require("../../../source/constraints/valid.js");
@@ -53530,7 +54468,7 @@ describe('OrOperator', function () {
   });
 });
 
-},{"../../../source/constraints/invalid.js":252,"../../../source/constraints/oroperator.js":255,"../../../source/constraints/valid.js":256}],275:[function(require,module,exports){
+},{"../../../source/constraints/invalid.js":252,"../../../source/constraints/oroperator.js":255,"../../../source/constraints/valid.js":256}],279:[function(require,module,exports){
 "use strict";
 
 var _valid = require("../../../source/constraints/valid.js");
@@ -53550,7 +54488,7 @@ describe('Valid', function () {
   });
 });
 
-},{"../../../source/constraints/valid.js":256,"chai":84}],276:[function(require,module,exports){
+},{"../../../source/constraints/valid.js":256,"chai":84}],280:[function(require,module,exports){
 (function (global){(function (){
 "use strict";
 
@@ -53602,7 +54540,7 @@ describe('Math', function () {
 });
 
 }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"../../../source/math/random.js":257,"@peculiar/webcrypto":18,"chai":84}],277:[function(require,module,exports){
+},{"../../../source/math/random.js":257,"@peculiar/webcrypto":18,"chai":84}],281:[function(require,module,exports){
 "use strict";
 
 var _chai = require("chai");
@@ -53614,7 +54552,7 @@ describe('Monster', function () {
     var monsterVersion;
     /**#@+ dont touch, replaced by make with package.json version */
 
-    monsterVersion = new _version.Version('1.2.1');
+    monsterVersion = new _version.Version('1.4.0');
     /**#@-*/
 
     var m = _version.Monster.getVersion();
@@ -53625,7 +54563,7 @@ describe('Monster', function () {
   });
 });
 
-},{"../../source/types/version.js":267,"chai":84}],278:[function(require,module,exports){
+},{"../../source/types/version.js":270,"chai":84}],282:[function(require,module,exports){
 (function (global){(function (){
 "use strict";
 
@@ -53656,7 +54594,7 @@ describe('ID', function () {
 });
 
 }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"../../../source/types/id.js":259,"@peculiar/webcrypto":18,"chai":84}],279:[function(require,module,exports){
+},{"../../../source/types/id.js":259,"@peculiar/webcrypto":18,"chai":84}],283:[function(require,module,exports){
 "use strict";
 
 var _is = require("../../../source/types/is.js");
@@ -53675,6 +54613,15 @@ describe('Is', function () {
       });
     });
   });
+  describe('.isInteger()', function () {
+    [['test1', false], [undefined, false], [null, false], [function () {}, false], [2, true], [parseInt("a"), false], [false, false], [true, false], [4.5, false], [{}, false], [[1, 2, 3], false], [Symbol("foo"), false]].forEach(function (data) {
+      var a = data.shift();
+      var b = data.shift();
+      it('is.isInteger(' + _typeof(a) + ') should return ' + b, function () {
+        (0, _chai.expect)((0, _is.isInteger)(a)).is.equal(b);
+      });
+    });
+  });
   describe('.isIterable()', function () {
     [['test1', true], [undefined, false], [null, false], [function () {}, false], [parseInt("a"), false], [2, false], [false, false], [true, false], [4.5, false], [{}, false], [[1, 2, 3], true], [Symbol("foo"), false]].forEach(function (data) {
       var a = data.shift();
@@ -53731,7 +54678,7 @@ describe('Is', function () {
   });
 });
 
-},{"../../../source/types/is.js":260,"chai":84}],280:[function(require,module,exports){
+},{"../../../source/types/is.js":260,"chai":84}],284:[function(require,module,exports){
 "use strict";
 
 var _chai = require("chai");
@@ -53785,6 +54732,23 @@ describe('Observer', function () {
       });
     });
   });
+  describe('run function .update() several times', function () {
+    var obj = {};
+    it('observer.update(' + obj + ') is ' + 1 + 3 + 6, function (done) {
+      var counter = 0;
+      var tempObserver = new _observer.Observer(function (a, b, c) {
+        counter++;
+        console.log(counter);
+      });
+      tempObserver.update(obj);
+      tempObserver.update(obj);
+      tempObserver.update(obj);
+      tempObserver.update(obj);
+      tempObserver.update(obj).then(function (_) {
+        done();
+      });
+    });
+  });
   describe('.getTags()', function () {
     [[['test1', 'test2', 'test3', 'test4'], 4], [['test1', 'test1', 'test3', 'test4'], 3], // double test1 (set is uniqueue)
     [['test1', 'test1', 'test1', 'test4'], 2] // multiple test1 (set is uniqueue)
@@ -53807,7 +54771,7 @@ describe('Observer', function () {
   });
 });
 
-},{"../../../source/types/observer.js":262,"chai":84}],281:[function(require,module,exports){
+},{"../../../source/types/observer.js":262,"chai":84}],285:[function(require,module,exports){
 "use strict";
 
 var _observerlist = require("../../../source/types/observerlist.js");
@@ -53833,11 +54797,15 @@ describe('ObserverList', function () {
   });
   describe('.notify()', function () {
     var resultValue = "Yes!";
-    var o = new _observer.Observer(function () {
-      return resultValue;
+    var o;
+    var observerList;
+    beforeEach(function () {
+      o = new _observer.Observer(function () {
+        return resultValue;
+      });
+      observerList = new _observerlist.ObserverList();
+      observerList.attach(o);
     });
-    var observerList = new _observerlist.ObserverList();
-    observerList.attach(o);
     it('should instanceof Promise', function () {
       (0, _chai.expect)(observerList.notify()).to.be.instanceOf(Promise);
     });
@@ -53880,7 +54848,7 @@ describe('ObserverList', function () {
   });
 });
 
-},{"../../../source/types/observer.js":262,"../../../source/types/observerlist.js":263,"chai":84}],282:[function(require,module,exports){
+},{"../../../source/types/observer.js":262,"../../../source/types/observerlist.js":263,"chai":84}],286:[function(require,module,exports){
 "use strict";
 
 var _chai = require("chai");
@@ -53900,9 +54868,17 @@ describe('ProxyObserver', function () {
   });
   describe('notify observer', function () {
     it('should inform observer', function (done) {
+      var counter = 0; // the method is called twice, once for defineProperty and for set trap
+
       var o = new _observer.Observer(function (a) {
         if ((0, _is.isObject)(this) && this instanceof _proxyobserver.ProxyObserver) {
-          return done();
+          counter++;
+
+          if (counter === 1) {
+            done();
+          }
+
+          return;
         }
 
         done(new Error("this is not ProxyObserver"));
@@ -53919,12 +54895,128 @@ describe('ProxyObserver', function () {
       (0, _chai.expect)(p).is.instanceOf(_proxyobserver.ProxyObserver);
       (0, _chai.expect)(p.attachObserver(o)).is.instanceOf(_proxyobserver.ProxyObserver);
       var s = p.getSubject();
-      s.a.b.c = false;
+      var r = p.getRealSubject();
+      s.a.d = false;
+      s.a.b.d = 2;
+    });
+  });
+  describe('notify observer with changes', function () {
+    var original, observer, proxy;
+    before(function () {
+      original = {};
+      proxy = new _proxyobserver.ProxyObserver(original);
+    });
+    [['a', 4, JSON.stringify({
+      a: 4
+    })], ['b', 9, JSON.stringify({
+      a: 4,
+      b: 9
+    })]].forEach(function (data) {
+      var a = data.shift();
+      var b = data.shift();
+      var c = data.shift();
+      it('set key ' + a + ' value ' + b + ' expect ' + c, function (done) {
+        var counter = 0;
+        observer = new _observer.Observer(function () {
+          counter++;
+          (0, _chai.expect)(JSON.stringify(this.getRealSubject())).is.equal(c);
+
+          if (counter === 1) {
+            this.detachObserver(observer);
+            done();
+          }
+        });
+        proxy.attachObserver(observer);
+        var subject = proxy.getSubject();
+        subject[a] = b;
+      });
+    });
+  });
+});
+
+},{"../../../source/types/is.js":260,"../../../source/types/observer.js":262,"../../../source/types/proxyobserver.js":264,"chai":84}],287:[function(require,module,exports){
+"use strict";
+
+var _chai = require("chai");
+
+var _queue = require("../../../source/types/queue.js");
+
+describe('Queue', function () {
+  var queue;
+  beforeEach(function () {
+    queue = new _queue.Queue();
+  });
+  describe('isEmpty()', function () {
+    it('first it should empty', function () {
+      (0, _chai.expect)(queue.isEmpty()).to.be["true"];
+    });
+  });
+  describe('add sequence peek and poll', function () {
+    it('result a,a,a,b', function () {
+      (0, _chai.expect)(queue.add('a')).to.be.instanceOf(_queue.Queue);
+      (0, _chai.expect)(queue.isEmpty()).to.be["false"];
+      (0, _chai.expect)(queue.add('b')).to.be.instanceOf(_queue.Queue);
+      (0, _chai.expect)(queue.add('c')).to.be.instanceOf(_queue.Queue);
+      (0, _chai.expect)(queue.peek()).to.be.equal('a');
+      (0, _chai.expect)(queue.peek()).to.be.equal('a');
+      (0, _chai.expect)(queue.poll()).to.be.equal('a');
+      (0, _chai.expect)(queue.peek()).to.be.equal('b');
+      (0, _chai.expect)(queue.isEmpty()).to.be["false"];
+    });
+  });
+  describe('add and clear', function () {
+    it('should empty', function () {
+      (0, _chai.expect)(queue.isEmpty()).to.be["true"];
+      (0, _chai.expect)(queue.add('a')).to.be.instanceOf(_queue.Queue);
+      (0, _chai.expect)(queue.isEmpty()).to.be["false"];
+      (0, _chai.expect)(queue.clear()).to.be.instanceOf(_queue.Queue);
+      (0, _chai.expect)(queue.isEmpty()).to.be["true"];
+    });
+  });
+});
+
+},{"../../../source/types/queue.js":265,"chai":84}],288:[function(require,module,exports){
+"use strict";
+
+var _chai = require("chai");
+
+var _stack = require("../../../source/types/stack.js");
+
+describe('Stack', function () {
+  var stack;
+  beforeEach(function () {
+    stack = new _stack.Stack();
+  });
+  describe('isEmpty()', function () {
+    it('first it should empty', function () {
+      (0, _chai.expect)(stack.isEmpty()).to.be["true"];
+    });
+  });
+  describe('add sequence peek and pull', function () {
+    it('result a,a,a,b', function () {
+      (0, _chai.expect)(stack.push('a')).to.be.instanceOf(_stack.Stack);
+      (0, _chai.expect)(stack.isEmpty()).to.be["false"];
+      (0, _chai.expect)(stack.push('b')).to.be.instanceOf(_stack.Stack);
+      (0, _chai.expect)(stack.push('c')).to.be.instanceOf(_stack.Stack);
+      (0, _chai.expect)(stack.peek()).to.be.equal('c');
+      (0, _chai.expect)(stack.peek()).to.be.equal('c');
+      (0, _chai.expect)(stack.pop()).to.be.equal('c');
+      (0, _chai.expect)(stack.peek()).to.be.equal('b');
+      (0, _chai.expect)(stack.isEmpty()).to.be["false"];
+    });
+  });
+  describe('add and clear', function () {
+    it('should empty', function () {
+      (0, _chai.expect)(stack.isEmpty()).to.be["true"];
+      (0, _chai.expect)(stack.push('a')).to.be.instanceOf(_stack.Stack);
+      (0, _chai.expect)(stack.isEmpty()).to.be["false"];
+      (0, _chai.expect)(stack.clear()).to.be.instanceOf(_stack.Stack);
+      (0, _chai.expect)(stack.isEmpty()).to.be["true"];
     });
   });
 });
 
-},{"../../../source/types/is.js":260,"../../../source/types/observer.js":262,"../../../source/types/proxyobserver.js":264,"chai":84}],283:[function(require,module,exports){
+},{"../../../source/types/stack.js":266,"chai":84}],289:[function(require,module,exports){
 "use strict";
 
 var _chai = require("chai");
@@ -54129,7 +55221,93 @@ describe('TokenList', function () {
   });
 });
 
-},{"../../../source/types/tokenlist.js":265,"chai":84}],284:[function(require,module,exports){
+},{"../../../source/types/tokenlist.js":267,"chai":84}],290:[function(require,module,exports){
+"use strict";
+
+var _chai = require("chai");
+
+var _uniquequeue = require("../../../source/types/uniquequeue.js");
+
+describe('UniqueQueue', function () {
+  var queue;
+  beforeEach(function () {
+    queue = new _uniquequeue.UniqueQueue();
+  });
+  describe('isEmpty()', function () {
+    it('first it should empty', function () {
+      (0, _chai.expect)(queue.isEmpty()).to.be["true"];
+    });
+  });
+  describe('add sequence peek and poll', function () {
+    it('result a,a,a,b', function () {
+      (0, _chai.expect)(queue.add({
+        a: 1
+      })).to.be.instanceOf(_uniquequeue.UniqueQueue);
+      (0, _chai.expect)(queue.isEmpty()).to.be["false"];
+      (0, _chai.expect)(queue.add({
+        a: 2
+      })).to.be.instanceOf(_uniquequeue.UniqueQueue);
+      (0, _chai.expect)(queue.add({
+        a: 3
+      })).to.be.instanceOf(_uniquequeue.UniqueQueue);
+      (0, _chai.expect)(queue.peek()).to.deep.equal({
+        a: 1
+      });
+      (0, _chai.expect)(queue.peek()).to.deep.equal({
+        a: 1
+      });
+      (0, _chai.expect)(queue.poll()).to.deep.equal({
+        a: 1
+      });
+      (0, _chai.expect)(queue.poll()).to.deep.equal({
+        a: 2
+      });
+      (0, _chai.expect)(queue.isEmpty()).to.be["false"];
+      (0, _chai.expect)(queue.peek()).to.deep.equal({
+        a: 3
+      });
+      (0, _chai.expect)(queue.poll()).to.deep.equal({
+        a: 3
+      });
+      (0, _chai.expect)(queue.isEmpty()).to.be["true"];
+    });
+  });
+  describe('add and clear', function () {
+    it('should empty', function () {
+      (0, _chai.expect)(queue.isEmpty()).to.be["true"];
+      (0, _chai.expect)(queue.add({
+        a: 1
+      })).to.be.instanceOf(_uniquequeue.UniqueQueue);
+      (0, _chai.expect)(queue.isEmpty()).to.be["false"];
+      (0, _chai.expect)(queue.clear()).to.be.instanceOf(_uniquequeue.UniqueQueue);
+      (0, _chai.expect)(queue.isEmpty()).to.be["true"];
+    });
+  });
+  describe('add no object', function () {
+    it('should throw error', function () {
+      (0, _chai.expect)(function () {
+        queue.add([]);
+      }).to["throw"](TypeError);
+      (0, _chai.expect)(function () {
+        queue.add(1);
+      }).to["throw"](TypeError);
+      (0, _chai.expect)(function () {
+        queue.add(true);
+      }).to["throw"](TypeError);
+      (0, _chai.expect)(function () {
+        queue.add();
+      }).to["throw"](TypeError);
+      (0, _chai.expect)(function () {
+        queue.add(Symbol("1"));
+      }).to["throw"](TypeError);
+      (0, _chai.expect)(function () {
+        queue.add(function () {});
+      }).to["throw"](TypeError);
+    });
+  });
+});
+
+},{"../../../source/types/uniquequeue.js":268,"chai":84}],291:[function(require,module,exports){
 "use strict";
 
 var _validate = require("../../../source/types/validate.js");
@@ -54157,6 +55335,24 @@ describe('validate', function () {
       }
     });
   });
+  describe('.validateInteger()', function () {
+    [['test1', false], [undefined, false], [null, false], [function () {}, false], [2, true], [false, false], [true, false], [4.5, false], [{}, false], [[1, 2, 3], false], [Symbol("foo"), false]].forEach(function (data) {
+      var a = data.shift();
+      var b = data.shift();
+
+      if (b === false) {
+        it('.validateInteger(' + _typeof(a) + ') should throw TypeException ' + b, function () {
+          (0, _chai.expect)(function () {
+            return (0, _validate.validateInteger)(a);
+          }).to["throw"](TypeError);
+        });
+      } else {
+        it('.validateInteger(' + _typeof(a) + ') should not throw TypeException ' + b, function () {
+          (0, _chai.expect)((0, _validate.validateInteger)(a)).to.be.undefined;
+        });
+      }
+    });
+  });
   describe('.validateIterable()', function () {
     [['test1', true], [undefined, false], [null, false], [function () {}, false], [2, false], [false, false], [true, false], [4.5, false], [{}, false], [[1, 2, 3], true], [Symbol("foo"), false]].forEach(function (data) {
       var a = data.shift();
@@ -54272,7 +55468,7 @@ describe('validate', function () {
   });
 });
 
-},{"../../../source/types/validate.js":266,"chai":84}],285:[function(require,module,exports){
+},{"../../../source/types/validate.js":269,"chai":84}],292:[function(require,module,exports){
 "use strict";
 
 var _version = require("../../../source/types/version.js");
@@ -54303,7 +55499,7 @@ describe('Version', function () {
   });
 });
 
-},{"../../../source/types/version.js":267,"chai":84}],286:[function(require,module,exports){
+},{"../../../source/types/version.js":270,"chai":84}],293:[function(require,module,exports){
 "use strict";
 
 var _clone = require("../../../source/util/clone.js");
@@ -54417,7 +55613,7 @@ describe('Clone', function () {
   });
 });
 
-},{"../../../source/util/clone.js":268,"chai":84}],287:[function(require,module,exports){
+},{"../../../source/util/clone.js":271,"chai":84}],294:[function(require,module,exports){
 "use strict";
 
 var _chai = require("chai");
@@ -54534,9 +55730,112 @@ describe('Comparator', function () {
   });
 });
 
-},{"../../../source/util/comparator.js":269,"chai":84}],288:[function(require,module,exports){
+},{"../../../source/util/comparator.js":272,"chai":84}],295:[function(require,module,exports){
+"use strict";
+
+var _pathfinder = require("../../../source/util/pathfinder.js");
+
+var _chai = require("chai");
+
+describe('Pathfinder', function () {
+  var pathfinder, object;
+  beforeEach(function () {
+    object = {
+      a: {
+        b: {
+          c: [4, "test1", false, undefined, parseInt("a")],
+          d: undefined,
+          e: false,
+          f: [{
+            g: false,
+            h: 3,
+            i: ["test2"]
+          }],
+          j: {},
+          k: new Map().set('m', {
+            n: 3
+          }),
+          l: new Set().add({
+            n: 4
+          })
+        }
+      }
+    };
+    pathfinder = new _pathfinder.Pathfinder(object);
+  });
+  describe('.setVia(x)', function () {
+    var pf, obj;
+    beforeEach(function () {
+      obj = {};
+      pf = new _pathfinder.Pathfinder(obj);
+    });
+    [['a.b.0.0.c', true, '{"a":{"b":[[{"c":true}]]}}'], ['a.b.0.c', true, '{"a":{"b":[{"c":true}]}}'], ['a.b.3.c', true, '{"a":{"b":[null,null,null,{"c":true}]}}'], ['a.b.c', true, '{"a":{"b":{"c":true}}}']].forEach(function (data) {
+      var a = data.shift();
+      var b = data.shift();
+      var c = data.shift();
+      it('.setVia(' + a + ', ' + b + ') should result in ' + c, function () {
+        pf.setVia(a, b);
+        (0, _chai.expect)(JSON.stringify(obj)).is.equal(c);
+      });
+    });
+  });
+  describe('.setVia()', function () {
+    var a;
+    var b;
+    var c;
+    beforeEach(function () {
+      a = "a.x";
+      b = "true";
+      c = "a.y.d";
+    });
+    it('.setVia(' + a + ', ' + b + ') should return Pathfinder', function () {
+      (0, _chai.expect)(pathfinder.setVia(a, b)).is.instanceOf(_pathfinder.Pathfinder);
+    });
+    it('.setVia(' + a + ', ' + b + ') should change object', function () {
+      pathfinder.setVia(a, b);
+      (0, _chai.expect)(JSON.stringify(object)).is.equal('{"a":{"b":{"c":[4,"test1",false,null,null],"e":false,"f":[{"g":false,"h":3,"i":["test2"]}],"j":{},"k":{},"l":{}},"x":"true"}}');
+    });
+    it('.setVia(' + c + ', ' + b + ') should change object', function () {
+      pathfinder.setVia(c, b);
+      (0, _chai.expect)(JSON.stringify(object)).is.equal('{"a":{"b":{"c":[4,"test1",false,null,null],"e":false,"f":[{"g":false,"h":3,"i":["test2"]}],"j":{},"k":{},"l":{}},"y":{"d":"true"}}}');
+    });
+  });
+  describe('.exists()', function () {
+    [['a.b.x', false], ['a.x', false], ['a.b.q', false], ['a.b.c.1', true], ['a.b.c.0', true], ['a.b.d', true], ['a.b.f.0.g', true], ['a.b.f.0.i.0', true], ['a.b.f.0.i.2', false], ['a.b.e', true]].forEach(function (data) {
+      var a = data.shift();
+      var b = data.shift();
+      it('.exists(' + a + ') should return ' + b + ' ', function () {
+        (0, _chai.expect)(pathfinder.exists(a)).is.equal(b);
+      });
+    });
+  });
+  describe('.getVia()', function () {
+    it('.getVia(a.b.l.0.n) with map should return 4 ', function () {
+      (0, _chai.expect)(pathfinder.getVia('a.b.l.0.n')).is.equal(4);
+    });
+    [['a.b.k.m.n', 3], ['a.b.l.0.n', 4], ['a.x', undefined], ['a.b.q', undefined], ['a.b.c.1', "test1"], ['a.b.c.0', 4], ['a.b.d', undefined], ['a.b.f.0.g', false], ['a.b.f.0.i.0', "test2"], ['a.b.e', false]].forEach(function (data) {
+      var a = data.shift();
+      var b = data.shift();
+      it('.getVia(' + a + ') should return ' + b + ' ', function () {
+        (0, _chai.expect)(pathfinder.getVia(a)).is.equal(b);
+      });
+    });
+    [['a.b.d.e'], ['a.b.d.x'], ['a.b.l.e.n']].forEach(function (data) {
+      var a = data.shift();
+      it('.getVia(' + a + ') should throw Error ', function () {
+        (0, _chai.expect)(function () {
+          return pathfinder.getVia(a);
+        }).to["throw"](Error);
+      });
+    });
+  });
+});
+
+},{"../../../source/util/pathfinder.js":273,"chai":84}],296:[function(require,module,exports){
 "use strict";
 
+require("../cases/types/queue.js");
+
 require("../cases/types/observer.js");
 
 require("../cases/types/observerlist.js");
@@ -54545,6 +55844,8 @@ require("../cases/types/is.js");
 
 require("../cases/types/proxyobserver.js");
 
+require("../cases/types/uniquequeue.js");
+
 require("../cases/types/tokenlist.js");
 
 require("../cases/types/version.js");
@@ -54553,6 +55854,8 @@ require("../cases/types/id.js");
 
 require("../cases/types/validate.js");
 
+require("../cases/types/stack.js");
+
 require("../cases/constraint/isobject.js");
 
 require("../cases/constraint/valid.js");
@@ -54565,6 +55868,8 @@ require("../cases/constraint/andoperator.js");
 
 require("../cases/constraint/isarray.js");
 
+require("../cases/util/pathfinder.js");
+
 require("../cases/util/comparator.js");
 
 require("../cases/util/clone.js");
@@ -54573,6 +55878,6 @@ require("../cases/math/random.js");
 
 require("../cases/monster.js");
 
-},{"../cases/constraint/andoperator.js":270,"../cases/constraint/invalid.js":271,"../cases/constraint/isarray.js":272,"../cases/constraint/isobject.js":273,"../cases/constraint/oroperator.js":274,"../cases/constraint/valid.js":275,"../cases/math/random.js":276,"../cases/monster.js":277,"../cases/types/id.js":278,"../cases/types/is.js":279,"../cases/types/observer.js":280,"../cases/types/observerlist.js":281,"../cases/types/proxyobserver.js":282,"../cases/types/tokenlist.js":283,"../cases/types/validate.js":284,"../cases/types/version.js":285,"../cases/util/clone.js":286,"../cases/util/comparator.js":287}],289:[function(require,module,exports){
+},{"../cases/constraint/andoperator.js":274,"../cases/constraint/invalid.js":275,"../cases/constraint/isarray.js":276,"../cases/constraint/isobject.js":277,"../cases/constraint/oroperator.js":278,"../cases/constraint/valid.js":279,"../cases/math/random.js":280,"../cases/monster.js":281,"../cases/types/id.js":282,"../cases/types/is.js":283,"../cases/types/observer.js":284,"../cases/types/observerlist.js":285,"../cases/types/proxyobserver.js":286,"../cases/types/queue.js":287,"../cases/types/stack.js":288,"../cases/types/tokenlist.js":289,"../cases/types/uniquequeue.js":290,"../cases/types/validate.js":291,"../cases/types/version.js":292,"../cases/util/clone.js":293,"../cases/util/comparator.js":294,"../cases/util/pathfinder.js":295}],297:[function(require,module,exports){
 arguments[4][39][0].apply(exports,arguments)
-},{"dup":39}]},{},[288]);
+},{"dup":39}]},{},[296]);
diff --git a/playground/dev/dist/index.js b/playground/dev/dist/index.js
index 55dbb50fdb8b79459419875ddca2b1cd2b6c9f7d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/playground/dev/dist/index.js
+++ b/playground/dev/dist/index.js
@@ -1,123 +0,0 @@
-(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
-// require('../node_modules/@schukai/monster');
-//
-//
-// const test = {
-//     string: "data",
-//     number: 231321,
-//     object: {
-//         string: "data",
-//         number: 32434
-//     },
-//     array: [
-//         1, 2, 3, 4, 5
-//     ],
-// };
-//
-//
-// // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots
-// const handler = {
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
-//     get: function (target, property, receiver) {
-// console.log('get',target, property, receiver);
-//         const prop = target?.[property];
-//
-//         // return if property not found
-//         if (prop === undefined || typeof prop == 'undefined') {
-//             return undefined;
-//         }
-//
-//         // set value as proxy if object or array
-//         if (typeof prop === 'object' && (Array.isArray(prop) || !(prop instanceof Proxy))) {
-//             target[property] = new Proxy(prop, handler);
-//         }
-//
-//         return target[property];
-//
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver 
-//     set: function (target, property, value, receiver) {
-//         target[property] = value
-//         return true;
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p
-//     deleteProperty: function (target, property) {
-//         if (property in target) {
-//             delete target[property];
-//             return true;
-//         }
-//         return false;
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist
-//     apply: function (target, thisArg, parameters) {
-//         return target.apply(thisArg, parameters);
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget
-//     construct(target, args) {
-//         return new target(...args);
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc
-//     defineProperty: function (target, property, descriptor) {
-//         return Reflect.defineProperty(target, property, descriptor);
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p
-//     has: function (target, property) {
-//         return property in target;
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-isextensible
-//     isExtensible(target) {
-//         return Reflect.isExtensible(target);
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions
-//     preventExtensions(target) {
-//         return Reflect.preventExtensions(target);
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys
-//     ownKeys: function (target) {
-//         return Reflect.ownKeys(target);
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p
-//     getOwnPropertyDescriptor: function (target, property) {
-//         const p = Reflect.getOwnPropertyDescriptor(target, property)
-//         return p ? {
-//             value: p.value,
-//             writable: p.writable,
-//             enumerable: p.enumerable,
-//             configurable: p.configurable
-//         } : undefined;
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof
-//     getPrototypeOf: function (target) {
-//         return Reflect.getPrototypeOf(target);
-//     },
-//
-//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v
-//     setPrototypeOf: function (target, prototype) {
-//         return Reflect.setPrototypeOf(object1, prototype);
-//     }
-//
-// };
-//
-//
-// const proxy = new Proxy(test, handler);
-//
-//
-//
-// console.log(proxy,'proxy');
-// console.log(test,'test');
-"use strict";
-
-},{}]},{},[1])
-//# sourceMappingURL=index.js.map
diff --git a/playground/dev/dist/index.js.map b/playground/dev/dist/index.js.map
deleted file mode 100644
index d1ede5bbd0e7c43ac32a1a31c4c61cbfd92414b1..0000000000000000000000000000000000000000
--- a/playground/dev/dist/index.js.map
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  "version": 3,
-  "sources": [
-    "../../node_modules/browser-pack/_prelude.js",
-    "source/index.js"
-  ],
-  "names": [],
-  "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
-  "file": "generated.js",
-  "sourceRoot": "",
-  "sourcesContent": [
-    "(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()",
-    "// require('../node_modules/@schukai/monster');\n//\n//\n// const test = {\n//     string: \"data\",\n//     number: 231321,\n//     object: {\n//         string: \"data\",\n//         number: 32434\n//     },\n//     array: [\n//         1, 2, 3, 4, 5\n//     ],\n// };\n//\n//\n// // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots\n// const handler = {\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n//     get: function (target, property, receiver) {\n// console.log('get',target, property, receiver);\n//         const prop = target?.[property];\n//\n//         // return if property not found\n//         if (prop === undefined || typeof prop == 'undefined') {\n//             return undefined;\n//         }\n//\n//         // set value as proxy if object or array\n//         if (typeof prop === 'object' && (Array.isArray(prop) || !(prop instanceof Proxy))) {\n//             target[property] = new Proxy(prop, handler);\n//         }\n//\n//         return target[property];\n//\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver \n//     set: function (target, property, value, receiver) {\n//         target[property] = value\n//         return true;\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n//     deleteProperty: function (target, property) {\n//         if (property in target) {\n//             delete target[property];\n//             return true;\n//         }\n//         return false;\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist\n//     apply: function (target, thisArg, parameters) {\n//         return target.apply(thisArg, parameters);\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget\n//     construct(target, args) {\n//         return new target(...args);\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n//     defineProperty: function (target, property, descriptor) {\n//         return Reflect.defineProperty(target, property, descriptor);\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p\n//     has: function (target, property) {\n//         return property in target;\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-isextensible\n//     isExtensible(target) {\n//         return Reflect.isExtensible(target);\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions\n//     preventExtensions(target) {\n//         return Reflect.preventExtensions(target);\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys\n//     ownKeys: function (target) {\n//         return Reflect.ownKeys(target);\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p\n//     getOwnPropertyDescriptor: function (target, property) {\n//         const p = Reflect.getOwnPropertyDescriptor(target, property)\n//         return p ? {\n//             value: p.value,\n//             writable: p.writable,\n//             enumerable: p.enumerable,\n//             configurable: p.configurable\n//         } : undefined;\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof\n//     getPrototypeOf: function (target) {\n//         return Reflect.getPrototypeOf(target);\n//     },\n//\n//     // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n//     setPrototypeOf: function (target, prototype) {\n//         return Reflect.setPrototypeOf(object1, prototype);\n//     }\n//\n// };\n//\n//\n// const proxy = new Proxy(test, handler);\n//\n//\n//\n// console.log(proxy,'proxy');\n// console.log(test,'test');"
-  ]
-}
\ No newline at end of file
diff --git a/playground/dev/index.html b/playground/dev/index.html
index d3d8ac3d538705692c976683dc8a8c54685abd46..53f73bb12a293149750aecab59ae09abf569e6c8 100644
--- a/playground/dev/index.html
+++ b/playground/dev/index.html
@@ -3,15 +3,51 @@
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
-    <!--    <script type="module" src="dist/index.js"></script>-->
+    <script type="module" src="dist/index.js"></script>
+
+    <!--    <script type="module">-->
+    <!--        import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.0/dist/modules/types/tokenlist.js';-->
+    <!--        console.log(new TokenList("myclass row"))-->
+    <!--        console.log(new TokenList("myclass row").add(['a','b','c']).replace('b','4').toString())-->
+    <!--    </script>-->
+
 
     <script type="module">
-        import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.2.0/dist/modules/types/tokenlist.js';
-        console.log(new TokenList("myclass row"))
-        console.log(new TokenList("myclass row").add(['a','b','c']).replace('b','4').toString())
+        import {ProxyObserver} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.2/dist/modules/types/proxyobserver.js';
+        import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.2/dist/modules/types/observer.js';
+        import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.3.2/dist/modules/types/is.js';
+
+        let o = new Observer(function () {
+                if (isObject(this) && this instanceof ProxyObserver) {
+                    // do something (this ist ProxyObserver)
+                    const subject = this.getRealSubject();
+                    console.log(JSON.stringify(subject))
+                }
+            }
+        )
+
+        let realSubject = {
+            a: {
+                b: {
+                    c: true
+                },
+                d: 5
+            }
+        }
+
+        let p = new ProxyObserver(realSubject);
+        p.attachObserver(o);
+        let s = p.getSubject();
+        s.a.b.c = false;
+        //s.a.b.c = true;
+
+        s.a.x = 5;
+        s.a.y = 6;
+        //console.log(p);
+
     </script>
-    
-    
+
+
 </head>
 
 
diff --git a/playground/dev/package-lock.json b/playground/dev/package-lock.json
index e6095e0cf4e2edba58d5f656c85ba76428a72d52..9257390d8807f70d28272fdba084ea2011f9f3c7 100644
--- a/playground/dev/package-lock.json
+++ b/playground/dev/package-lock.json
@@ -8,7 +8,7 @@
       "version": "1.0.0",
       "license": "MIT",
       "dependencies": {
-        "@schukai/monster": "file:../../packages/monster"
+        "@schukai/monster": "^1.3.0"
       },
       "devDependencies": {
         "@babel/cli": "^7.14.3",
@@ -26,17 +26,10 @@
         "watchify": "^4.0.0"
       }
     },
-    "../../packages/monster": {
-      "version": "1.0.0",
-      "license": "MIT",
-      "dependencies": {
-        "mocha": "^9.0.0"
-      }
-    },
     "node_modules/@babel/cli": {
-      "version": "7.14.3",
-      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz",
-      "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.5.tgz",
+      "integrity": "sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==",
       "dev": true,
       "dependencies": {
         "commander": "^4.0.1",
@@ -51,8 +44,11 @@
         "babel": "bin/babel.js",
         "babel-external-helpers": "bin/babel-external-helpers.js"
       },
+      "engines": {
+        "node": ">=6.9.0"
+      },
       "optionalDependencies": {
-        "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents",
+        "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.2",
         "chokidar": "^3.4.0"
       },
       "peerDependencies": {
@@ -60,35 +56,41 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
-      "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
+      "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
       "dev": true,
       "dependencies": {
-        "@babel/highlight": "^7.12.13"
+        "@babel/highlight": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz",
-      "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==",
-      "dev": true
+      "version": "7.14.7",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz",
+      "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
     },
     "node_modules/@babel/core": {
-      "version": "7.14.3",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz",
-      "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.12.13",
-        "@babel/generator": "^7.14.3",
-        "@babel/helper-compilation-targets": "^7.13.16",
-        "@babel/helper-module-transforms": "^7.14.2",
-        "@babel/helpers": "^7.14.0",
-        "@babel/parser": "^7.14.3",
-        "@babel/template": "^7.12.13",
-        "@babel/traverse": "^7.14.2",
-        "@babel/types": "^7.14.2",
+      "version": "7.14.6",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz",
+      "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/generator": "^7.14.5",
+        "@babel/helper-compilation-targets": "^7.14.5",
+        "@babel/helper-module-transforms": "^7.14.5",
+        "@babel/helpers": "^7.14.6",
+        "@babel/parser": "^7.14.6",
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -105,162 +107,219 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.14.3",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz",
-      "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz",
+      "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.14.2",
+        "@babel/types": "^7.14.5",
         "jsesc": "^2.5.1",
         "source-map": "^0.5.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz",
-      "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz",
+      "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.14.4",
-        "@babel/helper-validator-option": "^7.12.17",
+        "@babel/compat-data": "^7.14.5",
+        "@babel/helper-validator-option": "^7.14.5",
         "browserslist": "^4.16.6",
         "semver": "^6.3.0"
       },
+      "engines": {
+        "node": ">=6.9.0"
+      },
       "peerDependencies": {
         "@babel/core": "^7.0.0"
       }
     },
     "node_modules/@babel/helper-function-name": {
-      "version": "7.14.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz",
-      "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz",
+      "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-get-function-arity": "^7.12.13",
-        "@babel/template": "^7.12.13",
-        "@babel/types": "^7.14.2"
+        "@babel/helper-get-function-arity": "^7.14.5",
+        "@babel/template": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-get-function-arity": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
-      "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz",
+      "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.12.13"
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-hoist-variables": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz",
+      "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.13.12",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz",
-      "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==",
+      "version": "7.14.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz",
+      "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.13.12"
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.13.12",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz",
-      "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
+      "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.13.12"
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.14.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz",
-      "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz",
+      "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-imports": "^7.13.12",
-        "@babel/helper-replace-supers": "^7.13.12",
-        "@babel/helper-simple-access": "^7.13.12",
-        "@babel/helper-split-export-declaration": "^7.12.13",
-        "@babel/helper-validator-identifier": "^7.14.0",
-        "@babel/template": "^7.12.13",
-        "@babel/traverse": "^7.14.2",
-        "@babel/types": "^7.14.2"
+        "@babel/helper-module-imports": "^7.14.5",
+        "@babel/helper-replace-supers": "^7.14.5",
+        "@babel/helper-simple-access": "^7.14.5",
+        "@babel/helper-split-export-declaration": "^7.14.5",
+        "@babel/helper-validator-identifier": "^7.14.5",
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
-      "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz",
+      "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.12.13"
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz",
-      "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz",
+      "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.13.12",
-        "@babel/helper-optimise-call-expression": "^7.12.13",
-        "@babel/traverse": "^7.14.2",
-        "@babel/types": "^7.14.4"
+        "@babel/helper-member-expression-to-functions": "^7.14.5",
+        "@babel/helper-optimise-call-expression": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.13.12",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz",
-      "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz",
+      "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.13.12"
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
-      "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz",
+      "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.12.13"
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.14.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
-      "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==",
-      "dev": true
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
+      "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.12.17",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz",
-      "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==",
-      "dev": true
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
+      "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.14.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz",
-      "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==",
+      "version": "7.14.6",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz",
+      "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.12.13",
-        "@babel/traverse": "^7.14.0",
-        "@babel/types": "^7.14.0"
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.14.0",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
-      "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
+      "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.14.0",
+        "@babel/helper-validator-identifier": "^7.14.5",
         "chalk": "^2.0.0",
         "js-tokens": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz",
-      "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==",
+      "version": "7.14.7",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz",
+      "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -270,40 +329,50 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
-      "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz",
+      "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==",
       "dev": true,
       "dependencies": {
-        "@babel/code-frame": "^7.12.13",
-        "@babel/parser": "^7.12.13",
-        "@babel/types": "^7.12.13"
+        "@babel/code-frame": "^7.14.5",
+        "@babel/parser": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.14.2",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz",
-      "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.12.13",
-        "@babel/generator": "^7.14.2",
-        "@babel/helper-function-name": "^7.14.2",
-        "@babel/helper-split-export-declaration": "^7.12.13",
-        "@babel/parser": "^7.14.2",
-        "@babel/types": "^7.14.2",
+      "version": "7.14.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz",
+      "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/generator": "^7.14.5",
+        "@babel/helper-function-name": "^7.14.5",
+        "@babel/helper-hoist-variables": "^7.14.5",
+        "@babel/helper-split-export-declaration": "^7.14.5",
+        "@babel/parser": "^7.14.7",
+        "@babel/types": "^7.14.5",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz",
-      "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz",
+      "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.14.0",
+        "@babel/helper-validator-identifier": "^7.14.5",
         "to-fast-properties": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@eslint/eslintrc": {
@@ -394,16 +463,16 @@
       "dev": true
     },
     "node_modules/@nicolo-ribaudo/chokidar-2": {
-      "version": "2.1.8-no-fsevents",
-      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz",
-      "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==",
+      "version": "2.1.8-no-fsevents.2",
+      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz",
+      "integrity": "sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==",
       "dev": true,
       "optional": true,
       "dependencies": {
         "anymatch": "^2.0.0",
         "async-each": "^1.0.1",
         "braces": "^2.3.2",
-        "glob-parent": "^3.1.0",
+        "glob-parent": "^5.1.2",
         "inherits": "^2.0.3",
         "is-binary-path": "^1.0.0",
         "is-glob": "^4.0.0",
@@ -414,8 +483,9 @@
       }
     },
     "node_modules/@schukai/monster": {
-      "resolved": "../../packages/monster",
-      "link": true
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@schukai/monster/-/monster-1.3.0.tgz",
+      "integrity": "sha512-NRARxN2EJrRTR8sUT6HUNQ/2jMy+l3ppFcTWltY/YsBJ0gTxLT8rLdoXrHi80qKPqAstMSRkmDWiZ32D4k1lYA=="
     },
     "node_modules/acorn": {
       "version": "7.4.1",
@@ -1830,9 +1900,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001235",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz",
-      "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==",
+      "version": "1.0.30001241",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz",
+      "integrity": "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==",
       "dev": true,
       "funding": {
         "type": "opencollective",
@@ -1866,24 +1936,24 @@
       }
     },
     "node_modules/chokidar": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
-      "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+      "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
       "dev": true,
       "dependencies": {
-        "anymatch": "~3.1.1",
+        "anymatch": "~3.1.2",
         "braces": "~3.0.2",
-        "glob-parent": "~5.1.0",
+        "glob-parent": "~5.1.2",
         "is-binary-path": "~2.1.0",
         "is-glob": "~4.0.1",
         "normalize-path": "~3.0.0",
-        "readdirp": "~3.5.0"
+        "readdirp": "~3.6.0"
       },
       "engines": {
         "node": ">= 8.10.0"
       },
       "optionalDependencies": {
-        "fsevents": "~2.3.1"
+        "fsevents": "~2.3.2"
       }
     },
     "node_modules/chokidar/node_modules/anymatch": {
@@ -1932,18 +2002,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/chokidar/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/chokidar/node_modules/is-binary-path": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -1966,9 +2024,9 @@
       }
     },
     "node_modules/chokidar/node_modules/readdirp": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
-      "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
       "dev": true,
       "dependencies": {
         "picomatch": "^2.2.1"
@@ -2195,9 +2253,9 @@
       "dev": true
     },
     "node_modules/convert-source-map": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
-      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+      "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
       "dev": true,
       "dependencies": {
         "safe-buffer": "~5.1.1"
@@ -2554,9 +2612,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.3.749",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz",
-      "integrity": "sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==",
+      "version": "1.3.763",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.763.tgz",
+      "integrity": "sha512-UyvEPae0wvzsyNJhVfGeFSOlUkHEze8xSIiExO5tZQ8QTr7obFiJWGk3U4e7afFOJMQJDszqU/3Pk5jtKiaSEg==",
       "dev": true
     },
     "node_modules/elliptic": {
@@ -2858,9 +2916,9 @@
       }
     },
     "node_modules/eslint": {
-      "version": "7.28.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz",
-      "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==",
+      "version": "7.29.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz",
+      "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "7.12.11",
@@ -3029,18 +3087,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/eslint/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/eslint/node_modules/globals": {
       "version": "13.9.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
@@ -3664,27 +3710,15 @@
       }
     },
     "node_modules/glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      }
-    },
-    "node_modules/glob-parent/node_modules/is-glob": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-      "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
-      "optional": true,
       "dependencies": {
-        "is-extglob": "^2.1.0"
+        "is-glob": "^4.0.1"
       },
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">= 6"
       }
     },
     "node_modules/globals": {
@@ -4667,15 +4701,15 @@
       }
     },
     "node_modules/marked": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.7.tgz",
-      "integrity": "sha512-BJXxkuIfJchcXOJWTT2DOL+yFWifFv2yGYOUzvXg8Qz610QKw+sHCvTMYwA+qWGhlA2uivBezChZ/pBy1tWdkQ==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz",
+      "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==",
       "dev": true,
       "bin": {
         "marked": "bin/marked"
       },
       "engines": {
-        "node": ">= 8.16.2"
+        "node": ">= 10"
       }
     },
     "node_modules/md5.js": {
@@ -5411,13 +5445,6 @@
       "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
       "dev": true
     },
-    "node_modules/path-dirname": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
-      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-      "dev": true,
-      "optional": true
-    },
     "node_modules/path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -5579,6 +5606,7 @@
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
       "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+      "deprecated": "The",
       "dev": true,
       "engines": {
         "node": ">=0.4.x"
@@ -5747,9 +5775,9 @@
       }
     },
     "node_modules/regexpp": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
-      "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
       "dev": true,
       "engines": {
         "node": ">=8"
@@ -6926,9 +6954,9 @@
       "dev": true
     },
     "node_modules/uglify-js": {
-      "version": "3.13.9",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.9.tgz",
-      "integrity": "sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g==",
+      "version": "3.13.10",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz",
+      "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==",
       "dev": true,
       "bin": {
         "uglifyjs": "bin/uglifyjs"
@@ -7404,12 +7432,12 @@
   },
   "dependencies": {
     "@babel/cli": {
-      "version": "7.14.3",
-      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz",
-      "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.5.tgz",
+      "integrity": "sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==",
       "dev": true,
       "requires": {
-        "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents",
+        "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.2",
         "chokidar": "^3.4.0",
         "commander": "^4.0.1",
         "convert-source-map": "^1.1.0",
@@ -7421,35 +7449,35 @@
       }
     },
     "@babel/code-frame": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
-      "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
+      "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
       "dev": true,
       "requires": {
-        "@babel/highlight": "^7.12.13"
+        "@babel/highlight": "^7.14.5"
       }
     },
     "@babel/compat-data": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz",
-      "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==",
+      "version": "7.14.7",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz",
+      "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==",
       "dev": true
     },
     "@babel/core": {
-      "version": "7.14.3",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz",
-      "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.12.13",
-        "@babel/generator": "^7.14.3",
-        "@babel/helper-compilation-targets": "^7.13.16",
-        "@babel/helper-module-transforms": "^7.14.2",
-        "@babel/helpers": "^7.14.0",
-        "@babel/parser": "^7.14.3",
-        "@babel/template": "^7.12.13",
-        "@babel/traverse": "^7.14.2",
-        "@babel/types": "^7.14.2",
+      "version": "7.14.6",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz",
+      "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/generator": "^7.14.5",
+        "@babel/helper-compilation-targets": "^7.14.5",
+        "@babel/helper-module-transforms": "^7.14.5",
+        "@babel/helpers": "^7.14.6",
+        "@babel/parser": "^7.14.6",
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -7459,195 +7487,205 @@
       }
     },
     "@babel/generator": {
-      "version": "7.14.3",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz",
-      "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz",
+      "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.14.2",
+        "@babel/types": "^7.14.5",
         "jsesc": "^2.5.1",
         "source-map": "^0.5.0"
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz",
-      "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz",
+      "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.14.4",
-        "@babel/helper-validator-option": "^7.12.17",
+        "@babel/compat-data": "^7.14.5",
+        "@babel/helper-validator-option": "^7.14.5",
         "browserslist": "^4.16.6",
         "semver": "^6.3.0"
       }
     },
     "@babel/helper-function-name": {
-      "version": "7.14.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz",
-      "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz",
+      "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-get-function-arity": "^7.12.13",
-        "@babel/template": "^7.12.13",
-        "@babel/types": "^7.14.2"
+        "@babel/helper-get-function-arity": "^7.14.5",
+        "@babel/template": "^7.14.5",
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/helper-get-function-arity": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
-      "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz",
+      "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-hoist-variables": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz",
+      "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.12.13"
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/helper-member-expression-to-functions": {
-      "version": "7.13.12",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz",
-      "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==",
+      "version": "7.14.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz",
+      "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.13.12"
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/helper-module-imports": {
-      "version": "7.13.12",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz",
-      "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
+      "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.13.12"
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.14.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz",
-      "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz",
+      "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "^7.13.12",
-        "@babel/helper-replace-supers": "^7.13.12",
-        "@babel/helper-simple-access": "^7.13.12",
-        "@babel/helper-split-export-declaration": "^7.12.13",
-        "@babel/helper-validator-identifier": "^7.14.0",
-        "@babel/template": "^7.12.13",
-        "@babel/traverse": "^7.14.2",
-        "@babel/types": "^7.14.2"
+        "@babel/helper-module-imports": "^7.14.5",
+        "@babel/helper-replace-supers": "^7.14.5",
+        "@babel/helper-simple-access": "^7.14.5",
+        "@babel/helper-split-export-declaration": "^7.14.5",
+        "@babel/helper-validator-identifier": "^7.14.5",
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/helper-optimise-call-expression": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
-      "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz",
+      "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.12.13"
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz",
-      "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz",
+      "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==",
       "dev": true,
       "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.13.12",
-        "@babel/helper-optimise-call-expression": "^7.12.13",
-        "@babel/traverse": "^7.14.2",
-        "@babel/types": "^7.14.4"
+        "@babel/helper-member-expression-to-functions": "^7.14.5",
+        "@babel/helper-optimise-call-expression": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.13.12",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz",
-      "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz",
+      "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.13.12"
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/helper-split-export-declaration": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
-      "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz",
+      "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.12.13"
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.14.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
-      "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
+      "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
       "dev": true
     },
     "@babel/helper-validator-option": {
-      "version": "7.12.17",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz",
-      "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
+      "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
       "dev": true
     },
     "@babel/helpers": {
-      "version": "7.14.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz",
-      "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==",
+      "version": "7.14.6",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz",
+      "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.12.13",
-        "@babel/traverse": "^7.14.0",
-        "@babel/types": "^7.14.0"
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/highlight": {
-      "version": "7.14.0",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
-      "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
+      "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
       "dev": true,
       "requires": {
-        "@babel/helper-validator-identifier": "^7.14.0",
+        "@babel/helper-validator-identifier": "^7.14.5",
         "chalk": "^2.0.0",
         "js-tokens": "^4.0.0"
       }
     },
     "@babel/parser": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz",
-      "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==",
+      "version": "7.14.7",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz",
+      "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==",
       "dev": true
     },
     "@babel/template": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
-      "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz",
+      "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "^7.12.13",
-        "@babel/parser": "^7.12.13",
-        "@babel/types": "^7.12.13"
+        "@babel/code-frame": "^7.14.5",
+        "@babel/parser": "^7.14.5",
+        "@babel/types": "^7.14.5"
       }
     },
     "@babel/traverse": {
-      "version": "7.14.2",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz",
-      "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.12.13",
-        "@babel/generator": "^7.14.2",
-        "@babel/helper-function-name": "^7.14.2",
-        "@babel/helper-split-export-declaration": "^7.12.13",
-        "@babel/parser": "^7.14.2",
-        "@babel/types": "^7.14.2",
+      "version": "7.14.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz",
+      "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/generator": "^7.14.5",
+        "@babel/helper-function-name": "^7.14.5",
+        "@babel/helper-hoist-variables": "^7.14.5",
+        "@babel/helper-split-export-declaration": "^7.14.5",
+        "@babel/parser": "^7.14.7",
+        "@babel/types": "^7.14.5",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
       }
     },
     "@babel/types": {
-      "version": "7.14.4",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz",
-      "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==",
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz",
+      "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==",
       "dev": true,
       "requires": {
-        "@babel/helper-validator-identifier": "^7.14.0",
+        "@babel/helper-validator-identifier": "^7.14.5",
         "to-fast-properties": "^2.0.0"
       }
     },
@@ -7733,16 +7771,16 @@
       }
     },
     "@nicolo-ribaudo/chokidar-2": {
-      "version": "2.1.8-no-fsevents",
-      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz",
-      "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==",
+      "version": "2.1.8-no-fsevents.2",
+      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz",
+      "integrity": "sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==",
       "dev": true,
       "optional": true,
       "requires": {
         "anymatch": "^2.0.0",
         "async-each": "^1.0.1",
         "braces": "^2.3.2",
-        "glob-parent": "^3.1.0",
+        "glob-parent": "^5.1.2",
         "inherits": "^2.0.3",
         "is-binary-path": "^1.0.0",
         "is-glob": "^4.0.0",
@@ -7753,10 +7791,9 @@
       }
     },
     "@schukai/monster": {
-      "version": "file:../../packages/monster",
-      "requires": {
-        "mocha": "^9.0.0"
-      }
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@schukai/monster/-/monster-1.3.0.tgz",
+      "integrity": "sha512-NRARxN2EJrRTR8sUT6HUNQ/2jMy+l3ppFcTWltY/YsBJ0gTxLT8rLdoXrHi80qKPqAstMSRkmDWiZ32D4k1lYA=="
     },
     "acorn": {
       "version": "7.4.1",
@@ -9028,9 +9065,9 @@
       "dev": true
     },
     "caniuse-lite": {
-      "version": "1.0.30001235",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz",
-      "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==",
+      "version": "1.0.30001241",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz",
+      "integrity": "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==",
       "dev": true
     },
     "catharsis": {
@@ -9054,19 +9091,19 @@
       }
     },
     "chokidar": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
-      "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+      "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
       "dev": true,
       "requires": {
-        "anymatch": "~3.1.1",
+        "anymatch": "~3.1.2",
         "braces": "~3.0.2",
-        "fsevents": "~2.3.1",
-        "glob-parent": "~5.1.0",
+        "fsevents": "~2.3.2",
+        "glob-parent": "~5.1.2",
         "is-binary-path": "~2.1.0",
         "is-glob": "~4.0.1",
         "normalize-path": "~3.0.0",
-        "readdirp": "~3.5.0"
+        "readdirp": "~3.6.0"
       },
       "dependencies": {
         "anymatch": {
@@ -9103,15 +9140,6 @@
             "to-regex-range": "^5.0.1"
           }
         },
-        "glob-parent": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-          "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-          "dev": true,
-          "requires": {
-            "is-glob": "^4.0.1"
-          }
-        },
         "is-binary-path": {
           "version": "2.1.0",
           "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -9128,9 +9156,9 @@
           "dev": true
         },
         "readdirp": {
-          "version": "3.5.0",
-          "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
-          "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+          "version": "3.6.0",
+          "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+          "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
           "dev": true,
           "requires": {
             "picomatch": "^2.2.1"
@@ -9332,9 +9360,9 @@
       "dev": true
     },
     "convert-source-map": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
-      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+      "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
       "dev": true,
       "requires": {
         "safe-buffer": "~5.1.1"
@@ -9646,9 +9674,9 @@
       }
     },
     "electron-to-chromium": {
-      "version": "1.3.749",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz",
-      "integrity": "sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==",
+      "version": "1.3.763",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.763.tgz",
+      "integrity": "sha512-UyvEPae0wvzsyNJhVfGeFSOlUkHEze8xSIiExO5tZQ8QTr7obFiJWGk3U4e7afFOJMQJDszqU/3Pk5jtKiaSEg==",
       "dev": true
     },
     "elliptic": {
@@ -9908,9 +9936,9 @@
       }
     },
     "eslint": {
-      "version": "7.28.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz",
-      "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==",
+      "version": "7.29.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz",
+      "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "7.12.11",
@@ -10003,15 +10031,6 @@
           "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
           "dev": true
         },
-        "glob-parent": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-          "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-          "dev": true,
-          "requires": {
-            "is-glob": "^4.0.1"
-          }
-        },
         "globals": {
           "version": "13.9.0",
           "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
@@ -10564,26 +10583,12 @@
       }
     },
     "glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
-      "optional": true,
       "requires": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      },
-      "dependencies": {
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
+        "is-glob": "^4.0.1"
       }
     },
     "globals": {
@@ -11329,9 +11334,9 @@
       "requires": {}
     },
     "marked": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.7.tgz",
-      "integrity": "sha512-BJXxkuIfJchcXOJWTT2DOL+yFWifFv2yGYOUzvXg8Qz610QKw+sHCvTMYwA+qWGhlA2uivBezChZ/pBy1tWdkQ==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz",
+      "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==",
       "dev": true
     },
     "md5.js": {
@@ -11951,13 +11956,6 @@
       "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
       "dev": true
     },
-    "path-dirname": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
-      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-      "dev": true,
-      "optional": true
-    },
     "path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -12230,9 +12228,9 @@
       }
     },
     "regexpp": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
-      "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
       "dev": true
     },
     "regexpu-core": {
@@ -13193,9 +13191,9 @@
       "dev": true
     },
     "uglify-js": {
-      "version": "3.13.9",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.9.tgz",
-      "integrity": "sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g==",
+      "version": "3.13.10",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz",
+      "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==",
       "dev": true
     },
     "uglifycss": {
diff --git a/playground/dev/package.json b/playground/dev/package.json
index 53acf2aee9bd24f4418913dc6c3cb1de6de7fbae..c1a9575478964cd523cde5e036c921afe5ae01f2 100644
--- a/playground/dev/package.json
+++ b/playground/dev/package.json
@@ -3,14 +3,15 @@
   "version": "1.0.0",
   "description": "",
   "scripts": {
-    "build": "mkdir -p dist ; NODE_PATH=./node_modules browserify source/index.js -t [ babelify --presets [ @babel/preset-env ] ] --debug | exorcist dist/index.js.map > dist/index.js"
+    "build": "mkdir -p dist ; NODE_PATH=./node_modules browserify source/index.js -t [ babelify --presets [ @babel/preset-env ] ] > dist/index.js",
+
+    "build3": "mkdir -p dist ; NODE_PATH=./node_modules browserify source/index.js -t [ babelify --presets [ @babel/preset-modules ] ] --debug | exorcist dist/index.js.map > dist/index.js",
+    "build2": "mkdir -p dist ; NODE_PATH=./node_modules browserify source/index.js -t [ babelify --presets [ @babel/preset-env ] ] --debug | exorcist dist/index.js.map > dist/index.js"
   },
+  "type": "module",  
   "keywords": [],
   "author": "",
   "license": "MIT",
-  "dependencies": {
-    "@schukai/monster": "file:../../packages/monster"
-  },
   "devDependencies": {
     "@babel/cli": "^7.14.3",
     "@babel/core": "^7.14.3",
@@ -25,5 +26,8 @@
     "uglify-js": "^3.13.9",
     "uglifycss": "^0.0.29",
     "watchify": "^4.0.0"
+  },
+  "dependencies": {
+    "@schukai/monster": "^1.3.0"
   }
 }
diff --git a/playground/dev/source/index.js b/playground/dev/source/index.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d59289ceb422cdebae360289833ee4a7e1d4cfe3 100644
--- a/playground/dev/source/index.js
+++ b/playground/dev/source/index.js
@@ -0,0 +1,27 @@
+
+
+// //import {Observer} from '@schukai/monster/dist/modules/types/proxyobserver.js';
+// import {Observer} from '@schukai/monster/source/types/proxyobserver.js';
+//
+//
+// const o = new Observer(function () {
+//     if (isObject(this) && this instanceof ProxyObserver) {
+//         // do something (this ist ProxyObserver)
+//         const subject = this.getSubject();
+//         console.log(subject);
+//     }
+// });
+//
+// let realSubject = {
+//     a: {
+//         b: {
+//             c: true
+//         },
+//         d: 5
+//     }
+// };
+//
+//
+// const p = new ProxyObserver(realSubject);
+// const s = p.getSubject();
+// s.a.b.c = false;