<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->
<obr>
    <require extend="false"
             filter="(service=org.osgi.service.event.EventHandler)"
             multiple="true"
             name="service"
             optional="true">
        Import Service org.osgi.service.event.EventHandler
    </require>
    <require extend="false"
             filter="(service=org.osgi.service.log.LogService)"
             multiple="false"
             name="service"
             optional="true">
        Import Service org.osgi.service.log.LogService
    </require>
    <require extend="false"
             filter="(service=org.osgi.service.log.LogReaderService)"
             multiple="false"
             name="service"
             optional="true">
        Import Service org.osgi.service.log.LogReaderService
    </require>
</obr>