Template Data Object Specification

Intro

This page defines requirements for Template as a data object and then also outlines a possible solution to meet those.

This is a model-enchanced document. Changes to the documentation model docs/mdd-model have effect on the contents of this page.

Requirements

Here is a summary of stakeholder needs towards the Template data object that we identified so far:

ID/VersionRequirementRationale
R001/1

The form in which a Template is stored or transfered shall be open, so that no proprietary tooling is required to create, read or modify a Template instance.

So that other compatible templating tools could be made and no data gets locked.
R002/1

The Template provide means for unique identification of its constructs across baselines (unique object identifier and version).

This improves user experience in an environment where templates are part of change controled assets. Ability to isolate a diffect in documentation to a specific template fragment / version
R003/1

The Template data structure shall enable fault isolation to one of the basic templating constructs - rendering block, condition, query (data transformation) or loop

This will improve user experience related to template debugging and maintenance. With a monolythic template it frequently gets difficult to find a root cause of things going wrong. Having template broken down into basic isolated building blocks will enable more precise fault isolation as well as independent and maybe even asynchronous / real-time fragment validation and preview.
R004/1

The Template ontology shall provide means for re-use through instantiation of template fragments.

In templating we frequently make use of visualization patterns and it should be possible for an end-user to define and re-use those.
R005/1

The Template ontology shall enable reverse mapping of generated objects to the template fragments.

To debug content we need to know which template fragment resulted in what content.
R006/1

The Template shall provide means to specify how the generated elements should be uniquely identified and versioned.

To enable formal change control of the derived documents.

Conceptual ontology of a Template

data:image/svg+xml;base64,PHN2ZyBiYXNlUHJvZmlsZT0iZnVsbCIgY2xhc3M9IkNsYXNzRGlhZ3JhbUJsYW5rIiBoZWlnaHQ9IjM1NyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIyODUgMTE1IDU5MCAzNTciIHdpZHRoPSI1OTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6ZXY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxzdHlsZT4uQ2xhc3NEaWFncmFtQmxhbmsgKiB7IHNoYXBlLXJlbmRlcmluZzogZ2VvbWV0cmljUHJlY2lzaW9uOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayB0ZXh0IHsgZm9udC1mYW1pbHk6ICJTZWdvZSBVSSI7IGZvbnQtc2l6ZTogOHB0OyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnIHsgY3Vyc29yOiBwb2ludGVyOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkVkZ2UgJmd0OyBwYXRoIHsgZmlsbDogbm9uZTsgc3Ryb2tlOiByZ2IoMCwgMCwgMCk7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94ICZndDsgbGluZSB7IHN0cm9rZTogIzAwMDAwMDsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3ggJmd0OyByZWN0LCAuQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3ggJmd0OyB1c2UgeyBmaWxsOiB0cmFuc3BhcmVudDsgc3Ryb2tlOiAjMDAwMDAwOyBzdHJva2Utd2lkdGg6IDE7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LkFubm90YXRpb24gJmd0OyBsaW5lIHsgc3Ryb2tlOiBub25lOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5Bbm5vdGF0aW9uICZndDsgcmVjdCwgLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LkFubm90YXRpb24gJmd0OyB1c2UgeyBmaWxsOiBub25lOyBzdHJva2U6IG5vbmU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LkNvbnN0cmFpbnQgJmd0OyBsaW5lIHsgc3Ryb2tlOiAjODg4ODg4OyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5Db25zdHJhaW50ICZndDsgcmVjdCwgLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LkNvbnN0cmFpbnQgJmd0OyB1c2UgeyBmaWxsOiAjRkZGNUI1OyBzdHJva2U6ICM4ODg4ODg7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LkNvbnN0cmFpbnQgJmd0OyB0ZXh0IHsgZmlsbDogIzAwMDAwMDsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guTm90ZSAmZ3Q7IGxpbmUgeyBzdHJva2U6ICNGRkNDNjY7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94Lk5vdGUgJmd0OyByZWN0LCAuQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guTm90ZSAmZ3Q7IHVzZSB7IGZpbGw6ICNGRkZGQ0I7IHN0cm9rZTogI0ZGQ0M2NjsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guTm90ZSAmZ3Q7IHRleHQgeyBmaWxsOiAjMDAwMDAwOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5SZXF1aXJlbWVudCAmZ3Q7IGxpbmUgeyBzdHJva2U6ICM3MjQ5NkU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LlJlcXVpcmVtZW50ICZndDsgcmVjdCwgLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LlJlcXVpcmVtZW50ICZndDsgdXNlIHsgZmlsbDogI0Q5QzRENzsgc3Ryb2tlOiAjNzI0OTZFOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5SZXF1aXJlbWVudCAmZ3Q7IHRleHQgeyBmaWxsOiAjMDAwMDAwOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5UZXh0ICZndDsgbGluZSB7IHN0cm9rZTogdHJhbnNwYXJlbnQ7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LlRleHQgJmd0OyByZWN0LCAuQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guVGV4dCAmZ3Q7IHVzZSB7IHN0cm9rZTogdHJhbnNwYXJlbnQ7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuRWRnZSAmZ3Q7IHJlY3QgeyBmaWxsOiBub25lOyBzdHJva2U6IG5vbmU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQ2lyY2xlICZndDsgY2lyY2xlIHsgZmlsbDogIzAwMDAwMDsgc3Ryb2tlOiBub25lOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkVkZ2UgJmd0OyBwYXRoIHsgc3Ryb2tlLXdpZHRoOiAxOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkVkZ2UuQ29ubmVjdG9yICZndDsgcmVjdCB7IGZpbGw6IG5vbmU7IHN0cm9rZTogbm9uZTsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5DaXJjbGUuQ29ubmVjdG9yICZndDsgY2lyY2xlIHsgZmlsbDogI0IwQjBCMDsgc3Ryb2tlOiBub25lOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkVkZ2UuQ29ubmVjdG9yICZndDsgcGF0aCB7IHN0cm9rZTogI0IwQjBCMDsgc3Ryb2tlLWRhc2hhcnJheTogMTsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5FZGdlLkNvbnN0cmFpbnQgJmd0OyByZWN0IHsgZmlsbDogbm9uZTsgc3Ryb2tlOiBub25lOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkNpcmNsZS5Db25zdHJhaW50ICZndDsgY2lyY2xlIHsgZmlsbDogIzAwMDAwMDsgc3Ryb2tlOiBub25lOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkVkZ2UuQ29uc3RyYWludCAmZ3Q7IHBhdGggeyBzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS1kYXNoYXJyYXk6IDEsIDM7IG1hcmtlci1lbmQ6IHVybCgjRmluZUFycm93TWFya18wMDAwMDApOyBzdHJva2UtbGluZWNhcDogcm91bmQ7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuRWRnZS5Ob3RlICZndDsgcmVjdCB7IGZpbGw6IG5vbmU7IHN0cm9rZTogbm9uZTsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5DaXJjbGUuTm90ZSAmZ3Q7IGNpcmNsZSB7IGZpbGw6ICMwMDAwMDA7IHN0cm9rZTogbm9uZTsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5FZGdlLk5vdGUgJmd0OyBwYXRoIHsgc3Ryb2tlOiAjMDAwMDAwOyBzdHJva2UtZGFzaGFycmF5OiAxLCAzOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkVkZ2UuUmVxdWlyZW1lbnRSZWxhdGlvbiAmZ3Q7IHJlY3QgeyBmaWxsOiBub25lOyBzdHJva2U6IG5vbmU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQ2lyY2xlLlJlcXVpcmVtZW50UmVsYXRpb24gJmd0OyBjaXJjbGUgeyBmaWxsOiAjNzI0OTZFOyBzdHJva2U6IG5vbmU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuRWRnZS5SZXF1aXJlbWVudFJlbGF0aW9uICZndDsgcGF0aCB7IHN0cm9rZTogIzcyNDk2RTsgc3Ryb2tlLXdpZHRoOiAyOyBtYXJrZXItZW5kOiB1cmwoI0ZpbmVBcnJvd01hcmtfNzI0OTZFKTsgc3Ryb2tlLWRhc2hhcnJheTogNTsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5FZGdlLlJlcXVpcmVtZW50UmVsYXRpb24gJmd0OyB0ZXh0IHsgZmlsbDogIzcyNDk2RTsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guQ2xhc3MgJmd0OyBsaW5lIHsgc3Ryb2tlOiAjN0I2OTRGOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5DbGFzcyAmZ3Q7IHJlY3QsIC5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5DbGFzcyAmZ3Q7IHVzZSB7IGZpbGw6IHVybCgiIy5DbGFzc0ZpbGxHcmFkaWVudCIpOyByeDogMTBweDsgcnk6IDEwcHg7IHN0cm9rZTogIzdCNjk0RjsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guQ2xhc3MgJmd0OyB0ZXh0IHsgZmlsbDogIzAwMDAwMDsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guRGF0YVBrZyAmZ3Q7IGxpbmUgeyBzdHJva2U6ICM0NTQ1NDU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LkRhdGFQa2cgJmd0OyByZWN0LCAuQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guRGF0YVBrZyAmZ3Q7IHVzZSB7IGZpbGw6IHVybCgiIy5EYXRhUGtnRmlsbEdyYWRpZW50Iik7IHN0cm9rZTogIzQ1NDU0NTsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guRGF0YVBrZyAmZ3Q7IHRleHQgeyBmaWxsOiAjMDAwMDAwOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5FbnVtZXJhdGlvbiAmZ3Q7IGxpbmUgeyBzdHJva2U6ICM2NzY3Njc7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LkVudW1lcmF0aW9uICZndDsgcmVjdCwgLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQm94LkVudW1lcmF0aW9uICZndDsgdXNlIHsgZmlsbDogI0U4RTBEMjsgc3Ryb2tlOiAjNjc2NzY3OyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5FbnVtZXJhdGlvbiAmZ3Q7IHRleHQgeyBmaWxsOiAjMDAwMDAwOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5FeGNoYW5nZUl0ZW0gJmd0OyBsaW5lIHsgc3Ryb2tlOiAjN0MzRDNEOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5FeGNoYW5nZUl0ZW0gJmd0OyByZWN0LCAuQ2xhc3NEaWFncmFtQmxhbmsgZy5Cb3guRXhjaGFuZ2VJdGVtICZndDsgdXNlIHsgZmlsbDogI0Y2RUJFQjsgc3Ryb2tlOiAjN0MzRDNEOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkJveC5FeGNoYW5nZUl0ZW0gJmd0OyB0ZXh0IHsgZmlsbDogIzAwMDAwMDsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5FZGdlLkFzc29jaWF0aW9uICZndDsgcmVjdCB7IGZpbGw6IG5vbmU7IHN0cm9rZTogbm9uZTsgfQouQ2xhc3NEaWFncmFtQmxhbmsgZy5DaXJjbGUuQXNzb2NpYXRpb24gJmd0OyBjaXJjbGUgeyBmaWxsOiAjMDAwMDAwOyBzdHJva2U6IG5vbmU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuRWRnZS5Bc3NvY2lhdGlvbiAmZ3Q7IHBhdGggeyBzdHJva2U6ICMwMDAwMDA7IG1hcmtlci1lbmQ6IHVybCgjRmluZUFycm93TWFya18wMDAwMDApOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkVkZ2UuRXhjaGFuZ2VJdGVtRWxlbWVudCAmZ3Q7IHJlY3QgeyBmaWxsOiBub25lOyBzdHJva2U6IG5vbmU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQ2lyY2xlLkV4Y2hhbmdlSXRlbUVsZW1lbnQgJmd0OyBjaXJjbGUgeyBmaWxsOiAjMDAwMDAwOyBzdHJva2U6IG5vbmU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuRWRnZS5FeGNoYW5nZUl0ZW1FbGVtZW50ICZndDsgcGF0aCB7IHN0cm9rZTogIzAwMDAwMDsgc3Ryb2tlLWRhc2hhcnJheTogNTsgbWFya2VyLXN0YXJ0OiB1cmwoI0RpYW1vbmRNYXJrXzAwMDAwMCk7IG1hcmtlci1lbmQ6IHVybCgjQXJyb3dNYXJrXzAwMDAwMCk7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuRWRnZS5FeGNoYW5nZUl0ZW1FbGVtZW50ICZndDsgdGV4dCB7IGZpbGw6ICMwMDAwMDA7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuRWRnZS5HZW5lcmFsaXphdGlvbiAmZ3Q7IHJlY3QgeyBmaWxsOiBub25lOyBzdHJva2U6IG5vbmU7IH0KLkNsYXNzRGlhZ3JhbUJsYW5rIGcuQ2lyY2xlLkdlbmVyYWxpemF0aW9uICZndDsgY2lyY2xlIHsgZmlsbDogIzAwMDAwMDsgc3Ryb2tlOiBub25lOyB9Ci5DbGFzc0RpYWdyYW1CbGFuayBnLkVkZ2UuR2VuZXJhbGl6YXRpb24gJmd0OyBwYXRoIHsgc3Ryb2tlOiAjMDAwMDAwOyBtYXJrZXItZW5kOiB1cmwoI0dlbmVyYWxpemF0aW9uTWFya18wMDAwMDApOyB9Cjwvc3R5bGU+PHN5bWJvbCBpZD0iRXJyb3JTeW1ib2wiIHZpZXdCb3g9IjAgMCAyLjY0NTggMi42NDU4Ij48cGF0aCBkPSJNIDAsMCAyLjY0NTgzMzMsMi42NDU4MzMzIE0gMCwyLjY0NTgzMzMgMi42NDU4MzMzLDAiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6IHJlZDsgc3Ryb2tlLXdpZHRoOiAwLjU7IiAvPjwvc3ltYm9sPjxzeW1ib2wgaWQ9IlJlcXVpcmVtZW50U3ltYm9sIiBzdHlsZT0ic3Ryb2tlOiBub25lOyIgdmlld0JveD0iMCAwIDUwIDUwIj48cGF0aCBkPSJNIDEyLjgwNjgxMyw2LjU3MDIzMjQgQSA2LjI0NDM3OSw1LjgxMTMyNDEgMCAwIDEgNi41NjI0MzQyLDEyLjM4MTU1NyA2LjI0NDM3OSw1LjgxMTMyNDEgMCAwIDEgMC4zMTgwNTUxNSw2LjU3MDIzMjQgNi4yNDQzNzksNS44MTEzMjQxIDAgMCAxIDYuNTYyNDM0MiwwLjc1ODkwODI3IDYuMjQ0Mzc5LDUuODExMzI0MSAwIDAgMSAxMi44MDY4MTMsNi41NzAyMzI0IFoiIHN0eWxlPSJmaWxsOiAjNDMxOTY0IiAvPjxwYXRoIGQ9Im0gNC4zMjI4NjU4LDUuODc1MjQ3NSBoIDIuOTUxNDcyMSBxIDAuMjk0NTU4MSwwIDAuNTE4NDIyMywtMC4xNDEzODc5IFEgOC4wMjI1MTU1LDUuNTg2NTgwNiA4LjE0NjIyOTksNS4zMjE0NzgzIDguMjY5OTQ0Myw1LjA1NjM3NiA4LjI3NTgzNTUsNC43MDI5MDYzIHYgMCBxIDAsLTAuMzQ3NTc4NiAtMC4xMjM3MTQ0LC0wLjYxMjY4MDggUSA4LjAyODQwNjcsMy44MjUxMjMyIDcuNzk4NjUxMywzLjY4MzczNTMgNy41NzQ3ODcyLDMuNTM2NDU2MiA3LjI3NDMzNzksMy41MzY0NTYyIEggNC4zMjI4NjU4IFYgMi4xODczODAxIGggMi45OTI3MTAzIHEgMC43MjQ2MTI5LDAgMS4yNzI0OTA5LDAuMzEyMjMxNiAwLjU0Nzg3ODEsMC4zMTIyMzE2IDAuODQ4MzI3NCwwLjg4MzY3NDMgMC4zMDYzNDA0LDAuNTcxNDQyNyAwLjMwNjM0MDQsMS4zMTk2MjAzIHYgMCBxIDAsMC43NTQwNjg3IC0wLjMwNjM0MDQsMS4zMjU1MTE0IFEgOS4xMzU5NDUxLDYuNTk5ODYwNSA4LjU4MjE3NTksNi45MTIwOTIgOC4wMzQyOTc4LDcuMjI0MzIzNiA3LjMxNTU3NjEsNy4yMjQzMjM2IEggNC4zMjI4NjU4IFogTSAzLjczOTY0MDcsMi4xODczODAxIEggNS4xNDc2Mjg1IFYgMTAuNzU5MDIxIEggMy43Mzk2NDA3IFogTSA2LjM5MDY2MzYsNi45NTkyMjEzIDcuODUxNjcxOCw2LjY4ODIyNzkgMTAuMTAyMDk2LDEwLjc1OTAyMSBIIDguNDExMzMyMiBaIiBzdHlsZT0iZmlsbDojZmZmZmZmOyIgLz48L3N5bWJvbD48c3ltYm9sIGlkPSJDbGFzc1N5bWJvbCIgdmlld0JveD0iMCAwIDI1IDI1Ij48bGluZWFyR3JhZGllbnQgaWQ9IkNsYXNzU3ltYm9sLWdyYWRpZW50IiB4MT0iMCIgeDI9IjAiIHkxPSIwIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwLjAiIHN0b3AtY29sb3I9IiNjZmE2YTUiIHN0b3Atb3BhY2l0eT0iMSIgLz48c3RvcCBvZmZzZXQ9IjEuMCIgc3RvcC1jb2xvcj0iI2YxZTJlMyIgc3RvcC1vcGFjaXR5PSIxIiAvPjwvbGluZWFyR3JhZGllbnQ+PGcgc3R5bGU9InN0cm9rZTojOTEzNzM0OyI+PHJlY3QgaGVpZ2h0PSIzIiBzdHlsZT0iZmlsbDojZWVkY2RkOyIgd2lkdGg9IjE1IiB4PSI1IiB5PSIxNyIgLz48cmVjdCBoZWlnaHQ9IjMiIHN0eWxlPSJmaWxsOiNlZWRjZGQ7IiB3aWR0aD0iMTUiIHg9IjUiIHk9IjE0IiAvPjxyZWN0IGhlaWdodD0iMTAiIHN0eWxlPSJmaWxsOnVybCgjQ2xhc3NTeW1ib2wtZ3JhZGllbnQpOyIgd2lkdGg9IjE1IiB4PSI1IiB5PSI0IiAvPjwvZz48L3N5bWJvbD48bGluZWFyR3JhZGllbnQgaWQ9Ii5DbGFzc0ZpbGxHcmFkaWVudCIgeDE9IjAlIiB4Mj0iMCUiIHkxPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0ZGRkZGRiIgLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFOEUwRDIiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9Ii5EYXRhUGtnRmlsbEdyYWRpZW50IiB4MT0iMCUiIHgyPSIwJSIgeTE9IjAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjRkZGRkZGIiAvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0ZBRkFGQSIgLz48L2xpbmVhckdyYWRpZW50PjxtYXJrZXIgaWQ9IkdlbmVyYWxpemF0aW9uTWFya18wMDAwMDAiIG1hcmtlckhlaWdodD0iNy41IiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIG1hcmtlcldpZHRoPSI3LjUiIG9yaWVudD0iYXV0byIgcmVmWD0iNyIgcmVmWT0iNCI+PHBhdGggZD0iTSAwLjEyNzUsNy41IDcuNSwzLjc1IDAsMCBaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjMDAwMDAwOyBzdHJva2Utd2lkdGg6IE5vbmUiIC8+PC9tYXJrZXI+PG1hcmtlciBpZD0iRmluZUFycm93TWFya18wMDAwMDAiIG1hcmtlckhlaWdodD0iNy41IiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIG1hcmtlcldpZHRoPSI3LjUiIG9yaWVudD0iYXV0byIgcmVmWD0iNyIgcmVmWT0iMy41Ij48cGF0aCBkPSJNIDAuNDUzNSwwLjEwNyA3LjMwOSwzLjYyMSAwLjQ5Miw3LjQwNyAwLjE0NCw3LjQwNyA2LjQxNCwzLjYzIDAuMTM2LDAuNDc5IFoiIHN0eWxlPSJmaWxsOiAjMDAwMDAwOyBzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS13aWR0aDogTm9uZSIgLz48L21hcmtlcj48L2RlZnM+PHJlY3QgZmlsbD0id2hpdGUiIGhlaWdodD0iMzU3IiBzdHJva2U9Im5vbmUiIHdpZHRoPSI1OTAiIHg9IjI4NSIgeT0iMTE1IiAvPjxnIGNsYXNzPSJCb3ggQ2xhc3MiIGlkPSJfTm55V0VBQllFZTJfSFBhMVU1LW4xUSI+PHJlY3QgY2xhc3M9IkNsYXNzIiBoZWlnaHQ9IjQ3IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiB3aWR0aD0iMTkxIiB4PSI1MTUuNSIgeT0iMjA1LjUiIC8+PGxpbmUgeDE9IjUxNS41IiB4Mj0iNzA2LjUiIHkxPSIyMjkuNSIgeTI9IjIyOS41IiAvPjx0ZXh0IGNsYXNzPSJDbGFzcyIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNTE1IiB5PSIyMDUiPjx0c3BhbiB4PSI2MTAuNSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iMjE2LjQyODU3MTQyODU3MTQyIj5GcmFnbWVudDwvdHNwYW4+PC90ZXh0Pjx1c2UgaGVpZ2h0PSIyMCIgd2lkdGg9IjIwIiB4PSI1NjQuNzg1NzE0Mjg1NzE0MyIgeGxpbms6aHJlZj0iI0NsYXNzU3ltYm9sIiB5PSIyMDYuNDI4NTcxNDI4NTcxNDIiIC8+PC9nPjxnIGNsYXNzPSJCb3ggQ2xhc3MiIGlkPSJfeEI3NmdBQllFZTJfSFBhMVU1LW4xUSI+PHJlY3QgY2xhc3M9IkNsYXNzIiBoZWlnaHQ9IjczIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiB3aWR0aD0iMTMxIiB4PSIyOTUuNSIgeT0iMzE5LjUiIC8+PGxpbmUgeDE9IjI5NS41IiB4Mj0iNDI2LjUiIHkxPSIzNDMuNSIgeTI9IjM0My41IiAvPjx0ZXh0IGNsYXNzPSJGZWF0dXJlcyIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgdGV4dC1hbmNob3I9InN0YXJ0IiB4PSIyOTUuNSIgeT0iMzQzLjUiPjx0c3BhbiB4PSIzMDUuMjg1NzE0Mjg1NzE0MyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iMzU2LjkyODU3MTQyODU3MTQ0Ij5pc19vYmplY3RfZGVzY3JpcHRvciA6PC90c3Bhbj48dHNwYW4geD0iMzA1LjI4NTcxNDI4NTcxNDMiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjM2OS43ODU3MTQyODU3MTQzIj5Cb29sZWFuPC90c3Bhbj48L3RleHQ+PHRleHQgY2xhc3M9IkNsYXNzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyOTUiIHk9IjMxOSI+PHRzcGFuIHg9IjM2MC41IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIzMzAuNDI4NTcxNDI4NTcxNDQiPkhlYWRpbmc8L3RzcGFuPjwvdGV4dD48dXNlIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgeD0iMzE3LjY0Mjg1NzE0Mjg1NzE3IiB4bGluazpocmVmPSIjQ2xhc3NTeW1ib2wiIHk9IjMyMC40Mjg1NzE0Mjg1NzE0NCIgLz48L2c+PGcgY2xhc3M9IkJveCBDbGFzcyIgaWQ9Il8zSUM5SUFCWUVlMl9IUGExVTUtbjFRIj48cmVjdCBjbGFzcz0iQ2xhc3MiIGhlaWdodD0iNzMiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIHdpZHRoPSIxMjEiIHg9IjY4NS41IiB5PSIzNzcuNSIgLz48bGluZSB4MT0iNjg1LjUiIHgyPSI4MDYuNSIgeTE9IjQwMS41IiB5Mj0iNDAxLjUiIC8+PHRleHQgY2xhc3M9IkZlYXR1cmVzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ic3RhcnQiIHg9IjY4NS41IiB5PSI0MDEuNSI+PHRzcGFuIHg9IjcwOC44NTcxNDI4NTcxNDI5IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSI0MTQuOTI4NTcxNDI4NTcxNDQiPmlzX3dvcmtfaXRlbSA6PC90c3Bhbj48dHNwYW4geD0iNzA4Ljg1NzE0Mjg1NzE0MjkiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjQyNy43ODU3MTQyODU3MTQzIj5Cb29sZWFuPC90c3Bhbj48L3RleHQ+PHRleHQgY2xhc3M9IkNsYXNzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI2ODUiIHk9IjM3NyI+PHRzcGFuIHg9Ijc0NS41IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIzODcuMCI+UmljaFRleHQ8L3RzcGFuPjwvdGV4dD48dXNlIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgeD0iNzAyLjY0Mjg1NzE0Mjg1NzEiIHhsaW5rOmhyZWY9IiNDbGFzc1N5bWJvbCIgeT0iMzc3LjAiIC8+PC9nPjxnIGNsYXNzPSJCb3ggQ2xhc3MiIGlkPSJfc3RJQThBQlpFZTJfSFBhMVU1LW4xUSI+PHJlY3QgY2xhc3M9IkNsYXNzIiBoZWlnaHQ9IjQ3IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiB3aWR0aD0iOTMiIHg9IjU3NS41IiB5PSIzMzUuNSIgLz48bGluZSB4MT0iNTc1LjUiIHgyPSI2NjguNSIgeTE9IjM1OS41IiB5Mj0iMzU5LjUiIC8+PHRleHQgY2xhc3M9IkNsYXNzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI1NzUiIHk9IjMzNSI+PHRzcGFuIHg9IjYyMS41IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIzNDYuNDI4NTcxNDI4NTcxNDQiPkZpZ3VyZTwvdHNwYW4+PC90ZXh0Pjx1c2UgaGVpZ2h0PSIyMCIgd2lkdGg9IjIwIiB4PSI1ODQuMzU3MTQyODU3MTQyOSIgeGxpbms6aHJlZj0iI0NsYXNzU3ltYm9sIiB5PSIzMzYuNDI4NTcxNDI4NTcxNDQiIC8+PC9nPjxnIGNsYXNzPSJCb3ggQ2xhc3MiIGlkPSJfdm9sc2dBQlpFZTJfSFBhMVU1LW4xUSI+PHJlY3QgY2xhc3M9IkNsYXNzIiBoZWlnaHQ9IjQ0IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiB3aWR0aD0iOTMiIHg9IjU3NS41IiB5PSIzODQuNSIgLz48bGluZSB4MT0iNTc1LjUiIHgyPSI2NjguNSIgeTE9IjQwOC41IiB5Mj0iNDA4LjUiIC8+PHRleHQgY2xhc3M9IkNsYXNzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI1NzUiIHk9IjM4NCI+PHRzcGFuIHg9IjYyMS41IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIzOTQuMCI+VGFibGU8L3RzcGFuPjwvdGV4dD48dXNlIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgeD0iNTg2LjUiIHhsaW5rOmhyZWY9IiNDbGFzc1N5bWJvbCIgeT0iMzg0LjAiIC8+PC9nPjxnIGNsYXNzPSJCb3ggQ2xhc3MiIGlkPSJfOUhEY3dBQlpFZTJfSFBhMVU1LW4xUSI+PHJlY3QgY2xhc3M9IkNsYXNzIiBoZWlnaHQ9IjQ3IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiB3aWR0aD0iOTMiIHg9IjQzNS41IiB5PSIzNTMuNSIgLz48bGluZSB4MT0iNDM1LjUiIHgyPSI1MjguNSIgeTE9IjM3Ny41IiB5Mj0iMzc3LjUiIC8+PHRleHQgY2xhc3M9IkNsYXNzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI0MzUiIHk9IjM1MyI+PHRzcGFuIHg9IjQ4MS41IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIzNjQuNDI4NTcxNDI4NTcxNDQiPkxvb3A8L3RzcGFuPjwvdGV4dD48dXNlIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgeD0iNDQ3LjkyODU3MTQyODU3MTQ0IiB4bGluazpocmVmPSIjQ2xhc3NTeW1ib2wiIHk9IjM1NC40Mjg1NzE0Mjg1NzE0NCIgLz48L2c+PGcgY2xhc3M9IkJveCBDbGFzcyIgaWQ9Il9CVWxOSUFCYUVlMl9IUGExVTUtbjFRIj48cmVjdCBjbGFzcz0iQ2xhc3MiIGhlaWdodD0iNDQiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIHdpZHRoPSI5MyIgeD0iMjk1LjUiIHk9IjM4NC41IiAvPjxsaW5lIHgxPSIyOTUuNSIgeDI9IjM4OC41IiB5MT0iNDA4LjUiIHkyPSI0MDguNSIgLz48dGV4dCBjbGFzcz0iQ2xhc3MiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjI5NSIgeT0iMzg0Ij48dHNwYW4geD0iMzQxLjUiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjM5NC4wIj5Db25kaXRpb248L3RzcGFuPjwvdGV4dD48dXNlIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgeD0iMjk1Ljc4NTcxNDI4NTcxNDMiIHhsaW5rOmhyZWY9IiNDbGFzc1N5bWJvbCIgeT0iMzg0LjAiIC8+PC9nPjxnIGNsYXNzPSJCb3ggQ2xhc3MiIGlkPSJfTVowS1FBQmNFZTJfSFBhMVU1LW4xUSI+PHJlY3QgY2xhc3M9IkNsYXNzIiBoZWlnaHQ9IjQ3IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiB3aWR0aD0iOTMiIHg9IjQwNS41IiB5PSI0MTUuNSIgLz48bGluZSB4MT0iNDA1LjUiIHgyPSI0OTguNSIgeTE9IjQzOS41IiB5Mj0iNDM5LjUiIC8+PHRleHQgY2xhc3M9IkNsYXNzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI0MDUiIHk9IjQxNSI+PHRzcGFuIHg9IjQ1MS41IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSI0MjYuNDI4NTcxNDI4NTcxNDQiPkRhdGFRdWVyeTwvdHNwYW4+PC90ZXh0Pjx1c2UgaGVpZ2h0PSIyMCIgd2lkdGg9IjIwIiB4PSI0MDMiIHhsaW5rOmhyZWY9IiNDbGFzc1N5bWJvbCIgeT0iNDE2LjQyODU3MTQyODU3MTQ0IiAvPjwvZz48ZyBjbGFzcz0iQm94IENsYXNzIiBpZD0iX1daNGhBQUJjRWUyX0hQYTFVNS1uMVEiPjxyZWN0IGNsYXNzPSJDbGFzcyIgaGVpZ2h0PSI0NyIgc3R5bGU9InN0cm9rZS13aWR0aDogMSIgd2lkdGg9IjEzMSIgeD0iNTA1LjUiIHk9IjI4MS41IiAvPjxsaW5lIHgxPSI1MDUuNSIgeDI9IjYzNi41IiB5MT0iMzA1LjUiIHkyPSIzMDUuNSIgLz48dGV4dCBjbGFzcz0iQ2xhc3MiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjUwNSIgeT0iMjgxIj48dHNwYW4geD0iNTcwLjUiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjI5Mi40Mjg1NzE0Mjg1NzE0NCI+RnJhZ21lbnRDb250YWluZXI8L3RzcGFuPjwvdGV4dD48dXNlIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgeD0iNTAzIiB4bGluazpocmVmPSIjQ2xhc3NTeW1ib2wiIHk9IjI4Mi40Mjg1NzE0Mjg1NzE0NCIgLz48L2c+PGcgY2xhc3M9IkJveCBDbGFzcyIgaWQ9Il9IXzVmZ0FCakVlMl9IUGExVTUtbjFRIj48cmVjdCBjbGFzcz0iQ2xhc3MiIGhlaWdodD0iNDQiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIHdpZHRoPSIxNDEiIHg9IjI5NS41IiB5PSIyNjUuNSIgLz48bGluZSB4MT0iMjk1LjUiIHgyPSI0MzYuNSIgeTE9IjI4OS41IiB5Mj0iMjg5LjUiIC8+PHRleHQgY2xhc3M9IkNsYXNzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyOTUiIHk9IjI2NSI+PHRzcGFuIHg9IjM2NS41IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIyNzUuMCI+RGF0YVNvdXJjZVJlZmVyZW5jZTwvdHNwYW4+PC90ZXh0Pjx1c2UgaGVpZ2h0PSIyMCIgd2lkdGg9IjIwIiB4PSIyOTMiIHhsaW5rOmhyZWY9IiNDbGFzc1N5bWJvbCIgeT0iMjY1LjAiIC8+PC9nPjxnIGNsYXNzPSJCb3ggQ2xhc3MiIGlkPSJfTDVVb0lBQmpFZTJfSFBhMVU1LW4xUSI+PHJlY3QgY2xhc3M9IkNsYXNzIiBoZWlnaHQ9IjQ0IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiB3aWR0aD0iOTMiIHg9IjM1NS41IiB5PSIyMDUuNSIgLz48bGluZSB4MT0iMzU1LjUiIHgyPSI0NDguNSIgeTE9IjIyOS41IiB5Mj0iMjI5LjUiIC8+PHRleHQgY2xhc3M9IkNsYXNzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzNTUiIHk9IjIwNSI+PHRzcGFuIHg9IjQwMS41IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIyMTUuMCI+UGFyYW1ldGVyPC90c3Bhbj48L3RleHQ+PHVzZSBoZWlnaHQ9IjIwIiB3aWR0aD0iMjAiIHg9IjM1MyIgeGxpbms6aHJlZj0iI0NsYXNzU3ltYm9sIiB5PSIyMDUuMCIgLz48L2c+PGcgY2xhc3M9IkJveCBDbGFzcyIgaWQ9Il9qZ2lLQUFCakVlMl9IUGExVTUtbjFRIj48cmVjdCBjbGFzcz0iQ2xhc3MiIGhlaWdodD0iNDciIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIHdpZHRoPSIxMTEiIHg9Ijc0NS41IiB5PSIyMDUuNSIgLz48bGluZSB4MT0iNzQ1LjUiIHgyPSI4NTYuNSIgeTE9IjIyOS41IiB5Mj0iMjI5LjUiIC8+PHRleHQgY2xhc3M9IkNsYXNzIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI3NDUiIHk9IjIwNSI+PHRzcGFuIHg9IjgwMC41IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIyMTYuNDI4NTcxNDI4NTcxNDIiPlB5dGhvbk1vZHVsZTwvdHNwYW4+PC90ZXh0Pjx1c2UgaGVpZ2h0PSIyMCIgd2lkdGg9IjIwIiB4PSI3NDMiIHhsaW5rOmhyZWY9IiNDbGFzc1N5bWJvbCIgeT0iMjA2LjQyODU3MTQyODU3MTQyIiAvPjwvZz48ZyBjbGFzcz0iQm94IENsYXNzIiBpZD0iX3JqaHdFQUJqRWUyX0hQYTFVNS1uMVEiPjxyZWN0IGNsYXNzPSJDbGFzcyIgaGVpZ2h0PSI0NyIgc3R5bGU9InN0cm9rZS13aWR0aDogMSIgd2lkdGg9IjEzMSIgeD0iNjg1LjUiIHk9IjMyNi41IiAvPjxsaW5lIHgxPSI2ODUuNSIgeDI9IjgxNi41IiB5MT0iMzUwLjUiIHkyPSIzNTAuNSIgLz48dGV4dCBjbGFzcz0iQ2xhc3MiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjY4NSIgeT0iMzI2Ij48dHNwYW4geD0iNzUwLjUiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjMzNy40Mjg1NzE0Mjg1NzE0NCI+RnJhZ21lbnRJbnN0YW5jZTwvdHNwYW4+PC90ZXh0Pjx1c2UgaGVpZ2h0PSIyMCIgd2lkdGg9IjIwIiB4PSI2ODMiIHhsaW5rOmhyZWY9IiNDbGFzc1N5bWJvbCIgeT0iMzI3LjQyODU3MTQyODU3MTQ0IiAvPjwvZz48ZyBjbGFzcz0iQm94IENsYXNzIiBpZD0iX05ldlJVQUJrRWUyX0hQYTFVNS1uMVEiPjxyZWN0IGNsYXNzPSJDbGFzcyIgaGVpZ2h0PSI0NyIgc3R5bGU9InN0cm9rZS13aWR0aDogMSIgd2lkdGg9IjQ3MSIgeD0iMjk1LjUiIHk9IjEyNS41IiAvPjxsaW5lIHgxPSIyOTUuNSIgeDI9Ijc2Ni41IiB5MT0iMTQ5LjUiIHkyPSIxNDkuNSIgLz48dGV4dCBjbGFzcz0iQ2xhc3MiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjI5NSIgeT0iMTI1Ij48dHNwYW4geD0iNTMwLjUiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjEzNi40Mjg1NzE0Mjg1NzE0MiI+VGVtcGxhdGU8L3RzcGFuPjwvdGV4dD48dXNlIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgeD0iNDg0Ljc4NTcxNDI4NTcxNDMiIHhsaW5rOmhyZWY9IiNDbGFzc1N5bWJvbCIgeT0iMTI2LjQyODU3MTQyODU3MTQzIiAvPjwvZz48ZyBjbGFzcz0iRWRnZSBHZW5lcmFsaXphdGlvbiIgaWQ9Il9TLUNGTmdCY0VlMl9IUGExVTUtbjFRIj48cGF0aCBjbGFzcz0iRWRnZSIgZD0iTSA2ODUuNSA0MDYuNSA2NjUuNSA0MDYuNSA2NjUuNSAyNTIuNSIgc3R5bGU9Im1hcmtlci1lbmQ6IHVybCgmcXVvdDsjR2VuZXJhbGl6YXRpb25NYXJrXzAwMDAwMCZxdW90OykiIC8+PHJlY3QgY2xhc3M9IkFubm90YXRpb25CQiIgaGVpZ2h0PSIwIiB3aWR0aD0iMCIgeD0iNjc0IiB5PSIyODUiIC8+PHRleHQgY2xhc3M9IkFubm90YXRpb24iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjY3NCIgeT0iMjg1Ij48dHNwYW4geD0iNjc0LjAiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjI4NS4wIiAvPjwvdGV4dD48L2c+PGcgY2xhc3M9IkVkZ2UgR2VuZXJhbGl6YXRpb24iIGlkPSJfUldiMVJBQmNFZTJfSFBhMVU1LW4xUSI+PHBhdGggY2xhc3M9IkVkZ2UiIGQ9Ik0gNDI2LjUgMzUwLjUgNTI1LjUgMzUwLjUgNTI1LjUgMzI4LjUiIHN0eWxlPSJtYXJrZXItZW5kOiB1cmwoJnF1b3Q7I0dlbmVyYWxpemF0aW9uTWFya18wMDAwMDAmcXVvdDspIiAvPjxyZWN0IGNsYXNzPSJBbm5vdGF0aW9uQkIiIGhlaWdodD0iMCIgd2lkdGg9IjAiIHg9IjUyMyIgeT0iMzM2IiAvPjx0ZXh0IGNsYXNzPSJBbm5vdGF0aW9uIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI1MjMiIHk9IjMzNiI+PHRzcGFuIHg9IjUyMy4wIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIzMzYuMCIgLz48L3RleHQ+PC9nPjxnIGNsYXNzPSJFZGdlIEdlbmVyYWxpemF0aW9uIiBpZD0iX2UtTGRVQUJjRWUyX0hQYTFVNS1uMVEiPjxwYXRoIGNsYXNzPSJFZGdlIiBkPSJNIDUyOC41IDM3My41IDU0NC41IDM3My41IDU0NC41IDMyOC41IiBzdHlsZT0ibWFya2VyLWVuZDogdXJsKCZxdW90OyNHZW5lcmFsaXphdGlvbk1hcmtfMDAwMDAwJnF1b3Q7KSIgLz48cmVjdCBjbGFzcz0iQW5ub3RhdGlvbkJCIiBoZWlnaHQ9IjAiIHdpZHRoPSIwIiB4PSI1NTAiIHk9IjMzOSIgLz48dGV4dCBjbGFzcz0iQW5ub3RhdGlvbiIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNTUwIiB5PSIzMzkiPjx0c3BhbiB4PSI1NTAuMCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iMzM5LjAiIC8+PC90ZXh0PjwvZz48ZyBjbGFzcz0iRWRnZSBHZW5lcmFsaXphdGlvbiIgaWQ9Il9qd3lRdGdCY0VlMl9IUGExVTUtbjFRIj48cGF0aCBjbGFzcz0iRWRnZSIgZD0iTSAzODguNSA0MDQuNSA1MjYuNSA0MDQuNSA1MjYuNSAzMjguNSIgc3R5bGU9Im1hcmtlci1lbmQ6IHVybCgmcXVvdDsjR2VuZXJhbGl6YXRpb25NYXJrXzAwMDAwMCZxdW90OykiIC8+PHJlY3QgY2xhc3M9IkFubm90YXRpb25CQiIgaGVpZ2h0PSIwIiB3aWR0aD0iMCIgeD0iNTI3IiB5PSIzODQiIC8+PHRleHQgY2xhc3M9IkFubm90YXRpb24iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjUyNyIgeT0iMzg0Ij48dHNwYW4geD0iNTI3LjAiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjM4NC4wIiAvPjwvdGV4dD48L2c+PGcgY2xhc3M9IkVkZ2UgR2VuZXJhbGl6YXRpb24iIGlkPSJfdUl1VTdBQmNFZTJfSFBhMVU1LW4xUSI+PHBhdGggY2xhc3M9IkVkZ2UiIGQ9Ik0gNDk4LjUgNDM1LjUgNTI2LjUgNDM1LjUgNTI2LjUgMzI4LjUiIHN0eWxlPSJtYXJrZXItZW5kOiB1cmwoJnF1b3Q7I0dlbmVyYWxpemF0aW9uTWFya18wMDAwMDAmcXVvdDspIiAvPjxyZWN0IGNsYXNzPSJBbm5vdGF0aW9uQkIiIGhlaWdodD0iMCIgd2lkdGg9IjAiIHg9IjUyNiIgeT0iMzkxIiAvPjx0ZXh0IGNsYXNzPSJBbm5vdGF0aW9uIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI1MjYiIHk9IjM5MSI+PHRzcGFuIHg9IjUyNi4wIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIzOTEuMCIgLz48L3RleHQ+PC9nPjxnIGNsYXNzPSJFZGdlIEdlbmVyYWxpemF0aW9uIiBpZD0iX3dtVVlzZ0JjRWUyX0hQYTFVNS1uMVEiPjxwYXRoIGNsYXNzPSJFZGdlIiBkPSJNIDY2OC41IDM1Ny41IDY2NS41IDM1Ny41IDY2NS41IDI1Mi41IiBzdHlsZT0ibWFya2VyLWVuZDogdXJsKCZxdW90OyNHZW5lcmFsaXphdGlvbk1hcmtfMDAwMDAwJnF1b3Q7KSIgLz48cmVjdCBjbGFzcz0iQW5ub3RhdGlvbkJCIiBoZWlnaHQ9IjAiIHdpZHRoPSIwIiB4PSI2NDgiIHk9IjM2NyIgLz48dGV4dCBjbGFzcz0iQW5ub3RhdGlvbiIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNjQ4IiB5PSIzNjciPjx0c3BhbiB4PSI2NDguMCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iMzY3LjAiIC8+PC90ZXh0PjwvZz48ZyBjbGFzcz0iRWRnZSBHZW5lcmFsaXphdGlvbiIgaWQ9Il9VdzdKd0FCZEVlMl9IUGExVTUtbjFRIj48cGF0aCBjbGFzcz0iRWRnZSIgZD0iTSA2NjguNSAzOTYuNSA2NzQuNSAzOTYuNSA2NzQuNSAyNTIuNSIgc3R5bGU9Im1hcmtlci1lbmQ6IHVybCgmcXVvdDsjR2VuZXJhbGl6YXRpb25NYXJrXzAwMDAwMCZxdW90OykiIC8+PHJlY3QgY2xhc3M9IkFubm90YXRpb25CQiIgaGVpZ2h0PSIwIiB3aWR0aD0iMCIgeD0iNjU5IiB5PSI0MDYiIC8+PHRleHQgY2xhc3M9IkFubm90YXRpb24iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjY1OSIgeT0iNDA2Ij48dHNwYW4geD0iNjU5LjAiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjQwNi4wIiAvPjwvdGV4dD48L2c+PGcgY2xhc3M9IkVkZ2UgR2VuZXJhbGl6YXRpb24iIGlkPSJfWG9rc1JBQmRFZTJfSFBhMVU1LW4xUSI+PHBhdGggY2xhc3M9IkVkZ2UiIGQ9Ik0gNjM2LjUgMjkzLjUgNjY1LjUgMjkzLjUgNjY1LjUgMjUyLjUiIHN0eWxlPSJtYXJrZXItZW5kOiB1cmwoJnF1b3Q7I0dlbmVyYWxpemF0aW9uTWFya18wMDAwMDAmcXVvdDspIiAvPjxyZWN0IGNsYXNzPSJBbm5vdGF0aW9uQkIiIGhlaWdodD0iMCIgd2lkdGg9IjAiIHg9IjY1MyIgeT0iMjgzIiAvPjx0ZXh0IGNsYXNzPSJBbm5vdGF0aW9uIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI2NTMiIHk9IjI4MyI+PHRzcGFuIHg9IjY1My4wIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIyODMuMCIgLz48L3RleHQ+PC9nPjxnIGNsYXNzPSJFZGdlIEdlbmVyYWxpemF0aW9uIiBpZD0iX3pNbm9ZZ0JqRWUyX0hQYTFVNS1uMVEiPjxwYXRoIGNsYXNzPSJFZGdlIiBkPSJNIDY4NS41IDMzOC41IDY2NS41IDMzOC41IDY2NS41IDI1Mi41IiBzdHlsZT0ibWFya2VyLWVuZDogdXJsKCZxdW90OyNHZW5lcmFsaXphdGlvbk1hcmtfMDAwMDAwJnF1b3Q7KSIgLz48cmVjdCBjbGFzcz0iQW5ub3RhdGlvbkJCIiBoZWlnaHQ9IjAiIHdpZHRoPSIwIiB4PSI2NjUiIHk9IjMxMyIgLz48dGV4dCBjbGFzcz0iQW5ub3RhdGlvbiIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNjY1IiB5PSIzMTMiPjx0c3BhbiB4PSI2NjUuMCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iMzEzLjAiIC8+PC90ZXh0PjwvZz48ZyBjbGFzcz0iRWRnZSBBc3NvY2lhdGlvbiIgaWQ9Il93Qjk3OEFFQUVlMk8wZjRhMzF4R0ZnIj48cGF0aCBjbGFzcz0iRWRnZSIgZD0iTSA2OTUuNSAzMjYuNSA2OTUuNSAyNTIuNSIgc3R5bGU9Im1hcmtlci1lbmQ6IHVybCgmcXVvdDsjRmluZUFycm93TWFya18wMDAwMDAmcXVvdDspIiAvPjxyZWN0IGNsYXNzPSJBbm5vdGF0aW9uQkIiIGhlaWdodD0iMTIiIHdpZHRoPSIyNSIgeD0iNzAzIiB5PSIyNjYiIC8+PHRleHQgY2xhc3M9IkFubm90YXRpb24iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjcwMyIgeT0iMjY2Ij48dHNwYW4geD0iNzE1LjUiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjI3MS43MTQyODU3MTQyODU3Ij50eXBlPC90c3Bhbj48L3RleHQ+PC9nPjxnIGNsYXNzPSJFZGdlIEFzc29jaWF0aW9uIiBpZD0iX29WWm9NQUJZRWUyX0hQYTFVNS1uMVEiPjxwYXRoIGNsYXNzPSJFZGdlIiBkPSJNIDUyNS41IDE3Mi41IDUyNS41IDIwNS41IiBzdHlsZT0ibWFya2VyLWVuZDogdXJsKCZxdW90OyNGaW5lQXJyb3dNYXJrXzAwMDAwMCZxdW90OykiIC8+PHJlY3QgY2xhc3M9IkFubm90YXRpb25CQiIgaGVpZ2h0PSI5IiB3aWR0aD0iNDgiIHg9IjUzOSIgeT0iMTkyIiAvPjx0ZXh0IGNsYXNzPSJBbm5vdGF0aW9uIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI1MzkiIHk9IjE5MiI+PHRzcGFuIHg9IjU2My4wIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIxOTYuMjg1NzE0Mjg1NzE0MjgiPmNvbnRlbnRzPC90c3Bhbj48L3RleHQ+PC9nPjxnIGNsYXNzPSJFZGdlIEFzc29jaWF0aW9uIiBpZD0iX0U3YnpoQUJrRWUyX0hQYTFVNS1uMVEiPjxwYXRoIGNsYXNzPSJFZGdlIiBkPSJNIDY0NS41IDE3Mi41IDY0NS41IDIwNS41IiBzdHlsZT0ibWFya2VyLWVuZDogdXJsKCZxdW90OyNGaW5lQXJyb3dNYXJrXzAwMDAwMCZxdW90OykiIC8+PHJlY3QgY2xhc3M9IkFubm90YXRpb25CQiIgaGVpZ2h0PSIxMyIgd2lkdGg9IjczIiB4PSI2NjAiIHk9IjE5MiIgLz48dGV4dCBjbGFzcz0iQW5ub3RhdGlvbiIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNjYwIiB5PSIxOTIiPjx0c3BhbiB4PSI2OTYuNSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iMTk4LjQyODU3MTQyODU3MTQyIj5saWJyYXJ5X2Fzc2V0czwvdHNwYW4+PC90ZXh0PjwvZz48ZyBjbGFzcz0iRWRnZSBBc3NvY2lhdGlvbiIgaWQ9Il9vbjB6OUFCakVlMl9IUGExVTUtbjFRIj48cGF0aCBjbGFzcz0iRWRnZSIgZD0iTSA3NTUuNSAxNzIuNSA3NTUuNSAyMDUuNSIgc3R5bGU9Im1hcmtlci1lbmQ6IHVybCgmcXVvdDsjRmluZUFycm93TWFya18wMDAwMDAmcXVvdDspIiAvPjxyZWN0IGNsYXNzPSJBbm5vdGF0aW9uQkIiIGhlaWdodD0iMTMiIHdpZHRoPSI5OCIgeD0iNzY3IiB5PSIxOTMiIC8+PHRleHQgY2xhc3M9IkFubm90YXRpb24iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9Ijc2NyIgeT0iMTkzIj48dHNwYW4geD0iODE2LjAiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjE5OS40Mjg1NzE0Mjg1NzE0MiI+cmVxdWlyZWRfbW9kdWxlczwvdHNwYW4+PC90ZXh0PjwvZz48ZyBjbGFzcz0iRWRnZSBBc3NvY2lhdGlvbiIgaWQ9Il8zZ2dVcEFFQkVlMk8wZjRhMzF4R0ZnIj48cGF0aCBjbGFzcz0iRWRnZSIgZD0iTSA1NDUuNSAyODEuNSA1NDUuNSAyNTIuNSIgc3R5bGU9Im1hcmtlci1lbmQ6IHVybCgmcXVvdDsjRmluZUFycm93TWFya18wMDAwMDAmcXVvdDspIiAvPjxyZWN0IGNsYXNzPSJBbm5vdGF0aW9uQkIiIGhlaWdodD0iMTMiIHdpZHRoPSI1NSIgeD0iNTYzIiB5PSIyNTUiIC8+PHRleHQgY2xhc3M9IkFubm90YXRpb24iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjU2MyIgeT0iMjU1Ij48dHNwYW4geD0iNTkwLjUiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjI2MS40Mjg1NzE0Mjg1NzE0NCI+ZnJhZ21lbnRzPC90c3Bhbj48L3RleHQ+PC9nPjxnIGNsYXNzPSJFZGdlIEFzc29jaWF0aW9uIiBpZD0iX25GdGI3QUZlRWUyTzBmNGEzMXhHRmciPjxwYXRoIGNsYXNzPSJFZGdlIiBkPSJNIDMwNS41IDE3Mi41IDMwNS41IDI2NS41IiBzdHlsZT0ibWFya2VyLWVuZDogdXJsKCZxdW90OyNGaW5lQXJyb3dNYXJrXzAwMDAwMCZxdW90OykiIC8+PHJlY3QgY2xhc3M9IkFubm90YXRpb25CQiIgaGVpZ2h0PSIxMCIgd2lkdGg9IjI1IiB4PSIzMjEiIHk9IjI1NSIgLz48dGV4dCBjbGFzcz0iQW5ub3RhdGlvbiIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMzIxIiB5PSIyNTUiPjx0c3BhbiB4PSIzMzMuNSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iMjYwLjAiPmRhdGE8L3RzcGFuPjwvdGV4dD48L2c+PGcgY2xhc3M9IkVkZ2UgQXNzb2NpYXRpb24iIGlkPSJfT2xPVE1BRmZFZTJPMGY0YTMxeEdGZyI+PHBhdGggY2xhc3M9IkVkZ2UiIGQ9Ik0gMzY1LjUgMTcyLjUgMzY1LjUgMjA1LjUiIHN0eWxlPSJtYXJrZXItZW5kOiB1cmwoJnF1b3Q7I0ZpbmVBcnJvd01hcmtfMDAwMDAwJnF1b3Q7KSIgLz48cmVjdCBjbGFzcz0iQW5ub3RhdGlvbkJCIiBoZWlnaHQ9IjEwIiB3aWR0aD0iNDAiIHg9IjM4MCIgeT0iMTk1IiAvPjx0ZXh0IGNsYXNzPSJBbm5vdGF0aW9uIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzODAiIHk9IjE5NSI+PHRzcGFuIHg9IjQwMC4wIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIyMDAuMCI+cGFyYW1zPC90c3Bhbj48L3RleHQ+PC9nPjxnIGNsYXNzPSJFZGdlIEFzc29jaWF0aW9uIiBpZD0iX2FEVGdHQUZmRWUyTzBmNGEzMXhHRmciPjxwYXRoIGNsYXNzPSJFZGdlIiBkPSJNIDUxNS41IDIyOS41IDQ0OC41IDIyOS41IiBzdHlsZT0ibWFya2VyLWVuZDogdXJsKCZxdW90OyNGaW5lQXJyb3dNYXJrXzAwMDAwMCZxdW90OykiIC8+PHJlY3QgY2xhc3M9IkFubm90YXRpb25CQiIgaGVpZ2h0PSIxMCIgd2lkdGg9IjQwIiB4PSI0NTMiIHk9IjIzNCIgLz48dGV4dCBjbGFzcz0iQW5ub3RhdGlvbiIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNDUzIiB5PSIyMzQiPjx0c3BhbiB4PSI0NzMuMCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iMjM5LjAiPnBhcmFtczwvdHNwYW4+PC90ZXh0PjwvZz48L3N2Zz4=

The figure above provides an overview of the Template ontology (conceptual). The final technical implementation may differ.

Classes

RichText (Fragment)

This is a Fragment specialization with focus on text capture. The expected realization will allow for use of any jinja payload so this also may be used to deliver any HTML output.

Attributes of RichText

  • is_work_item: value of type Boolean

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long

Table (Fragment)

This fragment type specialization is table capture. Technically this should be another jinja block, however on the front-end side this may be realized by a more complex text editor.

Attributes of Table

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long

Figure (Fragment)

This fragment type is focused on delivering figures, be it model-derived, static asset or synthetic

Attributes of Figure

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long

FragmentInstance (Fragment)

This is an instance of a Fragment from library. It has some or all of its parameters pre-configured

Attributes of FragmentInstance

  • type: value of type Fragment

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long

VersionedObject

No description available

Attributes of VersionedObject

  • version_major: value of type Long

  • version_minor: value of type Long

Loop (FragmentContainer)

No description available

Attributes of Loop

  • fragments: an ordered list of Fragment class

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long

DataQuery (FragmentContainer)

No description available

Attributes of DataQuery

  • fragments: an ordered list of Fragment class

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long

PythonModule

No description available

Attributes of PythonModule

Condition (FragmentContainer)

No description available

Attributes of Condition

  • fragments: an ordered list of Fragment class

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long

Abstract FragmentContainer (Fragment)

No description available

Attributes of FragmentContainer

  • fragments: an ordered list of Fragment class

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long

Template

No description available

Attributes of Template

DataSourceReference

This class points to a data source that shall be available to all Fragments for queries from jinja.

Attributes of DataSourceReference

Heading (FragmentContainer)

No description available

Attributes of Heading

  • is_object_descriptor: value of type Boolean

  • fragments: an ordered list of Fragment class

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long

Parameter

Parameters allow for configuration of templates. For instance you may have a template that describes a component - in that case you may use parameter to define what component a template instance shall describe in particular (by passing its name or uuid).

Attributes of Parameter

Abstract Fragment (VersionedObject)

Fragment is the lowest building block of a Template. Any fragment can be independently compiled / validated given the context. 

Attributes of Fragment

  • params: value of type Parameter

  • version_major: value of type Long

  • version_minor: value of type Long