webpackJsonp([0],{"+66z":function(t,e){var r=Object.prototype.toString;t.exports=function(t){return r.call(t)}},"+99L":function(t,e,r){var n={"./v2/measurement_schema.json":["oGp6",23],"./v2/message_schema.json":["2BTs",22],"./v2/process_schema.json":["rRyJ",21],"./v3/measurement_schema.json":["PpY5",20],"./v3/message_schema.json":["1SJ2",19],"./v3/process_schema.json":["uwRd",18]};function i(t){var e=n[t];return e?r.e(e[1]).then(function(){return r(e[0])}):Promise.reject(new Error("Cannot find module '"+t+"'."))}i.keys=function(){return Object.keys(n)},i.id="+99L",t.exports=i},"+gg+":function(t,e,r){var n=r("TQ3y")["__core-js_shared__"];t.exports=n},"/GnY":function(t,e,r){var n=r("HT7L"),i=r("W529"),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!n(t))return i(t);var e=[];for(var r in Object(t))o.call(t,r)&&"constructor"!=r&&e.push(r);return e}},"/I3N":function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},"037f":function(t,e,r){var n=r("1oyr"),i=r("p0bc"),o=r("wSKX"),a=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:n(e),writable:!0})}:o;t.exports=a},"09Qt":function(t,e,r){var n=r("uIr7"),i=r("vi0E"),o=r("l9Lx"),a=r("C0hh"),s=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)n(e,o(t)),t=i(t);return e}:a;t.exports=s},"0DSl":function(t,e,r){var n=r("YkxI"),i=r("zBOP");t.exports=function(t){return n(function(e,r){var n=-1,o=r.length,a=o>1?r[o-1]:void 0,s=o>2?r[2]:void 0;for(a=t.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(r[0],r[1],s)&&(a=o<3?void 0:a,o=1),e=Object(e);++n<o;){var c=r[n];c&&t(e,c,n,a)}return e})}},"0uX4":function(t,e,r){var n=r("NkRn"),i=n?n.prototype:void 0,o=i?i.valueOf:void 0;t.exports=function(t){return o?Object(o.call(t)):{}}},"1C79":function(t,e,r){var n=r("uIr7"),i=r("Qp3N");t.exports=function t(e,r,o,a,s){var c=-1,u=e.length;for(o||(o=i),s||(s=[]);++c<u;){var l=e[c];r>0&&o(l)?r>1?t(l,r-1,o,a,s):n(s,l):a||(s[s.length]=l)}return s}},"1QDk":function(t,e,r){var n=r("tv3T"),i=r("09Qt");t.exports=function(t,e){return n(t,i(t),e)}},"1Yb9":function(t,e,r){var n=r("mgnk"),i=r("UnEC"),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,c=n(function(){return arguments}())?n:function(t){return i(t)&&a.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},"1oyr":function(t,e){t.exports=function(t){return function(){return t}}},"22B7":function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},"2Hvv":function(t,e,r){var n=r("imBK");t.exports=function(t){return n(this.__data__,t)>-1}},"2N6f":function(t,e,r){var n=r("rCVp"),i=r("Q2wK"),o=r("WHce");t.exports=function(t){return o(i(t,void 0,n),t+"")}},"3IRH":function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},"3rZI":function(t,e){t.exports=function(t,e,r,n){var i=-1,o=null==t?0:t.length;for(n&&o&&(r=t[++i]);++i<o;)r=e(r,t[i],i,t);return r}},"4yG7":function(t,e,r){var n=r("HAGj");t.exports=function(t,e,r){return null==t?t:n(t,e,r)}},"5/Qr":function(t,e,r){var n=r("Kzd6"),i=r("6Git"),o=r("Jqj6"),a=r("WyC4"),s=r("7jYp"),c=r("0uX4"),u=r("Ilb/"),l="[object Boolean]",f="[object Date]",p="[object Map]",d="[object Number]",v="[object RegExp]",h="[object Set]",m="[object String]",y="[object Symbol]",b="[object ArrayBuffer]",_="[object DataView]",x="[object Float32Array]",g="[object Float64Array]",j="[object Int8Array]",O="[object Int16Array]",C="[object Int32Array]",w="[object Uint8Array]",k="[object Uint8ClampedArray]",P="[object Uint16Array]",E="[object Uint32Array]";t.exports=function(t,e,r,T){var S=t.constructor;switch(e){case b:return n(t);case l:case f:return new S(+t);case _:return i(t,T);case x:case g:case j:case O:case C:case w:case k:case P:case E:return u(t,T);case p:return o(t,T,r);case d:case m:return new S(t);case v:return a(t);case h:return s(t,T,r);case y:return c(t)}}},"5N57":function(t,e,r){var n=r("ICSD")(r("TQ3y"),"Set");t.exports=n},"5PlU":function(t,e,r){var n=r("RY/4"),i=r("dSzd")("iterator"),o=r("/bQp");t.exports=r("FeBl").isIterable=function(t){var e=Object(t);return void 0!==e[i]||"@@iterator"in e||o.hasOwnProperty(n(e))}},"5pwE":function(t,e,r){(t.exports=r("YHym")(!1)).push([t.i,".schemaDetail a{text-decoration:none}.schemaDetail .property ul{list-style-type:disc;padding-left:1em;margin-left:0;margin-top:0}",""])},"5zde":function(t,e,r){r("zQR9"),r("qyJz"),t.exports=r("FeBl").Array.from},"6Git":function(t,e,r){var n=r("Kzd6");t.exports=function(t,e){var r=e?n(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}},"6MiT":function(t,e,r){var n=r("aCM0"),i=r("UnEC"),o="[object Symbol]";t.exports=function(t){return"symbol"==typeof t||i(t)&&n(t)==o}},"77aO":function(t,e,r){"use strict";e.a={props:{collapsed:{type:Boolean,default:!1}},data:function(){return{expanded:!this.collapsed,transitioning:!1}},watch:{collapsed:function(t){this.expanded=!t}},methods:{beforeenter:function(t){this.transitioning=!0,t.style.height=0},enter:function(t){t.style.height=t.scrollHeight+"px"},afterenter:function(t){t.style.height="",this.transitioning=!1},beforeleave:function(t){this.transitioning=!0,t.style.height=t.offsetHeight+"px",t.offsetHeight},leave:function(t){t.style.height=0,t.offsetHeight},afterleave:function(t){this.transitioning=!1},toggle:function(){this.transitioning||(this.expanded=!this.expanded,this.$emit(this.expanded?"expanding":"collapsing",this.id))}}}},"7e4z":function(t,e,r){var n=r("uieL"),i=r("1Yb9"),o=r("NGEn"),a=r("ggOT"),s=r("ZGh9"),c=r("YsVG"),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var r=o(t),l=!r&&i(t),f=!r&&!l&&a(t),p=!r&&!l&&!f&&c(t),d=r||l||f||p,v=d?n(t.length,String):[],h=v.length;for(var m in t)!e&&!u.call(t,m)||d&&("length"==m||f&&("offset"==m||"parent"==m)||p&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||s(m,h))||v.push(m);return v}},"7jYp":function(t,e,r){var n=r("nWuj"),i=r("3rZI"),o=r("octw"),a=1;t.exports=function(t,e,r){var s=e?r(o(t),a):o(t);return i(s,n,new t.constructor)}},"8AZL":function(t,e){t.exports=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}},"8gK5":function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}},"94sX":function(t,e,r){var n=r("dCZQ");t.exports=function(){this.__data__=n?n(null):{},this.size=0}},"9UkZ":function(t,e,r){var n=r("aCM0"),i=r("vi0E"),o=r("UnEC"),a="[object Object]",s=Function.prototype,c=Object.prototype,u=s.toString,l=c.hasOwnProperty,f=u.call(Object);t.exports=function(t){if(!o(t)||n(t)!=a)return!1;var e=i(t);if(null===e)return!0;var r=l.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&u.call(r)==f}},A51D:function(t,e,r){var n=r("5pwE");"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);r("rjj0")("188b52d2",n,!1)},A9mX:function(t,e,r){var n=r("pTUa");t.exports=function(t){var e=n(this,t).delete(t);return this.size-=e?1:0,e}},"Ai/T":function(t,e){var r=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return r.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},AxiT:function(t,e,r){var n=r("Lw7C");"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);r("rjj0")("0868896c",n,!1)},C0hh:function(t,e){t.exports=function(){return[]}},CW5P:function(t,e,r){var n=r("T/bE"),i=r("duB3"),o=r("POb3");t.exports=function(){this.size=0,this.__data__={hash:new n,map:new(o||i),string:new n}}},Cf65:function(t,e,r){var n=r("uCi2"),i=r("M1c9");t.exports=function(t,e){return e.length<2?t:n(t,i(e,0,-1))}},D9sP:function(t,e,r){"use strict";var n=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"schemaDetail",class:{"is-loading":t.loading},attrs:{id:"schema-detail"}},[r("div",{staticClass:"accordion"},[null!==t.masterSchema?r("card",{attrs:{collapsed:!0}},[r("template",{slot:"header"},[t._v("\n        Structure of the payload\n      ")]),r("ul",t._l(t.masterSchema.properties,function(t,e){return r("schemaToc",{key:e,attrs:{schema:t}})}))],2):t._e(),t._t("default")],2),r("h1",[r("a",{attrs:{id:t.type+"-schema-detail",title:t.type+" Fields definition"}}),t._v("\n    Fields definition\n  ")]),t._l(t.schemas,function(e){return r("div",{key:e.$id,staticClass:"card property"},[r("header",{staticClass:"card-header"},[r("a",{attrs:{id:"p-"+e.$id}}),r("p",{staticClass:"card-header-title"},[r("span",{domProps:{innerHTML:t._s(e.getPath())}})]),r("nuxt-link",{staticClass:"card-header-icon",attrs:{to:"#schema-detail",title:"go up"}},[r("span",{staticClass:"icon"},[r("i",{staticClass:"fa fa-angle-up"})])])],1),r("div",{staticClass:"card-content"},[e.description||e.type?r("div",{staticClass:"field is-horizontal"},[t._m(0,!0),e.description?r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.description)+"\n        ")]):e.type?r("div",{staticClass:"field-body"},[t._v("\n          A simple "+t._s(t._f("capitalize")(e.type))+"\n        ")]):t._e()]):t._e(),e.$parent?r("div",{staticClass:"field is-horizontal"},[t._m(1,!0),r("div",{staticClass:"field-body"},[r("nuxt-link",{attrs:{to:"#p-"+e.$parent.schema.$id}},[r("span",{domProps:{innerHTML:t._s(e.$parent.schema.getPath())}})])],1)]):t._e(),e.type?r("div",{staticClass:"field is-horizontal"},[t._m(2,!0),r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(t._f("capitalize")(e.type,e))+"\n        ")])]):t._e(),e.format?r("div",{staticClass:"field is-horizontal"},[t._m(3,!0),r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.format)+"\n          "),t.$static.formats[e.format]?r("a",{attrs:{href:t.$static.formats[e.format].link}},[t._v(" ("+t._s(t.$static.formats[e.format].name)+")")]):t._e()])]):t._e(),e.enum&&e.enum.length?r("div",{staticClass:"field is-horizontal"},[t._m(4,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.enum.join(", "))+"\n          ")])])]):t._e(),e.hasOwnProperty("default")?r("div",{staticClass:"field is-horizontal"},[t._m(5,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.default)+"\n          ")])])]):t._e(),e.maxLength?r("div",{staticClass:"field is-horizontal"},[t._m(6,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.maxLength)+"\n          ")])])]):t._e(),e.properties||e.patternProperties||e.items?r("div",{staticClass:"field is-horizontal"},[t._m(7,!0),r("div",{staticClass:"field-body"},[Object.keys(e.properties||{}).length>0?r("schemaLink",{attrs:{link:e.properties}}):t._e(),Object.keys(e.patternProperties||{}).length>0?r("schemaLink",{attrs:{link:e.patternProperties}},[r("div",[t._v("Matching regular expressions:")])]):t._e(),!e.items||e.items instanceof Array?e.items?r("schemaLink",{attrs:{link:e.items}},[r("div",[t._v("Ordered items of type:")])]):t._e():r("schemaLink",{attrs:{link:e.items}}),Object.keys(e.properties||{}).length+Object.keys(e.patternProperties||{}).length!==0||e.items?t._e():[t._v("none")]],2)]):t._e(),e.minProperties?r("div",{staticClass:"field is-horizontal"},[t._m(8,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.minProperties)+"\n          ")])])]):t._e(),e.minItems?r("div",{staticClass:"field is-horizontal"},[t._m(9,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.minItems)+"\n          ")])])]):t._e(),e.hasOwnProperty("additionalProperties")?r("div",{staticClass:"field is-horizontal"},[t._m(10,!0),"boolean"==typeof e.additionalProperties?r("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}}):r("div",{staticClass:"field-body"},[t._v("\n          if fulfilling "),r("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}})],1)],1):t._e(),e.not||e.oneOf||e.allOf||e.anyOf?r("div",{staticClass:"field is-horizontal"},[t._m(11,!0),r("div",{staticClass:"field-body"},[e.not?r("schemaLink",{attrs:{link:e.not}},[t._v("\n            Not fulfilling \n          ")]):t._e(),e.oneOf?r("schemaLink",{attrs:{link:e.oneOf}},[r("div",[t._v("Fulfilling exactly one of:")])]):t._e(),e.allOf?r("schemaLink",{attrs:{link:e.allOf}},[r("div",[t._v("Fulfilling all of:")])]):t._e(),e.anyOf?r("schemaLink",{attrs:{link:e.anyOf}},[r("div",[t._v("Fulfilling one of:")])]):t._e()],1)]):t._e(),e.required&&e.required.length?r("div",{staticClass:"field is-horizontal"},[t._m(12,!0),r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.required.join(", "))+"\n        ")])]):t._e(),e.examples?r("div",{staticClass:"field is-horizontal"},[t._m(13,!0),r("div",{staticClass:"field-body"},t._l(e.examples,function(e,n){return r("prism",{key:n,attrs:{language:"json"}},[t._v(t._s(t._f("stringify")(e)))])}))]):t._e()])])})],2)};n._withStripped=!0;var i={render:n,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Description:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Parent:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Type:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Format:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Possible values:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Defaults to:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Maximum length:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Restriction on subfields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Minimum amount of subfields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Minimum amount of items:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Allows additional fields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Restriction with boolean logic:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Required fields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Example:")])])}]};e.a=i},Dc0G:function(t,e,r){(function(t){var n=r("blYT"),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i&&n.process,s=function(){try{return a&&a.binding&&a.binding("util")}catch(t){}}();t.exports=s}).call(e,r("3IRH")(t))},Dc7M:function(t,e,r){var n=r("Hxdr"),i=r("Fkvj"),o=r("Vi3P"),a=r("bIjD"),s=r("tv3T"),c=r("dYhQ"),u=r("2N6f"),l=r("xond"),f=u(function(t,e){var r={};if(null==t)return r;var u=!1;e=n(e,function(e){return e=a(e,t),u||(u=e.length>1),e}),s(t,l(t),r),u&&(r=i(r,7,c));for(var f=e.length;f--;)o(r,e[f]);return r});t.exports=f},Dv2r:function(t,e,r){var n=r("pTUa");t.exports=function(t,e){var r=n(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}},E4Hj:function(t,e){t.exports=function(t){return this.__data__.get(t)}},FCuZ:function(t,e,r){var n=r("uIr7"),i=r("NGEn");t.exports=function(t,e,r){var o=e(t);return i(t)?o:n(o,r(t))}},Fkvj:function(t,e,r){var n=r("bJWQ"),i=r("PqYH"),o=r("i4ON"),a=r("jD7S"),s=r("py9u"),c=r("mKB/"),u=r("hrPF"),l=r("Nkkh"),f=r("1QDk"),p=r("MoMe"),d=r("xond"),v=r("gHOb"),h=r("UfSK"),m=r("5/Qr"),y=r("WQFf"),b=r("NGEn"),_=r("ggOT"),x=r("yCNF"),g=r("ktak"),j=1,O=2,C=4,w="[object Arguments]",k="[object Function]",P="[object GeneratorFunction]",E="[object Object]",T={};T[w]=T["[object Array]"]=T["[object ArrayBuffer]"]=T["[object DataView]"]=T["[object Boolean]"]=T["[object Date]"]=T["[object Float32Array]"]=T["[object Float64Array]"]=T["[object Int8Array]"]=T["[object Int16Array]"]=T["[object Int32Array]"]=T["[object Map]"]=T["[object Number]"]=T[E]=T["[object RegExp]"]=T["[object Set]"]=T["[object String]"]=T["[object Symbol]"]=T["[object Uint8Array]"]=T["[object Uint8ClampedArray]"]=T["[object Uint16Array]"]=T["[object Uint32Array]"]=!0,T["[object Error]"]=T[k]=T["[object WeakMap]"]=!1,t.exports=function t(e,r,S,A,$,I){var F,M=r&j,D=r&O,z=r&C;if(S&&(F=$?S(e,A,$,I):S(e)),void 0!==F)return F;if(!x(e))return e;var N=b(e);if(N){if(F=h(e),!M)return u(e,F)}else{var U=v(e),Q=U==k||U==P;if(_(e))return c(e,M);if(U==E||U==w||Q&&!$){if(F=D||Q?{}:y(e),!M)return D?f(e,s(F,e)):l(e,a(F,e))}else{if(!T[U])return $?e:{};F=m(e,U,t,M)}}I||(I=new n);var G=I.get(e);if(G)return G;I.set(e,F);var H=z?D?d:p:D?keysIn:g,L=N?void 0:H(e);return i(L||e,function(n,i){L&&(n=e[i=n]),o(F,i,t(n,r,S,i,e,I))}),F}},Fp5l:function(t,e,r){var n=r("bGc4"),i=r("UnEC");t.exports=function(t){return i(t)&&n(t)}},G0Wc:function(t,e,r){var n=r("yCNF"),i=r("HT7L"),o=r("8gK5"),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!n(t))return o(t);var e=i(t),r=[];for(var s in t)("constructor"!=s||!e&&a.call(t,s))&&r.push(s);return r}},G2xm:function(t,e){t.exports=function(t){return this.__data__.has(t)}},Gs0Q:function(t,e,r){"use strict";e.a={name:"schemaToc",props:{tag:{type:String,default:"li"},schema:{type:Object,required:!0}}}},Gu7T:function(t,e,r){"use strict";e.__esModule=!0;var n,i=r("c/Tr"),o=(n=i)&&n.__esModule?n:{default:n};e.default=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return(0,o.default)(t)}},HAGj:function(t,e,r){var n=r("i4ON"),i=r("bIjD"),o=r("ZGh9"),a=r("yCNF"),s=r("Ubhr");t.exports=function(t,e,r,c){if(!a(t))return t;for(var u=-1,l=(e=i(e,t)).length,f=l-1,p=t;null!=p&&++u<l;){var d=s(e[u]),v=r;if(u!=f){var h=p[d];void 0===(v=c?c(h,d,p):void 0)&&(v=a(h)?h:o(e[u+1])?[]:{})}n(p,d,v),p=p[d]}return t}},HN2V:function(t,e,r){var n=r("HbnZ"),i=r("0DSl")(function(t,e,r){n(t,e,r)});t.exports=i},HT7L:function(t,e){var r=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},HbnZ:function(t,e,r){var n=r("bJWQ"),i=r("O1jc"),o=r("rpnb"),a=r("jMi8"),s=r("yCNF"),c=r("t8rQ");t.exports=function t(e,r,u,l,f){e!==r&&o(r,function(o,c){if(s(o))f||(f=new n),a(e,r,c,u,t,l,f);else{var p=l?l(e[c],o,c+"",e,r,f):void 0;void 0===p&&(p=o),i(e,c,p)}},c)}},Hxdr:function(t,e){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}},ICSD:function(t,e,r){var n=r("ITwD"),i=r("mTAn");t.exports=function(t,e){var r=i(t,e);return n(r)?r:void 0}},ITwD:function(t,e,r){var n=r("gGqR"),i=r("eFps"),o=r("yCNF"),a=r("Ai/T"),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,f=u.hasOwnProperty,p=RegExp("^"+l.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||i(t))&&(n(t)?p:s).test(a(t))}},"Ilb/":function(t,e,r){var n=r("Kzd6");t.exports=function(t,e){var r=e?n(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}},JBvZ:function(t,e,r){var n=r("imBK");t.exports=function(t){var e=this.__data__,r=n(e,t);return r<0?void 0:e[r][1]}},Jqj6:function(t,e,r){var n=r("U7Aq"),i=r("3rZI"),o=r("WFiI"),a=1;t.exports=function(t,e,r){var s=e?r(o(t),a):o(t);return i(s,n,new t.constructor)}},KmWZ:function(t,e,r){var n=r("duB3");t.exports=function(){this.__data__=new n,this.size=0}},Kzd6:function(t,e,r){var n=r("qwTf");t.exports=function(t){var e=new t.constructor(t.byteLength);return new n(e).set(new n(t)),e}},LJry:function(t,e,r){"use strict";var n={functional:!0,props:{code:{type:String},language:{type:String,default:"markup"}},render:function(t,e){var r=e.props.code||e.children[0].text,n=e.props.language,i=Prism.languages[n],o="language-"+n;return t("pre",function(t){for(var e=arguments,r=1;r<arguments.length;r++)for(var n in arguments[r])t[n]=e[r][n];return t}({},e.data,{class:[e.data.class,o]}),[t("code",{class:o,domProps:{innerHTML:Prism.highlight(r,i)}})])}};t.exports=n},Lw7C:function(t,e,r){(t.exports=r("YHym")(!1)).push([t.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""])},M1c9:function(t,e){t.exports=function(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var o=Array(i);++n<i;)o[n]=t[n+e];return o}},MoMe:function(t,e,r){var n=r("FCuZ"),i=r("l9Lx"),o=r("ktak");t.exports=function(t){return n(t,o,i)}},NGEn:function(t,e){var r=Array.isArray;t.exports=r},NVTU:function(t,e,r){"use strict";var n=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"card collapsibleCard",class:{collapsed:!t.expanded}},[t.$slots.header?r("header",{staticClass:"card-header",on:{click:function(e){e.preventDefault(),t.toggle()}}},[r("p",{staticClass:"card-header-title"},[!t.$slots.headerCollapsed||t.expanded?t._t("header"):t._t("headerCollapsed")],2),r("a",{staticClass:"card-header-icon"},[r("span",{staticClass:"icon"},[r("i",{staticClass:"fa",class:{"fa-angle-down":t.expanded,"fa-angle-up":!t.expanded}})])])]):t._e(),r("transition",{attrs:{name:"rollup","leave-active-class":"collapsing","enter-active-class":"collapsing"},on:{"before-leave":t.beforeleave,leave:t.leave,"after-leave":t.afterleave,"before-enter":t.beforeenter,enter:t.enter,"after-enter":t.afterenter}},[r("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}]},[r("div",{staticClass:"card-content"},[t._t("default")],2)])])],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};e.a=i},NkRn:function(t,e,r){var n=r("TQ3y").Symbol;t.exports=n},Nkkh:function(t,e,r){var n=r("tv3T"),i=r("l9Lx");t.exports=function(t,e){return n(t,i(t),e)}},NqZt:function(t,e){t.exports=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}},O1jc:function(t,e,r){var n=r("nw3t"),i=r("22B7");t.exports=function(t,e,r){(void 0===r||i(t[e],r))&&(void 0!==r||e in t)||n(t,e,r)}},Oey6:function(t,e,r){"use strict";var n=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"process-message content"},[this._m(0),e("p",[this._v("The process message is the format to exchange data out of discrete processes. It also allows to transport process information, part information and measurement data for each phase of the process.")]),this._m(1),e("schemaDetail",{attrs:{type:"v3/process",examples:this.$static.examples}},[e("card",{attrs:{collapsed:!0}},[e("template",{slot:"header"},[this._v("\n        Minimal message example \n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.message)))])],2),e("card",{attrs:{collapsed:!0}},[e("template",{slot:"header"},[this._v("\n        Process message example \n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.complexMessage)))])],2)],1)],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("h1",[e("a",{attrs:{id:"Process-Payload",title:"Process Message payload"}}),this._v("\n    Process Payload\n  ")])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"diagram"},[e("img",{attrs:{src:"images/specification/v3/processPayload.svg",alt:"Class diagram of the Process message payload",title:"Class diagram of the Process Message payload"}})])}]};e.a=i},POb3:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"Map");t.exports=n},PqYH:function(t,e){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}},Q2wK:function(t,e,r){var n=r("8AZL"),i=Math.max;t.exports=function(t,e,r){return e=i(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,s=i(o.length-e,0),c=Array(s);++a<s;)c[a]=o[e+a];a=-1;for(var u=Array(e+1);++a<e;)u[a]=o[a];return u[e]=r(c),n(t,this,u)}}},Q7hp:function(t,e,r){var n=r("uCi2");t.exports=function(t,e,r){var i=null==t?void 0:n(t,e);return void 0===i?r:i}},Qp3N:function(t,e,r){var n=r("NkRn"),i=r("1Yb9"),o=r("NGEn"),a=n?n.isConcatSpreadable:void 0;t.exports=function(t){return o(t)||i(t)||!!(a&&t&&t[a])}},RGrk:function(t,e,r){var n=r("dCZQ"),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return n?void 0!==e[t]:i.call(e,t)}},Rh28:function(t,e){var r=9007199254740991;t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=r}},S7p9:function(t,e){t.exports=function(t){return function(e){return t(e)}}},"T/bE":function(t,e,r){var n=r("94sX"),i=r("ue/d"),o=r("eVIm"),a=r("RGrk"),s=r("Z2pD");function c(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}c.prototype.clear=n,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},T9Hf:function(t,e,r){"use strict";var n=r("77aO"),i=r("NVTU"),o=!1;var a=function(t){o||r("WVEp")},s=r("VU/8")(n.a,i.a,!1,a,null,null);s.options.__file="components\\collapsibleCard.vue",e.a=s.exports},TQ3y:function(t,e,r){var n=r("blYT"),i="object"==typeof self&&self&&self.Object===Object&&self,o=n||i||Function("return this")();t.exports=o},TlPD:function(t,e,r){var n=r("tv3T"),i=r("t8rQ");t.exports=function(t){return n(t,i(t))}},TmV0:function(t,e,r){r("fZOM"),t.exports=r("FeBl").Object.values},U7Aq:function(t,e){t.exports=function(t,e){return t.set(e[0],e[1]),t}},Ubhr:function(t,e,r){var n=r("6MiT"),i=1/0;t.exports=function(t){if("string"==typeof t||n(t))return t;var e=t+"";return"0"==e&&1/t==-i?"-0":e}},UfSK:function(t,e){var r=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,n=t.constructor(e);return e&&"string"==typeof t[0]&&r.call(t,"index")&&(n.index=t.index,n.input=t.input),n}},UnEC:function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},UnLw:function(t,e,r){var n=/^\./,i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,a=r("fMqj")(function(t){var e=[];return n.test(t)&&e.push(""),t.replace(i,function(t,r,n,i){e.push(n?i.replace(o,"$1"):r||t)}),e});t.exports=a},VORN:function(t,e,r){var n=r("yCNF"),i=Object.create,o=function(){function t(){}return function(e){if(!n(e))return{};if(i)return i(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();t.exports=o},Vi3P:function(t,e,r){var n=r("bIjD"),i=r("oqL2"),o=r("Cf65"),a=r("Ubhr");t.exports=function(t,e){return e=n(e,t),null==(t=o(t,e))||delete t[a(i(e))]}},W3Iv:function(t,e,r){t.exports={default:r("wEtr"),__esModule:!0}},W529:function(t,e,r){var n=r("f931")(Object.keys,Object);t.exports=n},WFiI:function(t,e){t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}},WHce:function(t,e,r){var n=r("037f"),i=r("Zk5a")(n);t.exports=i},WQFf:function(t,e,r){var n=r("VORN"),i=r("vi0E"),o=r("HT7L");t.exports=function(t){return"function"!=typeof t.constructor||o(t)?{}:n(i(t))}},WVEp:function(t,e,r){var n=r("a3hs");"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);r("rjj0")("52cedc5e",n,!1)},WxI4:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},WyC4:function(t,e){var r=/\w*$/;t.exports=function(t){var e=new t.constructor(t.source,r.exec(t));return e.lastIndex=t.lastIndex,e}},Xd32:function(t,e,r){r("+tPU"),r("zQR9"),t.exports=r("5PlU")},YeCl:function(t,e,r){var n=r("CW5P"),i=r("A9mX"),o=r("v8Dt"),a=r("agim"),s=r("Dv2r");function c(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}c.prototype.clear=n,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},YkxI:function(t,e,r){var n=r("wSKX"),i=r("Q2wK"),o=r("WHce");t.exports=function(t,e){return o(i(t,e,n),t+"")}},YsVG:function(t,e,r){var n=r("z4hc"),i=r("S7p9"),o=r("Dc0G"),a=o&&o.isTypedArray,s=a?i(a):n;t.exports=s},Z2pD:function(t,e,r){var n=r("dCZQ"),i="__lodash_hash_undefined__";t.exports=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=n&&void 0===e?i:e,this}},ZGh9:function(t,e){var r=9007199254740991,n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){return!!(e=null==e?r:e)&&("number"==typeof t||n.test(t))&&t>-1&&t%1==0&&t<e}},ZT2e:function(t,e,r){var n=r("o2mx");t.exports=function(t){return null==t?"":n(t)}},Zk5a:function(t,e){var r=800,n=16,i=Date.now;t.exports=function(t){var e=0,o=0;return function(){var a=i(),s=n-(a-o);if(o=a,s>0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},Zrlr:function(t,e,r){"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},a3hs:function(t,e,r){(t.exports=r("YHym")(!1)).push([t.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.card.collapsibleCard>header{cursor:pointer;background-color:#f5f5f5;border-bottom:1px solid hsla(0,0%,4%,.1)}.card.collapsibleCard>header .card-header-icon{text-decoration:none}.card.collapsibleCard>header .card-header-title{font-weight:400}.card.collapsibleCard>header p{margin-bottom:0}.card.collapsibleCard.collapsed header{border-bottom:none}.card.collapsibleCard>div.collapsing{position:relative;height:0;overflow:hidden;display:block;transition-property:height;transition-duration:.35s;transition-timing-function:ease}",""])},aCM0:function(t,e,r){var n=r("NkRn"),i=r("uLhX"),o=r("+66z"),a="[object Null]",s="[object Undefined]",c=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?s:a:c&&c in Object(t)?i(t):o(t)}},agim:function(t,e,r){var n=r("pTUa");t.exports=function(t){return n(this,t).has(t)}},bGc4:function(t,e,r){var n=r("gGqR"),i=r("Rh28");t.exports=function(t){return null!=t&&i(t.length)&&!n(t)}},bIbi:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"WeakMap");t.exports=n},bIjD:function(t,e,r){var n=r("NGEn"),i=r("hIPy"),o=r("UnLw"),a=r("ZT2e");t.exports=function(t,e){return n(t)?t:i(t,e)?[t]:o(a(t))}},bJWQ:function(t,e,r){var n=r("duB3"),i=r("KmWZ"),o=r("NqZt"),a=r("E4Hj"),s=r("G2xm"),c=r("zpVT");function u(t){var e=this.__data__=new n(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=s,u.prototype.set=c,t.exports=u},bO0Y:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"Promise");t.exports=n},"bXX+":function(t,e,r){"use strict";var n=r("jhkR"),i=r("fvMW"),o=r("VU/8")(n.a,i.a,!1,null,null,null);o.options.__file="components\\schemaLink.vue",e.a=o.exports},bklM:function(t,e,r){var n=r("Fkvj"),i=1,o=4;t.exports=function(t){return n(t,i|o)}},blYT:function(t,e,r){(function(e){var r="object"==typeof e&&e&&e.Object===Object&&e;t.exports=r}).call(e,r("DuR2"))},"c/Tr":function(t,e,r){t.exports={default:r("5zde"),__esModule:!0}},cER1:function(t,e,r){"use strict";var n=r("mvHQ"),i=r.n(n),o=r("fZjL"),a=r.n(o),s=r("Gu7T"),c=r.n(s),u=r("gRE1"),l=r.n(u),f=r("d7EF"),p=r.n(f),d=r("W3Iv"),v=r.n(d),h=r("T9Hf"),m=r("rVUV"),y=(r.n(m),r("Q7hp")),b=r.n(y),_=r("HN2V"),x=r.n(_),g=r("LJry"),j=r.n(g),O=r("lOo0"),C=r("bXX+"),w=r("mQxp"),k=r("4yG7"),P=r.n(k);e.a={props:{type:{type:String,required:!0},examples:{type:Object,required:!1,default:function(){return{}}}},data:function(){return{masterSchema:null,loading:!0}},created:function(){var t=this,e={date:{link:"https://tools.ietf.org/html/rfc3339#section-5.6",name:"RFC3339, 5.6"},email:{link:"https://tools.ietf.org/html/rfc5322#section-3.4.1",name:"RFC5322, 3.4.1"}};r("+99L")("./"+this.type+"_schema.json").then(function(e){return t.masterSchema=new O.a("$",null,e),v()(t.examples).forEach(function(e){var r=p()(e,2),n=r[0],i=r[1];b()(t.masterSchema,n)?P()(t.masterSchema,n+".examples",i):console.error("schema path not found in "+t.type+": "+n)}),t.loading=!1,e}).catch(function(t){throw t}),this.$static={formats:{"date-time":e.date,date:e.date,time:e.date,email:e.email}}},methods:{traverse:function(t,e){var r=this;t instanceof O.a?(e(t),v()(t).filter(function(t){var e=p()(t,2),r=e[0];e[1];return"$parent"!==r}).forEach(function(t){var n=p()(t,2),i=(n[0],n[1]);return r.traverse(i,e)})):t instanceof Array?t.forEach(function(t){return r.traverse(t,e)}):t instanceof Object&&l()(t).forEach(function(t){return r.traverse(t,e)})},simplifySchema:function(t){var e=function(t){return t.anyOf&&t.anyOf.indexOf(!0)>=0?[t,!0]:t.allOf&&t.allOf.indexOf(!1)>=0?[t,!1]:t.allOf&&t.allOf.length?[t,new O.a(t.$step,t.$parent,x.a.apply(void 0,[{}].concat(c()(t.allOf.map(function(t){return t.toJSON()})))))]:!0===t.not?[t,!1]:0===a()(t).filter(function(t){return"$"!==t[0]}).length?[t,!0]:null};return this.traverse(t,function(t){!function t(r){if(r){var n=p()(r,2),i=n[0],o=n[1],a=i.$parent;a&&P()(a.schema,a.path,o),i.$parent=null,t(e(a.schema))}}(e(t))}),t}},computed:{schemas:function(){if(!this.masterSchema)return null;var t={};return this.traverse(this.simplifySchema(this.masterSchema),function(e){t[e.$id]=e}),t}},filters:{stringify:function(t){return i()(t," ",2)},capitalize:function(t,e){return t?(t instanceof Array||(t=[t]),t.map(function(t){return""+t[0].toUpperCase()+t.slice(1)}).join(", ")):""}},components:{card:h.a,prism:j.a,schemaToc:w.a,schemaLink:C.a}}},d4US:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"DataView");t.exports=n},d7EF:function(t,e,r){"use strict";e.__esModule=!0;var n=o(r("us/S")),i=o(r("BO1k"));function o(t){return t&&t.__esModule?t:{default:t}}e.default=function(){return function(t,e){if(Array.isArray(t))return t;if((0,n.default)(Object(t)))return function(t,e){var r=[],n=!0,o=!1,a=void 0;try{for(var s,c=(0,i.default)(t);!(n=(s=c.next()).done)&&(r.push(s.value),!e||r.length!==e);n=!0);}catch(t){o=!0,a=t}finally{try{!n&&c.return&&c.return()}finally{if(o)throw a}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},dCZQ:function(t,e,r){var n=r("ICSD")(Object,"create");t.exports=n},dFpP:function(t,e,r){var n=r("imBK"),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,r=n(e,t);return!(r<0||(r==e.length-1?e.pop():i.call(e,r,1),--this.size,0))}},dYhQ:function(t,e,r){var n=r("9UkZ");t.exports=function(t){return n(t)?void 0:t}},deUO:function(t,e,r){var n=r("imBK");t.exports=function(t,e){var r=this.__data__,i=n(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}},duB3:function(t,e,r){var n=r("WxI4"),i=r("dFpP"),o=r("JBvZ"),a=r("2Hvv"),s=r("deUO");function c(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}c.prototype.clear=n,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},eFps:function(t,e,r){var n,i=r("+gg+"),o=(n=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"";t.exports=function(t){return!!o&&o in t}},eVIm:function(t,e,r){var n=r("dCZQ"),i="__lodash_hash_undefined__",o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(n){var r=e[t];return r===i?void 0:r}return o.call(e,t)?e[t]:void 0}},f931:function(t,e){t.exports=function(t,e){return function(r){return t(e(r))}}},fBQ2:function(t,e,r){"use strict";var n=r("evD5"),i=r("X8DO");t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},fMqj:function(t,e,r){var n=r("zGZ6"),i=500;t.exports=function(t){var e=n(t,function(t){return r.size===i&&r.clear(),t}),r=e.cache;return e}},fZOM:function(t,e,r){var n=r("kM2E"),i=r("mbce")(!1);n(n.S,"Object",{values:function(t){return i(t)}})},fvMW:function(t,e,r){"use strict";var n=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",[t._t("default"),!0===t.link?[t._v("\n    yes \n  ")]:!1===t.link?[t._v("\n    no \n  ")]:t.isSchema(t.link)?[r("nuxt-link",{attrs:{to:"#p-"+t.link.$id}},[r("span",{domProps:{innerHTML:t._s(t.link.getPath())}})])]:t.link instanceof Array?r("ul",t._l(t.link,function(e){return r("li",{key:e.$id},[r("nuxt-link",{attrs:{to:"#p-"+e.$id}},[r("span",{domProps:{innerHTML:t._s(e.getPath())}})])],1)})):t.link instanceof Object?r("ul",t._l(t.link,function(e,n){return r("li",[r("nuxt-link",{attrs:{to:"#p-"+e.$id}},[t._v("\n        "+t._s(n)+"\n      ")])],1)})):t._e()],2)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};e.a=i},gGqR:function(t,e,r){var n=r("aCM0"),i=r("yCNF"),o="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";t.exports=function(t){if(!i(t))return!1;var e=n(t);return e==a||e==s||e==o||e==c}},gHOb:function(t,e,r){var n=r("d4US"),i=r("POb3"),o=r("bO0Y"),a=r("5N57"),s=r("bIbi"),c=r("aCM0"),u=r("Ai/T"),l="[object Promise]",f="[object WeakMap]",p="[object DataView]",d=u(n),v=u(i),h=u(o),m=u(a),y=u(s),b=c;(n&&b(new n(new ArrayBuffer(1)))!=p||i&&"[object Map]"!=b(new i)||o&&b(o.resolve())!=l||a&&"[object Set]"!=b(new a)||s&&b(new s)!=f)&&(b=function(t){var e=c(t),r="[object Object]"==e?t.constructor:void 0,n=r?u(r):"";if(n)switch(n){case d:return p;case v:return"[object Map]";case h:return l;case m:return"[object Set]";case y:return f}return e}),t.exports=b},gRE1:function(t,e,r){t.exports={default:r("TmV0"),__esModule:!0}},gSvA:function(t,e,r){var n=r("kM2E"),i=r("mbce")(!0);n(n.S,"Object",{entries:function(t){return i(t)}})},ggOT:function(t,e,r){(function(t){var n=r("TQ3y"),i=r("gwcX"),o="object"==typeof e&&e&&!e.nodeType&&e,a=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=a&&a.exports===o?n.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(e,r("3IRH")(t))},gwcX:function(t,e){t.exports=function(){return!1}},hEik:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r("xG/K"),i=r("Oey6"),o=r("VU/8")(n.a,i.a,!1,null,null,null);o.options.__file="pages\\specification\\v3\\process-message.vue",e.default=o.exports},hIPy:function(t,e,r){var n=r("NGEn"),i=r("6MiT"),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(n(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!i(t))||a.test(t)||!o.test(t)||null!=e&&t in Object(e)}},hrPF:function(t,e){t.exports=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}},hvFG:function(t,e,r){"use strict";var n=function(){var t=this.$createElement,e=this._self._c||t;return e(this.tag,{tag:"component"},[e("nuxt-link",{attrs:{to:"#p-"+this.schema.$id}},[e("span",{domProps:{innerHTML:this._s(this.schema.$step)}})]),this.schema.properties||this.schema.patternProperties||this.schema.items?e("ul",[this._l(this.schema.properties,function(t,r){return e("schemaToc",{key:r,attrs:{schema:t}})}),this._l(this.schema.patternProperties,function(t,r){return e("schemaToc",{key:r,attrs:{schema:t}})}),this.schema.items?[this.schema.items instanceof Array?this._l(this.schema.items,function(t,r){return e("schemaToc",{key:r,attrs:{schema:t}})}):e("schemaToc",{attrs:{schema:this.schema.items}})]:this._e()],2):this._e()],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};e.a=i},i4ON:function(t,e,r){var n=r("nw3t"),i=r("22B7"),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,r){var a=t[e];o.call(t,e)&&i(a,r)&&(void 0!==r||e in t)||n(t,e,r)}},imBK:function(t,e,r){var n=r("22B7");t.exports=function(t,e){for(var r=t.length;r--;)if(n(t[r][0],e))return r;return-1}},jD7S:function(t,e,r){var n=r("tv3T"),i=r("ktak");t.exports=function(t,e){return t&&n(e,i(e),t)}},jMi8:function(t,e,r){var n=r("O1jc"),i=r("mKB/"),o=r("Ilb/"),a=r("hrPF"),s=r("WQFf"),c=r("1Yb9"),u=r("NGEn"),l=r("Fp5l"),f=r("ggOT"),p=r("gGqR"),d=r("yCNF"),v=r("9UkZ"),h=r("YsVG"),m=r("TlPD");t.exports=function(t,e,r,y,b,_,x){var g=t[r],j=e[r],O=x.get(j);if(O)n(t,r,O);else{var C=_?_(g,j,r+"",t,e,x):void 0,w=void 0===C;if(w){var k=u(j),P=!k&&f(j),E=!k&&!P&&h(j);C=j,k||P||E?u(g)?C=g:l(g)?C=a(g):P?(w=!1,C=i(j,!0)):E?(w=!1,C=o(j,!0)):C=[]:v(j)||c(j)?(C=g,c(g)?C=m(g):(!d(g)||y&&p(g))&&(C=s(j))):w=!1}w&&(x.set(j,C),b(C,j,y,_,x),x.delete(j)),n(t,r,C)}}},jhkR:function(t,e,r){"use strict";var n=r("lOo0");e.a={props:{link:{required:!0}},methods:{isSchema:function(t){return t instanceof n.a}}}},ktak:function(t,e,r){var n=r("7e4z"),i=r("/GnY"),o=r("bGc4");t.exports=function(t){return o(t)?n(t):i(t)}},l9Lx:function(t,e,r){var n=r("lb6C"),i=r("C0hh"),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(t){return null==t?[]:(t=Object(t),n(a(t),function(e){return o.call(t,e)}))}:i;t.exports=s},lOo0:function(t,e,r){"use strict";var n=r("woOf"),i=r.n(n),o=r("d7EF"),a=r.n(o),s=r("W3Iv"),c=r.n(s),u=r("Zrlr"),l=r.n(u),f=r("wxAW"),p=r.n(f),d=r("bklM"),v=r.n(d),h=r("rVUV"),m=r.n(h),y=r("Dc7M"),b=r.n(y),_=function(){function t(e,r,n){l()(this,t),this.$id=t.idx++,this.$step=e+"&#8203",this.$parent=r,n&&this.parseFrom(n)}return p()(t,[{key:"toJSON",value:function(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this;return m()(r,function(r,n,i,o){if(r instanceof t)return c()(r).filter(function(t){var e=a()(t,2),r=e[0];e[1];return["$id","$step","$parent"].indexOf(r)<0}).reduce(function(t,r){var n=a()(r,2),i=n[0],o=n[1];return t[i]=e.toJSON(o),t},{})})}},{key:"getPath",value:function(){var t="";return this.$parent&&(t+=this.$parent.schema.getPath(),"object"===this.$parent.schema.type&&(t+=".")),t+=this.$step,this.getPath=function(){return t},t}},{key:"parseFrom",value:function(e){var r=this;return!0===e?e={}:!1===e&&(e={not:!0}),i()(this,b()(v()(e),["$step","$id","$parent","items","properties","patternProperties","additionalItems","additionalProperties","contains","propertyNames","not","allOf","anyOf","oneOf"])),e.items&&(e.items instanceof Array?this.items=e.items.map(function(n,i){return new t("["+i+"]",{schema:r,path:"items["+i+"]"},e.items[i])}):this.items=new t("[*]",{schema:this,path:"items"},e.items)),["properties","patternProperties"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(n){return c()(e[n]).forEach(function(e,i){var o=a()(e,2),s=o[0],c=o[1];r[n]=r[n]||{},r[n][s]=new t("patternProperties"===n?"&lt;field&gt;":s,{schema:r,path:n+'["'+s+'"]'},c)})}),["additionalItems","additionalProperties","contains","propertyNames","not"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(n){r[n]=new t("+",{schema:r,path:n},e[n])}),["allOf","anyOf","oneOf"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(n){return e[n].forEach(function(e,i){r[n]=r[n]||[],r[n].push(new t("("+i+")"+("anyOf"===n?"?":"+"),{schema:r,path:n+"["+i+"]"},e))})}),this}}]),t}();_.idx=0,e.a=_},lb6C:function(t,e){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var a=t[r];e(a,r,t)&&(o[i++]=a)}return o}},"mKB/":function(t,e,r){(function(t){var n=r("TQ3y"),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i?n.Buffer:void 0,s=a?a.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var r=t.length,n=s?s(r):new t.constructor(r);return t.copy(n),n}}).call(e,r("3IRH")(t))},mQxp:function(t,e,r){"use strict";var n=r("Gs0Q"),i=r("hvFG"),o=!1;var a=function(t){o||r("AxiT")},s=r("VU/8")(n.a,i.a,!1,a,null,null);s.options.__file="components\\schemaToc.vue",e.a=s.exports},mTAn:function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},mbce:function(t,e,r){var n=r("lktj"),i=r("TcQ7"),o=r("NpIQ").f;t.exports=function(t){return function(e){for(var r,a=i(e),s=n(a),c=s.length,u=0,l=[];c>u;)o.call(a,r=s[u++])&&l.push(t?[r,a[r]]:a[r]);return l}}},mgnk:function(t,e,r){var n=r("aCM0"),i=r("UnEC"),o="[object Arguments]";t.exports=function(t){return i(t)&&n(t)==o}},nWuj:function(t,e){t.exports=function(t,e){return t.add(e),t}},nw3t:function(t,e,r){var n=r("p0bc");t.exports=function(t,e,r){"__proto__"==e&&n?n(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}},o2mx:function(t,e,r){var n=r("NkRn"),i=r("Hxdr"),o=r("NGEn"),a=r("6MiT"),s=1/0,c=n?n.prototype:void 0,u=c?c.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(o(e))return i(e,t)+"";if(a(e))return u?u.call(e):"";var r=e+"";return"0"==r&&1/e==-s?"-0":r}},octw:function(t,e){t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r}},oqL2:function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},p0bc:function(t,e,r){var n=r("ICSD"),i=function(){try{var t=n(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},pTUa:function(t,e,r){var n=r("/I3N");t.exports=function(t,e){var r=t.__data__;return n(e)?r["string"==typeof e?"string":"hash"]:r.map}},py9u:function(t,e,r){var n=r("tv3T"),i=r("t8rQ");t.exports=function(t,e){return t&&n(e,i(e),t)}},qwTf:function(t,e,r){var n=r("TQ3y").Uint8Array;t.exports=n},qyJz:function(t,e,r){"use strict";var n=r("+ZMJ"),i=r("kM2E"),o=r("sB3e"),a=r("msXi"),s=r("Mhyx"),c=r("QRG4"),u=r("fBQ2"),l=r("3fs2");i(i.S+i.F*!r("dY0y")(function(t){Array.from(t)}),"Array",{from:function(t){var e,r,i,f,p=o(t),d="function"==typeof this?this:Array,v=arguments.length,h=v>1?arguments[1]:void 0,m=void 0!==h,y=0,b=l(p);if(m&&(h=n(h,v>2?arguments[2]:void 0,2)),void 0==b||d==Array&&s(b))for(r=new d(e=c(p.length));e>y;y++)u(r,y,m?h(p[y],y):p[y]);else for(f=b.call(p),r=new d;!(i=f.next()).done;y++)u(r,y,m?a(f,h,[i.value,y],!0):i.value);return r.length=y,r}})},rCVp:function(t,e,r){var n=r("1C79");t.exports=function(t){return null!=t&&t.length?n(t,1):[]}},rVUV:function(t,e,r){var n=r("Fkvj"),i=1,o=4;t.exports=function(t,e){return n(t,i|o,e="function"==typeof e?e:void 0)}},rpnb:function(t,e,r){var n=r("tHks")();t.exports=n},s8mu:function(t,e,r){"use strict";var n=r("cER1"),i=r("D9sP"),o=!1;var a=function(t){o||r("A51D")},s=r("VU/8")(n.a,i.a,!1,a,null,null);s.options.__file="components\\schemaDetail.vue",e.a=s.exports},t8rQ:function(t,e,r){var n=r("7e4z"),i=r("G0Wc"),o=r("bGc4");t.exports=function(t){return o(t)?n(t,!0):i(t)}},tHks:function(t,e){t.exports=function(t){return function(e,r,n){for(var i=-1,o=Object(e),a=n(e),s=a.length;s--;){var c=a[t?s:++i];if(!1===r(o[c],c,o))break}return e}}},tv3T:function(t,e,r){var n=r("i4ON"),i=r("nw3t");t.exports=function(t,e,r,o){var a=!r;r||(r={});for(var s=-1,c=e.length;++s<c;){var u=e[s],l=o?o(r[u],t[u],u,r,t):void 0;void 0===l&&(l=t[u]),a?i(r,u,l):n(r,u,l)}return r}},uCi2:function(t,e,r){var n=r("bIjD"),i=r("Ubhr");t.exports=function(t,e){for(var r=0,o=(e=n(e,t)).length;null!=t&&r<o;)t=t[i(e[r++])];return r&&r==o?t:void 0}},uIr7:function(t,e){t.exports=function(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}},uLhX:function(t,e,r){var n=r("NkRn"),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=n?n.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),r=t[s];try{t[s]=void 0;var n=!0}catch(t){}var i=a.call(t);return n&&(e?t[s]=r:delete t[s]),i}},"ue/d":function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},uieL:function(t,e){t.exports=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}},"us/S":function(t,e,r){t.exports={default:r("Xd32"),__esModule:!0}},v8Dt:function(t,e,r){var n=r("pTUa");t.exports=function(t){return n(this,t).get(t)}},vi0E:function(t,e,r){var n=r("f931")(Object.getPrototypeOf,Object);t.exports=n},wEtr:function(t,e,r){r("gSvA"),t.exports=r("FeBl").Object.entries},wSKX:function(t,e){t.exports=function(t){return t}},wxAW:function(t,e,r){"use strict";e.__esModule=!0;var n,i=r("C4MV"),o=(n=i)&&n.__esModule?n:{default:n};e.default=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),(0,o.default)(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}()},"xG/K":function(t,e,r){"use strict";var n=r("mvHQ"),i=r.n(n),o=r("d7EF"),a=r.n(o),s=r("Dd8w"),c=r.n(s),u=r("W3Iv"),l=r.n(u),f=r("LJry"),p=r.n(f),d=r("T9Hf"),v=r("Q7hp"),h=r.n(v),m=r("s8mu");e.a={head:function(){return{title:"Specification for process messages"}},created:function(){var t=this,e=new Date,r="a4927dad-58d4-4580-b460-79cefd56775b";this.$static={message:{"content-spec":"urn:spec://eclipse.org/unide/process-message#v2",device:{id:r},process:{ts:e.toISOString()},measurements:[{ts:new Date(e.valueOf()+100).toISOString(),series:{time:[0,23,24],force:[26,23,24],pressure:[100952.4,100946.32,100944.2432]}}]},complexMessage:{"content-spec":"urn:spec://eclipse.org/unide/process-message#v2",device:{id:r,mode:"auto",state:"OK",swVersion:"2.0.3.13",swBuildId:"41535"},part:{code:"HUH289",id:"420003844",result:"NOK",toolId:"32324-432143",type:"SINGLE",typeId:"F00VH07328"},process:{externalId:"b4927dad-58d4-4580-b460-79cefd56775b",program:{id:"1",lastChangedDate:"2002-05-30T09:30:10.123+02:00",name:"Programm 1"},result:"NOK",shutoffPhase:"phase 2",ts:e.toISOString(),escalation:"shift leader",maxDuration:"30min"},measurements:[{code:"0000 EE01",name:"heating up",phase:"phase 1",result:"OK",ts:new Date(e.valueOf()+100).toISOString(),context:{pressure:{namespace:"https://mycompany.com/productvariants/5986",unit:"Pa",limits:{upperError:103e3,lowerError:99e3,upperWarn:102e3,lowerWarn:1e5,target:100950}},force:{limits:{upperError:[29,27,26],lowerError:[23,21,20],upperWarn:[28.5,26.5,25.5],lowerWarn:[23.5,21.5,20.5],target:[26,24,23]}}},specialValues:[{time:12,name:"turning point",value:{pressure:101530,force:50}},{time:50,name:"shutoffForce",value:{force:24,upperError:26,lowerError:22,upperWarn:25,lowerWarn:23,target:24}},{time:50,name:"shutoffPressure",value:{pressure:100950,upperError:103e3,lowerError:99e3}}],series:{time:[30,36,42],force:[26,23,24],pressure:[100952.4,100946.32,100944.2432],temperature:[45.4243,46.42342,44.2432]}},{ts:new Date(e.valueOf()+430).toISOString(),phase:"phase 2",name:"processing",result:"OK",series:{time:[0,23,24],temperature:[49.2,48.8,50]}}]}},this.$static.examples=l()(c()({},["content-spec","device","device.id","device.mode","measurements","part","part.code","part.id","part.result","part.type","part.typeId","process","process.externalId","process.program","process.program.id","process.program.lastChangedDate","process.program.name","process.result","process.shutoffPhase","process.ts"].reduce(function(e,r){return e[t.schemafy(r)]=r,e},{'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.unit':"measurements[0].context.pressure.unit",'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.namespace':"measurements[0].context.pressure.namespace",'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[0]':"measurements[0].context.pressure.limits",'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[1]':"measurements[0].context.force.limits",'properties.measurements.allOf[0].items.properties.series.patternProperties["^[^$]+"]':"measurements[0].series.force"}),["code","result","series","series.time","ts"].reduce(function(e,r){return e["properties.measurements.allOf[0].items."+t.schemafy(r)]="measurements[0]."+r,e},{}),["name","phase","specialValues","specialValues[1].time","specialValues[1].name","specialValues[1].value"].reduce(function(e,r){return e["properties.measurements.allOf[1].items."+t.schemafy(r)]="measurements[0]."+r,e},{}),["lowerError","lowerWarn","target","upperError","upperWarn"].reduce(function(t,e){return t['properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[0].properties.'+e]="measurements[0].context.pressure.limits."+e,t['properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[1].properties.'+e]="measurements[0].context.force.limits."+e,t},{}))).reduce(function(e,r){var n=a()(r,2),i=n[0],o=n[1],s=h()(t.$static.message,o)||h()(t.$static.complexMessage,o);return s?e[i]=[s]:console.error('no example provided in process-message for:\n"'+i+'": "'+o+'"'),e},{})},filters:{stringify:function(t){return i()(t," ",2)}},methods:{schemafy:function(t){return t.replace(/(^|\.)/g,"$1properties.").replace(/\[[^]]*]/g,".items")}},components:{card:d.a,prism:p.a,schemaDetail:m.a}}},xond:function(t,e,r){var n=r("FCuZ"),i=r("09Qt"),o=r("t8rQ");t.exports=function(t){return n(t,o,i)}},yCNF:function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},z4hc:function(t,e,r){var n=r("aCM0"),i=r("Rh28"),o=r("UnEC"),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,t.exports=function(t){return o(t)&&i(t.length)&&!!a[n(t)]}},zBOP:function(t,e,r){var n=r("22B7"),i=r("bGc4"),o=r("ZGh9"),a=r("yCNF");t.exports=function(t,e,r){if(!a(r))return!1;var s=typeof e;return!!("number"==s?i(r)&&o(e,r.length):"string"==s&&e in r)&&n(r[e],t)}},zGZ6:function(t,e,r){var n=r("YeCl"),i="Expected a function";function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(i);var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var a=t.apply(this,n);return r.cache=o.set(i,a)||o,a};return r.cache=new(o.Cache||n),r}o.Cache=n,t.exports=o},zpVT:function(t,e,r){var n=r("duB3"),i=r("POb3"),o=r("YeCl"),a=200;t.exports=function(t,e){var r=this.__data__;if(r instanceof n){var s=r.__data__;if(!i||s.length<a-1)return s.push([t,e]),this.size=++r.size,this;r=this.__data__=new o(s)}return r.set(t,e),this.size=r.size,this}}});