CINXE.COM
Additional APIs for the Base Specifications Issue 8, Part 2
<!doctype html> <html lang="en"> <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#"> <meta charset="utf-8"/><script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"NRJS-61380f36d568c6a38e5",applicationID:"502041541"};;/*! For license information please see nr-loader-rum-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>g,gD:()=>h,xN:()=>p});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function g(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function p(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function h(e,t){if(!e)throw new Error(f);var r=g(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,xv:()=>n});const n="1.274.0",i="PROD",o="CDN"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>c,RI:()=>i,WN:()=>d,bv:()=>o,gm:()=>a,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=c&&"undefined"==typeof SharedWorker,d=((()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)())},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),g(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return g(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),g(e,t)})))}function g(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=g(n),c=h(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=m()[s[e]];p&&p.push([f,e,r,a]);return a},get:v,listeners:h,context:g,buffer:function(e,t){const r=m();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!m()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=h(e).concat(t)}function h(e){return n[e]||[]}function v(t){return d[t]=d[t]||e(f,t)}function m(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},3434:(e,t,r)=>{"use strict";r.d(t,{YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log";n.K7.logging},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{G4:()=>i});var n=r(2614);r(860).K7.sessionReplay;const i={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"};n.g.ERROR,n.g.FULL,n.g.OFF},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7603:(e,t,r)=>{"use strict";r.d(t,{j:()=>P});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(3969),g=r(384),p=r(6344);const h=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",p.G4.RECORD,p.G4.PAUSE,"log","wrapLogger"],v=["setErrorHandler","finished","addToTrace","addRelease"];var m=r(1863),b=r(2614),y=r(993);var w=r(2646),A=r(3434);function R(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,A.YM)(i),a=new w.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function E(){const e=(0,g.pV)();h.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const x={};function _(e,t,g=!1){t||(0,c.Ak)(e,"api");const h={};var w=s.ee.get(e),A=w.get("tracer");x[e]=b.g.OFF,w.on(p.G4.REPLAY_RUNNING,(t=>{x[e]=t}));var E="api-",_=E+"ixn-";function N(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),j(E,n,!0,o||null===r?"session":void 0)(t,r)}function T(){}h.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,w),function(e,t,r={},i=y.p_.INFO){(0,a.p)(f.xV,["API/logging/".concat(i.toLowerCase(),"/called")],void 0,n.K7.metrics,e),(0,a.p)(y.ET,[(0,m.t)(),t,r,i],void 0,n.K7.logging,e)}(w,e,t,r)},h.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,w),R(w,e,t,{customAttributes:r,level:i})},v.forEach((e=>{h[e]=j(E,e,!0,"api")})),h.addPageAction=j(E,"addPageAction",!0,n.K7.genericEvents),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,j(E,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return N(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},h.setUserId=function(e){if("string"==typeof e||null===e)return N("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},h.setApplicationVersion=function(e){if("string"==typeof e||null===e)return N("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},h.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,w),w.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},h[p.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.RECORD,[],void 0,n.K7.sessionReplay,w)},h[p.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.PAUSE,[],void 0,n.K7.sessionReplay,w)},h.interaction=function(e){return(new T).get("object"==typeof e?e:{})};const S=T.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,w),g||(0,a.p)(_+"tracer",[(0,m.t)(),e,r],i,n.K7.spa,w),function(){if(A.emit((o?"":"no-")+"fn-start",[(0,m.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw A.emit("fn-err",[arguments,this,t],r),t}finally{A.emit("fn-end",[(0,m.t)()],r)}}}};function j(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,w),i&&(0,a.p)(e+t,[(0,m.t)(),...arguments],r?null:this,i,w),r?void 0:this}}function k(){r.e(296).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),w.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{S[e]=j(_,e,void 0,g?n.K7.softNav:n.K7.spa)})),h.setCurrentRouteName=g?j(_,"routeName",void 0,n.K7.softNav):j(E,"routeName",!0,n.K7.spa),h.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,w),(0,a.p)("err",[t,(0,m.t)(),!1,r,!!x[e]],void 0,n.K7.jserrors,w)},d.RI?(0,u.GG)((()=>k()),!0):k(),h}var N=r(9417),T=r(8122);const S={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},j={};var k=r(5284);const I=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let O=!1;function P(e,t={},r,n){let{init:a,info:c,loader_config:u,runtime:l={},exposed:f=!0}=t;l.loaderType=r;const p=(0,g.pV)();c||(a=p.init,c=p.info,u=p.loader_config),(0,N.xN)(e.agentIdentifier,a||{}),function(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");j[e]=(0,T.a)(t,S);const r=(0,g.nY)(e);r&&(r.loader_config=j[e])}(e.agentIdentifier,u||{}),c.jsAttributes??={},d.bv&&(c.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,c);const h=(0,N.D0)(e.agentIdentifier),v=[c.beacon,c.errorBeacon];O||(h.proxy.assets&&(I(h.proxy.assets),v.push(h.proxy.assets)),h.proxy.beacon&&v.push(h.proxy.beacon),E(),(0,g.US)("activatedFeatures",k.B),e.runSoftNavOverSpa&&=!0===h.soft_navigations.enabled&&h.feature_flags.includes("soft_nav")),l.denyList=[...h.ajax.deny_list||[],...h.ajax.block_internal?v:[]],l.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,l),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=_(e.agentIdentifier,n,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=f),O=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"nr-rum-1.274.0.min.js",i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={296:"sha512-gkYkZDAwQ9PwaDXs2YM+rNIdRej1Ac1mupWobRJ8eahQcXz6/sunGZCKklrzi5kWxhOGRZr2tn0rEKuLTXzfAA=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var g=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(g.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=g.bind(null,s.onerror),s.onload=g.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={840:0,374:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(7603);var l=i(1687),f=i(4234),g=i(5289),p=i(6154),h=i(384);const v=e=>p.RI&&!0===(0,s.gD)(e,"privacy.cookies_enabled");function m(e){return!!(0,h.dV)().o.MO&&v(e)&&!0===(0,s.gD)(e,"session_trace.enabled")}var b=i(6389);class y extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,b.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if(v(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(296).then(i.bind(i,3861));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(296).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(296).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,g.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return m(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var w=i(6630);class A extends y{static featureName=w.T;constructor(e,t=!0){super(e,w.T,t),this.importAggregator(e)}}var R=i(9908),E=i(2843),x=i(3878),_=i(782),N=i(1863);class T extends y{static featureName=_.T;constructor(e,t=!0){super(e,_.T,t),p.RI&&((0,E.u)((()=>(0,R.p)("docHidden",[(0,N.t)()],void 0,_.T,this.ee)),!0),(0,x.sp)("pagehide",(()=>(0,R.p)("winPagehide",[(0,N.t)()],void 0,_.T,this.ee))),this.importAggregator(e))}}var S=i(3969);class j extends y{static featureName=S.TZ;constructor(e,t=!0){super(e,S.TZ,t),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),p.gm?(this.features={},(0,h.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(A),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,h.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[A,T,j],loaderType:"lite"})})()})();</script> <meta name="title" content="Additional APIs for the Base Specifications Issue 8, Part 2"/> <meta name="description" content="#html-body [data-pb-style=TCOWQMM]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-style:none;border-width:1px;border-radius:0"/> <meta name="keywords" content="The Open Group Publications"/> <meta name="robots" content="INDEX,FOLLOW"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>Additional APIs for the Base Specifications Issue 8, Part 2</title> <link rel="stylesheet" type="text/css" media="all" href="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/css/styles.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/StripeIntegration_Payments/css/wallets.css" /> <script type="text/javascript" defer="defer" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_MagentoDataServices/js/storefront-event-collector.js"></script> <script type="text/javascript" defer="defer" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_MagentoDataServices/js/storefront-events-sdk.js"></script> <script type="text/javascript" defer="defer" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_MagentoLiveSearch/js/sdk.js"></script> <script type="text/javascript" defer="defer" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_MagentoProductRecommendations/js/recs-sdk.js"></script> <link rel="preload" as="font" crossorigin="anonymous" href="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/fonts/nunito-400.woff2" /> <link rel="preload" as="font" crossorigin="anonymous" href="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/fonts/nunito-700.woff2" /> <link rel="canonical" href="https://publications.opengroup.org/c228" /> <link rel="icon" type="image/x-icon" href="https://publications.opengroup.org/media/favicon/stores/3/favicon_0.ico" /> <link rel="shortcut icon" type="image/x-icon" href="https://publications.opengroup.org/media/favicon/stores/3/favicon_0.ico" /> <meta name="google-site-verification" content="xCsI0O93TVUMweWBiUueaZ4PcK7sfdkHtTbUvK6DII4" /> <script> var BASE_URL = 'https://publications.opengroup.org/'; var THEME_PATH = 'https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB'; var COOKIE_CONFIG = { "expires": null, "path": "\u002F", "domain": ".publications.opengroup.org", "secure": true, "lifetime": "3600", "cookie_restriction_enabled": false }; var CURRENT_STORE_CODE = 'publications'; var CURRENT_WEBSITE_ID = '3'; window.hyva = window.hyva || {} window.cookie_consent_groups = window.cookie_consent_groups || {} window.cookie_consent_groups['necessary'] = true; window.cookie_consent_config = window.cookie_consent_config || {}; window.cookie_consent_config['necessary'] = [].concat( window.cookie_consent_config['necessary'] || [], [ 'user_allowed_save_cookie', 'form_key', 'mage-messages', 'private_content_version', 'mage-cache-sessid', 'last_visited_store', 'section_data_ids' ] ); </script> <script> 'use strict'; (function( hyva, undefined ) { function lifetimeToExpires(options, defaults) { const lifetime = options.lifetime || defaults.lifetime; if (lifetime) { const date = new Date; date.setTime(date.getTime() + lifetime * 1000); return date; } return null; } function generateRandomString() { const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', length = 16; let formKey = '', charactersLength = allowedCharacters.length; for (let i = 0; i < length; i++) { formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] } return formKey; } const sessionCookieMarker = {noLifetime: true} const cookieTempStorage = {}; const internalCookie = { get(name) { const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); return v ? v[2] : null; }, set(name, value, days, skipSetDomain) { let expires, path, domain, secure, samesite; const defaultCookieConfig = { expires: null, path: '/', domain: null, secure: false, lifetime: null, samesite: 'lax' }; const cookieConfig = window.COOKIE_CONFIG || {}; expires = days && days !== sessionCookieMarker ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; path = cookieConfig.path || defaultCookieConfig.path; domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); secure = cookieConfig.secure || defaultCookieConfig.secure; samesite = cookieConfig.samesite || defaultCookieConfig.samesite; document.cookie = name + "=" + encodeURIComponent(value) + (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + (path ? '; path=' + path : '') + (domain ? '; domain=' + domain : '') + (secure ? '; secure' : '') + (samesite ? '; samesite=' + samesite : 'lax'); }, isWebsiteAllowedToSaveCookie() { const allowedCookies = this.get('user_allowed_save_cookie'); if (allowedCookies) { const allowedWebsites = JSON.parse(unescape(allowedCookies)); return allowedWebsites[CURRENT_WEBSITE_ID] === 1; } return false; }, getGroupByCookieName(name) { const cookieConsentConfig = window.cookie_consent_config || {}; let group = null; for (let prop in cookieConsentConfig) { if (!cookieConsentConfig.hasOwnProperty(prop)) continue; if (cookieConsentConfig[prop].includes(name)) { group = prop; break; } } return group; }, isCookieAllowed(name) { const cookieGroup = this.getGroupByCookieName(name); return cookieGroup ? window.cookie_consent_groups[cookieGroup] : this.isWebsiteAllowedToSaveCookie(); }, saveTempStorageCookies() { for (const [name, data] of Object.entries(cookieTempStorage)) { if (this.isCookieAllowed(name)) { this.set(name, data['value'], data['days'], data['skipSetDomain']); delete cookieTempStorage[name]; } } } }; hyva.getCookie = (name) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; } return internalCookie.get(name); } hyva.setCookie = (name, value, days, skipSetDomain) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { cookieTempStorage[name] = {value, days, skipSetDomain}; return; } return internalCookie.set(name, value, days, skipSetDomain); } hyva.setSessionCookie = (name, value, skipSetDomain) => { return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) } hyva.getBrowserStorage = () => { const browserStorage = window.localStorage || window.sessionStorage; if (!browserStorage) { console.warn('Browser Storage is unavailable'); return false; } try { browserStorage.setItem('storage_test', '1'); browserStorage.removeItem('storage_test'); } catch (error) { console.warn('Browser Storage is not accessible', error); return false; } return browserStorage; } hyva.postForm = (postParams) => { const form = document.createElement("form"); let data = postParams.data; if (! postParams.skipUenc && ! data.uenc) { data.uenc = btoa(window.location.href); } form.method = "POST"; form.action = postParams.action; Object.keys(postParams.data).map(key => { const field = document.createElement("input"); field.type = 'hidden' field.value = postParams.data[key]; field.name = key; form.appendChild(field); }); const form_key = document.createElement("input"); form_key.type = 'hidden'; form_key.value = hyva.getFormKey(); form_key.name="form_key"; form.appendChild(form_key); document.body.appendChild(form); form.submit(); } hyva.getFormKey = function () { let formKey = hyva.getCookie('form_key'); if (!formKey) { formKey = generateRandomString(); hyva.setCookie('form_key', formKey); } return formKey; } hyva.formatPrice = (value, showSign, options = {}) => { const formatter = new Intl.NumberFormat( 'en\u002DGB', Object.assign({ style: 'currency', currency: 'USD', signDisplay: showSign ? 'always' : 'auto' }, options) ); return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? formatter.formatToParts(value).map(({type, value}) => { switch (type) { case 'currency': return '\u0024' || value; case 'minusSign': return '- '; case 'plusSign': return '+ '; default : return value; } }).reduce((string, part) => string + part) : formatter.format(value); } const formatStr = function (str, nStart) { const args = Array.from(arguments).slice(2); return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { const idx = parseInt(n) - nStart; if (args[idx] === null || args[idx] === void 0) { return m; } return p.length % 2 ? p.slice(0, -1).replace('%%', '%') + args[idx] : p.replace('%%', '%') + n; }) } hyva.str = function (string) { const args = Array.from(arguments); args.splice(1, 0, 1); return formatStr.apply(undefined, args); } hyva.strf = function () { const args = Array.from(arguments); args.splice(1, 0, 0); return formatStr.apply(undefined, args); } /** * Take a html string as `content` parameter and * extract an element from the DOM to replace in * the current page under the same selector, * defined by `targetSelector` */ hyva.replaceDomElement = (targetSelector, content) => { // Parse the content and extract the DOM node using the `targetSelector` const parser = new DOMParser(); const doc = parser.parseFromString(content, 'text/html'); const contentNode = doc.querySelector(targetSelector); // Bail if content can't be found if (!contentNode) { return; } hyva.activateScripts(contentNode) // Replace the old DOM node with the new content document.querySelector(targetSelector).replaceWith(contentNode); // Reload customerSectionData and display cookie-messages if present window.dispatchEvent(new CustomEvent("reload-customer-section-data")); hyva.initMessages(); } hyva.activateScripts = (contentNode) => { // Extract all the script tags from the content. // Script tags won't execute when inserted into a dom-element directly, // therefore we need to inject them to the head of the document. const tmpScripts = contentNode.getElementsByTagName('script'); if (tmpScripts.length > 0) { // Push all script tags into an array // (to prevent dom manipulation while iterating over dom nodes) const scripts = []; for (let i = 0; i < tmpScripts.length; i++) { scripts.push(tmpScripts[i]); } // Iterate over all script tags and duplicate+inject each into the head for (let i = 0; i < scripts.length; i++) { let script = document.createElement('script'); script.innerHTML = scripts[i].innerHTML; document.head.appendChild(script); // Remove the original (non-executing) node from the content scripts[i].parentNode.removeChild(scripts[i]); } } return contentNode; } const replace = {['+']: '-', ['/']: '_', ['=']: ','}; hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); let currentTrap; const focusableElements = (rootElement) => { const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; return Array.from(rootElement.querySelectorAll(selector)) .filter(el => { return el.style.display !== 'none' && !el.disabled && el.tabIndex !== -1 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) }) } const focusTrap = (e) => { const isTabPressed = e.key === 'Tab' || e.keyCode === 9; if (!isTabPressed) return; const focusable = focusableElements(currentTrap) const firstFocusableElement = focusable[0] const lastFocusableElement = focusable[focusable.length - 1] e.shiftKey ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) }; hyva.releaseFocus = (rootElement) => { if (currentTrap && (!rootElement || rootElement === currentTrap)) { currentTrap.removeEventListener('keydown', focusTrap) currentTrap = null } } hyva.trapFocus = (rootElement) => { if (!rootElement) return; hyva.releaseFocus() currentTrap = rootElement rootElement.addEventListener('keydown', focusTrap) const firstElement = focusableElements(rootElement)[0] firstElement && firstElement.focus() } hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) }( window.hyva = window.hyva || {} )); </script> <script> if (!window.IntersectionObserver) { window.IntersectionObserver = function (callback) { this.observe = el => el && callback(this.takeRecords()); this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; this.disconnect = () => {}; this.unobserve = () => {}; } } </script> <meta property="og:type" content="product" /> <meta property="og:title" content="Additional APIs for the Base Specifications Issue 8, Part 2" /> <meta property="og:image" content="https://publications.opengroup.org/media/catalog/product/cache/ef9316be88d8ea53d1ff35275651ee2c/u/n/unix-logo_11_1_1.png" /> <meta property="og:description" content="This document has been prepared by The Open Group Base Working Group. The Open Group Base Working Group is submitting a number of additional APIs to the Austin Group as input to the Issue 8 revision of the Base Specifications. This document contains the second set of these APIs.
 
Note: In order to download publications from the Library, you need an account for The Open Group website. If you are a first-time user register for an account here." /> <meta property="og:url" content="https://publications.opengroup.org/c228" /> <meta property="product:price:amount" content="0"/> <meta property="product:price:currency" content="USD"/> <script> window.addEventListener('load', function () { window.magentoStorefrontEvents = magentoStorefrontEvents; magentoStorefrontEvents.context.setStorefrontInstance( {"storeUrl":"https:\/\/publications.opengroup.org\/","websiteId":3,"websiteCode":"publications","storeId":3,"storeCode":"open_group_publications","storeViewId":3,"storeViewCode":"publications","websiteName":"Open Group Publications ","storeName":"Open Group Publications","storeViewName":"Open Group Publications","baseCurrencyCode":"USD","storeViewCurrencyCode":"USD","catalogExtensionVersion":"103.3.14","environmentId":"66688aac-7743-446c-b25c-656e91e7123a","environment":"Production","storefrontTemplate":"Hyva"} ); magentoStorefrontEvents.context.setMagentoExtension({ magentoExtensionVersion: "7.5.0", }); magentoStorefrontEvents.context.setDataServicesExtension({ version: "7.5.0", }); magentoStorefrontEvents.context.setPage({ pageType: "Default" }); magentoStorefrontEvents.context.setContext("pageExtended", { action: "page-view" }); magentoStorefrontEvents.publish.pageView(); }); </script> </head> <body id="html-body" itemtype="http://schema.org/Product" itemscope="itemscope" class="page-product-downloadable catalog-product-view product-c228 page-layout-1column"> <div class="mst-gdpr__cookie-bar-wrapper block relative z-20" id="gdprCookieBar" x-data="initMstGdprCookieBar()" x-init="initDisplay()"> <div class="mst-gdpr__cookie-bar bg-white border border-gray-200 bottom-8 fixed flex items-center left-2 max-w-4xl md:max-w-2xl md:rounded-full px-12 py-8 rounded-xl shadow-md z-50" x-bind:class="{'opacity-70': isLoading}" x-show="isBarVisible" style="display: none"> <div class="consent-text"> Cookies help us deliver our services. By using our services, you agree to our use of cookies. <a href="/privacy-policy-cookie-restriction-mode">Learn more</a> </div> <div class="mst-gdpr__buttons flex flex-col md:flex-row"> <button type="button" class="action btn justify-center md:mr-2 md:px-2 mr-auto px-4 text-sm w-auto xl:px-4" x-bind:class="{'opacity-0': isLoading}" @click="openSettings"> <span>Settings</span> </button> <button class="action btn btn-primary justify-center md:mt-0 md:mr-2 md:px-2 mr-auto mt-4 mx-auto px-4 text-sm w-auto xl:px-4" data-trigger-settings="agree" x-bind:class="{'opacity-0': isLoading}" @click="handleAllow(1)"><span>Agree</span></button> <button class="action btn justify-center md:mt-0 md:px-2 mr-auto mt-4 mx-auto px-4 text-sm w-auto xl:px-4" data-trigger-settings="agree" x-bind:class="{'opacity-0': isLoading}" @click="handleDecline"><span>Decline</span></button> </div> </div> <div class="mst-gdpr__cookie-bar-overlay bg-white fixed h-full left-0 opacity-60 top-0 w-full z-40" style="display: none" id="gdprCookieBarOverlay" x-show="isScreenLocked"></div> </div> <div class="mst-gdpr__cookie-bar-overlay" id="gdprCookieBarOverlay"></div> <script> function initMstGdprCookieBar() { 'use strict'; const barConfig = {"allowUrl":"https:\/\/publications.opengroup.org\/gdpr_cookie\/cookie\/allow\/","declineUrl":"https:\/\/publications.opengroup.org\/gdpr_cookie\/cookie\/decline\/","lockScreen":false,"groupCookieName":"gdpr_cookie_groups","consentCookieName":"gdpr_cookie_consent","barEnabled":true,"googleConsentEnabled":true,"googleConsentTypes":["ad_user_data","ad_personalization","ad_storage","analytics_storage","personalization_storage","functionality_storage","security_storage"],"googleConsentDefault":{"ad_user_data":"denied","ad_personalization":"denied","ad_storage":"denied","analytics_storage":"denied","personalization_storage":"denied","functionality_storage":"denied","security_storage":"denied"}}; return { isLoading: false, isBarVisible: false, isScreenLocked: false, initDisplay: function () { if (barConfig.googleConsentEnabled) { this.initGoogleConsent(); if (!barConfig.barEnabled) { this.sendGoogleConsentUpdate(barConfig.googleConsentDefault); } } if (this.isSaved()) { this.initSavedCookieConsent(); } if (!barConfig.barEnabled && !this.isSaved()) { this.handleAllow(true); } if (this.isAllowed()) { this.hide(); } else { this.show(); } window.addEventListener('mst-gdpr-cookie-settings-save', () => { this.handleAllow(); }) window.addEventListener('mst-gdpr-cookie-open-bar-request', () => { if (barConfig.barEnabled && barConfig.googleConsentEnabled) { this.initGoogleConsent(); } this.show(); }) }, show: function () { this.isBarVisible = true; this.isScreenLocked = window.location.href.indexOf('cookie') === -1 && barConfig.lockScreen; if (this.isScreenLocked) { document.querySelector('body').style.overflow = 'hidden'; } }, hide: function () { this.isBarVisible = false; this.isScreenLocked = false; document.querySelector('body').style.overflow = 'auto'; }, handleAllow: function (agreeAll) { this.isLoading = true; if (barConfig.barEnabled && barConfig.googleConsentEnabled) { this.handleGoogleConsentAllow(agreeAll); } let checkedGroups = []; if (agreeAll) { checkedGroups = document.querySelectorAll('.cookie-group-container .checkbox'); } else { checkedGroups = document.querySelectorAll('.cookie-group-container .checkbox:checked'); } const checked = Array.from(checkedGroups || []); const body = checked.reduce((body, item) => { body.append('group_ids[]', item.dataset.groupId); return body; }, new URLSearchParams({form_key: hyva.getFormKey()})) fetch('https://publications.opengroup.org/gdpr_cookie/cookie/allow/', { method: 'post', body: body, headers: {contentType: 'application/x-www-form-urlencoded; charset=UTF-8'} }) .then(() => this.hide()) .finally(() => this.isLoading = false) }, handleDecline: function () { this.isLoading = true; if (barConfig.barEnabled && barConfig.googleConsentEnabled) { this.handleGoogleConsentDecline(); } const body = new URLSearchParams({form_key: hyva.getFormKey()}); fetch('https://publications.opengroup.org/gdpr_cookie/cookie/decline/', { method: 'post', body: body, headers: {contentType: 'application/x-www-form-urlencoded; charset=UTF-8'} }) .then(() => this.hide()) .finally(() => this.isLoading = false) }, openSettings: function () { window.dispatchEvent(new CustomEvent('mst-gdpr-cookie-settings-open')); }, initSavedCookieConsent: function () { let allowedCookieGroups = unescape(hyva.getCookie(barConfig.groupCookieName)).split(','); let checkboxList = document.querySelectorAll('.group-content .cookie-group-container .checkbox') checkboxList.forEach(function (item) { let groupId = item.getAttribute('data-group-id'); item.checked = allowedCookieGroups.indexOf(groupId.toString()) !== -1; }.bind(this)); }, isSaved: function () { return !!hyva.getCookie(barConfig.groupCookieName) && !!hyva.getCookie(barConfig.consentCookieName); }, isAllowed: function () { return this.isSaved() || !barConfig.barEnabled; }, getLocalStorageGoogleConsent: function () { return localStorage.getItem('mst-gdpr-google-consent-mode'); }, setLocalStorageGoogleConsent: function (consent) { localStorage.setItem('mst-gdpr-google-consent-mode', JSON.stringify(consent)); }, getGoogleConsent: function () { let consent = this.getLocalStorageGoogleConsent(); if (consent) { return JSON.parse(consent); } return barConfig.googleConsentDefault; }, getUserGoogleConsent: function () { let containerSelector = '.group-content .google-consent-container'; let consent = {}; barConfig.googleConsentTypes.forEach(function (consentType) { let elSelector = 'input[type="checkbox"][data-consent-type="' + consentType + '"]'; let el = document.querySelector(containerSelector + ' ' + elSelector); if (el) { consent[consentType] = el.checked ? 'granted' : 'denied'; } else { consent[consentType] = 'denied'; } }) return consent; }, saveGoogleConsent: function (consent) { this.sendGoogleConsentUpdate(consent); this.setLocalStorageGoogleConsent(consent); }, sendGoogleConsentUpdate: function (consent) { if (typeof gtag === "function") { gtag('consent', 'update', consent); } }, initGoogleConsent: function () { let consent = this.getGoogleConsent(); let containerSelector = '.group-content .google-consent-container'; barConfig.googleConsentTypes.forEach(function (consentType) { let elSelector = 'input[type="checkbox"][data-consent-type="' + consentType + '"]'; let el = document.querySelector(containerSelector + ' ' + elSelector); if (el) { el.checked = consent[consentType] === 'granted'; } }); }, handleGoogleConsentAllow: function (agreeAll) { let consent = {}; if (agreeAll) { barConfig.googleConsentTypes.forEach(function (consentType) { consent[consentType] = 'granted'; }); } else { consent = this.getUserGoogleConsent(); } this.saveGoogleConsent(consent); }, handleGoogleConsentDecline: function () { let consent = {}; barConfig.googleConsentTypes.forEach(function (consentType) { consent[consentType] = 'denied'; }); this.saveGoogleConsent(consent); } }; } </script> <script> (function (config) { function deleteDisallowedCookies() { if (!hyva.getCookie(config.consentCookieName)) { return; } const allowedGroups = unescape(hyva.getCookie(config.groupCookieName)).split(','); const groupIds = Object.keys(config.groups || {}); const disallowedGroupIds = groupIds.filter(groupId => !allowedGroups.includes(groupId)); setInterval(() => { disallowedGroupIds.forEach(groupId => { config.groups[groupId].forEach(cookieCode => hyva.setCookie(cookieCode, '', -1)); }); }, 5000); } window.addEventListener('DOMContentLoaded', deleteDisallowedCookies, {once: true}); })({"groups":{"2":["customer_segment_ids","external_no_cache","frontend","guest_view","last_category","last_product","newmessage","no_cache","persistent_shopping_cart"]},"groupCookieName":"gdpr_cookie_groups","consentCookieName":"gdpr_cookie_consent"}) </script> <div class="relative z-30" x-data="initGdprSettingsModal()" x-init="init()"> <div class="fixed w-full h-full flex items-center justify-center" x-show="open"> <div class="absolute bg-black h-full opacity-50 w-full" x-on:click="close" style="display: none" x-show="open"></div> <div class="bg-white border border-gray-200 content h-full lg:max-w-4xl max-w-sm md:h-4/6 md:max-w-md overflow-auto overscroll-contain p-12 rounded-md z-20" style="display: none" x-show.transition.origin.top="open"> <div class="border-b border-gray-500 flex justify-between mb-3 pb-4"> <h3 class="text-3xl">Privacy Overview</h3> <div class="cursor-pointer pt-1" x-on:click="close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6" width="6" height="6" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> <title>x</title></svg> </div> </div> This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience. <div class="group-content"> <div class="cookie-group-container cookie-group-container-2 border border-gray-300 mt-4 p-3 rounded-2xl shadow-sm" x-data="{open2: false}"> <div class="flex flex justify-between items-center"> <h4 class="title text-lg cursor-pointer" x-on:click="open2 = !open2"> <span x-show="! open2"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> <title>chevron-up</title></svg> </span> <span x-show="open2" style="display: none"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> <title>chevron-down</title></svg> </span> Essential </h4> <input class="checkbox disabled:opacity-40 mr-1 rounded" type="checkbox" value="1" disabled checked data-group-id="2" name="allowed-group-2"> </div> <div class="content mt-4 pl-5" x-show.transition.origin.top="open2" style="display: none"> <div> </div> <div class="cookie-list"> <table> <tr> <th class="p-2">Name</th> <th class="p-2 hidden lg:table-cell">Description</th> <th class="p-2 hidden lg:table-cell">Lifetime</th> </tr> <tr> <td class="p-2">CUSTOMER_SEGMENT_IDS</td> <td class="p-2 hidden lg:table-cell">Stores your Customer Segment ID</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">EXTERNAL_NO_CACHE</td> <td class="p-2 hidden lg:table-cell">A flag that, indicates whether caching is on or off.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">FRONTEND</td> <td class="p-2 hidden lg:table-cell">Your session ID on the server.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">GUEST-VIEW</td> <td class="p-2 hidden lg:table-cell">Allows guests to edit their orders.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">LAST_CATEGORY</td> <td class="p-2 hidden lg:table-cell">The last category you visited.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">LAST_PRODUCT</td> <td class="p-2 hidden lg:table-cell">The last product you looked at.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">NEWMESSAGE</td> <td class="p-2 hidden lg:table-cell">Indicates whether a new message has been received.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">NO_CACHE</td> <td class="p-2 hidden lg:table-cell">Indicates whether it is allowed to use cache.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">PERSISTENT_SHOPPING_CART</td> <td class="p-2 hidden lg:table-cell">A link to information about your cart and viewing history if you have asked the site.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> </table> </div> </div> </div> <div class="cookie-group-container cookie-group-container-5 border border-gray-300 mt-4 p-3 rounded-2xl shadow-sm" x-data="{open5: false}"> <div class="flex flex justify-between items-center"> <h4 class="title text-lg cursor-pointer" x-on:click="open5 = !open5"> <span x-show="! open5"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> <title>chevron-up</title></svg> </span> <span x-show="open5" style="display: none"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> <title>chevron-down</title></svg> </span> Marketing </h4> <input class="checkbox disabled:opacity-40 mr-1 rounded" type="checkbox" value="1" checked data-group-id="5" name="allowed-group-5"> </div> <div class="content mt-4 pl-5" x-show.transition.origin.top="open5" style="display: none"> <div> </div> <div class="cookie-list"> <table> <tr> <th class="p-2">Name</th> <th class="p-2 hidden lg:table-cell">Description</th> <th class="p-2 hidden lg:table-cell">Lifetime</th> </tr> </table> </div> </div> </div> <div class="google-consent-container border border-gray-300 mt-4 p-3 rounded-2xl shadow-sm" x-data="{open_google_consent_settings: false}"> <div class="flex flex justify-between"> <h4 class="title text-lg cursor-pointer" x-on:click="open_google_consent_settings = !open_google_consent_settings"> <span x-show="! open_google_consent_settings"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> <title>chevron-up</title></svg> </span> <span x-show="open_google_consent_settings" style="display: none"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> <title>chevron-down</title></svg> </span> Google Consent </h4> </div> <div class="content mt-4 pl-5" x-show.transition.origin.top="open_google_consent_settings" style="display: none"> <div class="cookie-list"> <table> <tr> <td class="p-2">ad_user_data</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_ad_user_data" data-consent-type="ad_user_data"> </td> </tr> <tr> <td class="p-2">ad_personalization</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_ad_personalization" data-consent-type="ad_personalization"> </td> </tr> <tr> <td class="p-2">ad_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_ad_storage" data-consent-type="ad_storage"> </td> </tr> <tr> <td class="p-2">analytics_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_analytics_storage" data-consent-type="analytics_storage"> </td> </tr> <tr> <td class="p-2">personalization_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_personalization_storage" data-consent-type="personalization_storage"> </td> </tr> <tr> <td class="p-2">functionality_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_functionality_storage" data-consent-type="functionality_storage"> </td> </tr> <tr> <td class="p-2">security_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_security_storage" data-consent-type="security_storage"> </td> </tr> </table> </div> </div> </div> </div> <button class="btn btn-primary ml-auto mt-4 text-sm cursor-pointer" x-on:click="save"><span>Apply</span></button></div> </div> </div> <script> function initGdprSettingsModal() { return { open: false, close: function () { this.open = false; document.querySelector('body').style.overflow = 'auto'; }, init: function () { window.addEventListener('mst-gdpr-cookie-settings-open', () => { document.querySelector('body').style.overflow = 'hidden'; this.open = true; }) }, save: function () { window.dispatchEvent(new CustomEvent('mst-gdpr-cookie-settings-save')); this.close(); } }; } </script> <input name="form_key" type="hidden" value="IfyFBKiVhGQ4tyr6" /> <noscript> <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"> <div class="container text-center"> <p> <strong>JavaScript seems to be disabled in your browser.</strong> <span> For the best experience on our site, be sure to turn on Javascript in your browser. </span> </p> </div> </section> </noscript> <script> document.body.addEventListener('touchstart', () => {}, {passive: true}) </script> <div class="page-wrapper"><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white contentarea" href="#contentarea"> <span> Skip to Content </span> </a> <script> function initHeader () { return { searchOpen: false, cart: {}, isCartOpen: false, getData(data) { if (data.cart) { this.cart = data.cart } }, isCartEmpty() { return !this.cart.summary_count }, toggleCart(event) { if (event.detail && event.detail.isOpen !== undefined) { this.isCartOpen = event.detail.isOpen if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { this.$refs.cartButton.focus() } } else { this.isCartOpen = true } } } } function initCompareHeader() { return { compareProducts: null, itemCount: 0, receiveCompareData(data) { if (data['compare-products']) { this.compareProducts = data['compare-products']; this.itemCount = this.compareProducts.count; } } } } </script> <div id="header" class="relative z-20 w-full border-b shadow bg-blue border-container-lighter" x-data="initHeader()" @private-content-loaded.window="getData(event.detail.data)" > <div class="container gap-x-2 gap-y-3 flex flex-wrap lg:gap-0 lg:flex-nowrap items-center justify-between w-full px-4 py-3 mx-auto mt-0"> <!--Logo--> <div class="flex-1 order-1 sm:order-2 lg:order-1 w-full sm:w-auto lg:flex-none"> <div class="header-logo-pub"> <a class="text-xl font-bold tracking-wide no-underline hover:no-underline font-title" href="https://publications.opengroup.org/" aria-label="Go to Home page" > <img class="h-16 w-auto" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/images/logo.svg" alt="The Open Group" width="240" height="88" /> </a> </div> </div> <!--Search--> <div class="order-3 lg:order-2 w-full lg:w-3/4" id="search-content" > <div x-data="initLiveSearch()" x-init="initPopover()" @close-search.window="handlePopover(false)" @open-search.window="handlePopover(true)"> <div class="lg:container w-full lg:w-3/4 mx-auto text-black"> <form class="form minisearch relative" id="search_mini_form" action="https://publications.opengroup.org/catalogsearch/result/" method="get" > <div> <div class="relative group"> <div class="flex"> <input id="search" class="w-full p-2 text-base leading-normal transition appearance-none border-white focus:outline-none focus:border-primary focus:ring-0 h-10" type="text" x-model="queryPhrase" name="q" value="" placeholder="Search for a product..." maxlength="94" role="combobox" aria-haspopup="false" aria-autocomplete="both" autocomplete="off" aria-expanded="false" @input="getProducts(); $nextTick(() => this.searchOpen = true);" @click.away="searchOpen = false" /> </div> <div class="absolute flex-col z-50 shadow-xl mt-1 bg-white w-full search-autocomplete" :class="{ 'block': searchOpen, 'hidden': !searchOpen }" x-show="true"> <div class="flex"> <template x-if="liveSearchProducts.length >= 1 && queryPhrase !== ''"> <div class="grid lg:grid-cols-2 gap-8 px-4 py-8 lg:p-8 bg-container w-full"> <template x-for="product in liveSearchProducts.slice(0, 8)"> <a class="grid grid-cols-10 justify-center items-center card shadow-md p-0 cursor-pointer" @click="handleProductClick(product)"> <div class="flex justify-center items-center p-1.5 col-span-3"> <img class="max-h-20 w-auto" :src="product.image"/> </div> <div class="flex flex-col gap-2 col-span-7 py-4 px-8 bg-white w-full h-full"> <div x-text="product.name" class=""></div> </div> </a> </template> </div> </template> </div> <template x-if="liveSearchProducts.length >= 1 && queryPhrase !== ''"> <button class="btn btn-primary w-full rounded-none p-4 text-lg" type="submit"> View All </button> </template> </div> </div> </div> <button type="submit" title="Search" class="action search absolute right-0 top-0 h-10 w-10 bg-primary text-white flex items-center justify-center" aria-label="Search" > <span class="label search-label"> Search </span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6" width="25" height="25" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> <title>search</title></svg> </button> </form> </div> </div> <script> function initLiveSearch() { 'use strict'; return { queryPhrase: '', liveSearchProducts: [], liveSearchSuggestions: [], searchOpen: false, search: null, searchId: "66688aac-7743-446c-b25c-656e91e7123a_" + "publications_" + "open_group_publications_" + "publications", initPopover() { this.search = this.buildSearch(); this.initTogglePopover(); }, buildSearch() { window.magentoStorefrontEvents.context.setSearchExtension({ version: "4.2.1" }); return new MagentoLiveSearch({ environmentId: "66688aac-7743-446c-b25c-656e91e7123a", websiteCode: "publications", storeCode: "open_group_publications", storeViewCode: "publications", apiKey: "search_gql", }); }, // this will open the popover, whenever the search-input has focus initTogglePopover() { const popover = document.getElementById('search'); popover.addEventListener('focus', () => { this.searchOpen = true; }); }, handlePopover(toggleValue) { this.searchOpen = toggleValue; }, handleProductClick(product) { window.magentoStorefrontEvents.context.setSearchResults( window.magentoStorefrontEvents.context.getSearchResults() ); window.magentoStorefrontEvents.publish.searchProductClick("search-bar", `${product.sku}`); // Timeout to prevent submission before event has fired. setTimeout(() => window.location.href = product.url, 500); }, // this will submit the form with the clicked suggestion as the search-phrase searchSuggestion(suggestion, event) { document.getElementById('search').value = suggestion; document.getElementById('search_mini_form').submit(); }, // get products from fetch-request and update liveSearchProducts and liveSearchSuggestions async getProducts() { this.searchOpen = true; const result = await this.getLiveSearchProducts(); let products = []; this.liveSearchProducts = result.data.productSearch.items.map(item => ({ name: item.product.name, price: item.product.price_range.maximum_price.regular_price.value, currency: item.product.price_range.maximum_price.regular_price.currency, image: item.product.image ? item.product.image.url : 'https://publications.opengroup.org/media/catalog/product/placeholder/websites/3/o_symbol_registered_1.png', url: item.product.canonical_url, id: item.product.id, sku: item.product.sku })); this.liveSearchSuggestions = result.data.productSearch.suggestions; //search-results-view }, // retrieve products from magento live search service async getLiveSearchProducts() { this.searchRequestId = Math.random().toString(16).slice(2); if (!this.search) { return []; } const searchCtx = { units: [{ searchUnitId: "search-bar", queryTypes: ["products"], phrase: this.queryPhrase, currentPage: 1, pageSize: 3, filter: [], sort: [{attribute: "relevance", direction: "DESC"}], searchRequestId: this.searchRequestId }] }; window.magentoStorefrontEvents.context.setSearchInput(searchCtx); window.magentoStorefrontEvents.publish.searchRequestSent("search-bar"); const before = Date.now(); const result = await this.search.productSearch({ phrase: this.queryPhrase, data: { products: true, facets: true, suggestions: true } }); const after = Date.now(); const productItems = result.data.productSearch.items || []; const suggestions = result.data.productSearch.suggestions || []; const facets = result.data.productSearch.facets || []; const formattedProductItems = productItems.map((item, key) => ({ name: item.product.name, sku: item.product.sku, url: item.product.canonical_url, imageUrl: item.product.image ? item.product.image.url : 'https://publications.opengroup.org/media/catalog/product/placeholder/websites/3/o_symbol_registered_1.png', price: item.product.price_range.minimum_price.final_price.value, rank: key, })); const formattedSuggestions = suggestions.map((item, key) => ({ suggestion: item, rank: key, })); const formattedFacets = facets.map((facet) => ({ attribute: facet.attribute, title: facet.title, type: facet.type || "PINNED", buckets: facet.buckets.map((bucket) => bucket), })); const searchCtxUpdated = { units: [{ searchUnitId: "search-bar", searchRequestId: this.searchRequestId, executionTime: after - before, products: formattedProductItems, categories: [], suggestions: formattedSuggestions, page: result.data.productSearch.page_info.current_page, perPage: result.data.productSearch.page_info.page_size, facets: formattedFacets }] }; window.magentoStorefrontEvents.context.setSearchResults(searchCtxUpdated); window.magentoStorefrontEvents.publish.searchResponseReceived("search-bar"); return result; } } } </script> </div> <div class="flex gap-8 md:gap-12 justify-end items-center order-2 lg:order-3"> <!--Customer Icon & Dropdown--> <div class="relative inline-block" x-data="{ open: false }" @keyup.escape="open = false" > <button type="button" id="customer-menu" class="block text-white hover:text-primary" @click="open = !open" @click.outside="open = false" :aria-expanded="open ? 'true' : 'false'" aria-label="My Account" aria-haspopup="true" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-8 w-8" width="32" height="32" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z"/> </svg> </button> <nav class=" absolute right-0 z-20 w-40 py-2 mt-2 -mr-4 px-1 overflow-auto origin-top-right rounded-sm shadow-lg sm:w-48 lg:mt-3 bg-container-lighter " x-cloak x-show="open" aria-labelledby="customer-menu" @click.outside="open = false" > <a id="customer.header.sign.in.link" class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" href="https://publications.opengroup.org/customer/account/index/?before_auth_url=https%3A%2F%2Fpublications.opengroup.org%2Fc228" title="Sign In" > Sign In</a> <a id="customer.header.register.link" class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" href="https://publications.opengroup.org/customer/account/create/?before_auth_url=https%3A%2F%2Fpublications.opengroup.org%2Fc228" title="Create an Account" > Create an Account </a> </nav> </div> <div class="flex-1 lg:flex-none lg:hidden" x-data="{ isOpen : false}"> <div class="flex items-baseline menu-icon"> <div class="flex justify-start w-full"> <button @click="isOpen = !isOpen; $dispatch('toggle-mobile-menu')" class="flex items-center justify-start cursor-pointer text-white hover:text-white"> <template x-if="!isOpen"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-8 h-8" width="48" height="48" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 5.25h16.5m-16.5 4.5h16.5m-16.5 4.5h16.5m-16.5 4.5h16.5"/> <title>bars-4</title></svg> </template> <template x-if="isOpen"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-8 h-8" width="48" height="48" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/> <title>x-mark</title></svg> </template> </button> </div> </div> </div> </div> </div> <!--Main Navigation--> <div x-data="initMenuMobile_6743865be8695()" class="absolute w-full z-50 order-2 sm:order-1 lg:order-2 navigation lg:hidden" > <!-- mobile --> <div class="bg-container h-screen overflow-x-hidden overflow-y-auto w-full" :class="{'text-white -left-full hidden' : !open, 'text-black left-0' : open}" @toggle-mobile-menu.window="open = !open" @keydown.window.escape="open=false" x-cloak > <nav class="px-4 text-blue w-full duration-150 ease-in-out transform transition-display bg-container h-full font-bold" :class="{ 'hidden' : !open }" > <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/standards" title="Standards" > <span> Standards </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-26' ? 0 : 'category-node-26'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-26', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-26' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> Standards </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards" title="Standards" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/agile-standards" title="Agile Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Agile Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/archimate" title="ArchiMate® Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/business-architecture" title="Business Architecture Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Business Architecture Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/cloud-computing" title="Cloud Computing Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Cloud Computing Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/commercial-aviation-standards" title="Commercial Aviation Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Commercial Aviation Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/data-mgmt" title="Data Management Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Data Management Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/digital-business-standards" title="Digital Business Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Digital Business Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/dist-computing" title="Distributed Computing Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Distributed Computing Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/emmm" title="EMMM™ Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> EMMM™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/energistics-standards" title="Energistics Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Energistics Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/enterprise-architecture" title="Enterprise Architecture Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Enterprise Architecture Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/enterprise-mgmt" title="Enterprise Management Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Enterprise Management Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/face" title="FACE® Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> FACE® Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/healthcare" title="Healthcare Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Healthcare Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/interworking" title="Interworking Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Interworking Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/it4it" title="IT4IT™ Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/open-fair-standards" title="Open FAIR™ Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open FAIR™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/op30" title="Open Platform 3.0™ Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Platform 3.0™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/opa" title="Open Process Automation™ Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Process Automation™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/preliminary-standards" title="Preliminary Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Preliminary Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/realtime" title="Real-time & Embedded Systems Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Real-time & Embedded Systems Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/security" title="Security Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Security Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/semantic-interop" title="Semantic Interoperability Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Semantic Interoperability Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/snapshots" title="Snapshots" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Snapshots </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/soa" title="SOA Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOA Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/sosa" title="SOSA™ Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOSA™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/corrigenda" title="Technical Corrigenda" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Technical Corrigenda </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/togaf" title="TOGAF® Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/trusted-technology" title="Trusted Technology Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Trusted Technology Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/unix" title="UNIX®  Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> UNIX® Standards </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/certifications" title="Certifications" > <span> Certifications </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-33' ? 0 : 'category-node-33'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-33', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-33' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> Certifications </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications" title="Certifications" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/archimate" title="ArchiMate® Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/certification-for-people" title="Certification for People" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Certification for People </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/dpbok" title="DPBoK™ Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> DPBoK™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/face" title="FACE® Training & Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> FACE® Training & Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/it4it" title="IT4IT™ Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/o-aa-trade-certification" title="O-AA™ Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> O-AA™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/opas-cert" title="O-PAS™ Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> O-PAS™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/open-ca" title="Open CA Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CA Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/open-cds" title="Open CDS Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CDS Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/opencitm" title="Open CITM Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CITM Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/opencts" title="Open CTS Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CTS Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/octtp" title="Open CTTP Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CTTP Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/open-fair" title="Open FAIR™ Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open FAIR™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/open-trusted-technology" title="Open Trusted Technology Provider™ Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Trusted Technology Provider™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/practice-tests" title="Practice Tests" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Practice Tests </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/professional-certification" title="Professional Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Professional Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/togaf" title="TOGAF® Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/the-open-brand" title="The Open Brand Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> The Open Brand Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/unix" title="UNIX® Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> UNIX® Certification </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/guides" title="Guides" > <span> Guides </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-37' ? 0 : 'category-node-37'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-37', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-37' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> Guides </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides" title="Guides" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/agile-architecture-guides" title="Agile Architecture Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Agile Architecture Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/archimate" title="ArchiMate® Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/architecture" title="Architecture Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Architecture Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/business-architecture" title="Business Architecture Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Business Architecture Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/cloud-computing" title="Cloud Computing Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Cloud Computing Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/digital-transformation" title="Digital Transformation Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Digital Transformation Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/direcnet" title="DirecNet® Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> DirecNet® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/electronic-messaging" title="Electronic Messaging Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Electronic Messaging Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/face" title="FACE® Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> FACE® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/healthcare-guides" title="Healthcare Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Healthcare Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/identity-management" title="Identity Management Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Identity Management Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/it4it" title="IT4IT™ Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/openca" title="Open Professions Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Professions Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/open-fair" title="Open FAIR&trade; Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open FAIR™ Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/open-platform-3" title="Open Platform 3.0&trade; Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Platform 3.0™ Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/open-process-automation" title="Open Process Automation&trade; Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Process Automation™ Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/osdu-guides" title="OSDU® Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> OSDU® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/security" title="Security Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Security Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/soa" title="SOA Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOA Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/sosa" title="SOSA™ Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOSA™ Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/standards-process" title="Standards Process Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Standards Process Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/togaf" title="TOGAF® Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/trusted-technology" title="Trusted Technology Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Trusted Technology Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/unix" title="UNIX® Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> UNIX® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/commercial-aviation-guides" title="Commercial Aviation Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Commercial Aviation Guides </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/data-sheets" title="Data Sheets" > <span> Data Sheets </span> </a> </span> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/webinars" title="Webinars" > <span> Webinars </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-44' ? 0 : 'category-node-44'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-44', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-44' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> Webinars </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars" title="Webinars" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/archimate" title="ArchiMate® Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/toolkit" title="Architect's Toolkit (broadcast episodes)" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Architect's Toolkit (broadcast episodes) </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/architecture" title="Architecture Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Architecture Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/business-architecture-webinars" title="Business Architecture Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Business Architecture Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/certification-program" title="Certification Program Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Certification Program Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/cloud-computing" title="Cloud Computing Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Cloud Computing Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/digital-business" title="Digital Business Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Digital Business Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/face" title="FACE® Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> FACE® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/iot" title="IoT Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IoT Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/it4it" title="IT4IT™ Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/learning-pathways-series" title="Learning Pathways Webinar Series" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Learning Pathways Webinar Series </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-cits" title="Open CITS Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CITS Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-footprint-webinars" title="Open Footprint® Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Footprint® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-platform-3-0" title="Open Platform 3.0™ Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Platform 3.0™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-fair" title="Open FAIR™ Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open FAIR™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-process-automation" title="Open Process Automation™ Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Process Automation™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/osdu-trade-webinars" title="OSDU® Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> OSDU® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/security" title="Security Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Security Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/soa" title="SOA Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOA Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/sosa" title="SOSA™ Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOSA™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/togaf" title="TOGAF® Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/trusted-technology" title="Trusted Technology Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Trusted Technology Webinars </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/white-papers" title="White Papers" > <span> White Papers </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-50' ? 0 : 'category-node-50'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-50', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-50' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> White Papers </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers" title="White Papers" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/archimate" title="ArchiMate® White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/architecture" title="Architecture White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Architecture White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/boundaryless-information-flow" title="Boundaryless Information Flow™ White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Boundaryless Information Flow™ White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/certification-programs" title="Certification White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Certification White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/cloud-computing" title="Cloud Computing White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Cloud Computing White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/commercial-aviation" title="Commercial Aviation White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Commercial Aviation White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/digital-business" title="Digital Business White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Digital Business White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/directory" title="Directory White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Directory White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/healthcare" title="Healthcare White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Healthcare White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/iot" title="IoT White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IoT White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/it4it" title="IT4IT™ White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/lifecycle-management" title="Lifecycle Management White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Lifecycle Management White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/network-computing" title="Network Computing White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Network Computing White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/open-platform-3" title="Open Platform 3.0™ White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Platform 3.0™ White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/open-process-automation" title="Open Process Automation™ White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Process Automation™ White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/security" title="Security White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Security White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/soa" title="SOA White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOA White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/togaf" title="TOGAF® White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/trusted-technology" title="Trusted Technology White Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Trusted Technology White Papers </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/more-categories" title="More..." > <span> More... </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-45' ? 0 : 'category-node-45'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-45', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-45' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> More... </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories" title="More..." class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/agile" title="Agile" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Agile </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/archimate-models" title="ArchiMate® Models" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Models </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/archimate-stencils" title="ArchiMate® Stencils" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Stencils </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/blogs" title="Blogs" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Blogs </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/business-scenarios" title="Business Scenarios" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Business Scenarios </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/case-studies" title="Case Studies" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Case Studies </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/cde-motif" title="CDE/Motif Documentation" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> CDE/Motif Documentation </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/com-dcom" title="COM/DCOM" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> COM/DCOM </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/consortium" title="Consortium Specifications" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Consortium Specifications </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/dce" title="DCE Documentation" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> DCE Documentation </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/hardcopy-publications" title="Hardcopy Publications" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Hardcopy Publications </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/open-subsurface-data-universetm" title="Open Subsurface Data Universe™ Forum" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Subsurface Data Universe™ Forum </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/podcasts" title="Podcasts" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Podcasts </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/reports" title="Reports" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Reports </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/reference-cards" title="Reference Cards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Reference Cards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/rfps" title="RFPs" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> RFPs </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/software-downloads" title="Software Downloads" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Software Downloads </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/og-press" title="The Open Group Press" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> The Open Group Press </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/training-materials" title="Training Materials" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Training Materials </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/templates" title="Templates" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Templates </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/videos" title="Videos" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Videos </span> </a> </span> </div> </div> </div> </nav> </div> </div> <script> 'use strict'; const initMenuMobile_6743865be8695 = () => { return { mobileLevelZeroPanelActiveId: null, mobileLevelOnePanelActiveId: null, open: false, } } </script> <div x-data="initMenuDesktop_6743865bf3696()" class="z-20 order-2 navigation hidden bg-container sm:order-1 lg:order-2 lg:flex" > <!-- desktop --> <div class="container items-center mx-auto w-full"> <nav class="flex w-full relative" > <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/standards" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Standards" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Standards </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/standards/agile-standards" title="Agile Standards" class="level-1 block text-blue font-bold"> Agile Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/archimate" title="ArchiMate® Standards" class="level-1 block text-blue font-bold"> ArchiMate® Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/business-architecture" title="Business Architecture Standards" class="level-1 block text-blue font-bold"> Business Architecture Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/cloud-computing" title="Cloud Computing Standards" class="level-1 block text-blue font-bold"> Cloud Computing Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/commercial-aviation-standards" title="Commercial Aviation Standards" class="level-1 block text-blue font-bold"> Commercial Aviation Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/data-mgmt" title="Data Management Standards" class="level-1 block text-blue font-bold"> Data Management Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/digital-business-standards" title="Digital Business Standards" class="level-1 block text-blue font-bold"> Digital Business Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/dist-computing" title="Distributed Computing Standards" class="level-1 block text-blue font-bold"> Distributed Computing Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/emmm" title="EMMM™ Standards" class="level-1 block text-blue font-bold"> EMMM™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/energistics-standards" title="Energistics Standards" class="level-1 block text-blue font-bold"> Energistics Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/enterprise-architecture" title="Enterprise Architecture Standards" class="level-1 block text-blue font-bold"> Enterprise Architecture Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/enterprise-mgmt" title="Enterprise Management Standards" class="level-1 block text-blue font-bold"> Enterprise Management Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/face" title="FACE® Standards" class="level-1 block text-blue font-bold"> FACE® Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/healthcare" title="Healthcare Standards" class="level-1 block text-blue font-bold"> Healthcare Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/interworking" title="Interworking Standards" class="level-1 block text-blue font-bold"> Interworking Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/it4it" title="IT4IT™ Standards" class="level-1 block text-blue font-bold"> IT4IT™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/open-fair-standards" title="Open FAIR™ Standards" class="level-1 block text-blue font-bold"> Open FAIR™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/op30" title="Open Platform 3.0™ Standards" class="level-1 block text-blue font-bold"> Open Platform 3.0™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/opa" title="Open Process Automation™ Standards" class="level-1 block text-blue font-bold"> Open Process Automation™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/preliminary-standards" title="Preliminary Standards" class="level-1 block text-blue font-bold"> Preliminary Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/realtime" title="Real-time & Embedded Systems Standards" class="level-1 block text-blue font-bold"> Real-time & Embedded Systems Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/security" title="Security Standards" class="level-1 block text-blue font-bold"> Security Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/semantic-interop" title="Semantic Interoperability Standards" class="level-1 block text-blue font-bold"> Semantic Interoperability Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/snapshots" title="Snapshots" class="level-1 block text-blue font-bold"> Snapshots </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/soa" title="SOA Standards" class="level-1 block text-blue font-bold"> SOA Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/sosa" title="SOSA™ Standards" class="level-1 block text-blue font-bold"> SOSA™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/corrigenda" title="Technical Corrigenda" class="level-1 block text-blue font-bold"> Technical Corrigenda </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/togaf" title="TOGAF® Standards" class="level-1 block text-blue font-bold"> TOGAF® Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/trusted-technology" title="Trusted Technology Standards" class="level-1 block text-blue font-bold"> Trusted Technology Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/unix" title="UNIX®  Standards" class="level-1 block text-blue font-bold"> UNIX® Standards </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/certifications" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Certifications" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Certifications </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/archimate" title="ArchiMate® Certification" class="level-1 block text-blue font-bold"> ArchiMate® Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/certification-for-people" title="Certification for People" class="level-1 block text-blue font-bold"> Certification for People </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/dpbok" title="DPBoK™ Certification" class="level-1 block text-blue font-bold"> DPBoK™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/face" title="FACE® Training & Certification" class="level-1 block text-blue font-bold"> FACE® Training & Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/it4it" title="IT4IT™ Certification" class="level-1 block text-blue font-bold"> IT4IT™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/o-aa-trade-certification" title="O-AA™ Certification" class="level-1 block text-blue font-bold"> O-AA™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/opas-cert" title="O-PAS™ Certification" class="level-1 block text-blue font-bold"> O-PAS™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/open-ca" title="Open CA Certification" class="level-1 block text-blue font-bold"> Open CA Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/open-cds" title="Open CDS Certification" class="level-1 block text-blue font-bold"> Open CDS Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/opencitm" title="Open CITM Certification" class="level-1 block text-blue font-bold"> Open CITM Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/opencts" title="Open CTS Certification" class="level-1 block text-blue font-bold"> Open CTS Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/octtp" title="Open CTTP Certification" class="level-1 block text-blue font-bold"> Open CTTP Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/open-fair" title="Open FAIR™ Certification" class="level-1 block text-blue font-bold"> Open FAIR™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/open-trusted-technology" title="Open Trusted Technology Provider™ Certification" class="level-1 block text-blue font-bold"> Open Trusted Technology Provider™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/practice-tests" title="Practice Tests" class="level-1 block text-blue font-bold"> Practice Tests </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/professional-certification" title="Professional Certification" class="level-1 block text-blue font-bold"> Professional Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/togaf" title="TOGAF® Certification" class="level-1 block text-blue font-bold"> TOGAF® Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/the-open-brand" title="The Open Brand Certification" class="level-1 block text-blue font-bold"> The Open Brand Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/unix" title="UNIX® Certification" class="level-1 block text-blue font-bold"> UNIX® Certification </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/guides" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Guides" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Guides </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/guides/agile-architecture-guides" title="Agile Architecture Guides" class="level-1 block text-blue font-bold"> Agile Architecture Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/archimate" title="ArchiMate® Guides" class="level-1 block text-blue font-bold"> ArchiMate® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/architecture" title="Architecture Guides" class="level-1 block text-blue font-bold"> Architecture Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/business-architecture" title="Business Architecture Guides" class="level-1 block text-blue font-bold"> Business Architecture Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/cloud-computing" title="Cloud Computing Guides" class="level-1 block text-blue font-bold"> Cloud Computing Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/digital-transformation" title="Digital Transformation Guides" class="level-1 block text-blue font-bold"> Digital Transformation Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/direcnet" title="DirecNet® Guides" class="level-1 block text-blue font-bold"> DirecNet® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/electronic-messaging" title="Electronic Messaging Guides" class="level-1 block text-blue font-bold"> Electronic Messaging Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/face" title="FACE® Guides" class="level-1 block text-blue font-bold"> FACE® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/healthcare-guides" title="Healthcare Guides" class="level-1 block text-blue font-bold"> Healthcare Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/identity-management" title="Identity Management Guides" class="level-1 block text-blue font-bold"> Identity Management Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/it4it" title="IT4IT™ Guides" class="level-1 block text-blue font-bold"> IT4IT™ Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/openca" title="Open Professions Guides" class="level-1 block text-blue font-bold"> Open Professions Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/open-fair" title="Open FAIR&trade; Guides" class="level-1 block text-blue font-bold"> Open FAIR™ Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/open-platform-3" title="Open Platform 3.0&trade; Guides" class="level-1 block text-blue font-bold"> Open Platform 3.0™ Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/open-process-automation" title="Open Process Automation&trade; Guides" class="level-1 block text-blue font-bold"> Open Process Automation™ Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/osdu-guides" title="OSDU® Guides" class="level-1 block text-blue font-bold"> OSDU® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/security" title="Security Guides" class="level-1 block text-blue font-bold"> Security Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/soa" title="SOA Guides" class="level-1 block text-blue font-bold"> SOA Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/sosa" title="SOSA™ Guides" class="level-1 block text-blue font-bold"> SOSA™ Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/standards-process" title="Standards Process Guides" class="level-1 block text-blue font-bold"> Standards Process Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/togaf" title="TOGAF® Guides" class="level-1 block text-blue font-bold"> TOGAF® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/trusted-technology" title="Trusted Technology Guides" class="level-1 block text-blue font-bold"> Trusted Technology Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/unix" title="UNIX® Guides" class="level-1 block text-blue font-bold"> UNIX® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/commercial-aviation-guides" title="Commercial Aviation Guides" class="level-1 block text-blue font-bold"> Commercial Aviation Guides </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/data-sheets" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Data Sheets" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Data Sheets </span> </a> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/webinars" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Webinars" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Webinars </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/archimate" title="ArchiMate® Webinars" class="level-1 block text-blue font-bold"> ArchiMate® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/toolkit" title="Architect's Toolkit (broadcast episodes)" class="level-1 block text-blue font-bold"> Architect's Toolkit (broadcast episodes) </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/architecture" title="Architecture Webinars" class="level-1 block text-blue font-bold"> Architecture Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/business-architecture-webinars" title="Business Architecture Webinars" class="level-1 block text-blue font-bold"> Business Architecture Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/certification-program" title="Certification Program Webinars" class="level-1 block text-blue font-bold"> Certification Program Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/cloud-computing" title="Cloud Computing Webinars" class="level-1 block text-blue font-bold"> Cloud Computing Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/digital-business" title="Digital Business Webinars" class="level-1 block text-blue font-bold"> Digital Business Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/face" title="FACE® Webinars" class="level-1 block text-blue font-bold"> FACE® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/iot" title="IoT Webinars" class="level-1 block text-blue font-bold"> IoT Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/it4it" title="IT4IT™ Webinars" class="level-1 block text-blue font-bold"> IT4IT™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/learning-pathways-series" title="Learning Pathways Webinar Series" class="level-1 block text-blue font-bold"> Learning Pathways Webinar Series </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-cits" title="Open CITS Webinars" class="level-1 block text-blue font-bold"> Open CITS Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-footprint-webinars" title="Open Footprint® Webinars" class="level-1 block text-blue font-bold"> Open Footprint® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-platform-3-0" title="Open Platform 3.0™ Webinars" class="level-1 block text-blue font-bold"> Open Platform 3.0™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-fair" title="Open FAIR™ Webinars" class="level-1 block text-blue font-bold"> Open FAIR™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-process-automation" title="Open Process Automation™ Webinars" class="level-1 block text-blue font-bold"> Open Process Automation™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/osdu-trade-webinars" title="OSDU® Webinars" class="level-1 block text-blue font-bold"> OSDU® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/security" title="Security Webinars" class="level-1 block text-blue font-bold"> Security Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/soa" title="SOA Webinars" class="level-1 block text-blue font-bold"> SOA Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/sosa" title="SOSA™ Webinars" class="level-1 block text-blue font-bold"> SOSA™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/togaf" title="TOGAF® Webinars" class="level-1 block text-blue font-bold"> TOGAF® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/trusted-technology" title="Trusted Technology Webinars" class="level-1 block text-blue font-bold"> Trusted Technology Webinars </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/white-papers" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="White Papers" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> White Papers </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/archimate" title="ArchiMate® White Papers" class="level-1 block text-blue font-bold"> ArchiMate® White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/architecture" title="Architecture White Papers" class="level-1 block text-blue font-bold"> Architecture White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/boundaryless-information-flow" title="Boundaryless Information Flow™ White Papers" class="level-1 block text-blue font-bold"> Boundaryless Information Flow™ White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/certification-programs" title="Certification White Papers" class="level-1 block text-blue font-bold"> Certification White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/cloud-computing" title="Cloud Computing White Papers" class="level-1 block text-blue font-bold"> Cloud Computing White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/commercial-aviation" title="Commercial Aviation White Papers" class="level-1 block text-blue font-bold"> Commercial Aviation White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/digital-business" title="Digital Business White Papers" class="level-1 block text-blue font-bold"> Digital Business White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/directory" title="Directory White Papers" class="level-1 block text-blue font-bold"> Directory White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/healthcare" title="Healthcare White Papers" class="level-1 block text-blue font-bold"> Healthcare White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/iot" title="IoT White Papers" class="level-1 block text-blue font-bold"> IoT White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/it4it" title="IT4IT™ White Papers" class="level-1 block text-blue font-bold"> IT4IT™ White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/lifecycle-management" title="Lifecycle Management White Papers" class="level-1 block text-blue font-bold"> Lifecycle Management White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/network-computing" title="Network Computing White Papers" class="level-1 block text-blue font-bold"> Network Computing White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/open-platform-3" title="Open Platform 3.0™ White Papers" class="level-1 block text-blue font-bold"> Open Platform 3.0™ White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/open-process-automation" title="Open Process Automation™ White Papers" class="level-1 block text-blue font-bold"> Open Process Automation™ White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/security" title="Security White Papers" class="level-1 block text-blue font-bold"> Security White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/soa" title="SOA White Papers" class="level-1 block text-blue font-bold"> SOA White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/togaf" title="TOGAF® White Papers" class="level-1 block text-blue font-bold"> TOGAF® White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/trusted-technology" title="Trusted Technology White Papers" class="level-1 block text-blue font-bold"> Trusted Technology White Papers </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/more-categories" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="More..." class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> More... </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/agile" title="Agile" class="level-1 block text-blue font-bold"> Agile </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/archimate-models" title="ArchiMate® Models" class="level-1 block text-blue font-bold"> ArchiMate® Models </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/archimate-stencils" title="ArchiMate® Stencils" class="level-1 block text-blue font-bold"> ArchiMate® Stencils </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/blogs" title="Blogs" class="level-1 block text-blue font-bold"> Blogs </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/business-scenarios" title="Business Scenarios" class="level-1 block text-blue font-bold"> Business Scenarios </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/case-studies" title="Case Studies" class="level-1 block text-blue font-bold"> Case Studies </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/cde-motif" title="CDE/Motif Documentation" class="level-1 block text-blue font-bold"> CDE/Motif Documentation </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/com-dcom" title="COM/DCOM" class="level-1 block text-blue font-bold"> COM/DCOM </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/consortium" title="Consortium Specifications" class="level-1 block text-blue font-bold"> Consortium Specifications </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/dce" title="DCE Documentation" class="level-1 block text-blue font-bold"> DCE Documentation </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/hardcopy-publications" title="Hardcopy Publications" class="level-1 block text-blue font-bold"> Hardcopy Publications </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/open-subsurface-data-universetm" title="Open Subsurface Data Universe™ Forum" class="level-1 block text-blue font-bold"> Open Subsurface Data Universe™ Forum </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/podcasts" title="Podcasts" class="level-1 block text-blue font-bold"> Podcasts </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/reports" title="Reports" class="level-1 block text-blue font-bold"> Reports </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/reference-cards" title="Reference Cards" class="level-1 block text-blue font-bold"> Reference Cards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/rfps" title="RFPs" class="level-1 block text-blue font-bold"> RFPs </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/software-downloads" title="Software Downloads" class="level-1 block text-blue font-bold"> Software Downloads </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/og-press" title="The Open Group Press" class="level-1 block text-blue font-bold"> The Open Group Press </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/training-materials" title="Training Materials" class="level-1 block text-blue font-bold"> Training Materials </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/templates" title="Templates" class="level-1 block text-blue font-bold"> Templates </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/videos" title="Videos" class="level-1 block text-blue font-bold"> Videos </a> </li> </ul> </div> </div> </div> </div> </nav> </div> </div> <script> 'use strict'; const initMenuDesktop_6743865bf3696 = () => { return { hoverTopPosition: '100%', } } </script> <!--Cart Drawer--> <script> function initCartDrawer() { return { open: false, isLoading: false, cart: {}, maxItemsToDisplay: 10, itemsCount: 0, totalCartAmount: 0, getData(data) { if (data.cart) { this.cart = data.cart; this.itemsCount = data.cart.items && data.cart.items.length || 0; this.totalCartAmount = this.cart.summary_count; this.setCartItems(); } this.isLoading = false; }, cartItems: [], getItemCountTitle() { return hyva.strf('\u00250\u0020of\u0020\u00251\u0020products\u0020in\u0020cart\u0020displayed', this.maxItemsToDisplay, this.totalCartAmount) }, setCartItems() { this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; if (this.maxItemsToDisplay > 0) { this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); } }, deleteItemFromCart(itemId) { this.isLoading = true; const formKey = hyva.getFormKey(); const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key=" + formKey + "&item_id=" + itemId, "method": "POST", "mode": "cors", "credentials": "include" }).then(response => { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { window.dispatchMessages && window.dispatchMessages([{ type: 'warning', text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' }]); this.isLoading = false; } }).then(result => { window.dispatchMessages && window.dispatchMessages([{ type: result.success ? 'success' : 'error', text: result.success ? 'You\u0020removed\u0020the\u0020item.' : result.error_message }], result.success ? 5000 : 0) window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }); }, toggleCartDrawer(event) { if (event.detail && event.detail.isOpen !== undefined) { if (event.detail.isOpen) { this.openCartDrawer() } else { this.open = false this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) } } else { this.openCartDrawer() } }, openCartDrawer() { this.open = true; this.$nextTick(() => { this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent) }) }, closeCartDrawer() { this.$dispatch('toggle-cart', { isOpen: false }) } } } </script> <section x-cloak x-show="cart" id="cart-drawer" x-data="initCartDrawer()" @private-content-loaded.window="getData($event.detail.data)" @toggle-cart.window="toggleCartDrawer($event)" @keydown.window.escape="closeCartDrawer" > <div role="dialog" aria-labelledby="cart-drawer-title" aria-modal="true" :aria-hidden="!open" class="fixed inset-y-0 right-0 z-30 flex max-w-full"> <div class="backdrop" x-show="open" x-transition:enter="ease-in-out duration-500" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in-out duration-500" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" role="button" @click="closeCartDrawer" aria-label="Close minicart"></div> <div class="relative w-screen max-w-md shadow-2xl" x-show="open" x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" x-transition:enter-start="translate-x-full" x-transition:enter-end="translate-x-0" x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" x-transition:leave-start="translate-x-0" x-transition:leave-end="translate-x-full" x-ref="cartDialogContent" role="region" :tabindex="open ? 0 : -1" aria-label="My Cart" > <div class="flex flex-col h-full py-6 bg-gray-lightest shadow-xl"> <header class="px-4 sm:px-6"> <h2 id="cart-drawer-title" class="uppercase text-xl leading-7"> <span x-html="itemsCount"></span> <span x-text="itemsCount === 1 ? 'Item in' : 'Items in'"></span> Your Cart <span class="items-total text-xs" x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" x-text="getItemCountTitle()"> </span> </h2> </header> <template x-if="!itemsCount"> <div class="relative px-4 py-6 sm:px-6"> Cart is empty </div> </template> <template x-if="itemsCount"> <div> <div class="relative grid gap-8 px-4 pb-8 sm:px-6"> <div class="w-full font-bold text-blue"> <p>Cart Subtotal: <span x-html="cart.subtotal"></span></p> </div> <div class="w-full gap-4"> <div> <a href="https://publications.opengroup.org/checkout/cart/" class="inline-flex btn btn-primary w-full hover:text-black" > View Cart </a> </div> </div> </div> </div> </template> <template x-if="itemsCount"> <div class="relative grid gap-6 px-4 pb-6 overflow-y-auto overscroll-y-contain sm:gap-8 sm:px-6" > <template x-for="item in cartItems"> <div class="flex items-center card shadow-md p-0"> <div class="p-2 w-2/6"> <a :href="item.product_url" :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)" > <img :src="item.product_image.src" :width="item.product_image.width" :height="item.product_image.height" loading="lazy" alt="" class="w-full" /> </a> </div> <div class="w-4/6 space-y-2 p-4 bg-white"> <div class="flex flex-col gap-2"> <a :href="item.product_url" :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)" > <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> </a> </div> <template x-for="option in item.options"> <div x-data="{ open: false }" > <button class="flex items-center gap-1" x-on:click="open = ! open" > <span>Show Details</span> <span :class="open ? 'hidden' : ''"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-4 w-4 [&>*]:stroke-[3px]" width="20" height="20" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> </svg> </span> <span :class="open ? '' : 'hidden'"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-4 w-4 [&>*]:stroke-[3px]" width="20" height="20" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> </svg> </span> </button> <div class="pt-2" x-show="open" > <p class="font-semibold" x-text="option.label + ':'"></p> <p x-html="option.value"></p> </div> </div> </template> <div class="flex justify-between items-center"> <p><span x-html="item.product_price"></span></p> <div> <button type="button" class="inline-flex hover:text-primary" @click="deleteItemFromCart(item.item_id)" :aria-label="hyva.strf('Remove\u0020product\u0020\u0022\u00250\u0022\u0020from\u0020cart', item.product_name)" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6" width="20" height="20" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/> </svg> </button> </div> </div> </div> </div> </template> </div> </template> </div> <button type="button" @click="closeCartDrawer" aria-label="Close minicart" class="absolute top-0 right-0 p-4 mt-2 text-blye transition-colors hover:text-primary" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> </svg> </button> </div> <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-cloak x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"> <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> <g fill="none" fill-rule="evenodd"> <g transform="translate(1 1)" stroke-width="2"> <circle cx="5" cy="50" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> </circle> <circle cx="27" cy="5" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> </circle> <circle cx="49" cy="50" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> </circle> </g> </g> <title>loader</title></svg> <div class="ml-10 text-primary text-xl"> Loading... </div> </div> </div> </section> <!--Authentication Pop-Up--> <script> function initAuthentication() { return { open: false, forceAuthentication: false, checkoutUrl: 'https://publications.opengroup.org/checkout/index/', errors: 0, hasCaptchaToken: 0, displayErrorMessage: false, errorMessages: [], setErrorMessages: function setErrorMessages(messages) { this.errorMessages = [messages]; this.displayErrorMessage = this.errorMessages.length; }, submitForm: function () { // Do not rename $form, the variable is expected to be declared in the recaptcha output const $form = document.querySelector('#login-form'); if (this.errors === 0) { this.dispatchLoginRequest($form); } }, onPrivateContentLoaded: function (data) { const isLoggedIn = data.customer && data.customer.firstname; if (data.cart && !isLoggedIn) { this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; } }, redirectIfAuthenticated: function (event) { if (event.detail && event.detail.url) { this.checkoutUrl = event.detail.url; } if (!this.forceAuthentication) { window.location.href = this.checkoutUrl; } }, dispatchLoginRequest: function(form) { this.isLoading = true; const username = this.$refs['customer-email'].value; const password = this.$refs['customer-password'].value; const formKey = hyva.getFormKey(); const bodyFields = { 'username': username, 'password': password, 'formKey': formKey }; const fieldName = 'g\u002Drecaptcha\u002Dresponse'; const recaptchaField = fieldName && form[fieldName]; if (recaptchaField) { bodyFields[fieldName] = recaptchaField.value; } fetch('https://publications.opengroup.org/customer/ajax/login/', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(bodyFields) } ).then(response => { return response.json() } ).then(data=> { this.isLoading = false; if (data.errors) { dispatchMessages([{ type: 'error', text: data.message }], 5000); this.errors = 1; this.hasCaptchaToken = 0; } else { window.location.href = this.checkoutUrl; } }); } } } </script> <section id="authentication-popup" x-data="initAuthentication()" @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" @keydown.window.escape="open = false" > <div role="dialog" aria-modal="true" @click.outside="open = false" class="inset-y-0 right-0 z-30 flex max-w-full" :class="{'fixed': open }" x-cloak x-show="open" > <div class="relative w-screen max-w-md pt-16 bg-container-lighter" x-show="open" x-cloak="" x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" x-transition:enter-start="translate-x-full" x-transition:enter-end="translate-x-0" x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" x-transition:leave-start="translate-x-0" x-transition:leave-end="translate-x-full" > <div x-show="open" x-cloak="" x-transition:enter="ease-in-out duration-500" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in-out duration-500" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2"> <button @click="open = false;" aria-label="Close panel" class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> <title>x</title></svg> </button> </div> <div class="flex flex-col h-full space-y-6 bg-white shadow-xl overflow-y-auto"> <div class="block-customer-login mx-4 px-4 pt-0"> <p id="authenticate-customer-login" class="h2 mb-6"> <strong class="font-semibold">Checkout using your account</strong> </p> </p> <form class="form form-login" method="post" @submit.prevent="submitForm();" id="login-form" > <div class="fieldset login"> <div class="field email required"> <label class="label" for="form-login-username" form="login-form" > <span>Email Address</span> </label> <div class="control"> <input name="username" id="form-login-username" x-ref="customer-email" @change="errors = 0" type="email" required class="form-input input-text w-full" > </div> </div> <div class="field password required"> <label for="form-login-password" class="label" form="login-form"> <span>Password</span> </label> <div class="control"> <input name="password" id="form-login-password" type="password" class="form-input input-text w-full" required x-ref="customer-password" @change="errors = 0" > </div> </div> <input name="context" type="hidden" value="checkout" /> <div class="flex flex-col pt-6 pb-6"> <a href="https://publications.opengroup.org/customer/account/forgotpassword/" class="pb-6 font-semibold" > Forgot Your Password? </a> <button type="submit" class="inline-flex btn btn-primary w-full disabled:opacity-75" > Sign In </button> </div> </div> </form> </div> <div class="mx-4"> </div> <div class="block-new-customer mx-4 px-4"> <p id="authenticate-new-customer" class="h2 mb-2"> <strong class="font-semibold">Checkout as a new customer</strong> </p> <div class="block-content"> <p class="mb-1"> Creating an account has many benefits: </p> <ul class="list-disc pl-5"> <li> See order and shipping status</li> <li> Track order history</li> <li> Check out faster</li> </ul> <div class="flex justify-between mt-6 mb-2 items-center"> <a href="https://publications.opengroup.org/customer/account/create/" class="inline-flex btn btn-dark w-full"> Create an Account </a> </div> </div> </div> </div> </div> </div> </section> </div> </header><div class="top-container"><nav class="breadcrumbs text-gray" aria-label="Breadcrumb"> <div class="container"> <ol x-data="initBreadcrumbsProduct()" class="items list-reset py-4 rounded flex flex-wrap text-grey text-sm gap-y-4 md:gap-0 md:py-7"> <li>​</li> <template x-for="(item, index) in breadcrumbs" :key="index"> <li class="item flex"> <template x-if="item.name === 'product'"> <span class="text-primary-lighter" x-text="item.label"></span> </template> <template x-if="item.name !== 'product'"> <a :href="item.link" class="underline" x-text="item.label"></a> </template> <template x-if="item.name === 'home'"> <span aria-hidden="true" class="separator flex items-center text-gray px-2"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4 text-primary" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5"/> <title>chevron-double-right</title></svg> </span> </template> <template x-if="index !== breadcrumbs.length - 1"> <template x-if="item.name !== 'home'"> <span aria-hidden="true" class="separator flex items-center text-gray px-2"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4 text-primary" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5"/> <title>chevron-double-right</title></svg> </span> </template> </template> </li> </template> </ol> </div> </nav> <script> function initBreadcrumbsProduct() { const categories = {"c26":{"url":"https:\/\/publications.opengroup.org\/standards","name":"Standards","path":"1\/25\/26"},"c534":{"url":"https:\/\/publications.opengroup.org\/standards\/agile-standards","name":"Agile Standards","path":"1\/25\/26\/534"},"c55":{"url":"https:\/\/publications.opengroup.org\/standards\/archimate","name":"ArchiMate\u00ae Standards","path":"1\/25\/26\/55"},"c139":{"url":"https:\/\/publications.opengroup.org\/standards\/business-architecture","name":"Business Architecture Standards","path":"1\/25\/26\/139"},"c71":{"url":"https:\/\/publications.opengroup.org\/standards\/cloud-computing","name":"Cloud Computing Standards","path":"1\/25\/26\/71"},"c583":{"url":"https:\/\/publications.opengroup.org\/standards\/commercial-aviation-standards","name":"Commercial Aviation Standards","path":"1\/25\/26\/583"},"c177":{"url":"https:\/\/publications.opengroup.org\/standards\/data-mgmt","name":"Data Management Standards","path":"1\/25\/26\/177"},"c319":{"url":"https:\/\/publications.opengroup.org\/standards\/digital-business-standards","name":"Digital Business Standards","path":"1\/25\/26\/319"},"c189":{"url":"https:\/\/publications.opengroup.org\/standards\/dist-computing","name":"Distributed Computing Standards","path":"1\/25\/26\/189"},"c80":{"url":"https:\/\/publications.opengroup.org\/standards\/emmm","name":"EMMM\u2122 Standards","path":"1\/25\/26\/80"},"c590":{"url":"https:\/\/publications.opengroup.org\/standards\/energistics-standards","name":"Energistics Standards","path":"1\/25\/26\/590"},"c314":{"url":"https:\/\/publications.opengroup.org\/standards\/enterprise-architecture","name":"Enterprise Architecture Standards","path":"1\/25\/26\/314"},"c171":{"url":"https:\/\/publications.opengroup.org\/standards\/enterprise-mgmt","name":"Enterprise Management Standards","path":"1\/25\/26\/171"},"c68":{"url":"https:\/\/publications.opengroup.org\/standards\/face","name":"FACE\u00ae Standards","path":"1\/25\/26\/68"},"c312":{"url":"https:\/\/publications.opengroup.org\/standards\/healthcare","name":"Healthcare Standards","path":"1\/25\/26\/312"},"c187":{"url":"https:\/\/publications.opengroup.org\/standards\/interworking","name":"Interworking Standards","path":"1\/25\/26\/187"},"c57":{"url":"https:\/\/publications.opengroup.org\/standards\/it4it","name":"IT4IT\u2122 Standards","path":"1\/25\/26\/57"},"c372":{"url":"https:\/\/publications.opengroup.org\/standards\/open-fair-standards","name":"Open FAIR\u2122 Standards","path":"1\/25\/26\/372"},"c97":{"url":"https:\/\/publications.opengroup.org\/standards\/op30","name":"Open Platform 3.0\u2122 Standards","path":"1\/25\/26\/97"},"c334":{"url":"https:\/\/publications.opengroup.org\/standards\/opa","name":"Open Process Automation\u2122 Standards","path":"1\/25\/26\/334"},"c31":{"url":"https:\/\/publications.opengroup.org\/standards\/preliminary-standards","name":"Preliminary Standards","path":"1\/25\/26\/31"},"c169":{"url":"https:\/\/publications.opengroup.org\/standards\/realtime","name":"Real-time & Embedded Systems Standards","path":"1\/25\/26\/169"},"c62":{"url":"https:\/\/publications.opengroup.org\/standards\/security","name":"Security Standards","path":"1\/25\/26\/62"},"c172":{"url":"https:\/\/publications.opengroup.org\/standards\/semantic-interop","name":"Semantic Interoperability Standards","path":"1\/25\/26\/172"},"c30":{"url":"https:\/\/publications.opengroup.org\/standards\/snapshots","name":"Snapshots","path":"1\/25\/26\/30"},"c59":{"url":"https:\/\/publications.opengroup.org\/standards\/soa","name":"SOA Standards","path":"1\/25\/26\/59"},"c297":{"url":"https:\/\/publications.opengroup.org\/standards\/sosa","name":"SOSA\u2122 Standards","path":"1\/25\/26\/297"},"c143":{"url":"https:\/\/publications.opengroup.org\/standards\/corrigenda","name":"Technical Corrigenda","path":"1\/25\/26\/143"},"c56":{"url":"https:\/\/publications.opengroup.org\/standards\/togaf","name":"TOGAF\u00ae Standards","path":"1\/25\/26\/56"},"c170":{"url":"https:\/\/publications.opengroup.org\/standards\/trusted-technology","name":"Trusted Technology Standards","path":"1\/25\/26\/170"},"c60":{"url":"https:\/\/publications.opengroup.org\/standards\/unix","name":"UNIX\u00ae Standards","path":"1\/25\/26\/60"},"c33":{"url":"https:\/\/publications.opengroup.org\/certifications","name":"Certifications","path":"1\/25\/33"},"c99":{"url":"https:\/\/publications.opengroup.org\/certifications\/archimate","name":"ArchiMate\u00ae Certification","path":"1\/25\/33\/99"},"c325":{"url":"https:\/\/publications.opengroup.org\/certifications\/certification-for-people","name":"Certification for People","path":"1\/25\/33\/325"},"c343":{"url":"https:\/\/publications.opengroup.org\/certifications\/dpbok","name":"DPBoK\u2122 Certification","path":"1\/25\/33\/343"},"c106":{"url":"https:\/\/publications.opengroup.org\/certifications\/face","name":"FACE\u00ae Training & Certification","path":"1\/25\/33\/106"},"c101":{"url":"https:\/\/publications.opengroup.org\/certifications\/it4it","name":"IT4IT\u2122 Certification","path":"1\/25\/33\/101"},"c540":{"url":"https:\/\/publications.opengroup.org\/certifications\/o-aa-trade-certification","name":"O-AA\u2122 Certification","path":"1\/25\/33\/540"},"c351":{"url":"https:\/\/publications.opengroup.org\/certifications\/opas-cert","name":"O-PAS\u2122 Certification","path":"1\/25\/33\/351"},"c102":{"url":"https:\/\/publications.opengroup.org\/certifications\/open-ca","name":"Open CA Certification","path":"1\/25\/33\/102"},"c333":{"url":"https:\/\/publications.opengroup.org\/certifications\/open-cds","name":"Open CDS Certification","path":"1\/25\/33\/333"},"c318":{"url":"https:\/\/publications.opengroup.org\/certifications\/opencitm","name":"Open CITM Certification","path":"1\/25\/33\/318"},"c146":{"url":"https:\/\/publications.opengroup.org\/certifications\/opencts","name":"Open CTS Certification","path":"1\/25\/33\/146"},"c344":{"url":"https:\/\/publications.opengroup.org\/certifications\/octtp","name":"Open CTTP Certification","path":"1\/25\/33\/344"},"c108":{"url":"https:\/\/publications.opengroup.org\/certifications\/open-fair","name":"Open FAIR\u2122 Certification","path":"1\/25\/33\/108"},"c100":{"url":"https:\/\/publications.opengroup.org\/certifications\/open-trusted-technology","name":"Open Trusted Technology Provider\u2122 Certification","path":"1\/25\/33\/100"},"c350":{"url":"https:\/\/publications.opengroup.org\/certifications\/practice-tests","name":"Practice Tests","path":"1\/25\/33\/350"},"c324":{"url":"https:\/\/publications.opengroup.org\/certifications\/professional-certification","name":"Professional Certification","path":"1\/25\/33\/324"},"c107":{"url":"https:\/\/publications.opengroup.org\/certifications\/togaf","name":"TOGAF\u00ae Certification","path":"1\/25\/33\/107"},"c268":{"url":"https:\/\/publications.opengroup.org\/certifications\/the-open-brand","name":"The Open Brand Certification","path":"1\/25\/33\/268"},"c34":{"url":"https:\/\/publications.opengroup.org\/certifications\/unix","name":"UNIX\u00ae Certification","path":"1\/25\/33\/34"},"c37":{"url":"https:\/\/publications.opengroup.org\/guides","name":"Guides","path":"1\/25\/37"},"c504":{"url":"https:\/\/publications.opengroup.org\/guides\/agile-architecture-guides","name":"Agile Architecture Guides","path":"1\/25\/37\/504"},"c38":{"url":"https:\/\/publications.opengroup.org\/guides\/archimate","name":"ArchiMate\u00ae Guides","path":"1\/25\/37\/38"},"c39":{"url":"https:\/\/publications.opengroup.org\/guides\/architecture","name":"Architecture Guides","path":"1\/25\/37\/39"},"c327":{"url":"https:\/\/publications.opengroup.org\/guides\/business-architecture","name":"Business Architecture Guides","path":"1\/25\/37\/327"},"c41":{"url":"https:\/\/publications.opengroup.org\/guides\/cloud-computing","name":"Cloud Computing Guides","path":"1\/25\/37\/41"},"c342":{"url":"https:\/\/publications.opengroup.org\/guides\/digital-transformation","name":"Digital Transformation Guides","path":"1\/25\/37\/342"},"c149":{"url":"https:\/\/publications.opengroup.org\/guides\/direcnet","name":"DirecNet\u00ae Guides","path":"1\/25\/37\/149"},"c199":{"url":"https:\/\/publications.opengroup.org\/guides\/electronic-messaging","name":"Electronic Messaging Guides","path":"1\/25\/37\/199"},"c74":{"url":"https:\/\/publications.opengroup.org\/guides\/face","name":"FACE\u00ae Guides","path":"1\/25\/37\/74"},"c499":{"url":"https:\/\/publications.opengroup.org\/guides\/healthcare-guides","name":"Healthcare Guides","path":"1\/25\/37\/499"},"c153":{"url":"https:\/\/publications.opengroup.org\/guides\/identity-management","name":"Identity Management Guides","path":"1\/25\/37\/153"},"c185":{"url":"https:\/\/publications.opengroup.org\/guides\/it4it","name":"IT4IT\u2122 Guides","path":"1\/25\/37\/185"},"c150":{"url":"https:\/\/publications.opengroup.org\/guides\/openca","name":"Open Professions Guides","path":"1\/25\/37\/150"},"c186":{"url":"https:\/\/publications.opengroup.org\/guides\/open-fair","name":"Open FAIR™ Guides","path":"1\/25\/37\/186"},"c313":{"url":"https:\/\/publications.opengroup.org\/guides\/open-platform-3","name":"Open Platform 3.0™ Guides","path":"1\/25\/37\/313"},"c294":{"url":"https:\/\/publications.opengroup.org\/guides\/open-process-automation","name":"Open Process Automation™ Guides","path":"1\/25\/37\/294"},"c501":{"url":"https:\/\/publications.opengroup.org\/guides\/osdu-guides","name":"OSDU\u00ae Guides","path":"1\/25\/37\/501"},"c63":{"url":"https:\/\/publications.opengroup.org\/guides\/security","name":"Security Guides","path":"1\/25\/37\/63"},"c69":{"url":"https:\/\/publications.opengroup.org\/guides\/soa","name":"SOA Guides","path":"1\/25\/37\/69"},"c289":{"url":"https:\/\/publications.opengroup.org\/guides\/sosa","name":"SOSA\u2122 Guides","path":"1\/25\/37\/289"},"c133":{"url":"https:\/\/publications.opengroup.org\/guides\/standards-process","name":"Standards Process Guides","path":"1\/25\/37\/133"},"c147":{"url":"https:\/\/publications.opengroup.org\/guides\/togaf","name":"TOGAF\u00ae Guides","path":"1\/25\/37\/147"},"c148":{"url":"https:\/\/publications.opengroup.org\/guides\/trusted-technology","name":"Trusted Technology Guides","path":"1\/25\/37\/148"},"c152":{"url":"https:\/\/publications.opengroup.org\/guides\/unix","name":"UNIX\u00ae Guides","path":"1\/25\/37\/152"},"c580":{"url":"https:\/\/publications.opengroup.org\/guides\/commercial-aviation-guides","name":"Commercial Aviation Guides","path":"1\/25\/37\/580"},"c43":{"url":"https:\/\/publications.opengroup.org\/data-sheets","name":"Data Sheets","path":"1\/25\/43"},"c44":{"url":"https:\/\/publications.opengroup.org\/webinars","name":"Webinars","path":"1\/25\/44"},"c126":{"url":"https:\/\/publications.opengroup.org\/webinars\/archimate","name":"ArchiMate\u00ae Webinars","path":"1\/25\/44\/126"},"c545":{"url":"https:\/\/publications.opengroup.org\/webinars\/toolkit","name":"Architect's Toolkit (broadcast episodes)","path":"1\/25\/44\/545"},"c128":{"url":"https:\/\/publications.opengroup.org\/webinars\/architecture","name":"Architecture Webinars","path":"1\/25\/44\/128"},"c336":{"url":"https:\/\/publications.opengroup.org\/webinars\/business-architecture-webinars","name":"Business Architecture Webinars","path":"1\/25\/44\/336"},"c134":{"url":"https:\/\/publications.opengroup.org\/webinars\/certification-program","name":"Certification Program Webinars","path":"1\/25\/44\/134"},"c176":{"url":"https:\/\/publications.opengroup.org\/webinars\/cloud-computing","name":"Cloud Computing Webinars","path":"1\/25\/44\/176"},"c127":{"url":"https:\/\/publications.opengroup.org\/webinars\/digital-business","name":"Digital Business Webinars","path":"1\/25\/44\/127"},"c129":{"url":"https:\/\/publications.opengroup.org\/webinars\/face","name":"FACE\u00ae Webinars","path":"1\/25\/44\/129"},"c136":{"url":"https:\/\/publications.opengroup.org\/webinars\/iot","name":"IoT Webinars","path":"1\/25\/44\/136"},"c124":{"url":"https:\/\/publications.opengroup.org\/webinars\/it4it","name":"IT4IT\u2122 Webinars","path":"1\/25\/44\/124"},"c627":{"url":"https:\/\/publications.opengroup.org\/webinars\/learning-pathways-series","name":"Learning Pathways Webinar Series","path":"1\/25\/44\/627"},"c175":{"url":"https:\/\/publications.opengroup.org\/webinars\/open-cits","name":"Open CITS Webinars","path":"1\/25\/44\/175"},"c382":{"url":"https:\/\/publications.opengroup.org\/webinars\/open-footprint-webinars","name":"Open Footprint\u00ae Webinars","path":"1\/25\/44\/382"},"c135":{"url":"https:\/\/publications.opengroup.org\/webinars\/open-platform-3-0","name":"Open Platform 3.0\u2122 Webinars","path":"1\/25\/44\/135"},"c132":{"url":"https:\/\/publications.opengroup.org\/webinars\/open-fair","name":"Open FAIR\u2122 Webinars","path":"1\/25\/44\/132"},"c131":{"url":"https:\/\/publications.opengroup.org\/webinars\/open-process-automation","name":"Open Process Automation\u2122 Webinars","path":"1\/25\/44\/131"},"c532":{"url":"https:\/\/publications.opengroup.org\/webinars\/osdu-trade-webinars","name":"OSDU\u00ae Webinars","path":"1\/25\/44\/532"},"c138":{"url":"https:\/\/publications.opengroup.org\/webinars\/security","name":"Security Webinars","path":"1\/25\/44\/138"},"c137":{"url":"https:\/\/publications.opengroup.org\/webinars\/soa","name":"SOA Webinars","path":"1\/25\/44\/137"},"c286":{"url":"https:\/\/publications.opengroup.org\/webinars\/sosa","name":"SOSA\u2122 Webinars","path":"1\/25\/44\/286"},"c125":{"url":"https:\/\/publications.opengroup.org\/webinars\/togaf","name":"TOGAF\u00ae Webinars","path":"1\/25\/44\/125"},"c130":{"url":"https:\/\/publications.opengroup.org\/webinars\/trusted-technology","name":"Trusted Technology Webinars","path":"1\/25\/44\/130"},"c50":{"url":"https:\/\/publications.opengroup.org\/white-papers","name":"White Papers","path":"1\/25\/50"},"c61":{"url":"https:\/\/publications.opengroup.org\/white-papers\/archimate","name":"ArchiMate\u00ae White Papers","path":"1\/25\/50\/61"},"c70":{"url":"https:\/\/publications.opengroup.org\/white-papers\/architecture","name":"Architecture White Papers","path":"1\/25\/50\/70"},"c110":{"url":"https:\/\/publications.opengroup.org\/white-papers\/boundaryless-information-flow","name":"Boundaryless Information Flow\u2122 White Papers","path":"1\/25\/50\/110"},"c98":{"url":"https:\/\/publications.opengroup.org\/white-papers\/certification-programs","name":"Certification White Papers","path":"1\/25\/50\/98"},"c72":{"url":"https:\/\/publications.opengroup.org\/white-papers\/cloud-computing","name":"Cloud Computing White Papers","path":"1\/25\/50\/72"},"c381":{"url":"https:\/\/publications.opengroup.org\/white-papers\/commercial-aviation","name":"Commercial Aviation White Papers","path":"1\/25\/50\/381"},"c65":{"url":"https:\/\/publications.opengroup.org\/white-papers\/digital-business","name":"Digital Business White Papers","path":"1\/25\/50\/65"},"c123":{"url":"https:\/\/publications.opengroup.org\/white-papers\/directory","name":"Directory White Papers","path":"1\/25\/50\/123"},"c81":{"url":"https:\/\/publications.opengroup.org\/white-papers\/healthcare","name":"Healthcare White Papers","path":"1\/25\/50\/81"},"c73":{"url":"https:\/\/publications.opengroup.org\/white-papers\/iot","name":"IoT White Papers","path":"1\/25\/50\/73"},"c58":{"url":"https:\/\/publications.opengroup.org\/white-papers\/it4it","name":"IT4IT\u2122 White Papers","path":"1\/25\/50\/58"},"c121":{"url":"https:\/\/publications.opengroup.org\/white-papers\/lifecycle-management","name":"Lifecycle Management White Papers","path":"1\/25\/50\/121"},"c109":{"url":"https:\/\/publications.opengroup.org\/white-papers\/network-computing","name":"Network Computing White Papers","path":"1\/25\/50\/109"},"c113":{"url":"https:\/\/publications.opengroup.org\/white-papers\/open-platform-3","name":"Open Platform 3.0\u2122 White Papers","path":"1\/25\/50\/113"},"c317":{"url":"https:\/\/publications.opengroup.org\/white-papers\/open-process-automation","name":"Open Process Automation\u2122 White Papers","path":"1\/25\/50\/317"},"c67":{"url":"https:\/\/publications.opengroup.org\/white-papers\/security","name":"Security White Papers","path":"1\/25\/50\/67"},"c66":{"url":"https:\/\/publications.opengroup.org\/white-papers\/soa","name":"SOA White Papers","path":"1\/25\/50\/66"},"c51":{"url":"https:\/\/publications.opengroup.org\/white-papers\/togaf","name":"TOGAF\u00ae White Papers","path":"1\/25\/50\/51"},"c111":{"url":"https:\/\/publications.opengroup.org\/white-papers\/trusted-technology","name":"Trusted Technology White Papers","path":"1\/25\/50\/111"},"c45":{"url":"https:\/\/publications.opengroup.org\/more-categories","name":"More...","path":"1\/25\/45"},"c346":{"url":"https:\/\/publications.opengroup.org\/more-categories\/agile","name":"Agile","path":"1\/25\/45\/346"},"c276":{"url":"https:\/\/publications.opengroup.org\/more-categories\/archimate-models","name":"ArchiMate\u00ae Models","path":"1\/25\/45\/276"},"c141":{"url":"https:\/\/publications.opengroup.org\/more-categories\/archimate-stencils","name":"ArchiMate\u00ae Stencils","path":"1\/25\/45\/141"},"c269":{"url":"https:\/\/publications.opengroup.org\/more-categories\/blogs","name":"Blogs","path":"1\/25\/45\/269"},"c46":{"url":"https:\/\/publications.opengroup.org\/more-categories\/business-scenarios","name":"Business Scenarios","path":"1\/25\/45\/46"},"c47":{"url":"https:\/\/publications.opengroup.org\/more-categories\/case-studies","name":"Case Studies","path":"1\/25\/45\/47"},"c174":{"url":"https:\/\/publications.opengroup.org\/more-categories\/cde-motif","name":"CDE\/Motif Documentation","path":"1\/25\/45\/174"},"c311":{"url":"https:\/\/publications.opengroup.org\/more-categories\/com-dcom","name":"COM\/DCOM","path":"1\/25\/45\/311"},"c188":{"url":"https:\/\/publications.opengroup.org\/more-categories\/consortium","name":"Consortium Specifications","path":"1\/25\/45\/188"},"c173":{"url":"https:\/\/publications.opengroup.org\/more-categories\/dce","name":"DCE Documentation","path":"1\/25\/45\/173"},"c275":{"url":"https:\/\/publications.opengroup.org\/more-categories\/hardcopy-publications","name":"Hardcopy Publications","path":"1\/25\/45\/275"},"c340":{"url":"https:\/\/publications.opengroup.org\/more-categories\/open-subsurface-data-universetm","name":"Open Subsurface Data Universe\u2122 Forum","path":"1\/25\/45\/340"},"c277":{"url":"https:\/\/publications.opengroup.org\/more-categories\/podcasts","name":"Podcasts","path":"1\/25\/45\/277"},"c48":{"url":"https:\/\/publications.opengroup.org\/more-categories\/reports","name":"Reports","path":"1\/25\/45\/48"},"c258":{"url":"https:\/\/publications.opengroup.org\/more-categories\/reference-cards","name":"Reference Cards","path":"1\/25\/45\/258"},"c630":{"url":"https:\/\/publications.opengroup.org\/more-categories\/rfps","name":"RFPs","path":"1\/25\/45\/630"},"c190":{"url":"https:\/\/publications.opengroup.org\/more-categories\/software-downloads","name":"Software Downloads","path":"1\/25\/45\/190"},"c296":{"url":"https:\/\/publications.opengroup.org\/more-categories\/og-press","name":"The Open Group Press","path":"1\/25\/45\/296"},"c35":{"url":"https:\/\/publications.opengroup.org\/more-categories\/training-materials","name":"Training Materials","path":"1\/25\/45\/35"},"c140":{"url":"https:\/\/publications.opengroup.org\/more-categories\/templates","name":"Templates","path":"1\/25\/45\/140"},"c261":{"url":"https:\/\/publications.opengroup.org\/more-categories\/videos","name":"Videos","path":"1\/25\/45\/261"}}; const breadcrumbs = [{ name: 'home', label: 'Home', title: 'Go\u0020to\u0020Home\u0020Page', link: BASE_URL || '' }]; function getProductCategoryUrl() { const productUrl = window.location.href.split('?')[0]; return productUrl.substring(0, productUrl.lastIndexOf('/')) + '';; } const categoryUrl = getProductCategoryUrl(); const category = Object.values(categories).find(cat => cat.url === categoryUrl); if (category) { let parts = category.path.split('/'); // remove root category parts.splice(0, 2) for (let i in parts) { breadcrumbs.push({ name: 'category', label: categories['c' + parts[i]]['name'], title: '', link: categories['c' + parts[i]]['url'] }); } } // add current product to breadcrumbs breadcrumbs.push({ name: 'product', label: 'Additional\u0020APIs\u0020for\u0020the\u0020Base\u0020Specifications\u0020Issue\u00208,\u0020Part\u00202', title: '', link: BASE_URL + 'c228' + '' }); function addJsonBreadcrumbsHead(breadcrumbs) { const script = document.createElement('script'); script.type = 'application/ld+json'; const itemListElement = breadcrumbs.map((crumb, i) => { return { "@type": "ListItem", "position": i + 1, "name": crumb.label, "item": crumb.link } }); script.appendChild(document.createTextNode(JSON.stringify({ "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": itemListElement }))); document.head.appendChild(script); } addJsonBreadcrumbsHead(breadcrumbs); return {breadcrumbs}; } </script> </div><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> <div class="page messages"><script> function initMessages() { "use strict"; return { messages: window.mageMessages || [], isEmpty() { return this.messages.reduce( function (isEmpty, message) { return isEmpty && message === undefined }, true ) }, removeMessage(messageIndex) { this.messages[messageIndex] = undefined; }, addMessages(messages, hideAfter) { messages.map((message) => { this.messages = this.messages.concat(message); if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { hideAfter = window.defaultSuccessMessageTimeout; } if (hideAfter) { this.setHideTimeOut(this.messages.length -1, hideAfter); } }); }, setHideTimeOut(messageIndex, hideAfter) { setTimeout((messageIndex) => { this.removeMessage(messageIndex); }, hideAfter, messageIndex); }, eventListeners: { ['@messages-loaded.window'](event) { this.addMessages(event.detail.messages, event.detail.hideAfter) }, ['@private-content-loaded.window'](event) { const data = event.detail.data; if ( data.messages && data.messages.messages && data.messages.messages.length ) { this.addMessages(data.messages.messages); } }, ['@clear-messages.window']() { this.messages = []; } } } } </script> <section id="messages" x-data="initMessages()" x-bind="eventListeners" aria-live="assertive" role="alert" > <template x-if="!isEmpty()"> <div class="w-full"> <div class="messages container mx-auto py-3"> <template x-for="(message, index) in messages" :key="index"> <div> <template x-if="message"> <div class="message" :class="message.type" :ui-id="'message-' + message.type" > <span x-html="message.text"></span> <button type="button" class="text-gray-600 hover:text-black" aria-label="Close message" @click.prevent="removeMessage(index)" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-current" width="18" height="18" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> </svg> </button> </div> </template> </div> </template> </div> </div> </template> </section> </div><div class="columns"><div class="column main"><div class="product-info-main"><section class="my-6"> <div class="flex card border border-container p-8 flex-col items-center lg:flex-row"> <div class="grid grid-rows-auto gap-x-6 grid-cols-1 lg:grid-cols-2 w-full"> <div id="gallery" x-data="initGallery()" x-bind="eventListeners" class="w-full md:h-auto md:row-start-1 md:row-span-2 md:col-start-1" > <div :class="{'w-full h-full fixed top-0 left-0 bg-white z-50 flex': fullscreen}" :role="fullscreen ? 'dialog' : false" :aria-modal="fullscreen" :aria-label="fullscreen ? 'Gallery\u0020modal\u0020fullscreen' : false" > <div class="relative self-center w-full" @touchstart="handleTouchStart" @touchmove="handleTouchMove" x-transition:enter="ease-out duration-500" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" > <div class="relative mb-8" aria-live="polite" aria-atomic="true"> <span class="sr-only" id="main-image-description">Main image</span> <span class="sr-only" id="fullscreen-btn-label">Click to view image in fullscreen</span> <picture class="object-contain object-center w-full h-auto max-h-screen-75"><source type="image/webp" srcset="https://publications.opengroup.org/media/catalog/product/cache/2b8b0cbe33eaac4691cbffba65454859/u/n/unix-logo_11_1_1.webp" :class="'invisible'" width="700" height="700" itemprop="image"><img alt="" title="" class="object-contain object-center w-full h-auto max-h-screen-75" :class="'invisible'" src="https://publications.opengroup.org/media/catalog/product/cache/2b8b0cbe33eaac4691cbffba65454859/u/n/unix-logo_11_1_1.png" width="700" height="700" itemprop="image" loading="lazy" /></picture> <template x-for="(image, index) in images" :key="index"> <img :alt="image.caption || 'Additional\u0020APIs\u0020for\u0020the\u0020Base\u0020Specifications\u0020Issue\u00208,\u0020Part\u00202'" :title="image.caption || 'Additional\u0020APIs\u0020for\u0020the\u0020Base\u0020Specifications\u0020Issue\u00208,\u0020Part\u00202'" class="absolute inset-0 object-contain object-center w-full m-auto max-h-screen-75" width="700" height="700" :src="fullscreen ? image.full : image.img" x-transition.opacity.duration.500ms x-show="active === index" @keydown.enter="openFullscreen($root)" :tabindex="fullscreen ? '-1' : '0'" :aria-describedby="fullscreen ? '' : 'main-image-description fullscreen-btn-label' " :role="fullscreen ? 'img' : 'button'" /> </template> <button type="button" class="absolute inset-0 outline-offset-2" aria-describedby="main-image-description fullscreen-btn-label" aria-label="Main Product Image" x-ref="galleryFullscreenBtn" x-show="!fullscreen" x-cloak @click="openFullscreen()" @keydown.enter="openFullscreen()" ></button> <div class="absolute inset-0 hidden w-full h-full bg-white nonmobile" :class="{ 'hidden': activeVideoType !== 'youtube' }" x-transition.opacity.duration.500ms x-show="images[active].type === 'video' && activeVideoType === 'youtube'" > <div id="youtube-player" class="w-full h-full"></div> </div> <div class="absolute inset-0 hidden w-full h-full bg-white" :class="{ 'hidden': activeVideoType !== 'vimeo' }" x-transition.opacity.duration.500ms x-show="images[active].type === 'video' && activeVideoType === 'vimeo'" > <div id="vimeo-player" class="w-full h-full"></div> </div> </div> </div> <div class="absolute top-0 right-0 pt-4 pr-4"> <button @click="closeFullScreen()" type="button" class="hidden text-gray-500 p-3 hover:text-gray-600 focus:text-gray-600 transition ease-in-out duration-150" :class="{ 'hidden': !fullscreen, 'block': fullscreen }" aria-label="Close fullscreen" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> </svg> </button> </div> </div> </div> <script> function initGallery () { let touchXDown, touchYDown; return { "active": 0, "videoData": {}, "activeVideoType": false, "autoplayVideo": false, "loopVideo": true, "relatedVideos": false, "vimeoPlayer": null, "fullscreen": false, "isSlider": false, "initialImages": [{"thumb":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/2c82d8de613b73c650173ddb0405732b\/u\/n\/unix-logo_11_1_1.png","img":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/2b8b0cbe33eaac4691cbffba65454859\/u\/n\/unix-logo_11_1_1.png","full":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/440cebbf5561b9c932004b077384b1f0\/u\/n\/unix-logo_11_1_1.png","caption":"Additional APIs for the Base Specifications Issue 8, Part 2","position":"1","isMain":true,"type":"image","videoUrl":null,"thumb_webp":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/2c82d8de613b73c650173ddb0405732b\/u\/n\/unix-logo_11_1_1.webp","img_webp":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/2b8b0cbe33eaac4691cbffba65454859\/u\/n\/unix-logo_11_1_1.webp","full_webp":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/440cebbf5561b9c932004b077384b1f0\/u\/n\/unix-logo_11_1_1.webp"}], "images": [{"thumb":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/2c82d8de613b73c650173ddb0405732b\/u\/n\/unix-logo_11_1_1.png","img":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/2b8b0cbe33eaac4691cbffba65454859\/u\/n\/unix-logo_11_1_1.png","full":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/440cebbf5561b9c932004b077384b1f0\/u\/n\/unix-logo_11_1_1.png","caption":"Additional APIs for the Base Specifications Issue 8, Part 2","position":"1","isMain":true,"type":"image","videoUrl":null,"thumb_webp":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/2c82d8de613b73c650173ddb0405732b\/u\/n\/unix-logo_11_1_1.webp","img_webp":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/2b8b0cbe33eaac4691cbffba65454859\/u\/n\/unix-logo_11_1_1.webp","full_webp":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/cache\/440cebbf5561b9c932004b077384b1f0\/u\/n\/unix-logo_11_1_1.webp"}], "appendOnReceiveImages": true, "activeSlide": 0, "itemCount": 0, "pageSize": 4, "pageFillers": 0, "focusTrapListener": null, init() { this.initActive(); this.$nextTick(() => this.calcPageSize()); this.$watch('fullscreen', open => { this.$nextTick(() => { this.scrollLock(open); window.requestAnimationFrame(() => { this.calcPageSize() }); }); }) }, receiveImages(images) { if (this.appendOnReceiveImages) { const initialUrls = this.initialImages.map(image => image.full); const newImages = images.filter(image => ! initialUrls.includes(image.full)); this.images = [].concat(this.initialImages, newImages); this.setActive(newImages.length ? this.initialImages.length : 0); } else { this.images = images; this.setActive(0); } this.itemCount = this.images.length; }, resetGallery() { this.images = this.initialImages; this.itemCount = this.images.length; this.setActive(0); }, initActive() { let active = this.images.findIndex(function(image) { return image.isMain === true }); if (active === -1) { active = 0; } this.setActive(active); }, setActive(index) { this.active = index; if (window.youtubePlayer) { window.youtubePlayer.stopVideo(); } if (this.vimeoPlayer) { this.vimeoPlayer.contentWindow.postMessage(JSON.stringify({"method": "pause"}), "*"); } if (this.images[index].type === 'video') { this.activateVideo(); } }, activateVideo() { const videoData = this.getVideoData(); if (!videoData) { return } this.activeVideoType = videoData.type; if (videoData.type === "youtube") { if (!window.youtubePlayer) { this.initYoutubeAPI(videoData); } else { window.youtubePlayer.loadVideoById(videoData.id); } } else if (videoData.type === "vimeo") { this.initVimeoVideo(videoData); } }, getVideoData() { const videoUrl = this.images[this.active] && this.images[this.active].videoUrl; if (!videoUrl) { return } let id, type, youtubeRegex, vimeoRegex, useYoutubeNoCookie = false; if (videoUrl.match(/youtube\.com|youtu\.be|youtube-nocookie.com/)) { id = videoUrl.replace(/^\/(embed\/|v\/)?/, '').replace(/\/.*/, ''); type = 'youtube'; youtubeRegex = /^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/; id = videoUrl.match(youtubeRegex)[1]; if (videoUrl.match(/youtube-nocookie.com/)) { useYoutubeNoCookie = true; } } else if (videoUrl.match(/vimeo\.com/)) { type = 'vimeo'; vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)', '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)' ].join('')); id = videoUrl.match(vimeoRegex)[3]; } return id ? { id: id, type: type, useYoutubeNoCookie: useYoutubeNoCookie } : false; }, initYoutubeAPI(videoData) { if (document.getElementById('loadYoutubeAPI')) { return; } const params = {}; const loadYoutubeAPI = document.createElement('script'); loadYoutubeAPI.src = 'https://www.youtube.com/iframe_api'; loadYoutubeAPI.id = 'loadYoutubeAPI'; const firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(loadYoutubeAPI, firstScriptTag); const host = (videoData.useYoutubeNoCookie) ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com'; if (this.autoplayVideo) { params.autoplay = this.autoplayVideo; } if (!this.relatedVideos) { params.rel = 0; } const fireYoutubeAPI = document.createElement('script'); fireYoutubeAPI.innerHTML = `function onYouTubeIframeAPIReady() { window.youtubePlayer = new YT.Player('youtube-player', { host: '${host}', videoId: '${videoData.id}', playerVars: ${JSON.stringify(params)}, }); }`; firstScriptTag.parentNode.insertBefore(fireYoutubeAPI, firstScriptTag); }, initVimeoVideo(videoData) { let additionalParams = '', src; const timestamp = new Date().getTime(); const vimeoContainer = document.getElementById("vimeo-player"); const videoId = videoData.id; if (!vimeoContainer || !videoId) return; if (this.autoplayVideo) { additionalParams += '&autoplay=1'; } if (this.loopVideo) { additionalParams += '&loop=1'; } src = 'https://player.vimeo.com/video/' + videoId + '?api=1&player_id=vimeo' + videoId + timestamp + additionalParams; vimeoContainer.innerHTML = `<iframe id="${'vimeo' + videoId + timestamp}" src="${src}" width="640" height="360" webkitallowfullscreen mozallowfullscreen allowfullscreen referrerPolicy="origin" allow="autoplay" class="object-center w-full h-full object-fit" />`; this.vimeoPlayer = vimeoContainer.childNodes[0]; }, getSlider() { return this.$refs.jsThumbSlides; }, calcPageSize() { const slider = this.getSlider(); if (slider) { const slideEl = slider.querySelector('.js_thumbs_slide'), marginRight = parseInt(window.getComputedStyle(slideEl).marginRight); this.itemCount = slider.querySelectorAll('.js_thumbs_slide').length; this.pageSize = Math.round(slider.clientWidth / (slideEl.clientWidth + marginRight)); this.pageFillers = ( this.pageSize * Math.ceil(this.itemCount / this.pageSize) ) - this.itemCount; this.isSlider = ((slider.clientWidth - (this.itemCount * (slideEl.clientWidth + marginRight))) < 0); } }, calcActive() { const slider = this.getSlider(); if (slider) { const sliderItems = this.itemCount + this.pageFillers; const calculatedActiveSlide = slider.scrollLeft / (slider.scrollWidth / sliderItems); this.activeSlide = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize; } }, scrollPrevious() { this.scrollTo(this.activeSlide - this.pageSize); }, scrollNext() { this.scrollTo(this.activeSlide + this.pageSize); }, scrollTo(idx) { const slider = this.getSlider(); if (slider) { const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers); slider.scrollLeft = Math.floor(slideWidth) * idx; this.activeSlide = idx; } }, setActiveAndScrollTo(index) { this.setActive(index) if (this.isSlider) { this.scrollTo(index); } }, eventListeners: { ['@keydown.window.escape']() { if (!this.fullscreen) return; this.closeFullScreen() }, ['@update-gallery.window'](event) { this.receiveImages(event.detail); }, ['@reset-gallery.window'](event) { this.resetGallery(); }, ['@keyup.arrow-right.window']() { if (!this.fullscreen) return; this.nextItem(); }, ['@keyup.arrow-left.window']() { if (!this.fullscreen) return; this.previousItem(); }, }, scrollLock(use = true) { document.body.style.overflow = use ? "hidden" : ""; }, openFullscreen() { this.fullscreen = true; hyva.trapFocus(this.$root); }, closeFullScreen(setFocusTo = this.$refs.galleryFullscreenBtn) { this.fullscreen = false; hyva.releaseFocus(this.$root); this.$nextTick(() => { this.calcPageSize(); setFocusTo && setFocusTo.focus() }); }, handleTouchStart(event) { if (this.images.length <= 1) { return; } const firstTouch = event.touches[0]; touchXDown = firstTouch.clientX; touchYDown = firstTouch.clientY; }, handleTouchMove(event) { if (this.images.length <= 1 || !touchXDown || !touchYDown) { return; } const xDiff = touchXDown - event.touches[0].clientX; const yDiff = touchYDown - event.touches[0].clientY; if (Math.abs(xDiff) > Math.abs(yDiff)) { const newIndex = xDiff > 0 ? this.getNextIndex() : this.getPreviousIndex(); this.setActiveAndScrollTo(newIndex) } touchXDown = touchYDown = null; }, getPreviousIndex() { return this.active > 0 ? this.active - 1 : this.itemCount - 1; }, getNextIndex() { return this.active + 1 === this.itemCount ? 0 : this.active + 1; }, previousItem() { if (this.active === 0) return; this.setActiveAndScrollTo(this.active - 1); }, nextItem() { if ((this.active + 1) === this.itemCount) return; this.setActiveAndScrollTo(this.active + 1); }, } } </script> <div> <div class="container"> <div class="flex flex-col md:flex-row flex-wrap mb-5 font-bold"> <h1 class="page-title title-font" > <span class="base" data-ui-id="page-title-wrapper" itemprop="name">Additional APIs for the Base Specifications Issue 8, Part 2</span> </h1> </div> </div> <div class="w-full mb-6"> <div class="flex flex-col gap-4"> <div class="flex justify-end items-center"> <div> <span class="text-gray"> # C228 </span> </div> </div> <form method="post" action="https://publications.opengroup.org/downloadable/add/index/uenc/aHR0cHM6Ly9wdWJsaWNhdGlvbnMub3Blbmdyb3VwLm9yZy9jMjI4/product/2060/_form_key/IfyFBKiVhGQ4tyr6/" class="" id="product_addtocart_form" > <input type="hidden" name="product" value="2060" /> <input type="hidden" name="selected_configurable_option" value="" /> <input type="hidden" name="related_product" id="related-products-field" value="" /> <input type="hidden" name="item" value="2060"> <input name="form_key" type="hidden" value="IfyFBKiVhGQ4tyr6" /> <div class="border-t border-container pt-4"> <legend class="title-font text-black font-bold"> <span>Availability</span> </legend> <div class="field downloads" > <div class="control" id="downloadable-links-list"> <div class="flex flow-row justify-between"> <div> <span>Download Free PDF Edition</span> </div> </div> </div> </div> </div> </form> <div class="h2"> <button type="button" x-data @click="setTimeout(() => { window.location = 'https://publications.opengroup.org/customer/account/login/'; }, 1000)" title="Login to Download" class="btn btn-primary justify-center mr-auto w-full" > <span>Login to Download</span> </button> <script> function createComponent() { let hyvaModal = hyva.modal(); return { ...hyvaModal, validationData: {"needConfirmIds":[]}, checkLicenseAndProceed() { const checkboxes = document.querySelectorAll('input[name="links[]"]'); const isSelected = Array.from(checkboxes).some(checkbox => checkbox.checked); if (!isSelected) { checkboxes[checkboxes.length - 1].setCustomValidity('Please select at least one of the options.'); checkboxes[checkboxes.length - 1].reportValidity(); return; } else { checkboxes.forEach(checkbox => checkbox.setCustomValidity('')); } let licensedLinkChecked = Array.from(checkboxes).filter(checkbox => checkbox.checked).some(checkbox => this.validationData.needConfirmIds.includes(checkbox.value) ); if (licensedLinkChecked) { window.dispatchEvent( new CustomEvent('hyva-modal-show', {detail: {dialog: 'licence-modal'}}) ); } else { document.getElementById('product_addtocart_form').submit(); } } }; } let addButton = document.getElementById('product-addtocart-button'); if (addButton) { addButton.addEventListener('click', function(event) { event.preventDefault(); let checkboxes = document.querySelectorAll('input[name="links[]"]'); if (checkboxes.length > 0) { createComponent().checkLicenseAndProceed(); } else { document.getElementById('product_addtocart_form').submit(); } }); } </script> </div> </div> <div class="flex mt-4 justify-end"> </div> <div class="mt-4 leading-relaxed product-description prose lg:hidden">This document has been prepared by The Open Group Base Working Group. The Open Group Base Working Group is submitting a number of additional APIs to the Austin Group as input to the Issue 8 revision of the Base Specifications. This document contains the second set of these APIs.</div> </div> </div> </div> </div> </section> <section> <div class="product-options-bottom container flex flex-col md:flex-row flex-no-wrap gap-4"> </div> </section> <div class="hidden mb-24 lg:flex justify-start items-stretch bg-container border border-primary" x-data="{ activeTab: 'description' }" id="product-tabs"> <div class="tabs flex flex-col w-1/6 border-r border-primary"> <button @click="activeTab = 'description'" class="p-4 text-left border-b border-b-primary" :class="activeTab === 'description' ? 'bg-blue text-white' : 'bg-container'" > <div> <p class="text-lg font-bold"> Details </p> </div> </button> <button @click="activeTab = 'product.attributes'" class="p-4 text-left border-b border-b-primary" :class="activeTab === 'product.attributes' ? 'bg-blue text-white' : 'bg-container'" > <div> <p class="text-lg font-bold"> Additional Information </p> </div> </button> <button @click="activeTab = 'product.standards.information'" class="p-4 text-left border-b border-b-primary" :class="activeTab === 'product.standards.information' ? 'bg-blue text-white' : 'bg-container'" > <div> <p class="text-lg font-bold"> Standards Information </p> </div> </button> <button @click="activeTab = 'product.review.form'" class="p-4 text-left border-b border-b-primary" :class="activeTab === 'product.review.form' ? 'bg-blue text-white' : 'bg-container'" > <div> <p class="text-lg font-bold"> Reviews </p> </div> </button> </div> <div class="content grow py-8 px-16 bg-white w-5/6"> <div x-cloak x-show="activeTab === 'description'" class="tab-content"> <div class=""> <style>#html-body [data-pb-style=TCOWQMM]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-style:none;border-width:1px;border-radius:0;margin:0 0 10px;padding:10px}#html-body [data-pb-style=CC2W1FS]{border-style:none;border-width:1px;border-radius:0;margin:0;padding:0}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="TCOWQMM"><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="CC2W1FS" data-decoded="true"><p>The purpose of this document is to define a set of additional APIs for inclusion in the Issue 8 revision of the Base Specifications of the Single UNIX® Specification.</p> <p>The additional APIs proposed by participants in the Austin Group that The Open Group has agreed to sponsor are listed below. <p><b>Headers</b></p> <ul> <li><libintl.h> </ul> <p><b>Functions</b></p> <ul> <li>bind_textdomain_codeset() <li>bindtextdomain() <li>dcgettext() <li>dcgettext_l() <li>dcngettext() <li>dcngettext_l() <li>dgettext() <li>dgettext_l() <li>dngettext() <li>dngettext_l() <li>getresgid() <li>getresuid() <li>gettext() <li>gettext_l() <li>ngettext() <li>ngettext_l() <li>setresgid() <li>setresuid() <li>textdomain() </ul> <p><b>Utilities</b></p> <ul> <li>gettext <li>msgfmt <li>ngettext <li>readlink <li>realpath <li>timeout <li>xgettext </ul></div></div></div></div> </div> <div x-cloak x-show="activeTab === 'product.attributes'" class="tab-content"> <div class="table-wrapper overflow-x-auto" id="product-attributes"> <table class="additional-attributes w-full m-0"> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">US ISBN</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="US ISBN" >1-957866-06-2</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Published</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Published" >30 Nov 2022</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Pages</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Pages" >86</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Type</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Type" >Standards</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Subject</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Subject" >Single UNIX Specification</td> </tr> </table> </div> </div> <div x-cloak x-show="activeTab === 'product.standards.information'" class="tab-content"> <div class="table-wrapper overflow-x-auto" id="product-attributes"> <table class="additional-attributes w-full m-0"> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Common Name</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Common Name" >Base APIs, Issue 8, Part 2</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Status</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Status" >Adopted</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Service Category</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Service Category" >Operating System Services</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Service</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Service" >Kernel Operations</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Type</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Type" >The Open Group Standard</td> </tr> </table> </div> </div> <div x-cloak x-show="activeTab === 'product.review.form'" class="tab-content"> <div class="mx-auto py-6 items-center" id="review-form" tabindex="-1"> <div class="card w-full px-6 py-3"> <div class="text-xl my-3"> Write Your Own Review </div> <div id="review-form" tabindex="-1" > <div class="pb-6"> Only registered users can write reviews. Please <a href="https://publications.opengroup.org/customer/account/login/referer/aHR0cHM6Ly9wdWJsaWNhdGlvbnMub3Blbmdyb3VwLm9yZy9jYXRhbG9nL3Byb2R1Y3Qvdmlldy9pZC8yMDYwLyNyZXZpZXctZm9ybQ%2C%2C/" class="underline">Sign in</a> or <a href="https://publications.opengroup.org/customer/account/create/" class="underline">create an account</a> </div> </div> </div> </div> </div> </div> </div> <div x-data="{ openIndex: false }" class="lg:hidden mb-12"> <div> <button @click="openIndex = openIndex === 0 ? false : 0" :class="openIndex === 0 ? 'bg-blue text-white' : 'bg-container'" class="p-4 w-full text-left border-b border-b-primary relative" > <div> <p class="text-lg font-bold"> Details </p> </div> <span class="absolute top-1/2 right-6 transform -translate-y-1/2" :class="openIndex === 0 ? 'text-white' : 'text-black'" > <template x-if="openIndex !== 0"> <!-- Icon when the accordion is closed --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-6 h-6" width="24" height="24" role="img"> <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> <title>chevron-down</title></svg> </template> <template x-if="openIndex === 0"> <!-- Icon when the accordion is open --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-6 h-6" width="24" height="24" role="img"> <path fill-rule="evenodd" d="M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z" clip-rule="evenodd"/> <title>chevron-up</title></svg> </template> </span> </button> <div x-cloak x-show="openIndex === 0" class="border border-primary p-4" > <div class=""> <style>#html-body [data-pb-style=TCOWQMM]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-style:none;border-width:1px;border-radius:0;margin:0 0 10px;padding:10px}#html-body [data-pb-style=CC2W1FS]{border-style:none;border-width:1px;border-radius:0;margin:0;padding:0}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="TCOWQMM"><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="CC2W1FS" data-decoded="true"><p>The purpose of this document is to define a set of additional APIs for inclusion in the Issue 8 revision of the Base Specifications of the Single UNIX® Specification.</p> <p>The additional APIs proposed by participants in the Austin Group that The Open Group has agreed to sponsor are listed below. <p><b>Headers</b></p> <ul> <li><libintl.h> </ul> <p><b>Functions</b></p> <ul> <li>bind_textdomain_codeset() <li>bindtextdomain() <li>dcgettext() <li>dcgettext_l() <li>dcngettext() <li>dcngettext_l() <li>dgettext() <li>dgettext_l() <li>dngettext() <li>dngettext_l() <li>getresgid() <li>getresuid() <li>gettext() <li>gettext_l() <li>ngettext() <li>ngettext_l() <li>setresgid() <li>setresuid() <li>textdomain() </ul> <p><b>Utilities</b></p> <ul> <li>gettext <li>msgfmt <li>ngettext <li>readlink <li>realpath <li>timeout <li>xgettext </ul></div></div></div></div> </div> </div> <div> <button @click="openIndex = openIndex === 1 ? false : 1" :class="openIndex === 1 ? 'bg-blue text-white' : 'bg-container'" class="p-4 w-full text-left border-b border-b-primary relative" > <div> <p class="text-lg font-bold"> Additional Information </p> </div> <span class="absolute top-1/2 right-6 transform -translate-y-1/2" :class="openIndex === 1 ? 'text-white' : 'text-black'" > <template x-if="openIndex !== 1"> <!-- Icon when the accordion is closed --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-6 h-6" width="24" height="24" role="img"> <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> <title>chevron-down</title></svg> </template> <template x-if="openIndex === 1"> <!-- Icon when the accordion is open --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-6 h-6" width="24" height="24" role="img"> <path fill-rule="evenodd" d="M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z" clip-rule="evenodd"/> <title>chevron-up</title></svg> </template> </span> </button> <div x-cloak x-show="openIndex === 1" class="border border-primary p-4" > <div class="table-wrapper overflow-x-auto" id="product-attributes"> <table class="additional-attributes w-full m-0"> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">US ISBN</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="US ISBN" >1-957866-06-2</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Published</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Published" >30 Nov 2022</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Pages</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Pages" >86</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Type</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Type" >Standards</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Subject</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Subject" >Single UNIX Specification</td> </tr> </table> </div> </div> </div> <div> <button @click="openIndex = openIndex === 2 ? false : 2" :class="openIndex === 2 ? 'bg-blue text-white' : 'bg-container'" class="p-4 w-full text-left border-b border-b-primary relative" > <div> <p class="text-lg font-bold"> Standards Information </p> </div> <span class="absolute top-1/2 right-6 transform -translate-y-1/2" :class="openIndex === 2 ? 'text-white' : 'text-black'" > <template x-if="openIndex !== 2"> <!-- Icon when the accordion is closed --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-6 h-6" width="24" height="24" role="img"> <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> <title>chevron-down</title></svg> </template> <template x-if="openIndex === 2"> <!-- Icon when the accordion is open --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-6 h-6" width="24" height="24" role="img"> <path fill-rule="evenodd" d="M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z" clip-rule="evenodd"/> <title>chevron-up</title></svg> </template> </span> </button> <div x-cloak x-show="openIndex === 2" class="border border-primary p-4" > <div class="table-wrapper overflow-x-auto" id="product-attributes"> <table class="additional-attributes w-full m-0"> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Common Name</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Common Name" >Base APIs, Issue 8, Part 2</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Status</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Status" >Adopted</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Service Category</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Service Category" >Operating System Services</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Service</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Service" >Kernel Operations</td> </tr> <tr class="border-b border-container last:border-b-0 bg-white"> <th class="col label w-1/2 py-2 text-left font-bold product-attribute-label bg-white" scope="row">Type</th> <td class="col data w-1/2 py-2 pl-2 text-left text-gray-900 product-attribute-value bg-white" data-th="Type" >The Open Group Standard</td> </tr> </table> </div> </div> </div> <div> <button @click="openIndex = openIndex === 3 ? false : 3" :class="openIndex === 3 ? 'bg-blue text-white' : 'bg-container'" class="p-4 w-full text-left border-b border-b-primary relative" > <div> <p class="text-lg font-bold"> Reviews </p> </div> <span class="absolute top-1/2 right-6 transform -translate-y-1/2" :class="openIndex === 3 ? 'text-white' : 'text-black'" > <template x-if="openIndex !== 3"> <!-- Icon when the accordion is closed --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-6 h-6" width="24" height="24" role="img"> <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> <title>chevron-down</title></svg> </template> <template x-if="openIndex === 3"> <!-- Icon when the accordion is open --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-6 h-6" width="24" height="24" role="img"> <path fill-rule="evenodd" d="M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z" clip-rule="evenodd"/> <title>chevron-up</title></svg> </template> </span> </button> <div x-cloak x-show="openIndex === 3" class="border border-primary p-4" > <div class="mx-auto py-6 items-center" id="review-form" tabindex="-1"> <div class="card w-full px-6 py-3"> <div class="text-xl my-3"> Write Your Own Review </div> <div id="review-form" tabindex="-1" > <div class="pb-6"> Only registered users can write reviews. Please <a href="https://publications.opengroup.org/customer/account/login/referer/aHR0cHM6Ly9wdWJsaWNhdGlvbnMub3Blbmdyb3VwLm9yZy9jYXRhbG9nL3Byb2R1Y3Qvdmlldy9pZC8yMDYwLyNyZXZpZXctZm9ybQ%2C%2C/" class="underline">Sign in</a> or <a href="https://publications.opengroup.org/customer/account/create/" class="underline">create an account</a> </div> </div> </div> </div> </div> </div> </div> <section> <div class="product-slider related-product-slider"> <div> <section class="my-12 text-black body-font" role="group" aria-roledescription="Product List" aria-label="Product List Related Products" > <div class="relative"> <div class="container flex flex-col p-0"> <h2 class="title-font h4 normal-case mb-4"> Related Products </h2> </div> <div class="flex-none relative w-full overflow-x-hidden"> <div class="relative gap-5 md:gap-8 grid xs:grid-cols-2 lg:grid-cols-4 w-full"> <div class="flex w-full" role="group" aria-label="Item" > <form method="post" action="https://publications.opengroup.org/downloadable/add/index/uenc/aHR0cHM6Ly9wdWJsaWNhdGlvbnMub3Blbmdyb3VwLm9yZy9jMjI4/product/1350/_form_key/IfyFBKiVhGQ4tyr6/useUencPlaceholder/1/" class="item product product-item product_addtocart_form card bg-white p-0 flex flex-col w-full h-full shadow-none border-0" > <input name="form_key" type="hidden" value="IfyFBKiVhGQ4tyr6" /> <input type="hidden" name="product" value="1350"/> <div class="product-info flex flex-col h-full w-full "> <div class="bg-white border-container"> <a href="https://publications.opengroup.org/c211" class="product photo product-item-photo flex justify-center items-center p-5 h-full border border-container" tabindex="-1" > <picture class="hover:shadow-sm object-contain product-image-photo"><source type="image/webp" srcset="https://publications.opengroup.org/media/catalog/product/cache/cf0f6f9dc14c6e35d6446649e2272470/u/n/unix-logo_11_1.webp" loading="lazy" width="360" height="360" alt="Additional APIs for the Base Specifications Issue 8, Part 1" title="Additional APIs for the Base Specifications Issue 8, Part 1" @update-gallery-1350.window="$root.src = $event.detail"><img class="hover:shadow-sm object-contain product-image-photo" x-data="" @update-gallery-1350.window="$root.src = $event.detail" src="https://publications.opengroup.org/media/catalog/product/cache/cf0f6f9dc14c6e35d6446649e2272470/u/n/unix-logo_11_1.png" loading="lazy" width="360" height="360" alt="Additional APIs for the Base Specifications Issue 8, Part 1" title="Additional APIs for the Base Specifications Issue 8, Part 1" loading="lazy" /></picture> </a> </div> <div class="flex flex-col grow"> <div class="mt-4 mb-2.5 items-center justify-center "> <a class="product-item-link" href="https://publications.opengroup.org/c211" :id="`slide-desc-1350-${$id('slider-id')}`" > Additional APIs for the Base Specifications Issue 8, Part 1 </a> </div> <div class="mt-4 hidden"> <a class="underline gap-2 font-bold flex items-center justify-end" href="https://publications.opengroup.org/c211" aria-label="Learn more about this product"> <span>Learn more</span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5" width="25" height="25" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3"/> </svg> </a> </div> <script> function initPriceBox__674399b011e87() { return { updatePrice(priceData) { const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); if (priceData.finalPrice.amount < priceData.oldPrice.amount) { regularPriceLabel.classList.add('hidden'); } else { regularPriceLabel.classList.remove('hidden'); } regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); } } } </script> </div> <div class="flex flex-col gap-2.5 "> <div> <a class="btn btn-primary justify-center text-lg font-bold mr-auto w-full" aria-label="View Product Additional APIs for the Base Specifications Issue 8, Part 1" href="https://publications.opengroup.org/c211" > <span class="whitespace-nowrap "> View Product </span> </a> </div> </div> </div> </form> </div> </div> </div> </section> </div> <script> 'use strict'; window.addEventListener('DOMContentLoaded', function() { if (! window.productSliderEventHandlerInitialized) { window.productSliderEventHandlerInitialized = true; } }); </script> </div> </section> </div><script> function hasWebP() { var elem = document.createElement('canvas'); if (!!(elem.getContext && elem.getContext('2d'))) { return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; } return false; } if (hasWebP()) { document.body.classList.add("webp"); } else { document.body.classList.add("no-webp"); } </script> <script> document.addEventListener('alpine:init', () => { Alpine.data('initGallery', () => { const galleryInitData = initGallery(); document.dispatchEvent(new CustomEvent('gallery-init', {detail: galleryInitData})); return galleryInitData; }); }); </script> <script> document.addEventListener('gallery-init', ({detail: galleryData}) => { if (typeof hasWebP != 'function') { console.error('[Yireo_WebP2] JavaScript function "hasWebP" does not exist'); return; } function replaceImage(image) { if (image.full && image.full_webp) { image.full = image.full_webp; delete image.full_webp; } if (image.img && image.img_webp) { image.img = image.img_webp; delete image.img_webp; } if (image.thumb && image.thumb_webp) { image.thumb = image.thumb_webp; delete image.thumb_webp; } } if (galleryData.images) { galleryData.images.forEach(function(image) { replaceImage(image); }); } if (galleryData.initialImages) { galleryData.initialImages.forEach(function(image) { replaceImage(image); }); } }); </script> <script> const rawRequest = ""; const searchRequest = rawRequest ? JSON.parse(rawRequest) : null; const rawResponse = ""; const searchResponse = rawResponse ? JSON.parse(rawResponse) : null; const rawExecutionTime = "0"; const executionTime = rawExecutionTime ? parseFloat(rawExecutionTime) : null; const requestId = "2a1f8067\u002D3b0b\u002D4438\u002D8ed2\u002D45c451879015"; const rawAttributes = ""; const attributes = rawAttributes ? JSON.parse(rawAttributes) : null; const rawPageSize = "10"; const pageSize = rawPageSize ? parseInt(rawPageSize) : null; const customerGroup = "b6589fc6ab0dc82cf12099d1c2d40ab994e8410c"; window.LiveSearchMetrics = { searchRequest, searchResponse, requestId, executionTime, attributes, pageSize, context: { 'customerGroup' : customerGroup } }; window.addEventListener('load', function () { magentoStorefrontEvents.context.setSearchExtension({ version: "4.2.1" }); }) </script> <div x-data="recommendedProducts_below_main_content()" x-init="initProductRecBlock()" id="recs_block_below_main_content" class="container" x-cloak> <template x-if="productBanners"> <div> <template x-for="banner in productBanners"> <div class="product-slider" x-intersect.once="scrollViewEvent(banner.unitId)"> <section class="my-8"> <div class="relative"> <div class="flex flex-col mb-4 md:flex-row"> <h3 x-text='banner.storefrontLabel' class="text-xl font-bold title-font normal-case"></h3> </div> <div class="mx-auto grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-12"> <template x-for="product in banner.products"> <div> <form method="post" x-bind:action="createAddToCartUrl(product.productId)" @submit.prevent="addToCartRecsEvent($event.target, banner.unitId, product.productId)" class="item product product-item product_addtocart_form card bg-white p-0 flex flex-col w-full h-full shadow-none border-0"> <input name="form_key" type="hidden" :value="hyva.getFormKey()"/> <input type="hidden" name="product" x-bind:value="product.productId"> <button @click="recsClickEvent(banner.unitId, product.productId, product.url)" class="product photo product-item-photo flex justify-center items-center p-5 h-full border border-container" tabindex="-1" x-bind:aria-label="product.name" > <img class="hover:shadow-sm object-contain" loading="lazy" x-bind:alt="product.image?.label" x-bind:title="product.image?.label" x-bind:src="product.image?.url" width="360" height="360"> </button> <div class="product-info flex flex-col flex-grow"> <div class="mt-4 mb-2.5 items-center justify-center"> <button class="product-item-link cursor-pointer" @click="recsClickEvent(banner.unitId, product.productId, product.url)" x-text="product.name"></button> </div> <template x-if="product.prices"> <div class="mb-2.5 price-box price-final_price" x-bind:data-product-id="product.productId"> <span class="normal-price"> <span class="price-container price-final_price"> <span x-show="product.prices.minimum.final !== product.prices.maximum.final" class="price-label">As low as</span> <span id="product-price" class="price-wrapper "> <span class="price" x-text="hyva.formatPrice(product.prices.minimum.final)"></span> </span> </span> </span> </div> </template> <template x-if="product.addToCartAllowed"> <div> <button class="btn btn-primary justify-center text-lg font-bold mr-auto w-full" aria-label="Add to Cart"> <span class="whitespace-nowrap "> Add to Cart </span> </button> </div> </template> </div> </form> </div> </template> </div> </div> </section> </div> </template> </div> </template> </div> <script> function recommendedProducts_below_main_content() { return { productBanners: [], pagePreconfiguredDeferred: {}, bannerPlacement: 'below-main-content', initProductRecBlock: function (placement) { let self = this; window.magentoStorefrontEvents.subscribe.recsResponseReceived(function () { let recsData = window.magentoStorefrontEvents.context.getRecommendations(); self.renderProductRecs(recsData); }); }, renderProductRecs: function (recsData) { let self = this; recsData.units.sort((a, b) => a.displayOrder - b.displayOrder); recsData.units.forEach(function (unit, index) { if (unit.pagePlacement === self.bannerPlacement) { self.productBanners.push(unit); /** @todo move event outside of recsResponseReceived event **/ window.magentoStorefrontEvents.publish.recsUnitRender( unit.unitId, magentoStorefrontEvents.context ); } }); }, addToCartRecsEvent: function (e, unitId, productId) { // requires recommendationsContext to be set magentoStorefrontEvents.publish.recsItemAddToCartClick( unitId, productId, magentoStorefrontEvents.context ); // Timeout to prevent submission before event has fired. setTimeout(() => e.submit(), 500); }, scrollViewEvent: function (unitId) { magentoStorefrontEvents.publish.recsUnitView( unitId, magentoStorefrontEvents.context ); }, recsClickEvent: function (unitId, productId, productUrl) { magentoStorefrontEvents.publish.recsItemClick( unitId, productId, magentoStorefrontEvents.context ); // Timeout to prevent submission before event has fired. setTimeout(() => window.location.href = productUrl, 500); }, createAddToCartUrl: function (productId) { const currentLocationUENC = encodeURIComponent( this.encodeUenc(BASE_URL), ); return BASE_URL + "checkout/cart/add/uenc/" + currentLocationUENC + "/product/" + productId }, encodeUenc: function (value) { const regex = /=/gi; return btoa(value).replace(regex, ","); }, } } </script> </div></div></main><footer class="page-footer"><div class="footer content"><div class="bg-blue"> <div class="container mx-auto"> <div class="flex flex-wrap order-first gap-y-16"> <div class="w-full flex flex-wrap"> <div class="w-full text-white my-12 grid grid-cols-1 gap-12 md:gap-8 md:grid-cols-4 md:my-0" > <div class="hidden md:flex justify-center items-center py-4"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" width="24" height="24" viewBox="0 0 984 1196" version="1.1" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" class="w-full h-auto max-w-[280px]" role="img"><path d="M791.892,147.133c-89.846,-36.458 -170.575,-18.229 -225.263,45.575c27.346,-18.229 80.729,-74.221 179.688,-36.458c98.958,36.458 117.187,157.55 108.075,221.354c-18.23,259.117 -207.034,748.7 -502.605,768.229c-170.575,18.229 -260.416,-101.562 -269.533,-128.908l-9.112,0c45.57,110.679 161.458,175.783 296.875,175.783c359.375,9.117 628.904,-388.02 610.675,-721.354c-9.113,-194.012 -108.071,-286.458 -188.8,-324.221Z" style="fill:#175e77;fill-rule:nonzero;"/> <path d="M172.1,1053.39c125,45.57 197.917,-9.117 214.842,-27.346c-134.113,65.104 -260.417,-9.117 -269.53,-184.896c-9.116,-240.888 223.959,-804.688 520.834,-804.688c108.071,0 179.687,36.459 242.187,101.563c-27.346,-55.992 -125,-138.021 -269.533,-138.021c-350.258,0 -619.792,351.563 -610.675,721.354c10.417,203.125 91.146,295.571 171.875,332.034Z" style="fill:#175e77;fill-rule:nonzero;"/> <path d="M412.756,665.487l-51.109,-0l1.598,-4.933c12.76,-1.644 14.381,-1.644 17.554,-8.221l46.338,-110.183c-9.587,4.932 -19.174,13.153 -25.566,21.374l-3.196,-3.288c4.794,-4.933 14.381,-16.442 31.935,-24.686c7.989,-4.933 17.576,-6.577 25.566,-6.577c22.37,1.644 33.555,14.798 33.555,32.884c-0,37.816 -36.751,60.835 -55.926,60.835c-6.368,-0 -17.553,-1.644 -20.749,-6.554c-1.598,6.554 -15.979,36.172 -15.979,39.438c0,4.955 11.162,4.955 17.577,4.955l-1.598,4.933l0,0.023Zm17.554,-46.06c23.968,-0 43.119,-42.749 43.119,-60.835c0,-16.442 -9.587,-24.663 -27.164,-23.042l-31.934,77.3c3.196,3.311 9.587,6.577 15.955,6.577l0.024,-0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M553.3,594.787c-7.99,13.153 -22.371,27.951 -39.924,27.951c-12.783,0 -19.175,-8.221 -19.175,-19.73c0,-23.019 33.556,-72.368 60.696,-72.368c7.99,0 15.956,3.289 15.956,11.51c-0,19.73 -41.522,36.172 -55.902,44.393c-1.598,3.288 -4.794,16.442 -4.794,19.73c-0,4.933 1.598,9.888 7.989,9.888c12.783,0 25.566,-14.82 31.935,-23.041l3.219,1.644l-0,0.023Zm6.391,-54.258c-0,-3.312 -1.598,-6.577 -6.391,-6.577c-3.219,-0 -7.99,3.265 -11.186,6.577c-9.587,8.221 -20.772,27.951 -25.566,39.46c14.381,-4.932 43.143,-24.663 43.143,-39.46Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M567.657,621.094c4.794,-11.509 35.13,-70.7 35.13,-77.277c0,-1.644 0,-4.932 -1.598,-4.932c-4.793,-0 -15.978,18.086 -23.945,24.639l-3.195,-1.644c6.391,-8.221 22.37,-31.263 36.728,-31.263c4.793,0 6.391,4.933 6.391,8.244c0,8.198 -9.587,26.307 -14.381,34.528l1.598,0c7.989,-13.153 31.934,-42.749 49.534,-42.749c6.392,0 11.185,1.645 11.185,8.245c0,13.13 -31.957,67.411 -31.957,72.344c-0,-0 -0,1.644 1.598,1.644c4.793,-0 19.174,-16.442 20.772,-19.73l3.196,3.288c-4.771,8.221 -25.543,26.307 -36.728,26.307c-3.196,0 -6.392,-3.288 -6.392,-6.553c0,-8.245 33.533,-62.503 33.533,-72.368c-0,-1.644 -1.598,-4.932 -3.196,-4.932c-20.749,-0 -55.903,62.479 -62.271,82.209l-16.002,-0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M354.469,486.247c-15.979,-6.576 -30.337,-3.288 -39.947,8.221c4.793,-3.288 14.381,-13.153 31.934,-6.576c17.577,6.576 20.772,27.951 19.175,39.46c-3.196,46.06 -36.752,133.226 -89.458,136.514c-30.337,3.288 -46.315,-18.109 -47.913,-23.019l-1.621,0c7.989,19.731 28.762,31.24 52.706,31.24c63.892,1.621 111.828,-69.079 108.633,-128.27c-1.598,-34.551 -19.175,-50.993 -33.556,-57.57l0.047,0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M244.262,647.424c22.347,8.198 35.13,-1.667 38.325,-4.956c-23.968,11.51 -46.315,-1.621 -47.913,-32.883c-1.597,-42.749 39.924,-143.045 92.631,-143.045c19.174,0 31.934,6.554 43.119,18.086c-4.77,-9.888 -22.347,-24.662 -47.913,-24.662c-62.294,-0 -110.207,62.479 -108.609,128.269c1.598,36.172 15.979,52.637 30.36,59.214l-0,-0.023Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M721.146,612.178c-0,2.849 0.903,4.748 1.829,5.697l0,0.949c-0.926,0 -1.829,0 -3.682,0.95c-4.608,0.949 -9.217,1.899 -13.825,1.899c-8.314,-0 -16.604,-2.849 -22.139,-8.545c-4.608,-4.748 -6.461,-10.444 -6.461,-17.091c0,-5.673 1.853,-12.343 6.461,-17.09c5.535,-5.697 12.899,-9.494 23.065,-9.494c3.682,-0 7.387,0.949 10.143,1.898l4.609,0c-0,2.849 -0,6.647 0.903,12.343c-0.903,0.95 -1.83,0.95 -2.756,0c-0.926,-7.595 -6.461,-10.444 -13.825,-10.444c-12.922,0 -18.434,9.472 -18.434,21.838c0,5.697 0.927,12.366 4.609,17.09c3.705,4.748 10.143,6.646 13.848,6.646c3.705,0 6.461,-0.949 6.461,-1.898c0.903,-0.95 0.903,-1.899 0.903,-4.748l0,-2.848c0,-3.798 -1.528,-6.013 -4.585,-6.646l-2.779,-0c-0.926,-0.95 -0.926,-1.899 0,-2.849c2.779,0.95 6.461,0.95 11.069,0.95c3.682,-0 6.461,-0 9.217,-0.95c0.926,0.95 0.926,1.899 0,2.849l-0.926,-0c-2.779,-0 -3.682,0.949 -3.682,5.696l-0,3.798l-0.023,0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M736.823,581.796c0,-6.647 0,-7.596 -3.682,-7.596l-1.852,-0.95l-0,-1.922c4.608,0 11.069,-0.949 17.53,-0.949c5.535,-0 10.143,0.949 13.848,2.848c3.682,1.899 6.438,5.697 6.438,11.394c-0,6.646 -5.535,9.494 -9.217,11.37l0,0.95c5.535,10.467 9.217,17.09 12.899,19.938c1.853,1.899 4.631,1.899 4.631,1.899c0.927,0 0.927,0.95 0.927,1.899l-5.535,0c-6.461,0 -10.143,-2.825 -14.751,-9.495c-1.853,-3.797 -3.682,-7.595 -5.535,-10.444c-1.829,-1.922 -2.756,-2.848 -4.608,-2.848c-2.779,0 -2.779,0.949 -2.779,1.899l-0,9.495c-0,7.595 0.926,8.545 4.608,8.545l1.853,-0c-0,0.949 -0,1.899 -0.927,2.825c-2.778,-0 -6.46,-0.95 -9.216,-0.95c-3.682,0 -6.461,0.95 -10.143,0.95c-0,-0.95 -0.927,-1.899 -0,-2.825l1.852,-0c3.682,-0 3.682,-0.95 3.682,-8.545l0,-27.535l-0.023,0.047Zm8.314,11.393c-0,1.266 1.227,1.899 3.682,1.899c7.387,-0 10.143,-2.848 10.143,-10.444c-0,-5.697 -3.682,-10.444 -9.217,-10.444c-3.072,-0 -4.608,0.949 -4.608,2.848l-0,16.141Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M829.06,596.014c-0,14.242 -11.046,25.636 -25.821,25.636c-15.678,-0 -25.821,-12.343 -25.821,-25.636c0,-15.191 11.07,-26.585 26.747,-26.585c16.604,0 24.895,12.343 24.895,26.585Zm-41.499,-1.899c0,10.444 4.609,24.686 16.604,24.686c8.291,0 14.752,-6.646 14.752,-21.837c-0,-11.394 -4.632,-23.737 -15.678,-23.737c-7.387,0 -15.678,4.748 -15.678,20.888Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M839.203,581.796c-0,-7.596 -0.926,-8.546 -3.705,-8.546l-1.83,0c0,-0.972 0,-1.922 0.927,-2.848c2.778,0.949 5.534,0.949 9.216,0.949c2.779,0 6.461,0 9.24,-0.949c0.926,0.949 0.926,1.899 0.926,2.848l-1.852,0c-3.682,0 -4.585,0.95 -4.585,8.546l-0,17.09c-0,10.444 3.682,18.989 13.825,18.989c9.216,0 12.898,-7.596 12.898,-18.989l0,-9.495c0,-4.747 0,-12.343 -0.926,-14.242c-0.926,-0.949 -1.852,-1.899 -3.682,-1.899l-1.853,0c-0.926,-0.972 0,-1.922 0,-2.848c2.779,0.949 5.535,0.949 8.314,0.949c2.779,0 5.535,0 7.387,-0.949c0.927,0.949 0.927,1.899 0.927,2.848l-1.853,0c-1.829,0 -2.756,0.95 -3.682,1.899c-0.926,1.899 -0.926,8.545 -0.926,14.242l-0,9.495c-0,6.646 -0.927,12.343 -4.609,17.09c-3.682,3.798 -9.216,5.697 -13.848,5.697c-7.387,-0 -11.972,-1.899 -15.678,-4.747c-2.755,-3.798 -4.585,-8.546 -4.585,-16.141l0,-18.989l-0.046,-0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M894.526,581.796c0,-6.647 0,-7.596 -3.682,-7.596l-1.852,-0.95c-0.927,0 -0.927,-0.972 -0,-1.922c4.608,0 9.216,-0.949 15.677,-0.949c7.364,-0 11.996,1.899 15.678,3.798c3.682,1.899 5.535,5.696 5.535,10.444c-0,11.37 -10.143,15.191 -15.678,15.191l-1.853,0c-0.926,-0.949 -0.926,-1.899 0,-1.899c6.461,-1.899 8.314,-6.646 8.314,-12.343c-0,-6.646 -3.682,-11.393 -10.143,-11.393c-2.455,-0 -3.682,0.949 -3.682,2.848l-0,32.282c-0,7.595 0.926,8.545 3.682,8.545l2.779,-0c0.926,0.949 0.926,1.899 -0,2.825c-3.682,0 -7.387,-0.949 -10.143,-0.949c-3.682,-0 -7.387,0.949 -10.143,0.949l-0,-2.825l0.926,-0c3.682,-0 4.608,-0.95 4.608,-8.545l0,-27.535l-0.023,0.024Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M65.879,538.005c-0,-1.884 -0.61,-2.826 -1.83,-2.826l-4.585,0c-6.438,0 -8.267,0.95 -11.023,6.623c0,0.95 -1.829,0 -1.829,0c0.926,-4.724 1.829,-9.471 2.756,-11.347c-0,-0.633 0.308,-0.949 0.926,-0.949l-0,0.949c0.926,1.876 1.852,1.876 6.438,1.876l29.387,-0c3.682,-0 4.585,-0.95 5.511,-1.876c0.926,0 0.926,-0.949 0.926,-0.949c0.927,-0 0.927,0.949 0.927,0.949c-0,2.825 -0.927,9.448 -0.927,11.347c0,0.95 -1.829,0.95 -1.829,0c-0.926,-5.673 -2.756,-6.623 -10.097,-6.623l-4.585,0c-1.235,0 -1.852,0.942 -1.852,2.826l-0,32.142c-0,7.573 0.926,8.522 4.585,8.522l1.829,0c0.926,0.95 0.926,1.876 0,2.825c-3.682,0 -7.341,-0.949 -10.097,-0.949c-3.682,0 -7.341,0.949 -11.949,0.949l0,-2.825l3.682,0c2.756,0 3.682,-0.949 3.682,-8.522l0,-32.142l-0.046,-0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M115.482,556.924c-3.682,0 -3.682,0.95 -3.682,2.826l0,10.397c0,7.573 0,8.522 3.682,8.522l2.756,0c0,0.95 0,1.876 -0.926,2.825c-3.682,0 -6.438,-0.949 -10.097,-0.949c-2.756,0 -6.438,0.949 -9.17,0.949l-0,-2.825l0.926,0c3.682,0 4.585,-0.949 4.585,-8.522l0,-27.418c0,-7.573 -0.926,-8.499 -4.585,-8.499l-1.829,-0c-0,-0.95 -0,-1.899 0.926,-2.849c2.756,0.95 6.438,0.95 9.17,0.95c3.682,-0 6.438,-0 9.194,-0.95c0.926,0.95 0.926,1.876 -0,2.849l-0.926,-0c-3.682,-0 -3.682,0.949 -3.682,8.499l-0,9.448c-0,1.266 1.227,1.899 3.682,1.899l16.534,-0c3.682,-0 4.585,-0 4.585,-1.899l0,-9.448c0,-7.573 -0.926,-8.499 -4.585,-8.499l-0.926,-0c-0.926,-0.95 -0.926,-1.899 -0,-2.849c2.756,0.95 6.438,0.95 9.193,0.95c3.682,-0 6.438,-0 10.097,-0.95l0,2.849l-1.853,-0c-2.755,-0 -3.658,0.949 -3.658,8.499l-0,27.418c-0,7.573 0.926,8.522 3.658,8.522l1.853,0c0.926,0.95 0,1.876 0,2.825c-3.682,0 -6.438,-0.949 -10.097,-0.949c-2.755,0 -6.437,0.949 -9.193,0.949c-0.926,-0.949 -0.926,-1.898 -0,-2.825l0.926,0c3.682,0 4.585,-0.949 4.585,-8.522l0,-10.397c0,-1.876 -0.926,-2.826 -4.585,-2.826l-16.558,0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M163.233,542.752c0,-7.573 -0.926,-8.499 -3.682,-8.499l-1.829,0c-0,-0.949 -0,-1.899 0.926,-2.848c2.756,0.949 5.512,0.949 9.171,0.949l13.778,0c4.586,0 8.268,0 9.194,-0.949c0.926,1.875 0.926,7.549 1.829,10.397c-0.926,0.95 -1.829,0.95 -2.755,0.95c-0.927,-4.724 -1.83,-6.623 -4.586,-6.623c-1.829,-0.95 -3.682,-0.95 -5.511,-0.95l-4.608,0c-2.44,0 -3.659,1.259 -3.659,3.775l-0,13.246c-0,1.266 0.609,1.899 1.829,1.899l3.659,0c6.438,0 7.341,0 8.267,-3.775l0,-1.899c0.927,-0.949 1.83,-0.949 2.756,0l-0,15.122l-2.756,0l0,-2.825c-0.926,-2.848 -1.829,-3.798 -8.267,-3.798l-3.659,0c-1.829,0 -1.829,0.95 -1.829,2.826l-0,8.521c-0,3.775 -0,6.6 1.829,8.499c0.926,0.95 1.83,0.95 8.267,0.95c9.194,-0 10.097,-1.899 12.853,-7.573c0.926,-0.949 1.829,0 2.756,0c-0.927,3.798 -2.756,9.449 -3.683,11.347c-2.755,0 -9.193,-0.949 -17.46,-0.949l-8.268,0c-3.682,0 -8.267,0.949 -11.023,0.949c-0.926,-0.949 -0.926,-1.898 0,-2.825l2.756,0c2.756,0 3.682,-0.949 3.682,-8.522l0,-27.418l0.023,0.023Z" style="fill:#fff;fill-rule:nonzero;"/> <g><text x="220.826px" y="482.89px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:31.054px;fill:#fff;">®</text></g> <g><text x="442.491px" y="728.476px" style="font-family:'Arial-BoldItalicMT', 'Arial', sans-serif;font-weight:700;font-style:italic;font-size:97.401px;fill:#fff;">Library</text></g> <g><path d="M919.189,733.223c0,0.648 -0.394,1.204 -1.065,1.227c-36.056,1.158 -53.17,2.918 -53.355,2.941c-0.023,0 0.023,0 0.023,0c-0,0 -3.381,0.07 -9.495,0.07c-8.938,-0 -23.829,-0.139 -43.837,-0.834c-0.648,0 -1.204,-0.556 -1.204,-1.227c-0,-4.887 -0.116,-12.691 -0.278,-22.556c-0.232,-15.145 -0.533,-35.385 -0.556,-56.481l-2.269,-0l-0,81.167l114.445,0l-0,-81.167l-2.432,-0l-0,76.86l0.023,-0Z" style="fill:none;fill-rule:nonzero;"/> <path d="M911.084,729.147c-0,0.649 -0.394,1.204 -1.065,1.227c-17.484,0.556 -28.646,2.2 -35.431,3.752c8.545,-0.602 22.694,-1.436 42.17,-2.084l-0,-75.679l-3.821,-0c-0.51,-0 -1.089,-0.324 -1.251,-0.787l-0.602,-0l-0,73.571Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M902.145,724.284c0,0.648 -0.394,1.204 -1.065,1.227c-22.926,0.741 -31.054,5.211 -33.88,8.129c5.165,-1.83 17.091,-4.794 41.429,-5.651l0,-76.559c-2.431,0 -4.052,0.093 -6.484,0.209l0,72.645Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M865.626,661.967l-0,69.658c4.052,-3.45 12.991,-7.688 34.088,-8.522l-0,-76.559c-30.846,0.347 -34.088,14.52 -34.088,15.423Zm27.603,51.039c0.116,0.649 -0.324,1.251 -0.949,1.367c-4.516,0.787 -16.859,3.659 -19.823,7.48c-0.231,0.301 -0.579,0.463 -0.926,0.463c-0.255,-0 -0.51,-0.07 -0.718,-0.255c-0.51,-0.394 -0.602,-1.135 -0.208,-1.644c4.098,-5.303 20.563,-8.244 21.258,-8.36c0.625,-0.116 1.251,0.324 1.366,0.949Zm0,-9.564c0,0.649 -0.532,1.181 -1.181,1.181c-1.482,0 -15.909,2.756 -19.707,7.92c-0.231,0.301 -0.579,0.486 -0.949,0.486c-0.232,0 -0.486,-0.069 -0.695,-0.231c-0.509,-0.394 -0.625,-1.112 -0.255,-1.644c4.725,-6.392 20.564,-8.87 21.606,-8.87c0.649,0 1.181,0.533 1.181,1.181l0,-0.023Zm0,-9.772c0,0.648 -0.532,1.181 -1.181,1.181c-3.242,-0 -15.724,2.617 -19.799,8.36c-0.232,0.324 -0.602,0.486 -0.95,0.486c-0.231,-0 -0.463,-0.069 -0.671,-0.208c-0.533,-0.371 -0.649,-1.112 -0.278,-1.645c4.909,-6.901 18.642,-9.355 21.722,-9.355c0.648,-0 1.181,0.532 1.181,1.181l-0.024,-0Zm0,-9.773c0,0.649 -0.532,1.181 -1.181,1.181c-4.33,0 -15.376,2.223 -19.915,8.823c-0.232,0.325 -0.602,0.51 -0.973,0.51c-0.231,-0 -0.463,-0.07 -0.671,-0.209c-0.533,-0.37 -0.672,-1.088 -0.301,-1.621c5.094,-7.433 16.928,-9.842 21.837,-9.842c0.649,0 1.181,0.533 1.181,1.181l0.023,-0.023Zm-1.181,-10.953c0.649,-0 1.181,0.532 1.181,1.181c0,0.648 -0.532,1.181 -1.181,1.181c-6.368,-0 -15.446,2.431 -20.008,9.286c-0.231,0.347 -0.602,0.533 -0.972,0.533c-0.232,-0 -0.44,-0.07 -0.649,-0.209c-0.532,-0.37 -0.694,-1.088 -0.324,-1.621c5.072,-7.619 14.682,-10.328 21.953,-10.328l0,-0.023Zm1.181,-8.592c0,0.649 -0.532,1.181 -1.181,1.181c-9.263,0 -15.839,3.196 -20.123,9.75c-0.232,0.347 -0.603,0.532 -0.973,0.532c-0.209,0 -0.44,-0.069 -0.649,-0.185c-0.532,-0.347 -0.694,-1.088 -0.347,-1.621c4.724,-7.272 11.949,-10.815 22.069,-10.815c0.649,0 1.181,0.533 1.181,1.181l0.023,-0.023Zm-1.181,-10.953c0.649,-0 1.181,0.532 1.181,1.181c0,0.648 -0.532,1.181 -1.181,1.181c-8.684,-0 -14.774,1.667 -20.216,10.212c-0.232,0.348 -0.602,0.533 -0.996,0.533c-0.208,-0 -0.44,-0.07 -0.625,-0.185c-0.556,-0.348 -0.695,-1.066 -0.371,-1.621c5.998,-9.402 12.922,-11.278 22.185,-11.278l0.023,-0.023Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M923.08,653.931l-3.706,0c-0.139,0 -0.717,-0.88 -1.273,-0.88c-2.386,0 -4.585,0.047 -7.017,0.093l-0,-2.941c-0,-0.672 -0.556,-1.227 -1.227,-1.227c-2.71,-0 -5.28,0.069 -7.712,0.208l0,-3.867c0,-0.672 -0.417,-1.228 -1.111,-1.228c-27.72,0 -35.061,10.282 -37.006,15.169c-3.891,-2.895 -16.419,-6.67 -53.749,-6.67c-0.671,0 -1.505,0.556 -1.505,1.228l-0,0.092l-2.617,0c-0.672,0 -1.459,0.556 -1.459,1.228l0,83.598c0,0.672 0.787,1.228 1.459,1.228l116.899,-0c0.672,-0 0.973,-0.556 0.973,-1.228l0,-83.598c0,-0.672 -0.301,-1.228 -0.973,-1.228l0.024,0.023Zm-111.319,1.112c46.501,0.116 51.433,6.415 51.433,7.017l0,72.923c-1.621,-0 -4.099,0.046 -8.082,0.046c-8.73,0 -23.111,-0.139 -42.494,-0.787c-0,-4.933 -0.162,-12.297 -0.278,-21.421c-0.231,-15.469 -0.579,-36.543 -0.579,-57.755l0,-0.023Zm87.953,-8.476l-0,76.559c-21.097,0.834 -30.036,5.072 -34.088,8.522l-0,-69.658c-0,-0.903 3.242,-15.052 34.088,-15.423Zm8.938,81.422c-24.361,0.857 -36.218,3.821 -41.382,5.651c2.825,-2.918 10.838,-7.388 33.764,-8.129c0.648,0 1.111,-0.555 1.111,-1.227l0,-72.645c2.432,-0.116 4.053,-0.186 6.484,-0.209l0,76.559l0.023,0Zm3.034,-72.413c0.185,0.463 0.741,0.787 1.251,0.787l3.821,-0l-0,75.679c-19.476,0.648 -33.556,1.482 -42.124,2.084c6.785,-1.528 17.831,-3.173 35.315,-3.752c0.649,0 1.112,-0.555 1.112,-1.227l-0,-73.571l0.625,-0Zm9.981,81.954l-114.468,0l0,-81.167l2.27,-0c-0,21.096 0.324,41.336 0.555,56.481c0.139,9.888 0.255,17.669 0.255,22.556c0,0.648 0.51,1.204 1.181,1.227c20.008,0.695 34.875,0.903 43.814,0.903l9.425,0c0.024,0 0.047,-0.069 0.093,-0.069c0.162,-0 17.322,-1.83 53.378,-2.988c0.649,0 1.065,-0.602 1.065,-1.25l0,-76.86l2.432,-0l-0,81.167Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M812.687,734.219c19.383,0.648 33.695,0.787 42.425,0.787c3.96,0 6.438,-0.023 8.082,-0.046l0,-72.923c0,-0.603 -4.932,-6.901 -51.433,-7.017c0,21.235 0.371,42.309 0.602,57.755c0.139,9.124 0.301,16.488 0.324,21.42l0,0.024Zm7.712,-69.103c1.25,0 30.73,0.024 37.33,2.571c0.602,0.232 0.903,0.903 0.672,1.505c-0.186,0.463 -0.626,0.741 -1.089,0.741c-0.139,0 -0.278,-0.023 -0.417,-0.069c-6.183,-2.385 -36.172,-2.432 -36.473,-2.432c-0.648,0 -1.181,-0.532 -1.181,-1.181c0,-0.648 0.533,-1.181 1.181,-1.181l-0.023,0.046Zm-0,9.703c1.204,0 29.688,-0.092 37.26,2.339c0.626,0.209 0.95,0.857 0.765,1.482c-0.162,0.487 -0.626,0.811 -1.112,0.811c-0.116,-0 -0.231,-0 -0.347,-0.046c-7.225,-2.316 -36.242,-2.223 -36.543,-2.223c-0.648,0.046 -1.181,-0.51 -1.181,-1.158c0,-0.649 0.51,-1.181 1.158,-1.181l-0,-0.024Zm-0,9.68c1.158,0 28.646,-0.231 37.214,2.108c0.625,0.162 0.996,0.81 0.834,1.435c-0.139,0.533 -0.625,0.857 -1.135,0.857c-0.093,0 -0.208,0 -0.301,-0.046c-8.267,-2.246 -36.311,-2.015 -36.589,-2.015c-0.602,0 -1.181,-0.509 -1.181,-1.158c0,-0.648 0.51,-1.181 1.158,-1.181Zm-0,9.796c1.111,0 27.604,-0.394 37.191,1.829c0.625,0.139 1.019,0.741 0.88,1.39c-0.116,0.533 -0.602,0.88 -1.135,0.88c-0.092,-0 -0.185,0.185 -0.278,0.162c-9.309,-2.154 -36.357,-1.621 -36.612,-1.621c-0.648,-0 -1.158,-0.718 -1.181,-1.343c0,-0.649 0.51,-1.274 1.158,-1.297l-0.023,0Zm-0,9.495c1.088,-0 26.562,-0.44 37.168,1.69c0.625,0.116 1.042,0.764 0.926,1.413c-0.116,0.556 -0.602,0.972 -1.158,0.972c-0.069,0 -0.162,-0.185 -0.231,-0.208c-10.352,-2.084 -36.381,-1.783 -36.659,-1.783c-0.625,-0 -1.158,-0.324 -1.181,-0.973c0,-0.648 0.51,-1.088 1.158,-1.111l-0.023,-0Zm-0,9.703c1.042,-0.024 25.543,-0.556 37.145,1.459c0.648,0.115 1.065,0.741 0.949,1.366c-0.092,0.579 -0.602,0.996 -1.158,0.996c-0.069,-0 -0.139,-0.162 -0.208,-0.186c-11.371,-1.991 -36.427,-1.551 -36.682,-1.551l-0.023,-0c-0.625,-0 -1.158,-0.348 -1.181,-0.996c0,-0.648 0.486,-1.112 1.135,-1.112l0.023,0.024Zm-0,9.772c0.996,-0.023 24.501,-0.741 37.122,1.204c0.648,0.093 1.088,0.695 0.972,1.343c-0.092,0.579 -0.579,0.996 -1.158,0.996l-0.185,0c-12.412,-1.899 -36.45,-1.181 -36.682,-1.181c-0.625,0 -1.181,-0.486 -1.204,-1.135c0,-0.648 0.487,-1.181 1.135,-1.204l-0,-0.023Z" style="fill:#fff;fill-rule:nonzero;"/></g><title>logo-footer</title></svg> </div> <div class="md:py-14"> <div class="h4 text-md font-bold text-primary normal-case mb-6"> About </div> <div class="md:flex md:flex-col" :class="{ 'flex': open, 'hidden': ! open }"> <style>#html-body [data-pb-style=YKHVD6V]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;margin:0;padding:0}#html-body [data-pb-style=UNOQFGY]{margin:0;padding:0}</style><div data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="YKHVD6V"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="UNOQFGY"><ul class="space-y-4"> <li><a href="http://www.opengroup.org/aboutus" target="_blank">The Open Group</a></li> <li><a href="http://blog.opengroup.org/" target="_blank">Our Blog</a></li> <li><a href="https://help.opengroup.org/hc/en-us" target="_blank"> Contact </a></li> </ul></div></div> </div> </div> <div class="md:py-14"> <div class="h4 text-md font-bold text-primary normal-case mb-6"> Help & Information </div> <div class="md:flex md:flex-col" :class="{ 'flex': open, 'hidden': ! open }"> <style>#html-body [data-pb-style=SH2J31G]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;margin:0;padding:0}#html-body [data-pb-style=PRT3XN7]{margin:0;padding:0}</style><div data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="SH2J31G"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="PRT3XN7"><ul class="space-y-4"> <li><a href="/about-member-docs">Member Documents</a></li> <li><a href="/free-documents">Free Documents</a></li> <li><a href="/registration-help">Registration Help</a></li> <li><a href="/privacy-policy-cookie-restriction-mode">Privacy Policy</a></li> <li><a href="/customer/account">Sign In</a></li> <li><a href="/downloadable/customer/products">My Download History</a></li> </ul></div></div> </div> </div> <div class="md:py-14 flex flex-col gap-6 justify-center items-start md:items-end"> <div class="flex gap-4 justify-center"> <a href="https://www.linkedin.com/company/the-open-group/" target="_blank" class="bg-primary rounded-full p-3 hover:text-white" aria-label="LinkedIn Link" > <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" data-prefix="fab" data-icon="linkedin-in" class="w-6 h-6" role="img" viewBox="0 0 448 512" width="24" height="24"> <path fill="currentColor" d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"/> <title>linked-in</title></svg> </a> <a href="https://www.youtube.com/user/theopengroup/videos" target="_blank" class="bg-primary rounded-full p-3 hover:text-white" aria-label="YouTube Link" > <?xml version="1.0" encoding="utf-8"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" focusable="false" x="0px" y="0px" viewBox="0 0 576 512" fill="currentColor" style="enable-background:new 0 0 576 512;" xml:space="preserve" class="w-6 h-6" width="24" height="24" role="img"> <path d="M549.7,124.1c-6.3-23.7-24.8-42.3-48.3-48.6C458.8,64,288,64,288,64S117.2,64,74.6,75.5c-23.5,6.3-42,24.9-48.3,48.6 C14.9,167,14.9,256.4,14.9,256.4s0,89.4,11.4,132.3c6.3,23.6,24.8,41.5,48.3,47.8C117.2,448,288,448,288,448s170.8,0,213.4-11.5 c23.5-6.3,42-24.2,48.3-47.8c11.4-42.9,11.4-132.3,11.4-132.3S561.1,166.9,549.7,124.1z M232.1,337.6V175.2l142.7,81.2L232.1,337.6 L232.1,337.6z"/> <title>youtube</title></svg> </a> <a href="https://twitter.com/i/flow/login?redirect_after_login=%2Ftheopengroup" target="_blank" class="bg-primary rounded-full p-3 hover:text-white" aria-label="Twitter Link" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 512 512" class="w-6 h-6" width="24" height="24" role="img"> <!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--> <path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/> <title>twitter</title></svg> </a> </div> <small class="text-white lg:text-right"> © 2024 The Open Group. All Rights Reserved</small> </div> </div> </div> <div class="flex flex-wrap gap-8 pr-4 w-full lg:w-1/4 md:w-1/2"> </div> <div x-data="{ showBar: false }" x-cloak> <div id="toTop" class="flex gap-4 items-center justify-center bg-blue border border-white shadow leading-none h-14 fixed w-14 z-50 right-4 bottom-20 lg:bottom-4 sm:bottom-8 cursor-pointer text-white rounded-full duration-300 transition-all ease-in-out hover:bg-primary" :class="{ 'block' : showBar, 'hidden' : !showBar }" @scroll.window="showBar = (window.scrollY > 100)"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="3" stroke="currentColor" class="w-8 h-8" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m4.5 15.75 7.5-7.5 7.5 7.5"/> <title>chevron-up</title></svg> </div> </div> <script> { const toTop = document.querySelector('#toTop'); toTop.addEventListener('click', (e) => { e.preventDefault(); window.scroll({ top:0, left:0, behavior: 'smooth'}); }); } </script> </div> </div> </div> </div></footer> <script> function dataServicesShoppingCartContextData() { return { initContext(cartData) { let contextCartItems = []; if (cartData && cartData.items) { cartData.items.forEach(function (item) { contextCartItems.push({ id: item.item_id, formattedPrice: parseFloat(item.product_price_value ? item.product_price_value : 0), quantity: item.qty, product: { productType: item.product_type, productId: item.product_id, name: item.product_name, sku: item.product_sku, mainImageUrl: item.product_image.src }, prices: { price: { value: parseFloat(item.product_price_value ? item.product_price_value : 0) } } }); }); magentoStorefrontEvents.context.setShoppingCart({ id: cartData.dsCartId, totalQuantity: cartData.summary_count, prices: { subtotalExcludingTax: { value: parseFloat(cartData.subtotalAmountExclTax ? cartData.subtotalAmountExclTax : 0) }, subtotalIncludingTax: { value: parseFloat(cartData.subtotalAmount ? cartData.subtotalAmount : 0) } }, items: contextCartItems, possibleOnepageCheckout: cartData.possible_onepage_checkout, giftMessageSelected : false, giftWrappingSelected : false }); } window.dispatchEvent(new Event("shoppingCartContextSet")); } } } </script> <div x-data="dataServicesShoppingCartContextData()" @private-content-loaded.window="initContext($event.detail.data.cart)"></div> <script> (() => { function src_default(Alpine) { Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { let evaluate = evaluateLater(expression); let options = { rootMargin: getRootMargin(modifiers), threshold: getThreshhold(modifiers) }; let observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting === (value === "leave")) return; evaluate(); modifiers.includes("once") && observer.disconnect(); }); }, options); observer.observe(el); cleanup(() => { observer.disconnect(); }); }); } function getThreshhold(modifiers) { if (modifiers.includes("full")) return 0.99; if (modifiers.includes("half")) return 0.5; if (!modifiers.includes("threshold")) return 0; let threshold = modifiers[modifiers.indexOf("threshold") + 1]; if (threshold === "100") return 1; if (threshold === "0") return 0; return Number(`.${threshold}`); } function getLengthValue(rawValue) { let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); return match ? match[1] + (match[2] || "px") : void 0; } function getRootMargin(modifiers) { const key = "margin"; const fallback = "0px 0px 0px 0px"; const index = modifiers.indexOf(key); if (index === -1) return fallback; let values = []; for (let i = 1; i < 5; i++) { values.push(getLengthValue(modifiers[index + i] || "")); } values = values.filter((v) => v !== void 0); return values.length ? values.join(" ").trim() : fallback; } document.addEventListener("alpine:init", () => { window.Alpine.plugin(src_default); }); })(); </script> <script> for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"intersect"})) { document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); } </script> <script> (function () { "use strict"; const hasAlpine = new Promise(resolve => { window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); }); const hasInteract = new Promise(resolve => { (events => { const onInteract = () => { resolve(); events.forEach(type => window.removeEventListener(type, onInteract)); } events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) }); const onIntersect = (el) => { return new Promise(resolve => { const observer = new IntersectionObserver(entries => { for (const entry of entries) { if (entry.isIntersecting) { observer.disconnect() resolve(); } } }, {}); observer.observe(el); }); } function runComponent(el) { hasAlpine.then(() => { el.removeAttribute('x-ignore'); queueMicrotask(() => Alpine.initTree(el)); }); } function initDeferredComponents() { document.querySelectorAll('[x-data][x-defer]').forEach(el => { el.setAttribute('x-ignore', ''); const deferUntil = (el.getAttribute('x-defer') || '').trim(); switch (deferUntil) { case 'interact': hasInteract.then(() => runComponent(el)); break; case 'intersect': onIntersect(el).then(() => runComponent(el)) break; case 'idle': window.requestIdleCallback ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) : setTimeout(() => runComponent(el), 4000); break; case 'eager': runComponent(el); break; default: if (deferUntil.startsWith('event:') && deferUntil.length > 6) { window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); } } }); } window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); })() </script> <script type="module" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_Theme/js/alpine3.min.js" defer crossorigin ></script> <script> 'use strict'; function dispatchMessages(messages, hideAfter) { const messagesEvent = new CustomEvent("messages-loaded", { detail: { messages: messages, hideAfter: hideAfter } }); window.dispatchEvent(messagesEvent); } if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } (function( hyva, undefined ) { hyva.initFormKey = () => { const inputSelector = 'input[name="form_key"]', formKey = hyva.getFormKey(); Array.from(document.querySelectorAll(inputSelector)).map(function (input) { input.value = formKey }); } hyva.initMessages = () => { try { const messages = hyva.getCookie('mage-messages'); window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; dispatchMessages(window.mageMessages); // empty `mage-messages` cookie const skipSetDomain = true; hyva.setCookie('mage-messages','', -1, skipSetDomain); } catch (error) { console.warn('Error parsing Cookie Messages:', error); } } window.addEventListener('DOMContentLoaded', hyva.initFormKey); hyva.alpineInitialized(hyva.initMessages) }( window.hyva = window.hyva || {} )); </script> <script> 'use strict'; { const private_content_key = 'mage-cache-storage'; const private_content_expire_key = 'mage-cache-timeout'; const private_content_version_key = 'private_content_version'; const section_data_ids_key = 'section_data_ids'; const mage_cache_session_id_key = 'mage-cache-sessid'; const last_visited_store_key = 'last_visited_store'; const ttl = 3600; if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } function loadSectionData () { const browserStorage = hyva.getBrowserStorage(); if (!browserStorage) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Please enable LocalStorage in your browser." }] ); return; } try { let isInvalid = false; if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { isInvalid = true; } hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); if (!hyva.getCookie(mage_cache_session_id_key)) { isInvalid = true; browserStorage.removeItem(private_content_key); const skipSetDomain = true; const days = false; hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) } const cookieVersion = hyva.getCookie(private_content_version_key); const storageVersion = browserStorage.getItem(private_content_version_key); if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { isInvalid = true; } const privateContentExpires = browserStorage.getItem(private_content_expire_key); if (privateContentExpires && new Date(privateContentExpires) < new Date()) { browserStorage.removeItem(private_content_key); } if (isInvalid && cookieVersion) { fetchPrivateContent([]); } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); if ( privateContent && privateContentExpires && privateContent.cart && privateContent.customer ) { dispatchPrivateContent(privateContent); } else { fetchPrivateContent([]); } } else { if (document.getElementById('default-section-data')) { const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); dispatchPrivateContent(privateContent); } else { dispatchPrivateContent({}); } } } catch (error) { console.warn('Error retrieving Private Content:', error); } } hyva.alpineInitialized(loadSectionData) window.addEventListener('reload-customer-section-data', loadSectionData); function dispatchPrivateContent(data) { const privateContentEvent = new CustomEvent("private-content-loaded", { detail: { data: data } }); window.dispatchEvent(privateContentEvent); } function fetchPrivateContent(sections) { fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }) .then(response => response.json()) .then( data => { if (data) { try { const browserStorage = hyva.getBrowserStorage(); // merge new data preserving non-invalidated sections const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { delete oldSectionData['checkout-data']; } const newSectionData = Object.assign(oldSectionData, data); dispatchPrivateContent(newSectionData); // don't persist messages, they've been dispatched already if (newSectionData.messages && newSectionData.messages.messages ) { newSectionData.messages.messages = []; } browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); browserStorage.setItem(private_content_expire_key, expiresAt); const newCookieVersion = hyva.getCookie(private_content_version_key); browserStorage.setItem(private_content_version_key, newCookieVersion); // We don't need the section_data_ids in Hyvä, but we store them for compatibility // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout hyva.setCookie( section_data_ids_key, JSON.stringify( Object.keys(data).reduce((sectionDataIds, sectionKey) => { sectionDataIds[sectionKey] = data[sectionKey]['data_id']; return sectionDataIds; }, {}) ), false, true ); } catch (error) { console.warn("Couldn't store privateContent", error); } } } ); } } </script> <script> (() => { document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); })() </script> <script> (events => { const dispatchUserInteractionEvent = () => { events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) window.dispatchEvent(new Event('init-external-scripts')) }; events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) </script> <script> if (HTMLScriptElement.supports && HTMLScriptElement.supports('speculationrules')) { const specScript = document.createElement('script'); specScript.type = 'speculationrules'; specRules = { 'prerender': [{ 'where': { 'and': [ { 'href_matches': '/*.html' }, { 'not': {'selector_matches': '.do-not-prerender'}} ] }, 'eagerness': 'moderate' }] }; specScript.textContent = JSON.stringify(specRules); document.body.append(specScript); } </script> <!--dae8f2e668d7157aa4f937fc6f1780b8--> <script> 'use strict'; function GoogleAnalytics () { let self = this; this.config = { isCookieRestrictionModeEnabled: 0, currentWebsite: 3, cookieName: "user_allowed_save_cookie", ordersTrackingData: [], pageTrackingData: {"optPageUrl":"","isAnonymizedIpActive":false,"accountId":"UA-292260-1"}, } this.initGoogleAnalytics = function () { let allowServices = false, allowedCookies, allowedWebsites; if (self.config.isCookieRestrictionModeEnabled) { allowedCookies = hyva.getCookie(self.config.cookieName); if (allowedCookies !== null) { allowedWebsites = JSON.parse(decodeURIComponent(allowedCookies)); if (allowedWebsites[self.config.currentWebsite] === 1) { allowServices = true; } } } else { allowServices = true; } if (allowServices) { (function (i, s, o, g, r, a, m) { i.GoogleAnalyticsObject = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.defer = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); // Process page info ga('create', self.config.pageTrackingData.accountId, 'auto'); if (self.config.pageTrackingData.isAnonymizedIpActive) { ga('set', 'anonymizeIp', true); } // Process orders data if (self.config.ordersTrackingData.hasOwnProperty('currency')) { ga('require', 'ec', 'ec.js'); ga('set', 'currencyCode', self.config.ordersTrackingData.currency); // Collect product data for GA if (self.config.ordersTrackingData.products) { self.config.ordersTrackingData.products.forEach(function (value) { ga('ec:addProduct', value); }); } // Collect orders data for GA if (self.config.ordersTrackingData.orders) { self.config.ordersTrackingData.orders.forEach(function (value) { ga('ec:setAction', 'purchase', value); }); } ga('send', 'pageview'); } else { // Process Data if not orders ga('send', 'pageview' + self.config.pageTrackingData.optPageUrl); } } }; } window.addEventListener("load", new GoogleAnalytics().initGoogleAnalytics); </script> <script> function initConfigurableOptions(productId, optionConfig) { function findPathParam(key) { const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL; const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); for (let i = 0; i < pathParts.length; i += 2) { if (pathParts[i] === key && pathParts.length > i) { return pathParts[i + 1]; } } } return { optionConfig, productId, itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), allowedAttributeOptions: [], selectedValues: [], init() { this.findAllowedAttributeOptions(); this.$nextTick(() => { if (typeof this.optionConfig.defaultValues === 'object') { for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) { this.changeOption(attributeId, value + ''); } } }); }, findSimpleIndex() { this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); }, calculateSimpleIndexForPartialSelection(selectedValues) { if (selectedValues.length === 0) return 0; let productIndexIds = Object.keys(this.optionConfig.index); Object.keys(this.optionConfig.attributes).forEach((attribute) => { const productsWithAttributeMatch = selectedValues[attribute] ? productIndexIds.filter((productIndex) => { return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] }) : []; productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds }) return productIndexIds[0]; }, calculateSimpleIndexForFullSelection(selectedValues) { const productIndexes = this.optionConfig.index; return Object.keys(productIndexes).find(productIndex => { const productCandidateOptions = productIndexes[productIndex]; for (const productOption in productCandidateOptions) { if ( ! selectedValues[productOption] || selectedValues[productOption] !== productCandidateOptions[productOption] ) { return false; } } return productIndex; }); }, productIndex: 0, findAllowedAttributeOptions() { this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); }, calculateAllowedAttributeOptions(selectedValues) { const allAttributes = this.optionConfig.attributes; const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { return a.position - b.position }); const newAllowedAttributeOptions = []; allAttributesSorted.forEach(attribute => { const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id)); const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr); newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { return !!option.products.find(product => { return availableIndexes.includes(product); }) }); }); return newAllowedAttributeOptions; }, calculateAvailableProductIndexes(selectedOptions) { if (Object.keys(selectedOptions).length === 0) { if (Object.values(this.optionConfig.salable || {}).length) { return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i) } return Object.keys(this.optionConfig.index); } const selectedIds = Object.keys(selectedOptions); if (Object.values(this.optionConfig.salable || {}).length) { const selectedOptionIndexes = selectedIds.map(attrId => { const optionValue = selectedOptions[attrId]; return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] }) return selectedOptionIndexes.reduce((acc, optionIndexes) => { return acc.filter(index => optionIndexes.includes(index)); }); } else { const productIndexes = this.optionConfig.index; return Object.keys(productIndexes).filter(index => { for (const attrId of selectedIds) { if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false } return true }); } }, findAttributeByOptionId(optionId) { for (const attributeId in this.optionConfig.attributes) { const attributeOptions = this.optionConfig.attributes[attributeId].options || []; if (attributeOptions.find(option => option.id === optionId)) { return attributeId; } } }, getAllowedAttributeOptions(attributeId) { return this.allowedAttributeOptions[attributeId] || [] }, getProductIdsForOption(option) { const attributeId = this.findAttributeByOptionId(option.id); const allOptions = this.optionConfig.attributes[attributeId]; const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); return opt && opt.products ? opt.products : []; }, findProductIdsForPartialSelection(optionSelection) { const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { const newCandidates = this.getProductIdsForOption({id: optionId}); return candidates === null ? newCandidates : candidates.filter(productId => newCandidates.includes(productId)); }, null); return candidateProducts || []; }, findCheapestProductForPartialSelection(optionSelection) { const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); return candidateProducts.reduce((cheapest, simpleIdx) => { // in the first iteration we start with simpleIdx as the currently cheapest product if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount ? simpleIdx : cheapest; }, 0) }, findProductIdToUseForOptionPrice(option) { // try to find a product for a complete selection const attributeId = this.findAttributeByOptionId(option.id); const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); // if there is no complete selection, use the cheapest product for the option return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); }, getAttributeOptionLabel(option) { const optionProduct = this.findProductIdToUseForOptionPrice(option); if ((! optionProduct) || (optionProduct === this.productIndex)) { return option.label; } const currentPrice = this.getOptionPriceAdjustmentBasePrice(); if (this.optionConfig.optionPrices[optionProduct]) { const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; if (optionPrice !== currentPrice){ return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); } } return option.label; }, getOptionPriceAdjustmentBasePrice() { if (this.optionConfig.optionPrices[this.productIndex]) { return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount } const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); return this.optionConfig.optionPrices[cheapestForSelection] ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount : this.optionConfig.prices.finalPrice.amount; // default price if no option selection }, clearOptionIfActive(optionId, value) { if (this.selectedValues[optionId] === value) { this.blurLabel() this.changeOption(optionId, '') } }, removeAttrFromSelection(selectedValues, attributeId) { attributeId = parseInt(attributeId); return selectedValues.reduce((newSelection, val, attr) => { if (attr !== attributeId) { newSelection[attr] = val; } return newSelection; }, []); }, changeOption(attributeId, value) { if (value === '') { this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId) } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) { this.selectedValues[attributeId] = value; } this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateGallery(); window.dispatchEvent( new CustomEvent( 'configurable-selection-changed', { detail: { productId: this.productId, optionId: attributeId, value: value, productIndex: this.productIndex, selectedValues: this.selectedValues, candidates: this.findProductIdsForPartialSelection(this.selectedValues), } } ) ); }, calculateIsMinimalPrice() { return ( this.selectedValues.filter(value => !!value).length < Object.keys(this.optionConfig.attributes).length ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; window.dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updateGallery () { if (this.productIndex) { const images = this.optionConfig.images[this.productIndex]; images && window.dispatchEvent(new CustomEvent( "update-gallery", { detail: this.sortImagesByPosition(images) } )); } else { window.dispatchEvent(new Event("reset-gallery")); } }, sortImagesByPosition(images) { return images.sort((x, y) => { return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) }); }, onGetCartData(data) { if (this.productId === '2060') { this.preselectCartItems(data); this.preselectQuerystringItems(); this.preselectLocationHashItems(); } }, preselectCartItems(data) { // pre-select options based on cart data for current (quote) itemId const cart = data && data.cart; if (cart && cart.items) { const cartItem = cart.items.find((item) => { return ( item.item_id === this.itemId && item.product_id === this.productId ) }); if (cartItem && cartItem.options && cartItem.options.length) { cartItem.options.map(option => { this.changeOption(option.option_id, option.option_value); }) } } }, preselectQuerystringItems() { // pre-select option like ?size=167 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code)); }, preselectLocationHashItems() { // pre-select option like #144=167 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id)); }, preselectItemsBasedOnLocation(getLocationValue) { Object.values(this.optionConfig.attributes).map(attribute => { this.changeOption(attribute.id, getLocationValue(attribute)) }); } } } </script> <script> function initSwatchOptions(swatchConfig) { return { swatchConfig, getAttributeSwatchData(attributeId) { const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); return swatchConfig; }, getAllAttributeOptions(attributeId) { return ( this.optionConfig.attributes[attributeId] && this.optionConfig.attributes[attributeId].options ) || [] }, optionIsActive(attributeId, optionId) { // return true if a product with this option is in stock return !!this.getAllowedAttributeOptions(attributeId).find( option => option.id === optionId ) }, optionIsEnabled(attributeId, optionId) { // return true if a product with this option is enabled for (const productId in this.optionConfig.index) { if (this.optionConfig.index[productId][attributeId] === optionId) { return true; } } return false; }, mapSwatchTypeNumberToTypeCode(typeNumber) { switch ("" + typeNumber) { case "1": return "color" case "2": return "image" case "3": return "empty" case "0": default: return "text" } }, getTypeOfFirstOption(attributeId) { for (const optionId in this.swatchConfig[attributeId]) { const option = this.swatchConfig[attributeId][optionId]; if (typeof option.type !== 'undefined') { return this.mapSwatchTypeNumberToTypeCode(option.type); } } }, getVisualSwatchType(attributeId, targetOptionId) { // If a type configuration is present for the given option id, use it const config = this.swatchConfig[attributeId]; if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); } // Otherwise - if no config is present for the target option - use the type of the first option // with a type property from the attribute, thus assuming its the same type as the target option. // (This edge case condition can occur on single swatch products if some options are not salable) return this.getTypeOfFirstOption(attributeId); }, getSwatchType(attributeId, optionId) { // Deserialize the attribute details the first time they are used if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); } const type = this.swatchConfig[attributeId] && this.swatchConfig[attributeId].details && this.swatchConfig[attributeId].details.swatch_input_type || "empty"; return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; }, isTextSwatch(attributeId, optionId) { return this.getSwatchType(attributeId, optionId) === 'text'; }, isVisualSwatch(attributeId, optionId) { const type = this.getSwatchType(attributeId, optionId); return ['image', 'color'].includes(type); }, getSwatchBackgroundStyle(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); const type = this.getSwatchType(attributeId, optionId); if (type === "color") { return 'background-color:' + config.value; } else if (type === "image") { return "background: #ffffff url('" + config.value + "') no-repeat center"; } else { return ''; } }, getSwatchText(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); }, getOptionLabelFromOptionConfig(attributeId, optionId) { // Fallback if no value is present in swatchConfig data // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190 const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); return option && option[0] && option[0].label ||''; }, getSwatchConfig(attributeId, optionId) { return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] ? this.swatchConfig[attributeId][optionId] : false; }, activeTooltipItem: false, tooltipPositionElement: false, isTooltipVisible() { return this.activeTooltipItem && this.getSwatchConfig( this.activeTooltipItem.attribute, this.activeTooltipItem.item ); }, isFirstItemCol() { return this.activeTooltipItem.index === 0; }, getTooltipImageStyle(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); const type = this.getSwatchType(attributeId, optionId); if (type === "color") { return 'background-color:' + config.value + '; width: 110px; height: 90px;'; } else if (type === "image") { return "background: #ffffff url('" + config.thumb + "') center center no-repeat; width: 110px; height: 90px;"; } else { return 'display:none'; } }, getTooltipPosition() { return this.tooltipPositionElement ? `top: ${this.tooltipPositionElement.offsetTop}px;` + `left: ${ this.tooltipPositionElement.offsetLeft - ( this.tooltipPositionElement.closest('.snap') && this.tooltipPositionElement.closest('.snap').scrollLeft || 0 ) }px;` : '' }, getTooltipLabel() { return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label }, focusedLabel: false, focusLabel(optionId) { this.focusedLabel = optionId; }, blurLabel() { this.focusedLabel = false; }, showSwatches: false, initShowSwatchesIntersect() { if ('IntersectionObserver' in window && !window.scrollY) { let io = new IntersectionObserver( entries => { entries.map(entry => { if (entry.isIntersecting) { this.showSwatches = true; io.unobserve(this.$root); } }) } ); io.observe(this.$root); } else { this.showSwatches = true } } } } </script> <script> 'use strict'; (function () { const modals = []; const excludedFromFocusTrapping = new Set(); function trapFocusInNextModalWithOverlay() { for (let idx = modals.length -1; idx >= 0; idx--) { const nextOnStack = modals[idx]; const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; if (! isOverlayDisabled(nextDialogElement)) { hyva.trapFocus(nextDialogElement); break; } } } function focusables(dialogElement) { const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; return Array.from(dialogElement.querySelectorAll(selector)) .filter(el => !el.hasAttribute('disabled')); } function firstVisible(elements) { const a = Array.from(elements); for (let i = 0; i < a.length; i++) { if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; } return null; } function isInViewport(element) { const rect = element && element.getBoundingClientRect(); return rect && rect.top >= 0 && rect.left >= 0 && rect.right <= window.innerWidth && rect.bottom <= window.innerHeight; } function setFocusAfterTransition(dialogElement, duration) { const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); next: for (let candidate of candidates) { for (let child of nested) { if (child.contains(candidate)) continue next; } setTimeout(() => candidate.focus(), 50); break; } window.setTimeout(() => { const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || focusables(dialogElement)[0] || null; focusElement && isInViewport(focusElement) && focusElement.focus(); }, Math.max(1, duration)); } function determineTrigger($refs, dialog, trigger) { if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { return dialog.target; } if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { return trigger.target; } if (typeof trigger === 'string') { try { return $refs[trigger] || document.querySelector(trigger) } catch (e) {} } if (trigger instanceof Element) { return trigger; } return null; } function isOverlayDisabled(dialog) { return dialog && dialog.hasAttribute('x-no-overlay') } function areRemainingModalsWithoutOverlay(modals) { const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); return overflowDisabled.length === modals.length; } window.hyva.modal = function(options) { const config = Object.assign({ dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', transitionEnterStart: 'opacity-0', transitionEnterEnd: 'opacity-100', transitionLeave: 'transition ease-in duration-300', transitionLeaveStart: 'opacity-100', transitionLeaveEnd: 'opacity-0', }, options); let lastHide = 0; return { opened: {}, show(dialog, trigger) { const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); const name = typeof dialog === 'string' ? dialog : config.dialog; const dialogElement = this.$refs[name]; if (! dialogElement) { return; } const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); dialogElement.scrollTop = 0; if (this.opened[name]) { return; } if (focusTargetAfterHide) { focusTargetAfterHide.setAttribute('aria-expanded', 'true'); } this.opened[name] = true; useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); setFocusAfterTransition(dialogElement, config.duration); const frame = {name, instance: this, focusTarget: focusTargetAfterHide, time: Date.now()}; modals.push(frame); if (useOverlay) { document.body.classList.add('overflow-hidden'); } return new Promise(resolve => frame.resolve = resolve); }, cancel() { this.hide(false); }, ok() { this.hide(true); }, hide(value) { if (Date.now() - lastHide < config.duration) { return; } lastHide = Date.now(); const modal = modals.pop() || {}; const name = modal.name; this.opened[name] = false; hyva.releaseFocus(modal.instance.$refs[modal.name]) trapFocusInNextModalWithOverlay(); const nextFocusAfterHide = modal.focusTarget; nextFocusAfterHide && setTimeout(() => { nextFocusAfterHide.setAttribute('aria-expanded', 'false'); nextFocusAfterHide.focus() }, config.duration); if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { document.body.classList.remove('overflow-hidden'); } modal.resolve(value); }, overlay(dialog) { const name = typeof dialog === 'string' ? dialog : config.dialog; return { ['x-show']() { return this.opened[name] }, ['x-transition:enter']: config.transitionEnter, ['x-transition:enter-start']: config.transitionEnterStart, ['x-transition:enter-end']: config.transitionEnterEnd, ['x-transition:leave']: config.transitionLeave, ['x-transition:leave-start']: config.transitionLeaveStart, ['x-transition:leave-end']: config.transitionLeaveEnd, ['@hyva-modal-show.window'](event) { event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) } }; } }; } window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] window.hyva.modal.pop = function () { if (modals.length > 0) { const modal = modals[modals.length -1]; modal.instance.hide(); } } window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { typeof selectors === 'string' || selectors instanceof String ? excludedFromFocusTrapping.add(selectors) : selectors.map(selector => excludedFromFocusTrapping.add(selector)); } window.hyva.modal.eventListeners = { keydown: event => { if (event.key === 'Escape') { window.hyva.modal.pop(); } }, click: event => { if (modals.length > 0) { const modal = modals[modals.length -1]; const dialog = modal.instance.$refs[modal.name]; if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago ! isOverlayDisabled(dialog) && // if dialog has overlay ! dialog.contains(event.target)) { // if click is outside of dialog modal.instance.hide(); } } } }; document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); document.addEventListener('click', window.hyva.modal.eventListeners.click); })(); </script> <script> 'use strict'; const grecaptchaV2LoadCallbacks = []; function executeRecaptchaLoadCallbacks () { while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { const callback = grecaptchaV2LoadCallbacks.pop(); typeof callback === 'string' ? window[callback]() : callback(); } } (function() { const loadRecaptchaScript = (event) => { if (window.grecaptcha || !event.target.form) { return; } const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; const siteKey = '6LdGOqApAAAAAIS2sUz5vjZ\u002DLJa9y95j02KWYwnW'; const script = document.createElement('script'); script.type = 'text/javascript'; script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; script.async = true; document.head.appendChild(script); script.addEventListener('load', () => { Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); }); } window.forceLoadRecaptchaScript = (form) => { loadRecaptchaScript({target: {form: form || 'dummy'}}); executeRecaptchaLoadCallbacks(); }; document.body.addEventListener('input', loadRecaptchaScript, { once: true }); document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); }()); </script> <script> if (HTMLScriptElement.supports && HTMLScriptElement.supports('speculationrules')) { const specScript = document.createElement('script'); specScript.type = 'speculationrules'; specRules = { "prerender": [{ "where": { "or": [ { "href_matches": "/" }, { "href_matches": "/*.html" }, { "href_matches": "/*" }, ], }, "eagerness": "moderate" }] }; specScript.textContent = JSON.stringify(specRules); document.body.append(specScript); } </script> <script defer> 'use strict'; (() => { const equalizeButtonWidths = (buttons) => { const buttonList = buttons.querySelectorAll('[data-element="link"], [data-element="empty_link"]'); let buttonMinWidth = 0; buttonList.forEach(button => { const buttonWidth = button.offsetWidth; if (buttonWidth > buttonMinWidth) { buttonMinWidth = buttonWidth; } }); buttonList.forEach(button => { button.style.minWidth = `${buttonMinWidth}px`; }); }; window.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('[data-content-type="buttons"][data-same-width="true"]').forEach(buttons => { equalizeButtonWidths(buttons); }); }); })(); </script> <script defer> 'use strict'; (() => { const initCarousels = (elements) => { if (!Glider) { return; } const initProductCarousel = (carousel) => { const gliderElement = carousel.querySelector('[data-role="glider-content"]'); if (!gliderElement) { return; } const gliderDots = carousel.querySelector('.glider-dots'); const gliderPrev = carousel.querySelector('.glider-prev'); const gliderNext = carousel.querySelector('.glider-next'); const glider = new Glider(gliderElement, { slidesToShow: 2, slidesToScroll: 2, scrollLock: true, draggable: true, dragVelocity: 2.5, dots: gliderDots, arrows: { prev: gliderPrev, next: gliderNext, }, responsive: [ { breakpoint: 768, settings: { slidesToShow: 3, slidesToScroll: 3, } }, { breakpoint: 1024, settings: { slidesToShow: 4, slidesToScroll: 4, } }, ], }); carousel.classList.remove('overflow-x-scroll'); gliderPrev.classList.remove('hidden'); gliderNext.classList.remove('hidden'); if (carousel.dataset.autoplay !== 'false') { gliderAutoplay( glider, carousel.dataset.autoplaySpeed, carousel.dataset.infiniteLoop ); } }; const initSliderCarousel = (slider) => { slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; slider.classList.add('glider-contain'); slider.insertAdjacentHTML( 'beforeend', '\u000A\u003Cdiv\u0020class\u003D\u0022carousel\u002Dnav\u0020flex\u0020items\u002Dcenter\u0020justify\u002Dcenter\u0020flex\u002D1\u0020p\u002D4\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Previous\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dprev\u0020w\u002D8\u0020h\u002D8\u0020mr\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020viewBox\u003D\u00220\u00200\u00201024\u00201024\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Cpath\u0020class\u003D\u0022path1\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020d\u003D\u0022M716.8\u00201024c6.552\u00200\u002013.102\u002D2.499\u002018.101\u002D7.499\u00209.998\u002D9.997\u00209.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203l\u002D442.698\u002D442.698\u0020442.698\u002D442.699c9.998\u002D9.997\u00209.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203s\u002D26.206\u002D9.998\u002D36.203\u00200l\u002D460.8\u0020460.8c\u002D9.998\u00209.997\u002D9.998\u002026.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002036.203l460.8\u0020460.8c5\u00205\u002011.55\u00207.499\u002018.102\u00207.499z\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fpath\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u0020\u0020\u0020\u0020\u003Cdiv\u0020role\u003D\u0022tablist\u0022\u0020class\u003D\u0022glider\u002Ddots\u0020select\u002Dnone\u0020flex\u0020flex\u002Dwrap\u0020mx\u002D1\u0020justify\u002Dcenter\u0020p\u002D0\u0020focus\u003Aoutline\u002Dnone\u0022\u003E\u003C\u002Fdiv\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Next\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dnext\u0020w\u002D8\u0020h\u002D8\u0020ml\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020viewBox\u003D\u00220\u00200\u00201024\u00201024\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Cpath\u0020class\u003D\u0022path1\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020d\u003D\u0022M256\u00201024c\u002D6.552\u00200\u002D13.102\u002D2.499\u002D18.101\u002D7.499\u002D9.998\u002D9.997\u002D9.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203l442.698\u002D442.698\u002D442.698\u002D442.699c\u002D9.998\u002D9.997\u002D9.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203s26.206\u002D9.998\u002036.203\u00200l460.8\u0020460.8c9.998\u00209.997\u00209.998\u002026.206\u00200\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u002036.203l\u002D460.8\u0020460.8c\u002D5\u00205\u002D11.55\u00207.499\u002D18.102\u00207.499z\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fpath\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u003C\u002Fdiv\u003E\u000A' ); const gliderElement = slider.querySelector('[data-role="glider-content"]'); const gliderDots = slider.querySelector('.glider-dots'); const gliderPrev = slider.querySelector('.glider-prev'); const gliderNext = slider.querySelector('.glider-next'); const glider = new Glider(gliderElement, { slidesToShow: 1, slidesToScroll: 1, scrollLock: true, scrollLockDelay: 250, draggable: true, dragVelocity: 2.5, dots: gliderDots, arrows: { prev: gliderPrev, next: gliderNext, }, }); slider.classList.add('glider-initialized'); if (slider.dataset.showArrows === 'true') { gliderPrev.classList.remove('hidden'); gliderNext.classList.remove('hidden'); } if (slider.dataset.autoplay !== 'false') { gliderAutoplay( glider, slider.dataset.autoplaySpeed, slider.dataset.infiniteLoop ); } }; const gliderAutoplay = (glider, milliseconds, loop) => { const pagesCount = glider.track.childElementCount; let slideTimeout = null; let nextIndex = 1; let paused = false; const slide = () => { slideTimeout = setTimeout( () => { if (loop && nextIndex >= pagesCount) { nextIndex = 0; } glider.scrollItem(nextIndex); }, parseInt(milliseconds) ); }; glider.ele.addEventListener('glider-animated', () => { nextIndex = glider.slide + glider.opt.slidesToScroll; window.clearInterval(slideTimeout); if (!paused && (loop || nextIndex < pagesCount)) { slide(); } }); const pause = () => { if (!paused) { clearInterval(slideTimeout); paused = true; } }; const unpause = () => { if (paused) { slide(); paused = false; } }; glider.ele.parentElement.addEventListener('mouseover', pause, {passive: true}); glider.ele.parentElement.addEventListener('touchstart', pause, {passive: true}); glider.ele.parentElement.addEventListener('mouseout', unpause, {passive: true}); glider.ele.parentElement.addEventListener('touchend', unpause, {passive: true}); slide(); }; elements.forEach(element => { if (element.dataset.contentType === 'products') { initProductCarousel(element); } if (element.dataset.contentType === 'slider') { initSliderCarousel(element); } }); }; window.addEventListener('DOMContentLoaded', () => { const carouselElements = document.querySelectorAll( `[data-content-type="products"][data-appearance="carousel"], [data-content-type="slider"]` ); if (carouselElements.length > 0) { const script = document.createElement('script'); script.type = 'text/javascript'; script.addEventListener('load', () => { initCarousels(carouselElements); }); document.head.appendChild(script); } }); })(); </script> <script defer> 'use strict'; (() => { const initMaps = (elements) => { const renderMap = (element) => { const dataLocations = element.dataset.locations; // Hide map if no locations set if (!dataLocations || dataLocations === '[]') { element.classList.add('hidden'); return; } const map = new google.maps.Map( element, getMapOptions( element.dataset.showControls !== 'true', element.dataset.showControls === 'true' ) ); const locations = JSON.parse(dataLocations); const latitudeLongitudeBounds = new google.maps.LatLngBounds(); const bounds = []; locations.forEach(location => { const position = { lat: parseFloat(location.position.latitude), lng: parseFloat(location.position.longitude), }; bounds.push(position); const infowindow = new google.maps.InfoWindow({ content: getInfoWindowContent(location), }); const marker = new google.maps.Marker({ position: position, map, title: location.location_name, }); marker.addListener('click', () => { infowindow.open(map, marker); }); }); // Set bounds if multiple locations if (bounds.length > 1) { bounds.forEach(function (bound) { latitudeLongitudeBounds.extend(bound); }); map.fitBounds(latitudeLongitudeBounds); } // Center if single location if (bounds.length === 1) { map.setCenter(bounds[0]); } }; const getMapOptions = (disableDefaultUI, mapTypeControl) => { const style = ''; return { zoom: 8, scrollwheel: false, disableDoubleClickZoom: false, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DEFAULT, }, styles: style ? JSON.parse(style) : [], disableDefaultUI: disableDefaultUI, mapTypeControl: mapTypeControl, }; }; const getInfoWindowContent = (location) => { const title = location.location_name ? `<h3 class="text-2xl font-medium text-gray-900 title-font">${location.location_name}</h3>` : ''; const comment = location.comment ? `<p class="px-1 pt-3 text-primary">${location.comment}</p>` : ''; const phone = location.phone ? `<p class="px-1 pt-3 text-primary">Phone: ${location.phone}</p>` : ''; const street = location.address ? `${location.address}<br/>` : ''; const city = location.city ? `${location.city}<br/>` : ''; const state = location.state ? `${location.state}<br/>` : ''; const zipCode = location.zipcode ? `${location.zipcode}<br/>` : ''; const country = location.country ? location.country : ''; return `<div> ${title} ${comment} ${phone} <p class="px-1 pt-3 text-primary"> ${street} ${city} ${state} ${zipCode} ${country} </p> </div>`; }; const hideAllMaps = () => { document.querySelectorAll('[data-content-type="map"]').forEach(element => { element.classList.add('hidden'); }); }; window.gm_authFailure = () => { hideAllMaps(); }; if (typeof google.maps === 'undefined') { hideAllMaps(); return; } elements.forEach(element => { if (element.dataset.contentType === 'map') { renderMap(element); } }); }; window.addEventListener('DOMContentLoaded', () => { const mapElements = document.querySelectorAll('[data-content-type="map"]'); if (mapElements.length > 0) { const script = document.createElement('script'); script.type = 'text/javascript'; script.addEventListener('load', () => { initMaps(mapElements); }); script.src = 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D'; document.head.appendChild(script); } }); })(); </script> <script defer> 'use strict'; (() => { const initParallaxImage = (element) => { if (!window.jarallax) { return; } element.classList.add('jarallax'); element.dataset.jarallax = ''; const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; const elementStyle = window.getComputedStyle(element); window.jarallax(element, { imgPosition: elementStyle.backgroundPosition || '50% 50%', imgRepeat: elementStyle.backgroundRepeat || 'no-repeat', imgSize: elementStyle.backgroundSize || 'cover', speed: parallaxSpeed, }); }; const initVideoBackground = (element) => { if (!window.jarallax) { return; } let slider = null; if (element.classList.contains('pagebuilder-slide-wrapper')) { const viewportElement = document.createElement('div'); slider = element.closest('[data-content-type=slider]'); viewportElement.classList.add('jarallax-viewport-element'); element.dataset.elementInViewport = '.jarallax-viewport-element'; element.appendChild(viewportElement); } element.classList.add('jarallax'); element.dataset.jarallax = ''; const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; window.jarallax(element, { imgSrc: element.dataset.videoFallbackSrc, speed: parallaxSpeed, videoLoop: element.dataset.videoLoop, videoPlayOnlyVisible: element.dataset.videoPlayOnlyVisible, videoLazyLoading: element.dataset.videoLazyLoad, disableVideo: false, elementInViewport: element.dataset.elementInViewport && element.querySelector(element.dataset.elementInViewport), }); if (slider) { if (slider.dataset.afterChangeIsSet) { return; } slider.addEventListener('glider-loaded', () => { slider.querySelectorAll('.jarallax').forEach(videoSlide => { videoSlide.jarallax && videoSlide.jarallax.onScroll(); }); }); slider.addEventListener('glider-animated', () => { slider.querySelectorAll('.jarallax').forEach(videoSlide => { videoSlide.jarallax && videoSlide.jarallax.onScroll(); }); }); slider.dataset.afterChangeIsSet = true; } }; window.addEventListener('DOMContentLoaded', () => { const parallaxImageElements = document.querySelectorAll( `[data-content-type="row"][data-background-type="image"][data-enable-parallax="1"], [data-content-type="row"] > [data-background-type="image"][data-enable-parallax="1"]` ); const videoBackgroundsElements = document.querySelectorAll( `[data-content-type="row"][data-background-type="video"][data-enable-parallax="1"], [data-content-type="row"] > [data-background-type="video"][data-enable-parallax="1"], [data-content-type="banner"] [data-background-type="video"], [data-content-type="slide"] [data-background-type="video"]` ); if (parallaxImageElements.length > 0 || videoBackgroundsElements.length > 0) { const jarallaxScript = document.createElement('script'); jarallaxScript.type = 'text/javascript'; jarallaxScript.addEventListener('load', () => { parallaxImageElements.forEach(row => { initParallaxImage(row); }); const jarallaxVideoScript = document.createElement('script'); jarallaxVideoScript.type = 'text/javascript'; jarallaxVideoScript.addEventListener('load', () => { videoBackgroundsElements.forEach(element => { initVideoBackground(element); }); }); jarallaxVideoScript.src = 'https\u003A\u002F\u002Fpublications.opengroup.org\u002Fstatic\u002Fversion1732013752\u002Ffrontend\u002FOpengroup\u002Fpublications\u002Fen_GB\u002FFoundationCommerce_HyvaPageBuilder\u002Fjs\u002Fjarallax\u002Dvideo.min.js'; document.head.appendChild(jarallaxVideoScript); }); jarallaxScript.src = 'https\u003A\u002F\u002Fpublications.opengroup.org\u002Fstatic\u002Fversion1732013752\u002Ffrontend\u002FOpengroup\u002Fpublications\u002Fen_GB\u002FFoundationCommerce_HyvaPageBuilder\u002Fjs\u002Fjarallax.min.js'; document.head.appendChild(jarallaxScript); } }); })(); </script> <script defer> 'use strict'; (() => { const applyShowOnHover = (element) => { const showOverlayOnHover = (element) => { const overlay = element.querySelector('.pagebuilder-overlay'); const color = overlay.dataset.overlayColor; element.addEventListener('mouseover', () => { overlay.style.backgroundColor = color; }); element.addEventListener('mouseout', () => { overlay.style.backgroundColor = 'transparent'; }); }; const showButtonOnHover = (element) => { const button = element.querySelector('.pagebuilder-banner-button'); element.addEventListener('mouseover', () => { button.style.opacity = '1'; button.style.visibility = 'visible'; }); element.addEventListener('mouseout', () => { button.style.opacity = '0'; button.style.visibility = 'hidden'; }); }; if (element.dataset.showOverlay === 'hover') { showOverlayOnHover(element); } if (element.dataset.showButton === 'hover') { showButtonOnHover(element); } }; window.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { applyShowOnHover(element); }); }); })(); </script> <script defer> 'use strict'; (() => { document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); }); document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { const tabLink = tabHeader.querySelector('a'); const tabId = tabLink.getAttribute('href').replace('#', ''); tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); if (index === defaultActiveTab) { tab.setAttribute('x-data', `{ tab: '${tabId}' }`); } }); }); })(); </script> <script defer> 'use strict'; (() => { const initLiteYTVideo = () => { class LiteYTEmbed extends HTMLElement { connectedCallback() { this.videoId = this.getAttribute('videoid'); let playBtnEl = this.querySelector('.lty-playbtn'); // A label for the button takes priority over a [playlabel] attribute on the custom-element this.playLabel = (playBtnEl && playBtnEl.textContent.trim()) || this.getAttribute('playlabel') || 'Play'; /** * Lo, the youtube placeholder image! (aka the thumbnail, poster image, etc) * * See https://github.com/paulirish/lite-youtube-embed/blob/master/youtube-thumbnail-urls.md * * TODO: Do the sddefault->hqdefault fallback * - When doing this, apply referrerpolicy (https://github.com/ampproject/amphtml/pull/3940) * TODO: Consider using webp if supported, falling back to jpg */ if (!this.style.backgroundImage) { this.style.backgroundImage = `url("https://i.ytimg.com/vi/${this.videoId}/hqdefault.jpg")`; } // Set up play button, and its visually hidden label if (!playBtnEl) { playBtnEl = document.createElement('button'); playBtnEl.type = 'button'; playBtnEl.classList.add('lty-playbtn'); this.append(playBtnEl); } if (!playBtnEl.textContent) { const playBtnLabelEl = document.createElement('span'); playBtnLabelEl.className = 'lyt-visually-hidden'; playBtnLabelEl.textContent = this.playLabel; playBtnEl.append(playBtnLabelEl); } // On hover (or tap), warm up the TCP connections we're (likely) about to use. this.addEventListener('pointerover', LiteYTEmbed.warmConnections, {once: true}); // Once the user clicks, add the real iframe and drop our play button // TODO: In the future we could be like amp-youtube and silently swap in the iframe during idle time // We'd want to only do this for in-viewport or near-viewport ones: https://github.com/ampproject/amphtml/pull/5003 this.addEventListener('click', this.addIframe); // Chrome & Edge have no problem with the basic YouTube Embed with ?autoplay=1 // However Safari and Firefox do not successfully track the user gesture of clicking through the creation/loading of the iframe, // so they don't autoplay automatically. Instead we must load an additional 300KB (ungz) of JS for the YT Player API // TODO: chrome android seems to also need this this.needsYTApiForAutoplay = navigator.vendor.includes('Apple') || navigator.userAgent.includes('Firefox'); } // // TODO: Support the the user changing the [videoid] attribute // attributeChangedCallback() { // } /** * Add a <link rel={preload | preconnect} ...> to the head */ static addPrefetch(kind, url, as) { const linkEl = document.createElement('link'); linkEl.rel = kind; linkEl.href = url; if (as) { linkEl.as = as; } document.head.append(linkEl); } /** * Begin pre-connecting to warm up the iframe load * Since the embed's network requests load within its iframe, * preload/prefetch'ing them outside the iframe will only cause double-downloads. * So, the best we can do is warm up a few connections to origins that are in the critical path. * * Maybe `<link rel=preload as=document>` would work, but it's unsupported: http://crbug.com/593267 * But TBH, I don't think it'll happen soon with Site Isolation and split caches adding serious complexity. */ static warmConnections() { if (LiteYTEmbed.preconnected) return; // The iframe document and most of its subresources come right off youtube.com LiteYTEmbed.addPrefetch('preconnect', 'https://www.youtube-nocookie.com'); // The botguard script is fetched off from google.com LiteYTEmbed.addPrefetch('preconnect', 'https://www.google.com'); // Not certain if these ad related domains are in the critical path. Could verify with domain-specific throttling. LiteYTEmbed.addPrefetch('preconnect', 'https://googleads.g.doubleclick.net'); LiteYTEmbed.addPrefetch('preconnect', 'https://static.doubleclick.net'); LiteYTEmbed.preconnected = true; } fetchYTPlayerApi() { if (window.YT || (window.YT && window.YT.Player)) return; this.ytApiPromise = new Promise((res, rej) => { var el = document.createElement('script'); el.src = 'https://www.youtube.com/iframe_api'; el.async = true; el.onload = _ => { YT.ready(res); }; el.onerror = rej; this.append(el); }); } async addYTPlayerIframe(params) { this.fetchYTPlayerApi(); await this.ytApiPromise; const videoPlaceholderEl = document.createElement('div') this.append(videoPlaceholderEl); const paramsObj = Object.fromEntries(params.entries()); new YT.Player(videoPlaceholderEl, { width: '100%', videoId: this.videoId, playerVars: paramsObj, events: { 'onReady': event => { event.target.playVideo(); } } }); } async addIframe(){ if (this.classList.contains('lyt-activated')) return; this.classList.add('lyt-activated'); const params = new URLSearchParams(this.getAttribute('params') || []); params.append('autoplay', '1'); params.append('playsinline', '1'); if (this.needsYTApiForAutoplay) { return this.addYTPlayerIframe(params); } const iframeEl = document.createElement('iframe'); iframeEl.width = 560; iframeEl.height = 315; // No encoding necessary as [title] is safe. https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html#:~:text=Safe%20HTML%20Attributes%20include iframeEl.title = this.playLabel; iframeEl.allow = 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture'; iframeEl.allowFullscreen = true; // AFAIK, the encoding here isn't necessary for XSS, but we'll do it only because this is a URL // https://stackoverflow.com/q/64959723/89484 iframeEl.src = `https://www.youtube-nocookie.com/embed/${encodeURIComponent(this.videoId)}?${params.toString()}`; this.append(iframeEl); // Set focus for a11y iframeEl.focus(); } } // Register custom element customElements.define('lite-youtube', LiteYTEmbed); }; window.addEventListener('DOMContentLoaded', () => { const videoList = document.querySelectorAll('[data-content-type="yt_lite_video"]'); if (videoList.length) { initLiteYTVideo(); } }); })(); </script> <script> "use strict"; window.addEventListener('load', function () { magentoStorefrontEvents.context.setPage({ pageType: "Product" }); magentoStorefrontEvents.context.setContext("pageExtended", { action: "product-view" }); magentoStorefrontEvents.context.setProduct({"productId":2060,"name":"Additional APIs for the Base Specifications Issue 8, Part 2","sku":"C228","topLevelSku":"C228","specialFromDate":null,"specialToDate":null,"newFromDate":"2022-11-30 23:13:41","newToDate":null,"createdAt":"2022-11-27 17:09:22","updatedAt":"2022-12-01 07:13:41","categories":["26","60"],"productType":"downloadable","pricing":{"regularPrice":null,"minimalPrice":null,"specialPrice":null},"canonicalUrl":"https:\/\/publications.opengroup.org\/c228?___store=publications","mainImageUrl":"https:\/\/publications.opengroup.org\/media\/catalog\/product\/u\/n\/unix-logo_11_1_1.png"}) // Local storage key constant const USER_VIEW_HISTORY_TIME_DECAY_KEY = 'ds-view-history-time-decay'; const product = magentoStorefrontEvents.context.getProduct(); if (product && product.sku) { const productPageViewContext = { date: new Date().toISOString(), sku: product.sku, }; // if sku is not in viewHistorySkus // write to view_history_decay try { let viewHistory = JSON.parse( localStorage.getItem(USER_VIEW_HISTORY_TIME_DECAY_KEY), ); if (!viewHistory) { const updatedViewHistory = [productPageViewContext]; localStorage.setItem( USER_VIEW_HISTORY_TIME_DECAY_KEY, JSON.stringify(updatedViewHistory), ); } else { const productIndex = viewHistory.findIndex( viewedProduct => viewedProduct.sku === product.sku, ); if (productIndex === -1) { const updatedViewHistory = [...viewHistory, productPageViewContext]; localStorage.setItem( USER_VIEW_HISTORY_TIME_DECAY_KEY, JSON.stringify(updatedViewHistory), ); // has been viewed before } else if (productIndex >= 0) { // remove current value in viewHistory, // and add the new value viewHistory.splice(productIndex, 1, productPageViewContext); localStorage.setItem( USER_VIEW_HISTORY_TIME_DECAY_KEY, JSON.stringify(viewHistory), ); } } } catch (e) { console.error(e); } } magentoStorefrontEvents.publish.productPageView(); }); </script> <div x-data="dataServicesAddToCartTracking()" @private-content-loaded.window="checkIfProductIsAddedToBasket($event.detail.data)"></div> <script> window.addEventListener('productAddToCart', function(event) { const browserStorage = hyva.getBrowserStorage(); const product = JSON.parse(browserStorage.getItem('dataservices_product_context')); let shoppingCart = magentoStorefrontEvents.context.getShoppingCart(); let changedProducts = event.detail; magentoStorefrontEvents.context.setProduct(product); if (changedProducts.length > 0) { magentoStorefrontEvents.context.setShoppingCart(shoppingCart); magentoStorefrontEvents.context.setChangedProducts({ items: createCartItems(changedProducts), }); magentoStorefrontEvents.publish.addToCart(); } function getConfigurableOptions(item) { return item.options.map((function(item) { return { id: item.option_id, optionLabel: item.label, valueId: parseInt(item.option_value), valueLabel: item.value } } )) } function getCartItemPrice(cartItem) { const productPrice = cartItem.product_price_value; if (productPrice && productPrice.hasOwnProperty('excl_tax')) { return Number(parseFloat(productPrice.excl_tax).toFixed(2)); } else { return Number(parseFloat(productPrice).toFixed(2)); } } function createCartItems(productList) { if (!Array.isArray(productList)) { console.error('Expected an array for productList, received:', productList); return []; } return productList.map((item) => ({ id: item.item_id, formattedPrice: getCartItemPrice(item), quantity: item.qty, canApplyMsrp: item.canApplyMsrp, configurableOptions: getConfigurableOptions(item), product: { productType: item.product_type, productId: item.product_id, name: item.product_name, sku: item.product_sku, topLevelSku: item.topLevelSku, mainImageUrl: item.product_image.src, }, prices: { price: { value: getCartItemPrice(item), }, }, })); } }); function dataServicesAddToCartTracking() { return { checkIfProductIsAddedToBasket: function (data) { const browserStorage = hyva.getBrowserStorage(); if (!browserStorage || !data.cart) { return; } let cartSummaryCount = data.cart.summary_count || 0; let storageSummaryCount = parseInt(browserStorage.getItem('cart_summary_count'), 10) || 0; browserStorage.setItem('cart_summary_count', cartSummaryCount); browserStorage.setItem('dataservices_product_context', JSON.stringify(data.cart.dataservices_product_context)); let storedData = browserStorage.getItem("mage-cache-storage"); let browserStorageCartItems = storedData ? JSON.parse(storedData).cart && JSON.parse(storedData).cart.items : []; let dataCartItems = data.cart.items || []; if (cartSummaryCount > storageSummaryCount) { const results = this.findChangedItems(browserStorageCartItems, dataCartItems); window.dispatchEvent(new CustomEvent("productAddToCart", { detail: results })); } }, findChangedItems: function (oldItems, newItems) { let changes = []; newItems.forEach(newItem => { const oldItem = oldItems.find(old => old.item_id === newItem.item_id); if (!oldItem || oldItem.qty !== newItem.qty) { changes.push(newItem); } }); return changes; } } } </script> <script> function adobeProductRecsDataFetcher() { "use strict"; return { pagePreconfiguredDeferred: {}, productBanners: '', fetchData: function () { let self = this; let storefrontEvents = window.magentoStorefrontEvents; storefrontEvents.context.setContext("recsContext", { alternateEnvironmentId: "" }); this.pagePreconfiguredDeferred = new Promise((resolve, reject) => { self.pagePreconfiguredDeferred.resolve = resolve; self.pagePreconfiguredDeferred.reject = reject; }) document.addEventListener("recsRequestSent", (function () { storefrontEvents.publish.recsRequestSent(); })); window.addEventListener("recsResponseReceived", (function (n) { let rec = storefrontEvents.context.getRecommendations(); rec = n.detail, storefrontEvents.context.setRecommendations({ units: rec }); storefrontEvents.publish.recsResponseReceived(); })); this.fetchRecommendationsData(); }, fetchRecommendationsData: function () { let client; let promise = new Promise(function(resolve, reject) { let interval = setInterval(() => { client = new RecommendationsClient(); if(client._environmentId !== "") { clearInterval(interval); resolve(); } }, 300); }) .then(() => { document.dispatchEvent(new Event("recsRequestSent")); client.fetchPreconfigured().then(response => { const units = response.data.results; const filteredUnits = units.filter(unit => unit.products.length); const responseEvent = new CustomEvent("recsResponseReceived", { detail: filteredUnits, }); window.dispatchEvent(responseEvent); }); }); } } } </script> <div x-data="adobeProductRecsDataFetcher()" x-init="fetchData()"></div> <script type="application/json" id="default-section-data"> {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"requisition":[],"cart":[],"directory-data":{"AD":{"name":"Andorra"},"AE":{"name":"United Arab Emirates"},"AF":{"name":"Afghanistan"},"AG":{"name":"Antigua & Barbuda"},"AI":{"name":"Anguilla"},"AL":{"name":"Albania","regions":{"485":{"code":"AL-01","name":"Berat"},"488":{"code":"AL-09","name":"Dib\u00ebr"},"491":{"code":"AL-02","name":"Durr\u00ebs"},"494":{"code":"AL-03","name":"Elbasan"},"497":{"code":"AL-04","name":"Fier"},"500":{"code":"AL-05","name":"Gjirokast\u00ebr"},"503":{"code":"AL-06","name":"Kor\u00e7\u00eb"},"506":{"code":"AL-07","name":"Kuk\u00ebs"},"509":{"code":"AL-08","name":"Lezh\u00eb"},"512":{"code":"AL-10","name":"Shkod\u00ebr"},"515":{"code":"AL-11","name":"Tiran\u00eb"},"518":{"code":"AL-12","name":"Vlor\u00eb"}}},"AM":{"name":"Armenia"},"AO":{"name":"Angola"},"AQ":{"name":"Antarctica"},"AR":{"name":"Argentina","regions":{"524":{"code":"AR-B","name":"Buenos Aires"},"527":{"code":"AR-K","name":"Catamarca"},"530":{"code":"AR-H","name":"Chaco"},"533":{"code":"AR-U","name":"Chubut"},"521":{"code":"AR-C","name":"Ciudad Aut\u00f3noma de Buenos Aires"},"536":{"code":"AR-X","name":"C\u00f3rdoba"},"539":{"code":"AR-W","name":"Corrientes"},"542":{"code":"AR-E","name":"Entre R\u00edos"},"545":{"code":"AR-P","name":"Formosa"},"548":{"code":"AR-Y","name":"Jujuy"},"551":{"code":"AR-L","name":"La Pampa"},"554":{"code":"AR-F","name":"La Rioja"},"557":{"code":"AR-M","name":"Mendoza"},"560":{"code":"AR-N","name":"Misiones"},"563":{"code":"AR-Q","name":"Neuqu\u00e9n"},"566":{"code":"AR-R","name":"R\u00edo Negro"},"569":{"code":"AR-A","name":"Salta"},"572":{"code":"AR-J","name":"San Juan"},"575":{"code":"AR-D","name":"San Luis"},"578":{"code":"AR-Z","name":"Santa Cruz"},"581":{"code":"AR-S","name":"Santa Fe"},"584":{"code":"AR-G","name":"Santiago del Estero"},"587":{"code":"AR-V","name":"Tierra del Fuego"},"590":{"code":"AR-T","name":"Tucum\u00e1n"}}},"AS":{"name":"American Samoa"},"AT":{"name":"Austria","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"AU":{"name":"Australia"},"AW":{"name":"Aruba"},"AX":{"name":"\u00c5land Islands"},"AZ":{"name":"Azerbaijan"},"BA":{"name":"Bosnia & Herzegovina"},"BB":{"name":"Barbados"},"BD":{"name":"Bangladesh"},"BE":{"name":"Belgium"},"BF":{"name":"Burkina Faso"},"BG":{"name":"Bulgaria","regions":{"620":{"code":"BG-01","name":"Blagoevgrad"},"623":{"code":"BG-02","name":"Burgas"},"641":{"code":"BG-08","name":"Dobrich"},"638":{"code":"BG-07","name":"Gabrovo"},"695":{"code":"BG-26","name":"Haskovo"},"644":{"code":"BG-09","name":"Kardzhali"},"647":{"code":"BG-10","name":"Kyustendil"},"650":{"code":"BG-11","name":"Lovech"},"653":{"code":"BG-12","name":"Montana"},"656":{"code":"BG-13","name":"Pazardzhik"},"659":{"code":"BG-14","name":"Pernik"},"662":{"code":"BG-15","name":"Pleven"},"665":{"code":"BG-16","name":"Plovdiv"},"668":{"code":"BG-17","name":"Razgrad"},"671":{"code":"BG-18","name":"Ruse"},"698":{"code":"BG-27","name":"Shumen"},"674":{"code":"BG-19","name":"Silistra"},"677":{"code":"BG-20","name":"Sliven"},"680":{"code":"BG-21","name":"Smolyan"},"683":{"code":"BG-22","name":"Sofia City"},"686":{"code":"BG-23","name":"Sofia Province"},"689":{"code":"BG-24","name":"Stara Zagora"},"692":{"code":"BG-25","name":"Targovishte"},"626":{"code":"BG-03","name":"Varna"},"629":{"code":"BG-04","name":"Veliko Tarnovo"},"632":{"code":"BG-05","name":"Vidin"},"635":{"code":"BG-06","name":"Vratsa"},"701":{"code":"BG-28","name":"Yambol"}}},"BH":{"name":"Bahrain"},"BI":{"name":"Burundi"},"BJ":{"name":"Benin"},"BL":{"name":"St. Barth\u00e9lemy"},"BM":{"name":"Bermuda"},"BN":{"name":"Brunei"},"BO":{"name":"Bolivia","regions":{"596":{"code":"BO-H","name":"Chuquisaca"},"593":{"code":"BO-C","name":"Cochabamba"},"599":{"code":"BO-B","name":"El Beni"},"602":{"code":"BO-L","name":"La Paz"},"605":{"code":"BO-O","name":"Oruro"},"608":{"code":"BO-N","name":"Pando"},"611":{"code":"BO-P","name":"Potos\u00ed"},"614":{"code":"BO-S","name":"Santa Cruz"},"617":{"code":"BO-T","name":"Tarija"}}},"BR":{"name":"Brazil"},"BS":{"name":"Bahamas"},"BT":{"name":"Bhutan"},"BV":{"name":"Bouvet Island"},"BW":{"name":"Botswana"},"BY":{"name":"Belarus","regions":{"1682":{"code":"BY-BR","name":"Bresckaja voblas\u0107"},"1685":{"code":"BY-HO","name":"Homie\u013askaja voblas\u0107"},"1688":{"code":"BY-HM","name":"Horad Minsk"},"1691":{"code":"BY-HR","name":"Hrodzienskaja voblas\u0107"},"1694":{"code":"BY-MA","name":"Mahilio\u016dskaja voblas\u0107"},"1697":{"code":"BY-MI","name":"Minskaja voblas\u0107"},"1700":{"code":"BY-VI","name":"Viciebskaja voblas\u0107"}}},"BZ":{"name":"Belize"},"CA":{"name":"Canada","regions":{"66":{"code":"AB","name":"Alberta"},"67":{"code":"BC","name":"British Columbia"},"68":{"code":"MB","name":"Manitoba"},"70":{"code":"NB","name":"New Brunswick"},"69":{"code":"NL","name":"Newfoundland and Labrador"},"72":{"code":"NT","name":"Northwest Territories"},"71":{"code":"NS","name":"Nova Scotia"},"73":{"code":"NU","name":"Nunavut"},"74":{"code":"ON","name":"Ontario"},"75":{"code":"PE","name":"Prince Edward Island"},"76":{"code":"QC","name":"Quebec"},"77":{"code":"SK","name":"Saskatchewan"},"78":{"code":"YT","name":"Yukon Territory"}}},"CC":{"name":"Cocos (Keeling) Islands"},"CD":{"name":"Congo - Kinshasa"},"CF":{"name":"Central African Republic"},"CG":{"name":"Congo - Brazzaville"},"CH":{"name":"Switzerland","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"CI":{"name":"C\u00f4te d\u2019Ivoire"},"CK":{"name":"Cook Islands"},"CL":{"name":"Chile","regions":{"704":{"code":"CL-AI","name":"Ais\u00e9n del General Carlos Iba\u00f1ez del Campo"},"707":{"code":"CL-AN","name":"Antofagasta"},"710":{"code":"CL-AP","name":"Arica y Parinacota"},"716":{"code":"CL-AT","name":"Atacama"},"719":{"code":"CL-BI","name":"Biob\u00edo"},"722":{"code":"CL-CO","name":"Coquimbo"},"713":{"code":"CL-AR","name":"La Araucan\u00eda"},"725":{"code":"CL-LI","name":"Libertador General Bernardo O'Higgins"},"728":{"code":"CL-LL","name":"Los Lagos"},"731":{"code":"CL-LR","name":"Los R\u00edos"},"734":{"code":"CL-MA","name":"Magallanes"},"737":{"code":"CL-ML","name":"Maule"},"740":{"code":"CL-NB","name":"\u00d1uble"},"743":{"code":"CL-RM","name":"Regi\u00f3n Metropolitana de Santiago"},"746":{"code":"CL-TA","name":"Tarapac\u00e1"},"749":{"code":"CL-VS","name":"Valpara\u00edso"}}},"CM":{"name":"Cameroon"},"CN":{"name":"China"},"CO":{"name":"Colombia"},"CR":{"name":"Costa Rica"},"CV":{"name":"Cape Verde"},"CW":{"name":"Cura\u00e7ao"},"CX":{"name":"Christmas Island"},"CY":{"name":"Cyprus"},"CZ":{"name":"Czechia"},"DE":{"name":"Germany","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"DJ":{"name":"Djibouti"},"DK":{"name":"Denmark","regions":{"752":{"code":"DK-84","name":"Hovedstaden"},"755":{"code":"DK-82","name":"Midtjylland"},"758":{"code":"DK-81","name":"Nordjylland"},"761":{"code":"DK-85","name":"Sj\u00e6lland"},"764":{"code":"DK-83","name":"Syddanmark"}}},"DM":{"name":"Dominica"},"DO":{"name":"Dominican Republic"},"DZ":{"name":"Algeria"},"EC":{"name":"Ecuador","regions":{"767":{"code":"EC-A","name":"Azuay"},"770":{"code":"EC-B","name":"Bol\u00edvar"},"773":{"code":"EC-F","name":"Ca\u00f1ar"},"776":{"code":"EC-C","name":"Carchi"},"779":{"code":"EC-H","name":"Chimborazo"},"782":{"code":"EC-X","name":"Cotopaxi"},"785":{"code":"EC-O","name":"El Oro"},"788":{"code":"EC-E","name":"Esmeraldas"},"791":{"code":"EC-W","name":"Gal\u00e1pagos"},"794":{"code":"EC-G","name":"Guayas"},"797":{"code":"EC-I","name":"Imbabura"},"800":{"code":"EC-L","name":"Loja"},"803":{"code":"EC-R","name":"Los R\u00edos"},"806":{"code":"EC-M","name":"Manab\u00ed"},"809":{"code":"EC-S","name":"Morona Santiago"},"812":{"code":"EC-N","name":"Napo"},"815":{"code":"EC-D","name":"Orellana"},"818":{"code":"EC-Y","name":"Pastaza"},"821":{"code":"EC-P","name":"Pichincha"},"824":{"code":"EC-SE","name":"Santa Elena"},"827":{"code":"EC-SD","name":"Santo Domingo de los Ts\u00e1chilas"},"830":{"code":"EC-U","name":"Sucumb\u00edos"},"833":{"code":"EC-T","name":"Tungurahua"},"836":{"code":"EC-Z","name":"Zamora Chinchipe"}}},"EE":{"name":"Estonia","regions":{"340":{"code":"EE-37","name":"Harjumaa"},"341":{"code":"EE-39","name":"Hiiumaa"},"342":{"code":"EE-44","name":"Ida-Virumaa"},"344":{"code":"EE-51","name":"J\u00e4rvamaa"},"343":{"code":"EE-49","name":"J\u00f5gevamaa"},"346":{"code":"EE-59","name":"L\u00e4\u00e4ne-Virumaa"},"345":{"code":"EE-57","name":"L\u00e4\u00e4nemaa"},"348":{"code":"EE-67","name":"P\u00e4rnumaa"},"347":{"code":"EE-65","name":"P\u00f5lvamaa"},"349":{"code":"EE-70","name":"Raplamaa"},"350":{"code":"EE-74","name":"Saaremaa"},"351":{"code":"EE-78","name":"Tartumaa"},"352":{"code":"EE-82","name":"Valgamaa"},"353":{"code":"EE-84","name":"Viljandimaa"},"354":{"code":"EE-86","name":"V\u00f5rumaa"}}},"EG":{"name":"Egypt"},"EH":{"name":"Western Sahara"},"ER":{"name":"Eritrea"},"ES":{"name":"Spain","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"},"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"ET":{"name":"Ethiopia"},"FI":{"name":"Finland","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FJ":{"name":"Fiji"},"FK":{"name":"Falkland Islands"},"FM":{"name":"Micronesia"},"FO":{"name":"Faroe Islands"},"FR":{"name":"France","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"},"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GA":{"name":"Gabon"},"GB":{"name":"United Kingdom"},"GD":{"name":"Grenada"},"GE":{"name":"Georgia"},"GF":{"name":"French Guiana"},"GG":{"name":"Guernsey"},"GH":{"name":"Ghana"},"GI":{"name":"Gibraltar"},"GL":{"name":"Greenland"},"GM":{"name":"Gambia"},"GN":{"name":"Guinea"},"GP":{"name":"Guadeloupe"},"GQ":{"name":"Equatorial Guinea"},"GR":{"name":"Greece","regions":{"878":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"839":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"842":{"code":"GR-I","name":"Attik\u00ed"},"845":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"848":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"851":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"854":{"code":"GR-D","name":"\u00cdpeiros"},"857":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"860":{"code":"GR-M","name":"Kr\u00edti"},"863":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"866":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"869":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"},"872":{"code":"GR-E","name":"Thessal\u00eda"},"875":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"GS":{"name":"South Georgia & South Sandwich Islands"},"GT":{"name":"Guatemala"},"GU":{"name":"Guam"},"GW":{"name":"Guinea-Bissau"},"GY":{"name":"Guyana","regions":{"881":{"code":"GY-BA","name":"Barima-Waini"},"884":{"code":"GY-CU","name":"Cuyuni-Mazaruni"},"887":{"code":"GY-DE","name":"Demerara-Mahaica"},"890":{"code":"GY-EB","name":"East Berbice-Corentyne"},"893":{"code":"GY-ES","name":"Essequibo Islands-West Demerara"},"896":{"code":"GY-MA","name":"Mahaica-Berbice"},"899":{"code":"GY-PM","name":"Pomeroon-Supenaam"},"902":{"code":"GY-PT","name":"Potaro-Siparuni"},"905":{"code":"GY-UD","name":"Upper Demerara-Berbice"},"908":{"code":"GY-UT","name":"Upper Takutu-Upper Essequibo"}}},"HK":{"name":"Hong Kong SAR China"},"HM":{"name":"Heard & McDonald Islands"},"HN":{"name":"Honduras"},"HR":{"name":"Croatia"},"HT":{"name":"Haiti"},"HU":{"name":"Hungary"},"ID":{"name":"Indonesia"},"IE":{"name":"Ireland"},"IL":{"name":"Israel"},"IM":{"name":"Isle of Man"},"IN":{"name":"India"},"IO":{"name":"British Indian Ocean Territory"},"IQ":{"name":"Iraq"},"IS":{"name":"Iceland","regions":{"929":{"code":"IS-07","name":"Austurland"},"911":{"code":"IS-01","name":"H\u00f6fu\u00f0borgarsv\u00e6\u00f0i"},"926":{"code":"IS-06","name":"Nor\u00f0urland eystra"},"923":{"code":"IS-05","name":"Nor\u00f0urland vestra"},"932":{"code":"IS-08","name":"Su\u00f0urland"},"914":{"code":"IS-02","name":"Su\u00f0urnes"},"920":{"code":"IS-04","name":"Vestfir\u00f0ir"},"917":{"code":"IS-03","name":"Vesturland"}}},"IT":{"name":"Italy","regions":{"935":{"code":"AG","name":"Agrigento"},"938":{"code":"AL","name":"Alessandria"},"941":{"code":"AN","name":"Ancona"},"944":{"code":"AO","name":"Aosta"},"950":{"code":"AR","name":"Arezzo"},"953":{"code":"AP","name":"Ascoli-Piceno"},"956":{"code":"AT","name":"Asti"},"959":{"code":"AV","name":"Avellino"},"962":{"code":"BA","name":"Bari"},"965":{"code":"BT","name":"Barletta-Andria-Trani"},"968":{"code":"BL","name":"Belluno"},"971":{"code":"BN","name":"Benevento"},"974":{"code":"BG","name":"Bergamo"},"977":{"code":"BI","name":"Biella"},"980":{"code":"BO","name":"Bologna"},"983":{"code":"BZ","name":"Bolzano"},"986":{"code":"BS","name":"Brescia"},"989":{"code":"BR","name":"Brindisi"},"992":{"code":"CA","name":"Cagliari"},"995":{"code":"CL","name":"Caltanissetta"},"998":{"code":"CB","name":"Campobasso"},"1001":{"code":"CI","name":"Carbonia Iglesias"},"1004":{"code":"CE","name":"Caserta"},"1007":{"code":"CT","name":"Catania"},"1010":{"code":"CZ","name":"Catanzaro"},"1013":{"code":"CH","name":"Chieti"},"1016":{"code":"CO","name":"Como"},"1019":{"code":"CS","name":"Cosenza"},"1022":{"code":"CR","name":"Cremona"},"1025":{"code":"KR","name":"Crotone"},"1028":{"code":"CN","name":"Cuneo"},"1031":{"code":"EN","name":"Enna"},"1034":{"code":"FM","name":"Fermo"},"1037":{"code":"FE","name":"Ferrara"},"1040":{"code":"FI","name":"Firenze"},"1043":{"code":"FG","name":"Foggia"},"1046":{"code":"FC","name":"Forli-Cesena"},"1049":{"code":"FR","name":"Frosinone"},"1052":{"code":"GE","name":"Genova"},"1055":{"code":"GO","name":"Gorizia"},"1058":{"code":"GR","name":"Grosseto"},"1061":{"code":"IM","name":"Imperia"},"1064":{"code":"IS","name":"Isernia"},"947":{"code":"AQ","name":"L'Aquila"},"1067":{"code":"SP","name":"La-Spezia"},"1070":{"code":"LT","name":"Latina"},"1073":{"code":"LE","name":"Lecce"},"1076":{"code":"LC","name":"Lecco"},"1079":{"code":"LI","name":"Livorno"},"1082":{"code":"LO","name":"Lodi"},"1085":{"code":"LU","name":"Lucca"},"1088":{"code":"MC","name":"Macerata"},"1091":{"code":"MN","name":"Mantova"},"1094":{"code":"MS","name":"Massa-Carrara"},"1097":{"code":"MT","name":"Matera"},"1100":{"code":"VS","name":"Medio Campidano"},"1103":{"code":"ME","name":"Messina"},"1106":{"code":"MI","name":"Milano"},"1109":{"code":"MO","name":"Modena"},"1112":{"code":"MB","name":"Monza-Brianza"},"1115":{"code":"NA","name":"Napoli"},"1118":{"code":"NO","name":"Novara"},"1121":{"code":"NU","name":"Nuoro"},"1124":{"code":"OG","name":"Ogliastra"},"1127":{"code":"OT","name":"Olbia Tempio"},"1130":{"code":"OR","name":"Oristano"},"1133":{"code":"PD","name":"Padova"},"1136":{"code":"PA","name":"Palermo"},"1139":{"code":"PR","name":"Parma"},"1142":{"code":"PV","name":"Pavia"},"1145":{"code":"PG","name":"Perugia"},"1148":{"code":"PU","name":"Pesaro-Urbino"},"1151":{"code":"PE","name":"Pescara"},"1154":{"code":"PC","name":"Piacenza"},"1157":{"code":"PI","name":"Pisa"},"1160":{"code":"PT","name":"Pistoia"},"1163":{"code":"PN","name":"Pordenone"},"1166":{"code":"PZ","name":"Potenza"},"1169":{"code":"PO","name":"Prato"},"1172":{"code":"RG","name":"Ragusa"},"1175":{"code":"RA","name":"Ravenna"},"1178":{"code":"RC","name":"Reggio-Calabria"},"1181":{"code":"RE","name":"Reggio-Emilia"},"1184":{"code":"RI","name":"Rieti"},"1187":{"code":"RN","name":"Rimini"},"1190":{"code":"RM","name":"Roma"},"1193":{"code":"RO","name":"Rovigo"},"1196":{"code":"SA","name":"Salerno"},"1199":{"code":"SS","name":"Sassari"},"1202":{"code":"SV","name":"Savona"},"1205":{"code":"SI","name":"Siena"},"1208":{"code":"SR","name":"Siracusa"},"1211":{"code":"SO","name":"Sondrio"},"1214":{"code":"TA","name":"Taranto"},"1217":{"code":"TE","name":"Teramo"},"1220":{"code":"TR","name":"Terni"},"1223":{"code":"TO","name":"Torino"},"1226":{"code":"TP","name":"Trapani"},"1229":{"code":"TN","name":"Trento"},"1232":{"code":"TV","name":"Treviso"},"1235":{"code":"TS","name":"Trieste"},"1238":{"code":"UD","name":"Udine"},"1241":{"code":"VA","name":"Varese"},"1244":{"code":"VE","name":"Venezia"},"1247":{"code":"VB","name":"Verbania"},"1250":{"code":"VC","name":"Vercelli"},"1253":{"code":"VR","name":"Verona"},"1256":{"code":"VV","name":"Vibo-Valentia"},"1259":{"code":"VI","name":"Vicenza"},"1262":{"code":"VT","name":"Viterbo"}}},"JE":{"name":"Jersey"},"JM":{"name":"Jamaica"},"JO":{"name":"Jordan"},"JP":{"name":"Japan"},"KE":{"name":"Kenya"},"KG":{"name":"Kyrgyzstan"},"KH":{"name":"Cambodia"},"KI":{"name":"Kiribati"},"KM":{"name":"Comoros"},"KN":{"name":"St. Kitts & Nevis"},"KR":{"name":"South Korea"},"KW":{"name":"Kuwait"},"KY":{"name":"Cayman Islands"},"KZ":{"name":"Kazakhstan"},"LA":{"name":"Laos"},"LB":{"name":"Lebanon"},"LC":{"name":"St. Lucia"},"LI":{"name":"Liechtenstein"},"LK":{"name":"Sri Lanka"},"LR":{"name":"Liberia"},"LS":{"name":"Lesotho"},"LT":{"name":"Lithuania","regions":{"475":{"code":"LT-AL","name":"Alytaus Apskritis"},"476":{"code":"LT-KU","name":"Kauno Apskritis"},"477":{"code":"LT-KL","name":"Klaip\u0117dos Apskritis"},"478":{"code":"LT-MR","name":"Marijampol\u0117s Apskritis"},"479":{"code":"LT-PN","name":"Panev\u0117\u017eio Apskritis"},"480":{"code":"LT-SA","name":"\u0160iauli\u0173 Apskritis"},"481":{"code":"LT-TA","name":"Taurag\u0117s Apskritis"},"482":{"code":"LT-TE","name":"Tel\u0161i\u0173 Apskritis"},"483":{"code":"LT-UT","name":"Utenos Apskritis"},"484":{"code":"LT-VL","name":"Vilniaus Apskritis"}}},"LU":{"name":"Luxembourg"},"LV":{"name":"Latvia","regions":{"471":{"code":"\u0100da\u017eu novads","name":"\u0100da\u017eu novads"},"366":{"code":"Aglonas novads","name":"Aglonas novads"},"367":{"code":"LV-AI","name":"Aizkraukles novads"},"368":{"code":"Aizputes novads","name":"Aizputes novads"},"369":{"code":"Akn\u012bstes novads","name":"Akn\u012bstes novads"},"370":{"code":"Alojas novads","name":"Alojas novads"},"371":{"code":"Alsungas novads","name":"Alsungas novads"},"372":{"code":"LV-AL","name":"Al\u016bksnes novads"},"373":{"code":"Amatas novads","name":"Amatas novads"},"374":{"code":"Apes novads","name":"Apes novads"},"375":{"code":"Auces novads","name":"Auces novads"},"376":{"code":"Bab\u012btes novads","name":"Bab\u012btes novads"},"377":{"code":"Baldones novads","name":"Baldones novads"},"378":{"code":"Baltinavas novads","name":"Baltinavas novads"},"379":{"code":"LV-BL","name":"Balvu novads"},"380":{"code":"LV-BU","name":"Bauskas novads"},"381":{"code":"Bever\u012bnas novads","name":"Bever\u012bnas novads"},"382":{"code":"Broc\u0113nu novads","name":"Broc\u0113nu novads"},"383":{"code":"Burtnieku novads","name":"Burtnieku novads"},"384":{"code":"Carnikavas novads","name":"Carnikavas novads"},"387":{"code":"LV-CE","name":"C\u0113su novads"},"385":{"code":"Cesvaines novads","name":"Cesvaines novads"},"386":{"code":"Ciblas novads","name":"Ciblas novads"},"388":{"code":"Dagdas novads","name":"Dagdas novads"},"355":{"code":"LV-DGV","name":"Daugavpils"},"389":{"code":"LV-DA","name":"Daugavpils novads"},"390":{"code":"LV-DO","name":"Dobeles novads"},"391":{"code":"Dundagas novads","name":"Dundagas novads"},"392":{"code":"Durbes novads","name":"Durbes novads"},"393":{"code":"Engures novads","name":"Engures novads"},"472":{"code":"\u0112rg\u013cu novads","name":"\u0112rg\u013cu novads"},"394":{"code":"Garkalnes novads","name":"Garkalnes novads"},"395":{"code":"Grobi\u0146as novads","name":"Grobi\u0146as novads"},"396":{"code":"LV-GU","name":"Gulbenes novads"},"397":{"code":"Iecavas novads","name":"Iecavas novads"},"398":{"code":"Ik\u0161\u0137iles novads","name":"Ik\u0161\u0137iles novads"},"399":{"code":"Il\u016bkstes novads","name":"Il\u016bkstes novads"},"400":{"code":"In\u010dukalna novads","name":"In\u010dukalna novads"},"401":{"code":"Jaunjelgavas novads","name":"Jaunjelgavas novads"},"402":{"code":"Jaunpiebalgas novads","name":"Jaunpiebalgas novads"},"403":{"code":"Jaunpils novads","name":"Jaunpils novads"},"357":{"code":"J\u0113kabpils","name":"J\u0113kabpils"},"405":{"code":"LV-JK","name":"J\u0113kabpils novads"},"356":{"code":"LV-JEL","name":"Jelgava"},"404":{"code":"LV-JL","name":"Jelgavas novads"},"358":{"code":"LV-JUR","name":"J\u016brmala"},"406":{"code":"Kandavas novads","name":"Kandavas novads"},"412":{"code":"K\u0101rsavas novads","name":"K\u0101rsavas novads"},"473":{"code":"\u0136eguma novads","name":"\u0136eguma novads"},"474":{"code":"\u0136ekavas novads","name":"\u0136ekavas novads"},"407":{"code":"Kokneses novads","name":"Kokneses novads"},"410":{"code":"LV-KR","name":"Kr\u0101slavas novads"},"408":{"code":"Krimuldas novads","name":"Krimuldas novads"},"409":{"code":"Krustpils novads","name":"Krustpils novads"},"411":{"code":"LV-KU","name":"Kuld\u012bgas novads"},"413":{"code":"Lielv\u0101rdes novads","name":"Lielv\u0101rdes novads"},"359":{"code":"LV-LPX","name":"Liep\u0101ja"},"360":{"code":"LV-LE","name":"Liep\u0101jas novads"},"417":{"code":"L\u012bgatnes novads","name":"L\u012bgatnes novads"},"414":{"code":"LV-LM","name":"Limba\u017eu novads"},"418":{"code":"L\u012bv\u0101nu novads","name":"L\u012bv\u0101nu novads"},"415":{"code":"Lub\u0101nas novads","name":"Lub\u0101nas novads"},"416":{"code":"LV-LU","name":"Ludzas novads"},"419":{"code":"LV-MA","name":"Madonas novads"},"421":{"code":"M\u0101lpils novads","name":"M\u0101lpils novads"},"422":{"code":"M\u0101rupes novads","name":"M\u0101rupes novads"},"420":{"code":"Mazsalacas novads","name":"Mazsalacas novads"},"423":{"code":"Nauk\u0161\u0113nu novads","name":"Nauk\u0161\u0113nu novads"},"424":{"code":"Neretas novads","name":"Neretas novads"},"425":{"code":"N\u012bcas novads","name":"N\u012bcas novads"},"426":{"code":"LV-OG","name":"Ogres novads"},"427":{"code":"Olaines novads","name":"Olaines novads"},"428":{"code":"Ozolnieku novads","name":"Ozolnieku novads"},"432":{"code":"P\u0101rgaujas novads","name":"P\u0101rgaujas novads"},"433":{"code":"P\u0101vilostas novads","name":"P\u0101vilostas novads"},"434":{"code":"P\u013cavi\u0146u novads","name":"P\u013cavi\u0146u novads"},"429":{"code":"LV-PR","name":"Prei\u013cu novads"},"430":{"code":"Priekules novads","name":"Priekules novads"},"431":{"code":"Prieku\u013cu novads","name":"Prieku\u013cu novads"},"435":{"code":"Raunas novads","name":"Raunas novads"},"361":{"code":"LV-REZ","name":"R\u0113zekne"},"442":{"code":"LV-RE","name":"R\u0113zeknes novads"},"436":{"code":"Riebi\u0146u novads","name":"Riebi\u0146u novads"},"362":{"code":"LV-RIX","name":"R\u012bga"},"363":{"code":"LV-RI","name":"R\u012bgas novads"},"437":{"code":"Rojas novads","name":"Rojas novads"},"438":{"code":"Ropa\u017eu novads","name":"Ropa\u017eu novads"},"439":{"code":"Rucavas novads","name":"Rucavas novads"},"440":{"code":"Rug\u0101ju novads","name":"Rug\u0101ju novads"},"443":{"code":"R\u016bjienas novads","name":"R\u016bjienas novads"},"441":{"code":"Rund\u0101les novads","name":"Rund\u0101les novads"},"444":{"code":"Salacgr\u012bvas novads","name":"Salacgr\u012bvas novads"},"445":{"code":"Salas novads","name":"Salas novads"},"446":{"code":"Salaspils novads","name":"Salaspils novads"},"447":{"code":"LV-SA","name":"Saldus novads"},"448":{"code":"Saulkrastu novads","name":"Saulkrastu novads"},"455":{"code":"S\u0113jas novads","name":"S\u0113jas novads"},"449":{"code":"Siguldas novads","name":"Siguldas novads"},"451":{"code":"Skr\u012bveru novads","name":"Skr\u012bveru novads"},"450":{"code":"Skrundas novads","name":"Skrundas novads"},"452":{"code":"Smiltenes novads","name":"Smiltenes novads"},"453":{"code":"Stopi\u0146u novads","name":"Stopi\u0146u novads"},"454":{"code":"Stren\u010du novads","name":"Stren\u010du novads"},"456":{"code":"LV-TA","name":"Talsu novads"},"458":{"code":"T\u0113rvetes novads","name":"T\u0113rvetes novads"},"457":{"code":"LV-TU","name":"Tukuma novads"},"459":{"code":"Vai\u0146odes novads","name":"Vai\u0146odes novads"},"460":{"code":"LV-VK","name":"Valkas novads"},"364":{"code":"Valmiera","name":"Valmiera"},"461":{"code":"LV-VM","name":"Valmieras novads"},"462":{"code":"Varak\u013c\u0101nu novads","name":"Varak\u013c\u0101nu novads"},"469":{"code":"V\u0101rkavas novads","name":"V\u0101rkavas novads"},"463":{"code":"Vecpiebalgas novads","name":"Vecpiebalgas novads"},"464":{"code":"Vecumnieku novads","name":"Vecumnieku novads"},"365":{"code":"LV-VEN","name":"Ventspils"},"465":{"code":"LV-VE","name":"Ventspils novads"},"466":{"code":"Vies\u012btes novads","name":"Vies\u012btes novads"},"467":{"code":"Vi\u013cakas novads","name":"Vi\u013cakas novads"},"468":{"code":"Vi\u013c\u0101nu novads","name":"Vi\u013c\u0101nu novads"},"470":{"code":"Zilupes novads","name":"Zilupes novads"}}},"MA":{"name":"Morocco"},"MC":{"name":"Monaco"},"MD":{"name":"Moldova"},"ME":{"name":"Montenegro"},"MF":{"name":"St. Martin"},"MG":{"name":"Madagascar"},"MH":{"name":"Marshall Islands"},"MK":{"name":"Macedonia"},"ML":{"name":"Mali"},"MM":{"name":"Myanmar (Burma)"},"MN":{"name":"Mongolia"},"MO":{"name":"Macau SAR China"},"MP":{"name":"Northern Mariana Islands"},"MQ":{"name":"Martinique"},"MR":{"name":"Mauritania"},"MS":{"name":"Montserrat"},"MT":{"name":"Malta"},"MU":{"name":"Mauritius"},"MV":{"name":"Maldives"},"MW":{"name":"Malawi"},"MX":{"name":"Mexico"},"MY":{"name":"Malaysia"},"MZ":{"name":"Mozambique"},"NA":{"name":"Namibia"},"NC":{"name":"New Caledonia"},"NE":{"name":"Niger"},"NF":{"name":"Norfolk Island"},"NG":{"name":"Nigeria"},"NI":{"name":"Nicaragua"},"NL":{"name":"Netherlands"},"NO":{"name":"Norway"},"NP":{"name":"Nepal"},"NR":{"name":"Nauru"},"NU":{"name":"Niue"},"NZ":{"name":"New Zealand"},"OM":{"name":"Oman"},"PA":{"name":"Panama"},"PE":{"name":"Peru","regions":{"1322":{"code":"PE-AMA","name":"Amazonas"},"1325":{"code":"PE-ANC","name":"Ancash"},"1328":{"code":"PE-APU","name":"Apur\u00edmac"},"1331":{"code":"PE-ARE","name":"Arequipa"},"1334":{"code":"PE-AYA","name":"Ayacucho"},"1337":{"code":"PE-CAJ","name":"Cajamarca"},"1340":{"code":"PE-CUS","name":"Cusco"},"1343":{"code":"PE-CAL","name":"El Callao"},"1346":{"code":"PE-HUV","name":"Huancavelica"},"1349":{"code":"PE-HUC","name":"Hu\u00e1nuco"},"1352":{"code":"PE-ICA","name":"Ica"},"1355":{"code":"PE-JUN","name":"Jun\u00edn"},"1358":{"code":"PE-LAL","name":"La Libertad"},"1361":{"code":"PE-LAM","name":"Lambayeque"},"1364":{"code":"PE-LIM","name":"Lima"},"1367":{"code":"PE-LOR","name":"Loreto"},"1370":{"code":"PE-MDD","name":"Madre de Dios"},"1373":{"code":"PE-MOQ","name":"Moquegua"},"1319":{"code":"PE-LMA","name":"Municipalidad Metropolitana de Lima"},"1376":{"code":"PE-PAS","name":"Pasco"},"1379":{"code":"PE-PIU","name":"Piura"},"1382":{"code":"PE-PUN","name":"Puno"},"1385":{"code":"PE-SAM","name":"San Mart\u00edn"},"1388":{"code":"PE-TAC","name":"Tacna"},"1391":{"code":"PE-TUM","name":"Tumbes"},"1394":{"code":"PE-UCA","name":"Ucayali"}}},"PF":{"name":"French Polynesia"},"PG":{"name":"Papua New Guinea"},"PH":{"name":"Philippines"},"PK":{"name":"Pakistan"},"PL":{"name":"Poland"},"PM":{"name":"St. Pierre & Miquelon"},"PN":{"name":"Pitcairn Islands"},"PR":{"name":"Puerto Rico"},"PS":{"name":"Palestinian Territories"},"PT":{"name":"Portugal","regions":{"1397":{"code":"PT-01","name":"Aveiro"},"1400":{"code":"PT-02","name":"Beja"},"1403":{"code":"PT-03","name":"Braga"},"1406":{"code":"PT-04","name":"Bragan\u00e7a"},"1409":{"code":"PT-05","name":"Castelo Branco"},"1412":{"code":"PT-06","name":"Coimbra"},"1415":{"code":"PT-07","name":"\u00c9vora"},"1418":{"code":"PT-08","name":"Faro"},"1421":{"code":"PT-09","name":"Guarda"},"1424":{"code":"PT-10","name":"Leiria"},"1427":{"code":"PT-11","name":"Lisboa"},"1430":{"code":"PT-12","name":"Portalegre"},"1433":{"code":"PT-13","name":"Porto"},"1454":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"1451":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"1436":{"code":"PT-14","name":"Santar\u00e9m"},"1439":{"code":"PT-15","name":"Set\u00fabal"},"1442":{"code":"PT-16","name":"Viana do Castelo"},"1445":{"code":"PT-17","name":"Vila Real"},"1448":{"code":"PT-18","name":"Viseu"}}},"PW":{"name":"Palau"},"PY":{"name":"Paraguay","regions":{"1268":{"code":"PY-16","name":"Alto Paraguay"},"1271":{"code":"PY-10","name":"Alto Paran\u00e1"},"1274":{"code":"PY-13","name":"Amambay"},"1265":{"code":"PY-ASU","name":"Asunci\u00f3n"},"1277":{"code":"PY-19","name":"Boquer\u00f3n"},"1280":{"code":"PY-5","name":"Caaguaz\u00fa"},"1283":{"code":"PY-6","name":"Caazap\u00e1"},"1286":{"code":"PY-14","name":"Canindey\u00fa"},"1289":{"code":"PY-11","name":"Central"},"1292":{"code":"PY-1","name":"Concepci\u00f3n"},"1295":{"code":"PY-3","name":"Cordillera"},"1298":{"code":"PY-4","name":"Guair\u00e1"},"1301":{"code":"PY-7","name":"Itap\u00faa"},"1304":{"code":"PY-8","name":"Misiones"},"1307":{"code":"PY-12","name":"\u00d1eembuc\u00fa"},"1310":{"code":"PY-9","name":"Paraguar\u00ed"},"1313":{"code":"PY-15","name":"Presidente Hayes"},"1316":{"code":"PY-2","name":"San Pedro"}}},"QA":{"name":"Qatar"},"RE":{"name":"R\u00e9union"},"RO":{"name":"Romania","regions":{"278":{"code":"AB","name":"Alba"},"279":{"code":"AR","name":"Arad"},"280":{"code":"AG","name":"Arge\u015f"},"281":{"code":"BC","name":"Bac\u0103u"},"282":{"code":"BH","name":"Bihor"},"283":{"code":"BN","name":"Bistri\u0163a-N\u0103s\u0103ud"},"284":{"code":"BT","name":"Boto\u015fani"},"286":{"code":"BR","name":"Br\u0103ila"},"285":{"code":"BV","name":"Bra\u015fov"},"287":{"code":"B","name":"Bucure\u015fti"},"288":{"code":"BZ","name":"Buz\u0103u"},"290":{"code":"CL","name":"C\u0103l\u0103ra\u015fi"},"289":{"code":"CS","name":"Cara\u015f-Severin"},"291":{"code":"CJ","name":"Cluj"},"292":{"code":"CT","name":"Constan\u0163a"},"293":{"code":"CV","name":"Covasna"},"294":{"code":"DB","name":"D\u00e2mbovi\u0163a"},"295":{"code":"DJ","name":"Dolj"},"296":{"code":"GL","name":"Gala\u0163i"},"297":{"code":"GR","name":"Giurgiu"},"298":{"code":"GJ","name":"Gorj"},"299":{"code":"HR","name":"Harghita"},"300":{"code":"HD","name":"Hunedoara"},"301":{"code":"IL","name":"Ialomi\u0163a"},"302":{"code":"IS","name":"Ia\u015fi"},"303":{"code":"IF","name":"Ilfov"},"304":{"code":"MM","name":"Maramure\u015f"},"305":{"code":"MH","name":"Mehedin\u0163i"},"306":{"code":"MS","name":"Mure\u015f"},"307":{"code":"NT","name":"Neam\u0163"},"308":{"code":"OT","name":"Olt"},"309":{"code":"PH","name":"Prahova"},"311":{"code":"SJ","name":"S\u0103laj"},"310":{"code":"SM","name":"Satu-Mare"},"312":{"code":"SB","name":"Sibiu"},"313":{"code":"SV","name":"Suceava"},"314":{"code":"TR","name":"Teleorman"},"315":{"code":"TM","name":"Timi\u015f"},"316":{"code":"TL","name":"Tulcea"},"318":{"code":"VL","name":"V\u00e2lcea"},"317":{"code":"VS","name":"Vaslui"},"319":{"code":"VN","name":"Vrancea"}}},"RS":{"name":"Serbia"},"RU":{"name":"Russia"},"RW":{"name":"Rwanda"},"SA":{"name":"Saudi Arabia"},"SB":{"name":"Solomon Islands"},"SC":{"name":"Seychelles"},"SE":{"name":"Sweden","regions":{"1487":{"code":"SE-K","name":"Blekinge l\u00e4n"},"1490":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"1496":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"1493":{"code":"SE-I","name":"Gotlands l\u00e4n"},"1499":{"code":"SE-N","name":"Hallands l\u00e4n"},"1502":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"1505":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"1508":{"code":"SE-H","name":"Kalmar l\u00e4n"},"1511":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"1514":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"1544":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"1547":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"1517":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"1523":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"1520":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"1526":{"code":"SE-C","name":"Uppsala l\u00e4n"},"1529":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"1532":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"1535":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"1538":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"1541":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SG":{"name":"Singapore"},"SH":{"name":"St. Helena"},"SI":{"name":"Slovenia"},"SJ":{"name":"Svalbard & Jan Mayen"},"SK":{"name":"Slovakia"},"SL":{"name":"Sierra Leone"},"SM":{"name":"San Marino"},"SN":{"name":"Senegal"},"SO":{"name":"Somalia"},"SR":{"name":"Suriname","regions":{"1457":{"code":"SR-BR","name":"Brokopondo"},"1460":{"code":"SR-CM","name":"Commewijne"},"1463":{"code":"SR-CR","name":"Coronie"},"1466":{"code":"SR-MA","name":"Marowijne"},"1469":{"code":"SR-NI","name":"Nickerie"},"1472":{"code":"SR-PR","name":"Para"},"1475":{"code":"SR-PM","name":"Paramaribo"},"1478":{"code":"SR-SA","name":"Saramacca"},"1481":{"code":"SR-SI","name":"Sipaliwini"},"1484":{"code":"SR-WA","name":"Wanica"}}},"ST":{"name":"S\u00e3o Tom\u00e9 & Pr\u00edncipe"},"SV":{"name":"El Salvador"},"SZ":{"name":"Swaziland"},"TC":{"name":"Turks & Caicos Islands"},"TD":{"name":"Chad"},"TF":{"name":"French Southern Territories"},"TG":{"name":"Togo"},"TH":{"name":"Thailand"},"TJ":{"name":"Tajikistan"},"TK":{"name":"Tokelau"},"TL":{"name":"Timor-Leste"},"TM":{"name":"Turkmenistan"},"TN":{"name":"Tunisia"},"TO":{"name":"Tonga"},"TR":{"name":"Turkey"},"TT":{"name":"Trinidad & Tobago"},"TV":{"name":"Tuvalu"},"TW":{"name":"Taiwan"},"TZ":{"name":"Tanzania"},"UA":{"name":"Ukraine"},"UG":{"name":"Uganda"},"UM":{"name":"U.S. Outlying Islands"},"US":{"name":"United States","regions":{"1":{"code":"AL","name":"Alabama"},"2":{"code":"AK","name":"Alaska"},"3":{"code":"AS","name":"American Samoa"},"4":{"code":"AZ","name":"Arizona"},"5":{"code":"AR","name":"Arkansas"},"6":{"code":"AF","name":"Armed Forces Africa"},"7":{"code":"AA","name":"Armed Forces Americas"},"8":{"code":"AC","name":"Armed Forces Canada"},"9":{"code":"AE","name":"Armed Forces Europe"},"10":{"code":"AM","name":"Armed Forces Middle East"},"11":{"code":"AP","name":"Armed Forces Pacific"},"12":{"code":"CA","name":"California"},"13":{"code":"CO","name":"Colorado"},"14":{"code":"CT","name":"Connecticut"},"15":{"code":"DE","name":"Delaware"},"16":{"code":"DC","name":"District of Columbia"},"17":{"code":"FM","name":"Federated States Of Micronesia"},"18":{"code":"FL","name":"Florida"},"19":{"code":"GA","name":"Georgia"},"20":{"code":"GU","name":"Guam"},"21":{"code":"HI","name":"Hawaii"},"22":{"code":"ID","name":"Idaho"},"23":{"code":"IL","name":"Illinois"},"24":{"code":"IN","name":"Indiana"},"25":{"code":"IA","name":"Iowa"},"26":{"code":"KS","name":"Kansas"},"27":{"code":"KY","name":"Kentucky"},"28":{"code":"LA","name":"Louisiana"},"29":{"code":"ME","name":"Maine"},"30":{"code":"MH","name":"Marshall Islands"},"31":{"code":"MD","name":"Maryland"},"32":{"code":"MA","name":"Massachusetts"},"33":{"code":"MI","name":"Michigan"},"34":{"code":"MN","name":"Minnesota"},"35":{"code":"MS","name":"Mississippi"},"36":{"code":"MO","name":"Missouri"},"37":{"code":"MT","name":"Montana"},"38":{"code":"NE","name":"Nebraska"},"39":{"code":"NV","name":"Nevada"},"40":{"code":"NH","name":"New Hampshire"},"41":{"code":"NJ","name":"New Jersey"},"42":{"code":"NM","name":"New Mexico"},"43":{"code":"NY","name":"New York"},"44":{"code":"NC","name":"North Carolina"},"45":{"code":"ND","name":"North Dakota"},"46":{"code":"MP","name":"Northern Mariana Islands"},"47":{"code":"OH","name":"Ohio"},"48":{"code":"OK","name":"Oklahoma"},"49":{"code":"OR","name":"Oregon"},"50":{"code":"PW","name":"Palau"},"51":{"code":"PA","name":"Pennsylvania"},"52":{"code":"PR","name":"Puerto Rico"},"53":{"code":"RI","name":"Rhode Island"},"54":{"code":"SC","name":"South Carolina"},"55":{"code":"SD","name":"South Dakota"},"56":{"code":"TN","name":"Tennessee"},"57":{"code":"TX","name":"Texas"},"58":{"code":"UT","name":"Utah"},"59":{"code":"VT","name":"Vermont"},"60":{"code":"VI","name":"Virgin Islands"},"61":{"code":"VA","name":"Virginia"},"62":{"code":"WA","name":"Washington"},"63":{"code":"WV","name":"West Virginia"},"64":{"code":"WI","name":"Wisconsin"},"65":{"code":"WY","name":"Wyoming"}}},"UY":{"name":"Uruguay","regions":{"1550":{"code":"UY-AR","name":"Artigas"},"1553":{"code":"UY-CA","name":"Canelones"},"1556":{"code":"UY-CL","name":"Cerro Largo"},"1559":{"code":"UY-CO","name":"Colonia"},"1562":{"code":"UY-DU","name":"Durazno"},"1565":{"code":"UY-FS","name":"Flores"},"1568":{"code":"UY-FD","name":"Florida"},"1571":{"code":"UY-LA","name":"Lavalleja"},"1574":{"code":"UY-MA","name":"Maldonado"},"1577":{"code":"UY-MO","name":"Montevideo"},"1580":{"code":"UY-PA","name":"Paysandu"},"1583":{"code":"UY-RN","name":"R\u00edo Negro"},"1586":{"code":"UY-RV","name":"Rivera"},"1589":{"code":"UY-RO","name":"Rocha"},"1592":{"code":"UY-SA","name":"Salto"},"1595":{"code":"UY-SJ","name":"San Jos\u00e9"},"1598":{"code":"UY-SO","name":"Soriano"},"1601":{"code":"UY-TA","name":"Tacuaremb\u00f3"},"1604":{"code":"UY-TT","name":"Treinta y Tres"}}},"UZ":{"name":"Uzbekistan"},"VA":{"name":"Vatican City"},"VC":{"name":"St. Vincent & Grenadines"},"VE":{"name":"Venezuela","regions":{"1613":{"code":"VE-Z","name":"Amazonas"},"1616":{"code":"VE-B","name":"Anzo\u00e1tegui"},"1619":{"code":"VE-C","name":"Apure"},"1622":{"code":"VE-D","name":"Aragua"},"1625":{"code":"VE-E","name":"Barinas"},"1628":{"code":"VE-F","name":"Bol\u00edvar"},"1631":{"code":"VE-G","name":"Carabobo"},"1634":{"code":"VE-H","name":"Cojedes"},"1637":{"code":"VE-Y","name":"Delta Amacuro"},"1607":{"code":"VE-W","name":"Dependencias Federales"},"1610":{"code":"VE-A","name":"Distrito Capital"},"1640":{"code":"VE-I","name":"Falc\u00f3n"},"1643":{"code":"VE-J","name":"Gu\u00e1rico"},"1646":{"code":"VE-K","name":"Lara"},"1649":{"code":"VE-L","name":"M\u00e9rida"},"1652":{"code":"VE-M","name":"Miranda"},"1655":{"code":"VE-N","name":"Monagas"},"1658":{"code":"VE-O","name":"Nueva Esparta"},"1661":{"code":"VE-P","name":"Portuguesa"},"1664":{"code":"VE-R","name":"Sucre"},"1667":{"code":"VE-S","name":"T\u00e1chira"},"1670":{"code":"VE-T","name":"Trujillo"},"1673":{"code":"VE-X","name":"Vargas"},"1676":{"code":"VE-U","name":"Yaracuy"},"1679":{"code":"VE-V","name":"Zulia"}}},"VG":{"name":"British Virgin Islands"},"VI":{"name":"U.S. Virgin Islands"},"VN":{"name":"Vietnam"},"VU":{"name":"Vanuatu"},"WF":{"name":"Wallis & Futuna"},"WS":{"name":"Samoa"},"YE":{"name":"Yemen"},"YT":{"name":"Mayotte"},"ZA":{"name":"South Africa"},"ZM":{"name":"Zambia"},"ZW":{"name":"Zimbabwe"},"data_id":1732483504},"captcha":[],"wishlist":{"items":[]},"company":[],"company_authorization":[],"purchase_order":[],"negotiable_quote":[],"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"persistent":[],"review":[],"hyva_enterprise":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"magepal-gtm-jsdatalayer":[],"magepal-eegtm-jsdatalayer":[]}</script> </div><script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-61380f36d568c6a38e5","applicationID":"502041541","transactionName":"YwYGMkFUX0cAUxVcXVpMJQVHXF5aTlMAQVNYDANJQ0deUBRTFRpEXQYT","queueTime":0,"applicationTime":552,"atts":"T0EFRAlOTEk=","errorBeacon":"bam.nr-data.net","agent":""}</script></body> </html>