<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-yuyou-conditional-filtering-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Conditional Range Filters">Conditional Range Filters for Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-yuyou-conditional-filtering-00"/>
    <author initials="Y." surname="You" fullname="Yu You">
      <organization>Nokia</organization>
      <address>
        <email>yu.you@nokia.com</email>
      </address>
    </author>
    <author initials="S." surname="Gül" fullname="Serhan Gül">
      <organization>Nokia</organization>
      <address>
        <email>serhan.guel@nokia.com</email>
      </address>
    </author>
    <author initials="A." surname="Begen" fullname="Ali Cengiz Begen">
      <organization>Networked Media</organization>
      <address>
        <email>ali.begen@networked.media</email>
      </address>
    </author>
    <author initials="A." surname="Sarker" fullname="ANM Zaheduzzaman Sarker">
      <organization>Nokia</organization>
      <address>
        <email>zaheduzzaman.sarker@nokia.com</email>
      </address>
    </author>
    <date year="2026" month="August" day="17"/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <keyword>range filter</keyword>
    <keyword>moq</keyword>
    <keyword>moqt</keyword>
    <abstract>
      <?line 56?>
<t>In Media over QUIC Transport (MOQT), subscribers can use Range Filters
to select specific subgroups, objects, or priorities within a subscribed
track. However, these subscription filters are static once established
and can only be modified through explicit subscriber control signaling.
This document proposes an extension to the Range Filter design that
binds conditional evaluation logic directly to specific Range Filter
sets. By introducing dynamic conditions to Range Filter configurations,
a relay can autonomously adapt the intra-track forwarding behavior based
on real-time network conditions, avoiding the round-trip delay of
explicit subscriber update signaling.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://yuyou.github.io/conditional_filtering/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-yuyou-conditional-filtering/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/yuyou/conditional_filtering"/>.</t>
    </note>
  </front>
  <middle>
    <?line 68?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media over QUIC Transport (MOQT) supports subscription filters in
SUBSCRIBE requests to indicate which objects within a track are to be
forwarded. Range Filters allow subscribers to restrict delivery based on
subgroup identifiers, object identifiers, publisher priorities, or
specific metadata properties.</t>
      <t>However, current MOQT subscription filters are static once established.
If a subscriber wishes to change the adaptation policy (e.g., dropping
an enhancement subgroup due to network congestion), it requires a
closed-loop procedure: detecting the throughput drop, computing a new
filter, signaling via REQUEST_UPDATE, and waiting for the relay to apply
it. This reaction delay introduces a risk of temporary overdelivery and
queue build-up.</t>
      <t>This document extends Range Filters with conditional logic that allows
relays to evaluate pre-authorized conditions and determine which SetIDs
remain active at runtime. It defines a new RANGE_FILTER_CONDITION
parameter that explicitly binds a specific Range Filter SetID to a
condition. If the condition for a particular SetID is met, the relay
keeps that SetID active in the Range Filter expression; otherwise, that
SetID is ignored. This enables autonomous, relay-side intra-track
adaptation without requiring further signaling from the subscriber.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="the-inline-rangefiltercondition-parameter">
      <name>The Inline RANGE_FILTER_CONDITION Parameter</name>
      <t>The inline design for conditional filtering embeds all necessary
algorithm configuration fields directly within a new message parameter,
making it a self-contained solution for intra-track adaptation.</t>
      <section anchor="relationship-to-existing-setid">
        <name>Relationship to Existing SetID</name>
        <t>Range Filters in MOQT (Section 5.1.3 of <xref target="I-D.ietf-moq-transport"/>)
already define a SetID field (8 bits) within each filter parameter
(SUBGROUP_FILTER, OBJECTID_FILTER, PRIORITY_FILTER,
OBJECT_PROPERTY_FILTER, TRACK_PROPERTY_FILTER). Filter parameters
sharing the same SetID are combined with logical AND, and different
SetID groups are combined with logical OR.</t>
        <t>This document does not redefine SetID. RANGE_FILTER_CONDITION references
an existing SetID value to bind conditional evaluation logic to a
specific filter group that was already declared in the same message.</t>
      </section>
      <section anchor="parameter-definition">
        <name>Parameter Definition</name>
        <t>To enable conditional functionality, this document introduces a new
Message Parameter: RANGE_FILTER_CONDITION. This parameter applies
conditional activation rules to an intra-track filter set identified by
a SetID.</t>
        <t>The parameter <bcp14>MAY</bcp14> appear in SUBSCRIBE, PUBLISH_OK, or REQUEST_UPDATE
messages. Multiple instances <bcp14>MAY</bcp14> be present, each referencing a
different SetID. The same SetID <bcp14>MUST NOT</bcp14> appear in more than one
RANGE_FILTER_CONDITION within the same message.</t>
        <t>The RANGE_FILTER_CONDITION parameter has the following wire format:</t>
        <artwork><![CDATA[
RANGE_FILTER_CONDITION {
  Set ID (8),
  Algorithm ID (vi64),
  Throughput threshold (vi64),
  Set throughput fraction (vi64),
  Activate switching (vi64),
  Set rank (8)
}
]]></artwork>
        <t>The fields are defined as follows:</t>
        <dl>
          <dt>Set ID (8 bits):</dt>
          <dd>
            <t>Identifies the Range Filter set being made conditional. This value
<bcp14>MUST</bcp14> match a SetID used in at least one Range Filter parameter in the
same message. The field is 8 bits, consistent with the SetID encoding
defined in MOQT Range Filters.</t>
          </dd>
          <dt>Algorithm ID (vi64):</dt>
          <dd>
            <t>Identifies the conditional evaluation algorithm to be used. This
document defines Algorithm 0. Other algorithms <bcp14>MAY</bcp14> be defined in
future specifications.</t>
          </dd>
          <dt>Throughput threshold (vi64):</dt>
          <dd>
            <t>Algorithm 0 specific. The minimum estimated downstream throughput in
kbps required for the relay to keep this SetID active in the Range
Filter OR-combination. When bandwidth is constrained, the relay
determines which conditional SetIDs remain active according to the
bandwidth allocation algorithm (<xref target="bandwidth-allocation"/>).</t>
          </dd>
          <dt>Set throughput fraction (vi64):</dt>
          <dd>
            <t>Algorithm 0 specific. Relative weight for bandwidth allocation,
expressed as an integer 1 &lt;= N &lt;= 10. Each conditional SetID receives
bandwidth proportional to its fraction: <tt>target = B_total x fraction /
sum_F</tt>. Fractions are relative weights, not absolute percentages. For
example, fractions of 6, 4, 3 (sum_F = 13) allocate approximately 46%,
31%, and 23% respectively. This allows conditional SetIDs to be added
or removed without requiring other conditional SetIDs to update their
fractions.</t>
          </dd>
          <dt>Activate switching (vi64):</dt>
          <dd>
            <t>Controls whether conditional evaluation is active for this SetID.
When set to 0, the relay ignores the conditional state for this SetID
and includes it in the base MOQT OR-combination exactly as ordinary
Range Filters do. When set to a non-zero value N, the relay activates
condition-based admission for conditionally bound SetIDs as soon as at
least N RANGE_FILTER_CONDITION entries for this subscription have been
received. Activation takes effect at the next Group boundary.</t>
          </dd>
          <dt>Set rank (8 bits):</dt>
          <dd>
            <t>Degradation priority when estimated bandwidth is constrained,
expressed as an 8-bit unsigned integer in the range 1-255. The default
value is 1. Values of 0 and outside this range <bcp14>MUST</bcp14> result in a
REQUEST_ERROR with error code INVALID_FILTER. Lower values indicate
higher priority (protected from degradation). When bandwidth is
sufficient, all conditional SetIDs remain active. When bandwidth is
constrained, lower-priority conditional SetIDs (higher numeric rank)
are deactivated first, while higher-priority conditional SetIDs
maintain their target allocation.</t>
          </dd>
        </dl>
      </section>
      <section anchor="conditional-set-assignment-design">
        <name>Alternative 1: Reference Design</name>
        <t>The inline parameter design described in <xref target="parameter-definition"/> embeds
all algorithm fields directly in RANGE_FILTER_CONDITION. This produces a
self-contained parameter but duplicates the algorithm parameter
structure that Sender-Side Track Switching (SSTS) <xref target="SSTS"/> defines in
its SWITCHING-SET-ASSIGNMENT parameter, which has an identical set of
fields (Algorithm ID, Throughput threshold, Set throughput fraction,
Activate switching, Set rank).</t>
        <t>A more composable design separates the algorithm configuration from the
filter binding. Under this design, a single common parameter
"CONDITIONAL-SET-ASSIGNMENT" carries the algorithm fields and is
shared by both intra-track conditional filtering and inter-track SSTS
switching. RANGE_FILTER_CONDITION is then reduced to a binding that maps
a Range Filter SetID to a Conditional set ID:</t>
        <artwork><![CDATA[
CONDITIONAL-SET-ASSIGNMENT {
  Conditional set ID (vi64),
  Algorithm ID (vi64),
  Throughput threshold (vi64),
  Set throughput fraction (vi64),
  Activate switching (vi64),
  Set rank (8)
}

RANGE_FILTER_CONDITION {
  Set ID (8),
  Conditional set ID (vi64)
}
]]></artwork>
        <t>CONDITIONAL-SET-ASSIGNMENT replaces the SWITCHING-SET-ASSIGNMENT
parameter currently defined in SSTS. The fields and semantics are
identical; only the name and scope change. For SSTS use, the subscriber
assigns a subscription to a conditional set by including
CONDITIONAL-SET-ASSIGNMENT in SUBSCRIBE or PUBLISH_OK, exactly as it
would have used SWITCHING-SET-ASSIGNMENT. For intra-track conditional
filtering, the subscriber additionally includes one
RANGE_FILTER_CONDITION per SetID to bind each Range Filter group to a
Conditional set ID.</t>
        <t>This design has the following properties:</t>
        <ul spacing="normal">
          <li>
            <t>Algorithm parameters are defined once in CONDITIONAL-SET-ASSIGNMENT
and shared across use cases. Multiple RANGE_FILTER_CONDITION entries
can reference the same Conditional set ID if they share algorithm
configuration, or different IDs if they require different thresholds
or ranks.</t>
          </li>
          <li>
            <t>RANGE_FILTER_CONDITION becomes a lightweight binding with a fixed,
minimal wire footprint (one 8-bit SetID and one varint).</t>
          </li>
          <li>
            <t>A single relay implementation handles both conditional intra-track
filtering and inter-track SSTS switching through the same
CONDITIONAL-SET-ASSIGNMENT evaluation logic.</t>
          </li>
          <li>
            <t>Future algorithms defined for SSTS are automatically available for
conditional intra-track filtering without any changes to this
specification.</t>
          </li>
        </ul>
        <t>The trade-off is that the subscriber must include two parameter types
"CONDITIONAL-SET-ASSIGNMENT" and "RANGE_FILTER_CONDITION", rather
than one, and the relay must correlate them. This is a minor
implementation cost relative to the elimination of duplicated parameter
definitions across two specifications.</t>
      </section>
      <section anchor="conditional-filter-set-design">
        <name>Alternative 2: Self-Contained Design</name>
        <t>The reference-based design maps existing SetIDs to dynamic conditions. A
second alternative is a self-contained design that introduces a new
parameter, CONDITIONAL_FILTER_SET, which explicitly carries a list of
alternative filter configurations for a single subscription.</t>
        <t>In this design, the relay interprets the provided configurations as
mutually exclusive alternatives. The relay monitors the specified metric
and autonomously selects and applies exactly one configuration from the
set whose condition is satisfied.</t>
        <section anchor="parameter-definition-1">
          <name>Parameter Definition</name>
          <t>The CONDITIONAL_FILTER_SET parameter (Type 0x44) has the following
structure:</t>
          <artwork><![CDATA[
CONDITIONAL_FILTER_SET {
  Parameter Type (vi64) = 0x44,
  Set ID (vi64),
  Switching Metric (vi64),
  Switching Offset (uint8),
  Configuration Count (vi64),
  Configuration (..) ...,
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Set ID: Uniquely identifies the conditional filter set within the
session scope, allowing it to be updated or removed via
REQUEST_UPDATE.</t>
            </li>
            <li>
              <t>Switching Metric: Identifies the relay-observable metric used for
selection, such as throughput (kbps), RTT (ms), or ECN marking rate.</t>
            </li>
            <li>
              <t>Switching Offset: Specifies the switching point. A value of 0
indicates an immediate "hard switch." A non-zero value indicates a
"soft switch," where the new configuration is applied starting from a
future Subgroup ID (Current ID + Offset).</t>
            </li>
            <li>
              <t>Configuration Count: The number of alternative filter configurations
included in this set.</t>
            </li>
          </ul>
          <t>Each Configuration entry within the set defines a specific threshold and
the filters to apply when active:</t>
          <artwork><![CDATA[
Configuration {
  Config ID (vi64),
  Metric Threshold (vi64),
  Filter Parameter Count (vi64),
  Filter Parameters (..) ...,
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Config ID: An identifier for the specific configuration within the
set.</t>
            </li>
            <li>
              <t>Metric Threshold: The condition value for the selected Switching
Metric. For throughput, the relay selects the configuration with the
highest threshold that does not exceed the currently observed metric.</t>
            </li>
            <li>
              <t>Filter Parameters: A list of standard MOQT filter parameters (e.g.,
SUBGROUP_FILTER, OBJECTID_FILTER) to be applied when this
configuration is active.</t>
            </li>
          </ul>
          <t>Unlike the OR-preserving design, this model uses set-replacement logic.
If RTT is the metric and three configurations are defined with
thresholds of 80ms, 150ms, and 250ms, the relay selects only the one
that matches the current RTT range, stripping all other data</t>
        </section>
      </section>
      <section anchor="summary-of-design-alternatives">
        <name>Summary of Design Alternatives</name>
        <t>This draft explores three distinct architectural approaches for
conditional filtering.</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Inline Design:</strong> Embeds algorithm parameters directly into a new
message parameter that activates or deactivates existing Range
Filter SetIDs based on real-time metrics.</t>
          </li>
          <li>
            <t><strong>Reference-Based Design:</strong> Reuses the common algorithm structure
from SSTS by mapping standard Range Filter SetIDs to shared
conditional logic configurations.</t>
          </li>
          <li>
            <t><strong>Self-Contained Design:</strong> Defines an independent parameter carrying
an internal list of mutually exclusive filter profiles and their
corresponding metric thresholds.</t>
          </li>
        </ol>
        <t>The <strong>Inline Design</strong> is suggested as the option requiring the <strong>least
changes</strong> to the current MOQT specification. It functions as a <strong>purely
additive</strong> message parameter that references existing <tt>SetID</tt> values
already defined in the base protocol, thereby avoiding the need to
modify existing parameters or reorganize the structures of other
extensions like SSTS.</t>
      </section>
    </section>
    <section anchor="relay-evaluation-and-bandwidth-allocation">
      <name>Relay Evaluation and Bandwidth Allocation</name>
      <t>Most of the text in this section is adapted from Sender-Side Track
Switching for Media over QUIC Transport <xref target="SSTS"/>, specifically the
"Bandwidth Allocation Algorithm" material at
&lt;https://github.com/wilaw/moq-transport/blob/patch-1/draft-ietf-moq-tran
sport.md#bandwidth-allocation-allocation-algorithm&gt;.</t>
      <section anchor="general-behavior">
        <name>General Behavior</name>
        <t>With this parameter, the subscriber pre-authorizes the relay to
autonomously adjust intra-track forwarding within the subscribed track.</t>
        <t>When RANGE_FILTER_CONDITION entries are present and activate switching
is non-zero, the relay evaluates each conditionally bound SetID at each
permitted switching point (Group boundary) and determines whether that
SetID remains active. The relay then applies the standard MOQT
OR-combination across all active conditional SetIDs together with any
unconditional SetIDs. In other words, RANGE_FILTER_CONDITION changes
whether a SetID participates in the OR expression; it does not change
the meaning of SetID itself.</t>
        <t>When activate switching is 0 for all conditional SetIDs, or no
RANGE_FILTER_CONDITION is present, the relay applies the standard MOQT
Range Filter OR-combination behavior unchanged.</t>
      </section>
      <section anchor="algorithm-0-throughput-based-conditional-set-admission">
        <name>Algorithm 0: Throughput-Based Conditional Set Admission</name>
        <section anchor="relay-state">
          <name>Relay State</name>
          <t>The relay maintains the following state for each subscription that
carries one or more RANGE_FILTER_CONDITION parameters with Algorithm ID
0:</t>
          <ul spacing="normal">
            <li>
              <t><tt>B_total</tt>: Estimated downstream bandwidth capacity for the subscriber
connection. The relay <bcp14>MUST</bcp14> maintain a bandwidth estimate per
downstream subscriber. The measurement interval <bcp14>SHOULD</bcp14> be at least the
Group duration of the subscribed track. The estimate is obtained from
the QUIC congestion control state (e.g., pacing rate, congestion
window, smoothed RTT) and <bcp14>MAY</bcp14> be supplemented by external sources. The
exact mechanism is implementation-specific.</t>
            </li>
            <li>
              <t><tt>sum_F</tt>: Sum of all Set throughput fraction values across all
registered RANGE_FILTER_CONDITION entries for this subscription.
Updated when entries are added or removed.</t>
            </li>
            <li>
              <t><tt>set.threshold</tt>: The Throughput threshold for each conditional SetID.</t>
            </li>
            <li>
              <t><tt>set.fraction</tt>: The Set throughput fraction for each conditional
SetID.</t>
            </li>
            <li>
              <t><tt>set.rank</tt>: The Set rank for each conditional SetID.</t>
            </li>
            <li>
              <t><tt>active_set_ids</tt>: The set of conditional SetIDs currently admitted
into the MOQT OR-combination for this subscription.</t>
            </li>
          </ul>
        </section>
        <section anchor="bandwidth-allocation">
          <name>Bandwidth Allocation Algorithm</name>
          <t>On a periodic update interval or at a minimum at each Group boundary,
the relay executes the following algorithm to determine which
conditional SetIDs remain active:</t>
          <artwork><![CDATA[
active_set_ids = {}
reserved_bw = 0
B_available = B_total
for each set in ascending rank order:
  set.target     = B_total x set.fraction / sum_F
  B_available    = max(0, B_total - reserved_bw)
  if set.threshold <= min(set.target, B_available):
    active_set_ids += set.set_id
    reserved_bw += set.threshold
]]></artwork>
          <t>The relay then forwards Objects that pass the Range Filters associated
with any SetID in <tt>active_set_ids</tt>, combined using the standard MOQT OR
semantics, together with any unconditional SetIDs. If no conditional
SetID satisfies its threshold, the relay forwards only the unconditional
SetIDs, if any. If the subscription contains no unconditional SetIDs,
the relay <bcp14>MAY</bcp14> forward no Objects; this behavior <bcp14>SHOULD</bcp14> be documented by
the relay implementation.</t>
          <t>The rank ordering ensures higher-priority conditional SetIDs (lower rank
value) are admitted first. The use of <tt>reserved_bw</tt> makes admission
monotonic: once a higher-priority conditional SetID has been admitted,
lower-priority SetIDs are evaluated only against the bandwidth that
remains after honoring those earlier admissions. Lower-priority
conditional SetIDs therefore absorb any shortfall by being deactivated
from the OR-combination.</t>
        </section>
        <section anchor="relay-procedure">
          <name>Relay Procedure</name>
          <t>When the relay receives a subscription with one or more
RANGE_FILTER_CONDITION parameters:</t>
          <ol spacing="normal" type="1"><li>
              <t>Register each conditional SetID and its associated Algorithm
parameters.</t>
            </li>
            <li>
              <t>Store <tt>B_total</tt>, <tt>sum_F</tt>, <tt>set.threshold</tt>, <tt>set.fraction</tt>,
<tt>set.rank</tt>, and <tt>active_set_ids</tt> as subscription state.</t>
            </li>
            <li>
              <t>If activate switching is non-zero and the number of registered
RANGE_FILTER_CONDITION entries for this subscription is &gt;= the
activate switching value, begin active SetID admission by applying
the bandwidth allocation algorithm (<xref target="bandwidth-allocation"/>) at the
next Group boundary.</t>
            </li>
          </ol>
          <t>When a REQUEST_UPDATE is received:</t>
          <ul spacing="normal">
            <li>
              <t>A RANGE_FILTER_CONDITION with Length = 0 removes the conditional state
for the referenced SetID.</t>
            </li>
            <li>
              <t>A RANGE_FILTER_CONDITION with non-zero Length replaces the entire
conditional state for the referenced SetID.</t>
            </li>
            <li>
              <t>Conditional SetIDs not referenced in REQUEST_UPDATE remain unchanged.</t>
            </li>
          </ul>
          <t>When the subscription is terminated (PUBLISH_DONE or cancellation), the
relay removes all associated RANGE_FILTER_CONDITION state.</t>
        </section>
      </section>
    </section>
    <section anchor="example-or-preserving-conditional-layer-admission">
      <name>Example: OR-Preserving Conditional Layer Admission</name>
      <t>A subscriber receives a scalable video track containing three subgroups:
Subgroup 0 (base layer), Subgroup 1 (enhancement layer 1), and Subgroup
2 (enhancement layer 2).</t>
      <t>The subscriber defines three SetID groups that remain OR-combined in the
normal MOQT sense. The base layer is always included. Conditional
evaluation determines which enhancement layers stay active at any given
time.</t>
      <section anchor="step-1-define-the-range-filters">
        <name>Step 1: Define the Range Filters</name>
        <t>Using the standard MOQT SUBGROUP_FILTER parameter (SetID is 8 bits per
MOQT Section 5.1.3):</t>
        <ul spacing="normal">
          <li>
            <t>SUBGROUP_FILTER (SetID = 0): Range 0-0. Delivers the base layer. This
SetID is unconditional.</t>
          </li>
          <li>
            <t>SUBGROUP_FILTER (SetID = 1): Range 1-1. Delivers enhancement layer 1.</t>
          </li>
          <li>
            <t>SUBGROUP_FILTER (SetID = 2): Range 2-2. Delivers enhancement layer 2.</t>
          </li>
        </ul>
      </section>
      <section anchor="step-2-bind-conditions-with-rangefiltercondition-algorithm-0">
        <name>Step 2: Bind Conditions with RANGE_FILTER_CONDITION (Algorithm 0)</name>
        <artwork><![CDATA[
RANGE_FILTER_CONDITION (SetID=1):
  Algorithm ID           = 0
  Throughput threshold   = 2000  (kbps)
  Set throughput fraction = 6
  Activate switching     = 2
  Set rank               = 1

RANGE_FILTER_CONDITION (SetID=2):
  Algorithm ID           = 0
  Throughput threshold   = 2500  (kbps)
  Set throughput fraction = 4
  Activate switching     = 2
  Set rank               = 2
]]></artwork>
        <t>Activate switching = 2 means condition-based admission activates once
both conditional RANGE_FILTER_CONDITION entries are registered. sum_F =
6 + 4 = 10.</t>
      </section>
      <section anchor="result">
        <name>Result</name>
        <t>The relay applies the bandwidth allocation algorithm at each Group
boundary:</t>
        <ul spacing="normal">
          <li>
            <t>B_total = 7000 kbps: SetID=1 is allocated <tt>7000 * 6 / 10 = 4200</tt>,
which satisfies its 2000 kbps threshold. The remaining budget is 5000
kbps. SetID=2 is then allocated <tt>7000 * 4 / 10 = 2800</tt>, which
satisfies its 2500 kbps threshold. The relay therefore forwards SetID
0, SetID 1, and SetID 2.</t>
          </li>
        </ul>
        <t>Note: The subscriber should set fractions and thresholds such that, at
the expected B_total, each desired layer's threshold is within its
allocated fraction. The example above illustrates the mechanics; real
deployments may calibrate threshold and fraction values so the intended
set of layers remains active at expected bandwidth levels.</t>
        <t>In a typical deployment:</t>
        <ul spacing="normal">
          <li>
            <t>B_total = 7000 kbps: The relay keeps SetID=1 and SetID=2 active.
Combined with unconditional SetID=0, subgroups 0, 1, and 2 are
forwarded.</t>
          </li>
          <li>
            <t>B_total = 4000 kbps: The relay keeps SetID=1 active but not SetID=2.
Combined with unconditional SetID=0, subgroups 0 and 1 are forwarded.</t>
          </li>
          <li>
            <t>B_total = 1500 kbps: No conditional enhancement SetID is admitted. The
relay still forwards the unconditional base layer in SetID=0.</t>
          </li>
        </ul>
        <t>By structuring the SetIDs as independently admitted OR terms evaluated
against bandwidth thresholds, the subscriber eliminates round-trip
signaling delays while preserving the existing SetID combination
semantics.</t>
      </section>
    </section>
    <section anchor="call-flow">
      <name>Call flow</name>
      <ol spacing="normal" type="1"><li>
          <t>A typical SUBSCRIBE workflow for conditional range-filter evaluation.</t>
        </li>
        <li>
          <t>A publisher-initiated subscription workflow based on SUBSCRIBE_TRACKS
and Namespace Prefix Matching.</t>
        </li>
        <li>
          <t>A publisher-initiated subscription workflow where
RANGE_FILTER_CONDITION is carried in PUBLISH_OK.</t>
        </li>
      </ol>
      <section anchor="typical-subscribe-workflow">
        <name>Typical SUBSCRIBE workflow</name>
        <artwork><![CDATA[
+------------+                               +-------+
| Subscriber |                               | Relay |
+------------+                               +-------+
  |                                              |
  |    SUBSCRIBE (Standard Range Filters,        |
  |               RANGE_FILTER_CONDITIONs)       |
  |--------------------------------------------->|
  |                                              |
  |                  SUBSCRIBE_OK                |
  |<---------------------------------------------|
  |                                              |
  |                              +-----------------------------+
  |                              | 1. Measure B_total          |
  |                              | 2. Evaluate Conditions      |
  |                              | 3. Admit Active SetIDs      |
  |                              +-----------------------------+
  |                                              |
  |    Forward Objects (Active SetIDs)           |
  |<=============================================|
  |                                              |
  ~             Bandwidth Fluctuates             ~
  |                                              |
  |                              +-----------------------------+
  |                              | Group Boundary Re-eval:     |
  |                              | Update active SetIDs        |
  |                              +-----------------------------+
  |                                              |
  |    Forward Objects (Updated Active SetIDs)   |
  |    (w/ PRIOR_SUBGROUP_ID_GAP if skipped)     |
  |<=============================================|
  |                                              |
]]></artwork>
        <ul spacing="normal">
          <li>
            <t><strong>Initial setup</strong>: The subscriber sends SUBSCRIBE with multiple SetID
groups (using standard Range Filters) and binds them using
RANGE_FILTER_CONDITION.</t>
          </li>
          <li>
            <t><strong>Continuous evaluation</strong>: The relay autonomously executes the
evaluation loop (measuring throughput, comparing thresholds, and
admitting or deactivating conditional SetIDs).</t>
          </li>
          <li>
            <t><strong>Dynamic adaptation</strong>: At the next group boundary, the relay can
deactivate lower-priority conditional SetIDs and, when subgroups are
skipped, uses PRIOR_SUBGROUP_ID_GAP to make intentional omissions
explicit.</t>
          </li>
        </ul>
      </section>
      <section anchor="standard-publisher-initiated-subscribetracks-workflow-v19">
        <name>Standard Publisher-initiated SUBSCRIBE_TRACKS workflow (V19)</name>
        <t>The following call flow illustrates a publisher-initiated subscription
workflow based on SUBSCRIBE_TRACKS and Namespace Prefix Matching.</t>
        <artwork><![CDATA[
+------------+                +-------+                  +-----------+
| Subscriber |                | Relay |                  | Publisher |
+------------+                +-------+                  +-----------+
  |                               |                            |
  | SUBSCRIBE_TRACKS              |                            |
  | (Track Namespace Prefix)      |                            |
  |                               |                            |
  |------------------------------>|                            |
  |                               | Namespace Prefix Matching  |
  |                               | against authorized tracks  |
  |                               |--------------------------->|
  |                               |<---------------------------|
  |                               | Matched Track List         |
  |                               |                            |
  |                               | PUBLISH (Track A)          |
  |<==============================|============================|
  | PUBLISH_OK (or REQUEST_OK)    |                            |
  |==============================>|============================|
  |                               | PUBLISH (Track B)          |
  |<==============================|============================|
  | PUBLISH_OK (or REQUEST_OK)    |                            |
  |==============================>|============================|
  |                               |                            |
  |<==== Objects (Filtered) ======|============================|
  |    (with PRIOR_GAP prop)      |                            |
]]></artwork>
        <ul spacing="normal">
          <li>
            <t><strong>Discovery and matching</strong>: The subscriber requests a Track Namespace
Prefix on a bidirectional stream using SUBSCRIBE_TRACKS. The relay or
publisher performs Namespace Prefix Matching across known authorized
tracks.</t>
          </li>
          <li>
            <t><strong>Publisher-initiated delivery</strong>: For each matched track, the
publisher (directly or through the relay) initiates a new stream and
sends PUBLISH. The subscriber accepts each stream with PUBLISH_OK (or
REQUEST_OK), establishing the subscription.</t>
          </li>
          <li>
            <t><strong>Filter refinement</strong>: In this workflow, SUBSCRIBE_TRACKS <bcp14>MAY</bcp14> carry
optional Range Filter and/or Conditional Filter parameters to limit
delivered objects, either statically (fixed ranges) or dynamically
(runtime condition evaluation).</t>
          </li>
        </ul>
      </section>
      <section anchor="publisher-initiated-workflow-with-rangefiltercondition">
        <name>Publisher-initiated workflow with RANGE_FILTER_CONDITION</name>
        <t>The following call flow illustrates a publisher-initiated workflow where
the subscriber returns RANGE_FILTER_CONDITION in PUBLISH_OK.</t>
        <artwork><![CDATA[
+------------+                +-------+                  +-----------+
| Subscriber |                | Relay |                  | Publisher |
+------------+                +-------+                  +-----------+
  |                               |                            |
  | SUBSCRIBE_TRACKS              |                            |
  | (Track Namespace Prefix)      |                            |
  |------------------------------>|                            |
  |                               | Namespace Prefix Matching  |
  |                               | against authorized tracks  |
  |                               |--------------------------->|
  |                               |<---------------------------|
  |                               | Matched Track List         |
  |                               |                            |
  |                               | PUBLISH (Track A)          |
  |<==============================|============================|
  | PUBLISH_OK                    |                            |
  |   + RANGE_FILTER_CONDITION    |                            |
  |==============================>|============================|
  |                               | Apply returned conditions  |
  |                               | before forwarding objects  |
  |<==== Objects (filtered) ==================================>|
  |                               |                            |
  |                               | PUBLISH (Track B)          |
  |<==============================|============================|
  | PUBLISH_OK                    |                            |
  |   + RANGE_FILTER_CONDITION    |                            |
  |==============================>|============================|
  |                               | Apply returned conditions  |
  |                               | before forwarding objects  |
  |<==== Objects (filtered) ==================================>|
  |                               |                            |
]]></artwork>
        <ul spacing="normal">
          <li>
            <t><strong>No filter parameters in SUBSCRIBE_TRACKS</strong>: The subscriber requests
only a Track Namespace Prefix.</t>
          </li>
          <li>
            <t><strong>Condition conveyed in acceptance</strong>: For each received PUBLISH
stream, the subscriber responds with PUBLISH_OK carrying
RANGE_FILTER_CONDITION.</t>
          </li>
          <li>
            <t><strong>Per-track activation</strong>: The relay applies the returned conditions to
that accepted stream and forwards only objects that satisfy the
resulting active SetID combination.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="design-rationale">
      <name>Design Rationale</name>
      <section anchor="or-preserving-admission-versus-set-replacement">
        <name>OR-Preserving Admission Versus Set Replacement</name>
        <t>Two high-level designs are possible for conditional intra-track
filtering.</t>
        <t>In a set-replacement design, the relay interprets conditional SetIDs as
mutually exclusive alternatives and selects exactly one active SetID.
That model can be convenient for layered examples, but it changes the
base MOQT meaning of SetID because SetIDs no longer behave as
OR-combined filter groups once conditional logic is enabled.</t>
        <t>The inline design instead uses an OR-preserving admission design. Under this
model, conditional logic determines only whether a SetID participates in
the existing OR expression at a given switching point. The AND semantics
within a SetID and the OR semantics across SetIDs remain unchanged. This
preserves compatibility with existing Range Filter processing, avoids
introducing a special-case interpretation of SetID, and lets
unconditional and conditional SetIDs coexist naturally in the same
subscription.</t>
        <t>The main trade-off is that subscribers describe adaptation as
incremental admission or removal of OR terms, rather than as a single
explicit "current SetID". That requires examples and algorithms to be
phrased in terms of active SetID combinations. This document prefers
that trade-off because it keeps the extension additive and avoids
redefining core MOQT Range Filter behavior.</t>
      </section>
      <section anchor="alternative-embedding-conditions-in-existing-range-filter-parameters">
        <name>Alternative: Embedding Conditions in Existing Range Filter Parameters</name>
        <t>An alternative design would embed the conditional evaluation fields
(Algorithm ID, Throughput threshold, Set throughput fraction, Activate
switching, Set rank) directly into the existing Range Filter parameters
SUBGROUP_FILTER, OBJECTID_FILTER, PRIORITY_FILTER,
OBJECT_PROPERTY_FILTER, and TRACK_PROPERTY_FILTER, rather than
introducing a separate RANGE_FILTER_CONDITION parameter.</t>
        <t>Under this approach, a subscriber would signal the condition inline with
the filter that it governs, for example:</t>
        <artwork><![CDATA[
SUBGROUP_FILTER {
  Type=0x25, Length, [SetID], Range...,
  [Algorithm ID (vi64)],
  [Throughput threshold (vi64)],
  ...
}
]]></artwork>
        <t>This approach is not adopted for the following reasons.</t>
        <t><strong>SetID is a grouping mechanism, not a per-filter attribute.</strong> A single
SetID typically comprises multiple Range Filter parameters that are
AND-combined (e.g., a SUBGROUP_FILTER and an OBJECTID_FILTER with the
same SetID). The conditional activation logic applies to the entire
SetID group, not to any individual filter within it. Embedding condition
fields in each Range Filter parameter would require either repeating the
fields identically across every parameter sharing the same SetID, or
designating one parameter as the canonical carrier while others are
implicitly governed by it. Both approaches introduce ambiguity and
implementation complexity without benefit.</t>
        <t><strong>Modifying base MOQT parameters raises the change bar.</strong>
SUBGROUP_FILTER and related parameters are defined and registered in the
MOQT base specification (<xref target="I-D.ietf-moq-transport"/>, Section 15.7).
Extending their wire format would require a change to or an update of
that specification rather than a new parameter registration. A
standalone parameter type, by contrast, is a purely additive change.</t>
        <t><strong>Separation of concerns is architecturally preferable.</strong> Range Filter
parameters define the <em>content selection criterion</em> (which subgroup IDs,
object IDs, priorities, or property values pass). The
RANGE_FILTER_CONDITION parameter defines the <em>activation condition</em>
(under what network state the SetID is active). Keeping these concerns
in separate parameters preserves the ability to use Range Filters
independently of any conditional logic, and allows future algorithms to
be introduced without touching the base filter format.</t>
        <t>For these reasons, RANGE_FILTER_CONDITION is defined as a standalone
parameter that references an existing SetID by value.</t>
      </section>
      <section anchor="handling-filtered-subgroups-prior-subgroup-id-gap">
        <name>Handling Filtered Subgroups: Prior Subgroup ID Gap</name>
        <t>When a relay dynamically filters out a subgroup due to network
conditions, a subscriber receiving the stream might notice a numerical
leap in Group IDs or Object IDs. To explicitly communicate that these
missing objects were intentionally skipped by a conditional filter
rather than lost to network congestion, we propose a new
PRIOR_SUBGROUP_ID_GAP Object Property.</t>
        <ul spacing="normal">
          <li>
            <t><strong>Prior Subgroup ID Gap (Property Type: 0x3F):</strong> A variable-length
integer containing the number of Subgroups prior to the current
Subgroup ID (within the current Group) that do not and will never
exist because they were conditionally filtered out.</t>
          </li>
        </ul>
        <t>If a relay drops Subgroup 1 but continues forwarding Subgroup 0 and
Subgroup 2, it injects PRIOR_SUBGROUP_ID_GAP = 1 into the first Object
of Subgroup 2. Relays <bcp14>MUST</bcp14> be permitted to modify this specific gap
property to support dynamic conditional filtering.</t>
      </section>
      <section anchor="extension-negotiation">
        <name>Extension negotiation</name>
        <t>Per Section 10.3 of <xref target="I-D.ietf-moq-transport"/>, the SETUP message
allows endpoints to agree on the initial configuration before any other
control messages are exchanged. Extensions that modify control message
semantics, such as RANGE_FILTER_CONDITION, <bcp14>MUST</bcp14> be negotiated through
Setup Options before use.</t>
        <t>The Setup Options defined in this section are intended for the inline
design of this extension. Alternative designs, such as the
reference-based design (<xref target="conditional-set-assignment-design"/>) or the
self-contained design (<xref target="conditional-filter-set-design"/>), may instead
rely on Setup Options defined in the Sender-Side Track Switching (SSTS)
extension <xref target="SSTS"/> or require different identifiers for their respective
parameters.</t>
        <t>This document defines two new Setup Options: RANGE_FILTER_CONDITION and
MAX_CONDITIONAL_FILTERS.</t>
        <dl>
          <dt>RANGE_FILTER_CONDITION (Type 0x09):</dt>
          <dd>
            <t>Declares support for the RANGE_FILTER_CONDITION message parameter
defined in <xref target="parameter-definition"/>. The value is a variable-length
integer identifying the version of the conditional filtering algorithm
set the endpoint is willing to use. The value indicates the highest
Algorithm ID the endpoint is capable of evaluating. An endpoint that
includes this option can process RANGE_FILTER_CONDITION parameters for
any Algorithm ID up to and including the advertised value. If not
present, the endpoint does not support this extension.</t>
          </dd>
          <dt>MAX_CONDITIONAL_FILTERS (Type 0x0A):</dt>
          <dd>
            <t>Limits the peer's total number of RANGE_FILTER_CONDITION parameters
allowed concurrently for a given subscription or fetch. The default
value is 0, so if not specified, the peer <bcp14>MUST NOT</bcp14> send any
RANGE_FILTER_CONDITION parameters. If this limit is exceeded, an
endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR with error code
INVALID_FILTER.</t>
          </dd>
        </dl>
        <t>An endpoint that wishes to send RANGE_FILTER_CONDITION parameters <bcp14>MUST</bcp14>
verify that the peer's SETUP message includes a RANGE_FILTER_CONDITION
Setup Option with a value greater than or equal to the Algorithm ID it
intends to use, and a MAX_CONDITIONAL_FILTERS value greater than zero.</t>
        <t>Because RANGE_FILTER_CONDITION binds to Range Filter SetIDs, an endpoint
that sends RANGE_FILTER_CONDITION <bcp14>MUST</bcp14> also ensure that the
MAX_FILTER_RANGES Setup Option (Section 10.3.1.6 of
<xref target="I-D.ietf-moq-transport"/>) has been negotiated with a non-zero value;
otherwise Range Filters themselves would not be permitted and the
referenced SetIDs could not be established.</t>
        <t>Endpoints that do not support this extension will not include the
RANGE_FILTER_CONDITION Setup Option in their SETUP message. As required
by Section 10.3 of <xref target="I-D.ietf-moq-transport"/>, endpoints <bcp14>MUST</bcp14> ignore
unknown Setup Options, so a peer that receives these options from an
endpoint that does not recognize them simply ignores them and does not
send RANGE_FILTER_CONDITION parameters in that session.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This extension relies on the existing security framework of MOQT.
Conditional filter evaluation must be computationally lightweight to
prevent denial-of-service attacks against relays. A malicious subscriber
could attempt to overwhelm a relay with highly complex
RANGE_FILTER_CONDITION thresholds or excessive conditional SetIDs.
Relays <bcp14>SHOULD</bcp14> implement rate limiting on the maximum number of
conditionally bound SetIDs a subscriber can declare in a single session.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <ul spacing="normal">
        <li>
          <t>A new Setup Option Type for RANGE_FILTER_CONDITION (suggested value:
0x09) in the "MOQ Setup Options" registry (Section 15.4 of
<xref target="I-D.ietf-moq-transport"/>), with Specification Required policy.</t>
        </li>
        <li>
          <t>A new Setup Option Type for MAX_CONDITIONAL_FILTERS (suggested value:
0x0A) in the "MOQ Setup Options" registry (Section 15.4 of
<xref target="I-D.ietf-moq-transport"/>), with Specification Required policy.</t>
        </li>
        <li>
          <t>A new Message Parameter Type for RANGE_FILTER_CONDITION in the "MOQT
Message Parameters" registry.</t>
        </li>
        <li>
          <t>A new Object Property Type for PRIOR_SUBGROUP_ID_GAP (suggested
value: 0x3F) in the "MOQ Properties" registry.</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-moq-transport">
          <front>
            <title>Media over QUIC Transport</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document defines Media over QUIC Transport (MOQT), a publish/
   subscribe protocol that runs over QUIC and WebTransport.  MOQT
   leverages the features of these transports, such as streams,
   datagrams, priorities, and partial reliability.  MOQT operates both
   point-to-point and through intermediate relays, enabling scalable
   low-latency delivery.  Despite its name, MOQT is media agnostic and
   can be used for a wide range of use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-19"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="SSTS" target="https://github.com/wilaw/moqt-ssts/blob/main/draft-wilaw-moq-moqt-ssts.md">
          <front>
            <title>Sender-Side Track Switching for Media over QUIC Transport</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 876?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>IETF MOQ Working Group.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
A+giJMAVZGndQNt5FResioe52FokIBdvDtq4q70ZlZ0vuGR0G/qPBK/RxUaL
jRrWYM3y9azMtP4+oyqv5+7shxhBhB/TL5AEl3HESYlm6S0WlPha2Yw8HUm2
Lw8OKpVtXvU4ky1l6PYtVgjHL+3ppksfLA/064Ky5IPCoy+ilUtzZRM1OPxx
JT2p8nbf7dU+1btswQt2YPjUPHIHLKlyOiiShBLc5cqXKFWpiVYoZ15Yckaq
PXUEDaSaN2o058tlnfE95ra8d2kU4f3A0XSDRVqDsCasd8wBUZRK3FFUV4Vi
JMXCaZ03dY+gab4JrDRS0rA7tkqm8Fr4jzwuWN2vczP0wD5HmOlA795+8Xx4
QPACq8Sj+BinBKEwnN1dUdRIPw3Ttt3uszxoFdWjNhqFaIO6Y9bwoQ0Zaikn
yigIbwpP6Jrba8MFAtm+s8ZJhWX3ae2b1cOsiw9JCt0mC093MO8yzIhFj8Sc
Q/84o9z6EIN0WlSh7s/9Ed+7xRvfvRlPoGGH9qk8g+yPCtYKw53POMuCKi7N
qKySpHdgqByX9OMEd1sr9hI4yclYrPdYr6ge3kZl81Y5zc8wOdkab5m5zPF4
k/KPX1P9SFGdu3devMt+pvOjizevbcVDJQIOxCG5Irg47yUmBeeZZDpx7Gez
5qr4bVFycg1CW6rJXlXKxSRunS/iyNcorMT3hCvUei2sUWKrQXfLxpFbeLsi
ZCySCYCIFPbodMWWqIwViE48B82vG5Ubg4KHUeHTvJxVwEaPYEMudoVeKTu5
SaNAvvgLw8LWmKXeWfYe8NHdF0h9HHKYg2lf29TdyGbl/Y/DEWW7iatMEWjJ
s20rYu5xp5OvQOlvd8qLjks1fCllWwEC4Z2/UFCF9S/atx9biHGTE3JrjLnv
pl/i/1fT//52s/Y7lsjsS96VsvK7f5JL5OhO49JxrKWGntc3qomqxlWofXd7
sQHmLoqLOsS5u2+O13FtpTlmaie++lrPFU5BoZHSVGLCMd9zjmWayr2dtU3r
b1c5x3ekjnQ7r7ndHJavQwc5jMk6bfCiqGnmn6I6Mq72eMnMJLVf0S0tjsh7
VNvjWvIojhpjkptx3MWLdr2i+BpvvUH+Y2TElY5wMI3ahm6krvCiJYEW36s+
IvO0NCVaeomBN3KVg+E8V8q28fr4zsniRFFq8/GKL2nG90uIhzlMcoPPFwYL
2PfdSYgplzlmGdAM7XUQIzdKf0E0hkxREczeRLmAg7mmU1JytBG576nEODZN
8etueeW6Q4JBHARFEUHbbjyE11t3HpI7sUFb8E55xf4KGvjddIQDUUAbrL3l
ShjZqIbi9EQb9UUuhQLKXgDESw76NaosgET32I813xOLvTUIOKkU66BS2FLM
Et1Hbh0dYNkXzFQV4NV3f1EinXRUpx6RUSErK3Y1jamnLdrOKC1zKZXllpK4
RB6nd88bYhyrJng0M9mbfIl2/BZEM/TFrQIYIGvdvKrhz4qAClBEu9Qa5pmA
PkXbkZ0LyAUNRCenL6pdBAdPLYIXXOgfHVAdeUgV4OJu+SFQOQ+uG+q3uhsr
5i6ubFAniFl/e7SarT8NJXowSBvJ19yqOuOgzobeJcERsZAQQ1Sq4LCFmwuk
4KstMtVkTydV4a380ta4XuoSnV6N+3X5kNg+r+7JzYlc+SN3ntDBMKxETSky
h3iDOQAbuQKD0YbfEYBGXPS16fYv7esL7IUsPlhO9HpNGvevbSQ/85VOM745
sq4iZ/CE14VVOZ7XXTPcyfCILV+M6QQTTeGqomgxG0dGVhHeggSQDm1eTH8K
SsQyacJLZrkiCxUdkDdXJl06i4oYBdW5+KBTc9tHdOGNBgXJ8bLsrpg8UWIZ
Sa0958Ckkq2sC9inyoUZolsqc+kUoGrag827h0PnASKEmKEZxUi4q5WC3T6e
nkw3dhqs6+kGhOSLf1CH9oFCX6WeBApViSSMaIHyDpBBkz12rFdxHYi2x5NH
OE14e5tkG/HunDf8l2f2QvhVDju+ntw1lV5Q0jOX6T/FXF6Jim1dyrRlb4JB
4wWEmy0Eow86ajlefDfdrgG/atgHLxy7Xxqr9trdqRh2qsbjsZ5hVAiQ5XSO
sjQ18SVVIFEfDpj8TfxkZwGK0+x8VOr46OI5Shb9fc53HZGbZaL+L1KVM5ub
lwAA

-->

</rfc>
