@altack/ngx-onetrust
Version:
OneTrust loader & wrapper for Angular
106 lines • 17.6 kB
JavaScript
import { BehaviorSubject, Observable, ReplaySubject } from 'rxjs';
import { debounceTime, filter, map, take } from 'rxjs/operators';
import { countries } from './countries';
export const OneTrust$ = new ReplaySubject(1);
export const appliedLocale$ = new BehaviorSubject('');
const MutationObserver$ = (target, config = { childList: true }) => {
return new Observable((observer) => {
const mutationObserver = new MutationObserver((mutations, instance) => {
mutations.forEach((mutation) => {
observer.next(mutation);
});
});
mutationObserver.observe(target, config);
return () => {
mutationObserver.disconnect();
};
});
};
const OneTrustReady$ = () => {
return MutationObserver$(document.body).pipe(filter((record) => record.addedNodes.length === 1), map((record) => record.addedNodes.item(0)), filter((element) => {
return (element &&
typeof element.getAttribute === 'function' &&
element.getAttribute('id') === 'onetrust-consent-sdk');
}), debounceTime(300),
// tslint:disable-next-line:no-string-literal
map(() => window['OneTrust']));
};
const getDefaultLocalization = (country) => {
if (countries.has(country.toLowerCase())) {
const countriesLocales = countries.get(country.toLowerCase());
if (countriesLocales.locales && countriesLocales.locales.length > 0) {
// apply default locale for the current country
return countriesLocales.locales[0];
}
}
return '';
};
const initializeOneTrust = (src, domainScript, documentBasedLang = true, countryCode = '') => {
const head = window.document.getElementsByTagName('head')[0];
const oneTrustScript = window.document.createElement('script');
oneTrustScript.id = 'one-trust-script';
oneTrustScript.src = src;
if (documentBasedLang) {
oneTrustScript.setAttribute('data-document-language', 'true');
}
oneTrustScript.setAttribute('type', 'text/javascript');
oneTrustScript.setAttribute('charset', 'UTF-8');
oneTrustScript.setAttribute('data-domain-script', domainScript);
head.insertBefore(oneTrustScript, head.firstChild);
const oneTrustFuncScript = window.document.createElement('script');
oneTrustFuncScript.type = 'text/javascript';
oneTrustFuncScript.innerHTML = `function OptanonWrapper() { }`;
head.appendChild(oneTrustFuncScript);
if (countryCode) {
const geoLocationScript = window.document.createElement('script');
geoLocationScript.type = 'text/javascript';
geoLocationScript.innerHTML = `var OneTrust = {geolocationResponse: {countryCode: '${countryCode}'}}`;
head.appendChild(geoLocationScript);
}
};
export function loadOneTrust(domainScript, defaultCountry, documentBasedLanguage, src = 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js') {
// Get ready to receive the OneTrust object once loaded
OneTrustReady$()
.pipe(take(1))
.subscribe((oneTrust) => {
OneTrust$.next(oneTrust);
});
// Initialize
if (defaultCountry) {
appliedLocale$.next(defaultCountry);
initializeOneTrust(src, domainScript, documentBasedLanguage, defaultCountry);
}
else {
// tslint:disable-next-line:variable-name
let __geoLocationData;
// tslint:disable-next-line:no-string-literal
window['jsonFeed'] = (location) => {
__geoLocationData = location;
};
const html = window.document.getElementsByTagName('html')[0];
const head = window.document.getElementsByTagName('head')[0];
const localizationScript = window.document.createElement('script');
localizationScript.src = 'https://geolocation.onetrust.com/cookieconsentpub/v1/geo/location';
localizationScript.setAttribute('type', 'text/javascript');
localizationScript.onload = () => {
if (__geoLocationData) {
const locale = getDefaultLocalization(__geoLocationData.country);
if (locale) {
html.setAttribute('lang', locale);
appliedLocale$.next(locale);
initializeOneTrust(src, domainScript, true);
}
else {
console.warn(`Not valid geolocation`, __geoLocationData);
initializeOneTrust(src, domainScript, false);
}
}
else {
initializeOneTrust(src, domainScript, false);
console.warn(`Not able to determine geolocation using 'https://geolocation.onetrust.com/cookieconsentpub/v1/geo/location'`);
}
};
head.insertBefore(localizationScript, head.firstChild);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vbmV0cnVzdC9zcmMvbGliL3V0aWwvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHeEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksYUFBYSxDQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV0RCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLE1BQVksRUFDWixTQUErQixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFDdEIsRUFBRTtJQUM5QixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBb0MsRUFBRSxFQUFFO1FBQzdELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDM0MsQ0FBQyxTQUEyQixFQUFFLFFBQTBCLEVBQUUsRUFBRTtZQUMxRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBd0IsRUFBRSxFQUFFO2dCQUM3QyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUNGLENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0lBQ0os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QyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxtRUFBbUUsQ0FBQztRQUM3RixrQkFBa0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDM0Qsa0JBQWtCLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUMvQixJQUFJLGlCQUFpQixFQUFFO2dCQUNyQixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakUsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ2xDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzVCLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzdDO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztvQkFDekQsa0JBQWtCLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDOUM7YUFDRjtpQkFBTTtnQkFDTCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLDZHQUE2RyxDQUFDLENBQUM7YUFDN0g7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUN4RDtBQUVILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmliZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb3VudHJpZXNMb2NhbGVzLCBHZW9Mb2NhdGlvbkRhdGEsIE9uZVRydXN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY291bnRyaWVzIH0gZnJvbSAnLi9jb3VudHJpZXMnO1xuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogV2luZG93O1xuZXhwb3J0IGNvbnN0IE9uZVRydXN0JCA9IG5ldyBSZXBsYXlTdWJqZWN0PE9uZVRydXN0PigxKTtcbmV4cG9ydCBjb25zdCBhcHBsaWVkTG9jYWxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuXG5jb25zdCBNdXRhdGlvbk9ic2VydmVyJCA9IChcbiAgdGFyZ2V0OiBOb2RlLFxuICBjb25maWc6IE11dGF0aW9uT2JzZXJ2ZXJJbml0ID0geyBjaGlsZExpc3Q6IHRydWUgfVxuKTogT2JzZXJ2YWJsZTxNdXRhdGlvblJlY29yZD4gPT4ge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBTdWJzY3JpYmVyPE11dGF0aW9uUmVjb3JkPikgPT4ge1xuICAgIGNvbnN0IG11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChtdXRhdGlvbnM6IE11dGF0aW9uUmVjb3JkW10sIGluc3RhbmNlOiBNdXRhdGlvbk9ic2VydmVyKSA9PiB7XG4gICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbjogTXV0YXRpb25SZWNvcmQpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KG11dGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGFyZ2V0LCBjb25maWcpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9KTtcbn07XG5cbmNvbnN0IE9uZVRydXN0UmVhZHkkID0gKCk6IE9ic2VydmFibGU8T25lVHJ1c3Q+ID0+IHtcbiAgcmV0dXJuIE11dGF0aW9uT2JzZXJ2ZXIkKGRvY3VtZW50LmJvZHkpLnBpcGUoXG4gICAgZmlsdGVyKChyZWNvcmQ6IE11dGF0aW9uUmVjb3JkKSA9PiByZWNvcmQuYWRkZWROb2Rlcy5sZW5ndGggPT09IDEpLFxuICAgIG1hcCgocmVjb3JkOiBNdXRhdGlvblJlY29yZCkgPT4gcmVjb3JkLmFkZGVkTm9kZXMuaXRlbSgwKSBhcyBIVE1MRWxlbWVudCksXG4gICAgZmlsdGVyKChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgICBlbGVtZW50ICYmXG4gICAgICAgICAgdHlwZW9mIGVsZW1lbnQuZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgPT09ICdvbmV0cnVzdC1jb25zZW50LXNkaydcbiAgICAgICk7XG4gICAgfSksXG4gICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgbWFwKCgpID0+IHdpbmRvd1snT25lVHJ1c3QnXSBhcyBPbmVUcnVzdClcbiAgKTtcbn07XG5cbmNvbnN0IGdldERlZmF1bHRMb2NhbGl6YXRpb24gPSAoY291bnRyeTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKGNvdW50cmllcy5oYXMoY291bnRyeS50b0xvd2VyQ2FzZSgpKSkge1xuICAgIGNvbnN0IGNvdW50cmllc0xvY2FsZXMgPSBjb3VudHJpZXMuZ2V0KGNvdW50cnkudG9Mb3dlckNhc2UoKSkgYXMgQ291bnRyaWVzTG9jYWxlcztcbiAgICBpZiAoY291bnRyaWVzTG9jYWxlcy5sb2NhbGVzICYmIGNvdW50cmllc0xvY2FsZXMubG9jYWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBhcHBseSBkZWZhdWx0IGxvY2FsZSBmb3IgdGhlIGN1cnJlbnQgY291bnRyeVxuICAgICAgcmV0dXJuIGNvdW50cmllc0xvY2FsZXMubG9jYWxlc1swXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufTtcblxuY29uc3QgaW5pdGlhbGl6ZU9uZVRydXN0ID0gKHNyYzogc3RyaW5nLCBkb21haW5TY3JpcHQ6IHN0cmluZywgZG9jdW1lbnRCYXNlZExhbmc6IGJvb2xlYW4gPSB0cnVlLCBjb3VudHJ5Q29kZTogc3RyaW5nID0gJycpOiB2b2lkID0+IHtcbiAgY29uc3QgaGVhZCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBjb25zdCBvbmVUcnVzdFNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgb25lVHJ1c3RTY3JpcHQuaWQgPSAnb25lLXRydXN0LXNjcmlwdCc7XG4gIG9uZVRydXN0U2NyaXB0LnNyYyA9IHNyYztcbiAgaWYgKGRvY3VtZW50QmFzZWRMYW5nKSB7XG4gICAgb25lVHJ1c3RTY3JpcHQuc2V0QXR0cmlidXRlKCdkYXRhLWRvY3VtZW50LWxhbmd1YWdlJywgJ3RydWUnKTtcbiAgfVxuICBvbmVUcnVzdFNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG4gIG9uZVRydXN0U2NyaXB0LnNldEF0dHJpYnV0ZSgnY2hhcnNldCcsICdVVEYtOCcpO1xuICBvbmVUcnVzdFNjcmlwdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZG9tYWluLXNjcmlwdCcsIGRvbWFpblNjcmlwdCk7XG4gIGhlYWQuaW5zZXJ0QmVmb3JlKG9uZVRydXN0U2NyaXB0LCBoZWFkLmZpcnN0Q2hpbGQpO1xuICBjb25zdCBvbmVUcnVzdEZ1bmNTY3JpcHQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gIG9uZVRydXN0RnVuY1NjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gIG9uZVRydXN0RnVuY1NjcmlwdC5pbm5lckhUTUwgPSBgZnVuY3Rpb24gT3B0YW5vbldyYXBwZXIoKSB7IH1gO1xuICBoZWFkLmFwcGVuZENoaWxkKG9uZVRydXN0RnVuY1NjcmlwdCk7XG4gIGlmIChjb3VudHJ5Q29kZSkge1xuICAgIGNvbnN0IGdlb0xvY2F0aW9uU2NyaXB0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIGdlb0xvY2F0aW9uU2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICBnZW9Mb2NhdGlvblNjcmlwdC5pbm5lckhUTUwgPSBgdmFyIE9uZVRydXN0ID0ge2dlb2xvY2F0aW9uUmVzcG9uc2U6IHtjb3VudHJ5Q29kZTogJyR7Y291bnRyeUNvZGV9J319YDtcbiAgICBoZWFkLmFwcGVuZENoaWxkKGdlb0xvY2F0aW9uU2NyaXB0KTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRPbmVUcnVzdChcbiAgZG9tYWluU2NyaXB0OiBzdHJpbmcsXG4gIGRlZmF1bHRDb3VudHJ5Pzogc3RyaW5nLFxuICBkb2N1bWVudEJhc2VkTGFuZ3VhZ2U/OiBib29sZWFuLFxuICBzcmM6IHN0cmluZyA9ICdodHRwczovL2Nkbi5jb29raWVsYXcub3JnL3NjcmlwdHRlbXBsYXRlcy9vdFNES1N0dWIuanMnXG4pOiB2b2lkIHtcbiAgLy8gR2V0IHJlYWR5IHRvIHJlY2VpdmUgdGhlIE9uZVRydXN0IG9iamVjdCBvbmNlIGxvYWRlZFxuICBPbmVUcnVzdFJlYWR5JCgpXG4gICAgLnBpcGUodGFrZSgxKSlcbiAgICAuc3Vic2NyaWJlKChvbmVUcnVzdDogT25lVHJ1c3QpID0+IHtcbiAgICAgIE9uZVRydXN0JC5uZXh0KG9uZVRydXN0KTtcbiAgICB9KTtcbiAgLy8gSW5pdGlhbGl6ZVxuICBpZiAoZGVmYXVsdENvdW50cnkpIHtcbiAgICBhcHBsaWVkTG9jYWxlJC5uZXh0KGRlZmF1bHRDb3VudHJ5KTtcbiAgICBpbml0aWFsaXplT25lVHJ1c3Qoc3JjLCBkb21haW5TY3JpcHQsIGRvY3VtZW50QmFzZWRMYW5ndWFnZSwgZGVmYXVsdENvdW50cnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgbGV0IF9fZ2VvTG9jYXRpb25EYXRhOiBHZW9Mb2NhdGlvbkRhdGE7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgd2luZG93Wydqc29uRmVlZCddID0gKGxvY2F0aW9uOiBHZW9Mb2NhdGlvbkRhdGEpID0+IHtcbiAgICAgIF9fZ2VvTG9jYXRpb25EYXRhID0gbG9jYXRpb247XG4gICAgfTtcbiAgICBjb25zdCBodG1sID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF07XG4gICAgY29uc3QgaGVhZCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgIGNvbnN0IGxvY2FsaXphdGlvblNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBsb2NhbGl6YXRpb25TY3JpcHQuc3JjID0gJ2h0dHBzOi8vZ2VvbG9jYXRpb24ub25ldHJ1c3QuY29tL2Nvb2tpZWNvbnNlbnRwdWIvdjEvZ2VvL2xvY2F0aW9uJztcbiAgICBsb2NhbGl6YXRpb25TY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuICAgIGxvY2FsaXphdGlvblNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBpZiAoX19nZW9Mb2NhdGlvbkRhdGEpIHtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gZ2V0RGVmYXVsdExvY2FsaXphdGlvbihfX2dlb0xvY2F0aW9uRGF0YS5jb3VudHJ5KTtcbiAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKCdsYW5nJywgbG9jYWxlKTtcbiAgICAgICAgICBhcHBsaWVkTG9jYWxlJC5uZXh0KGxvY2FsZSk7XG4gICAgICAgICAgaW5pdGlhbGl6ZU9uZVRydXN0KHNyYywgZG9tYWluU2NyaXB0LCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYE5vdCB2YWxpZCBnZW9sb2NhdGlvbmAsIF9fZ2VvTG9jYXRpb25EYXRhKTtcbiAgICAgICAgICBpbml0aWFsaXplT25lVHJ1c3Qoc3JjLCBkb21haW5TY3JpcHQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbGl6ZU9uZVRydXN0KHNyYywgZG9tYWluU2NyaXB0LCBmYWxzZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihgTm90IGFibGUgdG8gZGV0ZXJtaW5lIGdlb2xvY2F0aW9uIHVzaW5nICdodHRwczovL2dlb2xvY2F0aW9uLm9uZXRydXN0LmNvbS9jb29raWVjb25zZW50cHViL3YxL2dlby9sb2NhdGlvbidgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGhlYWQuaW5zZXJ0QmVmb3JlKGxvY2FsaXphdGlvblNjcmlwdCwgaGVhZC5maXJzdENoaWxkKTtcbiAgfVxuXG59XG4iXX0=