<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-1"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle22
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:77755718;
        mso-list-template-ids:-1806431806;}
@list l1
        {mso-list-id:86728658;
        mso-list-template-ids:-1594065096;}
@list l1:level1
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2
        {mso-list-id:93135968;
        mso-list-template-ids:1755103474;}
@list l2:level1
        {mso-level-start-at:3;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3
        {mso-list-id:211622234;
        mso-list-template-ids:1899643236;}
@list l3:level1
        {mso-level-start-at:5;
        mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4
        {mso-list-id:271518397;
        mso-list-type:hybrid;
        mso-list-template-ids:-1140399252 -378083870 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l4:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l4:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l4:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l4:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l4:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l4:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l4:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l4:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l4:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l5
        {mso-list-id:281376592;
        mso-list-template-ids:161219522;}
@list l5:level1
        {mso-level-start-at:8;
        mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6
        {mso-list-id:493302726;
        mso-list-template-ids:-685110872;}
@list l6:level1
        {mso-level-start-at:2;
        mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7
        {mso-list-id:814644938;
        mso-list-template-ids:-1584736554;}
@list l7:level1
        {mso-level-start-at:2;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8
        {mso-list-id:1085808882;
        mso-list-template-ids:926942464;}
@list l8:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l8:level2
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l8:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l8:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l8:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l8:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l8:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l8:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l8:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l9
        {mso-list-id:1401055352;
        mso-list-template-ids:973113722;}
@list l9:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l9:level2
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l9:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l9:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l9:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l9:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l9:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l9:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l9:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l10
        {mso-list-id:1410233465;
        mso-list-template-ids:1166604668;}
@list l10:level1
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11
        {mso-list-id:1548371723;
        mso-list-template-ids:1160969412;}
@list l11:level1
        {mso-level-start-at:6;
        mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12
        {mso-list-id:1834682158;
        mso-list-template-ids:695902722;}
@list l12:level1
        {mso-level-start-at:7;
        mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13
        {mso-list-id:1877112012;
        mso-list-template-ids:96386002;}
@list l13:level1
        {mso-level-start-at:4;
        mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14
        {mso-list-id:2009212663;
        mso-list-template-ids:507561780;}
@list l14:level1
        {mso-level-start-at:9;
        mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15
        {mso-list-id:2073576449;
        mso-list-template-ids:1168910298;}
@list l15:level1
        {mso-level-start-at:3;
        mso-level-number-format:alpha-lower;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level3
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level4
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level6
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level7
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level9
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>The VRML Grammar is simply part of the specification to formalize rules.  Since it has strict and formal (meaning precise and unambiguous) expressive power, it is an important part of the VRML97 and X3D ClassicVRML international specifications.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I do not know of any software tools (in X3D or elsewhere) that have ever used such BNF grammars programmatically in the types of ways you are describing.  They are strong contributions mostly to theory, much less directly to practice.  Backus Naur Form grammars have helped inspire numerous other diverse grammars, libraries and approaches.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Incidentally this is why the X3D XML Schema has always been so critically important, it lets us formally test 3D models for compliance.  Adding lots of further verification tools (mostly available using XML as basis) has given us a rich suite of testing tools.  Familiar link covering immense detail:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l4 level1 lfo16'>X3D Resources, Quality Assurance (QA)<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l4 level1 lfo16'>https://www.web3d.org/x3d/content/examples/X3dResources.html#QualityAssurance<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hope this is all clearer now John.  Perhaps a lot of detail but the same story, over and over.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>When errors occur, they can be detected and then corrected.  Our big achievement: X3D models can run in many different file formats and programming languages, equivalently and correctly.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Someday if JSON Schema ever gets standardized, we’ll be able to add that too.  Thanks for keeping that possibility alive.<o:p></o:p></p><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>all the best, Don<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>-- <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>Don Brutzman  Naval Postgraduate School, Code USW/Br        brutzman@nps.edu<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>X3D graphics, virtual worlds, Navy robotics https://</span> <span style='font-size:10.0pt;font-family:"Courier New"'>faculty.nps.edu/brutzman<o:p></o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> John Carlson <yottzumm@gmail.com> <br><b>Sent:</b> Thursday, January 5, 2023 9:01 PM<br><b>To:</b> Brutzman, Donald (Don) (CIV) <brutzman@nps.edu><br><b>Cc:</b> Joseph D Williams <joedwil@earthlink.net>; Michalis Kamburelis <michalis.kambi@gmail.com>; Patrick Dähne <pdaehne@gmail.com>; X3D Public Mailing List (x3d-public@web3d.org) <x3d-public@web3d.org><br><b>Subject:</b> Re: VRML grammar, X3DJSONLD JSON report. Was: Re: [x3d-public] [...] HAnim2 X3D4 BoxMan update: does ClassicVRML Grammar allows ROUTE in children?<o:p></o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>ClassicVRML, batch parsing?<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I guess the primary thing to do is validate vrml examples against a hand-checked vrml grammar.  I think what you’re saying is, the standardized 3.3 grammar for ClassicVRML already works great in X3D-Edit.  Do i test with the check button?  Do we do hand-checks with each vrml file—can we batch up a set of files?  SHIFT-left mouse click?<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I fully realize that many tools provide some degree of parsing of VRML.  What i am asking for is batch validation.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>At this point, it seems like we’re trying to validate the X3D VRML grammar found in the 3.3 standard, either with tools or otherwise (vrml examples and human brains), and possibly upgrade to grammar for 4.0.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>If it’s possible to translate ClassicVRML to .x3d and then validate, that seems like a good path, if we add batching.<o:p></o:p></p></div><div><p class=MsoNormal>——————<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>ROUTEs and JSON<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I do remember when we dealt with JSON, we had to bring out ROUTEs from inner contexts, but I don’t remember the reason.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>For X3DJSONLD, all JSON based ROUTEs come from X3dToJson.xslt.  If you need to test JSON roundtrips of this stylesheet, let me know.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Note, I have DOM2JSONSerializer.js, but it gets into deep recursion calls beyond my debugging capabilities at this point, so I can’t offer a solution there.  I can’t recall if I handled ROUTEs properly or not.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I also think that X3dToJson.xslt may not working in some cases “IllegalChild… was getting generated on some JSON files, but these problems are not currently reproduced (try using a *recent* Saxon-JS in a web browser—the problem presented itself in a web browser is old versions of Saxon-CE, not the Java versions).<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I have gotten rid of the JSON files since I can’t regenerate them.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Any additional X3dToJson.xslt problems swept under the carpet for now.  I may need to update the Saxon-JS on my website.  X3DJSONLD git push is currently not working, i may need to delete some build files from my repository.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>——<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Thu, Jan 5, 2023 at 6:55 PM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Simple summary of ROUTE conversions:<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><ol start=1 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo1'>We will allow ROUTEs as children, as always intended.  <o:p></o:p></li><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo1'>If the ClassicVRML Grammar indeed needs modification, we will define that for Mantis and 2023 ClassicVRML revision.<o:p></o:p></li><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo1'>As soon as we reach consensus, we will ask converters to fix support for ROUTEs.<o:p></o:p></li></ol><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Quality assurance (QA) efforts are all focused on XML and X3DUOM mappings to different program languages. No need to autogenerate a ClassicVRML Grammar that exists and has pretty-much worked for the past quarter century (since 1997).  If we figure out and confirm an improvement, then wow + bravo everyone!!  If we determine that it is OK, we’ve learned more too.<o:p></o:p></p></div></div><div><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:10.0pt;font-family:"Courier New"'> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:10.0pt;font-family:"Courier New"'>all the best, Don</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:10.0pt;font-family:"Courier New"'>-- </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:10.0pt;font-family:"Courier New"'>Don Brutzman  Naval Postgraduate School, Code USW/Br        <a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a></span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:10.0pt;font-family:"Courier New"'>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:10.0pt;font-family:"Courier New"'>X3D graphics, virtual worlds, Navy robotics https://</span> <span style='font-size:10.0pt;font-family:"Courier New"'><a href="http://faculty.nps.edu/brutzman" target="_blank">faculty.nps.edu/brutzman</a></span><o:p></o:p></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><b>From:</b> John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> <br><b>Sent:</b> Thursday, January 5, 2023 3:46 PM<br><b>To:</b> Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>><br><b>Cc:</b> Joseph D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>>; Michalis Kamburelis <<a href="mailto:michalis.kambi@gmail.com" target="_blank">michalis.kambi@gmail.com</a>>; Patrick Dähne <<a href="mailto:pdaehne@gmail.com" target="_blank">pdaehne@gmail.com</a>>; X3D Public Mailing List (<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>) <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br><b>Subject:</b> VRML grammar generator. Was: Re: [x3d-public] [...] HAnim2 X3D4 BoxMan update: does ClassicVRML Grammar allows ROUTE in children?<o:p></o:p></p></div></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>While I tried to find an issue with the VRML grammar, and i had several misperceptions, and on review, i didn’t find any problems that just “popped out.”   Perhaps my dry eyes have worsened.<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Perhaps we should provide generation of VRML grammar from X3DUOM, if not done already?  We can have thousands of checks of examples against VRML grammar, as you have said.   I have not kept track of VRML “stuff.”<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Your thoughts?  I know everyone (besides me) is busy.<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>I can even try to accomplish myself with existing grammar and X3DUOM.   I can try with writing Xslt first, and if that’s too burdensome, possibly start from the JSON schema generator and branch out.<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Trying to make this as easy for someone to do as possible, can we make the right implementation choice?   What limitations?  Declarative implementations seem important.<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>I agree that supporting one-offs in X3D Validator is useful and we probably don’t want to support batch web-based validation at this time.<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>I have also researched “schema from example” and “grammar from example.”   It might be worth applying new AI research to this problem with the right prompt.<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Maybe i should apply AI to the JSON schema.  Hmm!<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>John <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>On Thu, Jan 5, 2023 at 11:01 AM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt'><div><div><p>Patrick, thanks for these important insights.<o:p></o:p></p><p> <o:p></o:p></p><p>Am looking closely and tracing the grammar.  As you know, such grammars are very important because they formally and unambiguously describe what is allowed.  Also pretty tricky to follow!<o:p></o:p></p><p> <o:p></o:p></p><ul type=disc><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo2'>Extensible 3D (X3D) encodings, Part 2: Classic VRML encoding Annex A (normative), Grammar<o:p></o:p></li><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo2'><a href="https://www.web3d.org/documents/specifications/19776-2/V3.3/Part02/grammar.html" target="_blank">https://www.web3d.org/documents/specifications/19776-2/V3.3/Part02/grammar.html</a><o:p></o:p></li></ul><p> <o:p></o:p></p><p>Am finding following excerpts of interest.  Hopefully addition of color-coding helps:<o:p></o:p></p><p style='margin-left:.5in'> <o:p></o:p></p><ol start=1 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo3'><b><span style='color:#548235'>node </span></b>::=<o:p></o:p></li></ol><p style='margin-left:.5in'>  nodeTypeId { <b><span style='color:#C55A11'>nodeBody</span></b><span style='color:#C55A11'> </span>} |<o:p></o:p></p><p style='margin-left:.5in'>  Script { scriptBody } |<o:p></o:p></p><p style='margin-left:.5in'>  ComposedShader {composedShaderBody} |<o:p></o:p></p><p style='margin-left:.5in'>  PackagedShader {packagedShaderBody} |<o:p></o:p></p><p style='margin-left:.5in'>  ShaderProgram {shaderProgramBody} ;<o:p></o:p></p><ol start=2 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo4'><b><span style='color:#C55A11'>nodeBody </span></b>::=<o:p></o:p></li></ol><p style='margin-left:.5in'>  <b><span style='color:red'>nodeBodyElement</span></b> |<o:p></o:p></p><p style='margin-left:.5in'>  <b><span style='color:red'>nodeBodyElement</span></b> <b><span style='color:#C55A11'>nodeBody</span></b><span style='color:#C55A11'> </span>|<o:p></o:p></p><p style='margin-left:.5in'>  empty ;<o:p></o:p></p><p style='margin-left:.5in'> <o:p></o:p></p><ol start=3 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l15 level1 lfo5'><span style='color:black;background:aqua'>mfnodeValue</span> ::=<o:p></o:p></li></ol><p style='margin-left:.5in'>   <b><span style='color:#FF33CC'>nodeStatement </span></b>|<o:p></o:p></p><p style='margin-left:.5in'>   [ ] |<o:p></o:p></p><p style='margin-left:.5in'>   [ <span style='color:black;background:fuchsia'>nodeStatements</span> ] ;<o:p></o:p></p><p> <o:p></o:p></p><ol start=4 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l13 level1 lfo6'><span style='color:black;background:fuchsia'>nodeStatements</span> ::=<o:p></o:p></li></ol><p style='margin-left:.5in'>  <b><span style='color:#FF33CC'>nodeStatement</span></b> |<o:p></o:p></p><p style='margin-left:.5in'>  <b><span style='color:#FF33CC'>nodeStatement</span></b> <span style='color:black;background:fuchsia'>nodeStatements</span> ;<o:p></o:p></p><p> <o:p></o:p></p><ol start=5 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo7'><b><span style='color:#FF33CC'>nodeStatement</span></b>::=<o:p></o:p></li></ol><p style='margin-left:.5in'>  <b><span style='color:#548235'>node</span></b><span style='color:#548235'> </span>|<o:p></o:p></p><p style='margin-left:.5in'>  DEF nodeNameId <b><span style='color:#548235'>node</span></b><span style='color:#548235'> </span>|<o:p></o:p></p><p style='margin-left:.5in'>  USE nodeNameId ;<o:p></o:p></p><p> <o:p></o:p></p><ol start=6 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l11 level1 lfo8'><b><span style='color:red'>nodeBodyElement </span></b>::=<o:p></o:p></li></ol><p style='margin-left:.5in'>  initializeOnlyId fieldValue |<o:p></o:p></p><p style='margin-left:.5in'>  inputOutputId fieldValue |<o:p></o:p></p><p style='margin-left:.5in'>  initializeOnlyId IS initializeOnlyId |<o:p></o:p></p><p style='margin-left:.5in'>  inputOnlyId IS inputOnlyId |<o:p></o:p></p><p style='margin-left:.5in'>  outputOnlyId IS outputOnlyId |<o:p></o:p></p><p style='margin-left:.5in'>  inputOutputId IS inputOutputId |<o:p></o:p></p><p style='margin-left:.5in'>  <span style='color:black;background:yellow'>routeStatement</span> |<o:p></o:p></p><p style='margin-left:.5in'>  protoStatement ;<o:p></o:p></p><p> <o:p></o:p></p><ol start=7 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l12 level1 lfo9'><span style='color:black;background:yellow'>routeStatement</span> ::=<o:p></o:p></li></ol><p style='margin-left:.5in'>  <b>ROUTE</b> nodeNameId . outputOnlyId TO nodeNameId . inputOnlyId ;<o:p></o:p></p><p> <o:p></o:p></p><ol start=8 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo10'><i>statement</i> ::=<o:p></o:p></li></ol><p style='margin-left:.5in'>  <b><span style='color:#FF33CC'>nodeStatement</span></b> |<o:p></o:p></p><p style='margin-left:.5in'>  importStatement |<o:p></o:p></p><p style='margin-left:.5in'>  exportStatement |<o:p></o:p></p><p style='margin-left:.5in'>  protoStatement |<o:p></o:p></p><p style='margin-left:.5in'>  <span style='color:black;background:yellow'>routeStatement</span> ;<o:p></o:p></p><p> <o:p></o:p></p><ol start=9 type=a><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l14 level1 lfo11'>sfnodeValue ::=<o:p></o:p></li></ol><p style='margin-left:.5in'>  <b><span style='color:#FF33CC'>nodeStatement </span></b>|<o:p></o:p></p><p style='margin-left:.5in'>  NULL ;<o:p></o:p></p><p style='margin-left:.5in'> <o:p></o:p></p><p> <o:p></o:p></p><p>So it looks like there are several chains of interest as follows:<o:p></o:p></p><p> <o:p></o:p></p><ol start=1 type=1><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo12'><span style='color:black;background:aqua'>mfnodeValue</span> > <span style='color:black;background:fuchsia'>nodeStatements</span> > <b><span style='color:#FF33CC'>nodeStatement</span></b> > <b><span style='color:#548235'>node </span></b>> nodeTypeId {<b><span style='color:#C55A11'> nodeBody</span></b><span style='color:#C55A11'> </span>} > <b><span style='color:red'>nodeBodyElement</span></b> > <span style='color:black;background:yellow'>routeStatement</span> > <b>ROUTE</b><o:p></o:p></li></ol><p style='margin-left:.5in'> <o:p></o:p></p><ol start=2 type=1><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l7 level1 lfo13'>sfnodeValue > <b><span style='color:#FF33CC'>nodeStatement </span>> </b>(etc. as shown immediately above in chain 1)<o:p></o:p></li></ol><p style='margin-left:.25in'> <o:p></o:p></p><ol start=3 type=1><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo14'><i>statement</i> > <span style='color:black;background:yellow'>routeStatement</span> > <b>ROUTE</b><o:p></o:p></li></ol><p> <o:p></o:p></p><p>From these three chains in ClassicVRML grammar, it appears logical to conclude that <b>ROUTE</b> is allowed to appear wherever an MFNode, SFNode or statement is allowed to appear.<o:p></o:p></p><p> <o:p></o:p></p><p>That would be a consistent match with the parent-child relationships defined in X3D XML Schema and DTD.<o:p></o:p></p><p> <o:p></o:p></p><p>Hopefully I have the chain of logic correct here.  All scrutiny and review is welcome, we definitely need to get this right.<o:p></o:p></p><p> <o:p></o:p></p><p>If there is any unintended omission in the Backus-Naur logic here, then great!  We can agree now on corrections, and fix any issues in this year’s expected update of the ClassicVRML encoding from X3D3 to X3D4.  Correction of converters can also proceed immediately upon achieving consensus.<o:p></o:p></p><p> <o:p></o:p></p><ul type=disc><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l9 level1 lfo15'>Wikipedia:  Backus-Naur form<o:p></o:p></li><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l9 level1 lfo15'><a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FBackus-Naur_form&data=05%7C01%7Cbrutzman%40nps.edu%7C971217be49b74d63517208daefa316f4%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638085781004877078%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=dmcygRdwYMkIJQcb2jgpsAR09PDGbf06ZAqgDOc4bdA%3D&reserved=0" target="_blank">https://en.wikipedia.org/wiki/Backus-Naur_form</a><o:p></o:p></li></ul><p> <o:p></o:p></p><p>Again thanks for careful strictness, careful checking of model content is one of our greatest strengths.<o:p></o:p></p><p> <o:p></o:p></p><p>Have fun with ClassicVRML X3D!  8)<o:p></o:p></p><p> <o:p></o:p></p><p>all the best, Don<o:p></o:p></p><p>-- <o:p></o:p></p><p>Don Brutzman  Naval Postgraduate School, Code USW/Br        <a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a><o:p></o:p></p><p>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<o:p></o:p></p><p>X3D graphics, virtual worlds, Navy robotics https:// <a href="http://faculty.nps.edu/brutzman" target="_blank">faculty.nps.edu/brutzman</a><o:p></o:p></p><p> <o:p></o:p></p><p>-----Original Message-----<br>From: x3d-public <<a href="mailto:x3d-public-bounces@web3d.org" target="_blank">x3d-public-bounces@web3d.org</a>> On Behalf Of Patrick Dähne<br>Sent: Thursday, January 5, 2023 3:05 AM<br>To: Joseph D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>><br>Cc: X3D Public Mailing List (<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>) <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>Subject: Re: [x3d-public] [...] HAnim2 X3D4 BoxMan update<o:p></o:p></p><p> <o:p></o:p></p><p> <o:p></o:p></p><p>> Am 05.01.2023 um 03:33 schrieb Joseph D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank"><span style='color:windowtext;text-decoration:none'>joedwil@earthlink.net</span></a>>:<o:p></o:p></p><p>> <o:p></o:p></p><p>>             • Classic VRML does not allow to declare ROUTEs inside MFNode fields. Move them outside.<o:p></o:p></p><p>>  <o:p></o:p></p><p>> There may be other x3d Statements and some rules, but I don’t see any spec language for what you describe regarding ROUTE.<o:p></o:p></p><p> <o:p></o:p></p><p>The (only) relevant part of the „Classic VRML encoding“ spec is „Annex A: Grammar“:<o:p></o:p></p><p> <o:p></o:p></p><p><a href="https://www.web3d.org/documents/specifications/19776-2/V3.3/index.html" target="_blank"><span style='color:windowtext;text-decoration:none'>https://www.web3d.org/documents/specifications/19776-2/V3.3/index.html</span></a><o:p></o:p></p><p> <o:p></o:p></p><p>The grammar is written in Backus-Naur form. It is the „Scheme“ of classic encoding. Have a look at the rule „mfnodeValue“. You won’t find the symbol „routeStatement“ on the right hand side of that rule.<o:p></o:p></p><p> <o:p></o:p></p><p>ROUTEs are only allowed:<o:p></o:p></p><p> <o:p></o:p></p><p>1. At the top level of the scene<o:p></o:p></p><p>2. Inside the node body (between fields)<o:p></o:p></p><p> <o:p></o:p></p><p>In my opinion it does not make much sense to forbid ROUTEs inside MFNode fields, and I am actually surprised that someone implemented it such strictly.<o:p></o:p></p><p> <o:p></o:p></p><p>Bye,<o:p></o:p></p><p> <o:p></o:p></p><p>Patrick<o:p></o:p></p><p> <o:p></o:p></p><p> <o:p></o:p></p><p>_______________________________________________<o:p></o:p></p><p>x3d-public mailing list<o:p></o:p></p><p><a href="mailto:x3d-public@web3d.org" target="_blank"><span style='color:windowtext;text-decoration:none'>x3d-public@web3d.org</span></a><o:p></o:p></p><p><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" target="_blank"><span style='color:windowtext;text-decoration:none'>http://web3d.org/mailman/listinfo/x3d-public_web3d.org</span></a><o:p></o:p></p></div></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>_______________________________________________<br>x3d-public mailing list<br><a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><o:p></o:p></p></blockquote></div></div></div></div></div></blockquote></div></div></div></div></body></html>