cfc-ds
Version:
Design System do Conselho Federal de Contabilidade baseado no govbr-ds
198 lines • 26.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
export class CookieBarService {
cookieConfig;
cookieOutput = new BehaviorSubject(null);
isOpen = new BehaviorSubject(false);
constructor() { }
setConfig(config) {
try {
const parsedConfig = JSON.parse(config);
// Assume o primeiro item do array como configuração padrão
// Em um cenário real, poderíamos selecionar com base em lang
this.cookieConfig = parsedConfig[0] || null;
if (this.cookieConfig) {
// Inicializa o cookie output
this.updateCookieOutput();
}
}
catch (e) {
console.error('Erro ao processar configuração de cookies:', e);
}
}
getConfig() {
return this.cookieConfig;
}
getCookieOutput() {
return this.cookieOutput.asObservable();
}
getIsOpen() {
return this.isOpen.asObservable();
}
openCookieBar() {
this.isOpen.next(true);
}
closeCookieBar() {
this.isOpen.next(false);
}
accept() {
this.updateCookieOutput();
this.closeCookieBar();
// Em um cenário real, salvaríamos as configurações em cookies ou localStorage aqui
}
updateSelectAll(selected) {
if (!this.cookieConfig)
return;
this.cookieConfig.selectAll = selected;
// Atualiza todos os grupos e cookies com o mesmo valor
this.cookieConfig.cookieGroups.forEach(group => {
// Só atualiza se o grupo for optOut (se for optIn, permanece sempre selecionado)
if (group.groupOptOut) {
group.groupSelected = selected;
// Atualiza cada cookie do grupo
group.cookieList.forEach(cookie => {
// Só atualiza se o cookie for optOut
if (cookie.cookieOptOut) {
cookie.cookieSelected = selected;
}
});
}
});
this.updateCookieOutput();
}
updateGroupSelection(groupId, selected) {
const group = this.cookieConfig.cookieGroups.find(g => g.groupId === groupId);
if (!group || !group.groupOptOut)
return;
// Atualiza o grupo
group.groupSelected = selected;
// Atualiza todos os cookies do grupo
group.cookieList.forEach(cookie => {
if (cookie.cookieOptOut) {
cookie.cookieSelected = selected;
}
});
// Verifica se todos grupos estão selecionados
this.updateSelectAllState();
this.updateCookieOutput();
}
updateCookieSelection(groupId, cookieId, selected) {
const group = this.cookieConfig.cookieGroups.find(g => g.groupId === groupId);
if (!group)
return;
const cookie = group.cookieList.find(c => c.cookieId === cookieId);
if (!cookie || !cookie.cookieOptOut)
return;
// Atualiza o cookie
cookie.cookieSelected = selected;
// Verifica o estado do grupo
this.updateGroupState(group);
// Verifica o estado geral
this.updateSelectAllState();
this.updateCookieOutput();
}
updateGroupState(group) {
const optOutCookies = group.cookieList.filter(c => c.cookieOptOut);
if (optOutCookies.length === 0) {
group.groupSelected = true;
return;
}
const selectedCookies = optOutCookies.filter(c => c.cookieSelected);
if (selectedCookies.length === 0) {
group.groupSelected = false;
}
else if (selectedCookies.length === optOutCookies.length) {
group.groupSelected = true;
}
else {
// Estado indeterminado será tratado na exibição como grupo.groupSelected = true com indeterminate
group.groupSelected = true;
}
}
updateSelectAllState() {
const optOutGroups = this.cookieConfig.cookieGroups.filter(g => g.groupOptOut);
if (optOutGroups.length === 0) {
this.cookieConfig.selectAll = true;
return;
}
const selectedGroups = optOutGroups.filter(g => g.groupSelected);
if (selectedGroups.length === 0) {
this.cookieConfig.selectAll = false;
}
else if (selectedGroups.length === optOutGroups.length) {
// Verifica se algum grupo está em estado indeterminado
const hasIndeterminateGroup = optOutGroups.some(group => {
const optOutCookies = group.cookieList.filter(c => c.cookieOptOut);
const selectedCookies = optOutCookies.filter(c => c.cookieSelected);
return selectedCookies.length > 0 && selectedCookies.length < optOutCookies.length;
});
this.cookieConfig.selectAll = !hasIndeterminateGroup;
}
else {
this.cookieConfig.selectAll = false;
}
}
updateCookieOutput() {
if (!this.cookieConfig)
return;
const output = {
selectAll: this.getSelectAllState(),
cookieGroups: this.cookieConfig.cookieGroups.map(group => ({
groupId: group.groupId,
groupSelected: this.getGroupState(group),
cookieList: group.cookieList.map(cookie => ({
cookieId: cookie.cookieId,
cookieSelected: cookie.cookieSelected
}))
}))
};
this.cookieOutput.next(output);
}
getSelectAllState() {
const optOutGroups = this.cookieConfig.cookieGroups.filter(g => g.groupOptOut);
if (optOutGroups.length === 0)
return true;
const selectedGroups = optOutGroups.filter(g => g.groupSelected);
const partialSelectedGroups = optOutGroups.some(group => {
if (!group.groupSelected)
return false;
const optOutCookies = group.cookieList.filter(c => c.cookieOptOut);
const selectedCookies = optOutCookies.filter(c => c.cookieSelected);
return selectedCookies.length > 0 && selectedCookies.length < optOutCookies.length;
});
if (selectedGroups.length === 0) {
return false;
}
else if (selectedGroups.length === optOutGroups.length && !partialSelectedGroups) {
return true;
}
else {
return 'indeterminated';
}
}
getGroupState(group) {
const optOutCookies = group.cookieList.filter(c => c.cookieOptOut);
if (optOutCookies.length === 0)
return true;
const selectedCookies = optOutCookies.filter(c => c.cookieSelected);
if (selectedCookies.length === 0) {
return false;
}
else if (selectedCookies.length === optOutCookies.length) {
return true;
}
else {
return 'indeterminated';
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CookieBarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CookieBarService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CookieBarService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLWJhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2ZjLWRzL3NyYy9saWIvc2VydmljZXMvY29va2llLWJhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFPbkQsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixZQUFZLENBQW1CO0lBQy9CLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBeUIsSUFBSSxDQUFDLENBQUM7SUFDakUsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRXJELGdCQUFlLENBQUM7SUFFVCxTQUFTLENBQUMsTUFBYztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBc0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzRCwyREFBMkQ7WUFDM0QsNkRBQTZEO1lBQzdELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUU1QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsNkJBQTZCO2dCQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRU0sU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRU0sZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJ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QUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29va2llQmFyQ29uZmlnLCBDb29raWVCYXJPdXRwdXQgfSBmcm9tICcuLi9tb2RlbHMvY29va2llLWJhci5tb2RlbCc7XHJcbmltcG9ydCB7IENvb2tpZUdyb3VwIH0gZnJvbSAnLi4vbW9kZWxzL2Nvb2tpZS1ncm91cC5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb29raWVCYXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIGNvb2tpZUNvbmZpZyE6IENvb2tpZUJhckNvbmZpZztcclxuICBwcml2YXRlIGNvb2tpZU91dHB1dCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29va2llQmFyT3V0cHV0IHwgbnVsbD4obnVsbCk7XHJcbiAgcHJpdmF0ZSBpc09wZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBwdWJsaWMgc2V0Q29uZmlnKGNvbmZpZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBwYXJzZWRDb25maWc6IENvb2tpZUJhckNvbmZpZ1tdID0gSlNPTi5wYXJzZShjb25maWcpO1xyXG4gICAgICAvLyBBc3N1bWUgbyBwcmltZWlybyBpdGVtIGRvIGFycmF5IGNvbW8gY29uZmlndXJhw6fDo28gcGFkcsOjb1xyXG4gICAgICAvLyBFbSB1bSBjZW7DoXJpbyByZWFsLCBwb2RlcsOtYW1vcyBzZWxlY2lvbmFyIGNvbSBiYXNlIGVtIGxhbmdcclxuICAgICAgdGhpcy5jb29raWVDb25maWcgPSBwYXJzZWRDb25maWdbMF0gfHwgbnVsbDtcclxuICAgICAgXHJcbiAgICAgIGlmICh0aGlzLmNvb2tpZUNvbmZpZykge1xyXG4gICAgICAgIC8vIEluaWNpYWxpemEgbyBjb29raWUgb3V0cHV0XHJcbiAgICAgICAgdGhpcy51cGRhdGVDb29raWVPdXRwdXQoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvIGFvIHByb2Nlc3NhciBjb25maWd1cmHDp8OjbyBkZSBjb29raWVzOicsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbmZpZygpOiBDb29raWVCYXJDb25maWcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29va2llQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvb2tpZU91dHB1dCgpOiBPYnNlcnZhYmxlPENvb2tpZUJhck91dHB1dCB8IG51bGw+IHtcclxuICAgIHJldHVybiB0aGlzLmNvb2tpZU91dHB1dC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc09wZW4oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc09wZW4uYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlbkNvb2tpZUJhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNPcGVuLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VDb29raWVCYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3Blbi5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY2NlcHQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUNvb2tpZU91dHB1dCgpO1xyXG4gICAgdGhpcy5jbG9zZUNvb2tpZUJhcigpO1xyXG4gICAgLy8gRW0gdW0gY2Vuw6FyaW8gcmVhbCwgc2FsdmFyw61hbW9zIGFzIGNvbmZpZ3VyYcOnw7VlcyBlbSBjb29raWVzIG91IGxvY2FsU3RvcmFnZSBhcXVpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlU2VsZWN0QWxsKHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY29va2llQ29uZmlnKSByZXR1cm47XHJcbiAgICBcclxuICAgIHRoaXMuY29va2llQ29uZmlnLnNlbGVjdEFsbCA9IHNlbGVjdGVkO1xyXG4gICAgXHJcbiAgICAvLyBBdHVhbGl6YSB0b2RvcyBvcyBncnVwb3MgZSBjb29raWVzIGNvbSBvIG1lc21vIHZhbG9yXHJcbiAgICB0aGlzLmNvb2tpZUNvbmZpZy5jb29raWVHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgIC8vIFPDsyBhdHVhbGl6YSBzZSBvIGdydXBvIGZvciBvcHRPdXQgKHNlIGZvciBvcHRJbiwgcGVybWFuZWNlIHNlbXByZSBzZWxlY2lvbmFkbylcclxuICAgICAgaWYgKGdyb3VwLmdyb3VwT3B0T3V0KSB7XHJcbiAgICAgICAgZ3JvdXAuZ3JvdXBTZWxlY3RlZCA9IHNlbGVjdGVkO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIEF0dWFsaXphIGNhZGEgY29va2llIGRvIGdydXBvXHJcbiAgICAgICAgZ3JvdXAuY29va2llTGlzdC5mb3JFYWNoKGNvb2tpZSA9PiB7XHJcbiAgICAgICAgICAvLyBTw7MgYXR1YWxpemEgc2UgbyBjb29raWUgZm9yIG9wdE91dFxyXG4gICAgICAgICAgaWYgKGNvb2tpZS5jb29raWVPcHRPdXQpIHtcclxuICAgICAgICAgICAgY29va2llLmNvb2tpZVNlbGVjdGVkID0gc2VsZWN0ZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICB0aGlzLnVwZGF0ZUNvb2tpZU91dHB1dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUdyb3VwU2VsZWN0aW9uKGdyb3VwSWQ6IHN0cmluZywgc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5jb29raWVDb25maWcuY29va2llR3JvdXBzLmZpbmQoZyA9PiBnLmdyb3VwSWQgPT09IGdyb3VwSWQpO1xyXG4gICAgaWYgKCFncm91cCB8fCAhZ3JvdXAuZ3JvdXBPcHRPdXQpIHJldHVybjtcclxuICAgIFxyXG4gICAgLy8gQXR1YWxpemEgbyBncnVwb1xyXG4gICAgZ3JvdXAuZ3JvdXBTZWxlY3RlZCA9IHNlbGVjdGVkO1xyXG4gICAgXHJcbiAgICAvLyBBdHVhbGl6YSB0b2RvcyBvcyBjb29raWVzIGRvIGdydXBvXHJcbiAgICBncm91cC5jb29raWVMaXN0LmZvckVhY2goY29va2llID0+IHtcclxuICAgICAgaWYgKGNvb2tpZS5jb29raWVPcHRPdXQpIHtcclxuICAgICAgICBjb29raWUuY29va2llU2VsZWN0ZWQgPSBzZWxlY3RlZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIFZlcmlmaWNhIHNlIHRvZG9zIGdydXBvcyBlc3TDo28gc2VsZWNpb25hZG9zXHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbFN0YXRlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUNvb2tpZU91dHB1dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUNvb2tpZVNlbGVjdGlvbihncm91cElkOiBzdHJpbmcsIGNvb2tpZUlkOiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMuY29va2llQ29uZmlnLmNvb2tpZUdyb3Vwcy5maW5kKGcgPT4gZy5ncm91cElkID09PSBncm91cElkKTtcclxuICAgIGlmICghZ3JvdXApIHJldHVybjtcclxuICAgIFxyXG4gICAgY29uc3QgY29va2llID0gZ3JvdXAuY29va2llTGlzdC5maW5kKGMgPT4gYy5jb29raWVJZCA9PT0gY29va2llSWQpO1xyXG4gICAgaWYgKCFjb29raWUgfHwgIWNvb2tpZS5jb29raWVPcHRPdXQpIHJldHVybjtcclxuICAgIFxyXG4gICAgLy8gQXR1YWxpemEgbyBjb29raWVcclxuICAgIGNvb2tpZS5jb29raWVTZWxlY3RlZCA9IHNlbGVjdGVkO1xyXG4gICAgXHJcbiAgICAvLyBWZXJpZmljYSBvIGVzdGFkbyBkbyBncnVwb1xyXG4gICAgdGhpcy51cGRhdGVHcm91cFN0YXRlKGdyb3VwKTtcclxuICAgIFxyXG4gICAgLy8gVmVyaWZpY2EgbyBlc3RhZG8gZ2VyYWxcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUoKTtcclxuICAgIFxyXG4gICAgdGhpcy51cGRhdGVDb29raWVPdXRwdXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlR3JvdXBTdGF0ZShncm91cDogQ29va2llR3JvdXApOiB2b2lkIHtcclxuICAgIGNvbnN0IG9wdE91dENvb2tpZXMgPSBncm91cC5jb29raWVMaXN0LmZpbHRlcihjID0+IGMuY29va2llT3B0T3V0KTtcclxuICAgIFxyXG4gICAgaWYgKG9wdE91dENvb2tpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGdyb3VwLmdyb3VwU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IHNlbGVjdGVkQ29va2llcyA9IG9wdE91dENvb2tpZXMuZmlsdGVyKGMgPT4gYy5jb29raWVTZWxlY3RlZCk7XHJcbiAgICBcclxuICAgIGlmIChzZWxlY3RlZENvb2tpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGdyb3VwLmdyb3VwU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDb29raWVzLmxlbmd0aCA9PT0gb3B0T3V0Q29va2llcy5sZW5ndGgpIHtcclxuICAgICAgZ3JvdXAuZ3JvdXBTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBFc3RhZG8gaW5kZXRlcm1pbmFkbyBzZXLDoSB0cmF0YWRvIG5hIGV4aWJpw6fDo28gY29tbyBncnVwby5ncm91cFNlbGVjdGVkID0gdHJ1ZSBjb20gaW5kZXRlcm1pbmF0ZVxyXG4gICAgICBncm91cC5ncm91cFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0QWxsU3RhdGUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvcHRPdXRHcm91cHMgPSB0aGlzLmNvb2tpZUNvbmZpZy5jb29raWVHcm91cHMuZmlsdGVyKGcgPT4gZy5ncm91cE9wdE91dCk7XHJcbiAgICBcclxuICAgIGlmIChvcHRPdXRHcm91cHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29va2llQ29uZmlnLnNlbGVjdEFsbCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBvcHRPdXRHcm91cHMuZmlsdGVyKGcgPT4gZy5ncm91cFNlbGVjdGVkKTtcclxuICAgIFxyXG4gICAgaWYgKHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNvb2tpZUNvbmZpZy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRHcm91cHMubGVuZ3RoID09PSBvcHRPdXRHcm91cHMubGVuZ3RoKSB7XHJcbiAgICAgIC8vIFZlcmlmaWNhIHNlIGFsZ3VtIGdydXBvIGVzdMOhIGVtIGVzdGFkbyBpbmRldGVybWluYWRvXHJcbiAgICAgIGNvbnN0IGhhc0luZGV0ZXJtaW5hdGVHcm91cCA9IG9wdE91dEdyb3Vwcy5zb21lKGdyb3VwID0+IHtcclxuICAgICAgICBjb25zdCBvcHRPdXRDb29raWVzID0gZ3JvdXAuY29va2llTGlzdC5maWx0ZXIoYyA9PiBjLmNvb2tpZU9wdE91dCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb29raWVzID0gb3B0T3V0Q29va2llcy5maWx0ZXIoYyA9PiBjLmNvb2tpZVNlbGVjdGVkKTtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb29raWVzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRDb29raWVzLmxlbmd0aCA8IG9wdE91dENvb2tpZXMubGVuZ3RoO1xyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuY29va2llQ29uZmlnLnNlbGVjdEFsbCA9ICFoYXNJbmRldGVybWluYXRlR3JvdXA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvb2tpZUNvbmZpZy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ29va2llT3V0cHV0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNvb2tpZUNvbmZpZykgcmV0dXJuO1xyXG4gICAgXHJcbiAgICBjb25zdCBvdXRwdXQ6IENvb2tpZUJhck91dHB1dCA9IHtcclxuICAgICAgc2VsZWN0QWxsOiB0aGlzLmdldFNlbGVjdEFsbFN0YXRlKCksXHJcbiAgICAgIGNvb2tpZUdyb3VwczogdGhpcy5jb29raWVDb25maWcuY29va2llR3JvdXBzLm1hcChncm91cCA9PiAoe1xyXG4gICAgICAgIGdyb3VwSWQ6IGdyb3VwLmdyb3VwSWQsXHJcbiAgICAgICAgZ3JvdXBTZWxlY3RlZDogdGhpcy5nZXRHcm91cFN0YXRlKGdyb3VwKSxcclxuICAgICAgICBjb29raWVMaXN0OiBncm91cC5jb29raWVMaXN0Lm1hcChjb29raWUgPT4gKHtcclxuICAgICAgICAgIGNvb2tpZUlkOiBjb29raWUuY29va2llSWQsXHJcbiAgICAgICAgICBjb29raWVTZWxlY3RlZDogY29va2llLmNvb2tpZVNlbGVjdGVkXHJcbiAgICAgICAgfSkpXHJcbiAgICAgIH0pKVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgdGhpcy5jb29raWVPdXRwdXQubmV4dChvdXRwdXQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3RBbGxTdGF0ZSgpOiBib29sZWFuIHwgJ2luZGV0ZXJtaW5hdGVkJyB7XHJcbiAgICBjb25zdCBvcHRPdXRHcm91cHMgPSB0aGlzLmNvb2tpZUNvbmZpZy5jb29raWVHcm91cHMuZmlsdGVyKGcgPT4gZy5ncm91cE9wdE91dCk7XHJcbiAgICBcclxuICAgIGlmIChvcHRPdXRHcm91cHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBvcHRPdXRHcm91cHMuZmlsdGVyKGcgPT4gZy5ncm91cFNlbGVjdGVkKTtcclxuICAgIGNvbnN0IHBhcnRpYWxTZWxlY3RlZEdyb3VwcyA9IG9wdE91dEdyb3Vwcy5zb21lKGdyb3VwID0+IHtcclxuICAgICAgaWYgKCFncm91cC5ncm91cFNlbGVjdGVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBvcHRPdXRDb29raWVzID0gZ3JvdXAuY29va2llTGlzdC5maWx0ZXIoYyA9PiBjLmNvb2tpZU9wdE91dCk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ29va2llcyA9IG9wdE91dENvb2tpZXMuZmlsdGVyKGMgPT4gYy5jb29raWVTZWxlY3RlZCk7XHJcbiAgICAgIHJldHVybiBzZWxlY3RlZENvb2tpZXMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZENvb2tpZXMubGVuZ3RoIDwgb3B0T3V0Q29va2llcy5sZW5ndGg7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgaWYgKHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA9PT0gb3B0T3V0R3JvdXBzLmxlbmd0aCAmJiAhcGFydGlhbFNlbGVjdGVkR3JvdXBzKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdpbmRldGVybWluYXRlZCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyb3VwU3RhdGUoZ3JvdXA6IENvb2tpZUdyb3VwKTogYm9vbGVhbiB8ICdpbmRldGVybWluYXRlZCcge1xyXG4gICAgY29uc3Qgb3B0T3V0Q29va2llcyA9IGdyb3VwLmNvb2tpZUxpc3QuZmlsdGVyKGMgPT4gYy5jb29raWVPcHRPdXQpO1xyXG4gICAgXHJcbiAgICBpZiAob3B0T3V0Q29va2llcy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICBjb25zdCBzZWxlY3RlZENvb2tpZXMgPSBvcHRPdXRDb29raWVzLmZpbHRlcihjID0+IGMuY29va2llU2VsZWN0ZWQpO1xyXG4gICAgXHJcbiAgICBpZiAoc2VsZWN0ZWRDb29raWVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQ29va2llcy5sZW5ndGggPT09IG9wdE91dENvb2tpZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdpbmRldGVybWluYXRlZCc7XHJcbiAgICB9XHJcbiAgfVxyXG59Il19