function setFreezing(address addr, uint end_stamp, uint num_lemos, uint8 freezing_type) auth stoppable public {
        require(block.timestamp < end_stamp);
        
        require(num_lemos < c_totalSupply);
        clearExpiredFreezing(addr);
        uint valid_balance = validBalanceOf(addr);
        require(valid_balance >= num_lemos);

        FreezingNode memory node = FreezingNode(end_stamp, num_lemos, freezing_type_enum(freezing_type));
        c_freezing_list[addr].push(node);

        SetFreezingEvent(addr, end_stamp, num_lemos, freezing_type_enum(freezing_type));
    }