<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE rfc [ <!ENTITY nbsp " "> <!ENTITY zwsp "​"> <!ENTITY nbhy "‑"> <!ENTITY wj "⁠"> ]> <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> <!-- generated by https://github.com/cabo/kramdown-rfc version1.7.291.7.30 (Ruby3.4.4)2.5.9) --> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902"docName="draft-ietf-netmod-schedule-yang-10"docName="draft-ietf-netmod-schedule-yang-rfceditor-latest" category="std" consensus="true" submissionType="IETF" xml:lang="en" number="9922" tocInclude="true" sortRefs="true" symRefs="true" version="3"> <!-- xml2rfc v2v3 conversion3.30.03.31.0 --> <link href="https://datatracker.ietf.org/doc/draft-ietf-netmod-schedule-yang-rfceditor-latest" rel="prev"/> <front> <titleabbrev="Common Schedule YANG">Aabbrev="YANG Scheduling">A Common YANG Data Model for Scheduling</title> <seriesInfoname="Internet-Draft" value="draft-ietf-netmod-schedule-yang-10"/>name="RFC" value="9922"/> <author fullname="Qiufang Ma" role="editor"> <organization>Huawei</organization> <address> <postal> <street>101 Software Avenue, Yuhua District</street> <city>Jiangsu</city> <code>210012</code> <country>China</country> </postal> <email>maqiufang1@huawei.com</email> </address> </author> <author fullname="Qin Wu"> <organization>Huawei</organization> <address> <postal> <street>101 Software Avenue, Yuhua District</street> <city>Jiangsu</city> <code>210012</code> <country>China</country> </postal> <email>bill.wu@huawei.com</email> </address> </author> <author fullname="Mohamed Boucadair" role="editor"> <organization>Orange</organization> <address> <postal> <city>Rennes</city> <code>35000</code> <country>France</country> </postal> <email>mohamed.boucadair@orange.com</email> </address> </author> <author fullname="Daniel King"> <organization>Lancaster University</organization> <address> <postal> <country>United Kingdom</country> </postal> <email>d.king@lancaster.ac.uk</email> </address> </author> <dateyear="2025" month="August" day="07"/> <area>Operations and Management</area>year="2026" month="February"/> <area>OPS</area> <workgroup>netmod</workgroup> <keyword>calendaring</keyword> <keyword>scheduling</keyword> <keyword>YANG</keyword> <keyword>groupings</keyword> <abstract> <?line57?>96?> <!-- [rfced] FYI - We will do the following when we convert the file to RFCXML: - compact the spacing of the definition lists in Sections 8.1 and 8.2 --> <t>This document defines common types and groupings that are meant to be used for schedulingpurposespurposes, such asevent, policy,events, policies, services, or resources based on date and time. For the sake of better modularity, the YANG module includes a set of recurrence-related groupings with varying levels of representation (i.e., from basic to advanced) to accommodate a variety of requirements. It also defines groupings for validating requested schedules and reporting schedulingstatus.</t>statuses.</t> </abstract><note removeInRFC="true"> <name>Discussion Venues</name> <t>This note is to be removed before publishing as an RFC.</t> <t>Discussion of this document takes place on the Network Modeling (NETMOD) Working Group mailing list (netmod@ietf.org), which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netmod/"/>.</t> <t>Source for this draft and an issue tracker can be found at <eref target="https://github.com/netmod-wg/schedule-yang"/>.</t> </note></front> <middle> <?line66?>110?> <section anchor="intro"> <name>Introduction</name> <t>This document defines a common schedule YANG module ("ietf-schedule") that can be used in several scheduling contexts, e.g., (but not limited to) <xref target="I-D.ietf-opsawg-ucl-acl"/>, <xref target="I-D.ietf-opsawg-scheduling-oam-tests"/>, and <xref target="I-D.ietf-tvr-schedule-yang"/>. The module includes a set of reusable groupingswhichthat are designed to be applicable for schedulingpurposespurposes, such asevent, policy, servicesevents, policies, services, or resources based on date and time. It also defines groupings for validating requested schedules and reporting schedulingstatus.</t>statuses.</t> <t>This document does not make any assumption about the nature of actions that are triggered by the schedules. Detection and resolution of any schedule conflicts are beyond the scope of this document.</t> <t><xref target="sec-mib"/> discusses the relationship with the Management Information Base (MIB) managed objects for scheduling management operations defined in <xref target="RFC3231"/>.</t> <t><xref target="usage"/> describes a set of examples to illustrate the use of the common schedule groupings (<xref target="sec-grp"/>). <xref target="sec-ext"/> provides sample modules to exemplify how future modules can use the extensibility provisions in the "ietf-schedule" module (<xref target="sec-schedule"/>). Also, <xref target="ex-framework"/> provides an example of using the "ietf-schedule" module for scheduled use of a resources framework (e.g., <xref target="RFC8413"/>).</t><section anchor="editorial-note-to-be-removed-by-rfc-editor"> <name>Editorial Note (To be removed by RFC Editor)</name> <t>Note to the RFC Editor: This section is to be removed prior to publication.</t> <t>This document contains placeholder values that need to be replaced with finalized values at the time of publication. This note summarizes all of the substitutions that are needed. No other RFC Editor instructions are specified elsewhere in this document.</t> <t>Please apply the following replacements:</t> <ul spacing="normal"> <li> <t>XXXX --> the assigned RFC number for this draft</t> </li> <li> <t>2025-05-30 --> the actual date of the publication of this document</t> </li> </ul> </section></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?> <t>The meanings of the symbols in tree diagrams are defined in <xref target="RFC8340"/>.</t> <t>This document uses the YANG terminology defined in <xref section="3" sectionFormat="of" target="RFC7950"/>.</t><t>The<t>This document makes use of the following terms:</t> <dl> <dt>Recurrence rule:</dt> <dd> <t>Refers to a rule or repeating pattern for recurring events. See also <xref section="3.8.5.3" sectionFormat="of" target="RFC5545"/> for a comprehensive iCalendar recurrence rule specification.</t> </dd> <dt>Recurrence instance (or Recurrence, for short):</dt> <dd> <t>Refers to an instance that matches a recurrence rule.</t> </dd> <dt>Recurrence set:</dt> <dd> <t>Refers to a set of recurrence instances.</t> </dd> <dt>Frequency:</dt> <dd> <t>Characterizes the type of a recurrence rule. Values are taken from the "FREQ" rule in <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>.</t> </dd> <dt/> <dd> <t>For example, repeating events based on an interval of a second or more are classified as recurrence with a frequency value of "SECONDLY". Frequency values defined as identities in the YANG module are used in lowercase.</t> </dd> <dt>iCalendar:</dt> <dd> <t>Refers to Internet Calendaring per <xref target="RFC5545"/>.</t> </dd> <dt>Interval:</dt> <dd> <t>Refers to an integer that specifies the interval at which a recurrence rule repeats. Values are taken from the "INTERVAL" rule in <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>.</t> </dd> <dt/> <dd> <t>For example,"1","1" means every second for a secondly rule, every minute for a minutely rule, every hour for an hourly rule, etc.</t> </dd> <dt>System:</dt> <dd> <t>Refers to an entity that hosts a schedule that is managed using the YANG module defined in this document.</t> </dd> </dl> <t>"schedule-status-*" refers to any of "schedule-status", "schedule-status-with-time-zone", and "schedule-status-with-name".</t> </section> <section anchor="sec-overview"> <name>Module Overview</name> <section anchor="sec-features"> <name>Features</name> <t>The "ietf-schedule" data model defines therecurrence relatedrecurrence-related groupings using a modular approach. To that aim, a variety of representations of recurrence groupings ranging from basic to advanced (iCalender-like) are defined. To allow for different options, two features are defined in the data model:</t> <ul spacing="normal"> <li> <t>"basic-recurrence"</t> </li> <li> <t>"icalendar-recurrence"</t> </li> </ul> <t>Refer toSections<xrefformat="counter"target="sec-aug"/> and <xrefformat="counter"target="features"/> for the use of these features.</t> </section> <section anchor="sec-types"> <name>Types and Identities</name> <t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines the following identities:</t> <ul spacing="normal"> <li> <t>"schedule-type": Indicates the type ofaschedule. The following types are defined so far: </t> <ul spacing="normal"> <li> <t>one-shot:TheThis type is used for a schedulewill triggerthat triggers an action that has either the duration specified as 0 or the end time specified as the same as the start time, and then the schedule will disable itself (<xref section="3.3" sectionFormat="of" target="RFC3231"/>).</t> </li> <li> <t>period:The scheduleThis type is used for a period-based schedule consisting of either (1) a start and end or (2) a start and positive duration of time. If neither an end nor a duration is indicated, the period is considered to last forever.</t> </li> <li> <t>recurrence: This type is used for a recurrence-based schedule. A recurrence may be periodic (i.e., repeat over the same period, e.g., every five minutes) or not (i.e., repeat in a non-regular manner, e.g., every day at 8 and 9 AM).</t> </li> </ul> </li> <li> <t>"frequency-type": Characterizes the repeating interval rule of a recurrence schedule (secondly, minutely, etc.).</t> </li> <li> <t>"schedule-state": Indicates the status of a schedule (enabled, disabled, conflicted, finished, etc.). This identity can also be used to manage the state of individual instances of a recurrence-based schedule.</t> </li> <li> <t>"discard-action-type": Specifies the action for the responder to take (e.g., generate a warning or an error message) when a requested schedule cannot be accepted for any reason and is discarded.</t> </li> </ul> </section> <section anchor="sec-grp"> <name>Scheduling Groupings</name> <t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines the following groupings:</t> <ul spacing="normal"> <li> <t>"generic-schedule-params" (<xref target="sec-gen"/>)</t> </li> <li> <t>"period-of-time" (<xref target="sec-period"/>)</t> </li> <li> <t>"recurrence-basic" (<xref target="sec-rec"/>)</t> </li> <li> <t>"recurrence-utc" (<xref target="sec-rec-utc"/>)</t> </li> <li> <t>"recurrence-with-time-zone" (<xref target="sec-rec-tz"/>)</t> </li> <li> <t>"recurrence-utc-with-periods" (<xref target="sec-rec-utc-dt"/>)</t> </li> <li> <t>"recurrence-time-zone-with-periods" (<xref target="sec-rec-tz-dt"/>)</t> </li> <li> <t>"icalendar-recurrence" (<xref target="sec-ical-rec"/>)</t> </li> <li> <t>"schedule-status", "schedule-status-with-time-zone", and "schedule-status-with-name" (<xref target="sec-schedule-status"/>)</t> </li> </ul> <t>Examples are provided in <xref target="usage"/>.</t> <section anchor="sec-gen"> <name>The "generic-schedule-params" Grouping</name> <t>A system accepts and handles schedule requests, which may help further automate the scheduling process of events,policy,policies, services, or resources based on date and time. The "generic-schedule-params" grouping (<xref target="gsp-tree"/>) specifies a set of configuration parameters that are used by a system for validating requested schedules.</t> <figure anchor="gsp-tree"> <name>'generic-schedule-params' Grouping Tree Structure</name><artwork><![CDATA[<sourcecode type="yangtree"><![CDATA[ grouping generic-schedule-params: +-- description? string +-- time-zone-identifier? sys:timezone-name +-- validity? yang:date-and-time +-- max-allowed-start? yang:date-and-time +-- min-allowed-start? yang:date-and-time +-- max-allowed-end? yang:date-and-time +-- discard-action? identityref]]></artwork>]]></sourcecode> </figure> <t>The "description" parameter includes a description of the schedule. No constraint is imposed on the structure nor the use of this parameter.</t> <t>The "time-zone-identifier" parameter, if provided, specifies the time zone reference <xref target="RFC7317"/> of the local date and time values. This parameter <bcp14>MUST</bcp14> be specified if any of the date and time values are in the format of local time. It <bcp14>MUST NOT</bcp14> be applied to date and time valueswhichthat are specified in the format of UTC or time zone offset to UTC.</t> <t>The "validity" parameter specifies the date and time after which a schedule will not be considered as valid. It determines the latest time that a schedule can be startedto execute independent ofand thus executed independently from when itendsends, and it takes precedence over similar attributes that are provided at the schedule instance itself. A requested schedule may still beacceptedaccepted, but any occurrences that start later than the configured value will not be executed.</t> <t>The "max/min-allowed-start" parameters specify the maximum/minimum scheduled start date and time. A requested schedule will be rejected if the first occurrence of the schedule starts later/earlier than the configured values.</t> <t>The "max-allowed-end" parameter specifies the maximum allowed end time of the last occurrence. A requested schedule will be rejected if the end time of the last occurrence is later than the configured "max-allowed-end" value.</t> <t>The "discard-action" parameter specifies the action if a requested schedule cannot be accepted for any reason and is discarded. Possible reasons include, but are not limited to, the requested schedule failing to satisfy the guards in this grouping, conflicting with existing schedules, or being out-of-date (e.g., the expected startishas already passed).</t> <t>These parameters apply to all schedules on a system and are meant to provide guards against stale configuration,too shortschedule requests that are too short and that would thus prevent validation by admins of some critical systems, etc.</t> </section> <section anchor="sec-period"> <name>The "period-of-time" Grouping</name> <t>The "period-of-time" grouping (<xref target="pt-tree"/>) represents a time period using either a start date and time ("period-start") and end date and time("period-end"),("period-end") or a start date and time ("period-start") and a non-negative time duration ("duration"). For the first format, the start of the period <bcp14>MUST</bcp14> be no later than the end of the period. If neither an end date and time ("period-end") nor a duration ("duration") is indicated, the period is considered to last forever. If the duration ("duration") value is 0 or the end time ("period-end") is the same as the start time ("period-start"), the period is considered as a one-shot schedule. If no start date and time ("period-start") is specified, the period is considered to start immediately.</t> <t>The "time-zone-identifier" parameter indicates the identifier for the time zone. This parameter <bcp14>MUST</bcp14> be specified if either the "period-start" or "period-end" value is reported in local time format. It <bcp14>MUST NOT</bcp14> be applied to date and time valueswhichthat are specified in the format of UTC or time zone offset to UTC.</t> <t>The "period-description" parameter includes a description of the period. No constraint is imposed on the structure nor the use of this parameter.</t> <figure anchor="pt-tree"> <name>'period-of-time' Grouping Tree Structure</name><artwork><![CDATA[<sourcecode type="yangtree"><![CDATA[ grouping period-of-time: +-- period-description? string +-- period-start? yang:date-and-time +-- time-zone-identifier? sys:timezone-name +-- (period-type)? +--:(explicit) | +-- period-end? yang:date-and-time +--:(duration) +-- duration? duration]]></artwork>]]></sourcecode> </figure> </section> <section anchor="sec-rec"> <name>The "recurrence-basic" Grouping</name> <t>The "recurrence-basic" grouping (<xref target="rec-grp-tree"/>) specifies a simple recurrence rulewhichthat starts immediately and repeats forever.</t> <figure anchor="rec-grp-tree"> <name>'recurrence-basic' Grouping Tree Structure</name><artwork><![CDATA[<sourcecode type="yangtree"><![CDATA[ grouping recurrence-basic: +-- recurrence-description? string +-- frequency? identityref +-- interval? uint32]]></artwork>]]></sourcecode> </figure> <t>The frequency parameter ("frequency") identifies the type ofarecurrence rule. For example, a "daily" frequency value specifies repeating events based on an interval of a day or more.</t> <t>Consistent with <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>, the interval parameter ("interval") represents at which interval the recurrence rule repeats. For example, within a "daily" recurrence rule, an interval value of "8" means every eight days.</t> <t>Notethatthat, per <xref section="4.13" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>,neither ano "default"nor a "mandatory"substatement is defined here for both "frequency" and "interval" parameters because there are cases (e.g., profiling) where using these statements is problematic. No "mandatory" substatement is defined here for the same reason. YANG modules using this grouping <bcp14>SHOULD</bcp14> refine these two nodes with either a "mandatory" or a "default"statement,statement if they always need to be configured or have default values. This recommendation <bcp14>MAY</bcp14> be ignored in cases such as when this grouping is used by another grouping.</t> <t>The "recurrence-description" parameter includes a description of the period. No constraint is imposed on the structure nor the use of this parameter.</t> </section> <section anchor="sec-rec-utc"> <name>The "recurrence-utc" Grouping</name> <t>The "recurrence-utc" grouping (<xref target="rec-utc-grp-tree"/>) uses the "recurrence-basic" grouping (<xref target="sec-rec"/>) and specifies a simple recurrence rule in UTC format.</t> <figure anchor="rec-utc-grp-tree"> <name>'recurrence-utc' Grouping Tree Structure</name><artwork><![CDATA[<sourcecode type="yangtree"><![CDATA[ grouping recurrence-utc: +-- recurrence-first | +-- start-time-utc? yang:date-and-time | +-- duration? uint32 +-- (recurrence-end)? | +--:(until) | | +-- utc-until? yang:date-and-time | +--:(count) | +-- count? uint32 +-- recurrence-description? string +-- frequency? identityref +-- interval? uint32]]></artwork>]]></sourcecode> </figure> <t>The "start-time-utc" parameter indicates the start time in UTC format.</t> <t>The "duration" parameter specifies, in units of seconds, the time period of the first occurrence. Unless specified otherwise (e.g., through additional augmented parameters), the "duration" also applies to subsequent recurrence instances. When unspecified, each occurrence is considered as immediate completion (e.g., execute an immediate command that is considered to complete quickly) or hard to compute an exact duration (e.g., run a data analysis script whose execution time may depend on the data volume and computation resource availability). The behavior to follow when a task takes more time than specified by the "duration" is out of scope. Such considerations belong to task management, not schedule management.</t> <t>Note that the "interval" and "duration" cover two distinct properties of a schedule event. The interval specifies when a schedule will occur, combined with the frequencyparameter;parameter, while the duration indicates how long an occurrence will last. This document allows the interval between occurrences to be shorter than the duration of each occurrence (e.g., a recurring event is scheduled to start every day for a duration of 2 days).</t> <t>The repetition can be scoped by a specified end time or by a count of occurrences, indicated by the "recurrence-end" choice. The "count" value <bcp14>MUST</bcp14> be greater than 1, and the "start-time-utc" value always counts as the first occurrence.</t> <t>The "recurrence-utc" grouping is designed to be reused in scheduling contexts where machine readability is more desirable.</t> </section> <section anchor="sec-rec-tz"> <name>The "recurrence-with-time-zone" Grouping</name> <t>The "recurrence-with-time-zone" grouping (<xref target="rec-tz-grp-tree"/>) uses the "recurrence-basic" grouping (<xref target="sec-rec"/>) and specifies a simple recurrence rule with a time zone.</t> <figure anchor="rec-tz-grp-tree"> <name>'recurrence-with-time-zone' Grouping Tree Structure</name><artwork><![CDATA[<sourcecode type="yangtree"><![CDATA[ grouping recurrence-with-time-zone: +-- recurrence-first | +-- start-time? yang:date-and-time | +-- duration? duration +-- time-zone-identifier? sys:timezone-name +-- (recurrence-end)? | +--:(until) | | +-- until? yang:date-and-time | +--:(count) | +-- count? uint32 +-- recurrence-description? string +-- frequency? identityref +-- interval? uint32]]></artwork>]]></sourcecode> </figure> <t>The "recurrence-first" container includes "start-time" and "duration" parameters to specify the start time and period of the first occurrence. Unless specified otherwise (e.g., through additional augmented parameters), the "duration" also applies to subsequent recurrence instances. When unspecified, each occurrence is considered as immediate completion (e.g., execute an immediate command that is considered to complete quickly) or hard to compute an exact duration (e.g., run a data analysis script whose execution time may depend on the data volume and computation resource availability).</t> <t>The grouping also includes a "time-zone-identifier"parameterparameter, which <bcp14>MUST</bcp14> be specified if either the "start-time" or "until" value is reported in local time format. It <bcp14>MUST NOT</bcp14> be applied to date and time valueswhichthat are specified in the format of UTC or time zone offset to UTC.</t> <t>The repetition can be scoped by a specified end time or by a count of occurrences, indicated by the "recurrence-end" choice. The "count" value <bcp14>MUST</bcp14> be greater than 1, and the "start-time" value always counts as the first occurrence.</t> <t>The considerations discussed in <xref target="sec-rec-utc"/> for "interval" and "duration" are also applicable to "recurrence-with-time-zone".</t> <t>Unlike the definition of the "recurrence-utc" grouping (<xref target="sec-rec-utc"/>), "recurrence-with-time-zone" is intended to promote human readability over machine readability.</t> </section> <section anchor="sec-rec-utc-dt"> <name>The "recurrence-utc-with-periods" Grouping</name> <t>The "recurrence-utc-with-periods" grouping (<xref target="rec-utc-dt-grp-tree"/>) uses the "recurrence-utc" grouping (<xref target="sec-rec-utc"/>) and adds a "period-timeticks" list to define an aggregate set of repeating occurrences.</t> <figure anchor="rec-utc-dt-grp-tree"> <name>'recurrence-utc-with-periods' Grouping Tree Structure</name><artwork><![CDATA[<sourcecode type="yangtree"><![CDATA[ grouping recurrence-utc-with-periods: +-- recurrence-first | +-- start-time-utc? yang:date-and-time | +-- duration? uint32 +-- (recurrence-end)? | +--:(until) | | +-- utc-until? yang:date-and-time | +--:(count) | +-- count? uint32 +-- recurrence-description? string +-- frequency? identityref +-- interval? uint32 +-- period-timeticks* [period-start] +-- period-start yang:timeticks +-- period-end? yang:timeticks]]></artwork>]]></sourcecode> </figure> <t>The recurrence instances are specified by the union of occurrences defined by both the recurrence rule and "period-timeticks" list. This list uses the "yang:timeticks" type defined in <xreftarget="RFC6991"/>.target="RFC9911"/>. Duplicate instances are ignored. The value of the "period-start" instance <bcp14>MUST NOT</bcp14> exceed the valueindicated by the valueof the "frequency" instance, i.e., thetimeticks"timeticks" value must not exceed 100 in a secondly recurrence rule, and it must not exceed 6000 in a minutely recurrence rule, and so on.</t> </section> <section anchor="sec-rec-tz-dt"> <name>The "recurrence-time-zone-with-periods" Grouping</name> <t>The "recurrence-time-zone-with-periods" grouping (<xref target="rec-tz-dt-grp-tree"/>) uses the "recurrence-with-time-zone" grouping (<xref target="sec-rec-tz"/>) and adds a "period" list to define an aggregate set of repeating occurrences.</t> <figure anchor="rec-tz-dt-grp-tree"> <name>'recurrence-time-zone-with-periods' Grouping Tree Structure</name><artwork><![CDATA[<sourcecode type="yangtree"><![CDATA[ grouping recurrence-time-zone-with-periods: +-- recurrence-first | +-- start-time? yang:date-and-time | +-- duration? duration +-- time-zone-identifier? sys:timezone-name +-- (recurrence-end)? | +--:(until) | | +-- until? yang:date-and-time | +--:(count) | +-- count? uint32 +-- recurrence-description? string +-- frequency? identityref +-- interval? uint32 +-- period* [period-start] +-- period-description? string +-- period-start yang:date-and-time +-- time-zone-identifier? sys:timezone-name +-- (period-type)? +--:(explicit) | +-- period-end? yang:date-and-time +--:(duration) +-- duration? duration]]></artwork>]]></sourcecode> </figure> <t>The recurrence instances are specified by the union of occurrences defined by both the recurrence rule and "period" list. Duplicate instances are ignored.</t> </section> <section anchor="sec-ical-rec"> <name>The "icalendar-recurrence" Grouping</name> <t>The "icalendar-recurrence" grouping (<xref target="ical-grp-tree"/>) uses the "recurrence-time-zone-with-periods" grouping (<xref target="sec-rec-tz-dt"/>) and defines more data nodes to enrich the definition of recurrence. The structure of the "icalendar-recurrence" grouping refers to the definition of the recurrence component defined in Sections <xref target="RFC5545" section="3.3.10" sectionFormat="bare"/> and <xref target="RFC5545" section="3.8.5" sectionFormat="bare"/> of <xref target="RFC5545"/>.</t> <figure anchor="ical-grp-tree"> <name>'icalendar-recurrence' Grouping Tree Structure</name><artwork><![CDATA[<sourcecode type="yangtree"><![CDATA[ grouping icalendar-recurrence: +-- recurrence-first | +-- start-time? yang:date-and-time | +-- duration? duration +-- time-zone-identifier? sys:timezone-name +-- (recurrence-end)? | +--:(until) | | +-- until? yang:date-and-time | +--:(count) | +-- count? uint32 +-- recurrence-description? string +-- frequency? identityref +-- interval? uint32 +-- period* [period-start] | +-- period-description? string | +-- period-start yang:date-and-time | +-- time-zone-identifier? sys:timezone-name | +-- (period-type)? | +--:(explicit) | | +-- period-end? yang:date-and-time | +--:(duration) | +-- duration? duration +-- bysecond* uint32 +-- byminute* uint32 +-- byhour* uint32 +-- byday* [weekday] | +-- direction* int32 | +-- weekday schedule:weekday +-- bymonthday* int32 +-- byyearday* int32 +-- byyearweek* int32 +-- byyearmonth* uint32 +-- bysetpos* int32 +-- workweek-start? schedule:weekday +-- exception-dates* yang:date-and-time]]></artwork>]]></sourcecode> </figure> <t>An array of the "bysecond" (or"byminute","byminute" or "byhour") specifies a list of seconds within a minute (or minutes within anhour,hour or hours of the day). For example, within a "minutely" recurrence rule, the values of "byminute" node "10" and "20"meansmean the occurrences are generated at the 10th and 20th minute within an hour, reducing the number of recurrence instances from all minutes.</t> <t>The parameter "byday" specifies a list of days of the week, with an optional directionwhichthat indicates the nth occurrence of a specific day within the "monthly" or "yearly" frequency instance. Valid values of "direction" are 1 to 5 or -5 to -1 within a "monthly" recurrencerule;rule and 1 to 53 or -53 to -1 within a "yearly" recurrence rule. For example, within a "monthly" rule, the "weekday" with a value of "monday" and the "direction" with a value of "-1" represents the last Monday of the month.</t> <t>An array of the "bymonthday" (or byyearday", "byyearweek", or "byyearmonth") specifies a list of days of the month (or days of the year, weeks of the year, or months of the year). For example, within a "yearly" recurrence rule, the values of "byyearmonth"instanceinstances "1" and "2"meansmean the occurrences are generated in January and February, increasing the "yearly" recurrence from every year to every January and February of the year.</t> <t>The "bysetpos" conveys a list of values that corresponds to the nth occurrence within the set of recurrence instances to be specified. For example, in a "monthly" recurrence rule, the "byday" data node specifies every Monday of the week, and the "bysetpos" with a value of "-1" represents the last Monday of the month. Not setting the "bysetpos" data node represents every Monday of the month.</t> <t>The "workweek-start" data node specifies the day on which the week starts. This is significant when a "weekly" recurrence rule has an interval greater than 1, and a "byday" data node is specified. This is also significant when in a "yearly" rule and a "byyearweek" is specified. Notethatthat, per <xref section="4.13" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>,neither ano "default"nor a "mandatory"substatement is defined here because there are cases (e.g., profiling) where using these statements is problematic. No "mandatory" substatement is defined here for the same reason. YANG modules using this grouping <bcp14>SHOULD</bcp14> refine the "workweek-start" node with either a "mandatory" or a "default"statement,statement if it always needs to be configured or has a default value. This <bcp14>MAY</bcp14> be ignored in cases such as when this grouping is used by another grouping.</t> <t>The "exception-dates" data node specifies a list of exceptions for recurrence. The final recurrence set is generated by gathering all of the date and time values created by any of the specified recurrencerulerules anddate-times,date-times and then excluding any start date and time values specified by "exception-dates" parameter.</t> </section> <section anchor="sec-schedule-status"> <name>The "schedule-status", "schedule-status-with-time-zone", and "schedule-status-with-name" Groupings</name> <t>The "schedule-status", "schedule-status-with-time-zone", and "schedule-status-with-name" groupings (<xref target="sche-status-tree"/>) define common parameters for scheduling management/status exposure. The "schedule-status-with-time-zone" grouping has the same structure as "schedule-status" but with an additional parameter to identify a time zone. Similarly, the "schedule-status-with-name" grouping has the same structure as "schedule-status" but with an additional parameter to identify a schedule "schedule-name". These structures are defined in the module to allow for better modularity and flexibility.</t> <figure anchor="sche-status-tree"> <name>'schedule-status-*' Groupings Tree Structure</name><artwork><![CDATA[<sourcecode type="yangtree"><![CDATA[ grouping schedule-status: +-- state? identityref +-- version? uint16 +-- schedule-type? identityref +--ro local-time? yang:date-and-time +--ro last-update? yang:date-and-time +--ro counter? yang:counter32 +--ro last-occurrence? yang:date-and-time +--ro upcoming-occurrence? yang:date-and-time +--ro last-failed-occurrence? yang:date-and-time +--ro failure-counter? yang:counter32 grouping schedule-status-with-time-zone: +--ro time-zone-identifier? sys:timezone-name +-- schedule-name? string +-- state? identityref +-- version? uint16 +-- schedule-type? identityref +--ro local-time? yang:date-and-time +--ro last-update? yang:date-and-time +--ro counter? yang:counter32 +--ro last-occurrence? yang:date-and-time +--ro upcoming-occurrence? yang:date-and-time +--ro last-failed-occurrence? yang:date-and-time +--ro failure-counter? yang:counter32 grouping schedule-status-with-name: +-- schedule-name? string +-- state? identityref +-- version? uint16 +-- schedule-type? identityref +--ro local-time? yang:date-and-time +--ro last-update? yang:date-and-time +--ro counter? yang:counter32 +--ro last-occurrence? yang:date-and-time +--ro upcoming-occurrence? yang:date-and-time +--ro last-failed-occurrence? yang:date-and-time +--ro failure-counter? yang:counter32]]></artwork>]]></sourcecode> </figure> <t>The "schedule-name" parameter is useful to uniquely identify a schedule in a network device or controller if multiple scheduling contexts exist.</t> <t>The "state" parameter is defined to configure/expose the scheduling state, depending on the use of the grouping. For a recurrence-based schedule, it represents the state of the overall recurrence. The "identityref" type is used for this parameter to allow extensibility in future modules.</t> <t>The "version" parameter is used to track the current schedule version information. The version can be incremented by the entity that created the schedule. The "last-update" parameter identifies when the schedule was last modified. In some contexts, this parameter can be used to track the configuration of a given schedule. In such cases, the "version" may not be used.</t> <t>The "schedule-type" parameter identifies the type of the current schedule. The "counter", "last-occurrence", and "upcoming-occurrence" data nodes are only available when the "schedule-type" is "recurrence".</t> <t>When no time zone is included, "local-time" reports the actual local time as seen by the entity that hosts a schedule. This parameter can be used by a controller to infer the offset to UTC. This use is similar to the use of "schedLocalTime" in <xref target="RFC3231"/>.</t> <t>"last-failed-occurrence" and "failure-counter" report the last failure that occurred and the count of failures for this schedule. Unless new parameters/operations are defined to allow the count of failures to be reset, "failure-counter" is reset by default only when the schedule starts.</t> <t>The current groupings capture common parameters that are applicable to typical scheduling contexts known so far. Future modules can define other useful parameters as needed. For example, in a scheduling context with multiple system sources to feed the schedules, the "source" and "precedence" parameters may be needed to reflect how schedules from different sources should be prioritized.</t> </section> </section> <section anchor="sec-aug"> <name>Features Use and Augmentations</name> <t><xref target="features"/> provides an example about how the features defined in <xref target="sec-features"/> can be used. Implementations may support a basic recurrence rule or an advancedoneone, as needed, by declaring different features. Whether only one or both features are supported is implementation specific and depends on the specific scheduling context.</t> <t>The common schedule groupings (<xref target="sec-grp"/>) can also be augmented to support specific needs. As an example, <xref target="augments"/> demonstrates how additional parameters can be added to comply with specific schedule needs.</t> </section> </section> <section anchor="some-usage-restrictions"> <name>Some Usage Restrictions</name> <t>There are some restrictions that need to be followed when using groupings defined in the "ietf-schedule" YANG module (<xref target="sec-grp"/>):</t> <ul spacing="normal"> <li> <t>The instant in time represented by "period-start" <bcp14>MUST</bcp14> be before the "period-end" for the "period-of-time" grouping (<xref target="sec-period"/>).</t> </li> <li> <t>The combination of the day, month, and year represented for date and time values <bcp14>MUST</bcp14> be valid. See <xref section="5.7" sectionFormat="of" target="RFC3339"/> for the maximum day number based on the month and year.</t> </li> <li> <t>Unless deployed in contexts where time synchronization is not subject to leap second adjustments (e.g., <xref section="4.3" sectionFormat="of" target="I-D.ietf-ntp-ntpv5"/>), the second for date and time values <bcp14>SHOULD</bcp14> have the value "60" at the end of months in which a leap second occurs.</t> </li> <li> <t>Schedules received with a starting time in the past with respect to current time <bcp14>SHOULD</bcp14> be ignored. When a local policy is provided, an implementation <bcp14>MAY</bcp14> omit the past occurrences and start immediately (e.g., for a period-based schedule) orstartsstart from the date and time when the recurrence pattern is first satisfied from the current time (e.g., for a recurrence-based schedule).</t> </li> </ul> </section> <section anchor="sec-mib"> <name>Relationship to the DISMAN-SCHEDULE-MIB</name> <t><xref target="RFC3231"/> specifies a Management Information Base (MIB) used to schedule management operations periodically or at specified dates and times.</t> <t>Although no data nodes are defined in this document, <xref target="mapping"/> lists how the main objects in the DISMAN-SCHEDULE-MIB can be mapped to YANG parameters.</t> <table anchor="mapping"> <name>YANG/MIB Mapping</name> <thead> <tr> <th align="left">MIB Object</th> <th align="left">YANG</th> </tr> </thead> <tbody> <tr> <td align="left">schedLocalTime</td> <td align="left">local-time</td> </tr> <tr> <td align="left">schedType</td> <td align="left">schedule-type</td> </tr> <tr> <td align="left">schedName</td> <td align="left">schedule-name</td> </tr> <tr> <td align="left">schedOwner</td> <td align="left">Not Supported</td> </tr> <tr> <td align="left">schedDescr</td> <td align="left">description</td> </tr> <tr> <td align="left">schedInterval</td> <td align="left">interval</td> </tr> <tr> <td align="left">schedWeekDay</td> <td align="left">weekday</td> </tr> <tr> <td align="left">schedMonth</td> <td align="left">byyearmonth</td> </tr> <tr> <td align="left">schedDay</td> <td align="left">bymonthday</td> </tr> <tr> <td align="left">schedHour</td> <td align="left">byhour</td> </tr> <tr> <td align="left">schedMinute</td> <td align="left">byminute</td> </tr> <tr> <td align="left">schedContextName</td> <td align="left">Not Supported</td> </tr> <tr> <td align="left">schedAdminStatus</td> <td align="left">state</td> </tr> <tr> <td align="left">schedOperStatus</td> <td align="left">state</td> </tr> <tr> <td align="left">schedFailures</td> <td align="left">failure-counter</td> </tr> <tr> <td align="left">schedLastFailure</td> <td align="left">Not Supported</td> </tr> <tr> <td align="left">schedLastFailed</td> <td align="left">last-failed-occurrence</td> </tr> <tr> <td align="left">schedStorageType</td> <td align="left">Not Supported</td> </tr> <tr> <td align="left">schedVariable</td> <td align="left">Not applicable</td> </tr> <tr> <td align="left">schedValue</td> <td align="left">Not applicable</td> </tr> <tr> <td align="left">schedTriggers</td> <td align="left">counter/failure-counter</td> </tr> </tbody> </table> </section> <section anchor="sec-schedule"> <name>The "ietf-schedule" YANG Module</name> <t>This module imports types defined in <xreftarget="RFC6991"/>target="RFC9911"/> and <xref target="RFC7317"/>.</t> <sourcecodemarkers="true" name="ietf-schedule@2025-05-30.yang"><![CDATA[type="yang" markers="true"><![CDATA[ file "ietf-schedule@2026-02-18.yang" module ietf-schedule { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-schedule"; prefix schedule; import ietf-yang-types { prefix yang; reference "RFC6991:9911: Common YANG Data Types"; } import ietf-system { prefix sys; reference "RFC 7317: A YANG Data Model for System Management"; } organization "IETF NETMOD Working Group"; contact "WG Web: <https://datatracker.ietf.org/wg/netmod/> WG List: <mailto:netmod@ietf.org> Editor: Qiufang Ma<mailto:maqiufang1@huawei.com<mailto:maqiufang1@huawei.com> Author: Qin Wu <mailto:bill.wu@huawei.com> Editor: Mohamed Boucadair <mailto:mohamed.boucadair@orange.com> Author: Daniel King <mailto:d.king@lancaster.ac.uk>"; description "This YANG module defines a set of common types and groupingswhichthat are applicable for schedulingpurposespurposes, such as events,policy,policies, services, or resources based on date and time. The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document are to be interpreted as described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here. Copyright (c)20252026 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Revised BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info).All revisions of IETF and IANA published modules can be found at the YANG Parameters registry group (https://www.iana.org/assignments/yang-parameters).This version of this YANG module is part of RFCXXXX;9922; see the RFC itself for full legal notices.The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 'MAY',All revisions of IETF and'OPTIONAL' in this document are toIANA-maintained modules can beinterpreted as described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appearfound inall capitals, as shown here.";the 'YANG Parameters' registry group (https://www.iana.org/assignments/yang-parameters)."; revision2025-05-302026-02-18 { description "Initial revision."; reference "RFCXXXX:9922: A Common YANG Data Model for Scheduling"; } feature basic-recurrence { description "Indicates that the server supports configuring a basic scheduled recurrence."; } feature icalendar-recurrence { description "Indicates that the server supports configuring a comprehensive scheduled iCalendarrecurrence";recurrence."; reference "RFC 5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar), Sections 3.3.10 and 3.8.5"; } typedef weekday { type enumeration { enum sunday { value 0; description "Sunday of the week."; } enum monday { value 1; description "Monday of the week."; } enum tuesday { value 2; description "Tuesday of the week."; } enum wednesday { value 3; description "Wednesday of the week."; } enum thursday { value 4; description "Thursday of the week."; } enum friday { value 5; description "Friday of the week."; } enum saturday { value 6; description "Saturday of the week."; } } description "Seven days of the week."; } typedef duration { type string { pattern '((\+)?|\-)P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])' + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W'; } description "Duration of the time. The format can represent nominal durations (weeks designated by 'W' and days designated by 'D') and accurate durations (hours:minutes:seconds follows the designator 'T'). Note that this value type doesn't support the 'Y' and 'M' designators to specify durations in terms of years and months. Negative durations are typically used to schedule an alarm to trigger before an associated time."; reference "RFC 5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar), Sections 3.3.6 and 3.8.6.3"; } identity schedule-type { description "Base identity for schedule type."; } identity one-shot { base schedule-type; description "Indicates a one-shot schedule. That is a schedule that will trigger an action with the duration being specified as 0 or end time being specified as the same as the start time, and then the schedule will disable itself."; } identity period { base schedule-type; description "Indicates a period-based schedule consisting of either a start and end or a start and positive duration of time. If neither an end nor a duration is indicated, the period is considered to last forever."; } identity recurrence { base schedule-type; description "Indicates a recurrence-based schedule."; } identity frequency-type { description "Base identity for frequency type."; } identity secondly { base frequency-type; description "Indicates a repeating rule based on an interval of a second or more."; } identity minutely { base frequency-type; description "Indicates a repeating rule based on an interval of a minute or more."; } identity hourly { base frequency-type; description "Indicates a repeating rule based on an interval of an hour or more."; } identity daily { base frequency-type; description "Indicates a repeating rule based on an interval of a day or more."; } identity weekly { base frequency-type; description "Indicates a repeating rule based on an interval of a week or more."; } identity monthly { base frequency-type; description "Indicates a repeating rule based on an interval of a month or more."; } identity yearly { base frequency-type; description "Indicates a repeating rule based on an interval of a year or more."; } identity schedule-state { description "Base identity for schedule state."; } identity enabled { base schedule-state; description "Indicates a schedule with an enabled state."; } identity finished { base schedule-state; description "Indicates a schedule with a finished state. The finished state indicates that the schedule has ended."; } identity disabled { base schedule-state; description "Indicates a schedule with a disabled state."; } identity out-of-date { base schedule-state; description "Indicates a schedule that is received out-of-date."; } identity conflicted { base schedule-state; description "Indicates a schedule with a conflicted state with other schedules."; } identity discard-action-type { description "Base identity for the action for the responder to take when a requested schedule cannot be accepted for any reason and is discarded."; } identity warning { base discard-action-type; description "Indicates that a warning message is generated when a schedule is discarded."; } identity error { base discard-action-type; description "Indicates that an error message is generated when a schedule is discarded."; } identity silently-discard { base discard-action-type; description "Indicates that a schedule that is not valid is silently discarded."; } grouping generic-schedule-params { description "Includes a set of generic parameters that are followed by the entity that supports schedules. Such parameters are used as guards to prevent, e.g., stale configuration."; leaf description { type string; description "Provides a description of the schedule."; } leaf time-zone-identifier { type sys:timezone-name; description "Indicates the identifier for the time zone. This parameter MUST be specified if any of the date and time values are in the format of local time. It MUST NOT be applied to date and time valueswhichthat are specified in the format of UTC or time zone offset to UTC."; } leaf validity { type yang:date-and-time; description "Specifies the date and time after which a schedule will not be considered as valid. This parameter takes precedence over similar attributes that are provided at the schedule instance itself."; } leaf max-allowed-start { type yang:date-and-time; description "Specifies the maximum scheduled start date and time. A requested schedule whose first instance occurs after this value cannot be accepted by the entity. Specifically, a requested schedule will be rejected if the first occurrence of that schedule exceeds 'max-allowed-start'."; } leaf min-allowed-start { type yang:date-and-time; description "Specifies the minimum scheduled start date and time. A requested schedule whose first instance occurs before this value cannot be accepted by the entity. Specifically, a requested schedule will be rejected if the first occurrence of that schedule is scheduled before 'min-allowed-start'."; } leaf max-allowed-end { type yang:date-and-time; description "A requested schedule will be rejected if the end time of the last occurrence exceeds 'max-allowed-end'."; } leaf discard-action { type identityref { base discard-action-type; } description "Specifies the behavior when a schedule is discarded for any reason, e.g., failing to satisfy the guards in this grouping orit isbeing received out-of-date."; } } grouping period-of-time { description "This grouping is defined for the period of time property."; reference "RFC 5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar), Section 3.3.9"; leaf period-description { type string; description "Provides a description of the period."; } leaf period-start { type yang:date-and-time; description "Period start time."; } leaf time-zone-identifier { type sys:timezone-name; description "Indicates the identifier for the time zone. This parameter MUST be specified if either the 'period-start' or 'period-end' value is reported in local time format. It MUST NOT be applied to date and time valueswhichthat are specified in the format of UTC or time zone offset to UTC."; } choice period-type { description "Indicates the type of the time period. Two types are supported. If no choice is indicated, the period is considered to last forever."; case explicit { description "A period of time is identified by its start and its end. 'period-start' indicates the period start."; leaf period-end { type yang:date-and-time; description "A period of time is defined by a start and end time. The start MUST be no later than the end. The period is considered as a one-shot schedule if the end time is the same as the start time."; } } case duration { description "A period of time is defined by a start and a non-negative duration of time."; leaf duration { type duration { pattern 'P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])' + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W'; } description "A non-negative duration of time. This value is equivalent to the format ofduration'duration' type except that the value cannot be negative. The period is considered to be a one-shot schedule if the value is 0."; } } } } grouping recurrence-basic { description "A simple definition of recurrence."; leaf recurrence-description { type string; description "Provides a description of the recurrence."; } leaf frequency { type identityref { base frequency-type; } description "Specifies the frequency type of the recurrence rule."; } leaf interval { type uint32 { range "1..max"; } must '../frequency' { error-message "Frequency must be provided."; } description "A positive integer representing the interval at which the recurrence rule repeats. For example, within a 'daily' recurrence rule, a value of '8' means every eight days."; } } grouping recurrence-utc { description "A simple definition of recurrence with time specified in UTC format."; container recurrence-first { description "Specifies the first instance of the recurrence. If unspecified, the recurrence is considered to start from the date and time when the recurrence pattern is first satisfied."; leaf start-time-utc { type yang:date-and-time; description "Defines the date and time of the first instance in the recurrence set. A UTC format MUST be used."; } leaf duration { type uint32; units "seconds"; description "When specified, it indicates how long the first occurrence lasts. Unless specified otherwise, it also applies to all the other instances in the recurrence set."; } } choice recurrence-end { description "Modes to control the end of a recurrence rule. If no choice is indicated, the recurrence rule is considered to repeat forever."; case until { description "This case defines a way that limits the end of a recurrence rule in an inclusive manner."; leaf utc-until { type yang:date-and-time; description "This parameter specifies a date and time value to inclusively terminate the recurrence in UTC format. That is, if the value specified by this parameter is synchronized with the specified recurrence rule, it becomes the last instance of the recurrence rule."; } } case count { description "This case defines the number of occurrences at which to terminate the recurrence rule."; leaf count { type uint32 { range "1..max"; } description "The positive number of occurrences at which to terminate the recurrence rule."; } } } uses recurrence-basic; } grouping recurrence-with-time-zone { description "A simple definition of recurrence to specify a recurrence rule with a time zone."; container recurrence-first { description "Specifies the first instance of the recurrence. If unspecified, the recurrence is considered to start from the date and time when the recurrence pattern is first satisfied."; leaf start-time { type yang:date-and-time; description "Defines the date and time of the first instance in the recurrence set."; } leaf duration { type duration; description "When specified, it indicates how long the first occurrencelast.lasts. Unless specified otherwise, it also applies to all the other instances in the recurrence set."; } } leaf time-zone-identifier { type sys:timezone-name; description "Indicates the identifier for the time zone in a time zone database. This parameter MUST be specified if either the 'start-time' or 'until' value is reported in local time format. It MUST NOT be applied to date and time valueswhichthat are specified in the format of UTC or time zone offset to UTC."; } choice recurrence-end { description "Modes to terminate the recurrence rule. If no choice is indicated, the recurrence rule is considered to repeat forever."; case until { description "The end of the recurrence rule is indicated by a specific date-and-time value in an inclusive manner."; leaf until { type yang:date-and-time; description "Specifies a date and time value to inclusively terminate the recurrence.ThatsThat is, if the value specified by this parameter is synchronized with the specified recurrence, it becomes the last instance of the recurrence."; } } case count { description "The end of the recurrence is indicated by the number of occurrences."; leaf count { type uint32 { range "1..max"; } description "The positive number of occurrences at which to terminate the recurrence."; } } } uses recurrence-basic; } grouping recurrence-utc-with-periods { description "This grouping defines an aggregate set of repeating occurrences with UTC time format. The recurrence instances are specified by the occurrences defined by both the recurrence rule and 'period-timeticks' list. Duplicate instances are ignored."; uses recurrence-utc; list period-timeticks { key "period-start"; description "A list of periods with timeticks formats."; leaf period-start { type yang:timeticks; must"(not(derived-from(../../frequency,""(not(derived-from-or-self(../../frequency," + "'schedule:secondly')) or (current() < 100)) and " +"(not(derived-from(../../frequency,""(not(derived-from-or-self(../../frequency," + "'schedule:minutely')) or (current() < 6000)) and " +"(not(derived-from(../../frequency,'schedule:hourly'))""(not(derived-from-or-self(../../frequency," +""'schedule:hourly')) or (current() < 360000)) and " +"(not(derived-from(../../frequency,'schedule:daily'))""(not(derived-from-or-self(../../frequency," +""'schedule:daily')) or (current() < 8640000)) and " +"(not(derived-from(../../frequency,'schedule:weekly'))""(not(derived-from-or-self(../../frequency," +""'schedule:weekly')) or (current() < 60480000)) and " +"(not(derived-from(../../frequency,""(not(derived-from-or-self(../../frequency," + "'schedule:monthly')) or (current() < 267840000)) and " +"(not(derived-from(../../frequency,'schedule:yearly'))""(not(derived-from-or-self(../../frequency," +""'schedule:yearly')) or (current() < 3162240000))" { error-message "Theperiod-start'period-start' must not exceed the frequency interval."; } description "Start time of the schedule within one recurrence. Given that the value is in timeticks format (i.e., 1/100 of a second), the values in the must statement translateto:to 100 =1s1 s (secondly), 6000 = 60 s = 1 min (minutely), and so on for all instances in the must statement invariant."; } leaf period-end { type yang:timeticks; description "End time of the schedule within one recurrence. The period start MUST be no later than the period end."; } } } grouping recurrence-time-zone-with-periods { description "This grouping defines an aggregate set of repeating occurrences with local time format and time zone specified. The recurrence instances are specified by the occurrences defined by both the recurrence rule and 'period' list. Duplicate instances are ignored."; uses recurrence-with-time-zone; list period { key "period-start"; description "A list of periods with date-and-time formats."; uses period-of-time; } } grouping icalendar-recurrence { description "This grouping specifies properties of a recurrence rule."; reference "RFC 5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar), Section 3.8.5"; uses recurrence-time-zone-with-periods; leaf-list bysecond { type uint32 { range "0..60"; } description "Specifies a list of seconds within a minute."; } leaf-list byminute { type uint32 { range "0..59"; } description "Specifies a list of minutes within an hour."; } leaf-list byhour { type uint32 { range "0..23"; } description "Specifies a list of hours of the day."; } list byday { key "weekday"; description "Specifies a list of days of the week."; leaf-list direction { when"derived-from(../../frequency, 'schedule:monthly') or"derived-from-or-self(../../frequency, " +"(derived-from(../../frequency, 'schedule:yearly')"'schedule:monthly') or " +""(derived-from-or-self(../../frequency," + "'schedule:yearly') and not(../../byyearweek))"; type int32 { range "-53..-1|1..53"; } description "When specified, it indicates the nth occurrence of a specific day within the monthly or yearly recurrence rule. For example, within a monthly rule, +1 monday represents the firstmondayMonday within the month, whereas -1 monday represents the lastmondayMonday of the month."; } leaf weekday { type schedule:weekday; description "Corresponds to seven days of the week."; } } leaf-list bymonthday { type int32 { range "-31..-1|1..31"; } description "Specifies a list of days of the month."; } leaf-list byyearday { type int32 { range "-366..-1|1..366"; } description "Specifies a list of days of the year."; } leaf-list byyearweek { when"derived-from(../frequency,"derived-from-or-self(../frequency, 'schedule:yearly')"; type int32 { range "-53..-1|1..53"; } description "Specifies a list of weeks of the year."; } leaf-list byyearmonth { type uint32 { range "1..12"; } description "Specifies a list of months of the year."; } leaf-list bysetpos { type int32 { range "-366..-1|1..366"; } description "Specifies a list of values that corresponds to the nth occurrence within the set of recurrence instances specified by the rule. It must only be used in conjunction with another 'byxxx' (bysecond, byminute, etc.) rulepart .";part."; } leaf workweek-start { type schedule:weekday; description "Specifies the day on which the workweek starts."; } leaf-list exception-dates { type yang:date-and-time; description "Defines a list of exceptions for recurrence."; } } grouping schedule-status { description "This grouping defines common properties of scheduling status."; leaf state { type identityref { base schedule-state; } description "Indicates the current state of the schedule."; } leaf version { type uint16; description "Indicates the version number of the schedule."; } leaf schedule-type { type identityref { base schedule-type; } description "Indicates the schedule type."; } leaf local-time { type yang:date-and-time; config false; description "Reports the local time as used by the entity that hosts the schedule."; } leaf last-update { type yang:date-and-time; config false; description "Reports the timestampthatof when the schedule is last updated."; } leaf counter { when "derived-from-or-self(../schedule-type, " + "'schedule:recurrence')"; type yang:counter32; config false; description "The number of occurrences while invoking the scheduled action successfully. The count wraps around when it reaches the maximum value."; } leaf last-occurrence { when "derived-from-or-self(../schedule-type, " + "'schedule:recurrence')"; type yang:date-and-time; config false; description "Indicates the timestamp of last occurrence."; } leaf upcoming-occurrence { when "derived-from-or-self(../schedule-type, " + "'schedule:recurrence')" + "and derived-from-or-self(../state, 'schedule:enabled')"; type yang:date-and-time; config false; description "Indicates the timestamp of next occurrence."; } leaf last-failed-occurrence { when "derived-from-or-self(../schedule-type, " + "'schedule:recurrence')"; type yang:date-and-time; config false; description "Indicates the timestamp of last failed action triggered by the schedule."; } leaf failure-counter { when "derived-from-or-self(../schedule-type, " + "'schedule:recurrence')"; type yang:counter32; config false; description "Counts the number of failures while invoking the scheduled action."; } } grouping schedule-status-with-time-zone { description "This grouping defines common properties of scheduling status, includingtimezone";timezone."; leaf time-zone-identifier { type sys:timezone-name; config false; description "Indicates the identifier for the time zone in a time zone database."; } uses schedule-status; } grouping schedule-status-with-name { description "This grouping defines common properties of scheduling status, including a schedule name."; leaf schedule-name { type string; description "The schedule identifier that uniquely identifies a schedule within a device, controller, network, etc. The unicity scope depends on the implementation."; } uses schedule-status; } } ]]></sourcecode> </section> <section anchor="security-considerations"> <name>Security Considerations</name> <t>This sectionusesis modeled after the template described in <xref section="3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t> <!--[rfced] *AD - Security Considerations Questions a) FYI - We updated the Security Considerations section to match the template at <https://wiki.ietf.org/group/ops/yang-security-guidelines>. Please review and let us know if any further updates are needed. b) As the Writable nodes, Readable nodes, and RFC/action operations sections are not applicable to this document, do the following sentences need to be added accordingly (per the template)? - "There are no particularly sensitive writable data nodes." - "There are no particularly sensitive readable data nodes." - "There are no particularly sensitive RPC or action operations." c) We note that in the paragraph that relates to the "No data nodes" section, there is a sentence missing (i.e., from the template: "For example, reusing some of these groupings will expose privacy-related information (e.g., 'node-example')". Is that omission intentional or should it be added for clarity? From the template: Modules that use the groupings that are defined in this document should identify the corresponding security considerations. For example, reusing some of these groupings will expose privacy-related information (e.g., 'node-example'). Current text in the document: Modules that use the groupings that are defined in this document should identify the corresponding security considerations, for example: --> <t>The "ietf-schedule" YANG modulespecified in this documentdefinesschema fora data model that is designed to be accessed via YANG-based management protocols, such as NETCONF <xref target="RFC6241"/>orand RESTCONF <xref target="RFC8040"/>. These YANG-based management protocols (1) have to use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and QUIC <xref target="RFC9000"/>) and (2) have to use mutual authentication.</t> <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.</t> <t>The "ietf-schedule" module defines a set oftypesidentities, types, and groupings. These nodes are intended to be reused by other YANG modules. The module by itself does not expose any data nodes that are writable, data nodes that contain read-only state, or RPCs. As such, there are no additional security issues related to the "ietf-schedule" module that need to be considered.</t> <t>Modules that use the groupings that are defined in this document should identify the corresponding securityconsiderations, e.g.,:</t>considerations. For example, reusing the following groupings will expose privacy-related information:</t> <ul spacing="normal"> <li> <t>Scheduling depends on reliable and accurate time synchronization. Inaccurate date and time setting can lead to scheduling events being triggered at incorrect intervals, potentially causing system failures or security vulnerabilities.</t> </li> <li> <t>Recurring events may conceal abnormal behavior or security threats, which may be drowned out by normal events, especially when they are triggered frequently.</t> </li> <li> <t>The absence of detailed logs and audit records of each occurrence trigger time and actionresults,results andso on,therefore may make security incidents difficult to trace.</t> </li> <li> <t>Care must be taken when defining recurrences occurring very often and frequent that can be an additional source of attacks by keeping the system permanently busy with the management of scheduling.</t> </li> </ul> </section> <section anchor="iana-considerations"> <name>IANA Considerations</name> <section anchor="the-ietf-xml-registry"> <name>The"IETF XML"IETF XML Registry</name> <t>This documentregistershas registered the following URI in the "IETF XML Registry" <xref target="RFC3688"/>.</t><artwork><![CDATA[ URI: urn:ietf:params:xml:ns:yang:ietf-schedule Registrant Contact: The IESG. XML: N/A,<dl> <dt>URI:</dt> <dd> <t>urn:ietf:params:xml:ns:yang:ietf-schedule</t> </dd> <dt>Registrant Contact:</dt> <dd> <t>The IESG.</t> </dd> <dt>XML:</dt> <dd> <t>N/A; the requested URI is an XMLnamespace. ]]></artwork>namespace.</t> </dd> </dl> </section> <section anchor="the-yang-module-names-registry"> <name>The"YANGYANG ModuleNames"Names Registry</name> <t>This documentregistershas registered the following YANG module in the "YANG Module Names" registry <xref target="RFC6020"/>.</t><artwork><![CDATA[ name: ietf-schedule namespace: urn:ietf:params:xml:ns:yang:ietf-schedule prefix: schedule maintained by IANA? N reference: RFC XXXX ]]></artwork><dl> <dt>Name:</dt> <dd> <t>ietf-schedule</t> </dd> <dt>Maintained by IANA:</dt> <dd> <t>N</t> </dd> <dt>Namespace:</dt> <dd> <t>urn:ietf:params:xml:ns:yang:ietf-schedule</t> </dd> <dt>Prefix:</dt> <dd> <t>schedule</t> </dd> <dt>Reference:</dt> <dd> <t>RFC 9922</t> </dd> </dl> </section> </section> </middle> <back> <displayreference target="I-D.ietf-netmod-eca-policy" to="NETMOD-ECA-POLICY"/> <displayreference target="I-D.ietf-netmod-rfc8407bis" to="YANG-GUIDE"/> <displayreference target="I-D.ietf-ntp-ntpv5" to="NTPv5"/> <displayreference target="I-D.ietf-opsawg-scheduling-oam-tests" to="YANG-OAM"/> <displayreference target="I-D.ietf-opsawg-ucl-acl" to="YANG-NAC"/> <displayreference target="I-D.ietf-tvr-schedule-yang" to="YANG-SCHEDULE"/> <displayreference target="I-D.liu-netmod-yang-schedule" to="YANG-CONFIG-SCHEDULE"/> <references anchor="sec-combined-references"> <name>References</name> <references anchor="sec-normative-references"> <name>Normative References</name><reference anchor="RFC3231"> <front> <title>Definitions of Managed Objects for Scheduling Management Operations</title> <author fullname="D. Levi" initials="D." surname="Levi"/> <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/> <date month="January" year="2002"/> <abstract> <t>This memo defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. In particular, it describes a set of managed objects that are used to schedule management operations periodically or at specified dates and times. [STANDARDS-TRACK]</t> </abstract> </front> <seriesInfo name="RFC" value="3231"/> <seriesInfo name="DOI" value="10.17487/RFC3231"/> </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> <reference anchor="RFC7950"> <front> <title>The YANG 1.1 Data Modeling Language</title> <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/> <date month="August" year="2016"/> <abstract> <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t> </abstract> </front> <seriesInfo name="RFC" value="7950"/> <seriesInfo name="DOI" value="10.17487/RFC7950"/> </reference> <reference anchor="RFC5545"> <front> <title>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</title> <author fullname="B. Desruisseaux" initials="B." role="editor" surname="Desruisseaux"/> <date month="September" year="2009"/> <abstract> <t>This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK]</t> </abstract> </front> <seriesInfo name="RFC" value="5545"/> <seriesInfo name="DOI" value="10.17487/RFC5545"/> </reference> <reference anchor="RFC7317"> <front> <title>A YANG Data Model for System Management</title> <author fullname="A. Bierman" initials="A." surname="Bierman"/> <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/> <date month="August" year="2014"/> <abstract> <t>This document defines a YANG data model for the configuration and identification of some common system properties within a device containing a Network Configuration Protocol (NETCONF) server. This document also includes data node definitions for system identification, time-of-day management, user management, DNS resolver configuration, and some protocol operations for system management.</t> </abstract> </front> <seriesInfo name="RFC" value="7317"/> <seriesInfo name="DOI" value="10.17487/RFC7317"/> </reference> <reference anchor="RFC6991"> <front> <title>Common YANG Data Types</title> <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/> <date month="July" year="2013"/> <abstract> <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t> </abstract> </front> <seriesInfo name="RFC" value="6991"/> <seriesInfo name="DOI" value="10.17487/RFC6991"/> </reference> <reference anchor="RFC8341"> <front> <title>Network Configuration Access Control Model</title> <author fullname="A. Bierman" initials="A." surname="Bierman"/> <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/> <date month="March" year="2018"/> <abstract> <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t> <t>This document obsoletes RFC 6536.</t> </abstract> </front> <seriesInfo name="STD" value="91"/> <seriesInfo name="RFC" value="8341"/> <seriesInfo name="DOI" value="10.17487/RFC8341"/> </reference> <reference anchor="RFC3688"> <front> <title>The IETF XML Registry</title> <author fullname="M. Mealling" initials="M." surname="Mealling"/> <date month="January" year="2004"/> <abstract> <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t> </abstract> </front> <seriesInfo name="BCP" value="81"/> <seriesInfo name="RFC" value="3688"/> <seriesInfo name="DOI" value="10.17487/RFC3688"/> </reference> <reference anchor="RFC6020"> <front> <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title> <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/> <date month="October" year="2010"/> <abstract> <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t> </abstract> </front> <seriesInfo name="RFC" value="6020"/> <seriesInfo name="DOI" value="10.17487/RFC6020"/> </reference><xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3231.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7950.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5545.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7317.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9911.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8341.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3688.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6020.xml"/> </references> <references anchor="sec-informative-references"> <name>Informative References</name> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-netmod-eca-policy.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-netmod-rfc8407bis.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ntp-ntpv5.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-opsawg-scheduling-oam-tests.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-opsawg-ucl-acl.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-tvr-schedule-yang.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.liu-netmod-yang-schedule.xml"/> <referenceanchor="I-D.ietf-opsawg-ucl-acl"> <front> <title>A YANG Data Model and RADIUS Extension for Policy-based Network Access Control</title> <author fullname="Qiufang Ma" initials="Q." surname="Ma"> <organization>Huawei</organization> </author> <author fullname="Qin Wu" initials="Q." surname="Wu"> <organization>Huawei</organization> </author> <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair"> <organization>Orange</organization> </author> <author fullname="Daniel King" initials="D." surname="King"> <organization>Lancaster University</organization> </author> <date day="20" month="March" year="2025"/> <abstract> <t> This document defines a YANG data model for policy-based network access control, which provides consistent and efficient enforcement of network access control policies based on group identity. Moreover, this document defines a mechanism to ease the maintenance of the mapping between a user group identifier and a set of IP/MAC addresses to enforce policy-based network access control. In addition, the document defines a Remote Authentication Dial-in User Service (RADIUS) attribute that is used to communicate the user group identifier as part of identification and authorization information. </t> </abstract> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-ucl-acl-07"/> </reference> <reference anchor="I-D.ietf-opsawg-scheduling-oam-tests"> <front> <title>A YANG Data Model for Network Diagnosis using Scheduled Sequences of OAM Tests</title> <author fullname="Luis M. Contreras" initials="L. M." surname="Contreras"> <organization>Telefonica</organization> </author> <author fullname="Victor Lopez" initials="V." surname="Lopez"> <organization>Nokia</organization> </author> <date day="7" month="July" year="2025"/> <abstract> <t> This document defines a YANG data model for network diagnosis on- demand relying upon Operations, Administration, and Maintenance (OAM) tests. This document defines both 'oam-unitary-test' and 'oam-test- sequence' YANG modules to manage the lifecycle of network diagnosis procedures, primarily intended for use by an SDN controller or network orchestrator, rather than by individual network nodes. </t> </abstract> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-scheduling-oam-tests-01"/> </reference> <reference anchor="I-D.ietf-tvr-schedule-yang"> <front> <title>YANG Data Model for Scheduled Attributes</title> <author fullname="Yingzhen Qu" initials="Y." surname="Qu"> <organization>Futurewei Technologies</organization> </author> <author fullname="Acee Lindem" initials="A." surname="Lindem"> <organization>Arrcus, Inc.</organization> </author> <author fullname="Eric Kinzie" initials="E." surname="Kinzie"> <organization>LabN Consulting, L.L.C.</organization> </author> <author fullname="Don Fedyk" initials="D." surname="Fedyk"> <organization>LabN Consulting, L.L.C.</organization> </author> <author fullname="Marc Blanchet" initials="M." surname="Blanchet"> <organization>Viagenie</organization> </author> <date day="4" month="July" year="2025"/> <abstract> <t> The YANG model in this document includes three modules, and can be used to manage network resources and topologies with scheduled attributes, such as predictable link loss and link connectivity as a function of time. The intent is to have this information be utilized by Time-Variant Routing systems. </t> </abstract> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-tvr-schedule-yang-05"/> </reference> <reference anchor="RFC8413"> <front> <title>Framework for Scheduled Use of Resources</title> <author fullname="Y. Zhuang" initials="Y." surname="Zhuang"/> <author fullname="Q. Wu" initials="Q." surname="Wu"/> <author fullname="H. Chen" initials="H." surname="Chen"/> <author fullname="A. Farrel" initials="A." surname="Farrel"/> <date month="July" year="2018"/> <abstract> <t>Time-Scheduled (TS) reservation of Traffic Engineering (TE) resources can be used to provide resource booking for TE Label Switched Paths so as to better guarantee services for customers and to improve the efficiency of network resource usage at any moment in time, including network usage that is planned for the future. This document provides a framework that describes and discusses the architecture for supporting scheduled reservation of TE resources. This document does not describe specific protocols or protocol extensions needed to realize this service.</t> </abstract> </front> <seriesInfo name="RFC" value="8413"/> <seriesInfo name="DOI" value="10.17487/RFC8413"/> </reference> <reference anchor="RFC8340"> <front> <title>YANG Tree Diagrams</title> <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/> <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/> <date month="March" year="2018"/> <abstract> <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t> </abstract> </front> <seriesInfo name="BCP" value="215"/> <seriesInfo name="RFC" value="8340"/> <seriesInfo name="DOI" value="10.17487/RFC8340"/> </reference> <reference anchor="I-D.ietf-netmod-rfc8407bis"> <front> <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title> <author fullname="Andy Bierman" initials="A." surname="Bierman"> <organization>YumaWorks</organization> </author> <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair"> <organization>Orange</organization> </author> <author fullname="Qin Wu" initials="Q." surname="Wu"> <organization>Huawei</organization> </author> <date day="5" month="June" year="2025"/> <abstract> <t> This document provides guidelines for authors and reviewers of specifications containing YANG data models, including IANA-maintained modules. Recommendations and procedures are defined, which are intended to increase interoperability and usability of Network Configuration Protocol (NETCONF) and RESTCONF Protocol implementations that utilize YANG modules. This document obsoletes RFC 8407. Also, this document updates RFC 8126 by providing additional guidelines for writing the IANA considerations for RFCs that specify IANA-maintained modules. </t> </abstract> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-28"/> </reference> <reference anchor="RFC3339"> <front> <title>Date and Time on the Internet: Timestamps</title> <author fullname="G. Klyne" initials="G." surname="Klyne"/> <author fullname="C. Newman" initials="C." surname="Newman"/> <date month="July" year="2002"/> <abstract> <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t> </abstract> </front> <seriesInfo name="RFC" value="3339"/> <seriesInfo name="DOI" value="10.17487/RFC3339"/> </reference> <reference anchor="I-D.ietf-ntp-ntpv5"> <front> <title>Network Time Protocol Version 5</title> <author fullname="Miroslav Lichvar" initials="M." surname="Lichvar"> <organization>Red Hat</organization> </author> <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi"> <organization>Huawei</organization> </author> <date day="2" month="July" year="2025"/> <abstract> <t> The Network Time Protocol (NTP) is a widely deployed protocol that allows hosts to obtain the current time of day from time servers. This document specifies version 5 of the protocol (NTPv5), which adopts a client-server model as its sole mode of operation. Legacy operational modes supported in earlier versions have been removed to improve protocol robustness and clarity. While this specification defines the protocol used for time distribution, it does not define the algorithms or heuristics employed by clients to determine or adjust their local time. </t> </abstract> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-ntp-ntpv5-05"/> </reference> <reference anchor="RFC6241">anchor="W3C.XML1.0" target="https://www.w3.org/TR/2008/REC-xml-20081126/"> <front><title>Network Configuration Protocol (NETCONF)</title> <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/> <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/> <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/> <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/> <date month="June" year="2011"/> <abstract> <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible<title>Extensible Markup Language(XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t> </abstract> </front> <seriesInfo name="RFC" value="6241"/> <seriesInfo name="DOI" value="10.17487/RFC6241"/> </reference> <reference anchor="RFC8040"> <front> <title>RESTCONF Protocol</title> <author fullname="A. Bierman" initials="A." surname="Bierman"/> <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/> <author fullname="K. Watsen" initials="K." surname="Watsen"/> <date month="January" year="2017"/> <abstract> <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t> </abstract> </front> <seriesInfo name="RFC" value="8040"/> <seriesInfo name="DOI" value="10.17487/RFC8040"/> </reference> <reference anchor="RFC4252"> <front> <title>The Secure Shell (SSH) Authentication Protocol</title>(XML) 1.0 (Fifth Edition)</title> <authorfullname="T. Ylonen"initials="T."surname="Ylonen"/> <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/> <date month="January" year="2006"/> <abstract> <t>The Secure Shell Protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network. This document describes the SSH authentication protocol framework and public key, password, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for the SSH connection protocol. [STANDARDS-TRACK]</t> </abstract> </front> <seriesInfo name="RFC" value="4252"/> <seriesInfo name="DOI" value="10.17487/RFC4252"/> </reference> <reference anchor="RFC8446"> <front> <title>The Transport Layer Security (TLS) Protocol Version 1.3</title> <author fullname="E. Rescorla" initials="E." surname="Rescorla"/> <date month="August" year="2018"/> <abstract> <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t> <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t> </abstract> </front> <seriesInfo name="RFC" value="8446"/> <seriesInfo name="DOI" value="10.17487/RFC8446"/> </reference> <reference anchor="RFC9000"> <front> <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title> <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/> <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/> <date month="May" year="2021"/> <abstract> <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t> </abstract> </front> <seriesInfo name="RFC" value="9000"/> <seriesInfo name="DOI" value="10.17487/RFC9000"/> </reference> <reference anchor="RFC7951"> <front> <title>JSON Encoding of Data Modeled with YANG</title> <author fullname="L. Lhotka" initials="L." surname="Lhotka"/> <date month="August" year="2016"/> <abstract> <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t> </abstract> </front> <seriesInfo name="RFC" value="7951"/> <seriesInfo name="DOI" value="10.17487/RFC7951"/> </reference> <reference anchor="RFC9657"> <front> <title>Time-Variant Routing (TVR) Use Cases</title> <author fullname="E. Birrane, III" initials="E." surname="Birrane, III"/> <author fullname="N. Kuhn" initials="N." surname="Kuhn"/> <author fullname="Y. Qu" initials="Y." surname="Qu"/> <author fullname="R. Taylor" initials="R." surname="Taylor"/> <author fullname="L. Zhang" initials="L." surname="Zhang"/> <date month="October" year="2024"/> <abstract> <t>This document introduces use cases where Time-Variant Routing (TVR) computations (i.e., routing computations that take into consideration time-based or scheduled changes to a network) could improve routing protocol convergence and/or network performance.</t> </abstract> </front> <seriesInfo name="RFC" value="9657"/> <seriesInfo name="DOI" value="10.17487/RFC9657"/> </reference> <reference anchor="I-D.ietf-netmod-eca-policy"> <front> <title>A YANG Data model for ECA Policy Management</title> <author fullname="Qin Wu" initials="Q." surname="Wu"> <organization>Huawei</organization> </author> <author fullname="Igor Bryskin" initials="I." surname="Bryskin"> <organization>Individual</organization> </author> <author fullname="Henk Birkholz" initials="H." surname="Birkholz"> <organization>Fraunhofer SIT</organization> </author> <author fullname="Xufeng Liu" initials="X." surname="Liu"> <organization>Volta Networks</organization> </author> <author fullname="Benoît Claise" initials="B." surname="Claise"> <organization>Cisco</organization> </author> <date day="19" month="February" year="2021"/> <abstract> <t> This document defines a YANG data model for Event Condition Action (ECA) policy management. The ECA policy YANG module provides the ability to delegate some network management functions to the server (e.g., a NETCONF or RESTCONF server) which can take simple and instant action when a trigger condition on the managed objects is met. </t> </abstract> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-eca-policy-01"/> </reference> <reference anchor="I-D.liu-netmod-yang-schedule"> <front> <title>A YANG Data Model for Configuration Scheduling</title> <author fullname="Xufeng Liu" initials="X." surname="Liu"> <organization>Jabil</organization> </author> <author fullname="Igor Bryskin" initials="I." surname="Bryskin"> <organization>Huawei Technologies</organization>surname="Bray" fullname="Tim Bray" role="editor"> <organization/> </author> <authorfullname="Vishnu Pavan Beeram" initials="V. P." surname="Beeram"> <organization>Juniper Networks</organization>initials="J." surname="Paoli" fullname="Jean Paoli" role="editor"> <organization/> </author> <authorfullname="Tarek Saad" initials="T." surname="Saad"> <organization>Cisco Systems Inc</organization>initials="C. M." surname="Sperberg-McQueen" fullname="C. M. Sperberg-McQueen" role="editor"> <organization/> </author> <authorfullname="Himanshu Shah" initials="H." surname="Shah"> <organization>Ciena</organization>initials="E." surname="Maler" fullname="Eve Maler" role="editor"> <organization/> </author> <authorfullname="Oscar Gonzalez de Dios" initials="O. G." surname="de Dios"> <organization>Telefonica</organization>initials="F." surname="Yergeau" fullname="Francois Yergeau" role="editor"> <organization/> </author> <dateday="1" month="March" year="2018"/> <abstract> <t> This document describes a data model for configuration scheduling. </t> </abstract>year="2008" month="November" day="26"/> </front><seriesInfo name="Internet-Draft" value="draft-liu-netmod-yang-schedule-05"/><refcontent>W3C Recommendation</refcontent> </reference> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8413.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8340.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6241.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8040.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4252.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9000.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7951.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9657.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8345.xml"/> </references> </references> <?line1637?>1716?> <section anchor="usage"> <name>Examples of Scheduling Format Representation</name> <t>This section provides some examples to illustrate the use of the period and recurrence formats defined in <xref target="sec-schedule"/>. The following modules are used for illustration purposes and make examples verifiable:</t><artwork><![CDATA[<sourcecode type="yang"><![CDATA[ module example-sch-usage-1 { yang-version 1.1; namespace "http://example.com/example-sch-usage-1"; prefix "ex-schu-1"; import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module using 'generic-schedule-params' and 'schedule-status' groupings."; revision "2026-02-20" { description "Initial version."; reference "RFC 9922: A YANG Data Model for Scheduling"; } container generic-schedule-params { description "A collection of generic scheduling parameters."; uses schedule:generic-schedule-params; } container schedule-status { description "A collection of scheduling status."; uses schedule:schedule-status; } } module example-sch-usage-2 { yang-version 1.1; namespace "http://example.com/example-sch-usage-2"; prefix "ex-schu2"; import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module using the 'period-of-time' grouping."; revision "2026-02-20" { description "Initial version."; reference "RFC 9922: A YANG Data Model for Scheduling"; } container period-of-time { description "A container for a time period."; uses schedule:period-of-time; } } module example-sch-usage-3 { yang-version 1.1; namespace "http://example.com/example-sch-usage-3"; prefix "ex-schu-3"; import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module using the 'recurrence-basic' grouping."; revision "2026-02-20" { description "Initial version."; reference "RFC 9922: A YANG Data Model for Scheduling"; } container recurrence-basic { description "A container for a simple recurrence rule."; uses schedule:recurrence-basic { refinefrequency { mandatory true; } refineinterval { default 1; } } } } module example-sch-usage-4 { yang-version 1.1; namespace "http://example.com/example-sch-usage-4"; prefix "ex-schu-4"; import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module using the 'recurrence-utc' grouping."; revision "2026-02-20" { description "Initial version."; reference "RFC 9922: A YANG Data Model for Scheduling"; } container recurrence-utc { description "A container for a simple recurrence rule in UTC format."; uses schedule:recurrence-utc; } } module example-sch-usage-5 { yang-version 1.1; namespace "http://example.com/example-sch-usage-5"; prefix "ex-schu-5"; import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module using the 'recurrence-with-time-zone' grouping."; revision "2026-02-20" { description "Initial version."; reference "RFC 9922: A YANG Data Model for Scheduling"; } container recurrence-with-time-zone { description "A container for a simple recurrence rule with a time zone."; uses schedule:recurrence-with-time-zone; } } module example-sch-usage-6 { yang-version 1.1; namespace "http://example.com/example-sch-usage-6"; prefix "ex-schu-6"; import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module using the 'recurrence-utc-with-periods' grouping."; revision "2026-02-20" { description "Initial version."; reference "RFC 9922: A YANG Data Model for Scheduling"; } containerrecurrence-utc-with-date-timesrecurrence-utc-with-periods { description "A container for an aggregate set of repeating occurrences in UTC format."; uses schedule:recurrence-utc-with-periods; } } module example-sch-usage-7 { yang-version 1.1; namespace "http://example.com/example-sch-usage-7"; prefix "ex-schu-8"; import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module using the 'recurrence-time-zone-with-periods' grouping."; revision "2026-02-20" { description "Initial version."; reference "RFC 9922: A YANG Data Model for Scheduling"; } containerrecurrence-time-zone-with-date-timesrecurrence-time-zone-with-periods { description "A container for an aggregate set of repeating occurrences with a time zone."; uses schedule:recurrence-time-zone-with-periods; } } module example-sch-usage-8 { yang-version 1.1; namespace "http://example.com/example-sch-usage-8"; prefix "ex-schu-8"; import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module using 'icalendar-recurrence' grouping."; revision "2026-02-20" { description "Initial version."; reference "RFC 9922: A YANG Data Model for Scheduling"; } container icalendar-recurrence { description "A container for a scheduled iCalendar recurrence."; uses schedule:icalendar-recurrence { refine workweek-start { default monday; } } } }]]></artwork>]]></sourcecode> <t>For each example, only the message body is provided withJSONJSON, which is used for encoding per the guidance in <xref target="RFC7951"/>.</t> <section anchor="the-generic-schedule-params-grouping"> <name>The "generic-schedule-params" Grouping</name> <t><xref target="ex-0"/> illustrates the example of a requested schedule that needs to start no earlier than 08:00 AM, January 1, 2025 and end no later than 8:00 PM, January 31, 2025 (Beijing time). Schedule requests that fail to meet the requirements are ignored by thesystemsystem, as indicated by "discard-action".</t> <figure anchor="ex-0"> <name>Generic Parameters with 'max-allowed-end' for Schedule Validation</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-1:generic-schedule-params": { "time-zone-identifier": "China/Beijing", "min-allowed-start": "2025-01-01T08:00:00", "max-allowed-end": "2025-01-31T20:00:00", "discard-action": "ietf-schedule:silently-discard" } }]]></artwork>]]></sourcecode> </figure> <t>To illustrate the difference between "max-allowed-end" and "validity" parameters, <xref target="ex-00"/> shows the example of a requested schedule that needs to start no earlier than 08:00 AM, January 1, 2025 (Beijing time). Schedule requests that fail to meet the requirements are ignored by thesystemsystem, as indicated by "discard-action". The requested schedule may end after 8:00 PM, January 31, 2025, but any occurrences that are generated after that time would not be considered as valid.</t> <figure anchor="ex-00"> <name>Generic Parameters with 'validity' for Schedule Validation</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-1:generic-schedule-params": { "time-zone-identifier": "China/Beijing", "validity": "2025-01-31T20:00:00", "min-allowed-start": "2025-01-01T08:00:00", "discard-action": "ietf-schedule:silently-discard" } }]]></artwork>]]></sourcecode> </figure> </section> <section anchor="the-period-of-time-grouping"> <name>The "period-of-time" Grouping</name> <t><xref target="ex-1"/> shows an example of a period that starts at 08:00:00UTC,UTC on January 1, 2025 and ends at 18:00:00 UTC on December 31, 2027.</t> <figure anchor="ex-1"> <name>Simple Start/End Schedule</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-2:period-of-time": { "period-start": "2025-01-01T08:00:00Z", "period-end": "2027-12-31T18:00:00Z" } }]]></artwork>]]></sourcecode> </figure> <t>An example of a period that starts at 08:00:00UTC,UTC on January 1, 2025 and lasts 15 days and 5 hours and 20 minutes is encoded as shown in <xref target="ex-2"/>.</t> <figure anchor="ex-2"> <name>Simple Schedule with Duration</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-2:period-of-time": { "period-start": "2025-01-01T08:00:00Z", "duration": "P15DT05:20:00" } }]]></artwork>]]></sourcecode> </figure> <t>An example of a period that starts at 2:00A.M.AM in Los Angeles on November 19, 2025 and lasts 20 weeks is depicted in <xref target="ex-3"/>.</t> <figure anchor="ex-3"> <name>Simple Schedule with Time Zone Indication</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-2:period-of-time": { "period-start": "2025-11-19T02:00:00", "time-zone-identifier": "America/Los_Angeles", "duration": "P20W" } }]]></artwork>]]></sourcecode> </figure> </section> <section anchor="the-recurrence-basic-grouping"> <name>The "recurrence-basic" Grouping</name> <t><xreftarget="ex-6"/>target="ex-4"/> indicates a recurrence of every 2daysdays, which starts immediately and repeats forever:</t> <figure anchor="ex-4"> <name>Simple Schedule with Recurrence</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-3:recurrence-basic": { "recurrence-description": "forever recurrence rule", "frequency": "ietf-schedule:daily", "interval": 2 } }]]></artwork>]]></sourcecode> </figure> </section> <section anchor="the-recurrence-utc-grouping"> <name>The "recurrence-utc" Grouping</name> <t><xref target="ex-5"/> indicates a recurrence from 8:00 AM to 9:00 AM every day, from December 1 to December 31, 2025 in UTC:</t> <figure anchor="ex-5"> <name>Simple Schedule with Recurrence in UTC</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-4:recurrence-utc": { "recurrence-first": { "start-time-utc": "2025-12-01T08:00:00Z", "duration": 3600 }, "frequency": "ietf-schedule:daily", "interval": 1, "utc-until": "2025-12-31T23:59:59Z" } }]]></artwork>]]></sourcecode> </figure> </section> <section anchor="the-recurrence-with-time-zone-grouping"> <name>The "recurrence-with-time-zone" Grouping</name> <t><xref target="ex-6"/> indicates a recurrence of every 2 hours for 10occurrences, lastingoccurrences that lasts 10minutes,minutes andstartingstarts at 3p.m.PM on December 1, 2025 in New York:</t> <figure anchor="ex-6"> <name>Simple Schedule with Recurrence with Time Zone Indication</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-5:recurrence-with-time-zone": { "recurrence-first": { "start-time": "2025-12-01T15:00:00", "duration":"PT00:10:00", "time-zone-identifier": "America/New_York""PT00:10:00" }, "time-zone-identifier": "America/New_York", "frequency": "ietf-schedule:hourly", "interval": 2, "count": 10 } }]]></artwork>]]></sourcecode> </figure> </section> <section anchor="the-recurrence-utc-with-periods-grouping"> <name>The "recurrence-utc-with-periods" Grouping</name> <t><xref target="ex-7"/> indicates a recurrence that occurs every two days starting at 9:00 AM and 3:00 PM for a duration of 30 minutes and 40minutesminutes, respectively, from 2025-06-01 to 2025-06-30 in UTC:</t> <figure anchor="ex-7"> <name>Example of Recurrence With Date Times</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-6:recurrence-utc-with-periods": { "recurrence-first": { "start-time-utc": "2025-06-01T09:00:00Z" }, "frequency": "ietf-schedule:daily", "interval": 2, "utc-until": "2025-06-30T23:59:59Z", "period-timeticks": [ { "period-start":"3240000",3240000, "period-end":"3420000"3420000 }, { "period-start":"5400000",5400000, "period-end":"5640000"5640000 } ] } }]]></artwork>]]></sourcecode> </figure> </section> <section anchor="the-recurrence-time-zone-with-periods-grouping"> <name>The "recurrence-time-zone-with-periods" Grouping</name> <t><xref target="ex-8"/> indicates a recurrence that occurs every 30 minutes and lasts for 15 minutes from 9:00 AM to 5:00 PM andan extratwo extra occurrences at 6:00 PM and 6:30 PM with each lasting for 20 minutes on 2025-12-01 (New York):</t> <figure anchor="ex-8"> <name>Example of Advanced Recurrence Schedule</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-7:recurrence-time-zone-with-periods": { "recurrence-first": { "start-time": "2025-12-01T09:00:00", "duration":"PT00:15:00", "time-zone-identifier": "America/New_York""PT00:15:00" }, "time-zone-identifier": "America/New_York", "frequency": "ietf-schedule:minutely", "interval": 30, "until": "2025-12-01T17:00:00Z", "period": [ { "period-start": "2025-12-01T18:00:00", "duration": "PT00:20:00" }, { "period-start": "2025-12-01T18:30:00", "duration": "PT00:20:00" } ] } }]]></artwork>]]></sourcecode> </figure> </section> <section anchor="the-icalendar-recurrence-grouping"> <name>The "icalendar-recurrence" Grouping</name> <t><xref target="ex-9"/> indicates 10 occurrencesthat occurat 8:00 AM(EST),(EST) every last Saturday of the month starting in January 2024:</t> <figure anchor="ex-9"> <name>Simple iCalendar Recurrence</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-8:icalendar-recurrence": { "recurrence-first": { "start-time":"2024-01-27T08:00:00", "time-zone-identifier": "America/New_York""2024-01-27T08:00:00" }, "time-zone-identifier": "America/New_York", "frequency": "ietf-schedule:monthly", "count": 10, "byday": [ { "direction": [ -1 ], "weekday": "saturday" } ] } }]]></artwork>]]></sourcecode> </figure> <t><xref target="ex-10"/> is an example of a recurrence that occurs on the last workday of the month until December 25, 2025,fromstarting January 1, 2025:</t> <figure anchor="ex-10"> <name>Example of Advanced iCalendar Recurrence</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-8:icalendar-recurrence": { "recurrence-first": { "start-time":"2025-01-01""2025-01-01T00:00:00" }, "frequency": "ietf-schedule:monthly", "until":"2025-12-25","2025-12-25T23:59:59", "byday": [ { "weekday": "monday" }, { "weekday": "tuesday" }, { "weekday": "wednesday" }, { "weekday": "thursday" }, { "weekday": "friday" } ], "bysetpos": [ -1 ] } }]]></artwork>]]></sourcecode> </figure> <t><xref target="ex-11"/> indicates a recurrence that occurs every 20 minutes from 9:00 AM to 4:40 PM (UTC), with the exclusion of the occurrence starting at 10:20 AMbeing excludedon 2025-12-01:</t> <figure anchor="ex-11"> <name>Example of Advanced iCalendar Recurrence with Exceptions</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-8:icalendar-recurrence": { "recurrence-first": { "start-time": "2025-12-01T09:00:00Z" }, "until": "2025-12-01T16:40:00Z", "frequency": "ietf-schedule:minutely", "byminute": [ 0, 20, 40 ], "byhour": [ 9, 10, 11, 12, 13, 14, 15, 16 ], "exception-dates": [ "2025-12-01T10:20:00Z" ] } }]]></artwork>]]></sourcecode> </figure> </section> <section anchor="the-schedule-status-grouping"> <name>The "schedule-status" Grouping</name> <t><xref target="ex-12"/> indicates the scheduled recurrence status of <xref target="ex-11"/> at the time of 12:15PM,PM on 2025-12-01 (UTC):</t> <figure anchor="ex-12"> <name>Example of a Schedule Status</name><artwork><![CDATA[<sourcecode type="json"><![CDATA[ { "example-sch-usage-1:schedule-status": { "state": "ietf-schedule:enabled", "version": 1, "schedule-type": "ietf-schedule:recurrence", "counter": 9, "last-occurrence":[ "2025-12-01T12:00:00Z" ],"2025-12-01T12:00:00Z", "upcoming-occurrence":["2025-12-01T12:20:00Z"]} }]]></artwork>]]></sourcecode> </figure> <t>At the time of 12:15PM,PM on 2025-12-01 (UTC), the recurring event occurred at (note that the occurrence at 10:20 AM is excluded): 9:00, 9:20, 9:40, 10:00, 10:40, 11:00, 11:20, 11:40, and 12:00. The last occurrence was at 12:00, and the upcoming one is at 12:20.</t> </section> </section> <section anchor="sec-ext"> <name>Examples of Using/Extending the "ietf-schedule" Module</name> <t>This non-normative section shows two examples for how the "ietf-schedule" module can be used or extended for scheduled events or attributes based on date and time.</t> <section anchor="features"> <name>Example: Schedule Tasks to Execute Based on a Recurrence Rule</name> <t>Scheduled tasks can be used to execute specific actions based on certain recurrence rules (e.g., every Friday at 8:00 AM). The following examplemodulemodule, which "uses" the "icalendar-recurrence" grouping from the "ietf-schedule"modulemodule, shows how a scheduled task could be defined with different features used for options.</t><artwork><![CDATA[<sourcecode type="yang"><![CDATA[ module example-scheduled-backup { yang-version 1.1; namespace "http://example.com/example-scheduled-backup"; prefix "ex-scback"; import ietf-inet-types { prefix "inet"; } import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module defining ascheduled basedscheduled-based backup operation."; revision"2023-01-19""2026-02-20" { description "InitialVersion.";version."; reference "RFCXXXX:9922: A YANG Data Model forScheduling.";Scheduling"; } container scheduled-backup-tasks { description "A container for backing up all current runningconfigurationconfigurations on the device."; list tasks { key "task-id"; description "The list of backing up tasks on this device."; leaf task-id { type string; description "The task identifier that uniquely identifies a scheduled backup task."; } choice local-or-remote { description "Specifies whether the configuration to be backed up is local or remote."; case local { description "Configuration parameters for the backing up of local devices."; leaf local { type empty; description "The parameter specifies the configuration to be backed up is on the local device."; } } case remote { description "Configuration parameters for backing up of remote devices."; leaf remote { type inet:domain-name; description "The parameter specifies the remote device domain name."; } } } container basic-recurrence-schedules { if-feature schedule:basic-recurrence; description "Basic recurrence schedule specification, which only applies when the schedule:basic-recurrence feature is supported."; leaf schedule-id { type string; description "The schedule identifier for this recurrence rule."; } uses schedule:recurrence-basic { refine frequency { mandatory true; } refine interval { default 1; } } } container icalendar-recurrence-schedules { if-feature schedule:icalendar-recurrence; description "Basic recurrence schedule specification, which only applies when the schedule:icalendar-recurrence feature is supported."; leaf schedule-id { type string; description "The schedule identifier for this recurrence rule."; } uses schedule:icalendar-recurrence { refine workweek-start { default monday; } } } } list schedule-set { key "schedule-name"; description"The list of schedule"Schedule status list for the backup tasks."; uses schedule:schedule-status-with-name; } } }]]></artwork>]]></sourcecode> </section> <section anchor="augments"> <name>Example: Schedule Network Properties to Change Based on Date and Time</name> <t>Network properties may change over a specific period of time or based on a recurrence rule, e.g., <xref target="RFC9657"/>. The following examplemodulemodule, which augments the "recurrence-utc-with-periods" grouping from the "ietf-schedule"modulemodule, shows how a scheduled attribute could bedefined.</t> <artwork><![CDATA[defined. Note that <br/> <xref target="RFC8345"/> and this document are referenced in the module.</t> <sourcecode type="yang"><![CDATA[ module example-scheduled-link-bandwidth { yang-version 1.1; namespace "http://example.com/example-scheduled-link-bandwidth"; prefix "ex-scattr"; import ietf-network { prefix "nw"; reference "RFC 8345: A YANG Data Model for Network Topologies"; } import ietf-schedule { prefix "schedule"; reference "RFCXXXX:9922: A YANG Data Model for Scheduling"; } organization "Example, Inc."; contact "Support at example.com"; description "Example of a module defining a scheduled link bandwidth."; revision"2023-01-19""2026-02-20" { description "InitialVersion.";version."; reference "RFCXXXX:9922: A YANG Data Model forScheduling.";Scheduling"; } grouping link-bandwidth-grouping { description "Grouping of the link bandwidth definition."; leaf scheduled-bandwidth { type uint64; units "Kbps"; description "Bandwidth values, expressed in kilobits per second."; } } container link-attributes { description "Definition of link attributes."; list link { key "source-node destination-node"; description "Definition of link attributes."; leaf source-node { type nw:node-id; description "Indicates the source node identifier."; } leaf destination-node { type nw:node-id; description "Indicates the source node identifier."; } leaf default-bandwidth { type uint64; units "Kbps"; description "Bandwidth value used forperdiodsperiods that don't match a schedule."; } choice time-variant-type { description "Controls the schedule type."; case period { uses schedule:period-of-time; } case recurrence { uses schedule:recurrence-utc-with-periods { augment "period-timeticks" { description "Specifies the attributes inside eachperiod-timeticks'period-timeticks' entry."; uses link-bandwidth-grouping; } } } } } } }]]></artwork>]]></sourcecode> <t><xref target="ex-13"/> shows a configuration example in XML <xref target="W3C.XML1.0"/> of a link's bandwidth that is scheduled between 2025-12-01 0:00 UTC to the end of 2025-12-31 with a daily schedule. In each day, the bandwidth value is scheduled to be 500 Kbps between 1:00 AM to 6:00 AM and 800 Kbps between 10:00 PM to 11:00 PM. The bandwidth value that is not covered by the period above is 1000 Kbps.</t> <figure anchor="ex-13"> <name>Example of Scheduled Link's Bandwidth</name><artwork><![CDATA[<sourcecode type="xml"><![CDATA[ <?xml version="1.0" encoding="utf-8"?> <link-attributes xmlns="http://example.com/example-scheduled-link-bandwidth" xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule"> <link> <source-node>ne1</source-node> <destination-node>ne2</destination-node> <default-bandwidth>1000</default-bandwidth> <recurrence-first><utc-start-time>2025-12-01T01:00:00Z</utc-start-time><start-time-utc>2025-12-01T01:00:00Z</start-time-utc> </recurrence-first> <frequency>schedule:daily</frequency> <utc-until>2025-12-31T23:59:59Z</utc-until> <period-timeticks> <period-start>360000</period-start> <period-end>2160000</period-end> <scheduled-bandwidth>500</scheduled-bandwidth> </period-timeticks> <period-timeticks> <period-start>7920000</period-start> <period-end>8280000</period-end> <scheduled-bandwidth>800</scheduled-bandwidth> </period-timeticks> </link> </link-attributes>]]></artwork>]]></sourcecode> </figure> </section> </section> <section anchor="ex-framework"> <name>Examples of Using the "ietf-schedule" Module for Scheduled Use of Resources Framework</name> <t>This section exemplifies how the architecture for supporting scheduled reservation of Traffic Engineering (TE) resources in <xref target="RFC8413"/> might leverage the "period-of-time" grouping defined in the "ietf-schedule" module to implement scheduled use of resources.</t> <t>The following example module shows how a scheduled link capacity reservation could be defined.</t><artwork><![CDATA[<sourcecode type="yang"><![CDATA[ module example-sch-capacity-res { yang-version 1.1; namespace "http://example.com/example-sch-capacity-res"; prefix "ex-schecaparev"; import ietf-network-topology { prefix "nt"; } import ietf-schedule { prefix "schedule"; } organization "Example, Inc."; contact "Support at example.com"; description "An example to show a scheduled link capacity reservation."; revision "2026-02-20" { description "Initial version."; reference "RFC 9922: A YANG Data Model for Scheduling"; } container link-capability-reservations { description "A container for a scheduled link capability reservations."; list scheduled-link-capacity { key "schedule-id"; description "Definition of scheduled link capacity list."; leaf schedule-id { type string; description "The schedule identifier for this schedule rule."; } leaf link-id { type nt:link-id; description "The identifier of a link in the topology."; } leaf reserved-capability { type uint64; units "Mbps"; description "The reserved capability for a particular link."; } uses schedule:period-of-time; } } }]]></artwork>]]></sourcecode> <t><xref section="4" sectionFormat="of" target="RFC8413"/> defines the reference architecture for scheduled use ofresources, theresources. The service requester sends a request to a Path Computation Element (PCE) and includes the parameters of the Label Switched Path (LSP) that the requester wishes tosupply, thesupply. The configuration example to provide the scheduled resource is shown in <xref target="ex-14"/>.</t> <figure anchor="ex-14"> <name>Example of Scheduled Link's Bandwidth Reservation</name><artwork><![CDATA[<sourcecode type="xml"><![CDATA[ <?xml version="1.0" encoding="utf-8"?> <link-capability-reservations xmlns="http://example.com/example-sch-capacity-res" xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule"> <scheduled-link-capacity> <schedule-id>1</schedule-id> <link-id>1-2-1</link-id> <reserved-capability>500</reserved-capability> <period-start>2025-03-10T08:00:00Z</period-start> <period-end>2025-03-10T09:00:00Z</period-end> </scheduled-link-capacity> <scheduled-link-capacity> <schedule-id>2</schedule-id> <link-id>2-1-1</link-id> <reserved-capability>400</reserved-capability> <period-start>2025-04-01T00:00:00Z</period-start> <duration>PT09:00:00</duration> </scheduled-link-capacity> <scheduled-link-capacity> <schedule-id>3</schedule-id> <link-id>2-1-1</link-id> <reserved-capability>500</reserved-capability> <period-start>2025-04-01T09:00:00Z</period-start> <period-end>2025-04-01T23:59:59Z</period-end> </scheduled-link-capacity> </link-capability-reservations>]]></artwork>]]></sourcecode> </figure> </section> <section numbered="false" anchor="acknowledgments"> <name>Acknowledgments</name> <t>This work is derived fromthe<xref target="I-D.ietf-opsawg-ucl-acl"/>. There is a desire from the OPSAWG to see thismodel bemodule separately defined for wide use in scheduling context.</t> <t>Thanks toAdrian Farrel, Wei Pan, Tianran Zhou, Joe Clarke, Steve Baillargeon, Dhruv Dhody, Robert Wilton, and Italo Busi<contact fullname="Adrian Farrel"/>, <contact fullname="Wei Pan"/>, <contact fullname="Tianran Zhou"/>, <contact fullname="Joe Clarke"/>, <contact fullname="Steve Baillargeon"/>, <contact fullname="Dhruv Dhody"/>, <contact fullname="Robert Wilton"/>, and <contact fullname="Italo Busi"/> for their valuable comments and inputs to this work.</t> <t>Many thanks to the authors of <xref target="I-D.ietf-tvr-schedule-yang"/>, <xref target="I-D.ietf-opsawg-scheduling-oam-tests"/>, and <xref target="I-D.ietf-netmod-eca-policy"/> for the constructive discussion during IETF#118.</t> <t>Other related efforts were explored in the past, e.g., <xref target="I-D.liu-netmod-yang-schedule"/>.</t> <t>Thanks toReshad Rahman<contact fullname="Reshad Rahman"/> for the great YANG Doctors review,Mahesh Jethanandani<contact fullname="Mahesh Jethanandani"/> for the AD review,Per Andersson<contact fullname="Per Andersson"/> for the OPSDIR review,Peter Yee<contact fullname="Peter Yee"/> forgenartthe GENART review, andAcee Lindem<contact fullname="Acee Lindem"/> for thertgdirRTGDIR review.</t> <t>Thanks toÉric Vyncke, Erik Kline, and Mike Bishop<contact fullname="Éric Vyncke"/>, <contact fullname="Erik Kline"/>, and <contact fullname="Mike Bishop"/> for the IESG review.</t> </section> </back> <!-- ##markdown-source:H4sIAAAAAAAAA+1963obx7HgfzzFLPyDZAxABG+iaEU2TVKOEt0i0tHxycl3 viEwICcCZpC5kKIl7f99i32W3RfbuvV1egCQohUna36JRc70dFdXV9etq6v6 /X6nSqtpchB1D6OjfDbLs+inw5c/RMdxFUcv8nEyjSZ5EZ2OLpNxPU2zi24n Pj8vkiv4QtrLu4Q+7HZGcZVc5MXNQVRW405nnI+yeAYDjIt4UvXTpJr0s6Sa 5eN+KR/2b+Lsoj/c7JT1+SwtyzTPqps5fPLs5OxpJ6tn50lx0BlDvwedUZ6V SVbW5UFUFXXSATi2O3GRxADPq3lSxBV8XUZxNo5exFl8kcySrOp2rvPi3UWR 13NoxqN3O++SG3g8PuhE/WgUT5NsHBcwQfyz1NPFv3Be+C91AM/KTieuq8u8 wE87EfxM6umUZ/nntJ7AbGBwepEXF3GW/kxQHUR/qOPrJKUXRY5IT8ZplRf0 oKyKJKkOouHmMDrNJ9U1TCo6vEqyOulFP9WXdRwdp9AoHVXUfpRWgOI/pjBY WfMTWK2DaGu4uTnckgd1VuFCHF2mGcOTzOJ0ehDN4n8wnMPvLgmmwSifhSaT RW/rxRP5onCfp9Pp4LpeCPSL/BL+HUff5/UoHsdpEYD/VQHDJ+GFYADfJFmW lBZ827ubm5sueE+hl1Hi4JXHHpyrsb/LaaQwpMcAEeyvPxGZNWB8Dp3HZZUU 0Y9ZepUUJcDljg/PK5gofj/G/g0c48E7ePjdVHUxiEeD+l2nk+XFDLq/go3U SbOJ9Ven3+9H8TksVAwLhX2dXaZlBLu3xh0UjZNJCgiBwWnP4/7kXaY3RVRd xlWEqz9LYviiyqPzJKrLZIy9IRMxuyqa18U8L6GLsh5dRnEZJUAxVS+a59N0 dNOLyqS4SkdJ2QOkREVS5nUBf0XnMXQX5Rn2iPyAIKjSWTKInkLD6jKJyvhd EuUTGLtC3MFOr6ewryvoFF8Tc6OHSZRmo2k9xnlgf2VS4XdFMqqLIoGF7RfJ NEYEmylep9VldBUXNziHKcA8LfmbOcAIE6Clw87W00Ey6EWTIp8h0OkI0RGP r5Bgxhv0x4hQybPAPoEz3nBn/6jTgvhWOcC+ngFWp2Wul8CAg0i9iqcpdIIA 4ZdJiRArzspLBODlBbWwVqAEYGsYgBZ+lo7H06TT+Sp6BqQF2BnhRKIPX6X4 56dOJ0wMsSKH0hYBCr3rXWL26l13gylkFGcdIQxYAUA70HY8tUEDHl8l7ytY /GRwAVhcP6+rKMuraJrOiOKrfKPz4cO3z/rHAxoin5fx9UW/Hk378Wj66VMv Crw1A/TzeNavAFMlNO0ghuzm1VXhSqZPnwawGZIm1RiSqcv4HF5ZhHKZji5R LgGuyvQiI6BxP8TzOVA4tb7dluioLRHeEf52WJVoOncjGo8ecvgIF2iGmy/O bgD8sp7NiYhiYIYV7b0MPi5oc8YjFtOKZXRAPlxcJAVAcX7D21gBM4iOkyph emS4ynxa05/YEYyliQ/oZgK4qkpC/HlykyM6qLN8TuNWNtgwjQ8fymTUn6Xn nz5F47Qc1SUuAH5Cex9hvEznvO3xqVEpYKMI+wRAvodFiNZfPPt+ozOjFrAi 538HoEt/kWemg9xoK7xItB0+fPgfb54ebW9tD4HsEEAgrYsEwUvKUZGe23SX vI9nc1wvIC0QjDUybyACBBR2F883aWxRQwnrPP2LYv7p08ZAkAEbD0abF/lV ikRe0hBC+zRS8j6BR+nkJrrMr0Ga0Zqq97C5aWwcGHoCTS0FmY2Si3osabow TXzvsQfNNhgO9RxBiw6BlHFTJ+/7kwJkJ6pzFpSwhxUycNZ1iaheMIS1KIB1 wVVs7So9SLTOLAgYBCzL/s5wm1DV+eqr6IRUhhRY18scsL5+RvsbGHd+xWQM H0ijDRKo1AwQiICZdwcsaEsh8bQURqE6mhcpSrYc+MM5cg5sNQgIaGSacQrY nU/jUXKZT8cJ7fM6kW2WJZoJwd7GRmMmbKA9YAc/s5yWL2LeschLEDf22DJw hrOBTT4DyfUzfjGdCsWRMK1BlUir2t3mBAOoR4iLKIemhYUIIAsg4Fo4A7Yu 58konaQMGIja5Bq+SJh83H0M719PE9yFyF+Zg0zy6TS/ZrlI0yWJekCNfxf9 B/xE/f4Tagrcink0QsP2BtEID4N2C3+0tbm129/c7W9vmk9HVQ0kQNxXNpyF rAbPQRF7lGfI2bWdcoy7P6W/kbEmERgmEVomZdR98ePpWbfH/0YvX9Hvb07+ /OOzNyfH+PvpHw6fP9e/dKTF6R9e/fj82Pxmvjx69eLFyctj/hieRs6jTvfF 4U/wBqHqvnp99uzVy8Pn3QbCaXGYkkA/SApQflB+xGVHMSliZd8fvf4//3u4 Iyxtazh8BFuW/9gfPtyBP2A9Mx4tz2DV+E9A4U0HljGJkSSIrkbxPK1AnPVQ LJbAdrIIKQEW/nd/Rcz87SB6fD6aD3eeyAOcsPNQ4cx5SDhrPml8zEgMPAoM o7HpPPcw7cJ7+JPzt8K79fDxtyA8kqg/3P/2SUf2PqvZxMeF7sqb2Xk+ZfYK NhkItPgC+BjvJSNi8HNhZ9s7myRlXE5SKxlIyhys7yzN8ml+cePKqVPhWNs4 Pi7qw0e7qrvE9IYqQWnLI7MvsWvckG+0yh0VwJEPOmh+TcDiIT2ZnrHSAzRB Gsk8Rt0+oz3K+jo+JX0J9IVTmDvpPhaMg/3B7kBDuru7swvkh5+TCgsEfImi 6goI+kg8AZYhwBAIN9Ic2IIaORdq9tE69Gie91jQXIIeteFNKjPfEHMERQLk UUlCyBnWHQgEv4+dhtmie0Y97Smpd9noBj87uozRukuYYRN/v5lr2ecOG/1F BAFudVjCjG2Z7lPYSV1GiEsFg+3BcNNF8ADGRLNMRHPPWkFeK6O9EkIAMhA/ DA/IQ9TecrTgAATUEcHynSKnRomAjMACmeRYDCDKbFmMYU/dU9h2L4+f/9QF E9F9bfQu6AzUCGDJVUo2vygotjGDeFAmC5BvUoBhjYuj6cVdl2c4mQyW5sg4 liJQ+IT/Kfx0nsmkA+RRJaAQM3UoQVgaJMFTsjGaSydYLluX8NnLs5M3f0HG fsdl7A5BRiD3IRuluFGLxfuJ/wB2jr33pAWwkLpKpAX/4bW4BNWL32f0u3ld jQBRpzdgo8waaKJFu2EsXeZg0SEAStOlp8DZlE5u9EJ7ZS2m5qsVX0XoAsVG r67Q+kquwSRG5TSXPz+RJhg9TciyKeXtRP78pFm1r4eO0bs6I++qMtDY6DAr 2fA9EPTYYaycGqjsFHk8ugT7NBclK531fHeC7ZsoXV6B3ZkR0FWFGAp7LaJ1 ofWk6E/Td8mGLVfIUQFAxMjbaRnH6QTWiQ0dGhkk+3UeKdx4Qommb7CitLSo S2D0DcRd9SJVLlvnJb4lAkHIhahhWT48xnWJa7DlI7b3H+tF+iSqnm00wS/q PSv70Zl2eD3TnEKWm3xh7WvdatY4S2+kouFECgtd7Y7AoboHwF3GKIcaTFy1 Y3+FJWgZeAvjIB0nyLMi+vkaWHDSB0FVHdCXegddg1kZiW2O243tdtlu6KJI SYmnxavZmjVaO7LVzUhwm4hnwnrN3rpZQkpdFRcVNWB9EN5ljh+AQQEbnVwn aVUm0wni1GJcimux8bwx0JMDvpvmY29qKbIKftNnMWT7Ecq0ZDnFE1wfbiB6 CUgEL2HRtL7lPp7nZYr+VIMMJCf2x0zA+OHOiG2NwYBCXqhbpsjceVnH7Kpk 4PAFATQm9wiQNQjBCmkW+aaZpNkFYlESWaQlSy1mvJZv050yWNg285nFN6jc MwDABcSbyYIlQuZnFo8bKVcd8/IJ4oC5fLmBiELfkNsJavbwOIPde0G8DJh0 lhRuP2OAA9ruE3IfRYcveFFhR2hJr7ZEU7cxyoYWmqxJeuqOXvZ1Jbl6WkKx 9NGj6n2IfrDmRmTvmLsVo/UkQ5IFDAnxwm/KUYW/o+1XXuJvPBQvnjCBG3Ko kDJr+dIjpAIWanpcmhcS0FU6RoNUK4H+fP2Vl6mh9ysuxn3e4Qqrp1rxEFsX KVWxS2CO8xzFATk10PMnzpKLJEsK9mtfxwXaKBHL9aQoUKFLSvRpbZC9x/OJ A75rnDrSDTpNR6NkXikyzkAzAFtf/IEosRl2lELEq81hZfSDFm7Mq9HXdW+c WktOzahp5qn5tj+P0QLraldbkkF30liYTz7pI4vQbfixaeYuXTrSDeFFsFVd OW3w72A7VJpp6P7PwP6dT6qf23rmrxjG0h+mP66C3+lB2r+ufnY+Dkp31R5f urN3NmZdonPDe+TPVpwcwVZ4Otf1yUBa4Jg46InyvaJUFT+kGMbisSVi/IoJ rZUuFH0q8gT6oO4PwZpHhVdInzWPS/gPDql3iGwaUK3YFkC+fZlM59GkLlDU kLZYV/lMuYXt44YiB+5A7IGNsWWHb9hZ22nD4kmqfYIovSjnffROyNoZy0Zb ssgc0wslFqmPpCKNX3kRSaKd3+AnjKQJH90uPgqD9fif8NMxGm/UAjGrRV/3 ++J0J/3128j6wfNsObTFZoa+mW/DhApsD+Ad4Dt6hVSlvyBQgb87vcIPnjcd IHL7gFwiV/3JLH7fJ/U6GfdJ5fh2+SdpdutPrFFgA367AmCu6DAzUjKsSCaM +Q8H0Vdq/SMKO/l9d61lDdaiM2x1Sh5h0MO7Ftu2VqVrH8dZz7VPTCs4L3NS o6oiBnWAtK0ZHreRQM1F11SDkW7mWATQXlPiwEASWviuadmL0olmDj2L2MVL Tgoxfg70SsYSqCPsIHi4PXwIlonMYpqPlI9Z7TlxYYi6oEfEXskBem5r2ikf lElvoX5oX4kZxuda2JrHpS0uB9HKuaqPMlklDXYp/onCgcQeglA/iX48OyIr QSMjn0yQF0C/8MrCtto0FoZdnHpwxBNsodwkihSwOzImRLmwlGswRGgMOj4d J+z6lK7RHC/ZRBFO5PSIetp5wrYA4yR5D5KrQqyOQRPNxmQKT0jpAfsFTQDm 6hU5SMFIBxubKAD1a+KN6SwlK78CbnNeV4nFArXEkYMaY9YotyKbSKzYCy+k TlVDlBVg4wAebAULT9qJVEZK6sqgbOQgEsgnlcnRIrNq+JAdbjZeZf5jawGB uTxo8KSuzeN5OfkAB1qns3qGX+C/5sSO5kHweGLoMKRGXssciwRPZHk3EA2m RckkqOfqcw0epeRpP0jiAuh9wfRLd6o2H20nWZllJI2NoZxPiEUQ6QHhGShv OU/Voew2rzPkhO2r2pwGTdSap8v826cptkM6Cer6soNuq+5Hr/OyTM9JE8IW pZIGPVJWajl0dCJHemK7NPA3iVNSjGDrlqBElEKFF3WMJ3HKO6h0BxpB2XH4 Gbmgk/fiN9BaB+lQ5wnZQHWFyj7RrFhKfEw+5/Vikka/xBSmM74BXJYgoDY0 tkEYWVtFTjrJ52bFbiCetPIICNMBWR22G4VzqHnFF3hoTPt7mri6F4CX53x8 0VQ5mTbRC53XUzylJiVSq2AABSpo41nKLscyB4oG4Vyh7i7glcq3q9Vk3yLy tGOxjAzx+e1tRXNeKT3TuEBRSaC9Ja4V7VJVnpkQW4nW1TjMrja0B6ilGe6T DVr3uIVThbtkf0iWXFBMHjfU7qH1rvq1u2GC3TQPY4HaU+6AotKH0TxTpRNk ub/byZVltw35qhbNFIf3fFk2sJ/j2Ho2cV2LTr8scdKQj9EFkGIqLF+jwVFw LWwYEQgXzBhpSHlLLfUScZavtNbSp9aJFuNEmMJslozTGF1Sq2ufGu08ZdNG eXAcFdTXJMNqpOXwdaeFa2BjXceS4JQ4lkwdnimdUoh2sKpeaYWnLFUtb6VX Cti3MCvUTrlXo8K3Tl3uZozSJrjfhoxSe3lsM3OBJXd7O3ZdRkF/4ca34ozG NwfrINdANqbVhnr60YHLMi5bIFIdqT2vO1J2pzw3k1NPjLkpUkBbmy5O14yE aVqbWio1HXCeXEJXFFJTS2tbKhXsg9SiyfF/pBTA5h/nMq2LJmoxAhWliWe9 hms2qMiHx9CR9cajJY+StLPd91Y4Jr5qrbztjcZRDa+2t8zi2MjQK+TDu3CN GOfm2N9wr3VzRIASQJHz0rAH+6C7g47p7hj0QjA5/dgCs3K3iGrAAw0JaSD+ c8QnTag5kf64+CCeJYXucb2rfu26Oo4KDdAt/bNlJ0rAmzHCQYczauLehz1n VibOYr/rhAQk6cUlSsIbNoo49hH1RQ6CUNPcGQzp3M6EX8vdoGIy2t/ZfHie Yoy2UUfQ+TOJ62mFAoa1DrBRMmAeeQGwUtgh7A6KPEpNgAfFDaLUO88ByxZp sBdY4xE6tTTs82QUSzArh6BEGPRRKuUdNOkJmQx0kkF+SYkvKOVMhiIOEQ5o ClYKRguPULGxwg9K/ZVlXEQSXlYQ+NIjnp5nOYokNjUEI9CdjYHcQZIBoyfm ILCN6TWsih0Oahl88PllfEXnxNiBtmsl6BNoIQcOlImK/+LwJwoCvICVYAnM CFIR7Nd8imvPTB1IonWQcQioejcI8dD7Fcq3lskhIUDnK00RQOcsRqnwP/Cl AB6X2JJAR901JYgdpeEe/hD5riBDYGVQGxKFa6GQALiCIkKbGkqOk0TiExX4 5tt2Of6xTVyLPNC6hDUakJioEx9FC6iBgU831CPpE5FILyxhsxCKg3W6PaX7 kaHpoSewPOh+FdLSJpqQxIT3S+QlE6e7dl3PUrCMI59wVAfaDgs5fHr4WZ2l FZv+dKpe9kxAudg6xsFFtOV4uH7Mpng4ZbR7YhXXaWm5TmCaF8BmxmOKnY6n fNp1gdwO4+Y1HxeLzoKZDtTZzKBAMhQbtGiVFxtlQimjt8jL6swy25IYuJzr SXMMRepA6WsUZjpN2IyVGAdxEKM8tZvNOACGY9dMj+K/kX6S6B91Ono3vdlg nl2M1UvpEkT6qLJMZx6zqDNSQypyTcSAtZsSjVGiZ+DXwCcFLorzwdVCRzF7 sBX7pDitq3xaz8g4Y08YDsxDqRPDKL4CDSLm+x8bfEh4noB4kQsNfJDOQiKO qrh8x75w7I+CPpWv3Y4pkutB1mIC+HjBCCkNr/kMolOUPgpvHPVG7sBkmrN7 j4YyN3F65CG0HOPqxcC6tnEpjnajK7DqYOAYcVwMSOkxOQEB+yD2gdYpVMwN CiFFcUCB0lqVMmxcMOJ6donQMHRkdk4qjb6TFNB+v0EFcJq4zhOzx/HeDuIC r81Y9EvDoA9m4F0tIQdw6Sqf50l1nSSZe1BA2gQ5DG0Pkx0M5e8ZIUuliGsl mjwk+oaO9oOYsKCJ63GCrrdI29zQWgQquBWxBn04g/ShTo41RRmHe8GvSBhg j9bcUDPWXixNhK7AAhK4zNOROg6nbsRhrp0pF0Vi3G9DYUw+N+ZPRE+jbpCA xXPV4JUrqBykCTvXEPHKoty/bN67pBMy0mhnsFwpHU/GY9nIFFCby8XGAgOa WtQkP7wkoDFVP4cVJv9TX3eqfg6qTtjVEvv79qqThJYbP9lC7cmF/LaK1G2V KO3vUMO0OXAWunDuoHZ5Kte/u9pl0VtI63IXfSUFzKeHrrq/R25bsXIsxtCQ Nka9Eb3APjm1FDgKS1X61q9X2fpN07pHTUuTmeZQtAZuuoOlpwfsQ1p6CmDT KJ4BEG/4F3H//6uqCXdREc4uE08p1jfeJW7RiRclBatd2UXcm43N+QwAsQuE OFMlsJr0nSim+tor+Q8X+UvcSNaeL+d9dSHle1LZmKkItPAZ6vCXNex3R5VR kTYBNafd9+PFsIYdQRjM2qaYeR2EHEPjqqHgKFv5FojiU+UxnvLrQy5EUwXs rKQtOk1L2hDsJ6UbHhdAexe47/TFQuXdtuh8qQvJmeNv/qRfkWKjGvr08Lvo r/aJ4d+sIzjnKFGjRH8ZaKkP97yWDWeWRegt/iyHklY4DArpFJ6oEL5cZ8J7 bBtWTgygM2hFpwWhwxPiho0dRdtJjGfaWbJvuy4Wunz+1Ej6sffoESb9iI5r YqmVNQHk7YV2tLPk0EcvgcN4HQWoBWvyfpTwnauOlsy+oDKHOdYBieqqF/H9 HeXFU0vPH83qklP0yDjDzU2+4mNugzaPkcYYB6m+hK7k271N9bG5KBr6GKQP XcQO8em2GwdBI1Qx61U7CZijYYbt8+tFdq1z9UKUPZd3d38hdh2e5m+2678J i1+BsS8KJWkRAUtQt2RNwyuqFjUYUxK1hZVEd4osUd2Fgkui1eNLmts/JMbC O+xXKMyUCFsugiy2G76r5XFafWdLM9rwZzZLpG9aHH235dP+PTOatVzr68h5 A1nbfMSO8ftZgVZm01QxI7MgNqfJOv/RsskVOofBou47bO3DxHTOPTf3SqnC RHAylOPEz9zQ4PshwH5j9f/OrP7jyqz+451Y/ce7sPqPraxeo91n9fzitqze 6s5l9R/VtJawetXk/IZV2d8tW4rzG1ZbV2iIeU6azQINx/ENrO11kryD35xl HacF8wLsx3wmb+UL7lWdpx3IUxviPKsuaRD3x4fjJomLQLNgOxxllf5obK9h AwGg3c7zsokrtx1m7MNhm0GvrXNHm4N2A93LsEcIEJQW+45k0hI/xFuXnQYc gg5fFLG+nNdVdNalZFJdRU14pZkJputGjZJNwKEUEmlhQvgk6w52JNkY9DtO stOj/+oMYoAYvlyAvel0PyYiUNljgaBAbT9SZwZskqfksBtuihdxa1OFCuJH tr6CCoZKHqCvtg038QAOPtzCX7hb7NCfCWgl9Ugl+JEkfi2JsTjDDd6bEbQY l7nxf3dp23VDyKaTZoU0pKieHBNmkuyGz0f03tTxmHaUDVC9d/VMu5tHdMTN E9R+P9onUw7x6+LGcaNS1eQo7VM6thdDw8F+2yHqHbvYTX8Xf+0P7SVWo3gr /A0tAX+6zd9uNz5WUC2Mqg0OVnPwKc9U9mhXnb0avwR8QC8kRYwztUbj/pB8 nFZkbKUu072gftQKEhiDtu2oeCNvSM0DeUMqRtel+z5di6O1b1ObeKgpdWw/ xU56RFjeI4odhi+cx5yepAXFLUsS2LAG8k5kIp8w2Zds29V2LQz7xzir44ID 1J8m5wX+0eNOR3hRT2dnDQBHO5PDPPAtKeL0V6hT7NNChBUKoSQGnateJTf2 5rWToo7yQtKYaG3c3ZcWp6GT1fZseyr8RVlmHtW7FM+EGVgSxXW0LWJRESPC pV3mPir4wUxbMpVbe2H1jRBR0BPOtdJLZXo2kFkdhkCzthWtiSudw1MUKRRp nqnmKBcgVHoccjpjRAtlZMTweY6ZIt4RoHfKVmUHrvsnbHK6GgcWwL6spcfn 068GBN6mk6utfLvPZhdep79IePxt4+NXDnenPXG7iPc7hLw3CYZWww9+Xz36 Pa3s2PeyJfidg8ut6HdObYew/gLh7rwzPCU0vDUMA9PNSysDqvZHYK+U0tlJ cpXQehs2DQBdxAgPhwdMjQrYzOSAPY5ov8hE9BY3bqiQU4mUZ+ynNEndWLPE QAQaGNO3B+5MCot2vFxNLAUD9X+JVEB+Fik/J5AVWP0LjO4mbId2qo1yi8lx gCR6dyODWvPPP5BsZWBk5yWQ/yA4gfYji8vY3KolZqy9YHHZxANdxlc6soki stRtzGHPjoMbJ9wuOuU0GNMbFQaxHFMOcPcMmY7KNT3R4AO+oe+gIpjlUrKM VXayzEaxEiKKyTR5n+pwBN+T503EOPGI6zU9RlHYxUSVZbz0RsYIH+6Zbu0k lN8u6bbIOdJH+wvtn/YbqAVfAu/X83FzDgs/Ix+d8iI2P5PXxlegRjKa3vIj f/6snsNGoyoi/qfL54U5JpKx9+XCz/ALoKR+c36NebVRRltQKvTe4rRr98I6 NL8oJdZvRNj87DcipLpXvxHTSp/9f09M2tvq6zza4erT2O/WLFVtwe03R3Db CTNIW5/UU5TOdZb+o8bgk5DwZ78c6OhJRWVixglmTEQLAuO4i3w6xe4m0QzM iBSvFQSuWXC2oIFzK6/y4VHKA4Uci6XygHS2RkZH+pz8LBxETEEgmXu91cQE s3tiQWZYsJmqgP9MJ5slNxDV7po2jkS71gbqNjMRo42EXTs6FmtDTtEgVJnc AkN2Njje5s31I2RhHbt3BCNDZl3wkg/ZIaWLOElQFb9TocDksJIYdzlotzPO K6PIWghlLgKA1r53gDS5CK6bWa7jkh0zMF/2DWB3zzJJoKQLo7kXlRW4gck7 yTTRx4z9XaRXSWYnr8nYhiVzVtRsjV6MSpfEXNj/ILCPKFtweIoULnYz1xTj r4ZBl2x8NJk8PqZspACf6tqH9lwkgmvJSEQ85c8QJPvwAgatKAIJUKbLB1lu hY2nOqvYGEHTMqArce06vxmmXbbC2zGrOd6Qa9INjuMXK2ik37GXVOLNNWNB iySbSAS+G9bO3dRsiKCTSZIIinNTGAGj4jkCe0ZTaVYeg8+7YQ4v/mCPjyt0 GN+iNOCtIp+PlaONiVMi6KVlaYouGbTI5ZQsubYs2wdW8TTbxNJsJNy9uvsG +OIg8sYc6LYCovP8RnuBdG0id6uKQ1JvB0XZxlwfxXPiXQ3DPNJ5HE34PCEl x73CKdIC8uJdhpWPOHU/sO9m5TVxBJCfCfsTYWYnjSt1Da6md7o5JhvGSoiR bcuZ5VShNLzGm3gcUHEQbiPUYvJb+neXJNk8g4UdgsyYJqOKrqmavHZ0MGCK SigAykvKP4fZ6rFQGljvP+s84Losx48l+5YO+cKSEA77crAoBK3hhw9WSQhd /86qLMeFDC+FunQhCycwxyn/8cnexMBlsRczvpp7Wc9p38RScsP3pHHqdF2F A1mSXsUe0+loGit92WBIF7BAnkaeRyJkugkjiVCcYhwCRzKWlBkWrLTw6miS A6fmlL9U5dNQ75oUZO2P1eoQOhnvzQ0zujjGiNKjkRt3EB3aq9TjpZQPSyqc OONsIOrqc8jJU6qlgpeJvuA15UPYxvwSGZoqxJyiZP4Rc35HbxIudMyl3Hje 4kon+V1Y7yO/KB9fh8eb3XT/rXQyzFuhfG3lE53SqzZGdTEVXAU+rqL6CySl tHYnTlY3jlzdRzpPJnQh/1LFT9qp3viq0KJcjE5a+4EFDd9mt0rl0elPj4+O WOrTKaANJRWX8S+GRfpumAJZEvliMTBznrI7eEjHKSjotrcfWbVfVBpWFRsS qRACnczJHNcqsNRMRETBppjmN3IwoHg2n5MQqsubbHRZ5KrCc8RFFPFMBhO2 UgLEJJ6rYkrx+O91WfF5ii5Cac6F/GOhao7/v9rF+1FyUqlrMgV963LeQtl+ TPB/dw+jNCrRWOjOqBw4p5nOpIxgCpJUmS6U7qXCx6lm2sj00yuVrUDSa9LZ jyQXqSjkohRBg0exjArpXslUai4Qn1v3IN7yqR9rXZy+Xg6fJOU23fi0WRkd 4oAWWZmhnbPsbKxm5ideVKvAmQeClWPohqhkaiN5ZTaMuwZam7CYvSpqB/Dz BT7OQounH6ovFx8OPK1mHFUrBc5klbMVXfD42emLw5f906M/nBz/+Pyk/+LZ 9yITsSAu1p41CqFzDrW0Cq4yRDqBpBp23VtVYAZ0NsqLZpU649OjUqMMme3h tLqka8hZ7qn9rUW8cNPMQMlKsYwzHaCVHSXBZzG0VnV6hRZDOBHJgN0ws0ZO 2zGiAyDrfMSGr6gvCizEJh87H/v6B3+FB67e/dFyKUXqLVaaij66zin17mWM Hzn+C/3dq+ssKT7Syf2pFuX67THGfX500mapV6oG3Ud9OG4+e5sk747jm48m klC9eYFs4WNkB/GZwfALEzljPvoDaG30DYZs6Z4oBuujDpw0zY+Yi/KsvYnp RoeYZPiUHEAfed9WGl+vgML0K+fNU7EJPvr+KN3vc+AN0qp9cNUoGePYYXtJ tT2t8gI2Aa7vx6jRo+7yL6DLoUHAg1r3a00D4NStb8+4WhdOWGb0wJ8hjoV+ NdkYyp2GNPsA6fgFP6ckmOFKOaRrSGk890hUudkoSwi7ymZiJVMRspZbb1KV zZQ+UAdej49eHZ9E35/88Ozl6RNgjFMfmO9MUd4BOhC7HTWu3Sr60GH/Yl95 eIaD4TfwDLdQOY8x0KkusgP86ECqgLyfTQ+y8oC8ku788cM5Riq813vxG5w3 T5VHpsF4zh9IBsgH+PwbeqBrPiidCqsPIzoOoiPWlQnNx8jpqPwcjfvJH0gs MmcQeLZgDMTwQXRodf+CShGiJOE6ixaLN4PmxUWslBfqrvvs5Oxp9PLk7MWr 4+htXrzTFZfoI8poMeI7BN23P0Rvk/OD6PFlVc3LgwcPkIGTnyopSIUZQPcP ri8ecIDLgycMMHz2HJg2fAfcelrlB/z6O/XFkw63U7W0o+jPaT0BFMMMOpH7 o7qYxf/gNsPvLuv4OkkHoIZy48MaJIx0k0Vv67YuztPpdHBdW98/8eF4kV8C aY2j7/N6FI/jtGgFhxsOzlXD73IsxJhYvRqwjmEFYKX+ZN3O8vsbD3AdvpuC uQjsCLAbjwb1uye0JBb752WhjdqshumU4yFSrHT9Q22TMAAmF4PFjLyog3ld oMPaRMpIxSHuYXHZobaaQ7LwR/n8pqBco+ujDSrQHRFVnhV4r1TFiYIY4PIA yjEpWh5G+xBudUDlCHYC1pufRtQru4OKK+X3xOqSmN6LCnKkUpMAnWqYSUly ccATNGoKSlKFWe5Rt+WPYWL4B/oR2ME7kkz7KSlDoJZSNhXQpWs00rBagdZI LTuBXGyAqgwPAbCIss4eg4yV9f83yVWq68V9f3oM+4g/wHUFwCqMR46MQTFS GDDoW5Mlfp5cgFLwGpXqkvQ21iY5mRo1PxZ1Sz5YV5u8wm6SxGxwgbqPjvcN hVLCdqI6BzCoT6q1efjykOupY4k8x9dFFnOtkCMmC1Hya2PUF8kFLtYNE60H 3PX19SAFPkeAcQl4msMDYt1WShsFJ20WJT9UtlB787ADl7YN8lmsMf8NOoH5 c1oVeCzFK3GPTGpMuUboBVMwHakDDpa6pg78Glq1az3+F+9z4++qpjn+ToXL 9S/chTRjs8n8Zj7X9cjxT69E+ZpszjWwl9bYEl9TlcnXblERnjrxy8JHw51o HVGBReE3+FcsCb8RrAivsXcTrVYWvkvCWFFUZBQEEZI+F0RJhvfvYkOGg+4C +YnrivKzIaUtMaqZn8jPKIL/ib8t8ovaLoLLXBlQpX6QHRXKG1bqIx6Kp+Ou lWgwGfSsAzoj0BU4oXsr9wiSU2C9CVqo4voi7OPVxoNwgW2kG6v44xH6rNgo 84VlpEpbjiRpk4Zioxdo23bd0uAS5SPITm0nMfro5CvJYI/ICdwH6RyfAb4y 0xR/2Aez+Y1+0EQ/oeG09kPAFb0yqekR+L5EY4Th0hGaQeYtI1R1UoaG2Fo6 xJl8uXyM62SchUfZXjrKW/3tCnO5BMEbGmZn+WTUp8tHmRRpaIzdpWM85Q+X j1Ditg6NsbecstSnC0b51MYZTlGta9yNGjQ3ic6VZu0SDvnRICtv2Nr6+n99 vfHtx//qb7xeX1//62b/0d++3jje+Hb9bH2T/vo45H+24J/tv22sOdv362jt AJ7v/o3aWL9ubHx8rXp7u/bN4okd2+WcLxOr6KWkGxtRYinxUYMon6VyBYw6 rJW/a52v9HAuThVOvfZ2TaKlbxqvjtd0XgK6Q4A+BdSCrS7pAt+B3GM7UFcA +TChtByQumuQTmtna1qpcRPcpqWQCqeoyZMyW6v0yQvOfe0nBnftxVqz59LO RGiARHWB1FTAH3qL2JBgx7IFh6p8ZD4ktYJPREEbUOEN2qink6K4mBmHsS5W LicW2KIs81HKcRq4bv9U2eKKkj3L32z9oGjZG2xb5r6qBu04BdtFNHli9UeW McbrOgj0rEsacadodLmjfbNcHwgWRjqT9IpW8JSKgcCflgrzOruxZhVcQ80u Lq+6oPpPOj2f306HgbtV5u1tVa1SbD6ENEms+VkoW1qCPp84113wp1GIfuUi 9KqHO9eiVx0sqNxla7waVQ3N8o7oaj3nCK2PWyX+NvvF3Ktt2zA6sZU1HXe8 Feej8jXRYX9L6RhNrfrATYrIBADTSbO+LGDiu18AGEqqLw0WXw5fBBVVufnC uLLLAAVA4juMXxgmumS5iKz45uqXpio6V1oAFl+1/MJQUUzCAqCcuOS7yWn6 MtR3kqFQCgsd+milGVuSjm8+qW5bx8UUReSEu9eBTbc8sMIx6dbOKyd7gl/1 GO97Ub7X4A5nOX7fkOtuW1FmF3y9p7FVsmodWGGNEQJBVai999lbHfPy0HO+ 4arVFBUHElYJ3NLBtxbREnWL+or6U67yc4Qs1hLRWibHiQSq/rZXHVbfthUf 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 --> </rfc>