implement "CostManager functionalty" main goal are make the hook for couple of methods in factory and produced instance to make additional management mechanism **Requirements:** _factory can:_ - setup initial CostManager address - fill renounceOverrideCostmanager address's list to prevent changing or override CoastManager in instances - call overrideCostManager(instance, newCostManager) and override cost manager address in certain instance _in Instance:_ - shoud be method overrideCostManager for factory owner(or instance deployer if instance was deployed manually) method should execute only if address instance not in renounceOverrideCostmanager list - need to organize common method or by operation byte in first params or make bytes calldata and parse it in costmanager!!! Summary: to change costmanager address can be changed only by owner factory **suggested methods for injecting Costmanager external calls:** <table> <tr><th><b>method to inject</b></th><th><b>params</b></th></tr> <tr><td><pre> CommunityFactory:produce( address hook, string memory name, string memory symbol ) </pre></td><td> <pre> address hook, string memory name, string memory symbol </pre> </td></tr> <tr><td><pre>CommunityContract::withdrawRemainingBalance</pre></td><td> <pre> uin256 balance </pre> </td></tr> <tr><td><pre> CommunityContract::grantRoles( address[] memory accounts, uint8[] memory rolesIndexes ) </pre></td><td> <pre> address[] memory accounts, uint8[] memory rolesIndexes </pre> </td></tr> <tr><td><pre> CommunityContract::revokeRoles( address[] memory accounts, uint8[] memory rolesIndexes ) </pre></td><td> <pre> address[] memory accounts, uint8[] memory rolesIndexes </pre> </td></tr> <tr><td><pre> CommunityContract::createRole( string memory role ) </pre></td><td> <pre> string memory role </pre> </td></tr> <tr><td><pre> CommunityContract::manageRole( uint8 byRole, uint8 ofRole, bool canGrantRole, bool canRevokeRole, uint8 requireRole, uint256 maxAddresses, uint64 duration ) </pre></td><td> <pre> uint8 byRole, uint8 ofRole, bool canGrantRole, bool canRevokeRole, uint8 requireRole, uint256 maxAddresses, uint64 duration </pre> </td></tr> <tr><td><pre> CommunityContract::invitePrepare( bytes memory sSig, bytes memory rSig ) </pre></td><td> <pre> no params </pre> </td></tr> <tr><td><pre> CommunityContract::inviteAccept( string memory p, bytes memory sSig, string memory rp, bytes memory rSig ) </pre></td><td> <pre> address inviter, address invited, uint8[] roles </pre> </td></tr> <tr><td><pre> CommunityContract::setTrustedForwarder( address forwarder ) </pre></td><td> <pre> address forwarder </pre> </td></tr> <tr><td><pre> CommunityContract::setRoleURI( uint8 roleIndex, string memory roleURI ) </pre></td><td> <pre> uint8 roleIndex, string memory roleURI </pre> </td></tr> <tr><td><pre> CommunityContract::setExtraURI( uint8 roleIndex, string memory extraURI ) </pre></td><td> <pre> uint8 roleIndex, string memory extraURI </pre> </td></tr> </table> For all can be called costmanager hook