diff --git a/README.md b/README.md index 9bd93b0..5c6f166 100644 --- a/README.md +++ b/README.md @@ -171,89 +171,89 @@ CmpList cmpList = loader.cmpList(cmpListContent); |uspv1|6|Notice|2 bit int| |uspv1|6|OptOutSale|2 bit int| |uspv1|6|LspaCovered|2 bit int| -|uspnatv1|7|Version|6 bit int. Value is 1| -|uspnatv1|7|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|SharingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|SensitiveDataProcessingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|SensitiveDataLimitUseNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|SharingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|SensitiveDataProcessing|2 bit int list of size 12. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|KnownChildSensitiveDataConsents|2 bit int list of size 2. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|PersonalDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspnatv1|7|GpcSegmentType|2 bit int. Value is 1| -|uspnatv1|7|GpcSegmentIncluded|Boolean. Default value is true| -|uspnatv1|7|Gpc|Boolean| -|uspcav1|8|Version|6 bit int. Value is 1| -|uspcav1|8|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|SharingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|SensitiveDataLimitUseNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|SharingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|SensitiveDataProcessing|2 bit int list of size 9. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|KnownChildSensitiveDataConsents|2 bit int list of size 2. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|PersonalDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcav1|8|GpcSegmentType|2 bit int. Value is 1| -|uspcav1|8|GpcSegmentIncluded|Boolean. Default value is true| -|uspcav1|8|Gpc|Boolean| -|uspvav1|9|Version|6 bit int. Value is 1| -|uspvav1|9|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspvav1|9|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspvav1|9|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspvav1|9|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspvav1|9|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspvav1|9|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| -|uspvav1|9|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspvav1|9|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspvav1|9|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspvav1|9|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|Version|6 bit int. Value is 1| -|uspcov1|10|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|SensitiveDataProcessing|2 bit int list of size 7. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspcov1|10|GpcSegmentType|2 bit int. Value is 1| -|uspcov1|10|GpcSegmentIncluded|Boolean. Default value is true| -|uspcov1|10|Gpc|Boolean| -|usputv1|11|Version|6 bit int. Value is 1| -|usputv1|11|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|SensitiveDataProcessingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usputv1|11|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|Version|6 bit int. Value is 1| -|uspctv1|12|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|KnownChildSensitiveDataConsents|2 bit int list of size 3. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|uspctv1|12|GpcSegmentType|2 bit int. Value is 1| -|uspctv1|12|GpcSegmentIncluded|Boolean. Default value is true| -|uspctv1|12|Gpc|Boolean| +|usnatv1|7|Version|6 bit int. Value is 1| +|usnatv1|7|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|SharingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|SensitiveDataProcessingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|SensitiveDataLimitUseNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|SharingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|SensitiveDataProcessing|2 bit int list of size 12. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|KnownChildSensitiveDataConsents|2 bit int list of size 2. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|PersonalDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usnatv1|7|GpcSegmentType|2 bit int. Value is 1| +|usnatv1|7|GpcSegmentIncluded|Boolean. Default value is true| +|usnatv1|7|Gpc|Boolean| +|uscav1|8|Version|6 bit int. Value is 1| +|uscav1|8|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|SharingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|SensitiveDataLimitUseNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|SharingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|SensitiveDataProcessing|2 bit int list of size 9. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|KnownChildSensitiveDataConsents|2 bit int list of size 2. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|PersonalDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscav1|8|GpcSegmentType|2 bit int. Value is 1| +|uscav1|8|GpcSegmentIncluded|Boolean. Default value is true| +|uscav1|8|Gpc|Boolean| +|usvav1|9|Version|6 bit int. Value is 1| +|usvav1|9|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usvav1|9|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usvav1|9|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usvav1|9|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usvav1|9|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usvav1|9|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| +|usvav1|9|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usvav1|9|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usvav1|9|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usvav1|9|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|Version|6 bit int. Value is 1| +|uscov1|10|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|SensitiveDataProcessing|2 bit int list of size 7. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|uscov1|10|GpcSegmentType|2 bit int. Value is 1| +|uscov1|10|GpcSegmentIncluded|Boolean. Default value is true| +|uscov1|10|Gpc|Boolean| +|usutv1|11|Version|6 bit int. Value is 1| +|usutv1|11|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|SensitiveDataProcessingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usutv1|11|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|Version|6 bit int. Value is 1| +|usctv1|12|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|KnownChildSensitiveDataConsents|2 bit int list of size 3. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| +|usctv1|12|GpcSegmentType|2 bit int. Value is 1| +|usctv1|12|GpcSegmentIncluded|Boolean. Default value is true| +|usctv1|12|Gpc|Boolean| diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index e1a96cd..b669076 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 3.0.11-SNAPSHOT + 3.1.1-SNAPSHOT iabgpp-encoder @@ -27,13 +27,6 @@ maven-surefire-plugin 2.22.2 - - - org.junit.platform - junit-platform-surefire-provider - 1.3.2 - - diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index dcbf355..626fb82 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -13,13 +13,13 @@ import com.iab.gpp.encoder.section.Sections; import com.iab.gpp.encoder.section.TcfCaV1; import com.iab.gpp.encoder.section.TcfEuV2; -import com.iab.gpp.encoder.section.UspCaV1; -import com.iab.gpp.encoder.section.UspCoV1; -import com.iab.gpp.encoder.section.UspCtV1; -import com.iab.gpp.encoder.section.UspNatV1; -import com.iab.gpp.encoder.section.UspUtV1; +import com.iab.gpp.encoder.section.UsCaV1; +import com.iab.gpp.encoder.section.UsCoV1; +import com.iab.gpp.encoder.section.UsCtV1; +import com.iab.gpp.encoder.section.UsNatV1; +import com.iab.gpp.encoder.section.UsUtV1; import com.iab.gpp.encoder.section.UspV1; -import com.iab.gpp.encoder.section.UspVaV1; +import com.iab.gpp.encoder.section.UsVaV1; public class GppModel { private Map sections = new HashMap<>(); @@ -50,24 +50,24 @@ public void setFieldValue(String sectionName, String fieldName, Object value) th } else if (sectionName.equals(UspV1.NAME)) { section = new UspV1(); this.sections.put(UspV1.NAME, section); - } else if (sectionName.equals(UspNatV1.NAME)) { - section = new UspNatV1(); - this.sections.put(UspNatV1.NAME, section); - } else if (sectionName.equals(UspCaV1.NAME)) { - section = new UspCaV1(); - this.sections.put(UspCaV1.NAME, section); - } else if (sectionName.equals(UspVaV1.NAME)) { - section = new UspVaV1(); - this.sections.put(UspVaV1.NAME, section); - } else if (sectionName.equals(UspCoV1.NAME)) { - section = new UspCoV1(); - this.sections.put(UspCoV1.NAME, section); - } else if (sectionName.equals(UspUtV1.NAME)) { - section = new UspUtV1(); - this.sections.put(UspUtV1.NAME, section); - } else if (sectionName.equals(UspCtV1.NAME)) { - section = new UspCtV1(); - this.sections.put(UspCtV1.NAME, section); + } else if (sectionName.equals(UsNatV1.NAME)) { + section = new UsNatV1(); + this.sections.put(UsNatV1.NAME, section); + } else if (sectionName.equals(UsCaV1.NAME)) { + section = new UsCaV1(); + this.sections.put(UsCaV1.NAME, section); + } else if (sectionName.equals(UsVaV1.NAME)) { + section = new UsVaV1(); + this.sections.put(UsVaV1.NAME, section); + } else if (sectionName.equals(UsCoV1.NAME)) { + section = new UsCoV1(); + this.sections.put(UsCoV1.NAME, section); + } else if (sectionName.equals(UsUtV1.NAME)) { + section = new UsUtV1(); + this.sections.put(UsUtV1.NAME, section); + } else if (sectionName.equals(UsCtV1.NAME)) { + section = new UsCtV1(); + this.sections.put(UsCtV1.NAME, section); } } else { section = this.sections.get(sectionName); @@ -160,28 +160,28 @@ public UspV1 getUspV1Section() { return (UspV1) getSection(UspV1.NAME); } - public UspNatV1 getUspNatV1Section() { - return (UspNatV1) getSection(UspNatV1.NAME); + public UsNatV1 getUspNatV1Section() { + return (UsNatV1) getSection(UsNatV1.NAME); } - public UspCaV1 getUspCaV1Section() { - return (UspCaV1) getSection(UspCaV1.NAME); + public UsCaV1 getUspCaV1Section() { + return (UsCaV1) getSection(UsCaV1.NAME); } - public UspVaV1 getUspVaV1Section() { - return (UspVaV1) getSection(UspVaV1.NAME); + public UsVaV1 getUspVaV1Section() { + return (UsVaV1) getSection(UsVaV1.NAME); } - public UspCoV1 getUspCoV1Section() { - return (UspCoV1) getSection(UspCoV1.NAME); + public UsCoV1 getUspCoV1Section() { + return (UsCoV1) getSection(UsCoV1.NAME); } - public UspUtV1 getUspUtV1Section() { - return (UspUtV1) getSection(UspUtV1.NAME); + public UsUtV1 getUspUtV1Section() { + return (UsUtV1) getSection(UsUtV1.NAME); } - public UspCtV1 getUspCtV1Section() { - return (UspCtV1) getSection(UspCtV1.NAME); + public UsCtV1 getUspCtV1Section() { + return (UsCtV1) getSection(UsCtV1.NAME); } public List getSectionIds() { @@ -239,24 +239,24 @@ public void decode(String str) throws DecodingException { } else if (sectionIds.get(i).equals(UspV1.ID)) { UspV1 section = new UspV1(encodedSections[i + 1]); this.sections.put(UspV1.NAME, section); - } else if (sectionIds.get(i).equals(UspCaV1.ID)) { - UspCaV1 section = new UspCaV1(encodedSections[i + 1]); - this.sections.put(UspCaV1.NAME, section); - } else if (sectionIds.get(i).equals(UspNatV1.ID)) { - UspNatV1 section = new UspNatV1(encodedSections[i + 1]); - this.sections.put(UspNatV1.NAME, section); - } else if (sectionIds.get(i).equals(UspVaV1.ID)) { - UspVaV1 section = new UspVaV1(encodedSections[i + 1]); - this.sections.put(UspVaV1.NAME, section); - } else if (sectionIds.get(i).equals(UspCoV1.ID)) { - UspCoV1 section = new UspCoV1(encodedSections[i + 1]); - this.sections.put(UspCoV1.NAME, section); - } else if (sectionIds.get(i).equals(UspUtV1.ID)) { - UspUtV1 section = new UspUtV1(encodedSections[i + 1]); - this.sections.put(UspUtV1.NAME, section); - } else if (sectionIds.get(i).equals(UspCtV1.ID)) { - UspCtV1 section = new UspCtV1(encodedSections[i + 1]); - this.sections.put(UspCtV1.NAME, section); + } else if (sectionIds.get(i).equals(UsCaV1.ID)) { + UsCaV1 section = new UsCaV1(encodedSections[i + 1]); + this.sections.put(UsCaV1.NAME, section); + } else if (sectionIds.get(i).equals(UsNatV1.ID)) { + UsNatV1 section = new UsNatV1(encodedSections[i + 1]); + this.sections.put(UsNatV1.NAME, section); + } else if (sectionIds.get(i).equals(UsVaV1.ID)) { + UsVaV1 section = new UsVaV1(encodedSections[i + 1]); + this.sections.put(UsVaV1.NAME, section); + } else if (sectionIds.get(i).equals(UsCoV1.ID)) { + UsCoV1 section = new UsCoV1(encodedSections[i + 1]); + this.sections.put(UsCoV1.NAME, section); + } else if (sectionIds.get(i).equals(UsUtV1.ID)) { + UsUtV1 section = new UsUtV1(encodedSections[i + 1]); + this.sections.put(UsUtV1.NAME, section); + } else if (sectionIds.get(i).equals(UsCtV1.ID)) { + UsCtV1 section = new UsCtV1(encodedSections[i + 1]); + this.sections.put(UsCtV1.NAME, section); } } } @@ -289,24 +289,24 @@ public void decodeSection(String sectionName, String encodedString) throws Decod } else if (sectionName.equals(UspV1.NAME)) { section = new UspV1(); this.sections.put(UspV1.NAME, section); - } else if (sectionName.equals(UspNatV1.NAME)) { - section = new UspNatV1(); - this.sections.put(UspNatV1.NAME, section); - } else if (sectionName.equals(UspCaV1.NAME)) { - section = new UspCaV1(); - this.sections.put(UspCaV1.NAME, section); - } else if (sectionName.equals(UspVaV1.NAME)) { - section = new UspVaV1(); - this.sections.put(UspVaV1.NAME, section); - } else if (sectionName.equals(UspCoV1.NAME)) { - section = new UspCoV1(); - this.sections.put(UspCoV1.NAME, section); - } else if (sectionName.equals(UspUtV1.NAME)) { - section = new UspUtV1(); - this.sections.put(UspUtV1.NAME, section); - } else if (sectionName.equals(UspCtV1.NAME)) { - section = new UspCtV1(); - this.sections.put(UspCtV1.NAME, section); + } else if (sectionName.equals(UsNatV1.NAME)) { + section = new UsNatV1(); + this.sections.put(UsNatV1.NAME, section); + } else if (sectionName.equals(UsCaV1.NAME)) { + section = new UsCaV1(); + this.sections.put(UsCaV1.NAME, section); + } else if (sectionName.equals(UsVaV1.NAME)) { + section = new UsVaV1(); + this.sections.put(UsVaV1.NAME, section); + } else if (sectionName.equals(UsCoV1.NAME)) { + section = new UsCoV1(); + this.sections.put(UsCoV1.NAME, section); + } else if (sectionName.equals(UsUtV1.NAME)) { + section = new UsUtV1(); + this.sections.put(UsUtV1.NAME, section); + } else if (sectionName.equals(UsCtV1.NAME)) { + section = new UsCtV1(); + this.sections.put(UsCtV1.NAME, section); } } else { section = this.sections.get(sectionName); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/error/LazyDecodingException.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/error/LazyDecodingException.java new file mode 100644 index 0000000..070a02d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/error/LazyDecodingException.java @@ -0,0 +1,18 @@ +package com.iab.gpp.encoder.error; + +public class LazyDecodingException extends DecodingException { + + private static final long serialVersionUID = 2098268445119981680L; + + public LazyDecodingException(String msg) { + super(msg); + } + + public LazyDecodingException(Exception e) { + super(e); + } + + public LazyDecodingException(String msg, Exception e) { + super(msg, e); + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaV1Field.java similarity index 97% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspCaV1Field.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaV1Field.java index 12b3057..0c13980 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaV1Field.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.field; -public class UspCaV1Field { +public class UsCaV1Field { public static String VERSION = "Version"; public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspCoV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoV1Field.java similarity index 97% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspCoV1Field.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoV1Field.java index 2126523..8bcce1a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspCoV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoV1Field.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.field; -public class UspCoV1Field { +public class UsCoV1Field { public static String VERSION = "Version"; public static String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspCtV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtV1Field.java similarity index 97% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspCtV1Field.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtV1Field.java index 56bdb07..ba7b9b0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspCtV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtV1Field.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.field; -public class UspCtV1Field { +public class UsCtV1Field { public static String VERSION = "Version"; public static String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspNatV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatV1Field.java similarity index 97% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspNatV1Field.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatV1Field.java index 8707a5e..5a023e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspNatV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatV1Field.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.field; -public class UspNatV1Field { +public class UsNatV1Field { public static String VERSION = "Version"; public static String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspUtV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtV1Field.java similarity index 97% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspUtV1Field.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtV1Field.java index 0ceffa7..7a649e9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspUtV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtV1Field.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.field; -public class UspUtV1Field { +public class UsUtV1Field { public static String VERSION = "Version"; public static String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspVaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaV1Field.java similarity index 96% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspVaV1Field.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaV1Field.java index ceca6a1..6125d17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspVaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaV1Field.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.field; -public class UspVaV1Field { +public class UsVaV1Field { public static String VERSION = "Version"; public static String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java index f98a74a..1564735 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java @@ -18,12 +18,12 @@ public class Sections { SECTION_ID_NAME_MAP.put(TcfEuV2.ID, TcfEuV2.NAME); SECTION_ID_NAME_MAP.put(TcfCaV1.ID, TcfCaV1.NAME); SECTION_ID_NAME_MAP.put(UspV1.ID, UspV1.NAME); - SECTION_ID_NAME_MAP.put(UspNatV1.ID, UspNatV1.NAME); - SECTION_ID_NAME_MAP.put(UspCaV1.ID, UspCaV1.NAME); - SECTION_ID_NAME_MAP.put(UspVaV1.ID, UspVaV1.NAME); - SECTION_ID_NAME_MAP.put(UspCoV1.ID, UspCoV1.NAME); - SECTION_ID_NAME_MAP.put(UspUtV1.ID, UspUtV1.NAME); - SECTION_ID_NAME_MAP.put(UspCtV1.ID, UspCtV1.NAME); + SECTION_ID_NAME_MAP.put(UsNatV1.ID, UsNatV1.NAME); + SECTION_ID_NAME_MAP.put(UsCaV1.ID, UsCaV1.NAME); + SECTION_ID_NAME_MAP.put(UsVaV1.ID, UsVaV1.NAME); + SECTION_ID_NAME_MAP.put(UsCoV1.ID, UsCoV1.NAME); + SECTION_ID_NAME_MAP.put(UsUtV1.ID, UsUtV1.NAME); + SECTION_ID_NAME_MAP.put(UsCtV1.ID, UsCtV1.NAME); SECTION_ORDER = new ArrayList(SECTION_ID_NAME_MAP.keySet()).stream().sorted() .map(id -> SECTION_ID_NAME_MAP.get(id)).collect(Collectors.toList()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCaV1.java similarity index 53% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspCaV1.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCaV1.java index 7ee91b0..de88746 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCaV1.java @@ -12,21 +12,21 @@ import com.iab.gpp.encoder.datatype.encoder.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.field.UspCaV1Field; +import com.iab.gpp.encoder.field.UsCaV1Field; import com.iab.gpp.encoder.field.UspV1Field; -public class UspCaV1 extends AbstractEncodableSegmentedBitStringSection { +public class UsCaV1 extends AbstractEncodableSegmentedBitStringSection { public static int ID = 8; public static int VERSION = 1; - public static String NAME = "uspcav1"; + public static String NAME = "uscav1"; private AbstractBase64UrlEncoder base64UrlEncoder = new CompressedBase64UrlEncoder(); - public UspCaV1() { + public UsCaV1() { initFields(); } - public UspCaV1(String encodedString) throws DecodingException { + public UsCaV1(String encodedString) throws DecodingException { initFields(); if (encodedString != null && encodedString.length() > 0) { @@ -37,44 +37,44 @@ public UspCaV1(String encodedString) throws DecodingException { private void initFields() { fields = new HashMap<>(); - fields.put(UspCaV1Field.VERSION, new EncodableFixedInteger(6, UspCaV1.VERSION)); - fields.put(UspCaV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspCaV1Field.SHARING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspCaV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspCaV1Field.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspCaV1Field.SENSITIVE_DATA_PROCESSING, + fields.put(UsCaV1Field.VERSION, new EncodableFixedInteger(6, UsCaV1.VERSION)); + fields.put(UsCaV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsCaV1Field.SHARING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsCaV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsCaV1Field.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsCaV1Field.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0))); - fields.put(UspCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0))); - fields.put(UspCaV1Field.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); - fields.put(UspCaV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); - fields.put(UspCaV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); - fields.put(UspCaV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); + fields.put(UsCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0))); + fields.put(UsCaV1Field.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); + fields.put(UsCaV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); + fields.put(UsCaV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); + fields.put(UsCaV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); // gpc segment - fields.put(UspCaV1Field.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UspCaV1Field.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); - fields.put(UspCaV1Field.GPC, new EncodableBoolean(false)); + fields.put(UsCaV1Field.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + fields.put(UsCaV1Field.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsCaV1Field.GPC, new EncodableBoolean(false)); //@formatter:off String[] coreSegment = new String[] { - UspCaV1Field.VERSION, - UspCaV1Field.SALE_OPT_OUT_NOTICE, - UspCaV1Field.SHARING_OPT_OUT_NOTICE, - UspCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, - UspCaV1Field.SALE_OPT_OUT, - UspCaV1Field.SHARING_OPT_OUT, - UspCaV1Field.SENSITIVE_DATA_PROCESSING, - UspCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UspCaV1Field.PERSONAL_DATA_CONSENTS, - UspCaV1Field.MSPA_COVERED_TRANSACTION, - UspCaV1Field.MSPA_OPT_OUT_OPTION_MODE, - UspCaV1Field.MSPA_SERVICE_PROVIDER_MODE + UsCaV1Field.VERSION, + UsCaV1Field.SALE_OPT_OUT_NOTICE, + UsCaV1Field.SHARING_OPT_OUT_NOTICE, + UsCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, + UsCaV1Field.SALE_OPT_OUT, + UsCaV1Field.SHARING_OPT_OUT, + UsCaV1Field.SENSITIVE_DATA_PROCESSING, + UsCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsCaV1Field.PERSONAL_DATA_CONSENTS, + UsCaV1Field.MSPA_COVERED_TRANSACTION, + UsCaV1Field.MSPA_OPT_OUT_OPTION_MODE, + UsCaV1Field.MSPA_SERVICE_PROVIDER_MODE }; String[] gpcSegment = new String[] { - UspCaV1Field.GPC_SEGMENT_TYPE, - UspCaV1Field.GPC + UsCaV1Field.GPC_SEGMENT_TYPE, + UsCaV1Field.GPC }; segments = new String[][] { @@ -92,7 +92,7 @@ public String encode() throws EncodingException { encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(0))); if (segmentBitStrings.size() >= 2) { - Boolean gpcSegmentIncluded = (Boolean) this.fields.get(UspCaV1Field.GPC_SEGMENT_INCLUDED).getValue(); + Boolean gpcSegmentIncluded = (Boolean) this.fields.get(UsCaV1Field.GPC_SEGMENT_INCLUDED).getValue(); if (gpcSegmentIncluded) { encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(1))); } @@ -131,17 +131,17 @@ public void decode(String encodedSection) throws DecodingException { } } this.decodeSegmentsFromBitStrings(Arrays.asList(segmentBitStrings)); - this.fields.get(UspCaV1Field.GPC_SEGMENT_INCLUDED).setValue(gpcSegmentIncluded); + this.fields.get(UsCaV1Field.GPC_SEGMENT_INCLUDED).setValue(gpcSegmentIncluded); } @Override public int getId() { - return UspCaV1.ID; + return UsCaV1.ID; } @Override public String getName() { - return UspCaV1.NAME; + return UsCaV1.NAME; } public Integer getVersion() { @@ -149,60 +149,60 @@ public Integer getVersion() { } public Integer getSaleOptOutNotice() { - return (Integer) this.fields.get(UspCaV1Field.SALE_OPT_OUT_NOTICE).getValue(); + return (Integer) this.fields.get(UsCaV1Field.SALE_OPT_OUT_NOTICE).getValue(); } public Integer getSensitiveDataLimitUseNotice() { - return (Integer) this.fields.get(UspCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE).getValue(); + return (Integer) this.fields.get(UsCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE).getValue(); } public Integer getSharingOptOutNotice() { - return (Integer) this.fields.get(UspCaV1Field.SHARING_OPT_OUT_NOTICE).getValue(); + return (Integer) this.fields.get(UsCaV1Field.SHARING_OPT_OUT_NOTICE).getValue(); } public Integer getSaleOptOut() { - return (Integer) this.fields.get(UspCaV1Field.SALE_OPT_OUT).getValue(); + return (Integer) this.fields.get(UsCaV1Field.SALE_OPT_OUT).getValue(); } public Integer getSharingOptOut() { - return (Integer) this.fields.get(UspCaV1Field.SHARING_OPT_OUT).getValue(); + return (Integer) this.fields.get(UsCaV1Field.SHARING_OPT_OUT).getValue(); } @SuppressWarnings("unchecked") public List getSensitiveDataProcessing() { - return (List) this.fields.get(UspCaV1Field.SENSITIVE_DATA_PROCESSING).getValue(); + return (List) this.fields.get(UsCaV1Field.SENSITIVE_DATA_PROCESSING).getValue(); } @SuppressWarnings("unchecked") public List getKnownChildSensitiveDataConsents() { - return (List) this.fields.get(UspCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); + return (List) this.fields.get(UsCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); } public Integer getPersonalDataConsents() { - return (Integer) this.fields.get(UspCaV1Field.PERSONAL_DATA_CONSENTS).getValue(); + return (Integer) this.fields.get(UsCaV1Field.PERSONAL_DATA_CONSENTS).getValue(); } public Integer getMspaCoveredTransaction() { - return (Integer) this.fields.get(UspCaV1Field.MSPA_COVERED_TRANSACTION).getValue(); + return (Integer) this.fields.get(UsCaV1Field.MSPA_COVERED_TRANSACTION).getValue(); } public Integer getMspaOptOutOptionMode() { - return (Integer) this.fields.get(UspCaV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); + return (Integer) this.fields.get(UsCaV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); } public Integer getMspaServiceProviderMode() { - return (Integer) this.fields.get(UspCaV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); + return (Integer) this.fields.get(UsCaV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); } - public Boolean getGpcSegmentType() { - return (Boolean) this.fields.get(UspCaV1Field.GPC_SEGMENT_TYPE).getValue(); + public Integer getGpcSegmentType() { + return (Integer) this.fields.get(UsCaV1Field.GPC_SEGMENT_TYPE).getValue(); } public Boolean getGpcSegmentIncluded() { - return (Boolean) this.fields.get(UspCaV1Field.GPC_SEGMENT_INCLUDED).getValue(); + return (Boolean) this.fields.get(UsCaV1Field.GPC_SEGMENT_INCLUDED).getValue(); } public Boolean getGpc() { - return (Boolean) this.fields.get(UspCaV1Field.GPC).getValue(); + return (Boolean) this.fields.get(UsCaV1Field.GPC).getValue(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspCoV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCoV1.java similarity index 54% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspCoV1.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCoV1.java index d68723f..05b2f9d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspCoV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCoV1.java @@ -12,22 +12,22 @@ import com.iab.gpp.encoder.datatype.encoder.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.field.UspCaV1Field; -import com.iab.gpp.encoder.field.UspCoV1Field; +import com.iab.gpp.encoder.field.UsCaV1Field; +import com.iab.gpp.encoder.field.UsCoV1Field; import com.iab.gpp.encoder.field.UspV1Field; -public class UspCoV1 extends AbstractEncodableSegmentedBitStringSection { +public class UsCoV1 extends AbstractEncodableSegmentedBitStringSection { public static int ID = 10; public static int VERSION = 1; - public static String NAME = "uspcov1"; + public static String NAME = "uscov1"; private AbstractBase64UrlEncoder base64UrlEncoder = new CompressedBase64UrlEncoder(); - public UspCoV1() { + public UsCoV1() { initFields(); } - public UspCoV1(String encodedString) throws DecodingException { + public UsCoV1(String encodedString) throws DecodingException { initFields(); if (encodedString != null && encodedString.length() > 0) { @@ -38,43 +38,43 @@ public UspCoV1(String encodedString) throws DecodingException { private void initFields() { fields = new HashMap<>(); - fields.put(UspCoV1Field.VERSION, new EncodableFixedInteger(6, UspCoV1.VERSION)); - fields.put(UspCoV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspCoV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspCoV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspCoV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspCoV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspCoV1Field.SENSITIVE_DATA_PROCESSING, + fields.put(UsCoV1Field.VERSION, new EncodableFixedInteger(6, UsCoV1.VERSION)); + fields.put(UsCoV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsCoV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsCoV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsCoV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsCoV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsCoV1Field.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0))); - fields.put(UspCoV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); - fields.put(UspCoV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); - fields.put(UspCoV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); - fields.put(UspCoV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); + fields.put(UsCoV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); + fields.put(UsCoV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); + fields.put(UsCoV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); + fields.put(UsCoV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); // gpc segment - fields.put(UspCoV1Field.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UspCoV1Field.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); - fields.put(UspCoV1Field.GPC, new EncodableBoolean(false)); + fields.put(UsCoV1Field.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + fields.put(UsCoV1Field.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsCoV1Field.GPC, new EncodableBoolean(false)); //@formatter:off String[] coreSegment = new String[] { - UspCoV1Field.VERSION, - UspCoV1Field.SHARING_NOTICE, - UspCoV1Field.SALE_OPT_OUT_NOTICE, - UspCoV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UspCoV1Field.SALE_OPT_OUT, - UspCoV1Field.TARGETED_ADVERTISING_OPT_OUT, - UspCoV1Field.SENSITIVE_DATA_PROCESSING, - UspCoV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UspCoV1Field.MSPA_COVERED_TRANSACTION, - UspCoV1Field.MSPA_OPT_OUT_OPTION_MODE, - UspCoV1Field.MSPA_SERVICE_PROVIDER_MODE + UsCoV1Field.VERSION, + UsCoV1Field.SHARING_NOTICE, + UsCoV1Field.SALE_OPT_OUT_NOTICE, + UsCoV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsCoV1Field.SALE_OPT_OUT, + UsCoV1Field.TARGETED_ADVERTISING_OPT_OUT, + UsCoV1Field.SENSITIVE_DATA_PROCESSING, + UsCoV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsCoV1Field.MSPA_COVERED_TRANSACTION, + UsCoV1Field.MSPA_OPT_OUT_OPTION_MODE, + UsCoV1Field.MSPA_SERVICE_PROVIDER_MODE }; String[] gpcSegment = new String[] { - UspCoV1Field.GPC_SEGMENT_TYPE, - UspCoV1Field.GPC + UsCoV1Field.GPC_SEGMENT_TYPE, + UsCoV1Field.GPC }; segments = new String[][] { @@ -92,7 +92,7 @@ public String encode() throws EncodingException { encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(0))); if (segmentBitStrings.size() >= 2) { - Boolean gpcSegmentIncluded = (Boolean) this.fields.get(UspCoV1Field.GPC_SEGMENT_INCLUDED).getValue(); + Boolean gpcSegmentIncluded = (Boolean) this.fields.get(UsCoV1Field.GPC_SEGMENT_INCLUDED).getValue(); if (gpcSegmentIncluded) { encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(1))); } @@ -130,17 +130,17 @@ public void decode(String encodedSection) throws DecodingException { } } this.decodeSegmentsFromBitStrings(Arrays.asList(segmentBitStrings)); - this.fields.get(UspCaV1Field.GPC_SEGMENT_INCLUDED).setValue(gpcSegmentIncluded); + this.fields.get(UsCaV1Field.GPC_SEGMENT_INCLUDED).setValue(gpcSegmentIncluded); } @Override public int getId() { - return UspCoV1.ID; + return UsCoV1.ID; } @Override public String getName() { - return UspCoV1.NAME; + return UsCoV1.NAME; } public Integer getVersion() { @@ -148,55 +148,55 @@ public Integer getVersion() { } public Integer getSharingNotice() { - return (Integer) this.fields.get(UspCoV1Field.SHARING_NOTICE).getValue(); + return (Integer) this.fields.get(UsCoV1Field.SHARING_NOTICE).getValue(); } public Integer getSaleOptOutNotice() { - return (Integer) this.fields.get(UspCoV1Field.SALE_OPT_OUT_NOTICE).getValue(); + return (Integer) this.fields.get(UsCoV1Field.SALE_OPT_OUT_NOTICE).getValue(); } public Integer getTargetedAdvertisingOptOutNotice() { - return (Integer) this.fields.get(UspCoV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); + return (Integer) this.fields.get(UsCoV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); } public Integer getSaleOptOut() { - return (Integer) this.fields.get(UspCoV1Field.SALE_OPT_OUT).getValue(); + return (Integer) this.fields.get(UsCoV1Field.SALE_OPT_OUT).getValue(); } public Integer getTargetedAdvertisingOptOut() { - return (Integer) this.fields.get(UspCoV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); + return (Integer) this.fields.get(UsCoV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); } @SuppressWarnings("unchecked") public List getSensitiveDataProcessing() { - return (List) this.fields.get(UspCoV1Field.SENSITIVE_DATA_PROCESSING).getValue(); + return (List) this.fields.get(UsCoV1Field.SENSITIVE_DATA_PROCESSING).getValue(); } public Integer getKnownChildSensitiveDataConsents() { - return (Integer) this.fields.get(UspCoV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); + return (Integer) this.fields.get(UsCoV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); } public Integer getMspaCoveredTransaction() { - return (Integer) this.fields.get(UspCoV1Field.MSPA_COVERED_TRANSACTION).getValue(); + return (Integer) this.fields.get(UsCoV1Field.MSPA_COVERED_TRANSACTION).getValue(); } public Integer getMspaOptOutOptionMode() { - return (Integer) this.fields.get(UspCoV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); + return (Integer) this.fields.get(UsCoV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); } public Integer getMspaServiceProviderMode() { - return (Integer) this.fields.get(UspCoV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); + return (Integer) this.fields.get(UsCoV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); } - public Boolean getGpcSegmentType() { - return (Boolean) this.fields.get(UspCoV1Field.GPC_SEGMENT_TYPE).getValue(); + public Integer getGpcSegmentType() { + return (Integer) this.fields.get(UsCoV1Field.GPC_SEGMENT_TYPE).getValue(); } public Boolean getGpcSegmentIncluded() { - return (Boolean) this.fields.get(UspCoV1Field.GPC_SEGMENT_INCLUDED).getValue(); + return (Boolean) this.fields.get(UsCoV1Field.GPC_SEGMENT_INCLUDED).getValue(); } public Boolean getGpc() { - return (Boolean) this.fields.get(UspCoV1Field.GPC).getValue(); + return (Boolean) this.fields.get(UsCoV1Field.GPC).getValue(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspCtV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCtV1.java similarity index 55% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspCtV1.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCtV1.java index 58738fc..9df3e78 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspCtV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCtV1.java @@ -12,22 +12,22 @@ import com.iab.gpp.encoder.datatype.encoder.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.field.UspCaV1Field; -import com.iab.gpp.encoder.field.UspCtV1Field; +import com.iab.gpp.encoder.field.UsCaV1Field; +import com.iab.gpp.encoder.field.UsCtV1Field; import com.iab.gpp.encoder.field.UspV1Field; -public class UspCtV1 extends AbstractEncodableSegmentedBitStringSection { +public class UsCtV1 extends AbstractEncodableSegmentedBitStringSection { public static int ID = 12; public static int VERSION = 1; - public static String NAME = "uspctv1"; + public static String NAME = "usctv1"; private AbstractBase64UrlEncoder base64UrlEncoder = new CompressedBase64UrlEncoder(); - public UspCtV1() { + public UsCtV1() { initFields(); } - public UspCtV1(String encodedString) throws DecodingException { + public UsCtV1(String encodedString) throws DecodingException { initFields(); if (encodedString != null && encodedString.length() > 0) { @@ -38,43 +38,43 @@ public UspCtV1(String encodedString) throws DecodingException { private void initFields() { fields = new HashMap<>(); - fields.put(UspCtV1Field.VERSION, new EncodableFixedInteger(6, UspCtV1.VERSION)); - fields.put(UspCtV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspCtV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspCtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspCtV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspCtV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspCtV1Field.SENSITIVE_DATA_PROCESSING, + fields.put(UsCtV1Field.VERSION, new EncodableFixedInteger(6, UsCtV1.VERSION)); + fields.put(UsCtV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsCtV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsCtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsCtV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsCtV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsCtV1Field.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0))); - fields.put(UspCtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + fields.put(UsCtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0))); - fields.put(UspCtV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); - fields.put(UspCtV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); - fields.put(UspCtV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); + fields.put(UsCtV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); + fields.put(UsCtV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); + fields.put(UsCtV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); // gpc segment - fields.put(UspCtV1Field.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UspCtV1Field.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); - fields.put(UspCtV1Field.GPC, new EncodableBoolean(false)); + fields.put(UsCtV1Field.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + fields.put(UsCtV1Field.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsCtV1Field.GPC, new EncodableBoolean(false)); //@formatter:off String[] coreSegment = new String[] { - UspCtV1Field.VERSION, - UspCtV1Field.SHARING_NOTICE, - UspCtV1Field.SALE_OPT_OUT_NOTICE, - UspCtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UspCtV1Field.SALE_OPT_OUT, - UspCtV1Field.TARGETED_ADVERTISING_OPT_OUT, - UspCtV1Field.SENSITIVE_DATA_PROCESSING, - UspCtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UspCtV1Field.MSPA_COVERED_TRANSACTION, - UspCtV1Field.MSPA_OPT_OUT_OPTION_MODE, - UspCtV1Field.MSPA_SERVICE_PROVIDER_MODE + UsCtV1Field.VERSION, + UsCtV1Field.SHARING_NOTICE, + UsCtV1Field.SALE_OPT_OUT_NOTICE, + UsCtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsCtV1Field.SALE_OPT_OUT, + UsCtV1Field.TARGETED_ADVERTISING_OPT_OUT, + UsCtV1Field.SENSITIVE_DATA_PROCESSING, + UsCtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsCtV1Field.MSPA_COVERED_TRANSACTION, + UsCtV1Field.MSPA_OPT_OUT_OPTION_MODE, + UsCtV1Field.MSPA_SERVICE_PROVIDER_MODE }; String[] gpcSegment = new String[] { - UspCtV1Field.GPC_SEGMENT_TYPE, - UspCtV1Field.GPC + UsCtV1Field.GPC_SEGMENT_TYPE, + UsCtV1Field.GPC }; segments = new String[][] { @@ -92,7 +92,7 @@ public String encode() throws EncodingException { encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(0))); if (segmentBitStrings.size() >= 2) { - Boolean gpcSegmentIncluded = (Boolean) this.fields.get(UspCtV1Field.GPC_SEGMENT_INCLUDED).getValue(); + Boolean gpcSegmentIncluded = (Boolean) this.fields.get(UsCtV1Field.GPC_SEGMENT_INCLUDED).getValue(); if (gpcSegmentIncluded) { encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(1))); } @@ -130,17 +130,17 @@ public void decode(String encodedSection) throws DecodingException { } } this.decodeSegmentsFromBitStrings(Arrays.asList(segmentBitStrings)); - this.fields.get(UspCaV1Field.GPC_SEGMENT_INCLUDED).setValue(gpcSegmentIncluded); + this.fields.get(UsCaV1Field.GPC_SEGMENT_INCLUDED).setValue(gpcSegmentIncluded); } @Override public int getId() { - return UspCtV1.ID; + return UsCtV1.ID; } @Override public String getName() { - return UspCtV1.NAME; + return UsCtV1.NAME; } public Integer getVersion() { @@ -148,56 +148,56 @@ public Integer getVersion() { } public Integer getSharingNotice() { - return (Integer) this.fields.get(UspCtV1Field.SHARING_NOTICE).getValue(); + return (Integer) this.fields.get(UsCtV1Field.SHARING_NOTICE).getValue(); } public Integer getSaleOptOutNotice() { - return (Integer) this.fields.get(UspCtV1Field.SALE_OPT_OUT_NOTICE).getValue(); + return (Integer) this.fields.get(UsCtV1Field.SALE_OPT_OUT_NOTICE).getValue(); } public Integer getTargetedAdvertisingOptOutNotice() { - return (Integer) this.fields.get(UspCtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); + return (Integer) this.fields.get(UsCtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); } public Integer getSaleOptOut() { - return (Integer) this.fields.get(UspCtV1Field.SALE_OPT_OUT).getValue(); + return (Integer) this.fields.get(UsCtV1Field.SALE_OPT_OUT).getValue(); } public Integer getTargetedAdvertisingOptOut() { - return (Integer) this.fields.get(UspCtV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); + return (Integer) this.fields.get(UsCtV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); } @SuppressWarnings("unchecked") public List getSensitiveDataProcessing() { - return (List) this.fields.get(UspCtV1Field.SENSITIVE_DATA_PROCESSING).getValue(); + return (List) this.fields.get(UsCtV1Field.SENSITIVE_DATA_PROCESSING).getValue(); } @SuppressWarnings("unchecked") public List getKnownChildSensitiveDataConsents() { - return (List) this.fields.get(UspCtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); + return (List) this.fields.get(UsCtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); } public Integer getMspaCoveredTransaction() { - return (Integer) this.fields.get(UspCtV1Field.MSPA_COVERED_TRANSACTION).getValue(); + return (Integer) this.fields.get(UsCtV1Field.MSPA_COVERED_TRANSACTION).getValue(); } public Integer getMspaOptOutOptionMode() { - return (Integer) this.fields.get(UspCtV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); + return (Integer) this.fields.get(UsCtV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); } public Integer getMspaServiceProviderMode() { - return (Integer) this.fields.get(UspCtV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); + return (Integer) this.fields.get(UsCtV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); } - public Boolean getGpcSegmentType() { - return (Boolean) this.fields.get(UspCtV1Field.GPC_SEGMENT_TYPE).getValue(); + public Integer getGpcSegmentType() { + return (Integer) this.fields.get(UsCtV1Field.GPC_SEGMENT_TYPE).getValue(); } public Boolean getGpcSegmentIncluded() { - return (Boolean) this.fields.get(UspCtV1Field.GPC_SEGMENT_INCLUDED).getValue(); + return (Boolean) this.fields.get(UsCtV1Field.GPC_SEGMENT_INCLUDED).getValue(); } public Boolean getGpc() { - return (Boolean) this.fields.get(UspCtV1Field.GPC).getValue(); + return (Boolean) this.fields.get(UsCtV1Field.GPC).getValue(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNatV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNatV1.java new file mode 100644 index 0000000..6cd943d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNatV1.java @@ -0,0 +1,233 @@ +package com.iab.gpp.encoder.section; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.encoder.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.datatype.encoder.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.UsCaV1Field; +import com.iab.gpp.encoder.field.UsNatV1Field; +import com.iab.gpp.encoder.field.UspV1Field; + +public class UsNatV1 extends AbstractEncodableSegmentedBitStringSection { + public static int ID = 7; + public static int VERSION = 1; + public static String NAME = "usnatv1"; + + private AbstractBase64UrlEncoder base64UrlEncoder = new CompressedBase64UrlEncoder(); + + public UsNatV1() { + initFields(); + } + + public UsNatV1(String encodedString) throws DecodingException { + initFields(); + + if (encodedString != null && encodedString.length() > 0) { + this.decode(encodedString); + } + } + + private void initFields() { + fields = new HashMap<>(); + + fields.put(UsNatV1Field.VERSION, new EncodableFixedInteger(6, UsNatV1.VERSION)); + fields.put(UsNatV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.SHARING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.SENSITIVE_DATA_PROCESSING, + new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))); + fields.put(UsNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0))); + fields.put(UsNatV1Field.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); + fields.put(UsNatV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); + + // gpc segment + fields.put(UsNatV1Field.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + fields.put(UsNatV1Field.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsNatV1Field.GPC, new EncodableBoolean(false)); + + + //@formatter:off + String[] coreSegment = new String[] { + UsNatV1Field.VERSION, + UsNatV1Field.SHARING_NOTICE, + UsNatV1Field.SALE_OPT_OUT_NOTICE, + UsNatV1Field.SHARING_OPT_OUT_NOTICE, + UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + UsNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, + UsNatV1Field.SALE_OPT_OUT, + UsNatV1Field.SHARING_OPT_OUT, + UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT, + UsNatV1Field.SENSITIVE_DATA_PROCESSING, + UsNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsNatV1Field.PERSONAL_DATA_CONSENTS, + UsNatV1Field.MSPA_COVERED_TRANSACTION, + UsNatV1Field.MSPA_OPT_OUT_OPTION_MODE, + UsNatV1Field.MSPA_SERVICE_PROVIDER_MODE + }; + + String[] gpcSegment = new String[] { + UsNatV1Field.GPC_SEGMENT_TYPE, + UsNatV1Field.GPC + }; + + segments = new String[][] { + coreSegment, + gpcSegment + }; + //@formatter:on + } + + @Override + public String encode() throws EncodingException { + List segmentBitStrings = this.encodeSegmentsToBitStrings(); + List encodedSegments = new ArrayList<>(); + if (segmentBitStrings.size() >= 1) { + encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(0))); + + if (segmentBitStrings.size() >= 2) { + Boolean gpcSegmentIncluded = (Boolean) this.fields.get(UsNatV1Field.GPC_SEGMENT_INCLUDED).getValue(); + if (gpcSegmentIncluded) { + encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(1))); + } + } + } + + return encodedSegments.stream().collect(Collectors.joining(".")); + } + + @Override + public void decode(String encodedSection) throws DecodingException { + String[] encodedSegments = encodedSection.split("\\."); + String[] segmentBitStrings = new String[2]; + boolean gpcSegmentIncluded = false; + for (int i = 0; i < encodedSegments.length; i++) { + /** + * first char will contain 6 bits, we only need the first 2. There is no segment type for the CORE + * string. Instead the first 6 bits are reserved for the encoding version, but because we're only on + * a maximum of encoding version 2 the first 2 bits in the core segment will evaluate to 0. + */ + String segmentBitString = base64UrlEncoder.decode(encodedSegments[i]); + switch (segmentBitString.substring(0, 2)) { + case "00": { + segmentBitStrings[0] = segmentBitString; + break; + } + case "01": { + gpcSegmentIncluded = true; + segmentBitStrings[1] = segmentBitString; + break; + } + default: { + throw new DecodingException("Unable to decode segment '" + encodedSegments[i] + "'"); + } + } + } + this.decodeSegmentsFromBitStrings(Arrays.asList(segmentBitStrings)); + this.fields.get(UsCaV1Field.GPC_SEGMENT_INCLUDED).setValue(gpcSegmentIncluded); + } + + @Override + public int getId() { + return UsNatV1.ID; + } + + @Override + public String getName() { + return UsNatV1.NAME; + } + + public Integer getVersion() { + return (Integer) this.fields.get(UspV1Field.VERSION).getValue(); + } + + public Integer getSharingNotice() { + return (Integer) this.fields.get(UsNatV1Field.SHARING_NOTICE).getValue(); + } + + public Integer getSaleOptOutNotice() { + return (Integer) this.fields.get(UsNatV1Field.SALE_OPT_OUT_NOTICE).getValue(); + } + + public Integer getSharingOptOutNotice() { + return (Integer) this.fields.get(UsNatV1Field.SHARING_OPT_OUT_NOTICE).getValue(); + } + + public Integer getTargetedAdvertisingOptOutNotice() { + return (Integer) this.fields.get(UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); + } + + public Integer getSensitiveDataProcessingOptOutNotice() { + return (Integer) this.fields.get(UsNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE).getValue(); + } + + public Integer getSensitiveDataLimitUseNotice() { + return (Integer) this.fields.get(UsNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE).getValue(); + } + + public Integer getSaleOptOut() { + return (Integer) this.fields.get(UsNatV1Field.SALE_OPT_OUT).getValue(); + } + + public Integer getSharingOptOut() { + return (Integer) this.fields.get(UsNatV1Field.SHARING_OPT_OUT).getValue(); + } + + public Integer getTargetedAdvertisingOptOut() { + return (Integer) this.fields.get(UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); + } + + @SuppressWarnings("unchecked") + public List getSensitiveDataProcessing() { + return (List) this.fields.get(UsNatV1Field.SENSITIVE_DATA_PROCESSING).getValue(); + } + + @SuppressWarnings("unchecked") + public List getKnownChildSensitiveDataConsents() { + return (List) this.fields.get(UsNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); + } + + public Integer getPersonalDataConsents() { + return (Integer) this.fields.get(UsNatV1Field.PERSONAL_DATA_CONSENTS).getValue(); + } + + public Integer getMspaCoveredTransaction() { + return (Integer) this.fields.get(UsNatV1Field.MSPA_COVERED_TRANSACTION).getValue(); + } + + public Integer getMspaOptOutOptionMode() { + return (Integer) this.fields.get(UsNatV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); + } + + public Integer getMspaServiceProviderMode() { + return (Integer) this.fields.get(UsNatV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); + } + + public Integer getGpcSegmentType() { + return (Integer) this.fields.get(UsNatV1Field.GPC_SEGMENT_TYPE).getValue(); + } + + public Boolean getGpcSegmentIncluded() { + return (Boolean) this.fields.get(UsNatV1Field.GPC_SEGMENT_INCLUDED).getValue(); + } + + public Boolean getGpc() { + return (Boolean) this.fields.get(UsNatV1Field.GPC).getValue(); + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUtV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUtV1.java new file mode 100644 index 0000000..9bd56c3 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUtV1.java @@ -0,0 +1,141 @@ +package com.iab.gpp.encoder.section; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.encoder.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.datatype.encoder.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.UsUtV1Field; +import com.iab.gpp.encoder.field.UspV1Field; + +public class UsUtV1 extends AbstractEncodableBitStringSection { + public static int ID = 11; + public static int VERSION = 1; + public static String NAME = "usutv1"; + + private AbstractBase64UrlEncoder base64UrlEncoder = new CompressedBase64UrlEncoder(); + + public UsUtV1() { + initFields(); + } + + public UsUtV1(String encodedString) throws DecodingException { + initFields(); + + if (encodedString != null && encodedString.length() > 0) { + this.decode(encodedString); + } + } + + private void initFields() { + fields = new HashMap<>(); + + fields.put(UsUtV1Field.VERSION, new EncodableFixedInteger(6, UsUtV1.VERSION)); + fields.put(UsUtV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsUtV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsUtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsUtV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsUtV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsUtV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsUtV1Field.SENSITIVE_DATA_PROCESSING, + new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0))); + fields.put(UsUtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); + fields.put(UsUtV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); + fields.put(UsUtV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); + fields.put(UsUtV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); + + //@formatter:off + fieldOrder = new String[] { + UsUtV1Field.VERSION, + UsUtV1Field.SHARING_NOTICE, + UsUtV1Field.SALE_OPT_OUT_NOTICE, + UsUtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsUtV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + UsUtV1Field.SALE_OPT_OUT, + UsUtV1Field.TARGETED_ADVERTISING_OPT_OUT, + UsUtV1Field.SENSITIVE_DATA_PROCESSING, + UsUtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsUtV1Field.MSPA_COVERED_TRANSACTION, + UsUtV1Field.MSPA_OPT_OUT_OPTION_MODE, + UsUtV1Field.MSPA_SERVICE_PROVIDER_MODE + }; + //@formatter:on + } + + @Override + public String encode() throws EncodingException { + String bitString = this.encodeToBitString(); + String encodedString = base64UrlEncoder.encode(bitString); + return encodedString; + } + + @Override + public void decode(String encodedString) throws DecodingException { + String bitString = base64UrlEncoder.decode(encodedString); + this.decodeFromBitString(bitString); + } + + @Override + public int getId() { + return UsUtV1.ID; + } + + @Override + public String getName() { + return UsUtV1.NAME; + } + + public Integer getVersion() { + return (Integer) this.fields.get(UspV1Field.VERSION).getValue(); + } + + public Integer getSharingNotice() { + return (Integer) this.fields.get(UsUtV1Field.SHARING_NOTICE).getValue(); + } + + public Integer getSaleOptOutNotice() { + return (Integer) this.fields.get(UsUtV1Field.SALE_OPT_OUT_NOTICE).getValue(); + } + + public Integer getTargetedAdvertisingOptOutNotice() { + return (Integer) this.fields.get(UsUtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); + } + + public Integer getSensitiveDataProcessingOptOutNotice() { + return (Integer) this.fields.get(UsUtV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE).getValue(); + } + + public Integer getSaleOptOut() { + return (Integer) this.fields.get(UsUtV1Field.SALE_OPT_OUT).getValue(); + } + + public Integer getTargetedAdvertisingOptOut() { + return (Integer) this.fields.get(UsUtV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); + } + + @SuppressWarnings("unchecked") + public List getSensitiveDataProcessing() { + return (List) this.fields.get(UsUtV1Field.SENSITIVE_DATA_PROCESSING).getValue(); + } + + public Integer getKnownChildSensitiveDataConsents() { + return (Integer) this.fields.get(UsUtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); + } + + public Integer getMspaCoveredTransaction() { + return (Integer) this.fields.get(UsUtV1Field.MSPA_COVERED_TRANSACTION).getValue(); + } + + public Integer getMspaOptOutOptionMode() { + return (Integer) this.fields.get(UsUtV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); + } + + public Integer getMspaServiceProviderMode() { + return (Integer) this.fields.get(UsUtV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVaV1.java new file mode 100644 index 0000000..fdd48f4 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVaV1.java @@ -0,0 +1,135 @@ +package com.iab.gpp.encoder.section; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.encoder.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.datatype.encoder.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.UspV1Field; +import com.iab.gpp.encoder.field.UsVaV1Field; + +public class UsVaV1 extends AbstractEncodableBitStringSection { + public static int ID = 9; + public static int VERSION = 1; + public static String NAME = "usvav1"; + + private AbstractBase64UrlEncoder base64UrlEncoder = new CompressedBase64UrlEncoder(); + + public UsVaV1() { + initFields(); + } + + public UsVaV1(String encodedString) throws DecodingException { + initFields(); + + if (encodedString != null && encodedString.length() > 0) { + this.decode(encodedString); + } + } + + private void initFields() { + fields = new HashMap<>(); + + fields.put(UsVaV1Field.VERSION, new EncodableFixedInteger(6, UsVaV1.VERSION)); + fields.put(UsVaV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsVaV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsVaV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); + fields.put(UsVaV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsVaV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); + fields.put(UsVaV1Field.SENSITIVE_DATA_PROCESSING, + new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0))); + fields.put(UsVaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); + fields.put(UsVaV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); + fields.put(UsVaV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); + fields.put(UsVaV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); + + //@formatter:off + fieldOrder = new String[] { + UsVaV1Field.VERSION, + UsVaV1Field.SHARING_NOTICE, + UsVaV1Field.SALE_OPT_OUT_NOTICE, + UsVaV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsVaV1Field.SALE_OPT_OUT, + UsVaV1Field.TARGETED_ADVERTISING_OPT_OUT, + UsVaV1Field.SENSITIVE_DATA_PROCESSING, + UsVaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsVaV1Field.MSPA_COVERED_TRANSACTION, + UsVaV1Field.MSPA_OPT_OUT_OPTION_MODE, + UsVaV1Field.MSPA_SERVICE_PROVIDER_MODE + }; + //@formatter:on + } + + @Override + public String encode() throws EncodingException { + String bitString = this.encodeToBitString(); + String encodedString = base64UrlEncoder.encode(bitString); + return encodedString; + } + + @Override + public void decode(String encodedString) throws DecodingException { + String bitString = base64UrlEncoder.decode(encodedString); + this.decodeFromBitString(bitString); + } + + @Override + public int getId() { + return UsVaV1.ID; + } + + @Override + public String getName() { + return UsVaV1.NAME; + } + + public Integer getVersion() { + return (Integer) this.fields.get(UspV1Field.VERSION).getValue(); + } + + public Integer getSharingNotice() { + return (Integer) this.fields.get(UsVaV1Field.SHARING_NOTICE).getValue(); + } + + public Integer getSaleOptOutNotice() { + return (Integer) this.fields.get(UsVaV1Field.SALE_OPT_OUT_NOTICE).getValue(); + } + + public Integer getTargetedAdvertisingOptOutNotice() { + return (Integer) this.fields.get(UsVaV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); + } + + public Integer getSaleOptOut() { + return (Integer) this.fields.get(UsVaV1Field.SALE_OPT_OUT).getValue(); + } + + public Integer getTargetedAdvertisingOptOut() { + return (Integer) this.fields.get(UsVaV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); + } + + @SuppressWarnings("unchecked") + public List getSensitiveDataProcessing() { + return (List) this.fields.get(UsVaV1Field.SENSITIVE_DATA_PROCESSING).getValue(); + } + + public Integer getKnownChildSensitiveDataConsents() { + return (Integer) this.fields.get(UsVaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); + } + + public Integer getMspaCoveredTransaction() { + return (Integer) this.fields.get(UsVaV1Field.MSPA_COVERED_TRANSACTION).getValue(); + } + + public Integer getMspaOptOutOptionMode() { + return (Integer) this.fields.get(UsVaV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); + } + + public Integer getMspaServiceProviderMode() { + return (Integer) this.fields.get(UsVaV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspNatV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspNatV1.java deleted file mode 100644 index 18e0331..0000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspNatV1.java +++ /dev/null @@ -1,234 +0,0 @@ -package com.iab.gpp.encoder.section; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.stream.Collectors; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.datatype.encoder.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.encoder.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.field.UspCaV1Field; -import com.iab.gpp.encoder.field.UspNatV1Field; -import com.iab.gpp.encoder.field.UspV1Field; - -public class UspNatV1 extends AbstractEncodableSegmentedBitStringSection { - public static int ID = 7; - public static int VERSION = 1; - public static String NAME = "uspnatv1"; - - private AbstractBase64UrlEncoder base64UrlEncoder = new CompressedBase64UrlEncoder(); - - public UspNatV1() { - initFields(); - } - - public UspNatV1(String encodedString) throws DecodingException { - initFields(); - - if (encodedString != null && encodedString.length() > 0) { - this.decode(encodedString); - } - } - - private void initFields() { - fields = new HashMap<>(); - - fields.put(UspNatV1Field.VERSION, new EncodableFixedInteger(6, UspNatV1.VERSION)); - fields.put(UspNatV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.SHARING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))); - fields.put(UspNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0))); - fields.put(UspNatV1Field.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); - fields.put(UspNatV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); - - // gpc segment - fields.put(UspNatV1Field.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UspNatV1Field.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); - fields.put(UspNatV1Field.GPC, new EncodableBoolean(false)); - - - //@formatter:off - String[] coreSegment = new String[] { - UspNatV1Field.VERSION, - UspNatV1Field.SHARING_NOTICE, - UspNatV1Field.SALE_OPT_OUT_NOTICE, - UspNatV1Field.SHARING_OPT_OUT_NOTICE, - UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UspNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - UspNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, - UspNatV1Field.SALE_OPT_OUT, - UspNatV1Field.SHARING_OPT_OUT, - UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT, - UspNatV1Field.SENSITIVE_DATA_PROCESSING, - UspNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UspNatV1Field.PERSONAL_DATA_CONSENTS, - UspNatV1Field.MSPA_COVERED_TRANSACTION, - UspNatV1Field.MSPA_OPT_OUT_OPTION_MODE, - UspNatV1Field.MSPA_SERVICE_PROVIDER_MODE - }; - - String[] gpcSegment = new String[] { - UspNatV1Field.GPC_SEGMENT_TYPE, - UspNatV1Field.GPC - }; - - segments = new String[][] { - coreSegment, - gpcSegment - }; - //@formatter:on - } - - @Override - public String encode() throws EncodingException { - List segmentBitStrings = this.encodeSegmentsToBitStrings(); - List encodedSegments = new ArrayList<>(); - if (segmentBitStrings.size() >= 1) { - encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(0))); - - if (segmentBitStrings.size() >= 2) { - Boolean gpcSegmentIncluded = (Boolean) this.fields.get(UspNatV1Field.GPC_SEGMENT_INCLUDED).getValue(); - if (gpcSegmentIncluded) { - encodedSegments.add(base64UrlEncoder.encode(segmentBitStrings.get(1))); - } - } - } - - return encodedSegments.stream().collect(Collectors.joining(".")); - } - - @Override - public void decode(String encodedSection) throws DecodingException { - String[] encodedSegments = encodedSection.split("\\."); - String[] segmentBitStrings = new String[2]; - boolean gpcSegmentIncluded = false; - for (int i = 0; i < encodedSegments.length; i++) { - /** - * first char will contain 6 bits, we only need the first 2. There is no segment type for the CORE - * string. Instead the first 6 bits are reserved for the encoding version, but because we're only on - * a maximum of encoding version 2 the first 2 bits in the core segment will evaluate to 0. - */ - String segmentBitString = base64UrlEncoder.decode(encodedSegments[i]); - switch (segmentBitString.substring(0, 2)) { - case "00": { - segmentBitStrings[0] = segmentBitString; - break; - } - case "01": { - gpcSegmentIncluded = true; - segmentBitStrings[1] = segmentBitString; - break; - } - default: { - throw new DecodingException("Unable to decode segment '" + encodedSegments[i] + "'"); - } - } - } - this.decodeSegmentsFromBitStrings(Arrays.asList(segmentBitStrings)); - this.fields.get(UspCaV1Field.GPC_SEGMENT_INCLUDED).setValue(gpcSegmentIncluded); - } - - @Override - public int getId() { - return UspNatV1.ID; - } - - @Override - public String getName() { - return UspNatV1.NAME; - } - - public Integer getVersion() { - return (Integer) this.fields.get(UspV1Field.VERSION).getValue(); - } - - public Integer getSharingNotice() { - return (Integer) this.fields.get(UspNatV1Field.SHARING_NOTICE).getValue(); - } - - public Integer getSaleOptOutNotice() { - return (Integer) this.fields.get(UspNatV1Field.SALE_OPT_OUT_NOTICE).getValue(); - } - - public Integer getSharingOptOutNotice() { - return (Integer) this.fields.get(UspNatV1Field.SHARING_OPT_OUT_NOTICE).getValue(); - } - - public Integer getTargetedAdvertisingOptOutNotice() { - return (Integer) this.fields.get(UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); - } - - public Integer getSensitiveDataProcessingOptOutNotice() { - return (Integer) this.fields.get(UspNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE).getValue(); - } - - public Integer getSensitiveDataLimitUseNotice() { - return (Integer) this.fields.get(UspNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE).getValue(); - } - - public Integer getSaleOptOut() { - return (Integer) this.fields.get(UspNatV1Field.SALE_OPT_OUT).getValue(); - } - - public Integer getSharingOptOut() { - return (Integer) this.fields.get(UspNatV1Field.SHARING_OPT_OUT).getValue(); - } - - public Integer getTargetedAdvertisingOptOut() { - return (Integer) this.fields.get(UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); - } - - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.fields.get(UspNatV1Field.SENSITIVE_DATA_PROCESSING).getValue(); - } - - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.fields.get(UspNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); - } - - public Integer getPersonalDataConsents() { - return (Integer) this.fields.get(UspNatV1Field.PERSONAL_DATA_CONSENTS).getValue(); - } - - public Integer getMspaCoveredTransaction() { - return (Integer) this.fields.get(UspNatV1Field.MSPA_COVERED_TRANSACTION).getValue(); - } - - public Integer getMspaOptOutOptionMode() { - return (Integer) this.fields.get(UspNatV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); - } - - public Integer getMspaServiceProviderMode() { - return (Integer) this.fields.get(UspNatV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); - } - - public Boolean getGpcSegmentType() { - return (Boolean) this.fields.get(UspNatV1Field.GPC_SEGMENT_TYPE).getValue(); - } - - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.fields.get(UspNatV1Field.GPC_SEGMENT_INCLUDED).getValue(); - } - - public Boolean getGpc() { - return (Boolean) this.fields.get(UspNatV1Field.GPC).getValue(); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspUtV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspUtV1.java deleted file mode 100644 index b1e10af..0000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspUtV1.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.datatype.encoder.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.encoder.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.field.UspUtV1Field; -import com.iab.gpp.encoder.field.UspV1Field; - -public class UspUtV1 extends AbstractEncodableBitStringSection { - public static int ID = 11; - public static int VERSION = 1; - public static String NAME = "usputv1"; - - private AbstractBase64UrlEncoder base64UrlEncoder = new CompressedBase64UrlEncoder(); - - public UspUtV1() { - initFields(); - } - - public UspUtV1(String encodedString) throws DecodingException { - initFields(); - - if (encodedString != null && encodedString.length() > 0) { - this.decode(encodedString); - } - } - - private void initFields() { - fields = new HashMap<>(); - - fields.put(UspUtV1Field.VERSION, new EncodableFixedInteger(6, UspUtV1.VERSION)); - fields.put(UspUtV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspUtV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspUtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspUtV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspUtV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspUtV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspUtV1Field.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0))); - fields.put(UspUtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); - fields.put(UspUtV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); - fields.put(UspUtV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); - fields.put(UspUtV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); - - //@formatter:off - fieldOrder = new String[] { - UspUtV1Field.VERSION, - UspUtV1Field.SHARING_NOTICE, - UspUtV1Field.SALE_OPT_OUT_NOTICE, - UspUtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UspUtV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - UspUtV1Field.SALE_OPT_OUT, - UspUtV1Field.TARGETED_ADVERTISING_OPT_OUT, - UspUtV1Field.SENSITIVE_DATA_PROCESSING, - UspUtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UspUtV1Field.MSPA_COVERED_TRANSACTION, - UspUtV1Field.MSPA_OPT_OUT_OPTION_MODE, - UspUtV1Field.MSPA_SERVICE_PROVIDER_MODE - }; - //@formatter:on - } - - @Override - public String encode() throws EncodingException { - String bitString = this.encodeToBitString(); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; - } - - @Override - public void decode(String encodedString) throws DecodingException { - String bitString = base64UrlEncoder.decode(encodedString); - this.decodeFromBitString(bitString); - } - - @Override - public int getId() { - return UspUtV1.ID; - } - - @Override - public String getName() { - return UspUtV1.NAME; - } - - public Integer getVersion() { - return (Integer) this.fields.get(UspV1Field.VERSION).getValue(); - } - - public Integer getSharingNotice() { - return (Integer) this.fields.get(UspUtV1Field.SHARING_NOTICE).getValue(); - } - - public Integer getSaleOptOutNotice() { - return (Integer) this.fields.get(UspUtV1Field.SALE_OPT_OUT_NOTICE).getValue(); - } - - public Integer getTargetedAdvertisingOptOutNotice() { - return (Integer) this.fields.get(UspUtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); - } - - public Integer getSensitiveDataProcessingOptOutNotice() { - return (Integer) this.fields.get(UspUtV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE).getValue(); - } - - public Integer getSaleOptOut() { - return (Integer) this.fields.get(UspUtV1Field.SALE_OPT_OUT).getValue(); - } - - public Integer getTargetedAdvertisingOptOut() { - return (Integer) this.fields.get(UspUtV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); - } - - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.fields.get(UspUtV1Field.SENSITIVE_DATA_PROCESSING).getValue(); - } - - public Integer getKnownChildSensitiveDataConsents() { - return (Integer) this.fields.get(UspUtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); - } - - public Integer getMspaCoveredTransaction() { - return (Integer) this.fields.get(UspUtV1Field.MSPA_COVERED_TRANSACTION).getValue(); - } - - public Integer getMspaOptOutOptionMode() { - return (Integer) this.fields.get(UspUtV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); - } - - public Integer getMspaServiceProviderMode() { - return (Integer) this.fields.get(UspUtV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspVaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspVaV1.java deleted file mode 100644 index 475d1f1..0000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspVaV1.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.datatype.encoder.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.encoder.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.field.UspV1Field; -import com.iab.gpp.encoder.field.UspVaV1Field; - -public class UspVaV1 extends AbstractEncodableBitStringSection { - public static int ID = 9; - public static int VERSION = 1; - public static String NAME = "uspvav1"; - - private AbstractBase64UrlEncoder base64UrlEncoder = new CompressedBase64UrlEncoder(); - - public UspVaV1() { - initFields(); - } - - public UspVaV1(String encodedString) throws DecodingException { - initFields(); - - if (encodedString != null && encodedString.length() > 0) { - this.decode(encodedString); - } - } - - private void initFields() { - fields = new HashMap<>(); - - fields.put(UspVaV1Field.VERSION, new EncodableFixedInteger(6, UspVaV1.VERSION)); - fields.put(UspVaV1Field.SHARING_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspVaV1Field.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspVaV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0)); - fields.put(UspVaV1Field.SALE_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspVaV1Field.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0)); - fields.put(UspVaV1Field.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0))); - fields.put(UspVaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0)); - fields.put(UspVaV1Field.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 0)); - fields.put(UspVaV1Field.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0)); - fields.put(UspVaV1Field.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0)); - - //@formatter:off - fieldOrder = new String[] { - UspVaV1Field.VERSION, - UspVaV1Field.SHARING_NOTICE, - UspVaV1Field.SALE_OPT_OUT_NOTICE, - UspVaV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UspVaV1Field.SALE_OPT_OUT, - UspVaV1Field.TARGETED_ADVERTISING_OPT_OUT, - UspVaV1Field.SENSITIVE_DATA_PROCESSING, - UspVaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UspVaV1Field.MSPA_COVERED_TRANSACTION, - UspVaV1Field.MSPA_OPT_OUT_OPTION_MODE, - UspVaV1Field.MSPA_SERVICE_PROVIDER_MODE - }; - //@formatter:on - } - - @Override - public String encode() throws EncodingException { - String bitString = this.encodeToBitString(); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; - } - - @Override - public void decode(String encodedString) throws DecodingException { - String bitString = base64UrlEncoder.decode(encodedString); - this.decodeFromBitString(bitString); - } - - @Override - public int getId() { - return UspVaV1.ID; - } - - @Override - public String getName() { - return UspVaV1.NAME; - } - - public Integer getVersion() { - return (Integer) this.fields.get(UspV1Field.VERSION).getValue(); - } - - public Integer getSharingNotice() { - return (Integer) this.fields.get(UspVaV1Field.SHARING_NOTICE).getValue(); - } - - public Integer getSaleOptOutNotice() { - return (Integer) this.fields.get(UspVaV1Field.SALE_OPT_OUT_NOTICE).getValue(); - } - - public Integer getTargetedAdvertisingOptOutNotice() { - return (Integer) this.fields.get(UspVaV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE).getValue(); - } - - public Integer getSaleOptOut() { - return (Integer) this.fields.get(UspVaV1Field.SALE_OPT_OUT).getValue(); - } - - public Integer getTargetedAdvertisingOptOut() { - return (Integer) this.fields.get(UspVaV1Field.TARGETED_ADVERTISING_OPT_OUT).getValue(); - } - - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.fields.get(UspVaV1Field.SENSITIVE_DATA_PROCESSING).getValue(); - } - - public Integer getKnownChildSensitiveDataConsents() { - return (Integer) this.fields.get(UspVaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS).getValue(); - } - - public Integer getMspaCoveredTransaction() { - return (Integer) this.fields.get(UspVaV1Field.MSPA_COVERED_TRANSACTION).getValue(); - } - - public Integer getMspaOptOutOptionMode() { - return (Integer) this.fields.get(UspVaV1Field.MSPA_OPT_OUT_OPTION_MODE).getValue(); - } - - public Integer getMspaServiceProviderMode() { - return (Integer) this.fields.get(UspVaV1Field.MSPA_SERVICE_PROVIDER_MODE).getValue(); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 9b474e7..a28858a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -10,31 +10,32 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.error.LazyDecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.field.TcfEuV2Field; -import com.iab.gpp.encoder.field.UspCaV1Field; -import com.iab.gpp.encoder.field.UspCoV1Field; -import com.iab.gpp.encoder.field.UspCtV1Field; -import com.iab.gpp.encoder.field.UspNatV1Field; -import com.iab.gpp.encoder.field.UspUtV1Field; +import com.iab.gpp.encoder.field.UsCaV1Field; +import com.iab.gpp.encoder.field.UsCoV1Field; +import com.iab.gpp.encoder.field.UsCtV1Field; +import com.iab.gpp.encoder.field.UsNatV1Field; +import com.iab.gpp.encoder.field.UsUtV1Field; import com.iab.gpp.encoder.field.UspV1Field; -import com.iab.gpp.encoder.field.UspVaV1Field; +import com.iab.gpp.encoder.field.UsVaV1Field; import com.iab.gpp.encoder.section.TcfCaV1; import com.iab.gpp.encoder.section.TcfEuV2; -import com.iab.gpp.encoder.section.UspCaV1; -import com.iab.gpp.encoder.section.UspCoV1; -import com.iab.gpp.encoder.section.UspCtV1; -import com.iab.gpp.encoder.section.UspNatV1; -import com.iab.gpp.encoder.section.UspUtV1; +import com.iab.gpp.encoder.section.UsCaV1; +import com.iab.gpp.encoder.section.UsCoV1; +import com.iab.gpp.encoder.section.UsCtV1; +import com.iab.gpp.encoder.section.UsNatV1; +import com.iab.gpp.encoder.section.UsUtV1; import com.iab.gpp.encoder.section.UspV1; -import com.iab.gpp.encoder.section.UspVaV1; +import com.iab.gpp.encoder.section.UsVaV1; public class GppModelTest { private ZonedDateTime utcDateTime = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")); @Test - public void testEncodeDefault() throws EncodingException { + public void testEncodeDefault() throws EncodingException, LazyDecodingException { GppModel gppModel = new GppModel(); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.ID)); @@ -59,18 +60,28 @@ public void testEncodeDefault() throws EncodingException { } @Test - public void testEncodeDefaultAll() throws EncodingException, InvalidFieldException { + public void testDecodingException() { + try { + GppModel gppModel = new GppModel("invalid gpp string"); + Assertions.fail("Expected LazyDecodingException"); + } catch (DecodingException e) { + + } + } + + @Test + public void testEncodeDefaultAll() throws EncodingException, InvalidFieldException, LazyDecodingException { GppModel gppModel = new GppModel(); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); Assertions.assertEquals(false, gppModel.hasSection(UspV1.NAME)); - Assertions.assertEquals(false, gppModel.hasSection(UspNatV1.NAME)); - Assertions.assertEquals(false, gppModel.hasSection(UspCaV1.NAME)); - Assertions.assertEquals(false, gppModel.hasSection(UspVaV1.NAME)); - Assertions.assertEquals(false, gppModel.hasSection(UspCoV1.NAME)); - Assertions.assertEquals(false, gppModel.hasSection(UspUtV1.NAME)); - Assertions.assertEquals(false, gppModel.hasSection(UspCtV1.NAME)); + Assertions.assertEquals(false, gppModel.hasSection(UsNatV1.NAME)); + Assertions.assertEquals(false, gppModel.hasSection(UsCaV1.NAME)); + Assertions.assertEquals(false, gppModel.hasSection(UsVaV1.NAME)); + Assertions.assertEquals(false, gppModel.hasSection(UsCoV1.NAME)); + Assertions.assertEquals(false, gppModel.hasSection(UsUtV1.NAME)); + Assertions.assertEquals(false, gppModel.hasSection(UsCtV1.NAME)); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VERSION, TcfEuV2.VERSION); gppModel.setFieldValue(TcfEuV2.NAME, TcfCaV1Field.CREATED, utcDateTime); @@ -79,24 +90,24 @@ public void testEncodeDefaultAll() throws EncodingException, InvalidFieldExcepti gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.LAST_UPDATED, utcDateTime); gppModel.setFieldValue(UspV1.NAME, UspV1Field.VERSION, UspV1.VERSION); - gppModel.setFieldValue(UspNatV1.NAME, UspNatV1Field.VERSION, UspNatV1.VERSION); - gppModel.setFieldValue(UspCaV1.NAME, UspCaV1Field.VERSION, UspCaV1.VERSION); - gppModel.setFieldValue(UspVaV1.NAME, UspVaV1Field.VERSION, UspVaV1.VERSION); - gppModel.setFieldValue(UspCoV1.NAME, UspCoV1Field.VERSION, UspCoV1.VERSION); - gppModel.setFieldValue(UspUtV1.NAME, UspUtV1Field.VERSION, UspUtV1.VERSION); - gppModel.setFieldValue(UspCtV1.NAME, UspCtV1Field.VERSION, UspCtV1.VERSION); + gppModel.setFieldValue(UsNatV1.NAME, UsNatV1Field.VERSION, UsNatV1.VERSION); + gppModel.setFieldValue(UsCaV1.NAME, UsCaV1Field.VERSION, UsCaV1.VERSION); + gppModel.setFieldValue(UsVaV1.NAME, UsVaV1Field.VERSION, UsVaV1.VERSION); + gppModel.setFieldValue(UsCoV1.NAME, UsCoV1Field.VERSION, UsCoV1.VERSION); + gppModel.setFieldValue(UsUtV1.NAME, UsUtV1Field.VERSION, UsUtV1.VERSION); + gppModel.setFieldValue(UsCtV1.NAME, UsCtV1Field.VERSION, UsCtV1.VERSION); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspNatV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspCaV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspVaV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspCoV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspUtV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspCtV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsNatV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsCaV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsVaV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsCoV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsUtV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsCtV1.NAME)); String gppString = gppModel.encode(); Assertions.assertEquals( @@ -106,7 +117,7 @@ public void testEncodeDefaultAll() throws EncodingException, InvalidFieldExcepti } @Test - public void testEncodeUspv1() throws EncodingException, InvalidFieldException { + public void testEncodeUspv1() throws EncodingException, InvalidFieldException, LazyDecodingException { GppModel gppModel = new GppModel(); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.ID)); @@ -146,7 +157,7 @@ public void testEncodeUspv1() throws EncodingException, InvalidFieldException { } @Test - public void testEncodeTcfEuV2() throws EncodingException, InvalidFieldException { + public void testEncodeTcfEuV2() throws EncodingException, InvalidFieldException, LazyDecodingException { GppModel gppModel = new GppModel(); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.ID)); @@ -196,7 +207,7 @@ public void testEncodeTcfEuV2() throws EncodingException, InvalidFieldException } @Test - public void testEncodeUspV1AndTcfEuV2() throws EncodingException, InvalidFieldException { + public void testEncodeUspV1AndTcfEuV2() throws EncodingException, InvalidFieldException, LazyDecodingException { GppModel gppModel = new GppModel(); Assertions.assertEquals(false, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); @@ -241,7 +252,8 @@ public void testEncodeUspV1AndTcfEuV2() throws EncodingException, InvalidFieldEx } @Test - public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() throws EncodingException, InvalidFieldException { + public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() + throws EncodingException, InvalidFieldException, LazyDecodingException { GppModel gppModel = new GppModel(); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.ID)); @@ -366,12 +378,12 @@ public void testDecodeDefaultsAll() throws DecodingException { Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspNatV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspCaV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspVaV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspCoV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspUtV1.NAME)); - Assertions.assertEquals(true, gppModel.hasSection(UspCtV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsNatV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsCaV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsVaV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsCoV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsUtV1.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsCtV1.NAME)); } @Test @@ -586,7 +598,7 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() throws DecodingException { } @Test - public void testEncode1() throws EncodingException, InvalidFieldException { + public void testEncode1() throws EncodingException, InvalidFieldException, LazyDecodingException { GppModel gppModel = new GppModel(); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, Arrays.asList(28)); @@ -597,7 +609,7 @@ public void testEncode1() throws EncodingException, InvalidFieldException { } @Test - public void testEncode2() throws EncodingException, InvalidFieldException { + public void testEncode2() throws EncodingException, InvalidFieldException, LazyDecodingException { GppModel gppModel = new GppModel(); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, Arrays.asList(29)); @@ -608,7 +620,7 @@ public void testEncode2() throws EncodingException, InvalidFieldException { } @Test - public void testEncode3() throws EncodingException, InvalidFieldException { + public void testEncode3() throws EncodingException, InvalidFieldException, LazyDecodingException { GppModel gppModel = new GppModel(); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, Arrays.asList(1, 173, 722)); @@ -643,9 +655,9 @@ public void testConsistency() throws InvalidFieldException, EncodingException, D GppModel fromObjectModel = new GppModel(); fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, - new ArrayList<>(List.of(true, true, true, true, true, true, true, true, true, true))); + Arrays.asList(true, true, true, true, true, true, true, true, true, true)); fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, - new ArrayList<>(List.of(32, 128, 81, 210, 755, 21, 173, 238))); + Arrays.asList(32, 128, 81, 210, 755, 21, 173, 238)); Assertions.assertEquals(fromObjectModel.getSection(TcfEuV2.NAME).encode(), fromObjectModel.getSection(TcfEuV2.NAME).encode()); @@ -654,10 +666,10 @@ public void testConsistency() throws InvalidFieldException, EncodingException, D GppModel decodedModel = new GppModel(fromObjectModel.encode()); Assertions.assertEquals( - new ArrayList<>(List.of(true, true, true, true, true, true, true, true, true, true, false, false, false, false, - false, false, false, false, false, false, false, false, false, false)), + Arrays.asList(true, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, false, false, false, false, false, false, false), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS)); - Assertions.assertEquals(new ArrayList<>(List.of(21, 32, 81, 128, 173, 210, 238, 755)), + Assertions.assertEquals(Arrays.asList(21, 32, 81, 128, 173, 210, 238, 755), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaV1Test.java new file mode 100644 index 0000000..1a10fa9 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaV1Test.java @@ -0,0 +1,104 @@ +package com.iab.gpp.encoder.section; + + +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.UsCaV1Field; + +public class UsCaV1Test { + + @Test + public void testEncode1() throws EncodingException { + + UsCaV1 usCaV1 = new UsCaV1(); + Assertions.assertEquals("BAAAAAAA.QA", usCaV1.encode()); + } + + @Test + public void testEncode2() throws EncodingException, InvalidFieldException { + UsCaV1 usCaV1 = new UsCaV1(); + + usCaV1.setFieldValue(UsCaV1Field.SALE_OPT_OUT_NOTICE, 1); + usCaV1.setFieldValue(UsCaV1Field.SHARING_OPT_OUT_NOTICE, 2); + usCaV1.setFieldValue(UsCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, 3); + usCaV1.setFieldValue(UsCaV1Field.SALE_OPT_OUT, 1); + usCaV1.setFieldValue(UsCaV1Field.SHARING_OPT_OUT, 2); + usCaV1.setFieldValue(UsCaV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0)); + usCaV1.setFieldValue(UsCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 1)); + usCaV1.setFieldValue(UsCaV1Field.PERSONAL_DATA_CONSENTS, 1); + usCaV1.setFieldValue(UsCaV1Field.MSPA_COVERED_TRANSACTION, 3); + usCaV1.setFieldValue(UsCaV1Field.MSPA_OPT_OUT_OPTION_MODE, 1); + usCaV1.setFieldValue(UsCaV1Field.MSPA_SERVICE_PROVIDER_MODE, 2); + usCaV1.setFieldValue(UsCaV1Field.GPC, true); + + Assertions.assertEquals("BbYbGwXY.YA", usCaV1.encode()); + } + + @Test + public void testEncode3() throws EncodingException, InvalidFieldException { + UsCaV1 usCaV1 = new UsCaV1(); + + usCaV1.setFieldValue(UsCaV1Field.SALE_OPT_OUT_NOTICE, 1); + usCaV1.setFieldValue(UsCaV1Field.SHARING_OPT_OUT_NOTICE, 1); + usCaV1.setFieldValue(UsCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, 0); + usCaV1.setFieldValue(UsCaV1Field.SALE_OPT_OUT, 2); + usCaV1.setFieldValue(UsCaV1Field.SHARING_OPT_OUT, 2); + usCaV1.setFieldValue(UsCaV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0)); + usCaV1.setFieldValue(UsCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 0)); + usCaV1.setFieldValue(UsCaV1Field.PERSONAL_DATA_CONSENTS, 0); + usCaV1.setFieldValue(UsCaV1Field.MSPA_COVERED_TRANSACTION, 1); + usCaV1.setFieldValue(UsCaV1Field.MSPA_OPT_OUT_OPTION_MODE, 1); + usCaV1.setFieldValue(UsCaV1Field.MSPA_SERVICE_PROVIDER_MODE, 0); + usCaV1.setFieldValue(UsCaV1Field.GPC, true); + + Assertions.assertEquals("BUoAAABQ.YA", usCaV1.encode()); + } + + @Test + public void testEncodeWithGpcSegmentExcluded() throws EncodingException, InvalidFieldException { + + UsCaV1 usCaV1 = new UsCaV1(); + usCaV1.setFieldValue(UsCaV1Field.GPC_SEGMENT_INCLUDED, false); + Assertions.assertEquals("BAAAAAAA", usCaV1.encode()); + } + + @Test + public void testDecode1() throws DecodingException { + UsCaV1 usCaV1 = new UsCaV1("BbYbGwXY.YA"); + + Assertions.assertEquals(1, usCaV1.getSaleOptOutNotice()); + Assertions.assertEquals(2, usCaV1.getSharingOptOut()); + Assertions.assertEquals(3, usCaV1.getSensitiveDataLimitUseNotice()); + Assertions.assertEquals(1, usCaV1.getSaleOptOut()); + Assertions.assertEquals(2, usCaV1.getSharingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0), usCaV1.getSensitiveDataProcessing()); + Assertions.assertEquals(Arrays.asList(0, 1), usCaV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usCaV1.getPersonalDataConsents()); + Assertions.assertEquals(3, usCaV1.getMspaCoveredTransaction()); + Assertions.assertEquals(1, usCaV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(2, usCaV1.getMspaServiceProviderMode()); + Assertions.assertEquals(true, usCaV1.getGpc()); + } + + @Test + public void testDecodeWithGpcSegmentExcluded() throws DecodingException { + UsCaV1 usCaV1 = new UsCaV1("BbYbGwXY"); + + Assertions.assertEquals(1, usCaV1.getSaleOptOutNotice()); + Assertions.assertEquals(2, usCaV1.getSharingOptOut()); + Assertions.assertEquals(3, usCaV1.getSensitiveDataLimitUseNotice()); + Assertions.assertEquals(1, usCaV1.getSaleOptOut()); + Assertions.assertEquals(2, usCaV1.getSharingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0), usCaV1.getSensitiveDataProcessing()); + Assertions.assertEquals(Arrays.asList(0, 1), usCaV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usCaV1.getPersonalDataConsents()); + Assertions.assertEquals(3, usCaV1.getMspaCoveredTransaction()); + Assertions.assertEquals(1, usCaV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(2, usCaV1.getMspaServiceProviderMode()); + Assertions.assertEquals(false, usCaV1.getGpcSegmentIncluded()); + } +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoV1Test.java new file mode 100644 index 0000000..9c73080 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoV1Test.java @@ -0,0 +1,79 @@ +package com.iab.gpp.encoder.section; + + +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.UsCoV1Field; + +public class UsCoV1Test { + + @Test + public void testEncode1() throws EncodingException { + UsCoV1 usCoV1 = new UsCoV1(); + Assertions.assertEquals("BAAAAAA.QA", usCoV1.encode()); + } + + @Test + public void testEncode2() throws EncodingException, InvalidFieldException { + UsCoV1 usCoV1 = new UsCoV1(); + + usCoV1.setFieldValue(UsCoV1Field.SHARING_NOTICE, 1); + usCoV1.setFieldValue(UsCoV1Field.SALE_OPT_OUT_NOTICE, 2); + usCoV1.setFieldValue(UsCoV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); + usCoV1.setFieldValue(UsCoV1Field.SALE_OPT_OUT, 1); + usCoV1.setFieldValue(UsCoV1Field.TARGETED_ADVERTISING_OPT_OUT, 2); + usCoV1.setFieldValue(UsCoV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2)); + usCoV1.setFieldValue(UsCoV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); + usCoV1.setFieldValue(UsCoV1Field.MSPA_COVERED_TRANSACTION, 1); + usCoV1.setFieldValue(UsCoV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); + usCoV1.setFieldValue(UsCoV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); + usCoV1.setFieldValue(UsCoV1Field.GPC, true); + + Assertions.assertEquals("BbYbG2w.YA", usCoV1.encode()); + } + + @Test + public void testEncodeWithGpcSegmentExcluded() throws EncodingException, InvalidFieldException { + UsCoV1 usCoV1 = new UsCoV1(); + usCoV1.setFieldValue(UsCoV1Field.GPC_SEGMENT_INCLUDED, false); + Assertions.assertEquals("BAAAAAA", usCoV1.encode()); + } + + @Test + public void testDecode1() throws DecodingException { + UsCoV1 usCoV1 = new UsCoV1("BbYbG2wA.YA"); + + Assertions.assertEquals(1, usCoV1.getSharingNotice()); + Assertions.assertEquals(2, usCoV1.getSaleOptOutNotice()); + Assertions.assertEquals(3, usCoV1.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usCoV1.getSaleOptOut()); + Assertions.assertEquals(2, usCoV1.getTargetedAdvertisingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2), usCoV1.getSensitiveDataProcessing()); + Assertions.assertEquals(3, usCoV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usCoV1.getMspaCoveredTransaction()); + Assertions.assertEquals(2, usCoV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(3, usCoV1.getMspaServiceProviderMode()); + Assertions.assertEquals(true, usCoV1.getGpc()); + } + + @Test + public void testDecodeWithGpcSegmentExcluded() throws DecodingException { + UsCoV1 usCoV1 = new UsCoV1("BbYbG2wA"); + + Assertions.assertEquals(1, usCoV1.getSharingNotice()); + Assertions.assertEquals(2, usCoV1.getSaleOptOutNotice()); + Assertions.assertEquals(3, usCoV1.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usCoV1.getSaleOptOut()); + Assertions.assertEquals(2, usCoV1.getTargetedAdvertisingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2), usCoV1.getSensitiveDataProcessing()); + Assertions.assertEquals(3, usCoV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usCoV1.getMspaCoveredTransaction()); + Assertions.assertEquals(2, usCoV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(3, usCoV1.getMspaServiceProviderMode()); + Assertions.assertEquals(false, usCoV1.getGpcSegmentIncluded()); + } +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtV1Test.java new file mode 100644 index 0000000..2053e24 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtV1Test.java @@ -0,0 +1,79 @@ +package com.iab.gpp.encoder.section; + + +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.UsCtV1Field; + +public class UsCtV1Test { + + @Test + public void testEncode1() throws EncodingException { + UsCtV1 usCtV1 = new UsCtV1(); + Assertions.assertEquals("BAAAAAAA.QA", usCtV1.encode()); + } + + @Test + public void testEncode2() throws EncodingException, InvalidFieldException { + UsCtV1 usCtV1 = new UsCtV1(); + + usCtV1.setFieldValue(UsCtV1Field.SHARING_NOTICE, 1); + usCtV1.setFieldValue(UsCtV1Field.SALE_OPT_OUT_NOTICE, 2); + usCtV1.setFieldValue(UsCtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); + usCtV1.setFieldValue(UsCtV1Field.SALE_OPT_OUT, 1); + usCtV1.setFieldValue(UsCtV1Field.TARGETED_ADVERTISING_OPT_OUT, 2); + usCtV1.setFieldValue(UsCtV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3)); + usCtV1.setFieldValue(UsCtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); + usCtV1.setFieldValue(UsCtV1Field.MSPA_COVERED_TRANSACTION, 1); + usCtV1.setFieldValue(UsCtV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); + usCtV1.setFieldValue(UsCtV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); + usCtV1.setFieldValue(UsCtV1Field.GPC, true); + + Assertions.assertEquals("BbYbG22w.YA", usCtV1.encode()); + } + + @Test + public void testEncodeWithGpcSegmentExcluded() throws EncodingException, InvalidFieldException { + UsCtV1 usCtV1 = new UsCtV1(); + usCtV1.setFieldValue(UsCtV1Field.GPC_SEGMENT_INCLUDED, false); + Assertions.assertEquals("BAAAAAAA", usCtV1.encode()); + } + + @Test + public void testDecode1() throws DecodingException { + UsCtV1 usCtV1 = new UsCtV1("BbYbG22w.YAAA"); + + Assertions.assertEquals(1, usCtV1.getSharingNotice()); + Assertions.assertEquals(2, usCtV1.getSaleOptOutNotice()); + Assertions.assertEquals(3, usCtV1.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usCtV1.getSaleOptOut()); + Assertions.assertEquals(2, usCtV1.getTargetedAdvertisingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3), usCtV1.getSensitiveDataProcessing()); + Assertions.assertEquals(Arrays.asList(1, 2, 3), usCtV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usCtV1.getMspaCoveredTransaction()); + Assertions.assertEquals(2, usCtV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(3, usCtV1.getMspaServiceProviderMode()); + Assertions.assertEquals(true, usCtV1.getGpc()); + } + + @Test + public void testDecodeWithGpcSegmentExcluded() throws DecodingException { + UsCtV1 usCtV1 = new UsCtV1("BbYbG22w"); + + Assertions.assertEquals(1, usCtV1.getSharingNotice()); + Assertions.assertEquals(2, usCtV1.getSaleOptOutNotice()); + Assertions.assertEquals(3, usCtV1.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usCtV1.getSaleOptOut()); + Assertions.assertEquals(2, usCtV1.getTargetedAdvertisingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3), usCtV1.getSensitiveDataProcessing()); + Assertions.assertEquals(Arrays.asList(1, 2, 3), usCtV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usCtV1.getMspaCoveredTransaction()); + Assertions.assertEquals(2, usCtV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(3, usCtV1.getMspaServiceProviderMode()); + Assertions.assertEquals(false, usCtV1.getGpcSegmentIncluded()); + } +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatV1Test.java new file mode 100644 index 0000000..f070754 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatV1Test.java @@ -0,0 +1,120 @@ +package com.iab.gpp.encoder.section; + + +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.UsNatV1Field; + +public class UsNatV1Test { + + @Test + public void testEncode1() throws EncodingException { + + UsNatV1 usNatV1 = new UsNatV1(); + Assertions.assertEquals("BAAAAAAAAAA.QA", usNatV1.encode()); + } + + @Test + public void testEncode2() throws EncodingException, InvalidFieldException { + UsNatV1 usNatV1 = new UsNatV1(); + + usNatV1.setFieldValue(UsNatV1Field.SHARING_NOTICE, 1); + usNatV1.setFieldValue(UsNatV1Field.SALE_OPT_OUT_NOTICE, 2); + usNatV1.setFieldValue(UsNatV1Field.SHARING_OPT_OUT_NOTICE, 3); + usNatV1.setFieldValue(UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); + usNatV1.setFieldValue(UsNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 2); + usNatV1.setFieldValue(UsNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, 3); + usNatV1.setFieldValue(UsNatV1Field.SALE_OPT_OUT, 1); + usNatV1.setFieldValue(UsNatV1Field.SHARING_OPT_OUT, 2); + usNatV1.setFieldValue(UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT, 3); + usNatV1.setFieldValue(UsNatV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3)); + usNatV1.setFieldValue(UsNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 1)); + usNatV1.setFieldValue(UsNatV1Field.PERSONAL_DATA_CONSENTS, 1); + usNatV1.setFieldValue(UsNatV1Field.MSPA_COVERED_TRANSACTION, 1); + usNatV1.setFieldValue(UsNatV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); + usNatV1.setFieldValue(UsNatV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); + usNatV1.setFieldValue(UsNatV1Field.GPC, true); + + Assertions.assertEquals("BbbbGxsbFbA.YA", usNatV1.encode()); + } + + @Test + public void testEncode3() throws EncodingException, InvalidFieldException { + UsNatV1 usNatV1 = new UsNatV1(); + + usNatV1.setFieldValue(UsNatV1Field.SHARING_NOTICE, 1); + usNatV1.setFieldValue(UsNatV1Field.SALE_OPT_OUT_NOTICE, 1); + usNatV1.setFieldValue(UsNatV1Field.SHARING_OPT_OUT_NOTICE, 1); + usNatV1.setFieldValue(UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); + usNatV1.setFieldValue(UsNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 0); + usNatV1.setFieldValue(UsNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, 0); + usNatV1.setFieldValue(UsNatV1Field.SALE_OPT_OUT, 1); + usNatV1.setFieldValue(UsNatV1Field.SHARING_OPT_OUT, 1); + usNatV1.setFieldValue(UsNatV1Field.TARGETED_ADVERTISING_OPT_OUT, 1); + usNatV1.setFieldValue(UsNatV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); + usNatV1.setFieldValue(UsNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 0)); + usNatV1.setFieldValue(UsNatV1Field.PERSONAL_DATA_CONSENTS, 0); + usNatV1.setFieldValue(UsNatV1Field.MSPA_COVERED_TRANSACTION, 1); + usNatV1.setFieldValue(UsNatV1Field.MSPA_OPT_OUT_OPTION_MODE, 1); + usNatV1.setFieldValue(UsNatV1Field.MSPA_SERVICE_PROVIDER_MODE, 0); + usNatV1.setFieldValue(UsNatV1Field.GPC, true); + + Assertions.assertEquals("BVQVAAAAAUA.YA", usNatV1.encode()); + } + + @Test + public void testEncodeWithGpcSegmentIncluded() throws EncodingException, InvalidFieldException { + + UsNatV1 usNatV1 = new UsNatV1(); + usNatV1.setFieldValue(UsNatV1Field.GPC_SEGMENT_INCLUDED, false); + Assertions.assertEquals("BAAAAAAAAAA", usNatV1.encode()); + } + + @Test + public void testDecode1() throws DecodingException { + UsNatV1 usNatV1 = new UsNatV1("BbbbGxsbFbA.YA"); + + Assertions.assertEquals(1, usNatV1.getSharingNotice()); + Assertions.assertEquals(2, usNatV1.getSaleOptOutNotice()); + Assertions.assertEquals(3, usNatV1.getSharingOptOutNotice()); + Assertions.assertEquals(1, usNatV1.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(2, usNatV1.getSensitiveDataProcessingOptOutNotice()); + Assertions.assertEquals(3, usNatV1.getSensitiveDataLimitUseNotice()); + Assertions.assertEquals(1, usNatV1.getSaleOptOut()); + Assertions.assertEquals(2, usNatV1.getSharingOptOut()); + Assertions.assertEquals(3, usNatV1.getTargetedAdvertisingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3), usNatV1.getSensitiveDataProcessing()); + Assertions.assertEquals(Arrays.asList(0, 1), usNatV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usNatV1.getPersonalDataConsents()); + Assertions.assertEquals(1, usNatV1.getMspaCoveredTransaction()); + Assertions.assertEquals(2, usNatV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(3, usNatV1.getMspaServiceProviderMode()); + Assertions.assertEquals(true, usNatV1.getGpc()); + } + + @Test + public void testDecodeWithGpcSegmentExcluded() throws DecodingException { + UsNatV1 usNatV1 = new UsNatV1("BbbbGxsbFbA"); + + Assertions.assertEquals(1, usNatV1.getSharingNotice()); + Assertions.assertEquals(2, usNatV1.getSaleOptOutNotice()); + Assertions.assertEquals(3, usNatV1.getSharingOptOutNotice()); + Assertions.assertEquals(1, usNatV1.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(2, usNatV1.getSensitiveDataProcessingOptOutNotice()); + Assertions.assertEquals(3, usNatV1.getSensitiveDataLimitUseNotice()); + Assertions.assertEquals(1, usNatV1.getSaleOptOut()); + Assertions.assertEquals(2, usNatV1.getSharingOptOut()); + Assertions.assertEquals(3, usNatV1.getTargetedAdvertisingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3), usNatV1.getSensitiveDataProcessing()); + Assertions.assertEquals(Arrays.asList(0, 1), usNatV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usNatV1.getPersonalDataConsents()); + Assertions.assertEquals(1, usNatV1.getMspaCoveredTransaction()); + Assertions.assertEquals(2, usNatV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(3, usNatV1.getMspaServiceProviderMode()); + Assertions.assertEquals(false, usNatV1.getGpcSegmentIncluded()); + } +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtV1Test.java new file mode 100644 index 0000000..f26808a --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtV1Test.java @@ -0,0 +1,54 @@ +package com.iab.gpp.encoder.section; + + +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.UsUtV1Field; + +public class UsUtV1Test { + + @Test + public void testEncode1() throws EncodingException { + UsUtV1 usUtV1 = new UsUtV1(); + Assertions.assertEquals("BAAAAAAA", usUtV1.encode()); + } + + @Test + public void testEncode2() throws EncodingException, InvalidFieldException { + UsUtV1 usUtV1 = new UsUtV1(); + + usUtV1.setFieldValue(UsUtV1Field.SHARING_NOTICE, 1); + usUtV1.setFieldValue(UsUtV1Field.SALE_OPT_OUT_NOTICE, 2); + usUtV1.setFieldValue(UsUtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); + usUtV1.setFieldValue(UsUtV1Field.SALE_OPT_OUT, 1); + usUtV1.setFieldValue(UsUtV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 1); + usUtV1.setFieldValue(UsUtV1Field.TARGETED_ADVERTISING_OPT_OUT, 2); + usUtV1.setFieldValue(UsUtV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3)); + usUtV1.setFieldValue(UsUtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); + usUtV1.setFieldValue(UsUtV1Field.MSPA_COVERED_TRANSACTION, 1); + usUtV1.setFieldValue(UsUtV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); + usUtV1.setFieldValue(UsUtV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); + + Assertions.assertEquals("BbWGxvbA", usUtV1.encode()); + } + + @Test + public void testDecode1() throws DecodingException { + UsUtV1 usUtV1 = new UsUtV1("BbWGxvbA"); + + Assertions.assertEquals(1, usUtV1.getSharingNotice()); + Assertions.assertEquals(2, usUtV1.getSaleOptOutNotice()); + Assertions.assertEquals(3, usUtV1.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usUtV1.getSaleOptOut()); + Assertions.assertEquals(2, usUtV1.getTargetedAdvertisingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3), usUtV1.getSensitiveDataProcessing()); + Assertions.assertEquals(3, usUtV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usUtV1.getMspaCoveredTransaction()); + Assertions.assertEquals(2, usUtV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(3, usUtV1.getMspaServiceProviderMode()); + } +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaV1Test.java new file mode 100644 index 0000000..e65bec8 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaV1Test.java @@ -0,0 +1,57 @@ +package com.iab.gpp.encoder.section; + + +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.UsVaV1Field; + +public class UsVaV1Test { + + @Test + public void testEncode1() throws EncodingException { + UsVaV1 usVaV1 = new UsVaV1(); + Assertions.assertEquals("BAAAAAA", usVaV1.encode()); + } + + @Test + public void testEncode2() throws EncodingException { + UsVaV1 usVaV1 = new UsVaV1(); + + try { + usVaV1.setFieldValue(UsVaV1Field.SHARING_NOTICE, 1); + usVaV1.setFieldValue(UsVaV1Field.SALE_OPT_OUT_NOTICE, 2); + usVaV1.setFieldValue(UsVaV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); + usVaV1.setFieldValue(UsVaV1Field.SALE_OPT_OUT, 1); + usVaV1.setFieldValue(UsVaV1Field.TARGETED_ADVERTISING_OPT_OUT, 2); + usVaV1.setFieldValue(UsVaV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3)); + usVaV1.setFieldValue(UsVaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); + usVaV1.setFieldValue(UsVaV1Field.MSPA_COVERED_TRANSACTION, 1); + usVaV1.setFieldValue(UsVaV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); + usVaV1.setFieldValue(UsVaV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); + } catch (InvalidFieldException e) { + throw new EncodingException(e); + } + + Assertions.assertEquals("BbYbG9s", usVaV1.encode()); + } + + @Test + public void testDecode1() throws DecodingException { + UsVaV1 usVaV1 = new UsVaV1("BbYbG9s"); + + Assertions.assertEquals(1, usVaV1.getSharingNotice()); + Assertions.assertEquals(2, usVaV1.getSaleOptOutNotice()); + Assertions.assertEquals(3, usVaV1.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usVaV1.getSaleOptOut()); + Assertions.assertEquals(2, usVaV1.getTargetedAdvertisingOptOut()); + Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3), usVaV1.getSensitiveDataProcessing()); + Assertions.assertEquals(3, usVaV1.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usVaV1.getMspaCoveredTransaction()); + Assertions.assertEquals(2, usVaV1.getMspaOptOutOptionMode()); + Assertions.assertEquals(3, usVaV1.getMspaServiceProviderMode()); + } +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspCaV1Test.java deleted file mode 100644 index 0848536..0000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspCaV1Test.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.iab.gpp.encoder.section; - - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.UspCaV1Field; - -public class UspCaV1Test { - - @Test - public void testEncode1() throws EncodingException { - - UspCaV1 uspCaV1 = new UspCaV1(); - Assertions.assertEquals("BAAAAAAA.QA", uspCaV1.encode()); - } - - @Test - public void testEncode2() throws EncodingException, InvalidFieldException { - UspCaV1 uspCaV1 = new UspCaV1(); - - uspCaV1.setFieldValue(UspCaV1Field.SALE_OPT_OUT_NOTICE, 1); - uspCaV1.setFieldValue(UspCaV1Field.SHARING_OPT_OUT_NOTICE, 2); - uspCaV1.setFieldValue(UspCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, 3); - uspCaV1.setFieldValue(UspCaV1Field.SALE_OPT_OUT, 1); - uspCaV1.setFieldValue(UspCaV1Field.SHARING_OPT_OUT, 2); - uspCaV1.setFieldValue(UspCaV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0)); - uspCaV1.setFieldValue(UspCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 1)); - uspCaV1.setFieldValue(UspCaV1Field.PERSONAL_DATA_CONSENTS, 1); - uspCaV1.setFieldValue(UspCaV1Field.MSPA_COVERED_TRANSACTION, 3); - uspCaV1.setFieldValue(UspCaV1Field.MSPA_OPT_OUT_OPTION_MODE, 1); - uspCaV1.setFieldValue(UspCaV1Field.MSPA_SERVICE_PROVIDER_MODE, 2); - uspCaV1.setFieldValue(UspCaV1Field.GPC, true); - - Assertions.assertEquals("BbYbGwXY.YA", uspCaV1.encode()); - } - - @Test - public void testEncode3() throws EncodingException, InvalidFieldException { - UspCaV1 uspCaV1 = new UspCaV1(); - - uspCaV1.setFieldValue(UspCaV1Field.SALE_OPT_OUT_NOTICE, 1); - uspCaV1.setFieldValue(UspCaV1Field.SHARING_OPT_OUT_NOTICE, 1); - uspCaV1.setFieldValue(UspCaV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, 0); - uspCaV1.setFieldValue(UspCaV1Field.SALE_OPT_OUT, 2); - uspCaV1.setFieldValue(UspCaV1Field.SHARING_OPT_OUT, 2); - uspCaV1.setFieldValue(UspCaV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0)); - uspCaV1.setFieldValue(UspCaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 0)); - uspCaV1.setFieldValue(UspCaV1Field.PERSONAL_DATA_CONSENTS, 0); - uspCaV1.setFieldValue(UspCaV1Field.MSPA_COVERED_TRANSACTION, 1); - uspCaV1.setFieldValue(UspCaV1Field.MSPA_OPT_OUT_OPTION_MODE, 1); - uspCaV1.setFieldValue(UspCaV1Field.MSPA_SERVICE_PROVIDER_MODE, 0); - uspCaV1.setFieldValue(UspCaV1Field.GPC, true); - - Assertions.assertEquals("BUoAAABQ.YA", uspCaV1.encode()); - } - - @Test - public void testEncodeWithGpcSegmentExcluded() throws EncodingException, InvalidFieldException { - - UspCaV1 uspCaV1 = new UspCaV1(); - uspCaV1.setFieldValue(UspCaV1Field.GPC_SEGMENT_INCLUDED, false); - Assertions.assertEquals("BAAAAAAA", uspCaV1.encode()); - } - - @Test - public void testDecode1() throws DecodingException { - UspCaV1 uspCaV1 = new UspCaV1("BbYbGwXY.YA"); - - Assertions.assertEquals(1, uspCaV1.getSaleOptOutNotice()); - Assertions.assertEquals(2, uspCaV1.getSharingOptOut()); - Assertions.assertEquals(3, uspCaV1.getSensitiveDataLimitUseNotice()); - Assertions.assertEquals(1, uspCaV1.getSaleOptOut()); - Assertions.assertEquals(2, uspCaV1.getSharingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0), uspCaV1.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(0, 1), uspCaV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspCaV1.getPersonalDataConsents()); - Assertions.assertEquals(3, uspCaV1.getMspaCoveredTransaction()); - Assertions.assertEquals(1, uspCaV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(2, uspCaV1.getMspaServiceProviderMode()); - Assertions.assertEquals(true, uspCaV1.getGpc()); - } - - @Test - public void testDecodeWithGpcSegmentExcluded() throws DecodingException { - UspCaV1 uspCaV1 = new UspCaV1("BbYbGwXY"); - - Assertions.assertEquals(1, uspCaV1.getSaleOptOutNotice()); - Assertions.assertEquals(2, uspCaV1.getSharingOptOut()); - Assertions.assertEquals(3, uspCaV1.getSensitiveDataLimitUseNotice()); - Assertions.assertEquals(1, uspCaV1.getSaleOptOut()); - Assertions.assertEquals(2, uspCaV1.getSharingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0), uspCaV1.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(0, 1), uspCaV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspCaV1.getPersonalDataConsents()); - Assertions.assertEquals(3, uspCaV1.getMspaCoveredTransaction()); - Assertions.assertEquals(1, uspCaV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(2, uspCaV1.getMspaServiceProviderMode()); - Assertions.assertEquals(false, uspCaV1.getGpcSegmentIncluded()); - } -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspCoV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspCoV1Test.java deleted file mode 100644 index 05559ca..0000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspCoV1Test.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.iab.gpp.encoder.section; - - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.UspCoV1Field; - -public class UspCoV1Test { - - @Test - public void testEncode1() throws EncodingException { - UspCoV1 uspCoV1 = new UspCoV1(); - Assertions.assertEquals("BAAAAAA.QA", uspCoV1.encode()); - } - - @Test - public void testEncode2() throws EncodingException, InvalidFieldException { - UspCoV1 uspCoV1 = new UspCoV1(); - - uspCoV1.setFieldValue(UspCoV1Field.SHARING_NOTICE, 1); - uspCoV1.setFieldValue(UspCoV1Field.SALE_OPT_OUT_NOTICE, 2); - uspCoV1.setFieldValue(UspCoV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); - uspCoV1.setFieldValue(UspCoV1Field.SALE_OPT_OUT, 1); - uspCoV1.setFieldValue(UspCoV1Field.TARGETED_ADVERTISING_OPT_OUT, 2); - uspCoV1.setFieldValue(UspCoV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2)); - uspCoV1.setFieldValue(UspCoV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); - uspCoV1.setFieldValue(UspCoV1Field.MSPA_COVERED_TRANSACTION, 1); - uspCoV1.setFieldValue(UspCoV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); - uspCoV1.setFieldValue(UspCoV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); - uspCoV1.setFieldValue(UspCoV1Field.GPC, true); - - Assertions.assertEquals("BbYbG2w.YA", uspCoV1.encode()); - } - - @Test - public void testEncodeWithGpcSegmentExcluded() throws EncodingException, InvalidFieldException { - UspCoV1 uspCoV1 = new UspCoV1(); - uspCoV1.setFieldValue(UspCoV1Field.GPC_SEGMENT_INCLUDED, false); - Assertions.assertEquals("BAAAAAA", uspCoV1.encode()); - } - - @Test - public void testDecode1() throws DecodingException { - UspCoV1 uspCoV1 = new UspCoV1("BbYbG2wA.YA"); - - Assertions.assertEquals(1, uspCoV1.getSharingNotice()); - Assertions.assertEquals(2, uspCoV1.getSaleOptOutNotice()); - Assertions.assertEquals(3, uspCoV1.getTargetedAdvertisingOptOutNotice()); - Assertions.assertEquals(1, uspCoV1.getSaleOptOut()); - Assertions.assertEquals(2, uspCoV1.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2), uspCoV1.getSensitiveDataProcessing()); - Assertions.assertEquals(3, uspCoV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspCoV1.getMspaCoveredTransaction()); - Assertions.assertEquals(2, uspCoV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(3, uspCoV1.getMspaServiceProviderMode()); - Assertions.assertEquals(true, uspCoV1.getGpc()); - } - - @Test - public void testDecodeWithGpcSegmentExcluded() throws DecodingException { - UspCoV1 uspCoV1 = new UspCoV1("BbYbG2wA"); - - Assertions.assertEquals(1, uspCoV1.getSharingNotice()); - Assertions.assertEquals(2, uspCoV1.getSaleOptOutNotice()); - Assertions.assertEquals(3, uspCoV1.getTargetedAdvertisingOptOutNotice()); - Assertions.assertEquals(1, uspCoV1.getSaleOptOut()); - Assertions.assertEquals(2, uspCoV1.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2), uspCoV1.getSensitiveDataProcessing()); - Assertions.assertEquals(3, uspCoV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspCoV1.getMspaCoveredTransaction()); - Assertions.assertEquals(2, uspCoV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(3, uspCoV1.getMspaServiceProviderMode()); - Assertions.assertEquals(false, uspCoV1.getGpcSegmentIncluded()); - } -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspCtV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspCtV1Test.java deleted file mode 100644 index efc382f..0000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspCtV1Test.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.iab.gpp.encoder.section; - - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.UspCtV1Field; - -public class UspCtV1Test { - - @Test - public void testEncode1() throws EncodingException { - UspCtV1 uspCtV1 = new UspCtV1(); - Assertions.assertEquals("BAAAAAAA.QA", uspCtV1.encode()); - } - - @Test - public void testEncode2() throws EncodingException, InvalidFieldException { - UspCtV1 uspCtV1 = new UspCtV1(); - - uspCtV1.setFieldValue(UspCtV1Field.SHARING_NOTICE, 1); - uspCtV1.setFieldValue(UspCtV1Field.SALE_OPT_OUT_NOTICE, 2); - uspCtV1.setFieldValue(UspCtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); - uspCtV1.setFieldValue(UspCtV1Field.SALE_OPT_OUT, 1); - uspCtV1.setFieldValue(UspCtV1Field.TARGETED_ADVERTISING_OPT_OUT, 2); - uspCtV1.setFieldValue(UspCtV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3)); - uspCtV1.setFieldValue(UspCtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); - uspCtV1.setFieldValue(UspCtV1Field.MSPA_COVERED_TRANSACTION, 1); - uspCtV1.setFieldValue(UspCtV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); - uspCtV1.setFieldValue(UspCtV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); - uspCtV1.setFieldValue(UspCtV1Field.GPC, true); - - Assertions.assertEquals("BbYbG22w.YA", uspCtV1.encode()); - } - - @Test - public void testEncodeWithGpcSegmentExcluded() throws EncodingException, InvalidFieldException { - UspCtV1 uspCtV1 = new UspCtV1(); - uspCtV1.setFieldValue(UspCtV1Field.GPC_SEGMENT_INCLUDED, false); - Assertions.assertEquals("BAAAAAAA", uspCtV1.encode()); - } - - @Test - public void testDecode1() throws DecodingException { - UspCtV1 uspCtV1 = new UspCtV1("BbYbG22w.YAAA"); - - Assertions.assertEquals(1, uspCtV1.getSharingNotice()); - Assertions.assertEquals(2, uspCtV1.getSaleOptOutNotice()); - Assertions.assertEquals(3, uspCtV1.getTargetedAdvertisingOptOutNotice()); - Assertions.assertEquals(1, uspCtV1.getSaleOptOut()); - Assertions.assertEquals(2, uspCtV1.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3), uspCtV1.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(1, 2, 3), uspCtV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspCtV1.getMspaCoveredTransaction()); - Assertions.assertEquals(2, uspCtV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(3, uspCtV1.getMspaServiceProviderMode()); - Assertions.assertEquals(true, uspCtV1.getGpc()); - } - - @Test - public void testDecodeWithGpcSegmentExcluded() throws DecodingException { - UspCtV1 uspCtV1 = new UspCtV1("BbYbG22w"); - - Assertions.assertEquals(1, uspCtV1.getSharingNotice()); - Assertions.assertEquals(2, uspCtV1.getSaleOptOutNotice()); - Assertions.assertEquals(3, uspCtV1.getTargetedAdvertisingOptOutNotice()); - Assertions.assertEquals(1, uspCtV1.getSaleOptOut()); - Assertions.assertEquals(2, uspCtV1.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3), uspCtV1.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(1, 2, 3), uspCtV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspCtV1.getMspaCoveredTransaction()); - Assertions.assertEquals(2, uspCtV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(3, uspCtV1.getMspaServiceProviderMode()); - Assertions.assertEquals(false, uspCtV1.getGpcSegmentIncluded()); - } -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspNatV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspNatV1Test.java deleted file mode 100644 index b70e07c..0000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspNatV1Test.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.iab.gpp.encoder.section; - - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.UspNatV1Field; - -public class UspNatV1Test { - - @Test - public void testEncode1() throws EncodingException { - - UspNatV1 uspNatV1 = new UspNatV1(); - Assertions.assertEquals("BAAAAAAAAAA.QA", uspNatV1.encode()); - } - - @Test - public void testEncode2() throws EncodingException, InvalidFieldException { - UspNatV1 uspNatV1 = new UspNatV1(); - - uspNatV1.setFieldValue(UspNatV1Field.SHARING_NOTICE, 1); - uspNatV1.setFieldValue(UspNatV1Field.SALE_OPT_OUT_NOTICE, 2); - uspNatV1.setFieldValue(UspNatV1Field.SHARING_OPT_OUT_NOTICE, 3); - uspNatV1.setFieldValue(UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); - uspNatV1.setFieldValue(UspNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 2); - uspNatV1.setFieldValue(UspNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, 3); - uspNatV1.setFieldValue(UspNatV1Field.SALE_OPT_OUT, 1); - uspNatV1.setFieldValue(UspNatV1Field.SHARING_OPT_OUT, 2); - uspNatV1.setFieldValue(UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT, 3); - uspNatV1.setFieldValue(UspNatV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3)); - uspNatV1.setFieldValue(UspNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 1)); - uspNatV1.setFieldValue(UspNatV1Field.PERSONAL_DATA_CONSENTS, 1); - uspNatV1.setFieldValue(UspNatV1Field.MSPA_COVERED_TRANSACTION, 1); - uspNatV1.setFieldValue(UspNatV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); - uspNatV1.setFieldValue(UspNatV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); - uspNatV1.setFieldValue(UspNatV1Field.GPC, true); - - Assertions.assertEquals("BbbbGxsbFbA.YA", uspNatV1.encode()); - } - - @Test - public void testEncode3() throws EncodingException, InvalidFieldException { - UspNatV1 uspNatV1 = new UspNatV1(); - - uspNatV1.setFieldValue(UspNatV1Field.SHARING_NOTICE, 1); - uspNatV1.setFieldValue(UspNatV1Field.SALE_OPT_OUT_NOTICE, 1); - uspNatV1.setFieldValue(UspNatV1Field.SHARING_OPT_OUT_NOTICE, 1); - uspNatV1.setFieldValue(UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); - uspNatV1.setFieldValue(UspNatV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 0); - uspNatV1.setFieldValue(UspNatV1Field.SENSITIVE_DATA_LIMIT_USE_NOTICE, 0); - uspNatV1.setFieldValue(UspNatV1Field.SALE_OPT_OUT, 1); - uspNatV1.setFieldValue(UspNatV1Field.SHARING_OPT_OUT, 1); - uspNatV1.setFieldValue(UspNatV1Field.TARGETED_ADVERTISING_OPT_OUT, 1); - uspNatV1.setFieldValue(UspNatV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); - uspNatV1.setFieldValue(UspNatV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 0)); - uspNatV1.setFieldValue(UspNatV1Field.PERSONAL_DATA_CONSENTS, 0); - uspNatV1.setFieldValue(UspNatV1Field.MSPA_COVERED_TRANSACTION, 1); - uspNatV1.setFieldValue(UspNatV1Field.MSPA_OPT_OUT_OPTION_MODE, 1); - uspNatV1.setFieldValue(UspNatV1Field.MSPA_SERVICE_PROVIDER_MODE, 0); - uspNatV1.setFieldValue(UspNatV1Field.GPC, true); - - Assertions.assertEquals("BVQVAAAAAUA.YA", uspNatV1.encode()); - } - - @Test - public void testEncodeWithGpcSegmentIncluded() throws EncodingException, InvalidFieldException { - - UspNatV1 uspNatV1 = new UspNatV1(); - uspNatV1.setFieldValue(UspNatV1Field.GPC_SEGMENT_INCLUDED, false); - Assertions.assertEquals("BAAAAAAAAAA", uspNatV1.encode()); - } - - @Test - public void testDecode1() throws DecodingException { - UspNatV1 uspNatV1 = new UspNatV1("BbbbGxsbFbA.YA"); - - Assertions.assertEquals(1, uspNatV1.getSharingNotice()); - Assertions.assertEquals(2, uspNatV1.getSaleOptOutNotice()); - Assertions.assertEquals(3, uspNatV1.getSharingOptOutNotice()); - Assertions.assertEquals(1, uspNatV1.getTargetedAdvertisingOptOutNotice()); - Assertions.assertEquals(2, uspNatV1.getSensitiveDataProcessingOptOutNotice()); - Assertions.assertEquals(3, uspNatV1.getSensitiveDataLimitUseNotice()); - Assertions.assertEquals(1, uspNatV1.getSaleOptOut()); - Assertions.assertEquals(2, uspNatV1.getSharingOptOut()); - Assertions.assertEquals(3, uspNatV1.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3), uspNatV1.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(0, 1), uspNatV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspNatV1.getPersonalDataConsents()); - Assertions.assertEquals(1, uspNatV1.getMspaCoveredTransaction()); - Assertions.assertEquals(2, uspNatV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(3, uspNatV1.getMspaServiceProviderMode()); - Assertions.assertEquals(true, uspNatV1.getGpc()); - } - - @Test - public void testDecodeWithGpcSegmentExcluded() throws DecodingException { - UspNatV1 uspNatV1 = new UspNatV1("BbbbGxsbFbA"); - - Assertions.assertEquals(1, uspNatV1.getSharingNotice()); - Assertions.assertEquals(2, uspNatV1.getSaleOptOutNotice()); - Assertions.assertEquals(3, uspNatV1.getSharingOptOutNotice()); - Assertions.assertEquals(1, uspNatV1.getTargetedAdvertisingOptOutNotice()); - Assertions.assertEquals(2, uspNatV1.getSensitiveDataProcessingOptOutNotice()); - Assertions.assertEquals(3, uspNatV1.getSensitiveDataLimitUseNotice()); - Assertions.assertEquals(1, uspNatV1.getSaleOptOut()); - Assertions.assertEquals(2, uspNatV1.getSharingOptOut()); - Assertions.assertEquals(3, uspNatV1.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3), uspNatV1.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(0, 1), uspNatV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspNatV1.getPersonalDataConsents()); - Assertions.assertEquals(1, uspNatV1.getMspaCoveredTransaction()); - Assertions.assertEquals(2, uspNatV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(3, uspNatV1.getMspaServiceProviderMode()); - Assertions.assertEquals(false, uspNatV1.getGpcSegmentIncluded()); - } -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspUtV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspUtV1Test.java deleted file mode 100644 index 5bad0d1..0000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspUtV1Test.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.iab.gpp.encoder.section; - - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.UspUtV1Field; - -public class UspUtV1Test { - - @Test - public void testEncode1() throws EncodingException { - UspUtV1 uspUtV1 = new UspUtV1(); - Assertions.assertEquals("BAAAAAAA", uspUtV1.encode()); - } - - @Test - public void testEncode2() throws EncodingException, InvalidFieldException { - UspUtV1 uspUtV1 = new UspUtV1(); - - uspUtV1.setFieldValue(UspUtV1Field.SHARING_NOTICE, 1); - uspUtV1.setFieldValue(UspUtV1Field.SALE_OPT_OUT_NOTICE, 2); - uspUtV1.setFieldValue(UspUtV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); - uspUtV1.setFieldValue(UspUtV1Field.SALE_OPT_OUT, 1); - uspUtV1.setFieldValue(UspUtV1Field.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 1); - uspUtV1.setFieldValue(UspUtV1Field.TARGETED_ADVERTISING_OPT_OUT, 2); - uspUtV1.setFieldValue(UspUtV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3)); - uspUtV1.setFieldValue(UspUtV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); - uspUtV1.setFieldValue(UspUtV1Field.MSPA_COVERED_TRANSACTION, 1); - uspUtV1.setFieldValue(UspUtV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); - uspUtV1.setFieldValue(UspUtV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); - - Assertions.assertEquals("BbWGxvbA", uspUtV1.encode()); - } - - @Test - public void testDecode1() throws DecodingException { - UspUtV1 uspUtV1 = new UspUtV1("BbWGxvbA"); - - Assertions.assertEquals(1, uspUtV1.getSharingNotice()); - Assertions.assertEquals(2, uspUtV1.getSaleOptOutNotice()); - Assertions.assertEquals(3, uspUtV1.getTargetedAdvertisingOptOutNotice()); - Assertions.assertEquals(1, uspUtV1.getSaleOptOut()); - Assertions.assertEquals(2, uspUtV1.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3), uspUtV1.getSensitiveDataProcessing()); - Assertions.assertEquals(3, uspUtV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspUtV1.getMspaCoveredTransaction()); - Assertions.assertEquals(2, uspUtV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(3, uspUtV1.getMspaServiceProviderMode()); - } -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspVaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspVaV1Test.java deleted file mode 100644 index a8f3863..0000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspVaV1Test.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.iab.gpp.encoder.section; - - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.UspVaV1Field; - -public class UspVaV1Test { - - @Test - public void testEncode1() throws EncodingException { - UspVaV1 uspVaV1 = new UspVaV1(); - Assertions.assertEquals("BAAAAAA", uspVaV1.encode()); - } - - @Test - public void testEncode2() throws EncodingException { - UspVaV1 uspVaV1 = new UspVaV1(); - - try { - uspVaV1.setFieldValue(UspVaV1Field.SHARING_NOTICE, 1); - uspVaV1.setFieldValue(UspVaV1Field.SALE_OPT_OUT_NOTICE, 2); - uspVaV1.setFieldValue(UspVaV1Field.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); - uspVaV1.setFieldValue(UspVaV1Field.SALE_OPT_OUT, 1); - uspVaV1.setFieldValue(UspVaV1Field.TARGETED_ADVERTISING_OPT_OUT, 2); - uspVaV1.setFieldValue(UspVaV1Field.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3)); - uspVaV1.setFieldValue(UspVaV1Field.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); - uspVaV1.setFieldValue(UspVaV1Field.MSPA_COVERED_TRANSACTION, 1); - uspVaV1.setFieldValue(UspVaV1Field.MSPA_OPT_OUT_OPTION_MODE, 2); - uspVaV1.setFieldValue(UspVaV1Field.MSPA_SERVICE_PROVIDER_MODE, 3); - } catch (InvalidFieldException e) { - throw new EncodingException(e); - } - - Assertions.assertEquals("BbYbG9s", uspVaV1.encode()); - } - - @Test - public void testDecode1() throws DecodingException { - UspVaV1 uspVaV1 = new UspVaV1("BbYbG9s"); - - Assertions.assertEquals(1, uspVaV1.getSharingNotice()); - Assertions.assertEquals(2, uspVaV1.getSaleOptOutNotice()); - Assertions.assertEquals(3, uspVaV1.getTargetedAdvertisingOptOutNotice()); - Assertions.assertEquals(1, uspVaV1.getSaleOptOut()); - Assertions.assertEquals(2, uspVaV1.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(0, 1, 2, 3, 0, 1, 2, 3), uspVaV1.getSensitiveDataProcessing()); - Assertions.assertEquals(3, uspVaV1.getKnownChildSensitiveDataConsents()); - Assertions.assertEquals(1, uspVaV1.getMspaCoveredTransaction()); - Assertions.assertEquals(2, uspVaV1.getMspaOptOutOptionMode()); - Assertions.assertEquals(3, uspVaV1.getMspaServiceProviderMode()); - } -} diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index ff4d786..b0aaedf 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -7,7 +7,7 @@ iabgpp-core com.iabgpp - 3.0.11-SNAPSHOT + 3.1.1-SNAPSHOT iabgpp-extras-jackson @@ -24,7 +24,7 @@ com.iabgpp iabgpp-extras - 3.0.11-SNAPSHOT + 3.1.1-SNAPSHOT @@ -46,13 +46,6 @@ maven-surefire-plugin 2.22.2 - - - org.junit.platform - junit-platform-surefire-provider - 1.3.2 - - diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java index bfd0d16..158ced9 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.io.InputStream; - import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver; @@ -30,6 +29,8 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.iab.gpp.extras.jackson.cmp.Cmp; import com.iab.gpp.extras.jackson.cmp.CmpList; +import com.iab.gpp.extras.jackson.gvl.DataCategory; +import com.iab.gpp.extras.jackson.gvl.DataRetention; import com.iab.gpp.extras.jackson.gvl.Feature; import com.iab.gpp.extras.jackson.gvl.Gvl; import com.iab.gpp.extras.jackson.gvl.Overflow; @@ -38,69 +39,73 @@ import com.iab.gpp.extras.jackson.gvl.SpecialPurpose; import com.iab.gpp.extras.jackson.gvl.Stack; import com.iab.gpp.extras.jackson.gvl.Vendor; +import com.iab.gpp.extras.jackson.gvl.VendorUrl; public class Loader { - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = new ObjectMapper(); - public Loader() { - SimpleModule module = new SimpleModule(); + public Loader() { + SimpleModule module = new SimpleModule(); - SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver(); - resolver.addMapping(com.iab.gpp.extras.gvl.Gvl.class, Gvl.class); - resolver.addMapping(com.iab.gpp.extras.gvl.Feature.class, Feature.class); - resolver.addMapping(com.iab.gpp.extras.gvl.Overflow.class, Overflow.class); - resolver.addMapping(com.iab.gpp.extras.gvl.Purpose.class, Purpose.class); - resolver.addMapping(com.iab.gpp.extras.gvl.SpecialFeature.class, SpecialFeature.class); - resolver.addMapping(com.iab.gpp.extras.gvl.SpecialPurpose.class, SpecialPurpose.class); - resolver.addMapping(com.iab.gpp.extras.gvl.Stack.class, Stack.class); - resolver.addMapping(com.iab.gpp.extras.gvl.Vendor.class, Vendor.class); + SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver(); + resolver.addMapping(com.iab.gpp.extras.gvl.DataCategory.class, DataCategory.class); + resolver.addMapping(com.iab.gpp.extras.gvl.DataRetention.class, DataRetention.class); + resolver.addMapping(com.iab.gpp.extras.gvl.Gvl.class, Gvl.class); + resolver.addMapping(com.iab.gpp.extras.gvl.Feature.class, Feature.class); + resolver.addMapping(com.iab.gpp.extras.gvl.Overflow.class, Overflow.class); + resolver.addMapping(com.iab.gpp.extras.gvl.Purpose.class, Purpose.class); + resolver.addMapping(com.iab.gpp.extras.gvl.SpecialFeature.class, SpecialFeature.class); + resolver.addMapping(com.iab.gpp.extras.gvl.SpecialPurpose.class, SpecialPurpose.class); + resolver.addMapping(com.iab.gpp.extras.gvl.Stack.class, Stack.class); + resolver.addMapping(com.iab.gpp.extras.gvl.Vendor.class, Vendor.class); + resolver.addMapping(com.iab.gpp.extras.gvl.VendorUrl.class, VendorUrl.class); - resolver.addMapping(com.iab.gpp.extras.cmp.Cmp.class, Cmp.class); - resolver.addMapping(com.iab.gpp.extras.cmp.CmpList.class, CmpList.class); + resolver.addMapping(com.iab.gpp.extras.cmp.Cmp.class, Cmp.class); + resolver.addMapping(com.iab.gpp.extras.cmp.CmpList.class, CmpList.class); - module.setAbstractTypes(resolver); - objectMapper.registerModule(module); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - } + module.setAbstractTypes(resolver); + objectMapper.registerModule(module); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } - /** - * Gets the global vendor list json from the specified InputStream - * - * @param content {@link InputStream} of GVL json content - * @return {@link com.iab.gpp.extras.gvl.Gvl} object - */ - public com.iab.gpp.extras.gvl.Gvl globalVendorList(InputStream content) throws IOException { - return objectMapper.readValue(content, com.iab.gpp.extras.gvl.Gvl.class); - } + /** + * Gets the global vendor list json from the specified InputStream + * + * @param content {@link InputStream} of GVL json content + * @return {@link com.iab.gpp.extras.gvl.Gvl} object + */ + public com.iab.gpp.extras.gvl.Gvl globalVendorList(InputStream content) throws IOException { + return objectMapper.readValue(content, com.iab.gpp.extras.gvl.Gvl.class); + } - /** - * Gets the global vendor list json using a json string - * - * @param json the gvl json as a string - * @return {@link com.iab.gpp.extras.gvl.Gvl} object - */ - public com.iab.gpp.extras.gvl.Gvl globalVendorList(String json) throws IOException { - return objectMapper.readValue(json, com.iab.gpp.extras.gvl.Gvl.class); - } + /** + * Gets the global vendor list json using a json string + * + * @param json the gvl json as a string + * @return {@link com.iab.gpp.extras.gvl.Gvl} object + */ + public com.iab.gpp.extras.gvl.Gvl globalVendorList(String json) throws IOException { + return objectMapper.readValue(json, com.iab.gpp.extras.gvl.Gvl.class); + } - /** - * Gets the CMP list from the specified InputStream - * - * @param content {@link InputStream} of CMP List json content - * @return {@link com.iab.gpp.extras.cmp.CmpList} object - */ - public com.iab.gpp.extras.cmp.CmpList cmpList(InputStream content) throws IOException { - return objectMapper.readValue(content, com.iab.gpp.extras.cmp.CmpList.class); - } + /** + * Gets the CMP list from the specified InputStream + * + * @param content {@link InputStream} of CMP List json content + * @return {@link com.iab.gpp.extras.cmp.CmpList} object + */ + public com.iab.gpp.extras.cmp.CmpList cmpList(InputStream content) throws IOException { + return objectMapper.readValue(content, com.iab.gpp.extras.cmp.CmpList.class); + } - /** - * Gets the CMP list from the specified InputStream - * - * @param json the CMP List json as a string - * @return {@link com.iab.gpp.extras.cmp.CmpList} object - */ - public com.iab.gpp.extras.cmp.CmpList cmpList(String json) throws IOException { - return objectMapper.readValue(json, com.iab.gpp.extras.cmp.CmpList.class); - } + /** + * Gets the CMP list from the specified InputStream + * + * @param json the CMP List json as a string + * @return {@link com.iab.gpp.extras.cmp.CmpList} object + */ + public com.iab.gpp.extras.cmp.CmpList cmpList(String json) throws IOException { + return objectMapper.readValue(json, com.iab.gpp.extras.cmp.CmpList.class); + } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java index 3603b92..eefc3bd 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java @@ -27,64 +27,63 @@ public class Cmp implements com.iab.gpp.extras.cmp.Cmp { - private int id; - private String name; + private int id; + private String name; - @JsonProperty("isCommercial") - private boolean isCommercial; + @JsonProperty("isCommercial") + private boolean isCommercial; - private Instant deletedDate; + private Instant deletedDate; - /** - * A CMP id: a numeric ID which is incrementally assigned and never re-used – inactive CMPs are marked as deleted - * - * @return CMP id - */ - @Override - public int getId() { - return this.id; - } + /** + * A CMP id: a numeric ID which is incrementally assigned and never re-used – inactive CMPs are + * marked as deleted + * + * @return CMP id + */ + @Override + public int getId() { + return this.id; + } - /** - * Name of the CMP - * - * @return CMP name - */ - @Override - public String getName() { - return this.name; - } + /** + * Name of the CMP + * + * @return CMP name + */ + @Override + public String getName() { + return this.name; + } - /** - * Whether or not the CMP is a commercial service - * - * @return true, if the CMP is available as a commercial service - */ - @Override - public boolean isCommercial() { - return this.isCommercial; - } + /** + * Whether or not the CMP is a commercial service + * + * @return true, if the CMP is available as a commercial service + */ + @Override + public boolean isCommercial() { + return this.isCommercial; + } - /** - * If available, the date/time after which CMP is considered inactive - * - * @return {@link Optional} time after which CMP is inactive - */ - @Override - public Optional getDeletedDate() { - return Optional.ofNullable(this.deletedDate); - } + /** + * If available, the date/time after which CMP is considered inactive + * + * @return {@link Optional} time after which CMP is inactive + */ + @Override + public Optional getDeletedDate() { + return Optional.ofNullable(this.deletedDate); + } - /** - * Check whether the CMP is deleted - * - * @return true, if the CMP is considered deleted - */ - @Override - public boolean isDeleted() { - return Optional.ofNullable(this.deletedDate) - .map(deleteDate -> !deleteDate.isAfter(Instant.now())) - .orElse(false); - } + /** + * Check whether the CMP is deleted + * + * @return true, if the CMP is considered deleted + */ + @Override + public boolean isDeleted() { + return Optional.ofNullable(this.deletedDate).map(deleteDate -> !deleteDate.isAfter(Instant.now())).orElse(false); + } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/CmpList.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/CmpList.java index 02a7310..465118e 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/CmpList.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/CmpList.java @@ -27,37 +27,37 @@ public class CmpList implements com.iab.gpp.extras.cmp.CmpList { - private Instant lastUpdated; - private Map cmps; + private Instant lastUpdated; + private Map cmps; - /** - * Last Updated Date - * - * @return {@link Instant} time when the record was last updated - */ - @Override - public Instant getLastUpdated() { - return lastUpdated; - } + /** + * Last Updated Date + * + * @return {@link Instant} time when the record was last updated + */ + @Override + public Instant getLastUpdated() { + return lastUpdated; + } - /** - * List of CMPs - * - * @return {@link List} of {@link com.iab.gpp.extras.cmp.Cmp} objects - */ - @Override - public List getCmps() { - return new ArrayList<>(cmps.values()); - } + /** + * List of CMPs + * + * @return {@link List} of {@link com.iab.gpp.extras.cmp.Cmp} objects + */ + @Override + public List getCmps() { + return new ArrayList<>(cmps.values()); + } - /** - * Get the CMP object for a give CMP id - * - * @param cmpId CMP id - * @return {@link com.iab.gpp.extras.cmp.Cmp} object - */ - @Override - public com.iab.gpp.extras.cmp.Cmp getCmp(int cmpId) { - return cmps.get(cmpId); - } + /** + * Get the CMP object for a give CMP id + * + * @param cmpId CMP id + * @return {@link com.iab.gpp.extras.cmp.Cmp} object + */ + @Override + public com.iab.gpp.extras.cmp.Cmp getCmp(int cmpId) { + return cmps.get(cmpId); + } } diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/TestUtil.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java similarity index 51% rename from iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/TestUtil.java rename to iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java index 34ec9ac..375c5ae 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/TestUtil.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java @@ -1,17 +1,17 @@ -package com.iab.gpp.extras.jackson; +package com.iab.gpp.extras.jackson.gvl; /*- * #%L - * IAB TCF Java GVL and CMP List Jackson + * IAB TCF Java GVL Jackson * %% * Copyright (C) 2020 IAB Technology Laboratory, Inc * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -20,20 +20,44 @@ * #L% */ -import com.iab.gpp.extras.jackson.gvl.GvlTest; +/* + * DataCategory + */ +public class DataCategory implements com.iab.gpp.extras.gvl.DataCategory { + + private int id; + private String name; + private String description; + + /** + * A id + * + * @return id + */ + @Override + public Integer getId() { + return id; + } -import java.io.IOException; -import java.io.InputStream; + /** + * Name + * + * @return name + */ + @Override + public String getName() { + return name; + } -public class TestUtil { + /** + * Description + * + * @return description + */ + @Override + public String getDescription() { + return description; + } - public static InputStream getCmpList() throws IOException { - ClassLoader loader = GvlTest.class.getClassLoader(); - return loader.getResourceAsStream("cmpList.json"); - } - public static InputStream getGlobalVendorList() throws IOException { - ClassLoader loader = GvlTest.class.getClassLoader(); - return loader.getResourceAsStream("gvl.json"); - } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataRetention.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataRetention.java new file mode 100644 index 0000000..9bb73c8 --- /dev/null +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataRetention.java @@ -0,0 +1,64 @@ +package com.iab.gpp.extras.jackson.gvl; + +import java.util.Map; +import java.util.Optional; + +/*- + * #%L + * IAB TCF Java GVL Jackson + * %% + * Copyright (C) 2020 IAB Technology Laboratory, Inc + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ + +/* + * DataRetention + */ +public class DataRetention implements com.iab.gpp.extras.gvl.DataRetention { + + private Integer stdRetention; + private Map purposes; + private Map specialPurposes; + + /** + * stdRetention + * + * @return stdRetention + */ + @Override + public Optional getStdRetention() { + return Optional.ofNullable(stdRetention); + } + + /** + * purposes + * + * @return purposes + */ + @Override + public Map getPurposes() { + return purposes; + } + + /** + * specialPurposes + * + * @return specialPurposes + */ + @Override + public Map getSpecialPurposes() { + return specialPurposes; + } +} diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Feature.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Feature.java index e497cee..0cb7537 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Feature.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Feature.java @@ -1,5 +1,8 @@ package com.iab.gpp.extras.jackson.gvl; +import java.util.List; +import java.util.Optional; + /*- * #%L * IAB TCF Java GVL Jackson @@ -25,48 +28,59 @@ */ public class Feature implements com.iab.gpp.extras.gvl.Feature { - private int id; - private String name; - private String description; - private String descriptionLegal; + private int id; + private String name; + private String description; + private String descriptionLegal; + private List illustrations; + + /** + * A feature id + * + * @return feature id + */ + @Override + public int getId() { + return id; + } - /** - * A feature id - * - * @return feature id - */ - @Override - public int getId() { - return id; - } + /** + * Name of the feature + * + * @return feature name string + */ + @Override + public String getName() { + return name; + } - /** - * Name of the feature - * - * @return feature name string - */ - @Override - public String getName() { - return name; - } + /** + * Description of the feature + * + * @return feature description string + */ + @Override + public String getDescription() { + return description; + } - /** - * Description of the feature - * - * @return feature description string - */ - @Override - public String getDescription() { - return description; - } + /** + * Legal description of the feature + * + * @return legal description string + */ + @Override + public Optional getDescriptionLegal() { + return Optional.ofNullable(descriptionLegal); + } - /** - * Legal description of the feature - * - * @return legal description string - */ - @Override - public String getDescriptionLegal() { - return descriptionLegal; - } + /** + * illustrations + * + * @return illustrations + */ + @Override + public Optional> getIllustrations() { + return Optional.ofNullable(illustrations); + } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java index d58e10d..2cbcdcc 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java @@ -25,141 +25,157 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; - +import java.util.Optional; +import com.iab.gpp.extras.gvl.DataCategory; +import com.iab.gpp.extras.gvl.Feature; import com.iab.gpp.extras.gvl.Purpose; import com.iab.gpp.extras.gvl.SpecialFeature; import com.iab.gpp.extras.gvl.SpecialPurpose; import com.iab.gpp.extras.gvl.Stack; import com.iab.gpp.extras.gvl.Vendor; -import com.iab.gpp.extras.gvl.Feature; public class Gvl implements com.iab.gpp.extras.gvl.Gvl { - private int gvlSpecificationVersion; - private int vendorListVersion; - private int tcfPolicyVersion; - private Instant lastUpdated; - private Map purposes; - private Map specialPurposes; - private Map features; - private Map specialFeatures; - private Map stacks; - private Map vendors; - - /** - * A Global Vendor List Specification Version - * - * @return global vendor list specification version - */ - @Override - public int getGvlSpecificationVersion() { - return gvlSpecificationVersion; - } - - /** - * A Global Vendor List version incremented with each published file change - * - * @return global vendor list version - */ - @Override - public int getVendorListVersion() { - return vendorListVersion; - } - - /** - * A TCF Policy Version. The TCF MO will increment this value whenever a GVL change (such as - * adding a new Purpose or Feature or a change in Purpose wording) legally invalidates existing - * TC Strings and requires CMPs to re-establish transparency and consent from users. TCF Policy - * changes should be relatively infrequent and only occur when necessary to support changes in - * global mandate. If the policy version number in the latest GVL is different from the value in - * your TC String, then you need to re-establish transparency and consent for that user. A - * version 1 format TC String is considered to have a version value of 1. - * - * @return tcf policy version - */ - @Override - public int getTcfPolicyVersion() { - return tcfPolicyVersion; - } - - /** - * Last Updated Date - * - * @return timestamp when the record was last updated - */ - @Override - public Instant getLastUpdated() { - return lastUpdated; - } - - /** - * A list of standard purposes - * - * @return A {@link List} of standard {@link Purpose} objects - */ - @Override - public List getPurposes() { - return new ArrayList<>(purposes.values()); - } - - /** - * A list of special purposes - * - * @return A {@link List} of {@link SpecialPurpose} objects - */ - @Override - public List getSpecialPurposes() { - return new ArrayList<>(specialPurposes.values()); - } - - /** - * A list of standard features - * - * @return A {@link List} of standard {@link Feature} objects - */ - @Override - public List getFeatures() { - return new ArrayList<>(features.values()); - } - - /** - * A list of special features - * - * @return A {@link List} of special {@link SpecialFeature} objects - */ - @Override - public List getSpecialFeatures() { - return new ArrayList<>(specialFeatures.values()); - } - - /** - * A list of stacks - * - * @return A {@link List} of {@link Stack} objects - */ - @Override - public List getStacks() { - return new ArrayList<>(stacks.values()); - } - - /** - * A list of vendors - * - * @return A {@link List} of {@link Vendor} objects - */ - @Override - public List getVendors() { - return new ArrayList<>(vendors.values()); - } - - /** - * Return the vendor object for a given id - * - * @param vendorId vendor id - * @return A {@link Vendor} object - */ - @Override - public Vendor getVendor(int vendorId) { - return vendors.get(vendorId); + private int gvlSpecificationVersion; + private int vendorListVersion; + private int tcfPolicyVersion; + private Instant lastUpdated; + private Map purposes; + private Map specialPurposes; + private Map features; + private Map specialFeatures; + private Map stacks; + private Map vendors; + private Map dataCategories; + + /** + * A Global Vendor List Specification Version + * + * @return global vendor list specification version + */ + @Override + public int getGvlSpecificationVersion() { + return gvlSpecificationVersion; + } + + /** + * A Global Vendor List version incremented with each published file change + * + * @return global vendor list version + */ + @Override + public int getVendorListVersion() { + return vendorListVersion; + } + + /** + * A TCF Policy Version. The TCF MO will increment this value whenever a GVL change (such as adding + * a new Purpose or Feature or a change in Purpose wording) legally invalidates existing TC Strings + * and requires CMPs to re-establish transparency and consent from users. TCF Policy changes should + * be relatively infrequent and only occur when necessary to support changes in global mandate. If + * the policy version number in the latest GVL is different from the value in your TC String, then + * you need to re-establish transparency and consent for that user. A version 1 format TC String is + * considered to have a version value of 1. + * + * @return tcf policy version + */ + @Override + public int getTcfPolicyVersion() { + return tcfPolicyVersion; + } + + /** + * Last Updated Date + * + * @return timestamp when the record was last updated + */ + @Override + public Instant getLastUpdated() { + return lastUpdated; + } + + /** + * A list of standard purposes + * + * @return A {@link List} of standard {@link Purpose} objects + */ + @Override + public List getPurposes() { + return new ArrayList<>(purposes.values()); + } + + /** + * A list of special purposes + * + * @return A {@link List} of {@link SpecialPurpose} objects + */ + @Override + public List getSpecialPurposes() { + return new ArrayList<>(specialPurposes.values()); + } + + /** + * A list of standard features + * + * @return A {@link List} of standard {@link Feature} objects + */ + @Override + public List getFeatures() { + return new ArrayList<>(features.values()); + } + + /** + * A list of special features + * + * @return A {@link List} of special {@link SpecialFeature} objects + */ + @Override + public List getSpecialFeatures() { + return new ArrayList<>(specialFeatures.values()); + } + + /** + * A list of stacks + * + * @return A {@link List} of {@link Stack} objects + */ + @Override + public List getStacks() { + return new ArrayList<>(stacks.values()); + } + + /** + * A list of vendors + * + * @return A {@link List} of {@link Vendor} objects + */ + @Override + public List getVendors() { + return new ArrayList<>(vendors.values()); + } + + /** + * Return the vendor object for a given id + * + * @param vendorId vendor id + * @return A {@link Vendor} object + */ + @Override + public Vendor getVendor(int vendorId) { + return vendors.get(vendorId); + } + + /** + * A list of data categories + * + * @return A {@link List} of {@link DataCategory} objects + */ + @Override + public Optional> getDataCategories() { + if (dataCategories == null) { + return Optional.empty(); + } else { + return Optional.ofNullable(new ArrayList<>(dataCategories.values())); } + } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java index 075baf0..d837da2 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java @@ -23,15 +23,15 @@ public class Overflow implements com.iab.gpp.extras.gvl.Overflow { - private int httpGetLimit; + private int httpGetLimit; - /** - * The vendor's http GET request length limit; 32 or 128 are the only supported options - * - * @return vendor's http GET request length limit - */ - @Override - public int getHttpGetLimit() { - return httpGetLimit; - } + /** + * The vendor's http GET request length limit; 32 or 128 are the only supported options + * + * @return vendor's http GET request length limit + */ + @Override + public int getHttpGetLimit() { + return httpGetLimit; + } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java index b42036d..12919c5 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java @@ -1,5 +1,8 @@ package com.iab.gpp.extras.jackson.gvl; +import java.util.List; +import java.util.Optional; + /*- * #%L * IAB TCF Java GVL Jackson @@ -25,72 +28,83 @@ */ public class Purpose implements com.iab.gpp.extras.gvl.Purpose { - private int id; - private String name; - private String description; - private String descriptionLegal; - private boolean consentable = true; - private boolean rightToObject = true; + private int id; + private String name; + private String description; + private String descriptionLegal; + private List illustrations; + private boolean consentable = true; + private boolean rightToObject = true; + + /** + * A purpose id + * + * @return purpose id + */ + @Override + public int getId() { + return id; + } - /** - * A purpose id - * - * @return purpose id - */ - @Override - public int getId() { - return id; - } + /** + * Name of the purpose + * + * @return purpose name string + */ + @Override + public String getName() { + return name; + } - /** - * Name of the purpose - * - * @return purpose name string - */ - @Override - public String getName() { - return name; - } + /** + * Description of the purpose + * + * @return purpose description string + */ + @Override + public String getDescription() { + return description; + } - /** - * Description of the purpose - * - * @return purpose description string - */ - @Override - public String getDescription() { - return description; - } + /** + * Legal description of the purpose + * + * @return legal description string + */ + @Override + public Optional getDescriptionLegal() { + return Optional.ofNullable(descriptionLegal); + } - /** - * Legal description of the purpose - * - * @return legal description string - */ - @Override - public String getDescriptionLegal() { - return descriptionLegal; - } + /** + * illustrations + * + * @return illustrations + */ + @Override + public Optional> getIllustrations() { + return Optional.ofNullable(illustrations); + } - /** - * An optional flag where false means CMPs should never afford users the means to provide an - * opt-in consent choice - * - * @return consentable boolean - */ - @Override - public boolean getConsentable() { - return consentable; - } + /** + * An optional flag where false means CMPs should never afford users the means to provide an opt-in + * consent choice + * + * @return consentable boolean + */ + @Override + public boolean getConsentable() { + return consentable; + } - /** - * An optional flag where false means CMPs should never afford users the means to exercise a - * right to object - * - * @return right to object boolean - */ - @Override - public boolean getRightToObject() { - return rightToObject; - } + /** + * An optional flag where false means CMPs should never afford users the means to exercise a right + * to object + * + * @return right to object boolean + */ + @Override + public boolean getRightToObject() { + return rightToObject; + } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Stack.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Stack.java index 6f1952f..b2fb80d 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Stack.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Stack.java @@ -28,59 +28,59 @@ */ public class Stack implements com.iab.gpp.extras.gvl.Stack { - private int id; - private List specialFeatures; - private List purposes; - private String name; - private String description; + private int id; + private List specialFeatures; + private List purposes; + private String name; + private String description; - /** - * Stack id - * - * @return stack id - */ - @Override - public int getId() { - return id; - } + /** + * Stack id + * + * @return stack id + */ + @Override + public int getId() { + return id; + } - /** - * A list of special features - * - * @return A {@link List} of special feature ids - */ - @Override - public List getSpecialFeatures() { - return specialFeatures; - } + /** + * A list of special features + * + * @return A {@link List} of special feature ids + */ + @Override + public List getSpecialFeatures() { + return specialFeatures; + } - /** - * A list of purposes - * - * @return A {@link List} of purpose ids - */ - @Override - public List getPurposes() { - return purposes; - } + /** + * A list of purposes + * + * @return A {@link List} of purpose ids + */ + @Override + public List getPurposes() { + return purposes; + } - /** - * Name of the stack - * - * @return stack name string - */ - @Override - public String getName() { - return name; - } + /** + * Name of the stack + * + * @return stack name string + */ + @Override + public String getName() { + return name; + } - /** - * Description of the stack - * - * @return stack description string - */ - @Override - public String getDescription() { - return description; - } + /** + * Description of the stack + * + * @return stack description string + */ + @Override + public String getDescription() { + return description; + } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java index e053787..60946b5 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java @@ -23,209 +23,236 @@ import java.time.Instant; import java.util.List; import java.util.Optional; - +import com.iab.gpp.extras.gvl.DataRetention; import com.iab.gpp.extras.gvl.Overflow; +import com.iab.gpp.extras.gvl.VendorUrl; public class Vendor implements com.iab.gpp.extras.gvl.Vendor { - private int id; - private String name; - private List purposes; - private List legIntPurposes; - private List flexiblePurposes; - private List specialPurposes; - private List features; - private List specialFeatures; - private String policyUrl; - private Instant deletedDate; - private com.iab.gpp.extras.gvl.Overflow overflow; - private Long cookieMaxAgeSeconds; - private boolean usesCookies; - private boolean cookieRefresh; - private boolean usesNonCookieAccess; - private String deviceStorageDisclosureUrl; - - /** - * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors - * are just marked as deleted - * - * @return vendor id - */ - @Override - public int getId() { - return id; - } - - /** - * Name of the vendor - * - * @return vendor name - */ - @Override - public String getName() { - return name; - } - - /** - * List of Purposes for which the vendor is requesting consent - * - * @return A {@link List} of purpose ids that require consent - */ - @Override - public List getPurposes() { - return purposes; - } - - /** - * List of Purposes for which the vendor requires to be transparently disclosed as their - * legitimate interest - * - * @return A {@link List} of purpose ids disclosed as legitimate interests - */ - @Override - public List getLegIntPurposes() { - return legIntPurposes; - } - - /** - * List of purposes where the vendor is flexible regarding the legal basis; they will perform - * the processing based on consent or a legitimate interest. The 'default' is determined by - * which of the other two mutually-exclusive purpose fields is used to declare the purpose for - * the vendor - * - * @return A {@link List} of flexible purpose ids - */ - @Override - public List getFlexiblePurposes() { - return flexiblePurposes; - } - - /** - * List of Special Purposes that the vendor transparently discloses as their legitimate interest - * that a user has no right to object - * - * @return A {@link List} of special purpose ids - */ - @Override - public List getSpecialPurposes() { - return specialPurposes; - } - - /** - * List of Features the vendor uses across Purposes - * - * @return A {@link List} of features - */ - @Override - public List getFeatures() { - return features; - } - - /** - * List of Special Features the vendor uses across Purposes - * - * @return A {@link List} of special features - */ - @Override - public List getSpecialFeatures() { - return specialFeatures; - } - - /** - * GDPR/privacy policy page URL - * - * @return policy url string - */ - @Override - public String getPolicyUrl() { - return policyUrl; - } - - /** - * A date string representing when the vendor is deleted from the GVL - * - * @return date string - */ - @Override - public Optional getDeletedDate() { - return Optional.ofNullable(deletedDate); - } - - /** - * object specifying the vendor's http GET request length limit. It is optional. If a vendor - * entry does not include this attribute then the vendor has no overflow options and none can be - * inferred. - * - * @return A {@link com.iab.gpp.extras.gvl.Overflow} object - */ - @Override - public Optional getOverflow() { - return Optional.ofNullable(overflow); - } - - /** - * A helper method to check if the vendor is deleted based on the current time (UTC) - * - * @return true, if the vendor is deleted - */ - @Override - public boolean isDeleted() { - return Optional.ofNullable(this.deletedDate) - .map(deletedDate -> !deletedDate.isAfter(Instant.now())) - .orElse(false); - } - - /** - * The number of seconds representing the longest potential duration for cookie storage on a device. - * - * @return The number, in seconds, of the longest potential duration for storage on a device, as set when using the - * cookie method of storage. - */ - @Override - public Optional getCookieMaxAgeSeconds() { - return Optional.ofNullable(cookieMaxAgeSeconds); - } - - /** - * This boolean field indicates whether the vendor uses cookie storage (session or otherwise). - * - * @return True indicates cookie storage is used - */ - @Override - public boolean getUsesCookies() { - return usesCookies; - } - - /** - * This boolean field indicates whether any cookies in scope for cookieMaxAgeSeconds are refreshed after being - * initially set. - * - * @return True indicates the vendor refreshes this cookie - */ - @Override - public boolean getHasCookieRefresh() { - return cookieRefresh; - } - - /** - * This true or false field indicates whether the vendor uses other, non-cookie methods of storage or accessing - * information already stored on a user’s device. Examples of non-cookie storage and access may be localStorage, - * indexDB, mobile ad IDs, etc. - * - * @return True indicates non-cookie access is used - */ - @Override - public boolean getUsesNonCookieAccess() { - return usesNonCookieAccess; - } - - /** - * Link to a recommended, vendor-hosted, secure URL for disclosing additional storage information - * - * @return Location of vendor-hosted deviceStorage.json file - */ - @Override - public Optional getDeviceStorageDisclosureUrl() { - return Optional.ofNullable(deviceStorageDisclosureUrl); - } + private int id; + private String name; + private List purposes; + private List legIntPurposes; + private List flexiblePurposes; + private List specialPurposes; + private List features; + private List specialFeatures; + private String policyUrl; + private Instant deletedDate; + private com.iab.gpp.extras.gvl.Overflow overflow; + private Long cookieMaxAgeSeconds; + private Boolean usesCookies; + private Boolean cookieRefresh; + private Boolean usesNonCookieAccess; + private String deviceStorageDisclosureUrl; + private DataRetention dataRetention; + private List urls; + private List dataDeclaration; + + /** + * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors are + * just marked as deleted + * + * @return vendor id + */ + @Override + public int getId() { + return id; + } + + /** + * Name of the vendor + * + * @return vendor name + */ + @Override + public String getName() { + return name; + } + + /** + * List of Purposes for which the vendor is requesting consent + * + * @return A {@link List} of purpose ids that require consent + */ + @Override + public List getPurposes() { + return purposes; + } + + /** + * List of Purposes for which the vendor requires to be transparently disclosed as their legitimate + * interest + * + * @return A {@link List} of purpose ids disclosed as legitimate interests + */ + @Override + public List getLegIntPurposes() { + return legIntPurposes; + } + + /** + * List of purposes where the vendor is flexible regarding the legal basis; they will perform the + * processing based on consent or a legitimate interest. The 'default' is determined by which of the + * other two mutually-exclusive purpose fields is used to declare the purpose for the vendor + * + * @return A {@link List} of flexible purpose ids + */ + @Override + public List getFlexiblePurposes() { + return flexiblePurposes; + } + + /** + * List of Special Purposes that the vendor transparently discloses as their legitimate interest + * that a user has no right to object + * + * @return A {@link List} of special purpose ids + */ + @Override + public List getSpecialPurposes() { + return specialPurposes; + } + + /** + * List of Features the vendor uses across Purposes + * + * @return A {@link List} of features + */ + @Override + public List getFeatures() { + return features; + } + + /** + * List of Special Features the vendor uses across Purposes + * + * @return A {@link List} of special features + */ + @Override + public List getSpecialFeatures() { + return specialFeatures; + } + + /** + * GDPR/privacy policy page URL + * + * @return policy url string + */ + @Override + public Optional getPolicyUrl() { + return Optional.ofNullable(policyUrl); + } + + /** + * A date string representing when the vendor is deleted from the GVL + * + * @return date string + */ + @Override + public Optional getDeletedDate() { + return Optional.ofNullable(deletedDate); + } + + /** + * object specifying the vendor's http GET request length limit. It is optional. If a vendor entry + * does not include this attribute then the vendor has no overflow options and none can be inferred. + * + * @return A {@link com.iab.gpp.extras.gvl.Overflow} object + */ + @Override + public Optional getOverflow() { + return Optional.ofNullable(overflow); + } + + /** + * A helper method to check if the vendor is deleted based on the current time (UTC) + * + * @return true, if the vendor is deleted + */ + @Override + public boolean isDeleted() { + return Optional.ofNullable(this.deletedDate).map(deletedDate -> !deletedDate.isAfter(Instant.now())).orElse(false); + } + + /** + * The number of seconds representing the longest potential duration for cookie storage on a device. + * + * @return The number, in seconds, of the longest potential duration for storage on a device, as set + * when using the cookie method of storage. + */ + @Override + public Optional getCookieMaxAgeSeconds() { + return Optional.ofNullable(cookieMaxAgeSeconds); + } + + /** + * This boolean field indicates whether the vendor uses cookie storage (session or otherwise). + * + * @return True indicates cookie storage is used + */ + @Override + public Optional getUsesCookies() { + return Optional.ofNullable(usesCookies); + } + + /** + * This boolean field indicates whether any cookies in scope for cookieMaxAgeSeconds are refreshed + * after being initially set. + * + * @return True indicates the vendor refreshes this cookie + */ + @Override + public Optional getCookieRefresh() { + return Optional.ofNullable(cookieRefresh); + } + + /** + * This true or false field indicates whether the vendor uses other, non-cookie methods of storage + * or accessing information already stored on a user’s device. Examples of non-cookie storage and + * access may be localStorage, indexDB, mobile ad IDs, etc. + * + * @return True indicates non-cookie access is used + */ + @Override + public Optional getUsesNonCookieAccess() { + return Optional.ofNullable(usesNonCookieAccess); + } + + /** + * Link to a recommended, vendor-hosted, secure URL for disclosing additional storage information + * + * @return Location of vendor-hosted deviceStorage.json file + */ + @Override + public Optional getDeviceStorageDisclosureUrl() { + return Optional.ofNullable(deviceStorageDisclosureUrl); + } + + /** + * dataRetention + * + * @return dataRetention + */ + public Optional getDataRetention() { + return Optional.ofNullable(dataRetention); + } + + /** + * urls + * + * @return urls + */ + public Optional> getUrls() { + return Optional.ofNullable(urls); + } + + /** + * dataDeclarations + * + * @return dataDeclarations + */ + public Optional> getDataDeclaration() { + return Optional.ofNullable(dataDeclaration); + } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java new file mode 100644 index 0000000..cf4d3b8 --- /dev/null +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java @@ -0,0 +1,64 @@ +package com.iab.gpp.extras.jackson.gvl; + +import java.util.Optional; + +/*- + * #%L + * IAB TCF Java GVL Jackson + * %% + * Copyright (C) 2020 IAB Technology Laboratory, Inc + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ + +/* + * DataCategory + */ +public class VendorUrl implements com.iab.gpp.extras.gvl.VendorUrl { + + private String langId; + private String privacy; + private String legIntClaim; + + /** + * langId + * + * @return lang id + */ + @Override + public String getLangId() { + return langId; + } + + /** + * privacy + * + * @return privacy + */ + @Override + public String getPrivacy() { + return privacy; + } + + /** + * legIntClaim + * + * @return legIntClaim + */ + @Override + public Optional getLegIntClaim() { + return Optional.ofNullable(legIntClaim); + } + +} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java index 671a532..673ad24 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import com.iab.gpp.extras.cmp.Cmp; /*- * #%L @@ -28,25 +29,55 @@ import com.iab.gpp.extras.cmp.CmpList; import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; public class CmpListTest { - private static CmpList cmpList; + private static CmpList cmpList; + private static Cmp cmpThree; + private static Cmp cmpTwentyThree; - @BeforeAll - public static void setUpBeforeClass() throws IOException { - Loader loader = new Loader(); - cmpList = loader.cmpList(TestUtil.getCmpList()); - } + @BeforeAll + public static void setUpBeforeClass() throws IOException { + cmpList = new Loader().cmpList(CmpListTest.class.getClassLoader().getResourceAsStream("cmpList.json")); + cmpThree = cmpList.getCmps().stream().filter(o -> o.getId() == 3).findFirst().orElse(null); + cmpTwentyThree = cmpList.getCmps().stream().filter(o -> o.getId() == 23).findFirst().orElse(null); + } - @Test - public void getLastUpdated() { - Assertions.assertEquals(Instant.parse("2020-04-09T17:03:06Z"), cmpList.getLastUpdated()); - } + @Test + public void getLastUpdated() { + Assertions.assertEquals(Instant.parse("2020-04-09T17:03:06Z"), cmpList.getLastUpdated()); + } - @Test - public void getCmps() { - Assertions.assertEquals(12, cmpList.getCmps().size()); - } -} \ No newline at end of file + @Test + public void getCmps() { + Assertions.assertEquals(12, cmpList.getCmps().size()); + } + + @Test + public void getId() { + Assertions.assertEquals(3, cmpThree.getId()); + } + + @Test + public void getName() { + String name = "LiveRamp"; + Assertions.assertEquals(name, cmpThree.getName()); + } + + @Test + public void isCommercial() { + Assertions.assertTrue(cmpThree.isCommercial()); + } + + @Test + public void getDeletedDate() { + Assertions.assertNull(cmpThree.getDeletedDate().orElse(null)); + Assertions.assertNotNull(cmpTwentyThree.getDeletedDate().orElse(null)); + } + + @Test + public void isDeleted() { + Assertions.assertFalse(cmpThree.isDeleted()); + Assertions.assertTrue(cmpTwentyThree.isDeleted()); + } +} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpTest.java deleted file mode 100644 index 93b17cf..0000000 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.iab.gpp.extras.jackson.cmp; - -import java.io.IOException; -import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -/*- - * #%L - * IAB TCF Java CMP List Jackson - * %% - * Copyright (C) 2020 IAB Technology Laboratory, Inc - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * #L% - */ - -import com.iab.gpp.extras.cmp.Cmp; -import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; - -public class CmpTest { - - private static Cmp cmpThree; - private static Cmp cmpTwentyThree; - private static final int CMP_ID_SELECTED_FOR_TEST = 3; - private static final int DELETED_CMP_ID_SELECTED_FOR_TEST = 23; - - @BeforeAll - public static void setupBeforeClass() throws IOException { - Loader loader = new Loader(); - List cmps = loader.cmpList(TestUtil.getCmpList()).getCmps(); - cmpThree = cmps.stream().filter(o -> o.getId() == CMP_ID_SELECTED_FOR_TEST).findFirst().orElse(null); - cmpTwentyThree = - cmps.stream().filter(o -> o.getId() == DELETED_CMP_ID_SELECTED_FOR_TEST).findFirst().orElse(null); - } - - @Test - public void getId() { - Assertions.assertEquals(3, cmpThree.getId()); - } - - @Test - public void getName() { - String name = "LiveRamp"; - Assertions.assertEquals(name, cmpThree.getName()); - } - - @Test - public void isCommercial() { - Assertions.assertTrue(cmpThree.isCommercial()); - } - - @Test - public void getDeletedDate() { - Assertions.assertNull(cmpThree.getDeletedDate().orElse(null)); - Assertions.assertNotNull(cmpTwentyThree.getDeletedDate().orElse(null)); - } - - @Test - public void isDeleted() { - Assertions.assertFalse(cmpThree.isDeleted()); - Assertions.assertTrue(cmpTwentyThree.isDeleted()); - } -} \ No newline at end of file diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/FeatureTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/FeatureTest.java deleted file mode 100644 index 5b74f5f..0000000 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/FeatureTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iab.gpp.extras.jackson.gvl; - -import java.io.IOException; -import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -/*- - * #%L - * IAB TCF Java GVL Jackson - * %% - * Copyright (C) 2020 IAB Technology Laboratory, Inc - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * #L% - */ - -import com.iab.gpp.extras.gvl.Feature; -import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; - -public class FeatureTest { - - private static Feature featureTwo; - private static final int FEATURE_ID_SELECTED_FOR_TEST = 2; - - @BeforeAll - public static void setupBeforeClass() throws IOException { - Loader loader = new Loader(); - List features = loader.globalVendorList(TestUtil.getGlobalVendorList()).getFeatures(); - featureTwo = features.stream().filter(o -> o.getId() == FEATURE_ID_SELECTED_FOR_TEST).findFirst().orElse(null); - } - - @Test - public void testGetId() { - Assertions.assertEquals(2, featureTwo.getId()); - } - - @Test - public void testGetName() { - String expectedName = "Link different devices"; - Assertions.assertEquals(expectedName, featureTwo.getName()); - } - - @Test - public void testGetDescription() { - String expectedDescription = - "Different devices can be determined as belonging to you or your household in support of one or more of purposes."; - Assertions.assertEquals(expectedDescription, featureTwo.getDescription()); - } - - @Test - public void testGetDescriptionLegal() { - String expectedDescriptionLegal = - "Vendors can:\n* Deterministically determine that two or more devices belong to the same user or household\n* Probabilistically determine that two or more devices belong to the same user or household\n* Actively scan device characteristics for identification for probabilistic identification if users have allowed vendors to actively scan device characteristics for identification (Special Feature 2)"; - Assertions.assertEquals(expectedDescriptionLegal, featureTwo.getDescriptionLegal()); - } -} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlTest.java deleted file mode 100644 index 5d590d5..0000000 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.iab.gpp.extras.jackson.gvl; - -/*- - * #%L - * IAB TCF Java GVL Jackson - * %% - * Copyright (C) 2020 IAB Technology Laboratory, Inc - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * #L% - */ - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.gvl.Gvl; -import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; - -public class GvlTest { - private static Gvl gvl; - - @BeforeAll - public static void setUpBeforeClass() throws IOException { - Loader loader = new Loader(); - gvl = loader.globalVendorList(TestUtil.getGlobalVendorList()); - } - - @Test - public void testGetGvlSpecificationVersion() { - Assertions.assertEquals(2, gvl.getGvlSpecificationVersion()); - } - - @Test - public void testGetVendorListVersion() { - Assertions.assertEquals(26, gvl.getVendorListVersion()); - } - - @Test - public void testGetTcfPolicyVersion() { - Assertions.assertEquals(2, gvl.getTcfPolicyVersion()); - } - - @Test - public void testGetLastUpdated() throws ParseException { - SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - parser.setTimeZone(TimeZone.getTimeZone("GMT")); - Date parsed = parser.parse("2020-02-20T16:05:20"); - Assertions.assertEquals(parsed.toInstant(), gvl.getLastUpdated()); - } - - @Test - public void testGetPurposes() { - Assertions.assertEquals(10, gvl.getPurposes().size()); - } - - @Test - public void testGetSpecialPurposes() { - Assertions.assertEquals(2, gvl.getSpecialPurposes().size()); - } - - @Test - public void testGetFeatures() { - Assertions.assertEquals(3, gvl.getFeatures().size()); - } - - @Test - public void testGetSpecialFeatures() { - Assertions.assertEquals(2, gvl.getSpecialFeatures().size()); - } - - @Test - public void testGetStacks() { - Assertions.assertEquals(37, gvl.getStacks().size()); - } - - @Test - public void testGetVendors() { - Assertions.assertEquals(3, gvl.getVendors().size()); - } -} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java new file mode 100644 index 0000000..de0531e --- /dev/null +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java @@ -0,0 +1,121 @@ +package com.iab.gpp.extras.jackson.gvl; + +/*- + * #%L + * IAB TCF Java GVL Jackson + * %% + * Copyright (C) 2020 IAB Technology Laboratory, Inc + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import com.iab.gpp.extras.gvl.Gvl; +import com.iab.gpp.extras.jackson.Loader; + +public class GvlV2Test { + + @Test + public void test() throws IOException { + Gvl gvl = new Loader() + .globalVendorList(GvlV2Test.class.getClassLoader().getResourceAsStream("vendorlist/v2/vendor-list.json")); + Assertions.assertFalse(gvl.getDataCategories().isPresent()); + Assertions.assertEquals(3, gvl.getFeatures().size()); + Assertions.assertEquals(2, gvl.getGvlSpecificationVersion()); + Assertions.assertNotNull(gvl.getLastUpdated()); + Assertions.assertEquals(10, gvl.getPurposes().size()); + Assertions.assertEquals(2, gvl.getSpecialFeatures().size()); + Assertions.assertEquals(2, gvl.getSpecialPurposes().size()); + Assertions.assertEquals(42, gvl.getStacks().size()); + Assertions.assertEquals(2, gvl.getTcfPolicyVersion()); + Assertions.assertEquals(51, gvl.getVendorListVersion()); + Assertions.assertEquals(496, gvl.getVendors().size()); + + Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); + Assertions.assertEquals("Store and/or access information on a device", gvl.getPurposes().get(0).getName()); + Assertions.assertEquals( + "Cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you.", + gvl.getPurposes().get(0).getDescription()); + Assertions.assertTrue(gvl.getPurposes().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "Vendors can:\n* Store and access information on the device such as cookies and device identifiers presented to a user.", + gvl.getPurposes().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getPurposes().get(0).getIllustrations().isPresent()); + + Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); + Assertions.assertEquals("Ensure security, prevent fraud, and debug", gvl.getSpecialPurposes().get(0).getName()); + Assertions.assertEquals( + "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.", + gvl.getSpecialPurposes().get(0).getDescription()); + Assertions.assertTrue(gvl.getSpecialPurposes().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "To ensure security, prevent fraud and debug vendors can:\n* Ensure data are securely transmitted\n* Detect and prevent malicious, fraudulent, invalid, or illegal activity.\n* Ensure correct and efficient operation of systems and processes, including to monitor and enhance the performance of systems and processes engaged in permitted purposes\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose.", + gvl.getSpecialPurposes().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); + + Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); + Assertions.assertEquals("Match and combine offline data sources", gvl.getFeatures().get(0).getName()); + Assertions.assertEquals( + "Data from offline data sources can be combined with your online activity in support of one or more purposes", + gvl.getFeatures().get(0).getDescription()); + Assertions.assertTrue(gvl.getFeatures().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "Vendors can:\n* Combine data obtained offline with data collected online in support of one or more Purposes or Special Purposes.", + gvl.getFeatures().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getFeatures().get(0).getIllustrations().isPresent()); + + Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); + Assertions.assertEquals("Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); + Assertions.assertEquals( + "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.", + gvl.getSpecialFeatures().get(0).getDescription()); + Assertions.assertTrue(gvl.getSpecialFeatures().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "Vendors can:\n* Collect and process precise geolocation data in support of one or more purposes.\nN.B. Precise geolocation means that there are no restrictions on the precision of a user’s location; this can be accurate to within several meters.", + gvl.getSpecialFeatures().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); + + Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); + Assertions.assertEquals("Precise geolocation data, and identification through device scanning", gvl.getStacks().get(0).getName()); + Assertions.assertEquals("Precise geolocation and information about device characteristics can be used.", gvl.getStacks().get(0).getDescription()); + Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); + + Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); + Assertions.assertEquals("Basic ads, and ad measurement", gvl.getStacks().get(1).getName()); + Assertions.assertEquals("Basic ads can be served. Ad performance can be measured.", gvl.getStacks().get(1).getDescription()); + Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); + Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); + + Assertions.assertEquals(8, gvl.getVendors().get(0).getId()); + Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); + Assertions.assertEquals("Emerse Sverige AB", gvl.getVendors().get(0).getName()); + Assertions.assertEquals(Arrays.asList(1, 3, 4), gvl.getVendors().get(0).getPurposes()); + Assertions.assertEquals(Arrays.asList(2, 7, 8, 9), gvl.getVendors().get(0).getLegIntPurposes()); + Assertions.assertEquals(Arrays.asList(2, 9), gvl.getVendors().get(0).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getFeatures()); + Assertions.assertTrue(gvl.getVendors().get(0).getSpecialFeatures().isEmpty()); + Assertions.assertTrue(gvl.getVendors().get(0).getPolicyUrl().isPresent()); + Assertions.assertEquals("https://www.emerse.com/privacy-policy/", gvl.getVendors().get(0).getPolicyUrl().get()); + + Assertions.assertEquals(9, gvl.getVendors().get(1).getId()); + Assertions.assertTrue(gvl.getVendors().get(1).getDeletedDate().isPresent()); + } + +} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java new file mode 100644 index 0000000..ef880d2 --- /dev/null +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java @@ -0,0 +1,169 @@ +package com.iab.gpp.extras.jackson.gvl; + +/*- + * #%L + * IAB TCF Java GVL Jackson + * %% + * Copyright (C) 2020 IAB Technology Laboratory, Inc + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ + +import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import com.iab.gpp.extras.gvl.Gvl; +import com.iab.gpp.extras.jackson.Loader; + +public class GvlV3Test { + + @Test + public void test() throws IOException { + Gvl gvl = new Loader() + .globalVendorList(GvlV3Test.class.getClassLoader().getResourceAsStream("vendorlist/v3.0/vendor-list.json")); + Assertions.assertTrue(gvl.getDataCategories().isPresent()); + Assertions.assertEquals(3, gvl.getFeatures().size()); + Assertions.assertEquals(3, gvl.getGvlSpecificationVersion()); + Assertions.assertNotNull(gvl.getLastUpdated()); + Assertions.assertEquals(11, gvl.getPurposes().size()); + Assertions.assertEquals(2, gvl.getSpecialFeatures().size()); + Assertions.assertEquals(2, gvl.getSpecialPurposes().size()); + Assertions.assertEquals(43, gvl.getStacks().size()); + Assertions.assertEquals(4, gvl.getTcfPolicyVersion()); + Assertions.assertEquals(7, gvl.getVendorListVersion()); + Assertions.assertEquals(376, gvl.getVendors().size()); + + Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); + Assertions.assertEquals("Store and/or access information on a device", gvl.getPurposes().get(0).getName()); + Assertions.assertEquals("Cookies, device or similar online identifiers (e.g. login-based identifiers, randomly assigned identifiers, network based identifiers) together with other information (e.g. browser type and information, language, screen size, supported technologies etc.) can be stored or read on your device to recognise it each time it connects to an app or to a website, for one or several of the purposes presented here. ", gvl.getPurposes().get(0).getDescription()); + Assertions.assertFalse(gvl.getPurposes().get(0).getDescriptionLegal().isPresent()); + Assertions.assertTrue(gvl.getPurposes().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getPurposes().get(0).getIllustrations().get().size()); + + Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); + Assertions.assertEquals("Ensure security, prevent and detect fraud, and fix errors\n", gvl.getSpecialPurposes().get(0).getName()); + Assertions.assertEquals("Your data can be used to monitor for and prevent unusual and possibly fraudulent activity (for example, regarding advertising, ad clicks by bots), and ensure systems and processes work properly and securely. It can also be used to correct any problems you, the publisher or the advertiser may encounter in the delivery of content and ads and in your interaction with them.", gvl.getSpecialPurposes().get(0).getDescription()); + Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getDescriptionLegal().isPresent()); + Assertions.assertTrue(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getIllustrations().get().size()); + + Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); + Assertions.assertEquals("Match and combine data from other data sources", gvl.getFeatures().get(0).getName()); + Assertions.assertEquals("Information about your activity on this service may be matched and combined with other information relating to you and originating from various sources (for instance your activity on a separate online service, your use of a loyalty card in-store, or your answers to a survey), in support of the purposes explained in this notice.", gvl.getFeatures().get(0).getDescription()); + Assertions.assertFalse(gvl.getFeatures().get(0).getDescriptionLegal().isPresent()); + Assertions.assertTrue(gvl.getFeatures().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(0, gvl.getFeatures().get(0).getIllustrations().get().size()); + + Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); + Assertions.assertEquals("Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); + Assertions.assertEquals("With your acceptance, your precise location (within a radius of less than 500 metres) may be used in support of the purposes explained in this notice.", gvl.getSpecialFeatures().get(0).getDescription()); + Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getDescriptionLegal().isPresent()); + Assertions.assertTrue(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(0, gvl.getSpecialFeatures().get(0).getIllustrations().get().size()); + + Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); + Assertions.assertEquals("Precise geolocation data, and identification through device scanning", gvl.getStacks().get(0).getName()); + Assertions.assertEquals("Precise geolocation and information about device characteristics can be used.\n\n", gvl.getStacks().get(0).getDescription()); + Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); + + Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); + Assertions.assertEquals("Advertising based on limited data and advertising measurement", gvl.getStacks().get(1).getName()); + Assertions.assertEquals("Advertising can be presented based on limited data. Advertising performance can be measured.", gvl.getStacks().get(1).getDescription()); + Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); + Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); + + Assertions.assertEquals(1, gvl.getDataCategories().get().get(0).getId()); + Assertions.assertEquals("IP addresses", gvl.getDataCategories().get().get(0).getName()); + Assertions.assertEquals("Your IP address is a number assigned by your Internet Service Provider to any Internet connection. It is not always specific to your device and is not always a stable identifier.\nIt is used to route information on the Internet and display online content (including ads) on your connected device.", gvl.getDataCategories().get().get(0).getDescription()); + + Assertions.assertEquals(1, gvl.getVendors().get(0).getId()); + Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); + Assertions.assertEquals("Exponential Interactive, Inc d/b/a VDX.tv", gvl.getVendors().get(0).getName()); + Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 7, 8, 9, 10), gvl.getVendors().get(0).getPurposes()); + Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(0).getLegIntPurposes()); + Assertions.assertEquals(Arrays.asList(7, 8, 9, 10), gvl.getVendors().get(0).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); + Assertions.assertEquals(Arrays.asList(1, 2, 3), gvl.getVendors().get(0).getFeatures()); + Assertions.assertTrue(gvl.getVendors().get(0).getSpecialFeatures().isEmpty()); + Assertions.assertFalse(gvl.getVendors().get(0).getPolicyUrl().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(0).getCookieMaxAgeSeconds().isPresent()); + Assertions.assertEquals(7776000, gvl.getVendors().get(0).getCookieMaxAgeSeconds().get()); + Assertions.assertTrue(gvl.getVendors().get(0).getUsesCookies().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(0).getUsesCookies().get()); + Assertions.assertTrue(gvl.getVendors().get(0).getCookieRefresh().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(0).getCookieRefresh().get()); + Assertions.assertTrue(gvl.getVendors().get(0).getUsesNonCookieAccess().isPresent()); + Assertions.assertFalse(gvl.getVendors().get(0).getUsesNonCookieAccess().get()); + Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().get().getStdRetention().isPresent()); + Assertions.assertEquals(397, gvl.getVendors().get(0).getDataRetention().get().getStdRetention().get()); + Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().get().getPurposes().isEmpty()); + Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().get().getSpecialPurposes().isEmpty()); + Assertions.assertTrue(gvl.getVendors().get(0).getUrls().isPresent()); + Assertions.assertEquals(1, gvl.getVendors().get(0).getUrls().get().size()); + Assertions.assertEquals("en", gvl.getVendors().get(0).getUrls().get().get(0).getLangId()); + Assertions.assertEquals("https://vdx.tv/privacy/", gvl.getVendors().get(0).getUrls().get().get(0).getPrivacy()); + Assertions.assertTrue(gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().isPresent()); + Assertions.assertEquals("https://cdnx.exponential.com/wp-content/uploads/2018/04/Balancing-Assessment-for-Legitimate-Interest-Publishers-v2.pdf", gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().get()); + Assertions.assertTrue(gvl.getVendors().get(0).getDataDeclaration().isPresent()); + Assertions.assertEquals(Arrays.asList(1, 3, 4, 6, 8, 10, 11), gvl.getVendors().get(0).getDataDeclaration().get()); + Assertions.assertTrue(gvl.getVendors().get(0).getDeviceStorageDisclosureUrl().isPresent()); + Assertions.assertEquals("https://vdxtv.expo.workers.dev", gvl.getVendors().get(0).getDeviceStorageDisclosureUrl().get()); + + Assertions.assertEquals(12, gvl.getVendors().get(4).getId()); + Assertions.assertFalse(gvl.getVendors().get(4).getDeletedDate().isPresent()); + Assertions.assertEquals("BeeswaxIO Corporation", gvl.getVendors().get(4).getName()); + Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 7), gvl.getVendors().get(4).getPurposes()); + Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(4).getLegIntPurposes()); + Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(4).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(4).getSpecialPurposes()); + Assertions.assertEquals(Arrays.asList(1, 3), gvl.getVendors().get(4).getFeatures()); + Assertions.assertEquals(Arrays.asList(1), gvl.getVendors().get(4).getSpecialFeatures()); + Assertions.assertFalse(gvl.getVendors().get(4).getPolicyUrl().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(4).getCookieMaxAgeSeconds().isPresent()); + Assertions.assertEquals(34109999, gvl.getVendors().get(4).getCookieMaxAgeSeconds().get()); + Assertions.assertTrue(gvl.getVendors().get(4).getUsesCookies().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(4).getUsesCookies().get()); + Assertions.assertTrue(gvl.getVendors().get(4).getCookieRefresh().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(4).getCookieRefresh().get()); + Assertions.assertTrue(gvl.getVendors().get(4).getUsesNonCookieAccess().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(4).getUsesNonCookieAccess().get()); + Assertions.assertTrue(gvl.getVendors().get(4).getDataRetention().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(4).getDataRetention().get().getStdRetention().isPresent()); + Assertions.assertEquals(0, gvl.getVendors().get(4).getDataRetention().get().getStdRetention().get()); + Assertions.assertEquals(1, gvl.getVendors().get(4).getDataRetention().get().getPurposes().size()); + Assertions.assertEquals(4320, gvl.getVendors().get(4).getDataRetention().get().getPurposes().get(7)); + Assertions.assertEquals(2, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().size()); + Assertions.assertEquals(392, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(1)); + Assertions.assertEquals(4320, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(2)); + Assertions.assertTrue(gvl.getVendors().get(4).getUrls().isPresent()); + Assertions.assertEquals(1, gvl.getVendors().get(4).getUrls().get().size()); + Assertions.assertEquals("en", gvl.getVendors().get(4).getUrls().get().get(0).getLangId()); + Assertions.assertEquals("https://www.beeswax.com/privacy/", gvl.getVendors().get(4).getUrls().get().get(0).getPrivacy()); + Assertions.assertTrue(gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().isPresent()); + Assertions.assertEquals("https://www.beeswax.com/privacy/", gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().get()); + Assertions.assertTrue(gvl.getVendors().get(4).getDataDeclaration().isPresent()); + Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 6, 8, 9, 11), gvl.getVendors().get(4).getDataDeclaration().get()); + Assertions.assertTrue(gvl.getVendors().get(4).getDeviceStorageDisclosureUrl().isPresent()); + Assertions.assertEquals("https://beeswax.com/devicedisclosure.json", gvl.getVendors().get(4).getDeviceStorageDisclosureUrl().get()); + + Assertions.assertTrue(gvl.getVendor(26).getCookieRefresh().isPresent()); + Assertions.assertFalse(gvl.getVendor(26).getCookieRefresh().get()); + } + +} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/OverflowTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/OverflowTest.java deleted file mode 100644 index 3d9ad22..0000000 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/OverflowTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.iab.gpp.extras.jackson.gvl; - -/*- - * #%L - * IAB TCF Java GVL Jackson - * %% - * Copyright (C) 2020 IAB Technology Laboratory, Inc - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * #L% - */ - -import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.gvl.Overflow; -import com.iab.gpp.extras.gvl.Vendor; -import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; - -public class OverflowTest { - - private static Overflow vendorEightOverflow; - private static final int VENDOR_ID_SELECTED_FOR_TEST = 8; - - @BeforeAll - public static void setUpBeforeClass() throws Exception { - Loader loader = new Loader(); - List vendors = loader.globalVendorList(TestUtil.getGlobalVendorList()).getVendors(); - Vendor vendor = vendors.stream().filter(o -> o.getId() == VENDOR_ID_SELECTED_FOR_TEST).findFirst().orElse(null); - assert vendor != null; - vendorEightOverflow = vendor.getOverflow().get(); - } - - @Test - public void getHttpGetLimit() { - Assertions.assertEquals(32, vendorEightOverflow.getHttpGetLimit()); - } -} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/PurposeTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/PurposeTest.java deleted file mode 100644 index f595735..0000000 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/PurposeTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.iab.gpp.extras.jackson.gvl; - -/*- - * #%L - * IAB TCF Java GVL Jackson - * %% - * Copyright (C) 2020 IAB Technology Laboratory, Inc - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * #L% - */ - -import java.io.IOException; -import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.gvl.Purpose; -import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; - -public class PurposeTest { - - private static Purpose purposeTen; - private static final int PURPOSE_SELECTED_FOR_TEST = 10; - - @BeforeAll - public static void setUpBeforeClass() throws IOException { - Loader loader = new Loader(); - List purposes = loader.globalVendorList(TestUtil.getGlobalVendorList()).getPurposes(); - purposeTen = purposes.stream().filter(o -> o.getId() == PURPOSE_SELECTED_FOR_TEST).findFirst().orElse(null); - } - - @Test - public void testGetId() { - Assertions.assertEquals(10, purposeTen.getId()); - } - - @Test - public void testGetName() { - String expectedName = "Develop and improve products"; - Assertions.assertEquals(expectedName, purposeTen.getName()); - } - - @Test - public void testGetDescription() { - String expectedDescription = - "Your data can be used to improve existing systems and software, and to develop new products"; - Assertions.assertEquals(expectedDescription, purposeTen.getDescription()); - } - - @Test - public void testGetDescriptionLegal() { - String expectedDescriptionLegal = - "To develop new products and improve products vendors can:\n* Use information to improve their existing products with new features and to develop new products\n* Create new models and algorithms through machine learning\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose"; - Assertions.assertEquals(expectedDescriptionLegal, purposeTen.getDescriptionLegal()); - } - - @Test - public void testGetConsentable() { - Assertions.assertTrue(purposeTen.getConsentable()); - } - - @Test - public void testGetRightToObject() { - Assertions.assertFalse(purposeTen.getRightToObject()); - } -} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialFeatureTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialFeatureTest.java deleted file mode 100644 index 005f58a..0000000 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialFeatureTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.iab.gpp.extras.jackson.gvl; - -/*- - * #%L - * IAB TCF Java GVL Jackson - * %% - * Copyright (C) 2020 IAB Technology Laboratory, Inc - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * #L% - */ - -import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.gvl.SpecialFeature; -import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; - -public class SpecialFeatureTest { - - private static SpecialFeature specialFeatureOne; - private final static int SPECIAL_FEAUTRE_ID_SELECTED_FOR_TEST = 1; - - @BeforeAll - public static void setUp() throws Exception { - Loader loader = new Loader(); - List specialFeatures = loader.globalVendorList(TestUtil.getGlobalVendorList()).getSpecialFeatures(); - specialFeatureOne = - specialFeatures.stream() - .filter(o -> o.getId() == SPECIAL_FEAUTRE_ID_SELECTED_FOR_TEST) - .findFirst() - .orElse(null); - } - - @Test - public void testGetId() { - Assertions.assertEquals(1, specialFeatureOne.getId()); - } - - @Test - public void testGetName() { - String expectedName = "Use precise geolocation data"; - Assertions.assertEquals(expectedName, specialFeatureOne.getName()); - } - - @Test - public void testGetDescription() { - String expectedDescription = - "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters."; - Assertions.assertEquals(expectedDescription, specialFeatureOne.getDescription()); - } - - @Test - public void testGetDescriptionLegal() { - String expectedDescriptionLegal = - "Vendors can:\n* Collect and process precise geolocation data in support of one or more purposes.\nN.B. Precise geolocation means that there are no restrictions on the precision of a user’s location; this can be accurate to within several meters."; - Assertions.assertEquals(expectedDescriptionLegal, specialFeatureOne.getDescriptionLegal()); - } -} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialPurposeTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialPurposeTest.java deleted file mode 100644 index 3f25027..0000000 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialPurposeTest.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.iab.gpp.extras.jackson.gvl; - -import java.io.IOException; -import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -/*- - * #%L - * IAB TCF Java GVL Jackson - * %% - * Copyright (C) 2020 IAB Technology Laboratory, Inc - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * #L% - */ - -import com.iab.gpp.extras.gvl.SpecialPurpose; -import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; - -public class SpecialPurposeTest { - - private static SpecialPurpose specialPurposeOne; - private static final int SPECIAL_PURPOSE_SELECTED_FOR_TEST = 1; - - @BeforeAll - public static void setupBeforeClass() throws IOException { - Loader loader = new Loader(); - List specialPurposes = loader.globalVendorList(TestUtil.getGlobalVendorList()).getSpecialPurposes(); - specialPurposeOne = - specialPurposes.stream() - .filter(o -> o.getId() == SPECIAL_PURPOSE_SELECTED_FOR_TEST) - .findFirst() - .orElse(null); - } - - @Test - public void testGetId() { - Assertions.assertEquals(1, specialPurposeOne.getId()); - } - - @Test - public void testGetName() { - String expectedName = "Ensure security, prevent fraud, and debug"; - Assertions.assertEquals(expectedName, specialPurposeOne.getName()); - } - - @Test - public void testGetDescription() { - String expectedDescription = - "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely."; - Assertions.assertEquals(expectedDescription, specialPurposeOne.getDescription()); - } - - @Test - public void testGetDescriptionLegal() { - String expectedDescriptionLegal = - "To ensure security, prevent fraud and debug vendors can:\n* Ensure data are securely transmitted\n* Detect and prevent malicious, fraudulent, invalid, or illegal activity.\n* Ensure correct and efficient operation of systems and processes, including to monitor and enhance the performance of systems and processes engaged in permitted purposes\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose."; - Assertions.assertEquals(expectedDescriptionLegal, specialPurposeOne.getDescriptionLegal()); - } - - @Test - public void testGetConsentable() { - Assertions.assertTrue(specialPurposeOne.getConsentable()); - } - - @Test - public void testGetRightToObject() { - Assertions.assertFalse(specialPurposeOne.getRightToObject()); - } -} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/StackTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/StackTest.java deleted file mode 100644 index a353268..0000000 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/StackTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.iab.gpp.extras.jackson.gvl; - -import java.util.Arrays; -import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -/*- - * #%L - * IAB TCF Java GVL Jackson - * %% - * Copyright (C) 2020 IAB Technology Laboratory, Inc - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * #L% - */ - -import com.iab.gpp.extras.gvl.Stack; -import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; - -public class StackTest { - - private static Stack stackTwenty; - private final static int STACK_ID_SELECTED_FOR_TEST = 20; - - @BeforeAll - public static void setUpBeforeClass() throws Exception { - Loader loader = new Loader(); - List stacks = loader.globalVendorList(TestUtil.getGlobalVendorList()).getStacks(); - stackTwenty = stacks.stream().filter(o -> o.getId() == STACK_ID_SELECTED_FOR_TEST).findFirst().orElse(null); - } - - @Test - public void testGetId() { - Assertions.assertEquals(20, stackTwenty.getId()); - } - - @Test - public void testGetSpecialFeatures() { - Assertions.assertNotNull(stackTwenty.getSpecialFeatures()); - Assertions.assertEquals(0, stackTwenty.getSpecialFeatures().size()); - } - - @Test - public void testGetPurposes() { - Assertions.assertNotNull(stackTwenty.getPurposes()); - Assertions.assertEquals(4, stackTwenty.getPurposes().size()); - Assertions.assertEquals(Arrays.asList(7, 8, 9, 10), stackTwenty.getPurposes()); - } - - @Test - public void testGetName() { - String expectedName = "Ad and content measurement, audience insights, and product development"; - Assertions.assertEquals(expectedName, stackTwenty.getName()); - } - - @Test - public void testGetDescription() { - String expectedDescription = - "Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software. Insights about the audiences who saw the ads and content can be derived."; - Assertions.assertEquals(expectedDescription, stackTwenty.getDescription()); - } -} diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/VendorTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/VendorTest.java deleted file mode 100644 index 57000bb..0000000 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/VendorTest.java +++ /dev/null @@ -1,159 +0,0 @@ -package com.iab.gpp.extras.jackson.gvl; - -/*- - * #%L - * IAB TCF Java GVL Jackson - * %% - * Copyright (C) 2020 IAB Technology Laboratory, Inc - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * #L% - */ - -import java.time.Instant; -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.gvl.Gvl; -import com.iab.gpp.extras.gvl.Vendor; -import com.iab.gpp.extras.jackson.Loader; -import com.iab.gpp.extras.jackson.TestUtil; - -public class VendorTest { - - private static Vendor vendorEight; - private static Vendor vendorTwo; - private static final int VENDOR_ID_SELECTED_FOR_TEST = 8; - - @BeforeAll - public static void setUpBeforeClass() throws Exception { - Loader loader = new Loader(); - Gvl gvl = loader.globalVendorList(TestUtil.getGlobalVendorList()); - vendorEight = gvl.getVendor(VENDOR_ID_SELECTED_FOR_TEST); - vendorTwo = gvl.getVendor(2); - } - - @Test - public void testGetId() { - Assertions.assertEquals(8, vendorEight.getId()); - } - - @Test - public void testGetName() { - String expectedName = "Emerse Sverige AB"; - Assertions.assertEquals(expectedName, vendorEight.getName()); - } - - @Test - public void testGetPurposes() { - Assertions.assertNotNull(vendorEight.getPurposes()); - Assertions.assertEquals(3, vendorEight.getPurposes().size()); - Assertions.assertEquals(Arrays.asList(1, 3, 4), vendorEight.getPurposes()); - } - - @Test - public void testGetLegIntPurposes() { - Assertions.assertNotNull(vendorEight.getLegIntPurposes()); - Assertions.assertEquals(4, vendorEight.getLegIntPurposes().size()); - Assertions.assertEquals(Arrays.asList(2, 7, 8, 9), vendorEight.getLegIntPurposes()); - } - - @Test - public void testGetFlexiblePurposes() { - Assertions.assertNotNull(vendorEight.getFlexiblePurposes()); - Assertions.assertEquals(2, vendorEight.getFlexiblePurposes().size()); - Assertions.assertEquals(Arrays.asList(2, 9), vendorEight.getFlexiblePurposes()); - } - - @Test - public void testGetSpecialPurposes() { - Assertions.assertNotNull(vendorEight.getSpecialPurposes()); - Assertions.assertEquals(2, vendorEight.getSpecialPurposes().size()); - Assertions.assertEquals(Arrays.asList(1, 2), vendorEight.getSpecialPurposes()); - } - - @Test - public void testGetFeatures() { - Assertions.assertNotNull(vendorEight.getFeatures()); - Assertions.assertEquals(2, vendorEight.getFeatures().size()); - Assertions.assertEquals(Arrays.asList(1, 2), vendorEight.getFeatures()); - } - - @Test - public void testGetSpecialFeatures() { - Assertions.assertNotNull(vendorEight.getSpecialFeatures()); - Assertions.assertEquals(0, vendorEight.getSpecialFeatures().size()); - } - - @Test - public void testGetPolicyUrl() { - String expectedPolicyUrl = "https://www.emerse.com/privacy-policy/"; - Assertions.assertEquals(expectedPolicyUrl, vendorEight.getPolicyUrl()); - } - - @Test - public void testGetDeletedDate() { - Assertions.assertEquals(Instant.parse("2020-06-28T00:00:00Z"), vendorEight.getDeletedDate().get()); - } - - @Test - public void testGetOverflow() { - Assertions.assertNotNull(vendorEight.getOverflow()); - } - - @Test - public void testIsDeleted() { - Assertions.assertTrue(vendorEight.isDeleted()); - } - - @Test - public void testCookieMaxAgeSeconds() { - long expectedCookieMaxAgeSeconds = 31557600000L; - Assertions.assertTrue(vendorEight.getCookieMaxAgeSeconds().isPresent()); - Assertions.assertEquals(expectedCookieMaxAgeSeconds, vendorEight.getCookieMaxAgeSeconds().get().longValue()); - } - - @Test - public void testUsesCookies() { - Assertions.assertTrue(vendorEight.getUsesCookies()); - } - - @Test - public void testCookieRefresh() { - Assertions.assertFalse(vendorEight.getHasCookieRefresh()); - } - - @Test - public void testUsesNonCookieAccess() { - Assertions.assertTrue(vendorEight.getUsesNonCookieAccess()); - } - - @Test - public void testNullDeviceStorageDisclosureUrl() { - Assertions.assertFalse(vendorEight.getDeviceStorageDisclosureUrl().isPresent()); - } - - @Test - public void testNullCookieMaxAgeSeconds() { - Assertions.assertFalse(vendorTwo.getUsesCookies()); - Assertions.assertFalse(vendorTwo.getCookieMaxAgeSeconds().isPresent()); - } - - @Test - public void testDeviceStorageDisclosureUrl() { - String expectedDeviceStorageDisclosureUrl = "https://privacy.blismedia.com/.well-known/deviceStorage.json"; - Assertions.assertTrue(vendorTwo.getDeviceStorageDisclosureUrl().isPresent()); - Assertions.assertEquals(expectedDeviceStorageDisclosureUrl, vendorTwo.getDeviceStorageDisclosureUrl().get()); - } -} diff --git a/iabgpp-extras-jackson/src/test/resources/gvl.json b/iabgpp-extras-jackson/src/test/resources/gvl.json deleted file mode 100644 index 660b47e..0000000 --- a/iabgpp-extras-jackson/src/test/resources/gvl.json +++ /dev/null @@ -1,664 +0,0 @@ -{ - "gvlSpecificationVersion": 2, - "vendorListVersion": 26, - "tcfPolicyVersion": 2, - "lastUpdated": "2020-02-20T16:05:20Z", - "purposes": { - "1": { - "id": 1, - "name": "Store and/or access information on a device", - "description": "Cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you.", - "descriptionLegal": "Vendors can:\n* Store and access information on the device such as cookies and device identifiers presented to a user." - }, - "2": { - "id": 2, - "name": "Select basic ads", - "description": "Ads can be shown to you based on the content you’re viewing, the app you’re using, your approximate location, or your device type.", - "descriptionLegal": "To do basic ad selection vendors can:\n* Use real-time information about the context in which the ad will be shown, to show the ad, including information about the content and the device, such as: device type and capabilities, user agent, URL, IP address\n* Use a user’s non-precise geolocation data\n* Control the frequency of ads shown to a user.\n* Sequence the order in which ads are shown to a user.\n* Prevent an ad from serving in an unsuitable editorial (brand-unsafe) context\nVendors cannot:\n* Create a personalised ads profile using this information for the selection of future ads.\n* N.B. Non-precise means only an approximate location involving at least a radius of 500 meters is permitted." - }, - "3": { - "id": 3, - "name": "Create a personalised ads profile", - "description": "A profile can be built about you and your interests to show you personalised ads that are relevant to you.", - "descriptionLegal": "To create a personalised ads profile vendors can:\n* Collect information about a user, including a user's activity, interests, demographic information, or location, to create or edit a user profile for use in personalised advertising.\n* Combine this information with other information previously collected, including from across websites and apps, to create or edit a user profile for use in personalised advertising." - }, - "4": { - "id": 4, - "name": "Select personalised ads", - "description": "Personalised ads can be shown to you based on a profile about you.", - "descriptionLegal": "To select personalised ads vendors can:\n* Select personalised ads based on a user profile or other historical user data, including a user’s prior activity, interests, visits to sites or apps, location, or demographic information." - }, - "5": { - "id": 5, - "name": "Create a personalised content profile", - "description": "A profile can be built about you and your interests to show you personalised content that is relevant to you.", - "descriptionLegal": "To create a personalised content profile vendors can:\n* Collect information about a user, including a user's activity, interests, visits to sites or apps, demographic information, or location, to create or edit a user profile for personalising content.\n* Combine this information with other information previously collected, including from across websites and apps, to create or edit a user profile for use in personalising content." - }, - "6": { - "id": 6, - "name": "Select personalised content", - "description": "Personalised content can be shown to you based on a profile about you.", - "descriptionLegal": "To select personalised content vendors can:\n* Select personalised content based on a user profile or other historical user data, including a user’s prior activity, interests, visits to sites or apps, location, or demographic information." - }, - "7": { - "id": 7, - "name": "Measure ad performance", - "description": "The performance and effectiveness of ads that you see or interact with can be measured.", - "descriptionLegal": "To measure ad performance vendors can:\n* Measure whether and how ads were delivered to and interacted with by a user\n* Provide reporting about ads including their effectiveness and performance\n* Provide reporting about users who interacted with ads using data observed during the course of the user's interaction with that ad\n* Provide reporting to publishers about the ads displayed on their property\n* Measure whether an ad is serving in a suitable editorial environment (brand-safe) context\n* Determine the percentage of the ad that had the opportunity to be seen and the duration of that opportunity\n* Combine this information with other information previously collected, including from across websites and apps\nVendors cannot:\n*Apply panel- or similarly-derived audience insights data to ad measurement data without a Legal Basis to apply market research to generate audience insights (Purpose 9)" - }, - "8": { - "id": 8, - "name": "Measure content performance", - "description": "The performance and effectiveness of content that you see or interact with can be measured.", - "descriptionLegal": "To measure content performance vendors can:\n* Measure and report on how content was delivered to and interacted with by users.\n* Provide reporting, using directly measurable or known information, about users who interacted with the content\n* Combine this information with other information previously collected, including from across websites and apps.\nVendors cannot:\n* Measure whether and how ads (including native ads) were delivered to and interacted with by a user.\n* Apply panel- or similarly derived audience insights data to ad measurement data without a Legal Basis to apply market research to generate audience insights (Purpose 9)" - }, - "9": { - "id": 9, - "name": "Apply market research to generate audience insights", - "description": "Market research can be used to learn more about the audiences who visit sites/apps and view ads.", - "descriptionLegal": "To apply market research to generate audience insights vendors can:\n* Provide aggregate reporting to advertisers or their representatives about the audiences reached by their ads, through panel-based and similarly derived insights.\n* Provide aggregate reporting to publishers about the audiences that were served or interacted with content and/or ads on their property by applying panel-based and similarly derived insights.\n* Associate offline data with an online user for the purposes of market research to generate audience insights if vendors have declared to match and combine offline data sources (Feature 1)\n* Combine this information with other information previously collected including from across websites and apps. \nVendors cannot:\n* Measure the performance and effectiveness of ads that a specific user was served or interacted with, without a Legal Basis to measure ad performance.\n* Measure which content a specific user was served and how they interacted with it, without a Legal Basis to measure content performance." - }, - "10": { - "id": 10, - "name": "Develop and improve products", - "description": "Your data can be used to improve existing systems and software, and to develop new products", - "descriptionLegal": "To develop new products and improve products vendors can:\n* Use information to improve their existing products with new features and to develop new products\n* Create new models and algorithms through machine learning\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose", - "consentable": true, - "rightToObject": false - } - }, - "specialPurposes": { - "1": { - "id": 1, - "name": "Ensure security, prevent fraud, and debug", - "description": "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.", - "descriptionLegal": "To ensure security, prevent fraud and debug vendors can:\n* Ensure data are securely transmitted\n* Detect and prevent malicious, fraudulent, invalid, or illegal activity.\n* Ensure correct and efficient operation of systems and processes, including to monitor and enhance the performance of systems and processes engaged in permitted purposes\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose.", - "consentable": true, - "rightToObject": false - }, - "2": { - "id": 2, - "name": "Technically deliver ads or content", - "description": "Your device can receive and send information that allows you to see and interact with ads and content.", - "descriptionLegal": "To deliver information and respond to technical requests vendors can:\n* Use a user’s IP address to deliver an ad over the internet\n* Respond to a user’s interaction with an ad by sending the user to a landing page\n* Use a user’s IP address to deliver content over the internet\n* Respond to a user’s interaction with content by sending the user to a landing page\n* Use information about the device type and capabilities for delivering ads or content, for example, to deliver the right size ad creative or video file in a format supported by the device\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose" - } - }, - "features": { - "1": { - "id": 1, - "name": "Match and combine offline data sources", - "description": "Data from offline data sources can be combined with your online activity in support of one or more purposes", - "descriptionLegal": "Vendors can:\n* Combine data obtained offline with data collected online in support of one or more Purposes or Special Purposes." - }, - "2": { - "id": 2, - "name": "Link different devices", - "description": "Different devices can be determined as belonging to you or your household in support of one or more of purposes.", - "descriptionLegal": "Vendors can:\n* Deterministically determine that two or more devices belong to the same user or household\n* Probabilistically determine that two or more devices belong to the same user or household\n* Actively scan device characteristics for identification for probabilistic identification if users have allowed vendors to actively scan device characteristics for identification (Special Feature 2)" - }, - "3": { - "id": 3, - "name": "Receive and use automatically-sent device characteristics for identification", - "description": "Your device might be distinguished from other devices based on information it automatically sends, such as IP address or browser type.", - "descriptionLegal": "Vendors can:\n* Create an identifier using data collected automatically from a device for specific characteristics, e.g. IP address, user-agent string.\n* Use such an identifier to attempt to re-identify a device.\nVendors cannot:\n* Create an identifier using data collected via actively scanning a device for specific characteristics, e.g. installed font or screen resolution without users’ separate opt-in to actively scanning device characteristics for identification.\n* Use such an identifier to re-identify a device." - } - }, - "specialFeatures": { - "1": { - "id": 1, - "name": "Use precise geolocation data", - "description": "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.", - "descriptionLegal": "Vendors can:\n* Collect and process precise geolocation data in support of one or more purposes.\nN.B. Precise geolocation means that there are no restrictions on the precision of a user’s location; this can be accurate to within several meters." - }, - "2": { - "id": 2, - "name": "Actively scan device characteristics for identification", - "description": "Your device can be identified based on a scan of your device's unique combination of characteristics.", - "descriptionLegal": "Vendors can:\n* Create an identifier using data collected via actively scanning a device for specific characteristics, e.g. installed fonts or screen resolution.\n* Use such an identifier to re-identify a device." - } - }, - "stacks": { - "1": { - "id": 1, - "purposes": [], - "specialFeatures": [ - 1, - 2 - ], - "name": "Precise geolocation data, and identification through device scanning", - "description": "Precise geolocation and information about device characteristics can be used." - }, - "2": { - "id": 2, - "purposes": [ - 2, - 7 - ], - "specialFeatures": [], - "name": "Basic ads, and ad measurement", - "description": "Basic ads can be served. Ad performance can be measured." - }, - "3": { - "id": 3, - "purposes": [ - 2, - 3, - 4 - ], - "specialFeatures": [], - "name": "Personalised ads", - "description": "Ads can be personalised based on a profile. More data can be added to better personalise ads." - }, - "4": { - "id": 4, - "purposes": [ - 2, - 7, - 9 - ], - "specialFeatures": [], - "name": "Basic ads, and ad measurement", - "description": "Basic ads can be served. Ad performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "5": { - "id": 5, - "purposes": [ - 2, - 3, - 7 - ], - "specialFeatures": [], - "name": "Basic ads, personalised ads profile, and ad measurement", - "description": "Basic ads can be served. More data can be added to better personalise ads. Ad performance can be measured." - }, - "6": { - "id": 6, - "purposes": [ - 2, - 4, - 7 - ], - "specialFeatures": [], - "name": "Personalised ads display, and measurement", - "description": "Ads can be personalised based on a profile. Ad performance can be measured." - }, - "7": { - "id": 7, - "purposes": [ - 2, - 4, - 7, - 9 - ], - "specialFeatures": [], - "name": "Personalised ads display, ad measurement, and audience insights", - "description": "Ads can be personalised based on a profile. Ad performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "8": { - "id": 8, - "purposes": [ - 2, - 3, - 4, - 7 - ], - "specialFeatures": [], - "name": "Personalised ads, and ad measurement", - "description": "Ads can be personalised based on a profile. More data can be added to better personalise ads. Ad performance can be measured." - }, - "9": { - "id": 9, - "purposes": [ - 2, - 3, - 4, - 7, - 9 - ], - "specialFeatures": [], - "name": "Personalised ads, ad measurement, and audience insights", - "description": "Ads can be personalised based on a profile. More data can be added to better personalise ads. Ad performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "10": { - "id": 10, - "purposes": [ - 3, - 4 - ], - "specialFeatures": [], - "name": "Personalised ads profile and display", - "description": "Ads can be personalised based on a profile. More data can be added to better personalise ads." - }, - "11": { - "id": 11, - "purposes": [ - 5, - 6 - ], - "specialFeatures": [], - "name": "Personalised content", - "description": "Content can be personalised based on a profile. More data can be added to better personalise content." - }, - "12": { - "id": 12, - "purposes": [ - 6, - 8 - ], - "specialFeatures": [], - "name": "Personalised content display, and content measurement", - "description": "Content can be personalised based on a profile. Content performance can be measured." - }, - "13": { - "id": 13, - "purposes": [ - 6, - 8, - 9 - ], - "specialFeatures": [], - "name": "Personalised content display, content measurement and audience insights", - "description": "Content can be personalised based on a profile. Content performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "14": { - "id": 14, - "purposes": [ - 5, - 6, - 8 - ], - "specialFeatures": [], - "name": "Personalised content, and content measurement", - "description": "Content can be personalised based on a profile. More data can be added to better personalise content. Content performance can be measured." - }, - "15": { - "id": 15, - "purposes": [ - 5, - 6, - 8, - 9 - ], - "specialFeatures": [], - "name": "Personalised content, content measurement and audience insights", - "description": "Content can be personalised based on a profile. More data can be added to better personalise content. Content performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "16": { - "id": 16, - "purposes": [ - 5, - 6, - 8, - 9, - 10 - ], - "specialFeatures": [], - "name": "Personalised content, content measurement, audience insights, and product development", - "description": "Content can be personalised based on a profile. More data can be added to better personalise content. Content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software" - }, - "17": { - "id": 17, - "purposes": [ - 7, - 8, - 9 - ], - "specialFeatures": [], - "name": "Ad and content measurement, and audience insights", - "description": "Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "18": { - "id": 18, - "purposes": [ - 7, - 8 - ], - "specialFeatures": [], - "name": "Ad and content measurement", - "description": "Ad and content performance can be measured." - }, - "19": { - "id": 19, - "purposes": [ - 7, - 9 - ], - "specialFeatures": [], - "name": "Ad measurement, and audience insights", - "description": "Ad can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "20": { - "id": 20, - "purposes": [ - 7, - 8, - 9, - 10 - ], - "specialFeatures": [], - "name": "Ad and content measurement, audience insights, and product development", - "description": "Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software. Insights about the audiences who saw the ads and content can be derived." - }, - "21": { - "id": 21, - "purposes": [ - 8, - 9, - 10 - ], - "specialFeatures": [], - "name": "Content measurement, audience insights, and product development.", - "description": "Content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software." - }, - "22": { - "id": 22, - "purposes": [ - 8, - 10 - ], - "specialFeatures": [], - "name": "Content measurement, and product development", - "description": "Content performance can be measured. Data can be used to build or improve user experience, systems, and software." - }, - "23": { - "id": 23, - "purposes": [ - 2, - 4, - 6, - 7, - 8 - ], - "specialFeatures": [], - "name": "Personalised ads and content display, ad and content measurement", - "description": "Ads and content can be personalised based on a profile. Ad and content performance can be measured." - }, - "24": { - "id": 24, - "purposes": [ - 2, - 4, - 6, - 7, - 8, - 9 - ], - "specialFeatures": [], - "name": "Personalised ads and content display, ad and content measurement, and audience insights", - "description": "Ads and content can be personalised based on a profile. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software." - }, - "25": { - "id": 25, - "purposes": [ - 2, - 3, - 4, - 5, - 6, - 7, - 8 - ], - "specialFeatures": [], - "name": "Personalised ads and content, ad and content measurement", - "description": "Ads and content can be personalised based on a profile. More data can be added to better personalise ads and content. Ad and content performance can be measured." - }, - "26": { - "id": 26, - "purposes": [ - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9 - ], - "specialFeatures": [], - "name": "Personalised ads and content, ad and content measurement, and audience insights", - "description": "Ads and content can be personalised based on a profile. More data can be added to better personalise ads and content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "27": { - "id": 27, - "purposes": [ - 3, - 5 - ], - "specialFeatures": [], - "name": "Personalised ads, and content profile", - "description": "More data can be added to personalise ads and content." - }, - "28": { - "id": 28, - "purposes": [ - 2, - 4, - 6 - ], - "specialFeatures": [], - "name": "Personalised ads and content display", - "description": "Ads and content can be personalised based on a profile." - }, - "29": { - "id": 29, - "purposes": [ - 2, - 7, - 8, - 9 - ], - "specialFeatures": [], - "name": "Basic ads, ad and content measurement, and audience insights", - "description": "Basic ads can be served. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "30": { - "id": 30, - "purposes": [ - 2, - 4, - 5, - 6, - 7, - 8, - 9 - ], - "specialFeatures": [], - "name": "Personalised ads display, personalised content, ad and content measurement, and audience insights", - "description": "Ads and content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "31": { - "id": 31, - "purposes": [ - 2, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "specialFeatures": [], - "name": "Personalised ads display, personalised content, ad and content measurement, audience insights, and product development", - "description": "Ads and content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software." - }, - "32": { - "id": 32, - "purposes": [ - 2, - 5, - 6, - 7, - 8, - 9 - ], - "specialFeatures": [], - "name": "Basic ads, personalised content, ad and content measurement, and audience insights", - "description": "Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "33": { - "id": 33, - "purposes": [ - 2, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "specialFeatures": [], - "name": "Basic ads, personalised content, ad and content measurement, audience insights, and product development", - "description": "Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software." - }, - "34": { - "id": 34, - "purposes": [ - 2, - 5, - 6, - 8, - 9 - ], - "specialFeatures": [], - "name": "Basic ads, personalised content, content measurement, and audience insights", - "description": "Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived." - }, - "35": { - "id": 35, - "purposes": [ - 2, - 5, - 6, - 8, - 9, - 10 - ], - "specialFeatures": [], - "name": "Basic ads, personalised content, content measurement, audience insights, and product development", - "description": "Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software." - }, - "36": { - "id": 36, - "purposes": [ - 2, - 5, - 6, - 7 - ], - "specialFeatures": [], - "name": "Basic ads, personalised content, and ad measurement", - "description": "Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad performance can be measured." - }, - "37": { - "id": 37, - "purposes": [ - 2, - 5, - 6, - 7, - 10 - ], - "specialFeatures": [], - "name": "Basic ads, personalised content, ad measurement, and product development", - "description": "Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad performance can be measured. Data can be used to build or improve user experience, systems, and software." - } - }, - "vendors": { - "512": { - "id": 512, - "name": "PubNative GmbH", - "purposes": [ - 1, - 2, - 3, - 4, - 4, - 7, - 8, - 10 - ], - "legIntPurposes": [], - "flexiblePurposes": [], - "specialPurposes": [], - "features": [ - 3 - ], - "specialFeatures": [ - 2 - ], - "policyUrl": "https://pubnative.net/privacy-notice/", - "deletedDate": "2019-02-28T00:00:00Z", - "cookieMaxAgeSeconds": null, - "usesCookies": false, - "cookieRefresh": false, - "usesNonCookieAccess": false - }, - "8": { - "id": 8, - "name": "Emerse Sverige AB", - "purposes": [ - 1, - 3, - 4 - ], - "legIntPurposes": [ - 2, - 7, - 8, - 9 - ], - "flexiblePurposes": [ - 2, - 9 - ], - "specialPurposes": [ - 1, - 2 - ], - "features": [ - 1, - 2 - ], - "specialFeatures": [], - "policyUrl": "https://www.emerse.com/privacy-policy/", - "deletedDate": "2020-06-28T00:00:00Z", - "overflow": { - "httpGetLimit": 32 - }, - "cookieMaxAgeSeconds": 31557600000, - "usesCookies": true, - "cookieRefresh": false, - "usesNonCookieAccess": true - }, - "2": { - "id": 2, - "name": "Captify Technologies Limited", - "purposes": [ - 1, - 2, - 3, - 4 - ], - "legIntPurposes": [ - 7, - 9, - 10 - ], - "flexiblePurposes": [ - 2 - ], - "specialPurposes": [ ], - "features": [ - 2 - ], - "specialFeatures": [ ], - "policyUrl": "http://www.captify.co.uk/privacy-policy/", - "cookieMaxAgeSeconds": null, - "usesCookies": false, - "cookieRefresh": true, - "usesNonCookieAccess": true, - "deviceStorageDisclosureUrl": "https://privacy.blismedia.com/.well-known/deviceStorage.json" - } - } -} \ No newline at end of file diff --git a/iabgpp-extras-jackson/src/test/resources/vendorlist/v2/vendor-list-v51.json b/iabgpp-extras-jackson/src/test/resources/vendorlist/v2/vendor-list-v51.json new file mode 100644 index 0000000..63ffbf6 --- /dev/null +++ b/iabgpp-extras-jackson/src/test/resources/vendorlist/v2/vendor-list-v51.json @@ -0,0 +1 @@ +{"gvlSpecificationVersion":2,"vendorListVersion":51,"tcfPolicyVersion":2,"lastUpdated":"2020-08-13T16:05:23Z","purposes":{"1":{"id":1,"name":"Store and/or access information on a device","description":"Cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you.","descriptionLegal":"Vendors can:\n* Store and access information on the device such as cookies and device identifiers presented to a user."},"2":{"id":2,"name":"Select basic ads","description":"Ads can be shown to you based on the content you\u2019re viewing, the app you\u2019re using, your approximate location, or your device type.","descriptionLegal":"To do basic ad selection vendors can:\n* Use real-time information about the context in which the ad will be shown, to show the ad, including information about the content and the device, such as: device type and capabilities, user agent, URL, IP address\n* Use a user\u2019s non-precise geolocation data\n* Control the frequency of ads shown to a user.\n* Sequence the order in which ads are shown to a user.\n* Prevent an ad from serving in an unsuitable editorial (brand-unsafe) context\nVendors cannot:\n* Create a personalised ads profile using this information for the selection of future ads.\n* N.B. Non-precise means only an approximate location involving at least a radius of 500 meters is permitted."},"3":{"id":3,"name":"Create a personalised ads profile","description":"A profile can be built about you and your interests to show you personalised ads that are relevant to you.","descriptionLegal":"To create a personalised ads profile vendors can:\n* Collect information about a user, including a user's activity, interests, demographic information, or location, to create or edit a user profile for use in personalised advertising.\n* Combine this information with other information previously collected, including from across websites and apps, to create or edit a user profile for use in personalised advertising."},"4":{"id":4,"name":"Select personalised ads","description":"Personalised ads can be shown to you based on a profile about you.","descriptionLegal":"To select personalised ads vendors can:\n* Select personalised ads based on a user profile or other historical user data, including a user\u2019s prior activity, interests, visits to sites or apps, location, or demographic information."},"5":{"id":5,"name":"Create a personalised content profile","description":"A profile can be built about you and your interests to show you personalised content that is relevant to you.","descriptionLegal":"To create a personalised content profile vendors can:\n* Collect information about a user, including a user's activity, interests, visits to sites or apps, demographic information, or location, to create or edit a user profile for personalising content.\n* Combine this information with other information previously collected, including from across websites and apps, to create or edit a user profile for use in personalising content."},"6":{"id":6,"name":"Select personalised content","description":"Personalised content can be shown to you based on a profile about you.","descriptionLegal":"To select personalised content vendors can:\n* Select personalised content based on a user profile or other historical user data, including a user\u2019s prior activity, interests, visits to sites or apps, location, or demographic information."},"7":{"id":7,"name":"Measure ad performance","description":"The performance and effectiveness of ads that you see or interact with can be measured.","descriptionLegal":"To measure ad performance vendors can:\n* Measure whether and how ads were delivered to and interacted with by a user\n* Provide reporting about ads including their effectiveness and performance\n* Provide reporting about users who interacted with ads using data observed during the course of the user's interaction with that ad\n* Provide reporting to publishers about the ads displayed on their property\n* Measure whether an ad is serving in a suitable editorial environment (brand-safe) context\n* Determine the percentage of the ad that had the opportunity to be seen and the duration of that opportunity\n* Combine this information with other information previously collected, including from across websites and apps\nVendors cannot:\n*Apply panel- or similarly-derived audience insights data to ad measurement data without a Legal Basis to apply market research to generate audience insights (Purpose 9)"},"8":{"id":8,"name":"Measure content performance","description":"The performance and effectiveness of content that you see or interact with can be measured.","descriptionLegal":"To measure content performance vendors can:\n* Measure and report on how content was delivered to and interacted with by users.\n* Provide reporting, using directly measurable or known information, about users who interacted with the content\n* Combine this information with other information previously collected, including from across websites and apps.\nVendors cannot:\n* Measure whether and how ads (including native ads) were delivered to and interacted with by a user.\n* Apply panel- or similarly derived audience insights data to ad measurement data without a Legal Basis to apply market research to generate audience insights (Purpose 9)"},"9":{"id":9,"name":"Apply market research to generate audience insights","description":"Market research can be used to learn more about the audiences who visit sites/apps and view ads.","descriptionLegal":"To apply market research to generate audience insights vendors can:\n* Provide aggregate reporting to advertisers or their representatives about the audiences reached by their ads, through panel-based and similarly derived insights.\n* Provide aggregate reporting to publishers about the audiences that were served or interacted with content and/or ads on their property by applying panel-based and similarly derived insights.\n* Associate offline data with an online user for the purposes of market research to generate audience insights if vendors have declared to match and combine offline data sources (Feature 1)\n* Combine this information with other information previously collected including from across websites and apps. \nVendors cannot:\n* Measure the performance and effectiveness of ads that a specific user was served or interacted with, without a Legal Basis to measure ad performance.\n* Measure which content a specific user was served and how they interacted with it, without a Legal Basis to measure content performance."},"10":{"id":10,"name":"Develop and improve products","description":"Your data can be used to improve existing systems and software, and to develop new products","descriptionLegal":"To develop new products and improve products vendors can:\n* Use information to improve their existing products with new features and to develop new products\n* Create new models and algorithms through machine learning\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose"}},"specialPurposes":{"1":{"id":1,"name":"Ensure security, prevent fraud, and debug","description":"Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.","descriptionLegal":"To ensure security, prevent fraud and debug vendors can:\n* Ensure data are securely transmitted\n* Detect and prevent malicious, fraudulent, invalid, or illegal activity.\n* Ensure correct and efficient operation of systems and processes, including to monitor and enhance the performance of systems and processes engaged in permitted purposes\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose."},"2":{"id":2,"name":"Technically deliver ads or content","description":"Your device can receive and send information that allows you to see and interact with ads and content.","descriptionLegal":"To deliver information and respond to technical requests vendors can:\n* Use a user\u2019s IP address to deliver an ad over the internet\n* Respond to a user\u2019s interaction with an ad by sending the user to a landing page\n* Use a user\u2019s IP address to deliver content over the internet\n* Respond to a user\u2019s interaction with content by sending the user to a landing page\n* Use information about the device type and capabilities for delivering ads or content, for example, to deliver the right size ad creative or video file in a format supported by the device\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose"}},"features":{"1":{"id":1,"name":"Match and combine offline data sources","description":"Data from offline data sources can be combined with your online activity in support of one or more purposes","descriptionLegal":"Vendors can:\n* Combine data obtained offline with data collected online in support of one or more Purposes or Special Purposes."},"2":{"id":2,"name":"Link different devices","description":"Different devices can be determined as belonging to you or your household in support of one or more of purposes.","descriptionLegal":"Vendors can:\n* Deterministically determine that two or more devices belong to the same user or household\n* Probabilistically determine that two or more devices belong to the same user or household\n* Actively scan device characteristics for identification for probabilistic identification if users have allowed vendors to actively scan device characteristics for identification (Special Feature 2)"},"3":{"id":3,"name":"Receive and use automatically-sent device characteristics for identification","description":"Your device might be distinguished from other devices based on information it automatically sends, such as IP address or browser type.","descriptionLegal":"Vendors can:\n* Create an identifier using data collected automatically from a device for specific characteristics, e.g. IP address, user-agent string.\n* Use such an identifier to attempt to re-identify a device.\nVendors cannot:\n* Create an identifier using data collected via actively scanning a device for specific characteristics, e.g. installed font or screen resolution without users\u2019 separate opt-in to actively scanning device characteristics for identification.\n* Use such an identifier to re-identify a device."}},"specialFeatures":{"1":{"id":1,"name":"Use precise geolocation data","description":"Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.","descriptionLegal":"Vendors can:\n* Collect and process precise geolocation data in support of one or more purposes.\nN.B. Precise geolocation means that there are no restrictions on the precision of a user\u2019s location; this can be accurate to within several meters."},"2":{"id":2,"name":"Actively scan device characteristics for identification","description":"Your device can be identified based on a scan of your device's unique combination of characteristics.","descriptionLegal":"Vendors can:\n* Create an identifier using data collected via actively scanning a device for specific characteristics, e.g. installed fonts or screen resolution.\n* Use such an identifier to re-identify a device."}},"stacks":{"1":{"id":1,"purposes":[],"specialFeatures":[1,2],"name":"Precise geolocation data, and identification through device scanning","description":"Precise geolocation and information about device characteristics can be used."},"2":{"id":2,"purposes":[2,7],"specialFeatures":[],"name":"Basic ads, and ad measurement","description":"Basic ads can be served. Ad performance can be measured."},"3":{"id":3,"purposes":[2,3,4],"specialFeatures":[],"name":"Personalised ads","description":"Ads can be personalised based on a profile. More data can be added to better personalise ads."},"4":{"id":4,"purposes":[2,7,9],"specialFeatures":[],"name":"Basic ads, ad measurement, and audience insights","description":"Basic ads can be served. Ad performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"5":{"id":5,"purposes":[2,3,7],"specialFeatures":[],"name":"Basic ads, personalised ads profile, and ad measurement","description":"Basic ads can be served. More data can be added to better personalise ads. Ad performance can be measured."},"6":{"id":6,"purposes":[2,4,7],"specialFeatures":[],"name":"Personalised ads display and ad measurement","description":"Ads can be personalised based on a profile. Ad performance can be measured."},"7":{"id":7,"purposes":[2,4,7,9],"specialFeatures":[],"name":"Personalised ads display, ad measurement, and audience insights","description":"Ads can be personalised based on a profile. Ad performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"8":{"id":8,"purposes":[2,3,4,7],"specialFeatures":[],"name":"Personalised ads, and ad measurement","description":"Ads can be personalised based on a profile. More data can be added to better personalise ads. Ad performance can be measured."},"9":{"id":9,"purposes":[2,3,4,7,9],"specialFeatures":[],"name":"Personalised ads, ad measurement, and audience insights","description":"Ads can be personalised based on a profile. More data can be added to better personalise ads. Ad performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"10":{"id":10,"purposes":[3,4],"specialFeatures":[],"name":"Personalised ads profile and display","description":"Ads can be personalised based on a profile. More data can be added to better personalise ads."},"11":{"id":11,"purposes":[5,6],"specialFeatures":[],"name":"Personalised content","description":"Content can be personalised based on a profile. More data can be added to better personalise content."},"12":{"id":12,"purposes":[6,8],"specialFeatures":[],"name":"Personalised content display, and content measurement","description":"Content can be personalised based on a profile. Content performance can be measured."},"13":{"id":13,"purposes":[6,8,9],"specialFeatures":[],"name":"Personalised content display, content measurement and audience insights","description":"Content can be personalised based on a profile. Content performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"14":{"id":14,"purposes":[5,6,8],"specialFeatures":[],"name":"Personalised content, and content measurement","description":"Content can be personalised based on a profile. More data can be added to better personalise content. Content performance can be measured."},"15":{"id":15,"purposes":[5,6,8,9],"specialFeatures":[],"name":"Personalised content, content measurement and audience insights","description":"Content can be personalised based on a profile. More data can be added to better personalise content. Content performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"16":{"id":16,"purposes":[5,6,8,9,10],"specialFeatures":[],"name":"Personalised content, content measurement, audience insights, and product development","description":"Content can be personalised based on a profile. More data can be added to better personalise content. Content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software"},"17":{"id":17,"purposes":[7,8,9],"specialFeatures":[],"name":"Ad and content measurement, and audience insights","description":"Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"18":{"id":18,"purposes":[7,8],"specialFeatures":[],"name":"Ad and content measurement","description":"Ad and content performance can be measured."},"19":{"id":19,"purposes":[7,9],"specialFeatures":[],"name":"Ad measurement, and audience insights","description":"Ad can be measured. Insights about the audiences who saw the ads and content can be derived."},"20":{"id":20,"purposes":[7,8,9,10],"specialFeatures":[],"name":"Ad and content measurement, audience insights, and product development","description":"Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software. Insights about the audiences who saw the ads and content can be derived."},"21":{"id":21,"purposes":[8,9,10],"specialFeatures":[],"name":"Content measurement, audience insights, and product development.","description":"Content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software."},"22":{"id":22,"purposes":[8,10],"specialFeatures":[],"name":"Content measurement, and product development","description":"Content performance can be measured. Data can be used to build or improve user experience, systems, and software."},"23":{"id":23,"purposes":[2,4,6,7,8],"specialFeatures":[],"name":"Personalised ads and content display, ad and content measurement","description":"Ads and content can be personalised based on a profile. Ad and content performance can be measured."},"24":{"id":24,"purposes":[2,4,6,7,8,9],"specialFeatures":[],"name":"Personalised ads and content display, ad and content measurement, and audience insights","description":"Ads and content can be personalised based on a profile. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software."},"25":{"id":25,"purposes":[2,3,4,5,6,7,8],"specialFeatures":[],"name":"Personalised ads and content, ad and content measurement","description":"Ads and content can be personalised based on a profile. More data can be added to better personalise ads and content. Ad and content performance can be measured."},"26":{"id":26,"purposes":[2,3,4,5,6,7,8,9],"specialFeatures":[],"name":"Personalised ads and content, ad and content measurement, and audience insights","description":"Ads and content can be personalised based on a profile. More data can be added to better personalise ads and content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"27":{"id":27,"purposes":[3,5],"specialFeatures":[],"name":"Personalised ads, and content profile","description":"More data can be added to personalise ads and content."},"28":{"id":28,"purposes":[2,4,6],"specialFeatures":[],"name":"Personalised ads and content display","description":"Ads and content can be personalised based on a profile."},"29":{"id":29,"purposes":[2,7,8,9],"specialFeatures":[],"name":"Basic ads, ad and content measurement, and audience insights","description":"Basic ads can be served. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"30":{"id":30,"purposes":[2,4,5,6,7,8,9],"specialFeatures":[],"name":"Personalised ads display, personalised content, ad and content measurement, and audience insights","description":"Ads and content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"31":{"id":31,"purposes":[2,4,5,6,7,8,9,10],"specialFeatures":[],"name":"Personalised ads display, personalised content, ad and content measurement, audience insights, and product development","description":"Ads and content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software."},"32":{"id":32,"purposes":[2,5,6,7,8,9],"specialFeatures":[],"name":"Basic ads, personalised content, ad and content measurement, and audience insights","description":"Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"33":{"id":33,"purposes":[2,5,6,7,8,9,10],"specialFeatures":[],"name":"Basic ads, personalised content, ad and content measurement, audience insights, and product development","description":"Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software."},"34":{"id":34,"purposes":[2,5,6,8,9],"specialFeatures":[],"name":"Basic ads, personalised content, content measurement, and audience insights","description":"Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad and content performance can be measured. Insights about the audiences who saw the ads and content can be derived."},"35":{"id":35,"purposes":[2,5,6,8,9,10],"specialFeatures":[],"name":"Basic ads, personalised content, content measurement, audience insights, and product development","description":"Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Content performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software."},"36":{"id":36,"purposes":[2,5,6,7],"specialFeatures":[],"name":"Basic ads, personalised content, and ad measurement","description":"Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad performance can be measured."},"37":{"id":37,"purposes":[2,5,6,7,10],"specialFeatures":[],"name":"Basic ads, personalised content, ad measurement, and product development","description":"Basic ads can be served. Content can be personalised based on a profile. More data can be added to better personalise content. Ad performance can be measured. Data can be used to build or improve user experience, systems, and software."},"38":{"id":38,"purposes":[2,3,4,7,10],"specialFeatures":[],"name":"Personalised ads, ad measurement, and product development","description":"Ads can be personalised based on a profile. More data can be added to better personalise ads. Ad performance can be measured. Data can be used to build or improve user experience, systems, and software."},"39":{"id":39,"purposes":[2,3,4,7,9,10],"specialFeatures":[],"name":"Personalised ads, ad measurement, audience insights and product development","description":"Ads can be personalised based on a profile. More data can be added to better personalise ads. Ad performance can be measured. Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems and software."},"40":{"id":40,"purposes":[2,3,4,7,8,9,10],"specialFeatures":[],"name":"Personalised ads, ad and content measurement, audience insights and product development","description":"Ads can be personalised based on a profile. More data can be added to better personalise ads. Ad and content performance can be measured. Insights about audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems and software."},"41":{"id":41,"purposes":[2,3,4,6,7,8,9,10],"specialFeatures":[],"name":"Personalised ads, personalised content display, ad and content measurement, audience insights and product development","description":"Ads and content can be personalised based on a profile. More data can be added to better personalise ads. Ad and content performance can be measured. Insights about audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems and software."},"42":{"id":42,"purposes":[2,3,4,5,6,7,8,9,10],"specialFeatures":[],"name":"Personalised ads and content, ad and content measurement, audience insights and product development","description":"Ads and content can be personalised based on a profile. More data can be added to better personalise ads and content. Ad and content performance can be measured. Insights about audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems and software."}},"vendors":{"8":{"id":8,"name":"Emerse Sverige AB","purposes":[1,3,4],"legIntPurposes":[2,7,8,9],"flexiblePurposes":[2,9],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.emerse.com/privacy-policy/"},"9":{"id":9,"name":"AdMaxim Inc.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"http://www.admaxim.com/admaxim-privacy-policy/","deletedDate":"2020-06-17T00:00:00Z"},"12":{"id":12,"name":"BeeswaxIO Corporation","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[1],"policyUrl":"https://www.beeswax.com/privacy/"},"28":{"id":28,"name":"TripleLift, Inc.","purposes":[1],"legIntPurposes":[2,7,9,10],"flexiblePurposes":[2,7,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://triplelift.com/privacy/","overflow":{"httpGetLimit":32}},"25":{"id":25,"name":"Verizon Media EMEA Limited","purposes":[1,3,4,5,6],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[2,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.verizonmedia.com/policies/ie/en/verizonmedia/privacy/index.html"},"26":{"id":26,"name":"Venatus Media Limited","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[],"policyUrl":"https://www.venatusmedia.com/privacy/"},"1":{"id":1,"name":"Exponential Interactive, Inc d/b/a VDX.tv","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,8,9,10],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[],"policyUrl":"https://vdx.tv/privacy/"},"6":{"id":6,"name":"AdSpirit GmbH","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"http://www.adspirit.de/privacy","overflow":{"httpGetLimit":32}},"30":{"id":30,"name":"BidTheatre AB","purposes":[1,3,4],"legIntPurposes":[2],"flexiblePurposes":[2],"specialPurposes":[1,2],"features":[2],"specialFeatures":[],"policyUrl":"https://www.bidtheatre.com/privacy-policy"},"24":{"id":24,"name":"Epsilon","purposes":[1,2,3,4,5,6,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.conversantmedia.eu/legal/privacy-policy"},"39":{"id":39,"name":"ADITION technologies AG","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.adition.com/datenschutz"},"11":{"id":11,"name":"Quantcast International Limited","purposes":[1,3,4],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[2,3,4,7,8,9,10],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[],"policyUrl":"https://www.quantcast.com/privacy/"},"15":{"id":15,"name":"Adikteev","purposes":[1,3,4,5,6,8,9,10],"legIntPurposes":[2,7],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2],"specialFeatures":[],"policyUrl":"https://www.adikteev.com/privacy-policy-eng/"},"4":{"id":4,"name":"Roq.ad Inc.","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[1],"policyUrl":"https://www.roq.ad/privacy-policy"},"7":{"id":7,"name":"Vibrant Media Limited","purposes":[1,3,4,5,6,7,8],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.vibrantmedia.com/en/privacy-policy/"},"2":{"id":2,"name":"Captify Technologies Limited","purposes":[1,2,3,4],"legIntPurposes":[7,9,10],"flexiblePurposes":[2],"specialPurposes":[],"features":[2],"specialFeatures":[],"policyUrl":"http://www.captify.co.uk/privacy-policy/"},"37":{"id":37,"name":"NEURAL.ONE","purposes":[1,2,3,4,5,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://web.neural.one/privacy-policy/"},"13":{"id":13,"name":"Sovrn Holdings Inc","purposes":[1,2,3,5,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.sovrn.com/sovrn-privacy/"},"34":{"id":34,"name":"NEORY GmbH","purposes":[1,3,4,5,6,9],"legIntPurposes":[2,7,8],"flexiblePurposes":[2,3,4,5,6,7,8,9],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.neory.com/privacy.html","overflow":{"httpGetLimit":128}},"32":{"id":32,"name":"Xandr, Inc.","purposes":[1,3,4],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,7,10],"specialPurposes":[1,2],"features":[2],"specialFeatures":[1],"policyUrl":"https://www.xandr.com/privacy/platform-privacy-policy/"},"10":{"id":10,"name":"Index Exchange, Inc. ","purposes":[1,2,7],"legIntPurposes":[],"flexiblePurposes":[2,7],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.indexexchange.com/privacy"},"57":{"id":57,"name":"ADARA MEDIA UNLIMITED","purposes":[1,2,3,4],"legIntPurposes":[7,9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://adara.com/privacy-promise/"},"63":{"id":63,"name":"Avocet Systems Limited","purposes":[1,2,3,4,5,6],"legIntPurposes":[7,8,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://avocet.io/privacy-portal"},"51":{"id":51,"name":"xAd, Inc. dba GroundTruth","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.groundtruth.com/privacy-policy/"},"49":{"id":49,"name":"TRADELAB","purposes":[1,2,3,4,5,6],"legIntPurposes":[7,8,9,10],"flexiblePurposes":[7,8,9,10],"specialPurposes":[],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://tradelab.com/en/privacy/","overflow":{"httpGetLimit":32}},"45":{"id":45,"name":"Smart Adserver","purposes":[1,2,4,7],"legIntPurposes":[],"flexiblePurposes":[2,7],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://smartadserver.com/end-user-privacy-policy/"},"52":{"id":52,"name":"The Rubicon Project, Inc. ","purposes":[1],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,7,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"http://www.rubiconproject.com/rubicon-project-yield-optimization-privacy-policy/","overflow":{"httpGetLimit":128}},"71":{"id":71,"name":"Roku Advertising Services","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://docs.roku.com/published/userprivacypolicy/en/us"},"79":{"id":79,"name":"MediaMath, Inc.","purposes":[1,3,4],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,3,4,7,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://www.mediamath.com/privacy-policy/"},"91":{"id":91,"name":"Criteo SA","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.criteo.com/privacy/"},"85":{"id":85,"name":"Crimtan Holdings Limited","purposes":[1,3,4],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[2,7,8,9,10],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[1],"policyUrl":"https://crimtan.com/privacy/"},"16":{"id":16,"name":"RTB House S.A.","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"https://www.rtbhouse.com/privacy-center/services-privacy-policy/"},"86":{"id":86,"name":"Scene Stealer Limited","purposes":[1],"legIntPurposes":[2,3,4,7,10],"flexiblePurposes":[2,3,4,7],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://scenestealer.tv/privacy-policy/"},"94":{"id":94,"name":"Blis Media Limited","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://www.blis.com/privacy/"},"73":{"id":73,"name":"Simplifi Holdings Inc.","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4],"specialPurposes":[],"features":[2],"specialFeatures":[1],"policyUrl":"https://simpli.fi/site-privacy-policy/"},"33":{"id":33,"name":"ShareThis, Inc","purposes":[1,3,5,6],"legIntPurposes":[9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://sharethis.com/privacy/"},"20":{"id":20,"name":"N Technologies Inc.","purposes":[1,3,4],"legIntPurposes":[2,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[2],"specialFeatures":[1],"policyUrl":"https://n.rich/privacy-notice"},"53":{"id":53,"name":"Sirdata","purposes":[1,2,3,4,5,6,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.sirdata.com/privacy/"},"69":{"id":69,"name":"OpenX","purposes":[1],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.openx.com/legal/privacy-policy/"},"98":{"id":98,"name":"GroupM UK Limited","purposes":[1,2,3,4,5,6],"legIntPurposes":[7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.groupm.com/privacy-notice"},"62":{"id":62,"name":"Justpremium BV","purposes":[1,4,5,10],"legIntPurposes":[2,7],"flexiblePurposes":[2,4,7,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://justpremium.com/privacy-policy/"},"36":{"id":36,"name":"RhythmOne DBA Unruly Group Ltd","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.rhythmone.com/privacy-policy"},"80":{"id":80,"name":"Sharethrough, Inc","purposes":[1,2,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,4,7,9,10],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://platform-cdn.sharethrough.com/privacy-policy"},"23":{"id":23,"name":"Amobee, Inc. ","purposes":[1,2,3,4],"legIntPurposes":[7,9,10],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.amobee.com/trust/privacy-guidelines"},"67":{"id":67,"name":"LifeStreet Corporation","purposes":[1,3,4],"legIntPurposes":[2,5,6,7,8,10],"flexiblePurposes":[2,5,6,7,8,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://lifestreet.com/privacy/"},"68":{"id":68,"name":"Sizmek by Amazon","purposes":[1,3,4],"legIntPurposes":[2,7,9,10],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.sizmek.com/privacy-policy/"},"61":{"id":61,"name":"GumGum, Inc.","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://gumgum.com/privacy-policy"},"40":{"id":40,"name":"Active Agent (ADITION technologies AG)","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://www.active-agent.com/de/unternehmen/datenschutzerklaerung/"},"76":{"id":76,"name":"PubMatic, Inc.","purposes":[1,3,4],"legIntPurposes":[2,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://pubmatic.com/privacy-policy/"},"89":{"id":89,"name":"Tapad, Inc.","purposes":[1],"legIntPurposes":[10],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[],"policyUrl":"https://www.tapad.com/eu-privacy-policy"},"66":{"id":66,"name":"adsquare GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.adsquare.com/privacy"},"41":{"id":41,"name":"Adverline","purposes":[1,2,3,4,5,6,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.adverline.com/privacy/","overflow":{"httpGetLimit":128}},"82":{"id":82,"name":"Smaato, Inc.","purposes":[1,2,3,4,7,9],"legIntPurposes":[10],"flexiblePurposes":[2,7,9,10],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[1],"policyUrl":"https://www.smaato.com/privacy/"},"60":{"id":60,"name":"Rakuten Marketing LLC","purposes":[1,3,4],"legIntPurposes":[2,7,9,10],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://rakutenadvertising.com/legal-notices/services-privacy-policy/"},"70":{"id":70,"name":"Yieldlab AG","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://www.yieldlab.de/meta-navigation/datenschutz/","overflow":{"httpGetLimit":128}},"50":{"id":50,"name":"Adform","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[2,7,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://site.adform.com/privacy-center/platform-privacy/product-and-services-privacy-policy/","overflow":{"httpGetLimit":32}},"100":{"id":100,"name":"Fifty Technology Limited","purposes":[1,2,3,4],"legIntPurposes":[7,9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[],"policyUrl":"https://fifty.io/privacy-policy.php"},"21":{"id":21,"name":"The Trade Desk","purposes":[1,3,4],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,7,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://www.thetradedesk.com/general/privacy-policy"},"110":{"id":110,"name":"Dynata LLC","purposes":[1,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.opinionoutpost.co.uk/en-gb/policies/privacy"},"42":{"id":42,"name":"Taboola Europe Limited","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,10],"flexiblePurposes":[2,3,4,5,6,7,8,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.taboola.com/privacy-policy"},"77":{"id":77,"name":"comScore, Inc.","purposes":[1,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[7,8,9,10],"specialPurposes":[1],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.scorecardresearch.com/privacy.aspx?newlanguage=1"},"109":{"id":109,"name":"LoopMe Limited","purposes":[1,2,3,4,5,6,7,8],"legIntPurposes":[9,10],"flexiblePurposes":[9],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://loopme.com/privacy-policy/"},"120":{"id":120,"name":"Eyeota Pte Ltd","purposes":[1,3,5,9,10],"legIntPurposes":[],"flexiblePurposes":[3,5,9,10],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.eyeota.com/privacy-center"},"93":{"id":93,"name":"Adloox SA","purposes":[],"legIntPurposes":[7],"flexiblePurposes":[],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"http://adloox.com/disclaimer","overflow":{"httpGetLimit":128}},"132":{"id":132,"name":"Teads ","purposes":[1,3,4],"legIntPurposes":[2,7,9,10],"flexiblePurposes":[2,7,9,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.teads.com/privacy-policy/"},"22":{"id":22,"name":"admetrics GmbH","purposes":[2,7,8,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://admetrics.io/en/privacy_policy/"},"102":{"id":102,"name":"Telaria SAS","purposes":[1,2,3,4,5,6],"legIntPurposes":[7,8,9,10],"flexiblePurposes":[5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://telaria.com/privacy-policy/"},"108":{"id":108,"name":"Rich Audience Technologies SL","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://richaudience.com/privacy/"},"18":{"id":18,"name":"Widespace AB","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.widespace.com/legal/privacy-policy-notice/"},"122":{"id":122,"name":"Avid Media Ltd","purposes":[1,3,4,5,10],"legIntPurposes":[2,7,8],"flexiblePurposes":[2,7,8],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.avidglobalmedia.eu/privacy-policy.html"},"97":{"id":97,"name":"LiveRamp, Inc.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.liveramp.com/service-privacy-policy/"},"138":{"id":138,"name":"ConnectAd Realtime GmbH","purposes":[1,3,4,5],"legIntPurposes":[2,7],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"http://connectadrealtime.com/privacy/"},"72":{"id":72,"name":"Nano Interactive GmbH","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://www.nanointeractive.com/privacy"},"127":{"id":127,"name":"PIXIMEDIA SAS","purposes":[1,3,4,5,6,9,10],"legIntPurposes":[2,7,8],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://piximedia.com/privacy/","overflow":{"httpGetLimit":128}},"136":{"id":136,"name":"Str\u00f6er SSP GmbH (SSP)","purposes":[1],"legIntPurposes":[2,7,9,10],"flexiblePurposes":[2,7,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.stroeer.de/fileadmin/de/Konvergenz_und_Konzepte/Daten_und_Technologien/Stroeer_SSP/Downloads/Datenschutz_Stroeer_SSP.pdf"},"111":{"id":111,"name":"Showheroes SE","purposes":[1,3,4,9,10],"legIntPurposes":[2,7,8],"flexiblePurposes":[2,3,4,7,8,9,10],"specialPurposes":[1,2],"features":[1],"specialFeatures":[],"policyUrl":"https://showheroes.com/privacy/"},"124":{"id":124,"name":"Teemo SA","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1],"specialFeatures":[1],"policyUrl":"https://teemo.co/fr/confidentialite/"},"154":{"id":154,"name":"YOC AG","purposes":[1,3,4,10],"legIntPurposes":[2,7],"flexiblePurposes":[2,7],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://yoc.com/privacy/"},"101":{"id":101,"name":"MiQ","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://wearemiq.com/privacy-policy/"},"149":{"id":149,"name":"ADman Interactive SLU","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2],"specialPurposes":[],"features":[2,3],"specialFeatures":[],"policyUrl":"https://admanmedia.com/politica.html?setLng=es"},"153":{"id":153,"name":"MADVERTISE MEDIA","purposes":[1,2,3,4,5,6,7,9,10],"legIntPurposes":[],"flexiblePurposes":[5,6,10],"specialPurposes":[2],"features":[],"specialFeatures":[1,2],"policyUrl":"https://madvertise.com/en/gdpr/","overflow":{"httpGetLimit":128}},"157":{"id":157,"name":"Seedtag Advertising S.L","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.seedtag.com/en/privacy-policy/"},"145":{"id":145,"name":"Snapsort Inc., operating as Sortable","purposes":[1],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://help.sortable.com/help/privacy-policy"},"131":{"id":131,"name":"ID5 Technology SAS","purposes":[1],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[],"policyUrl":"https://www.id5.io/privacy"},"158":{"id":158,"name":"Reveal Mobile, Inc","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://revealmobile.com/privacy"},"147":{"id":147,"name":"Adacado Technologies Inc. (DBA Adacado)","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[7,8,9,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.adacado.com/privacy-policy-april-25-2018/"},"130":{"id":130,"name":"NextRoll, Inc.","purposes":[1,2,3,4,5,6,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.nextroll.com/privacy"},"129":{"id":129,"name":"IPONWEB GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.iponweb.com/privacy-policy/"},"128":{"id":128,"name":"BIDSWITCH GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,3],"specialFeatures":[1],"policyUrl":"http://www.bidswitch.com/privacy-policy/"},"168":{"id":168,"name":"EASYmedia GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://login.rtbmarket.com/gdpr"},"164":{"id":164,"name":"Outbrain UK Ltd","purposes":[1],"legIntPurposes":[3,4,5,6,7,8,9,10],"flexiblePurposes":[3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[],"policyUrl":"https://www.outbrain.com/legal/privacy#privacy-policy"},"144":{"id":144,"name":"district m inc.","purposes":[1,2,4,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[3],"specialFeatures":[1],"policyUrl":"https://districtm.net/en/page/platforms-data-and-privacy-policy/","overflow":{"httpGetLimit":128}},"163":{"id":163,"name":"Bombora Inc.","purposes":[1,3,8],"legIntPurposes":[7,9,10],"flexiblePurposes":[7,9,10],"specialPurposes":[1],"features":[1,3],"specialFeatures":[],"policyUrl":"https://bombora.com/privacy"},"173":{"id":173,"name":"Yieldmo, Inc.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.yieldmo.com/privacy/"},"88":{"id":88,"name":"TreSensa, Inc.","purposes":[1,3,4],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,3,4,7,10],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[],"policyUrl":"https://www.tresensa.com/eu-privacy"},"78":{"id":78,"name":"Flashtalking, Inc.","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://www.flashtalking.com/privacypolicy/"},"59":{"id":59,"name":"Sift Media, Inc","purposes":[2],"legIntPurposes":[],"flexiblePurposes":[2],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.sift.co/privacy"},"114":{"id":114,"name":"Sublime","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"http://ayads.co/privacy.php"},"133":{"id":133,"name":"digitalAudience","purposes":[1,3,5,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2],"specialFeatures":[],"policyUrl":"https://digitalaudience.io/legal/privacy-cookies/"},"14":{"id":14,"name":"Adkernel LLC","purposes":[1,3,4],"legIntPurposes":[2,7,9],"flexiblePurposes":[3,4],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"http://adkernel.com/privacy-policy/","overflow":{"httpGetLimit":32}},"183":{"id":183,"name":"EMX Digital LLC","purposes":[1,3,4,5,6],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://emxdigital.com/privacy/"},"58":{"id":58,"name":"33Across","purposes":[1,2,4,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2],"specialFeatures":[],"policyUrl":"http://www.33across.com/privacy-policy"},"140":{"id":140,"name":"Platform161","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[1],"policyUrl":"https://platform161.com/cookie-and-privacy-policy/"},"90":{"id":90,"name":"Teroa S.A.","purposes":[1,2,3,4,5,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.e-planning.net/en/privacy.html"},"141":{"id":141,"name":"1020, Inc. dba Placecast and Ericsson Emodo","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.emodoinc.com/privacy-policy/"},"142":{"id":142,"name":"Media.net Advertising FZ-LLC","purposes":[1,3,4],"legIntPurposes":[2,5,6,7,8,9,10],"flexiblePurposes":[5,6,8],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.media.net/en/privacy-policy"},"209":{"id":209,"name":"Delta Projects AB","purposes":[1,2,3,4],"legIntPurposes":[7,10],"flexiblePurposes":[2,7,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://deltaprojects.com/data-collection-policy"},"195":{"id":195,"name":"advanced store GmbH","purposes":[1,3,4],"legIntPurposes":[2],"flexiblePurposes":[2],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://www.advanced-store.com/de/datenschutz/"},"190":{"id":190,"name":"video intelligence AG","purposes":[],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.vi.ai/privacy-policy/"},"84":{"id":84,"name":"Semasio GmbH","purposes":[1,3,9,10],"legIntPurposes":[],"flexiblePurposes":[3,9,10],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"http://www.semasio.com/privacy-policy/"},"65":{"id":65,"name":"Location Sciences AI Ltd","purposes":[1,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[7,8],"specialPurposes":[1],"features":[],"specialFeatures":[1],"policyUrl":"https://www.locationsciences.ai/privacy-policy/"},"210":{"id":210,"name":"Zemanta, Inc.","purposes":[1],"legIntPurposes":[3,7,9,10],"flexiblePurposes":[3,7,9,10],"specialPurposes":[1,2],"features":[1],"specialFeatures":[],"policyUrl":"http://www.zemanta.com/legal/privacy"},"200":{"id":200,"name":"Tapjoy, Inc.","purposes":[1],"legIntPurposes":[2,3,4,7],"flexiblePurposes":[2,3,4,7],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.tapjoy.com/legal/#privacy-policy"},"217":{"id":217,"name":"2KDirect, Inc. (dba iPromote)","purposes":[1],"legIntPurposes":[2,3,4,7,9,10],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.ipromote.com/privacy-policy/"},"194":{"id":194,"name":"Rezonence Limited","purposes":[1,3,4,9],"legIntPurposes":[2,7,8,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://rezonence.com/privacy-policy/"},"226":{"id":226,"name":"Publicis Media GmbH","purposes":[1,9],"legIntPurposes":[2,3,4,5,6,7,8,10],"flexiblePurposes":[2,3,4,5,6,7,8,10],"specialPurposes":[],"features":[1],"specialFeatures":[],"policyUrl":"https://www.publicismedia.de/datenschutz/"},"227":{"id":227,"name":"ORTEC B.V.","purposes":[1,2,3,4,5,6,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.ortecadscience.com/privacy-policy/"},"205":{"id":205,"name":"Adssets AB","purposes":[1,3,4,5,8,9],"legIntPurposes":[2,7],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"http://adssets.com/policy/"},"179":{"id":179,"name":"Collective Europe Ltd.","purposes":[1,2,3,4,9],"legIntPurposes":[7],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://www.collectiveuk.com/privacy.html","overflow":{"httpGetLimit":128}},"31":{"id":31,"name":"Ogury Ltd.","purposes":[1,3,4,9],"legIntPurposes":[2,7,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2],"specialFeatures":[],"policyUrl":"https://www.ogury.com/privacy-policy/"},"92":{"id":92,"name":"1plusX AG","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.1plusx.com/privacy-policy/"},"155":{"id":155,"name":"AntVoice","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://www.antvoice.com/en/privacypolicy/"},"115":{"id":115,"name":"smartclip Europe GmbH","purposes":[1,3,4],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,3,4,7,10],"specialPurposes":[1,2],"features":[2],"specialFeatures":[],"policyUrl":"https://privacy-portal.smartclip.net/","overflow":{"httpGetLimit":32}},"126":{"id":126,"name":"DoubleVerify Inc.\u200b","purposes":[2,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.doubleverify.com/privacy/"},"193":{"id":193,"name":"Mediasmart Mobile S.L.","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"http://mediasmart.io/privacy/"},"213":{"id":213,"name":"emetriq GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.emetriq.com/datenschutz/"},"244":{"id":244,"name":"Temelio","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://temelio.com/vie-privee"},"224":{"id":224,"name":"adrule mobile GmbH","purposes":[1,2,3,4,5,6,8],"legIntPurposes":[7],"flexiblePurposes":[2,3,4,5,6,7,8],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://www.adrule.net/de/datenschutz/"},"174":{"id":174,"name":"A Million Ads Ltd","purposes":[2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[1],"policyUrl":"https://www.amillionads.com/privacy-policy"},"192":{"id":192,"name":"remerge GmbH","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://remerge.io/privacy-policy.html"},"256":{"id":256,"name":"Bounce Exchange, Inc","purposes":[1],"legIntPurposes":[7,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.bouncex.com/privacy/"},"234":{"id":234,"name":"ZBO Media","purposes":[1,3,4,9],"legIntPurposes":[2,7,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1],"specialFeatures":[],"policyUrl":"https://zbo.media/mentions-legales/politique-de-confidentialite-service-publicitaire/"},"246":{"id":246,"name":"Smartology Limited","purposes":[1,3,4,8],"legIntPurposes":[2,7],"flexiblePurposes":[2,7],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.smartology.net/privacy-policy/"},"241":{"id":241,"name":"OneTag Limited","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[7],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.onetag.com/privacy/"},"254":{"id":254,"name":"LiquidM Technology GmbH","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://liquidm.com/privacy-policy/"},"215":{"id":215,"name":"ARMIS SAS","purposes":[1,2,7],"legIntPurposes":[10],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://armis.tech/en/armis-personal-data-privacy-policy/"},"167":{"id":167,"name":"Audiens S.r.l.","purposes":[1,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"http://www.audiens.com/privacy"},"240":{"id":240,"name":"7Hops.com Inc. (ZergNet)","purposes":[1],"legIntPurposes":[5,6,8,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://zergnet.com/privacy"},"235":{"id":235,"name":"Bucksense Inc","purposes":[2,3,4,7,9],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"http://www.bucksense.com/platform-privacy-policy/"},"185":{"id":185,"name":"Bidtellect, Inc","purposes":[1,2,3,4,7,8],"legIntPurposes":[9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.bidtellect.com/privacy-policy/","overflow":{"httpGetLimit":128}},"211":{"id":211,"name":"AdTheorent, Inc","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"http://adtheorent.com/privacy-policy"},"273":{"id":273,"name":"Bannerflow AB","purposes":[1,4],"legIntPurposes":[2,7],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.bannerflow.com/privacy "},"104":{"id":104,"name":"Sonobi, Inc","purposes":[1,2,3,4],"legIntPurposes":[7,8],"flexiblePurposes":[],"specialPurposes":[2],"features":[1],"specialFeatures":[],"policyUrl":"http://sonobi.com/privacy-policy/"},"162":{"id":162,"name":"Unruly Group Ltd","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://unruly.co/privacy/"},"249":{"id":249,"name":"Spolecznosci Sp. z o.o. Sp. k.","purposes":[1,2,3,4,5,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.spolecznosci.pl/polityka-prywatnosci"},"160":{"id":160,"name":"Netsprint SA","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://netsprint.eu/privacy.html","overflow":{"httpGetLimit":32}},"279":{"id":279,"name":"Mirando GmbH & Co KG","purposes":[1],"legIntPurposes":[2,7],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://wwwmirando.de/datenschutz/"},"255":{"id":255,"name":"Onnetwork Sp. z o.o.","purposes":[1,5,6],"legIntPurposes":[2,7,8],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://www.onnetwork.tv/pp_services.php"},"203":{"id":203,"name":"Revcontent, LLC","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://intercom.help/revcontent2/en/articles/2290675-revcontent-s-privacy-policy"},"274":{"id":274,"name":"Golden Bees","purposes":[1,2,3,4,6,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[],"policyUrl":"https://www.goldenbees.fr/en/privacy-charter/","overflow":{"httpGetLimit":128}},"280":{"id":280,"name":"Spot.IM LTD","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.spot.im/privacy/"},"239":{"id":239,"name":"Triton Digital Canada Inc.","purposes":[1,3,4,5,6],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[2,7,8,9,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.tritondigital.com/privacy-policies"},"177":{"id":177,"name":"plista GmbH","purposes":[1],"legIntPurposes":[7,8,10],"flexiblePurposes":[7,8,10],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://www.plista.com/about/privacy/"},"150":{"id":150,"name":"Inskin Media LTD","purposes":[1,3,4,9,10],"legIntPurposes":[2,7],"flexiblePurposes":[2,7],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"http://www.inskinmedia.com/privacy-policy.html"},"252":{"id":252,"name":"Jaduda GmbH","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.jadudamobile.com/datenschutzerklaerung/"},"248":{"id":248,"name":"Converge-Digital","purposes":[1],"legIntPurposes":[2],"flexiblePurposes":[2],"specialPurposes":[],"features":[3],"specialFeatures":[],"policyUrl":"https://converge-digital.com/privacy-policy/","overflow":{"httpGetLimit":32}},"161":{"id":161,"name":"Smadex SL","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://smadex.com/end-user-privacy-policy/"},"285":{"id":285,"name":"Comcast International France SAS","purposes":[1],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.freewheel.com/privacy-policy"},"228":{"id":228,"name":"McCann Discipline LTD","purposes":[1,2,5,6,7,8],"legIntPurposes":[],"flexiblePurposes":[2,5,6,7,8],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.primis.tech/privacy-policy/"},"299":{"id":299,"name":"AdClear GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.adclear.de/datenschutzerklaerung/"},"277":{"id":277,"name":"Codewise VL Sp. z o.o. Sp. k","purposes":[1,2,3,4,7,9],"legIntPurposes":[10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://voluumdsp.com/end-user-privacy-policy/"},"259":{"id":259,"name":"ADYOULIKE SA","purposes":[1,3,4],"legIntPurposes":[2,7,8],"flexiblePurposes":[8],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.adyoulike.com/privacy_policy.php"},"289":{"id":289,"name":"mobalo GmbH","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1],"specialFeatures":[1],"policyUrl":"https://www.mobalo.com/en/privacy/"},"272":{"id":272,"name":"A.Mob","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.we-are-adot.com/privacy-policy/"},"253":{"id":253,"name":"Improve Digital BV","purposes":[1,3,4,9],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,7,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.improvedigital.com/platform-privacy-policy","overflow":{"httpGetLimit":128}},"304":{"id":304,"name":"On Device Research Limited","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://s.on-device.com/privacyPolicy"},"314":{"id":314,"name":"Keymantics","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.keymantics.com/assets/privacy-policy.pdf"},"317":{"id":317,"name":"mainADV Srl","purposes":[1,2,3,4,5,6,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://www.mainad.com/privacy-policy/"},"278":{"id":278,"name":"Integral Ad Science, Inc.","purposes":[],"legIntPurposes":[7,10],"flexiblePurposes":[],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"https://integralads.com/privacy-policy/"},"315":{"id":315,"name":"Celtra, Inc.","purposes":[1,2,4,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://www.celtra.com/privacy-policy/"},"165":{"id":165,"name":"SpotX, Inc.","purposes":[1,3,4],"legIntPurposes":[2,7,9,10],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.spotx.tv/privacy-policy/","overflow":{"httpGetLimit":32}},"47":{"id":47,"name":"ADMAN - Phaistos Networks, S.A.","purposes":[1,2,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://www.adman.gr/privacy"},"134":{"id":134,"name":"SMARTSTREAM.TV GmbH","purposes":[1],"legIntPurposes":[2,3,4,7,9,10],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.smartstream.tv/en/productprivacy","overflow":{"httpGetLimit":32}},"325":{"id":325,"name":"Knorex","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.knorex.com/privacy"},"316":{"id":316,"name":"Gamned","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://www.gamned.com/privacy-policy/"},"318":{"id":318,"name":"Accorp Sp. z o.o.","purposes":[1,3,4,9],"legIntPurposes":[7,10],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[],"policyUrl":"http://www.instytut-pollster.pl/privacy-policy/"},"199":{"id":199,"name":"ADUX","purposes":[1,2,3,4,6,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[1],"policyUrl":"https://www.adux.com/donnees-personelles/"},"294":{"id":294,"name":"Jivox Corporation","purposes":[1,2,3,4,5,7],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,7],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.jivox.com/privacy","overflow":{"httpGetLimit":32}},"143":{"id":143,"name":"Connatix Native Exchange Inc.","purposes":[1,2,4,6,7,8,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[],"policyUrl":"https://connatix.com/privacy-policy/"},"297":{"id":297,"name":"Polar Mobile Group Inc.","purposes":[1,3,4],"legIntPurposes":[2,7,8,10],"flexiblePurposes":[2,7,8,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://privacy.polar.me"},"319":{"id":319,"name":"Clipcentric, Inc.","purposes":[1],"legIntPurposes":[2,7,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://clipcentric.com/privacy.bhtml"},"290":{"id":290,"name":"Readpeak Oy","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"http://readpeak.com/privacy-policy/"},"323":{"id":323,"name":"DAZN Media Services Limited","purposes":[1,3,4,7],"legIntPurposes":[2,8,10],"flexiblePurposes":[8,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.goal.com/en-gb/legal/privacy-policy"},"119":{"id":119,"name":"Fusio by S4M","purposes":[1,3,4,10],"legIntPurposes":[],"flexiblePurposes":[3,4,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"http://www.s4m.io/privacy-policy/"},"302":{"id":302,"name":"Mobile Professionals BV","purposes":[1,2,3,4,5,7,8,9],"legIntPurposes":[],"flexiblePurposes":[3,5,7,8],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://mobpro.com/privacy.html"},"212":{"id":212,"name":"usemax advertisement (Emego GmbH)","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://www.usemax.de/?l=privacy"},"264":{"id":264,"name":"Adobe Advertising Cloud","purposes":[1,2,3,4,10],"legIntPurposes":[7],"flexiblePurposes":[2],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.adobe.com/privacy/experience-cloud.html"},"44":{"id":44,"name":"The ADEX GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://theadex.com/privacy-opt-out/"},"282":{"id":282,"name":"Welect GmbH","purposes":[10],"legIntPurposes":[2,7],"flexiblePurposes":[2],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://www.welect.de/datenschutz"},"238":{"id":238,"name":"StackAdapt","purposes":[1,2,3,4],"legIntPurposes":[7,9,10],"flexiblePurposes":[],"specialPurposes":[2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://www.stackadapt.com/privacy"},"284":{"id":284,"name":"WEBORAMA","purposes":[1,3,4],"legIntPurposes":[2,5,6,7,8,9,10],"flexiblePurposes":[2,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://weborama.com/privacy_en/"},"301":{"id":301,"name":"zeotap GmbH","purposes":[1,3,4,5,6,7,9,10],"legIntPurposes":[],"flexiblePurposes":[3,4,5,6,7,9,10],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://zeotap.com/privacy_policy"},"275":{"id":275,"name":"TabMo SAS","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://static.tabmo.io.s3.amazonaws.com/privacy-policy/index.html"},"310":{"id":310,"name":"Adevinta Spain S.L.U.","purposes":[1,2,3,4,9],"legIntPurposes":[7,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.adevinta.com/about/privacy/"},"139":{"id":139,"name":"Permodo GmbH","purposes":[1,2,7,8,10],"legIntPurposes":[],"flexiblePurposes":[2,7,8,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://permodo.com/de/privacy.html","overflow":{"httpGetLimit":32}},"262":{"id":262,"name":"Fyber ","purposes":[1,2,3,4,5,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.fyber.com/legal/privacy-policy/"},"331":{"id":331,"name":"ad6media","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,10],"flexiblePurposes":[2,3,4,5,6],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[1,2],"policyUrl":"https://www.ad6media.fr/privacy"},"345":{"id":345,"name":"The Kantar Group Limited","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,8,9,10],"specialPurposes":[2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"http://www.kantar.com/cookies-policies"},"270":{"id":270,"name":"Marfeel Solutions, SL","purposes":[1],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.marfeel.com/privacy-policy/"},"333":{"id":333,"name":"InMobi Pte Ltd","purposes":[1,2,3,4,9,10],"legIntPurposes":[],"flexiblePurposes":[9],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.inmobi.com/privacy-policy-for-eea"},"202":{"id":202,"name":"Telaria, Inc","purposes":[1,2,3,4,5,6],"legIntPurposes":[7,8,9,10],"flexiblePurposes":[5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://telaria.com/privacy-policy/"},"328":{"id":328,"name":"Gemius SA","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[],"policyUrl":"https://www.gemius.com/cookie-policy.html"},"281":{"id":281,"name":"Wizaly","purposes":[1,7,8,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.wizaly.com/terms-of-use#privacy-policy"},"354":{"id":354,"name":"Apester Ltd","purposes":[2,4],"legIntPurposes":[6,7,8,9,10],"flexiblePurposes":[7],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://apester.com/privacy-policy/"},"359":{"id":359,"name":"AerServ LLC","purposes":[1,2,3,4,9,10],"legIntPurposes":[],"flexiblePurposes":[9],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.inmobi.com/privacy-policy-for-eea"},"265":{"id":265,"name":"Instinctive, Inc.","purposes":[1,2,3,4,5,6,7,8],"legIntPurposes":[9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://instinctive.io/privacy"},"303":{"id":303,"name":"Orion Semantics","purposes":[1,2,3,4,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"http://static.orion-semantics.com/privacy.html"},"83":{"id":83,"name":"Visarity Technologies GmbH","purposes":[2,6,7,8],"legIntPurposes":[],"flexiblePurposes":[2],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://primo.design/docs/PrivacyPolicyPrimo.html"},"343":{"id":343,"name":"DIGITEKA Technologies","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[1],"policyUrl":"https://www.ultimedia.com/POLICY.html"},"231":{"id":231,"name":"AcuityAds Inc.","purposes":[1,3,4],"legIntPurposes":[2,7,8,10],"flexiblePurposes":[3,4],"specialPurposes":[1,2],"features":[2],"specialFeatures":[],"policyUrl":"https://privacy.acuityads.com/corporate-privacy-policy.html","overflow":{"httpGetLimit":128}},"216":{"id":216,"name":"Mindlytix SAS","purposes":[1,2,3,5,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[1,2],"specialFeatures":[],"policyUrl":"http://mindlytix.com/privacy/"},"360":{"id":360,"name":"Permutive Technologies, Inc.","purposes":[1],"legIntPurposes":[3,5,7,8,9],"flexiblePurposes":[3,5,7,8,9],"specialPurposes":[],"features":[1,2],"specialFeatures":[],"policyUrl":"https://permutive.com/privacy/"},"361":{"id":361,"name":"Permutive Limited","purposes":[1],"legIntPurposes":[3,5,7,8,9],"flexiblePurposes":[3,5,7,8,9],"specialPurposes":[],"features":[1,2],"specialFeatures":[],"policyUrl":"https://permutive.com/privacy/"},"311":{"id":311,"name":"Mobfox US LLC","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://www.mobfox.com/privacy-policy/"},"358":{"id":358,"name":"MGID Inc.","purposes":[2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.mgid.com/privacy-policy"},"152":{"id":152,"name":"Meetrics GmbH","purposes":[1,9],"legIntPurposes":[7],"flexiblePurposes":[7],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"https://www.meetrics.com/en/data-privacy/"},"251":{"id":251,"name":"Yieldlove GmbH","purposes":[1],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,7,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://www.yieldlove.com/cookie-policy"},"371":{"id":371,"name":"Seeding Alliance GmbH","purposes":[1,3,4,5,6],"legIntPurposes":[2,7,8,10],"flexiblePurposes":[2,7,8,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://seeding-alliance.de/datenschutz/"},"347":{"id":347,"name":"Ezoic Inc.","purposes":[1,7,8,9],"legIntPurposes":[6,10],"flexiblePurposes":[6,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.ezoic.com/terms/"},"218":{"id":218,"name":"Bigabid Media ltd","purposes":[1,3,4],"legIntPurposes":[2,5,6,7,8,9,10],"flexiblePurposes":[],"specialPurposes":[1],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.bigabid.com/privacy-policy"},"350":{"id":350,"name":"Free Stream Media Corp. dba Samba TV","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://samba.tv/legal/privacy-policy/","overflow":{"httpGetLimit":128}},"351":{"id":351,"name":"Samba TV UK Limited","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://samba.tv/legal/privacy-policy/","overflow":{"httpGetLimit":128}},"380":{"id":380,"name":"Vidoomy Media SL","purposes":[2,3,4,5,6,7,8],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"http://vidoomy.com/privacy-policy.html"},"184":{"id":184,"name":"mediarithmics SAS","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,7],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.mediarithmics.com/en-us/content/privacy-policy"},"368":{"id":368,"name":"VECTAURY","purposes":[1,2,3,4,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.vectaury.io/en/personal-data"},"373":{"id":373,"name":"Nielsen Marketing Cloud","purposes":[1,3,5],"legIntPurposes":[7,8,9,10],"flexiblePurposes":[],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://www.nielsen.com/us/en/privacy-statement/exelate-privacy-policy.html"},"388":{"id":388,"name":"numberly","purposes":[1,3,4,5,6,9],"legIntPurposes":[2,7,8,10],"flexiblePurposes":[2,7,8,10],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://numberly.com/en/privacy/"},"250":{"id":250,"name":"Qriously Ltd","purposes":[2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://www.brandwatch.com/legal/qriously-privacy-notice/"},"223":{"id":223,"name":"Audience Trading Platform Ltd.","purposes":[1],"legIntPurposes":[7,8],"flexiblePurposes":[7,8],"specialPurposes":[],"features":[2],"specialFeatures":[],"policyUrl":"https://atp.io/privacy-policy"},"384":{"id":384,"name":"Pixalate, Inc.","purposes":[],"legIntPurposes":[7,8,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1,2],"policyUrl":"https://pixalate.com/privacypolicy/"},"387":{"id":387,"name":"Triapodi Ltd.","purposes":[2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[],"policyUrl":"https://appreciate.mobi/page.html#/end-user-privacy-policy"},"312":{"id":312,"name":"Exactag GmbH","purposes":[1,3,7,8],"legIntPurposes":[],"flexiblePurposes":[3,7,8],"specialPurposes":[1],"features":[2],"specialFeatures":[],"policyUrl":"https://www.exactag.com/en/data-privacy/","overflow":{"httpGetLimit":128}},"178":{"id":178,"name":"Hybrid Theory","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[7,8,9,10],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"https://hybridtheory.com/privacy-policy/"},"377":{"id":377,"name":"AddApptr GmbH","purposes":[1],"legIntPurposes":[7,10],"flexiblePurposes":[7,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://www.addapptr.com/data-privacy"},"382":{"id":382,"name":"The Reach Group GmbH","purposes":[1,3,4,5,6,9],"legIntPurposes":[2,7,8],"flexiblePurposes":[2,3,4,5,6,7,8,9],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://trg.de/en/privacy-statement/","overflow":{"httpGetLimit":128}},"206":{"id":206,"name":"Hybrid Adtech GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://hybrid.ai/data_protection_policy"},"385":{"id":385,"name":"Oracle Data Cloud","purposes":[1,3,5,9,10],"legIntPurposes":[7],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.oracle.com/legal/privacy/marketing-cloud-data-cloud-privacy-policy.html"},"242":{"id":242,"name":"twiago GmbH","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.twiago.com/datenschutz/","overflow":{"httpGetLimit":32}},"402":{"id":402,"name":"Effiliation","purposes":[1,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://inter.effiliation.com/politique-confidentialite.html"},"413":{"id":413,"name":"Eulerian Technologies","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.eulerian.com/en/privacy/"},"415":{"id":415,"name":"Seenthis AB","purposes":[],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://seenthis.co/privacy-notice-2018-04-18.pdf"},"263":{"id":263,"name":"Nativo, Inc.","purposes":[1,3,4],"legIntPurposes":[2,7,9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2],"specialFeatures":[],"policyUrl":"https://www.nativo.com/interest-based-ads"},"329":{"id":329,"name":"Browsi Mobile Ltd","purposes":[1,7,8],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://gobrowsi.com/browsi-privacy-policy/"},"337":{"id":337,"name":"SheMedia, LLC","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[],"policyUrl":"https://www.shemedia.com/ad-services-privacy-policy"},"422":{"id":422,"name":"Brand Metrics Sweden AB","purposes":[1,6,7,8,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://collector.brandmetrics.com/brandmetrics_privacypolicy.pdf"},"394":{"id":394,"name":"AudienceProject Aps","purposes":[1,3,4,5,6],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[2,7,8,9],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://privacy.audienceproject.com"},"243":{"id":243,"name":"Cloud Technologies S.A.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.cloudtechnologies.pl/en/internet-advertising-privacy-policy"},"416":{"id":416,"name":"Commanders Act","purposes":[1,2,3,4,5,6,7,8,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.commandersact.com/en/privacy/"},"434":{"id":434,"name":"DynAdmic","purposes":[1,2,4,7],"legIntPurposes":[3,6,8],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[1],"policyUrl":"http://eu.dynadmic.com/privacy-policy/"},"435":{"id":435,"name":"SINGLESPOT SAS ","purposes":[1,3,4,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.singlespot.com/privacy_policy?locale=fr"},"409":{"id":409,"name":"Arrivalist Co.","purposes":[1,9],"legIntPurposes":[7,8],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.arrivalist.com/privacy"},"436":{"id":436,"name":"INVIBES GROUP","purposes":[1,3,4,5,6,9],"legIntPurposes":[2,7,8,10],"flexiblePurposes":[2,7,8,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"http://www.invibes.com/terms"},"418":{"id":418,"name":"PROXISTORE","purposes":[1,2,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[1,2],"policyUrl":"https://www.proxistore.com/common/en/cgv"},"429":{"id":429,"name":"Signals","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://signalsdata.com/platform-cookie-policy/"},"374":{"id":374,"name":"Bmind a Sales Maker Company, S.L.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[],"policyUrl":"http://www.bmind.es/legal-notice/"},"438":{"id":438,"name":"INVIDI technologies AB","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[],"features":[1,2],"specialFeatures":[],"policyUrl":"http://www.invidi.com/wp-content/uploads/2020/02/ad-tech-services-privacy-policy.pdf"},"450":{"id":450,"name":"Neodata Group srl","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.neodatagroup.com/en/security-policy","overflow":{"httpGetLimit":32}},"444":{"id":444,"name":"Playbuzz Ltd (aka EX.CO)","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,9,10],"flexiblePurposes":[2,3,5,6],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://ex.co/privacy-policy/"},"412":{"id":412,"name":"Cxense ASA","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.cxense.com/about-us/privacy-policy"},"455":{"id":455,"name":"GDMServices, Inc. d/b/a FiksuDSP","purposes":[1,2,3,4,10],"legIntPurposes":[7,8],"flexiblePurposes":[2,3,4,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://fiksu.com/privacy-policy/"},"423":{"id":423,"name":"travel audience GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://travelaudience.com/product-privacy-policy/"},"381":{"id":381,"name":"Solocal","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://frontend.adhslx.com/privacy.html?"},"365":{"id":365,"name":"Forensiq LLC","purposes":[],"legIntPurposes":[7],"flexiblePurposes":[],"specialPurposes":[1],"features":[1,3],"specialFeatures":[1],"policyUrl":"https://impact.com/privacy-policy/"},"447":{"id":447,"name":"Adludio Ltd","purposes":[2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1],"specialFeatures":[1],"policyUrl":"https://www.adludio.com/privacy-policy/"},"410":{"id":410,"name":"Adtelligent Inc.","purposes":[1,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://adtelligent.com/privacy-policy/"},"137":{"id":137,"name":"Str\u00f6er SSP GmbH (DSP)","purposes":[1],"legIntPurposes":[2,3,4,7,9,10],"flexiblePurposes":[2,3,4,9],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://www.stroeer.de/fileadmin/de/Konvergenz_und_Konzepte/Daten_und_Technologien/Stroeer_SSP/Downloads/Datenschutz_Stroeer_SSP.pdf"},"466":{"id":466,"name":"TACTIC\u2122 Real-Time Marketing AS","purposes":[],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://tacticrealtime.com/privacy/"},"431":{"id":431,"name":"White Ops, Inc.","purposes":[],"legIntPurposes":[7,9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,3],"specialFeatures":[2],"policyUrl":"https://www.whiteops.com/privacy"},"336":{"id":336,"name":"Telecoming S.A.","purposes":[2,4],"legIntPurposes":[7,9],"flexiblePurposes":[2,4],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://www.telecoming.com/privacy-policy/","overflow":{"httpGetLimit":128}},"440":{"id":440,"name":"DEFINE MEDIA GMBH","purposes":[1,4],"legIntPurposes":[2,7,9,10],"flexiblePurposes":[2,7,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://www.definemedia.de/datenschutz-conative/"},"375":{"id":375,"name":"Affle International","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://affle.com/privacy-policy "},"475":{"id":475,"name":"TAPTAP Digital SL","purposes":[1,2,3,4,5,6,7],"legIntPurposes":[8,10],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://www.taptapnetworks.com/privacy_policy/"},"448":{"id":448,"name":"Targetspot Belgium SPRL","purposes":[1,2,3,4,7,9],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"http://marketing.targetspot.com/Targetspot/Legal/TargetSpot%20Privacy%20Policy%20-%20June%202018.pdf","overflow":{"httpGetLimit":128}},"428":{"id":428,"name":"Internet BillBoard a.s.","purposes":[1],"legIntPurposes":[2,3,4,7],"flexiblePurposes":[2,3,4],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://www.ibillboard.com/en/privacy-information/"},"486":{"id":486,"name":"Madington","purposes":[1],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://delivered-by-madington.com/dat-privacy-policy/"},"468":{"id":468,"name":"NeuStar, Inc.","purposes":[1],"legIntPurposes":[3,7,8,9,10],"flexiblePurposes":[7,8,9,10],"specialPurposes":[1],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.home.neustar/privacy"},"293":{"id":293,"name":"SpringServe, LLC","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[3],"specialFeatures":[2],"policyUrl":"https://springserve.com/privacy-policy/"},"484":{"id":484,"name":"STRIATUM SAS","purposes":[],"legIntPurposes":[7,10],"flexiblePurposes":[],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"https://adledge.com/data-privacy/"},"493":{"id":493,"name":"Carbon (AI) Limited","purposes":[1,2,3,4,5,6,7,8,10],"legIntPurposes":[],"flexiblePurposes":[2,7,8],"specialPurposes":[2],"features":[1,2,3],"specialFeatures":[2],"policyUrl":"https://carbonrmp.com/privacy.html"},"495":{"id":495,"name":"Arcspire Limited","purposes":[2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://public.arcspire.io/privacy.pdf","overflow":{"httpGetLimit":128}},"424":{"id":424,"name":"KUPONA GmbH","purposes":[4,7],"legIntPurposes":[],"flexiblePurposes":[4],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.kupona.de/dsgvo/"},"408":{"id":408,"name":"Fidelity Media","purposes":[1,2,7],"legIntPurposes":[],"flexiblePurposes":[2,7],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://fidelity-media.com/privacy-policy/"},"467":{"id":467,"name":"Haensel AMS GmbH","purposes":[1],"legIntPurposes":[7],"flexiblePurposes":[7],"specialPurposes":[],"features":[2],"specialFeatures":[],"policyUrl":"https://haensel-ams.com/data-privacy/"},"488":{"id":488,"name":"Opinary GmbH","purposes":[1],"legIntPurposes":[2,7,8,10],"flexiblePurposes":[2,7,8,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://opinary.com/privacy-policy/"},"490":{"id":490,"name":"PLAYGROUND XYZ EMEA LTD","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://playground.xyz/privacy"},"491":{"id":491,"name":"Triboo Data Analytics","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.shinystat.com/it/informativa_privacy_generale.html"},"502":{"id":502,"name":"NEXD","purposes":[1,7,10],"legIntPurposes":[9],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://nexd.com/privacy-policy","overflow":{"httpGetLimit":128}},"508":{"id":508,"name":"Lucid Holdings, LLC","purposes":[1,7,8,9],"legIntPurposes":[],"flexiblePurposes":[7,8,9],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[],"policyUrl":"luc.id/privacy-policy"},"512":{"id":512,"name":"PubNative GmbH","purposes":[1,2,3,4,7,8,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[2],"policyUrl":"https://pubnative.net/privacy-notice/"},"516":{"id":516,"name":"Pexi B.V.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://pexi.nl/privacy-policy/"},"507":{"id":507,"name":"AdsWizz Inc.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.adswizz.com/our-privacy-policy/"},"482":{"id":482,"name":"UberMedia, Inc.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://ubermedia.com/summary-of-privacy-policy/"},"505":{"id":505,"name":"Shopalyst Inc","purposes":[1,7,8],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://www.shortlyst.com/eu/privacy_terms.html"},"517":{"id":517,"name":"SunMedia ","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.sunmedia.tv/en/cookies"},"511":{"id":511,"name":"Admixer EU GmbH","purposes":[1,2,3,4,5,7,9],"legIntPurposes":[10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://admixer.com/privacy/","overflow":{"httpGetLimit":128}},"479":{"id":479,"name":"INFINIA MOBILE S.L.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"http://www.infiniamobile.com/privacy_policy"},"509":{"id":509,"name":"ATG Ad Tech Group GmbH","purposes":[2,7],"legIntPurposes":[],"flexiblePurposes":[2,7],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://ad-tech-group.com/privacy-policy/"},"521":{"id":521,"name":"netzeffekt GmbH","purposes":[1,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://www.netzeffekt.de/en/imprint"},"524":{"id":524,"name":"The Ozone Project Limited","purposes":[1,2,3,4,5,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[1],"policyUrl":"https://ozoneproject.com/privacy-policy"},"528":{"id":528,"name":"Kayzen","purposes":[1,2,3,4,9,10],"legIntPurposes":[7],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1],"specialFeatures":[],"policyUrl":"https://kayzen.io/data-privacy-policy"},"527":{"id":527,"name":"Jampp LTD","purposes":[1,2,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://jampp.com/privacy.html"},"535":{"id":535,"name":"INNITY","purposes":[1,2,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.innity.com/privacy-policy.php"},"530":{"id":530,"name":"Near Pte Ltd","purposes":[1,2,3,4,5,6,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,9,10],"specialPurposes":[],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://near.co/privacy","overflow":{"httpGetLimit":128}},"539":{"id":539,"name":"AdDefend GmbH","purposes":[1],"legIntPurposes":[2,3,4,7],"flexiblePurposes":[2,3,4,7],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.addefend.com/en/privacy-policy/"},"501":{"id":501,"name":"Alliance Gravity Data Media","purposes":[1,2,3,4,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.alliancegravity.com/politiquedeprotectiondesdonneespersonnelles"},"531":{"id":531,"name":"Smartclip Hispania SL","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[1],"policyUrl":"http://rgpd-smartclip.com/"},"536":{"id":536,"name":"GlobalWebIndex","purposes":[1,7,8,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"http://legal.trendstream.net/non-panellist_privacy_policy"},"544":{"id":544,"name":"Kochava Inc.","purposes":[],"legIntPurposes":[7],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.kochava.com/support-privacy/"},"543":{"id":543,"name":"PaperG, Inc. dba Thunder Industries","purposes":[1,3,4,5,6],"legIntPurposes":[2,7,8],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.makethunder.com/privacy"},"546":{"id":546,"name":"Smart Traffik","purposes":[1,8],"legIntPurposes":[7],"flexiblePurposes":[7,8],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://okube-attribution.com/politique-de-confidentialite/"},"545":{"id":545,"name":"Reignn Platform Ltd","purposes":[1,2,3,4,7,8,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[2],"policyUrl":"http://reignn.com/user-privacy-policy"},"439":{"id":439,"name":"Bit Q Holdings Limited","purposes":[1,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.rippll.com/privacy"},"553":{"id":553,"name":"Adhese","purposes":[1,2,3,4,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://adhese.com/privacy-and-cookie-policy"},"556":{"id":556,"name":"adhood.com","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"http://v3.adhood.com/en/site/politikavekurallar/gizlilik.php?lang=en"},"550":{"id":550,"name":"Happydemics","purposes":[7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,3],"specialFeatures":[],"policyUrl":"https://www.iubenda.com/privacy-policy/69056167/full-legal"},"554":{"id":554,"name":"RMSi Radio Marketing Service interactive GmbH","purposes":[1,3,4],"legIntPurposes":[2,7,9],"flexiblePurposes":[2],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.rms.de/datenschutz/"},"498":{"id":498,"name":"Mediakeys Platform","purposes":[1,6,10],"legIntPurposes":[2,3,4,7,9],"flexiblePurposes":[2,3,4,9],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://drbanner.com/privacypolicy_en/"},"565":{"id":565,"name":"Adobe Audience Manager","purposes":[1,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"https://www.adobe.com/privacy/policy.html"},"571":{"id":571,"name":"ViewPay","purposes":[1,2,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,4,5,6,7,8,9,10],"specialPurposes":[],"features":[3],"specialFeatures":[],"policyUrl":"http://viewpay.tv/mentions-legales/"},"568":{"id":568,"name":"Jointag S.r.l.","purposes":[1,2,3,4,5,6,7,8],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1,2],"policyUrl":"https://www.jointag.com/privacy/kariboo/publisher/third/"},"570":{"id":570,"name":"Czech Publisher Exchange z.s.p.o.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.cpex.cz/pro-uzivatele/ochrana-soukromi/"},"559":{"id":559,"name":"Otto (GmbH & Co KG)","purposes":[1],"legIntPurposes":[2,3,4,7,9,10],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.otto.de/shoppages/service/datenschutz"},"569":{"id":569,"name":"Kairos Fire","purposes":[1,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://www.kairosfire.com/privacy"},"577":{"id":577,"name":"Neustar on behalf of The Procter & Gamble Company","purposes":[1,2,3,4,6,9],"legIntPurposes":[5,7,8],"flexiblePurposes":[2,3,4,5,6,7,8,9],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.pg.com/privacy/english/privacy_statement.shtml"},"590":{"id":590,"name":"Sourcepoint Technologies, Inc.","purposes":[],"legIntPurposes":[6,8],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.sourcepoint.com/privacy-policy"},"587":{"id":587,"name":"Localsensor B.V.","purposes":[1,2,3,4,7,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.localsensor.com/privacy.html"},"580":{"id":580,"name":"Goldbach Group AG","purposes":[1],"legIntPurposes":[2,3,4,7,8,9,10],"flexiblePurposes":[2,3,4,7,8,9,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://goldbach.com/ch/de/datenschutz"},"593":{"id":593,"name":"Programatica de publicidad S.L.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://datmean.com/politica-privacidad/"},"574":{"id":574,"name":"Realeyes OU","purposes":[1,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1],"specialFeatures":[],"policyUrl":"https://realview.realeyesit.com/privacy"},"598":{"id":598,"name":"audio content & control GmbH","purposes":[1],"legIntPurposes":[2,7,9],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://www.audio-cc.com/audiocc_privacy_policy.pdf"},"596":{"id":596,"name":"InsurAds Technologies SA.","purposes":[1,2,3,4,5,6,9,10],"legIntPurposes":[7,8],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://www.insurads.com/privacy.html"},"549":{"id":549,"name":"Bandsintown Amplified LLC","purposes":[2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"http://corp.bandsintown.com/privacy"},"584":{"id":584,"name":"Dynamic 1001 GmbH","purposes":[1,7,10],"legIntPurposes":[],"flexiblePurposes":[7,10],"specialPurposes":[2],"features":[3],"specialFeatures":[2],"policyUrl":"https://dynamic-tracking.com/Datenschutz.aspx"},"601":{"id":601,"name":"WebAds B.V","purposes":[1,2],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://privacy.webads.eu/"},"599":{"id":599,"name":"Maximus Live LLC","purposes":[],"legIntPurposes":[7,8],"flexiblePurposes":[],"specialPurposes":[1],"features":[],"specialFeatures":[1],"policyUrl":"https://maximusx.com/privacy-policy/"},"606":{"id":606,"name":"Impactify ","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://impactify.io/privacy-policy/"},"602":{"id":602,"name":"Online Solution Int Limited","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,8,9,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://adsafety.net/privacy.html","overflow":{"httpGetLimit":32}},"612":{"id":612,"name":"Adnami Aps","purposes":[],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"www.adnami.io/privacy"},"591":{"id":591,"name":"Consumable, Inc.","purposes":[1,2,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"http://consumable.com/privacy-policy.html"},"614":{"id":614,"name":"Market Resource Partners LLC","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[2],"policyUrl":"https://www.mrpfd.com/privacy-policy/"},"615":{"id":615,"name":"Adsolutions BV","purposes":[],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.adsolutions.com/privacy-policy/"},"607":{"id":607,"name":"ucfunnel Co., Ltd.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[1],"policyUrl":"https://www.ucfunnel.com/privacy-policy"},"609":{"id":609,"name":"Predicio","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"http://www.predic.io/privacy","overflow":{"httpGetLimit":128}},"617":{"id":617,"name":"Onfocus (Adagio)","purposes":[1,2,7,8],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://adagio.io/privacy"},"620":{"id":620,"name":"Blue","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[1],"policyUrl":"http://www.getblue.io/privacy/"},"610":{"id":610,"name":"Azerion Holding B.V.","purposes":[1,3,4,9],"legIntPurposes":[2,5,6,7,8,10],"flexiblePurposes":[2,5,6],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[1],"policyUrl":"https://azerion.com/business/privacy.html","overflow":{"httpGetLimit":128}},"621":{"id":621,"name":"Seznam.cz, a.s.","purposes":[1,3,4,5,6],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[1,2],"policyUrl":"https://www.seznam.cz/ochranaudaju"},"624":{"id":624,"name":"Norstat AS","purposes":[1,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.norstatpanel.com/en/data-protection"},"95":{"id":95,"name":"Lotame Solutions, inc","purposes":[1,3,5],"legIntPurposes":[7,8,9,10],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[],"policyUrl":"https://www.lotame.com/about-lotame/privacy/lotame-corporate-websites-privacy-policy/"},"618":{"id":618,"name":"BEINTOO SPA","purposes":[1,2,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1],"specialFeatures":[1],"policyUrl":"http://www.beintoo.com/privacy-cookie-policy/"},"625":{"id":625,"name":"BILENDI SA","purposes":[1,6,7,8,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1],"specialFeatures":[],"policyUrl":"https://www.maximiles.com/privacy-policy"},"628":{"id":628,"name":": Tappx","purposes":[1,2,4,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2],"specialFeatures":[1,2],"policyUrl":"https://www.tappx.com/en/privacy-policy/"},"630":{"id":630,"name":"Contact Impact GmbH","purposes":[1],"legIntPurposes":[2,3,4,7,10],"flexiblePurposes":[2,3,4,7,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://contactimpact.de/privacy"},"626":{"id":626,"name":"Hivestack Inc.","purposes":[1,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://hivestack.com/privacy-policy"},"631":{"id":631,"name":"Relay42 Netherlands B.V.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://relay42.com/privacy"},"638":{"id":638,"name":"Passendo Aps","purposes":[1,2,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://passendo.com/users-privacy-policy"},"644":{"id":644,"name":"Gamoshi LTD","purposes":[2,7],"legIntPurposes":[],"flexiblePurposes":[2,7],"specialPurposes":[2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.gamoshi.com/privacy-policy"},"639":{"id":639,"name":"Smile Wanted Group","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[2],"policyUrl":"https://www.smilewanted.com/privacy.php"},"645":{"id":645,"name":"Noster Finance S.L.","purposes":[1,2,3,4,5,6,9,10],"legIntPurposes":[7,8],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.finect.com/terminos-legales/politica-de-cookies"},"653":{"id":653,"name":"Smartme Analytics","purposes":[7,8,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,3],"specialFeatures":[],"policyUrl":"http://smartmeapp.com/info/smartme/aviso_legal.php","deletedDate":"2020-07-03T00:00:00Z"},"613":{"id":613,"name":"Adserve.zone / Artworx AS","purposes":[1],"legIntPurposes":[2,7],"flexiblePurposes":[2],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://adserve.zone/adserveprivacypolicy.html"},"573":{"id":573,"name":"Dailymotion SA","purposes":[1,3,4],"legIntPurposes":[2,5,6,7,8,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2],"specialFeatures":[],"policyUrl":"https://www.dailymotion.com/legal/privacy","overflow":{"httpGetLimit":32}},"652":{"id":652,"name":"Skaze","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"http://www.skaze.fr/rgpd/"},"646":{"id":646,"name":"Notify","purposes":[],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1],"specialFeatures":[],"policyUrl":"https://notify-group.com/en/mentions-legales/"},"648":{"id":648,"name":"TrueData Solutions, Inc.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.truedata.co/privacy-policy/"},"647":{"id":647,"name":"Axel Springer Teaser Ad GmbH","purposes":[1],"legIntPurposes":[2,3,4,7,10],"flexiblePurposes":[2,3,4,7,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.adup-tech.com/privacy"},"659":{"id":659,"name":"Research and Analysis of Media in Sweden AB","purposes":[1],"legIntPurposes":[7,8,9],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[],"policyUrl":"https://www2.rampanel.com/privacy-policy/"},"656":{"id":656,"name":"Think Clever Media","purposes":[1,2,3,4,5,6,9],"legIntPurposes":[7,8,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.contentignite.com/privacy-policy/"},"657":{"id":657,"name":"GP One GmbH","purposes":[1],"legIntPurposes":[2,3,4],"flexiblePurposes":[2,3,4],"specialPurposes":[1,2],"features":[],"specialFeatures":[1,2],"policyUrl":"https://www.gsi-one.org/de/privacy-policy.html"},"655":{"id":655,"name":"Sportradar AG","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.sportradar.com/about-us/privacy/"},"662":{"id":662,"name":"SoundCast","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://soundcast.fm/en/data-privacy"},"665":{"id":665,"name":"Digital East GmbH","purposes":[2,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.digitaleast.mobi/en/legal/privacy-policy/"},"650":{"id":650,"name":"Telefonica Investigaci\u00f3n y Desarrollo S.A.U","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"http://www.cognitivemarketing.tid.es/"},"666":{"id":666,"name":"BeOp","purposes":[1,2],"legIntPurposes":[7,8,10],"flexiblePurposes":[2,7,8,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://beop.io/privacy"},"663":{"id":663,"name":"Mobsuccess","purposes":[1,2,3,4,7,9],"legIntPurposes":[],"flexiblePurposes":[2,7],"specialPurposes":[1,2],"features":[1],"specialFeatures":[],"policyUrl":"https://www.mobsuccess.com/en/privacy"},"658":{"id":658,"name":"BLIINK SAS","purposes":[1,2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,8,9,10],"specialPurposes":[2],"features":[],"specialFeatures":[1],"policyUrl":"https://bliink.io/privacy-policy"},"667":{"id":667,"name":"Liftoff Mobile, Inc.","purposes":[1,3,4],"legIntPurposes":[2,5,6,7,8,10],"flexiblePurposes":[2,3,4,5,6,7,8,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://liftoff.io/privacy-policy/"},"668":{"id":668,"name":"WhatRocks Inc. ","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[1,2],"policyUrl":"https://www.whatrocks.co/en/privacy-policy "},"674":{"id":674,"name":"Duration Media, LLC.","purposes":[1,2,3,4,5,6,7,8,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.durationmedia.net/privacy-policy"},"675":{"id":675,"name":"Instreamatic inc.","purposes":[2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[3],"specialFeatures":[],"policyUrl":"http://instreamatic.com/privacy-policy/"},"676":{"id":676,"name":"BusinessClick","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://www.businessclick.com/documents/RegulaminProgramuBusinessClick-2019.pdf"},"672":{"id":672,"name":"Cedato Technologies Ltd","purposes":[1,2],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.cedato.com/privacy-policy/"},"664":{"id":664,"name":"adMarketplace, Inc.","purposes":[1,2,3,4],"legIntPurposes":[7,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.admarketplace.com/privacy-policy/"},"561":{"id":561,"name":"AuDigent","purposes":[1,2,3,4,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[],"policyUrl":"http://audigent.com/platform-privacy-policy"},"682":{"id":682,"name":"Radio Net Media Limited","purposes":[1,2,3,4],"legIntPurposes":[7],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.adtonos.com/service-privacy-policy/","overflow":{"httpGetLimit":128}},"684":{"id":684,"name":"Blue Billywig BV","purposes":[],"legIntPurposes":[7],"flexiblePurposes":[7],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://www.bluebillywig.com/privacy-statement/"},"686":{"id":686,"name":"The MediaGrid Inc.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2],"specialFeatures":[],"policyUrl":"https://www.themediagrid.com/privacy-policy/"},"685":{"id":685,"name":"Arkeero","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://arkeero.com/privacy-2/"},"687":{"id":687,"name":"MISSENA","purposes":[1,2,3,4,5,6,7,8],"legIntPurposes":[],"flexiblePurposes":[2,7],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"http://missena.com/confidentialite/"},"690":{"id":690,"name":"Go.pl sp. z o.o.","purposes":[1,2,3,4],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://go.pl/polityka-prywatnosci/"},"691":{"id":691,"name":"Lifesight Pte. Ltd.","purposes":[2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.lifesight.io/privacy-policy/"},"697":{"id":697,"name":"ADWAYS SAS","purposes":[],"legIntPurposes":[7],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://www.adways.com/confidentialite/?lang=en"},"699":{"id":699,"name":"HyperTV Inc.","purposes":[1,2,4,9],"legIntPurposes":[7,10],"flexiblePurposes":[],"specialPurposes":[2],"features":[1],"specialFeatures":[],"policyUrl":"https://www.hypertvx.com/privacy/"},"703":{"id":703,"name":"MindTake Research GmbH","purposes":[1,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[2,3],"specialFeatures":[],"policyUrl":"https://www.mindtake.com/en/reppublika-privacy-policy"},"706":{"id":706,"name":"VRTCAL Markets Inc","purposes":[],"legIntPurposes":[2],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://vrtcal.com/docs/PrivacyPolicy-Advertising.pdf"},"681":{"id":681,"name":"MyTraffic","purposes":[1,9],"legIntPurposes":[],"flexiblePurposes":[9],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://www.mytraffic.io/en/privacy"},"649":{"id":649,"name":"adality GmbH","purposes":[],"legIntPurposes":[2],"flexiblePurposes":[],"specialPurposes":[],"features":[1],"specialFeatures":[],"policyUrl":"https://adality.de/en/privacy/"},"711":{"id":711,"name":"SITU8ED SA","purposes":[1,3,4,5,6,7,8,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.situ8ed.com/privacy-policy/"},"712":{"id":712,"name":"Inspired Mobile Limited","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://byinspired.com/privacypolicy.pdf"},"688":{"id":688,"name":"Effinity","purposes":[],"legIntPurposes":[2],"flexiblePurposes":[2,7],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.effiliation.com/politique-de-confidentialite/","overflow":{"httpGetLimit":128}},"702":{"id":702,"name":"Kwanko","purposes":[1,2,7,8],"legIntPurposes":[],"flexiblePurposes":[2,7,8],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.kwanko.com/fr/rgpd/"},"714":{"id":714,"name":"Survata Inc.","purposes":[1],"legIntPurposes":[7,9],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.survata.com/respondent-privacy-policy/","overflow":{"httpGetLimit":128}},"713":{"id":713,"name":"Dataseat Ltd","purposes":[2,3,4,5,6,7,8,9],"legIntPurposes":[],"flexiblePurposes":[2,7,8],"specialPurposes":[],"features":[3],"specialFeatures":[],"policyUrl":"https://dataseat.com/privacy-policy"},"716":{"id":716,"name":"OnAudience Ltd","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.onaudience.com/internet-advertising-privacy-policy"},"708":{"id":708,"name":"Dugout Limited ","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://dugout.com/privacy-policy"},"694":{"id":694,"name":"Snapupp Technologies SL","purposes":[2,3,4,5,6,9],"legIntPurposes":[7,8,10],"flexiblePurposes":[10],"specialPurposes":[],"features":[3],"specialFeatures":[],"policyUrl":"https://www.enterprise.noddus.com/privacy-policy","overflow":{"httpGetLimit":128}},"683":{"id":683,"name":"Cookie Market LTD","purposes":[1,3,4,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[1],"policyUrl":"http://cookie.market/privacyPolicy.php"},"720":{"id":720,"name":"AAX LLC","purposes":[1,3,4],"legIntPurposes":[2,7,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://aax.media/privacy/","overflow":{"httpGetLimit":32}},"678":{"id":678,"name":"Axonix LTD","purposes":[2],"legIntPurposes":[7,10],"flexiblePurposes":[2],"specialPurposes":[1,2],"features":[3],"specialFeatures":[1],"policyUrl":"https://axonix.com/privacy-cookie-policy/","overflow":{"httpGetLimit":128}},"719":{"id":719,"name":"Online Advertising Network Sp. z o.o.","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[1],"policyUrl":"https://www.oan.pl/en/privacy-policy"},"707":{"id":707,"name":"Dentsu Aegis Network Italia SpA","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.dentsuaegisnetwork.com/it/it/policies/info-cookie"},"721":{"id":721,"name":"Beaconspark Ltd","purposes":[1,2,3,4,5,7],"legIntPurposes":[6,8],"flexiblePurposes":[2,3,4,5,6,7,8],"specialPurposes":[1,2],"features":[1],"specialFeatures":[],"policyUrl":"https://www.engageya.com/privacy"},"728":{"id":728,"name":"Appier PTE Ltd","purposes":[1,3,4,5,6,9],"legIntPurposes":[2,7,8,10],"flexiblePurposes":[2,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.appier.com/privacy-policy/"},"729":{"id":729,"name":"Cavai AS & UK ","purposes":[],"legIntPurposes":[7,8],"flexiblePurposes":[7,8],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://cav.ai/privacy-policy/"},"730":{"id":730,"name":"INFOnline GmbH","purposes":[],"legIntPurposes":[8],"flexiblePurposes":[8],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.infonline.de/en/privacy-policy/"},"722":{"id":722,"name":"agof - daily campaign facts","purposes":[1,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"http://www.agof.de/datenschutz/"},"723":{"id":723,"name":"Adzymic Pte Ltd","purposes":[1,2,3,4,7,8],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[],"policyUrl":"http://www.adzymic.co/privacy","overflow":{"httpGetLimit":128}},"725":{"id":725,"name":"Pubfinity LLC","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[],"policyUrl":"https://pubfinity.com/privacy-policy/","overflow":{"httpGetLimit":128}},"733":{"id":733,"name":"Anzu Virtual Reality LTD","purposes":[1,2,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[1],"specialFeatures":[1],"policyUrl":"https://anzu.io/privacy/"},"737":{"id":737,"name":"Monet Engine Inc","purposes":[1,2,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://appmonet.com/privacy-policy/"},"740":{"id":740,"name":"6Sense Insights, Inc.","purposes":[1],"legIntPurposes":[2,3,4,5,7,8,10],"flexiblePurposes":[2,3,4,5,7,8,10],"specialPurposes":[],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://6sense.com/privacy-policy/","overflow":{"httpGetLimit":128}},"744":{"id":744,"name":"Vidazoo Ltd","purposes":[3,4],"legIntPurposes":[2,7,8,10],"flexiblePurposes":[3,4],"specialPurposes":[1,2],"features":[2],"specialFeatures":[2],"policyUrl":"https://vidazoo.gitbook.io/vidazoo-legal/privacy-policy","overflow":{"httpGetLimit":128}},"731":{"id":731,"name":"GeistM Technologies LTD","purposes":[],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.geistm.com/privacy"},"741":{"id":741,"name":"Brand Advance Limited","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[1,2],"policyUrl":"https://www.wearebrandadvance.com/website-privacy-policy"},"735":{"id":735,"name":"Deutsche Post AG","purposes":[1,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1],"specialFeatures":[],"policyUrl":"https://www.deutschepost.de/de/c/consentric/datenschutz.html"},"734":{"id":734,"name":"Cint AB","purposes":[1,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1],"specialFeatures":[],"policyUrl":"https://www.cint.com/participant-privacy-notice"},"709":{"id":709,"name":"NC Audience Exchange, LLC (NewsIQ)","purposes":[1,3,4,5],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[2,3,4,5,7,8,9,10],"specialPurposes":[2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.ncaudienceexchange.com/privacy/"},"739":{"id":739,"name":"Blingby LLC","purposes":[1,8,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://blingby.com/privacy"},"727":{"id":727,"name":"Pinpoll GmbH (Private Limited)","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1],"specialFeatures":[],"policyUrl":"https://www.pinpoll.com/#data_protection_declaration"},"732":{"id":732,"name":"Performax.cz, s.r.o.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[],"policyUrl":"https://reg.tiscali.cz/privacy-policy"},"736":{"id":736,"name":"BidMachine Inc.","purposes":[1,2,3,4,5,6],"legIntPurposes":[7,8,10],"flexiblePurposes":[7,8,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://explorestack.com/privacy-policy/"},"738":{"id":738,"name":"adbility media GmbH","purposes":[2,3,4,9],"legIntPurposes":[7],"flexiblePurposes":[2,3,4,9],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.adbility-media.com/datenschutzerklaerung/"},"742":{"id":742,"name":"Audiencerate LTD","purposes":[1,2,3,5,6],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.audiencerate.com/privacy/"},"743":{"id":743,"name":"MOVIads Sp. z o.o. Sp. k.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2,3],"specialFeatures":[1],"policyUrl":"https://moviads.pl/polityka-prywatnosci/","overflow":{"httpGetLimit":128}},"745":{"id":745,"name":"Justtag Sp. z o.o.","purposes":[1,3,4,9],"legIntPurposes":[7],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://www.justtag.com/pdf/PRIVACY_POLICY_Koalametrics_english.pdf"},"746":{"id":746,"name":"Adxperience SAS","purposes":[4],"legIntPurposes":[2,7],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1],"policyUrl":"https://adxperience.com/privacy-policy/"},"747":{"id":747,"name":"Kairion GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[],"features":[2,3],"specialFeatures":[1,2],"policyUrl":"https://kairion.de/datenschutzbestimmungen/"},"748":{"id":748,"name":"AUDIOMOB LTD","purposes":[1,2,3,4,7,8,9],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,8,9],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://www.audiomob.io/privacy"},"749":{"id":749,"name":"Good-Loop Ltd","purposes":[1,3,4,5,6],"legIntPurposes":[2,7,8,9,10],"flexiblePurposes":[7,8,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://doc.good-loop.com/policy/privacy-policy.html"},"750":{"id":750,"name":"THE NEWCO S.R.L.","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://www.thenewco.it/privacy_policy_servizi_prodotti.html"},"751":{"id":751,"name":"Kiosked Ltd","purposes":[],"legIntPurposes":[2,7],"flexiblePurposes":[2,7],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://kiosked.com/privacy-policy/"},"753":{"id":753,"name":"ScaleMonk Inc.","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.scalemonk.com/privacy-policy/index.html"},"754":{"id":754,"name":"DistroScale, Inc.","purposes":[1,2],"legIntPurposes":[],"flexiblePurposes":[2],"specialPurposes":[2],"features":[3],"specialFeatures":[],"policyUrl":"http://www.distroscale.com/privacy-policy/"},"757":{"id":757,"name":"UAB Meazy","purposes":[1,2,3,4,5,7,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://meazy.co/privacy-policy"},"758":{"id":758,"name":"GfK Netherlands B.V.","purposes":[1,7,8,9],"legIntPurposes":[],"flexiblePurposes":[7,8,9],"specialPurposes":[],"features":[1],"specialFeatures":[],"policyUrl":"https://gfkpanel.nl/privacy"},"759":{"id":759,"name":"RevJet","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1],"specialFeatures":[],"policyUrl":"https://www.revjet.com/privacy","overflow":{"httpGetLimit":128}},"760":{"id":760,"name":"VEXPRO TECHNOLOGIES LTD","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[2],"policyUrl":"https://onedash.com/privacy-policy.html"},"761":{"id":761,"name":"Digiseg ApS","purposes":[1,3,5,7,8,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[1],"specialFeatures":[],"policyUrl":"https://digiseg.io/privacy-center/"},"762":{"id":762,"name":"Protected Media LTD","purposes":[1],"legIntPurposes":[3,5,7,8,9,10],"flexiblePurposes":[],"specialPurposes":[1],"features":[3],"specialFeatures":[],"policyUrl":"https://www.protected.media/privacy-policy/"},"764":{"id":764,"name":"Lucidity","purposes":[1,2,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://golucidity.com/privacy-policy/"},"765":{"id":765,"name":"Grabit Interactive Media Inc dba KERV Interctive","purposes":[2,3,4,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2],"specialFeatures":[],"policyUrl":"https://kervit.com/privacy-policy/"},"766":{"id":766,"name":"ADCELL | Firstlead GmbH","purposes":[1,2],"legIntPurposes":[],"flexiblePurposes":[2],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.adcell.de/agb#sector_6"},"767":{"id":767,"name":"Clinch Labs LTD","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1],"policyUrl":"https://clinch.co/pages/privacy.html"},"768":{"id":768,"name":"Global Media & Entertainment Limited","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"http://global.com/privacy-policy/"},"769":{"id":769,"name":"MEDIAMETRIE","purposes":[1,8],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://www.mediametrie.fr/fr/gestion-des-cookies"},"770":{"id":770,"name":"MARKETPERF CORP","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,10],"flexiblePurposes":[2,3,4,5,6],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://www.marketperf.com/assets/images/app/marketperf/pdf/privacy-policy.pdf"},"771":{"id":771,"name":"bam! interactive marketing GmbH ","purposes":[1,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1,2],"policyUrl":"https://bam-interactive.de/privacy-policy/"},"772":{"id":772,"name":"Oracle Data Cloud - Moat","purposes":[],"legIntPurposes":[7,8,10],"flexiblePurposes":[],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"https://www.oracle.com/legal/privacy/services-privacy-policy.html"},"773":{"id":773,"name":"360e-com Sp. z o.o.","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://www.clickonometrics.com/optout/"},"774":{"id":774,"name":"Wagawin GmbH","purposes":[1],"legIntPurposes":[2,7],"flexiblePurposes":[2],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.wagawin.com/privacy-en/#productprivacy"},"775":{"id":775,"name":"SelectMedia International LTD","purposes":[1,2],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.selectmedia.asia/terms-and-privacy/"},"776":{"id":776,"name":"Mars Media Group","purposes":[2],"legIntPurposes":[],"flexiblePurposes":[2],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"https://pay-per-leads.com/terms"},"777":{"id":777,"name":"One Planet Only","purposes":[1],"legIntPurposes":[2,3,4,7],"flexiblePurposes":[2,3,4,7],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://oneplanetonly.com/files/PRIVACY%20POLICY.pdf","overflow":{"httpGetLimit":32}},"778":{"id":778,"name":"Discover-Tech ltd","purposes":[2,3,4,5,6,7,8,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[1],"policyUrl":"https://discover-tech.io/dsp-privacy-policy/"},"779":{"id":779,"name":"Adtarget Medya A.S.","purposes":[1,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[3],"specialFeatures":[1],"policyUrl":"https://adtarget.com.tr/adtarget-privacy-policy-2020.pdf"},"780":{"id":780,"name":"Aniview LTD","purposes":[1,2,7,8],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"https://www.aniview.com/privacy-policy/"},"781":{"id":781,"name":"FeedAd GmbH","purposes":[1,3,4,5,6,8,9],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,7,10],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[1,2],"policyUrl":"https://feedad.com/privacy/","overflow":{"httpGetLimit":128}},"782":{"id":782,"name":"AirGrid LTD","purposes":[1,3,5,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[],"specialFeatures":[],"policyUrl":"airgid.io/privacy-policy"},"783":{"id":783,"name":"Audienzz AG","purposes":[1],"legIntPurposes":[2,3,4,5,6,7,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[1],"policyUrl":"https://audienzz.ch/wp-content/uploads/2020/03/AGB_audienzz_2020.pdf"},"784":{"id":784,"name":"Nubo LTD","purposes":[],"legIntPurposes":[2],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.recod3.com/privacypolicy.php"},"785":{"id":785,"name":"agof - daily digital facts","purposes":[1,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1],"features":[],"specialFeatures":[],"policyUrl":"http://www.agof.de/datenschutz/"},"755":{"id":755,"name":"Google Advertising Products","purposes":[1,3,4],"legIntPurposes":[2,5,6,7,9,10],"flexiblePurposes":[2,5,6,7,9,10],"specialPurposes":[1,2],"features":[1,2],"specialFeatures":[],"policyUrl":"https://policies.google.com/privacy"},"786":{"id":786,"name":"TargetVideo GmbH","purposes":[1,2,3,4],"legIntPurposes":[7,8,10],"flexiblePurposes":[2,3,4,7,8,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.target-video.com/datenschutz/"},"787":{"id":787,"name":"Resolution Media M\u00fcnchen GmbH","purposes":[1],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://wwww.nonstoppartner.net"},"788":{"id":788,"name":"Ad Alliance GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[1],"policyUrl":"https://www.ad-alliance.de/datenschutz/","overflow":{"httpGetLimit":128}},"789":{"id":789,"name":"IP Deutschland GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[],"features":[2],"specialFeatures":[1],"policyUrl":"https://www.ip.de/lp/impressum/datenschutz.cfm","overflow":{"httpGetLimit":32}},"790":{"id":790,"name":"AdGear Technologies, Inc.","purposes":[1,3,4],"legIntPurposes":[2,7,9,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[],"policyUrl":"https://adgear.com/en/privacy"},"791":{"id":791,"name":"Media Square","purposes":[1,2],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[],"specialFeatures":[],"policyUrl":"http://www.mediasquare.fr/e-privacy/"},"792":{"id":792,"name":"BritePool Inc","purposes":[1],"legIntPurposes":[3,7,10],"flexiblePurposes":[3,7,10],"specialPurposes":[1],"features":[1,2],"specialFeatures":[],"policyUrl":"https://britepool.com/gdpr-privacy-notice"},"794":{"id":794,"name":"Kubient Inc. ","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[1,2],"policyUrl":"https://kubient.com/privacy-policy/"},"795":{"id":795,"name":"Factor Eleven GmbH","purposes":[1,2,3,4,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://www.factor-eleven.de/datenschutz/"},"796":{"id":796,"name":"EASY Marketing GmbH","purposes":[1,7],"legIntPurposes":[],"flexiblePurposes":[7],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://easy-m.de/"},"797":{"id":797,"name":"Artefact Deutschland GmbH","purposes":[1,7],"legIntPurposes":[],"flexiblePurposes":[7],"specialPurposes":[1,2],"features":[2,3],"specialFeatures":[],"policyUrl":"https://aaa.artefact.com/privacy-policy.do"},"798":{"id":798,"name":"Adverticum cPlc.","purposes":[1,2,3,4,5,6,8,9,10],"legIntPurposes":[7],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://adverticum.net/english/privacy-and-data-processing-information/"},"799":{"id":799,"name":"Adpone SL","purposes":[1,2,4,5,7,9],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[2],"features":[2],"specialFeatures":[],"policyUrl":"http://www.adpone.com/privacy-policy/"},"800":{"id":800,"name":"Reppublika- The Research Toolbox GmbH","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[10],"specialPurposes":[1],"features":[2],"specialFeatures":[1],"policyUrl":"https://www.reppublika.com/privacy-policy"},"801":{"id":801,"name":"Bannernow, Inc.","purposes":[1,4],"legIntPurposes":[2,7],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[3],"specialFeatures":[],"policyUrl":"https://bannernow.com/privacy"},"802":{"id":802,"name":"NOW GmbH","purposes":[1,3,4,7],"legIntPurposes":[2,5,6,8,9,10],"flexiblePurposes":[2,3,4,5,6,7,8,9,10],"specialPurposes":[1,2],"features":[1,2,3],"specialFeatures":[1,2],"policyUrl":"https://static.now-services.de/privacy/index.html"},"803":{"id":803,"name":"Click Tech Limited","purposes":[1,2],"legIntPurposes":[3],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[1],"specialFeatures":[],"policyUrl":"https://en.yeahmobi.com/html/privacypolicy/","overflow":{"httpGetLimit":128}},"804":{"id":804,"name":"LinkedIn Ireland Unlimited Company","purposes":[1,3,4],"legIntPurposes":[2,7,10],"flexiblePurposes":[2,3,4,7,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.linkedin.com/legal/privacy-policy"},"805":{"id":805,"name":"LEESTEN INC","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[1,2],"policyUrl":"https://www.leesten.io/privacy-policy"},"807":{"id":807,"name":"Moloco, Inc.","purposes":[1],"legIntPurposes":[2,3,4,7,8,9,10],"flexiblePurposes":[2,3,4,7,8,9,10],"specialPurposes":[1,2],"features":[3],"specialFeatures":[2],"policyUrl":"http://www.molocoads.com/private-policy.html"},"808":{"id":808,"name":"Pure Local Media GmbH","purposes":[],"legIntPurposes":[2,7,10],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://purelocalmedia.de/?page_id=593"},"809":{"id":809,"name":"adnanny.com SLU","purposes":[1,2,3,4,7],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"http://adnanny.com/en/privacy/"},"811":{"id":811,"name":"iPROM","purposes":[1,2,3,4,5,6,7,8,9,10],"legIntPurposes":[],"flexiblePurposes":[],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://iprom.eu/privacy_policy/GDPR"},"793":{"id":793,"name":"Amazon Advertising","purposes":[1,2,3,4,7,9,10],"legIntPurposes":[],"flexiblePurposes":[2,3,4,7,9,10],"specialPurposes":[1,2],"features":[],"specialFeatures":[],"policyUrl":"https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201909010"}}} \ No newline at end of file diff --git a/iabgpp-extras-jackson/src/test/resources/vendorlist/v2/vendor-list.json b/iabgpp-extras-jackson/src/test/resources/vendorlist/v2/vendor-list.json new file mode 120000 index 0000000..1898b29 --- /dev/null +++ b/iabgpp-extras-jackson/src/test/resources/vendorlist/v2/vendor-list.json @@ -0,0 +1 @@ +vendor-list-v51.json \ No newline at end of file diff --git a/iabgpp-extras-jackson/src/test/resources/vendorlist/v3.0/vendor-list.json b/iabgpp-extras-jackson/src/test/resources/vendorlist/v3.0/vendor-list.json new file mode 100644 index 0000000..9c9e148 --- /dev/null +++ b/iabgpp-extras-jackson/src/test/resources/vendorlist/v3.0/vendor-list.json @@ -0,0 +1,20907 @@ +{ + "gvlSpecificationVersion": 3, + "vendorListVersion": 7, + "tcfPolicyVersion": 4, + "lastUpdated": "2023-06-29T16:07:26Z", + "purposes": { + "1": { + "id": 1, + "name": "Store and/or access information on a device", + "description": "Cookies, device or similar online identifiers (e.g. login-based identifiers, randomly assigned identifiers, network based identifiers) together with other information (e.g. browser type and information, language, screen size, supported technologies etc.) can be stored or read on your device to recognise it each time it connects to an app or to a website, for one or several of the purposes presented here. ", + "illustrations": [ + "Most purposes explained in this notice rely on the storage or accessing of information from your device when you use an app or visit a website. For example, a vendor or publisher might need to store a cookie on your device during your first visit on a website, to be able to recognise your device during your next visits (by accessing this cookie each time)." + ] + }, + "2": { + "id": 2, + "name": "Use limited data to select advertising", + "description": "Advertising presented to you on this service can be based on limited data, such as the website or app you are using, your non-precise location, your device type or which content you are (or have been) interacting with (for example, to limit the number of times an ad is presented to you).", + "illustrations": [ + "A car manufacturer wants to promote its electric vehicles to environmentally conscious users living in the city after office hours. The advertising is presented on a page with related content (such as an article on climate change actions) after 6:30 p.m. to users whose non-precise location suggests that they are in an urban zone.", + "A large producer of watercolour paints wants to carry out an online advertising campaign for its latest watercolour range, diversifying its audience to reach as many amateur and professional artists as possible and avoiding showing the ad next to mismatched content (for instance, articles about how to paint your house). The number of times that the ad has been presented to you is detected and limited, to avoid presenting it too often." + ] + }, + "3": { + "id": 3, + "name": "Create profiles for personalised advertising", + "description": "Information about your activity on this service (such as forms you submit, content you look at) can be stored and combined with other information about you (for example, information from your previous activity on this service and other websites or apps) or similar users. This is then used to build or improve a profile about you (that might include possible interests and personal aspects). Your profile can be used (also later) to present advertising that appears more relevant based on your possible interests by this and other entities.", + "illustrations": [ + "If you read several articles about the best bike accessories to buy, this information could be used to create a profile about your interest in bike accessories. Such a profile may be used or improved later on, on the same or a different website or app to present you with advertising for a particular bike accessory brand. If you also look at a configurator for a vehicle on a luxury car manufacturer website, this information could be combined with your interest in bikes to refine your profile and make an assumption that you are interested in luxury cycling gear.", + "An apparel company wishes to promote its new line of high-end baby clothes. It gets in touch with an agency that has a network of clients with high income customers (such as high-end supermarkets) and asks the agency to create profiles of young parents or couples who can be assumed to be wealthy and to have a new child, so that these can later be used to present advertising within partner apps based on those profiles." + ] + }, + "4": { + "id": 4, + "name": "Use profiles to select personalised advertising", + "description": "Advertising presented to you on this service can be based on your advertising profiles, which can reflect your activity on this service or other websites or apps (like the forms you submit, content you look at), possible interests and personal aspects.", + "illustrations": [ + "An online retailer wants to advertise a limited sale on running shoes. It wants to target advertising to users who previously looked at running shoes on its mobile app. Tracking technologies might be used to recognise that you have previously used the mobile app to consult running shoes, in order to present you with the corresponding advertisement on the app.", + "A profile created for personalised advertising in relation to a person having searched for bike accessories on a website can be used to present the relevant advertisement for bike accessories on a mobile app of another organisation." + ] + }, + "5": { + "id": 5, + "name": "Create profiles to personalise content", + "description": "Information about your activity on this service (for instance, forms you submit, non-advertising content you look at) can be stored and combined with other information about you (such as your previous activity on this service or other websites or apps) or similar users. This is then used to build or improve a profile about you (which might for example include possible interests and personal aspects). Your profile can be used (also later) to present content that appears more relevant based on your possible interests, such as by adapting the order in which content is shown to you, so that it is even easier for you to find content that matches your interests. \n", + "illustrations": [ + "You read several articles on how to build a treehouse on a social media platform. This information might be added to a profile to mark your interest in content related to outdoors as well as do-it-yourself guides (with the objective of allowing the personalisation of content, so that for example you are presented with more blog posts and articles on treehouses and wood cabins in the future).", + "You have viewed three videos on space exploration across different TV apps. An unrelated news platform with which you have had no contact builds a profile based on that viewing behaviour, marking space exploration as a topic of possible interest for other videos." + ] + }, + "6": { + "id": 6, + "name": "Use profiles to select personalised content", + "description": "Content presented to you on this service can be based on your content personalisation profiles, which can reflect your activity on this or other services (for instance, the forms you submit, content you look at), possible interests and personal aspects, such as by adapting the order in which content is shown to you, so that it is even easier for you to find (non-advertising) content that matches your interests.", + "illustrations": [ + "You read articles on vegetarian food on a social media platform and then use the cooking app of an unrelated company. The profile built about you on the social media platform will be used to present you vegetarian recipes on the welcome screen of the cooking app.", + "You have viewed three videos about rowing across different websites. An unrelated video sharing platform will recommend five other videos on rowing that may be of interest to you when you use your TV app, based on a profile built about you when you visited those different websites to watch online videos." + ] + }, + "7": { + "id": 7, + "name": "Measure advertising performance", + "description": "Information regarding which advertising is presented to you and how you interact with it can be used to determine how well an advert has worked for you or other users and whether the goals of the advertising were reached. For instance, whether you saw an ad, whether you clicked on it, whether it led you to buy a product or visit a website, etc. This is very helpful to understand the relevance of advertising campaigns.", + "illustrations": [ + "You have clicked on an advertisement about a “black Friday” discount by an online shop on the website of a publisher and purchased a product. Your click will be linked to this purchase. Your interaction and that of other users will be measured to know how many clicks on the ad led to a purchase.", + "You are one of very few to have clicked on an advertisement about an “international appreciation day” discount by an online gift shop within the app of a publisher. The publisher wants to have reports to understand how often a specific ad placement within the app, and notably the “international appreciation day” ad, has been viewed or clicked by you and other users, in order to help the publisher and its partners (such as agencies) optimise ad placements." + ] + }, + "8": { + "id": 8, + "name": "Measure content performance", + "description": "Information regarding which content is presented to you and how you interact with it can be used to determine whether the (non-advertising) content e.g. reached its intended audience and matched your interests. For instance, whether you read an article, watch a video, listen to a podcast or look at a product description, how long you spent on this service and the web pages you visit etc. This is very helpful to understand the relevance of (non-advertising) content that is shown to you. \n", + "illustrations": [ + "You have read a blog post about hiking on a mobile app of a publisher and followed a link to a recommended and related post. Your interactions will be recorded as showing that the initial hiking post was useful to you and that it was successful in interesting you in the related post. This will be measured to know whether to produce more posts on hiking in the future and where to place them on the home screen of the mobile app.", + "You were presented a video on fashion trends, but you and several other users stopped watching after 30 seconds. This information is then used to evaluate the right length of future videos on fashion trends." + ] + }, + "9": { + "id": 9, + "name": "Understand audiences through statistics or combinations of data from different sources", + "description": "Reports can be generated based on the combination of data sets (like user profiles, statistics, market research, analytics data) regarding your interactions and those of other users with advertising or (non-advertising) content to identify common characteristics (for instance, to determine which target audiences are more receptive to an ad campaign or to certain contents).", + "illustrations": [ + "The owner of an online bookstore wants commercial reporting showing the proportion of visitors who consulted and left its site without buying, or consulted and bought the last celebrity autobiography of the month, as well as the average age and the male/female distribution of each category. Data relating to your navigation on its site and to your personal characteristics is then used and combined with other such data to produce these statistics.", + "An advertiser wants to better understand the type of audience interacting with its adverts. It calls upon a research institute to compare the characteristics of users who interacted with the ad with typical attributes of users of similar platforms, across different devices. This comparison reveals to the advertiser that its ad audience is mainly accessing the adverts through mobile devices and is likely in the 45-60 age range." + ] + }, + "10": { + "id": 10, + "name": "Develop and improve services", + "description": "Information about your activity on this service, such as your interaction with ads or content, can be very helpful to improve products and services and to build new products and services based on user interactions, the type of audience, etc. This specific purpose does not include the development or improvement of user profiles and identifiers.", + "illustrations": [ + "A technology platform working with a social media provider notices a growth in mobile app users, and sees based on their profiles that many of them are connecting through mobile connections. It uses a new technology to deliver ads that are formatted for mobile devices and that are low-bandwidth, to improve their performance.", + "An advertiser is looking for a way to display ads on a new type of consumer device. It collects information regarding the way users interact with this new kind of device to determine whether it can build a new mechanism for displaying advertising on this type of device." + ] + }, + "11": { + "id": 11, + "name": "Use limited data to select content", + "description": "Content presented to you on this service can be based on limited data, such as the website or app you are using, your non-precise location, your device type, or which content you are (or have been) interacting with (for example, to limit the number of times a video or an article is presented to you).\n", + "illustrations": [ + "A travel magazine has published an article on its website about the new online courses proposed by a language school, to improve travelling experiences abroad. The school’s blog posts are inserted directly at the bottom of the page, and selected on the basis of your non-precise location (for instance, blog posts explaining the course curriculum for different languages than the language of the country you are situated in).\n", + "A sports news mobile app has started a new section of articles covering the most recent football games. Each article includes videos hosted by a separate streaming platform showcasing the highlights of each match. If you fast-forward a video, this information may be used to select a shorter video to play next.\n" + ] + } + }, + "specialPurposes": { + "1": { + "id": 1, + "name": "Ensure security, prevent and detect fraud, and fix errors\n", + "description": "Your data can be used to monitor for and prevent unusual and possibly fraudulent activity (for example, regarding advertising, ad clicks by bots), and ensure systems and processes work properly and securely. It can also be used to correct any problems you, the publisher or the advertiser may encounter in the delivery of content and ads and in your interaction with them.", + "illustrations": [ + "An advertising intermediary delivers ads from various advertisers to its network of partnering websites. It notices a large increase in clicks on ads relating to one advertiser, and uses data regarding the source of the clicks to determine that 80% of the clicks come from bots rather than humans." + ] + }, + "2": { + "id": 2, + "name": "Deliver and present advertising and content", + "description": "Certain information (like an IP address or device capabilities) is used to ensure the technical compatibility of the content or advertising, and to facilitate the transmission of the content or ad to your device.", + "illustrations": [ + "Clicking on a link in an article might normally send you to another page or part of the article. To achieve this, 1°) your browser sends a request to a server linked to the website, 2°) the server answers back (“here is the article you asked for”), using technical information automatically included in the request sent by your device, to properly display the information / images that are part of the article you asked for. Technically, such exchange of information is necessary to deliver the content that appears on your screen." + ] + } + }, + "features": { + "1": { + "id": 1, + "name": "Match and combine data from other data sources", + "description": "Information about your activity on this service may be matched and combined with other information relating to you and originating from various sources (for instance your activity on a separate online service, your use of a loyalty card in-store, or your answers to a survey), in support of the purposes explained in this notice.", + "illustrations": [] + }, + "2": { + "id": 2, + "name": "Link different devices", + "description": "In support of the purposes explained in this notice, your device might be considered as likely linked to other devices that belong to you or your household (for instance because you are logged in to the same service on both your phone and your computer, or because you may use the same Internet connection on both devices).", + "illustrations": [] + }, + "3": { + "id": 3, + "name": "Identify devices based on information transmitted automatically", + "description": "Your device might be distinguished from other devices based on information it automatically sends when accessing the Internet (for instance, the IP address of your Internet connection or the type of browser you are using) in support of the purposes exposed in this notice.", + "illustrations": [] + } + }, + "specialFeatures": { + "1": { + "id": 1, + "name": "Use precise geolocation data", + "description": "With your acceptance, your precise location (within a radius of less than 500 metres) may be used in support of the purposes explained in this notice.", + "illustrations": [] + }, + "2": { + "id": 2, + "name": "Actively scan device characteristics for identification", + "description": "With your acceptance, certain characteristics specific to your device might be requested and used to distinguish it from other devices (such as the installed fonts or plugins, the resolution of your screen) in support of the purposes explained in this notice.", + "illustrations": [] + } + }, + "stacks": { + "1": { + "id": 1, + "purposes": [], + "specialFeatures": [ + 1, + 2 + ], + "name": "Precise geolocation data, and identification through device scanning", + "description": "Precise geolocation and information about device characteristics can be used.\n\n" + }, + "2": { + "id": 2, + "purposes": [ + 2, + 7 + ], + "specialFeatures": [], + "name": "Advertising based on limited data and advertising measurement", + "description": "Advertising can be presented based on limited data. Advertising performance can be measured." + }, + "3": { + "id": 3, + "purposes": [ + 2, + 3, + 4 + ], + "specialFeatures": [], + "name": "Personalised advertising \n", + "description": "Advertising can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising.\n" + }, + "4": { + "id": 4, + "purposes": [ + 2, + 7, + 9 + ], + "specialFeatures": [], + "name": "Advertising based on limited data, advertising measurement, and understanding of the audiences", + "description": "Advertising can be presented based on limited data. Advertising performance can be measured. Reports can be generated based on your activity and those of others." + }, + "5": { + "id": 5, + "purposes": [ + 2, + 3, + 7 + ], + "specialFeatures": [], + "name": "Advertising based on limited data, personalised advertising profile, and advertising measurement\n\n", + "description": "Advertising can be presented based on limited data. Your activity on this service can be used to build or improve a profile about you for personalised advertising. Advertising performance can be measured." + }, + "6": { + "id": 6, + "purposes": [ + 2, + 4, + 7 + ], + "specialFeatures": [], + "name": "Selection of personalised advertising and advertising measurement", + "description": "Advertising can be personalised based on your profile. Advertising performance can be measured." + }, + "7": { + "id": 7, + "purposes": [ + 2, + 4, + 7, + 9 + ], + "specialFeatures": [], + "name": "Selection of personalised advertising, advertising measurement, and audience research", + "description": "Advertising can be personalised based on your profile. Advertising performance can be measured. Reports can be generated based on your activity and those of others." + }, + "8": { + "id": 8, + "purposes": [ + 2, + 3, + 4, + 7 + ], + "specialFeatures": [], + "name": "Personalised advertising and advertising measurement", + "description": "Advertising can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising. Advertising performance can be measured.\n" + }, + "9": { + "id": 9, + "purposes": [ + 2, + 3, + 4, + 7, + 9 + ], + "specialFeatures": [], + "name": "Personalised advertising, advertising measurement, and audience research", + "description": "Advertising can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising. Advertising performance can be measured. Reports can be generated based on your activity and those of others." + }, + "10": { + "id": 10, + "purposes": [ + 3, + 4 + ], + "specialFeatures": [], + "name": "Personalised advertising", + "description": "Advertising can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising." + }, + "11": { + "id": 11, + "purposes": [ + 5, + 6 + ], + "specialFeatures": [], + "name": "Personalised content", + "description": "Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content." + }, + "12": { + "id": 12, + "purposes": [ + 6, + 8, + 11 + ], + "specialFeatures": [], + "name": "Selection of personalised content and content measurement", + "description": "Content can be personalised based on your profile. Content performance can be measured.\n" + }, + "13": { + "id": 13, + "purposes": [ + 6, + 8, + 11 + ], + "specialFeatures": [], + "name": "Selection of personalised content, content measurement and audience research\n", + "description": "Content can be personalised based on your profile. Content performance can be measured. Reports can be generated based on your activity and those of others.Content can be personalised based on your profile. Content performance can be measured. Reports can be generated based on your activity and those of others. " + }, + "14": { + "id": 14, + "purposes": [ + 5, + 6, + 8, + 11 + ], + "specialFeatures": [], + "name": "Personalised content and content measurement", + "description": "Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Content performance can be measured." + }, + "15": { + "id": 15, + "purposes": [ + 5, + 6, + 8, + 9, + 11 + ], + "specialFeatures": [], + "name": "Personalised content, content measurement and audience research", + "description": "Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Content performance can be measured. Reports can be generated based on your activity and those of others." + }, + "16": { + "id": 16, + "purposes": [ + 5, + 6, + 8, + 9, + 10, + 11 + ], + "specialFeatures": [], + "name": "Personalised content, content measurement, audience research, and services development", + "description": "Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Content performance can be measured. Reports can be generated based on your activity and those of others. Your activity on this service can help develop and improve products and services." + }, + "17": { + "id": 17, + "purposes": [ + 7, + 8, + 9 + ], + "specialFeatures": [], + "name": "Advertising and content measurement, and audience research", + "description": "Advertising and content performance can be measured. Reports can be generated based on your activity and those of others." + }, + "18": { + "id": 18, + "purposes": [ + 7, + 8 + ], + "specialFeatures": [], + "name": "Advertising and content measurement\n\n", + "description": "Advertising and content performance can be measured." + }, + "19": { + "id": 19, + "purposes": [ + 7, + 9 + ], + "specialFeatures": [], + "name": "Advertising measurement and audience research", + "description": "Advertising can be measured. Reports can be generated based on your activity and those of others." + }, + "20": { + "id": 20, + "purposes": [ + 7, + 8, + 9, + 10 + ], + "specialFeatures": [], + "name": "Advertising and content measurement, audience research, and services development", + "description": "Advertising and content performance can be measured. Your activity on this service can help develop and improve products and services. Reports can be generated based on your activity and those of others. \n" + }, + "21": { + "id": 21, + "purposes": [ + 8, + 9, + 10 + ], + "specialFeatures": [], + "name": "Content measurement, audience research and services development.", + "description": "Content performance can be measured. Reports can be generated based on your activity and those of others. Your activity on this service can help develop and improve products and services." + }, + "22": { + "id": 22, + "purposes": [ + 8, + 10 + ], + "specialFeatures": [], + "name": "Content measurement and services development", + "description": "Content performance can be measured. Your activity on this service can help develop and improve products and services.\n" + }, + "23": { + "id": 23, + "purposes": [ + 2, + 4, + 6, + 7, + 8, + 11 + ], + "specialFeatures": [], + "name": "Selection of personalised advertising and content, advertising and content measurement", + "description": "Advertising and content can be personalised based on your profile. Advertising and content performance can be measured.\n" + }, + "24": { + "id": 24, + "purposes": [ + 2, + 4, + 6, + 7, + 8, + 9, + 11 + ], + "specialFeatures": [], + "name": "Selection of personalised advertising and content, advertising and content measurement, and audience research", + "description": "Advertising and content can be personalised based on your profile. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others. Data can be used to build or improve user experience, systems, and software." + }, + "25": { + "id": 25, + "purposes": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 11 + ], + "specialFeatures": [], + "name": "Personalised advertising and content, advertising and content measurement", + "description": "Advertising and content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising or content. Advertising and content performance can be measured." + }, + "26": { + "id": 26, + "purposes": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 11 + ], + "specialFeatures": [], + "name": "Personalised advertising and content, advertising and content measurement, and audience research", + "description": "Advertising and content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising or content. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others. \n" + }, + "27": { + "id": 27, + "purposes": [ + 3, + 5 + ], + "specialFeatures": [], + "name": "Personalised advertising and content profile", + "description": "Your activity on this service can be used to build or improve a profile about you for personalised advertising or content.\n" + }, + "28": { + "id": 28, + "purposes": [ + 2, + 4, + 6, + 11 + ], + "specialFeatures": [], + "name": "Selection of personalised advertising and content", + "description": "Advertising and content can be personalised based on your profile." + }, + "29": { + "id": 29, + "purposes": [ + 2, + 7, + 8, + 9 + ], + "specialFeatures": [], + "name": "Advertising based on limited data, advertising and content measurement, and audience research\n\n", + "description": "Advertising can be presented based on limited data. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others. \n" + }, + "30": { + "id": 30, + "purposes": [ + 2, + 4, + 5, + 6, + 7, + 8, + 9, + 11 + ], + "specialFeatures": [], + "name": "Selection of personalised advertising, personalised content, advertising and content measurement, and audience research\n", + "description": "Advertising and content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising or content. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others." + }, + "31": { + "id": 31, + "purposes": [ + 2, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "specialFeatures": [], + "name": "Selection of personalised advertising, personalised content, advertising and content measurement, audience research, and services development", + "description": "Advertising and content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others. Your activity on this service can help develop and improve products and services.\n" + }, + "32": { + "id": 32, + "purposes": [ + 2, + 5, + 6, + 7, + 8, + 9, + 11 + ], + "specialFeatures": [], + "name": "Advertising based on limited data, personalised content, advertising and content measurement, and audience research", + "description": "Advertising can be presented based on limited data. Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others. \n" + }, + "33": { + "id": 33, + "purposes": [ + 2, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "specialFeatures": [], + "name": "Advertising based on limited data, personalised content, advertising and content measurement, audience research, and services development", + "description": "Advertising can be presented based on limited data. Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others. Your activity on this service can help develop and improve products and services." + }, + "34": { + "id": 34, + "purposes": [ + 2, + 5, + 6, + 8, + 9, + 11 + ], + "specialFeatures": [], + "name": "Advertising based on limited data, personalised content, content measurement, and audience research", + "description": "Advertising can be presented based on limited data. Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others." + }, + "35": { + "id": 35, + "purposes": [ + 2, + 5, + 6, + 8, + 9, + 10, + 11 + ], + "specialFeatures": [], + "name": "Advertising based on limited data, personalised content, content measurement, audience research and services development", + "description": "Advertising can be presented based on limited data. Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Content performance can be measured. Reports can be generated based on your activity and those of others. Your activity on this service can help develop and improve products and services.\n" + }, + "36": { + "id": 36, + "purposes": [ + 2, + 5, + 6, + 7, + 11 + ], + "specialFeatures": [], + "name": "Advertising based on limited data, personalised content, and advertising measurement", + "description": "Advertising can be presented based on limited data. Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Advertising performance can be measured.\n" + }, + "37": { + "id": 37, + "purposes": [ + 2, + 5, + 6, + 7, + 10, + 11 + ], + "specialFeatures": [], + "name": "Advertising based on limited data, personalised content, advertising measurement, and services development", + "description": "Advertising can be presented based on limited data. Content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised content. Advertising performance can be measured. Your activity on this service can help develop and improve products and services.\n" + }, + "38": { + "id": 38, + "purposes": [ + 2, + 3, + 4, + 7, + 10 + ], + "specialFeatures": [], + "name": "Personalised advertising, advertising measurement, and services development", + "description": "Advertising can be personalised based on your profile.Your activity on this service can be used to build or improve a profile about you for personalised advertising. Advertising performance can be measured. Your activity on this service can help develop and improve products and services." + }, + "39": { + "id": 39, + "purposes": [ + 2, + 3, + 4, + 7, + 9, + 10 + ], + "specialFeatures": [], + "name": "Personalised advertising, advertising measurement, audience research and services development", + "description": "Advertising can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising. Advertising performance can be measured. Reports can be generated based on your activity and those of others. Your activity on this service can help develop and improve products and services." + }, + "40": { + "id": 40, + "purposes": [ + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "specialFeatures": [], + "name": "Personalised advertising, advertising and content measurement, audience research and services development", + "description": "Advertising can be personalised based on your profile.Your activity on this service can be used to build or improve a profile about you for personalised advertising. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others. Your activity on this service can help develop and improve products and services.\n" + }, + "41": { + "id": 41, + "purposes": [ + 2, + 3, + 4, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "specialFeatures": [], + "name": "Personalised advertising, selection of personalised content, advertising and content measurement, audience research and services development", + "description": "Advertising and content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others. Your activity on this service can help develop and improve products and services.\n" + }, + "42": { + "id": 42, + "purposes": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "specialFeatures": [], + "name": "Personalised advertising and content, advertising and content measurement, audience research and services development\n", + "description": "Advertising and content can be personalised based on your profile. Your activity on this service can be used to build or improve a profile about you for personalised advertising and content. Advertising and content performance can be measured. Reports can be generated based on your activity and those of others. Your activity on this service can help develop and improve products and services." + }, + "43": { + "id": 43, + "purposes": [ + 8, + 11 + ], + "specialFeatures": [], + "name": "Content based on limited data and content measurement", + "description": "Content can be selected based on limited data. Content performance can be measured." + } + }, + "dataCategories": { + "1": { + "id": 1, + "name": "IP addresses", + "description": "Your IP address is a number assigned by your Internet Service Provider to any Internet connection. It is not always specific to your device and is not always a stable identifier.\nIt is used to route information on the Internet and display online content (including ads) on your connected device." + }, + "2": { + "id": 2, + "name": "Device characteristics", + "description": "Technical characteristics about the device you are using that are not unique to you, such as the language, the time zone or the operating system." + }, + "3": { + "id": 3, + "name": "Device identifiers", + "description": "A device identifier is a unique string of characters assigned to your device or browser by means of a cookie or other storage technologies. \nIt may be created or accessed to recognise your device e.g. across web pages from the same site or across multiple sites or apps." + }, + "4": { + "id": 4, + "name": "Probabilistic identifiers", + "description": "A probabilistic identifier can be created by combining characteristics associated with your device (the type of browser or operating system used) and the IP address of the Internet connection. If you give your agreement, additional characteristics (e.g. the installed font or screen resolution) can also be combined to improve precision of the probabilistic identifier.\nSuch an identifier is considered \"probabilistic\" because several devices can share the same characteristics and Internet connection. It may be used to recognise your device across e.g. web pages from the same site or across multiple sites or apps." + }, + "5": { + "id": 5, + "name": "Authentication-derived identifiers", + "description": "Where an identifier is created on the basis of authentication data, such as contact details associated with online accounts you have created on websites or apps (e.g. e-mail address, phone number) or customer identifiers (e.g. identifier provided by your telecom operator), that identifier may be used to recognise you across websites, apps and devices when you are logged-in with the same contact details." + }, + "6": { + "id": 6, + "name": "Browsing and interaction data", + "description": "Your online activity such as the websites you visit, apps you are using, the content you search for on this service, or your interactions with content or ads, such as the number of times you have seen a specific content or ad or whether you clicked on it.\n" + }, + "7": { + "id": 7, + "name": "User-provided data", + "description": "The information you may have provided by way of declaration via a form (e.g. feedback, a comment) or when creating an account (e.g. your age, your occupation)." + }, + "8": { + "id": 8, + "name": "Non-precise location data", + "description": "An approximation of your location, expressed as an area with a radius of at least 500 meters. Your approximate location can be deduced from e.g. the IP address of your connection." + }, + "9": { + "id": 9, + "name": "Precise location data", + "description": "Your precise location within a radius of less than 500 meters based on your GPS coordinates. It may be used only with your acceptance." + }, + "10": { + "id": 10, + "name": "Users’ profiles", + "description": "Certain characteristics (e.g. your possible interests, your purchase intentions, your consumer profile) may be inferred or modeled from your previous online activity (e.g. the content you viewed or the service you used, your time spent on various online content and services) or the information you have provided (e.g. your age, your occupation)." + }, + "11": { + "id": 11, + "name": "Privacy choices", + "description": "Your preferences regarding the processing of your data, based on the information you have received." + } + }, + "vendors": { + "1": { + "id": 1, + "name": "Exponential Interactive, Inc d/b/a VDX.tv", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 397, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://vdx.tv/privacy/", + "legIntClaim": "https://cdnx.exponential.com/wp-content/uploads/2018/04/Balancing-Assessment-for-Legitimate-Interest-Publishers-v2.pdf" + } + ], + "dataDeclaration": [ + 1, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://vdxtv.expo.workers.dev" + }, + "2": { + "id": 2, + "name": "Captify Technologies Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.captifytechnologies.com/privacy-notice/", + "legIntClaim": "https://www.captifytechnologies.com/privacy-notice/" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://static.cpx.to/gvl/deviceStorageDisclosure.json" + }, + "6": { + "id": 6, + "name": "AdSpirit GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 60, + "purposes": { + "2": 14, + "7": 14 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://help.adspirit.de/privacy.php", + "legIntClaim": "https://help.adspirit.de/privacy.php" + }, + { + "langId": "de", + "privacy": "https://help.adspirit.de/privacy.php", + "legIntClaim": "https://help.adspirit.de/privacy.php" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://help.adspirit.de/deviceStorage.json" + }, + "8": { + "id": 8, + "name": "Emerse Sverige AB", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9 + ], + "flexiblePurposes": [ + 2, + 9 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.emerse.com/privacy-policy/", + "legIntClaim": "https://www.emerse.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://s3.eu-west-1.amazonaws.com/cors.emerse.com/gdpr-tcf.json" + }, + "12": { + "id": 12, + "name": "BeeswaxIO Corporation", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34109999, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": { + "7": 4320 + }, + "specialPurposes": { + "1": 392, + "2": 4320 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.beeswax.com/privacy/", + "legIntClaim": "https://www.beeswax.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://beeswax.com/devicedisclosure.json" + }, + "20": { + "id": 20, + "name": "N.Rich Technologies Inc.", + "purposes": [ + 1, + 3, + 4, + 5 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 46656000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 540, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://n.rich/privacy-notice", + "legIntClaim": "https://n.rich/privacy-notice" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://privacy.nrich.ai/.well-known/deviceStorage.json" + }, + "21": { + "id": 21, + "name": "The UK Trade Desk Ltd", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 313536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 99, + "purposes": { + "2": 365, + "4": 132 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.thetradedesk.com/us/privacy", + "legIntClaim": "https://www.thetradedesk.com/us/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": " https://ttd-misc-public-assets.s3.us-west-2.amazonaws.com/deviceStorageDisclosureURL.json" + }, + "26": { + "id": 26, + "name": "Venatus Media Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.venatus.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 8 + ], + "deviceStorageDisclosureUrl": "https://www.venatus.com/tcf-gvl-disclosure.json" + }, + "27": { + "id": 27, + "name": "ADventori SAS", + "purposes": [ + 1, + 2, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 400, + "purposes": { + "2": 90, + "4": 90 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adventori.com/with-us/legal-notice/", + "legIntClaim": "https://www.adventori.com/with-us/legal-notice/" + } + ], + "dataDeclaration": [ + 1, + 3, + 5, + 6, + 7, + 8 + ], + "deviceStorageDisclosureUrl": "https://adventori.com/.well-known/tcf-adventori-device-storage-disclosure.json" + }, + "29": { + "id": 29, + "name": "ETARGET SE", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 60, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://sk.search.etargetnet.com/policy.html" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://www.etarget.sk/cookies2.json" + }, + "30": { + "id": 30, + "name": "BidTheatre AB", + "purposes": [ + 1, + 3, + 4, + 7 + ], + "legIntPurposes": [ + 2 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 7, + "purposes": { + "3": 60, + "4": 0, + "7": 180 + }, + "specialPurposes": { + "1": 30 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.bidtheatre.com/privacy-policy", + "legIntClaim": "https://www.bidtheatre.com/resource/LIA_ferq.pdf" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.bidtheatre.com/deviceStorage.json" + }, + "31": { + "id": 31, + "name": "Ogury Ltd", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 182, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 400, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://ogury.com/privacy-policy/", + "legIntClaim": "https://ogury.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://consent-form.ogury.co/disclosure.json" + }, + "32": { + "id": 32, + "name": "Xandr, Inc.", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": { + "2": 180, + "7": 60, + "10": 60 + }, + "specialPurposes": { + "1": 540 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.xandr.com/privacy/platform-privacy-policy/", + "legIntClaim": "https://about.ads.microsoft.com/en-us/solutions/xandr/platform-privacy-policy#p_lt_ctl01_pageplaceholder_p_lt_ctl00_pageplaceholder_p_lt_WebPartZone3_zonePageBody_BingAds_PageContentViewer_PageContentViewerAll_ctl18_ctl00_ColumnsContainer" + }, + { + "langId": "pt", + "privacy": "https://about.ads.microsoft.com/pt-br/solutions/xandr/politica-de-privacidade-da-plataforma", + "legIntClaim": "https://about.ads.microsoft.com/pt-br/solutions/xandr/politica-de-privacidade-da-plataforma#p_lt_ctl01_pageplaceholder_p_lt_ctl00_pageplaceholder_p_lt_WebPartZone3_zonePageBody_BingAds_PageContentViewer_PageContentViewerAll_ctl16_ctl00_ColumnsContainer" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://acdn.adnxs.com/gvl/1d/xandrdevicestoragedisclosures.json" + }, + "33": { + "id": 33, + "name": "ShareThis, Inc", + "purposes": [ + 1, + 3, + 5 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 33696000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://sharethis.com/privacy/" + }, + { + "langId": "fr", + "privacy": "https://pcdn.sharethis.com/wp-content/uploads/2021/11/ShareThis-Privacy-Policy-11.2.21_FR.pdf" + }, + { + "langId": "es", + "privacy": "https://pcdn.sharethis.com/wp-content/uploads/2021/11/ShareThis-Privacy-Policy-11.2.21_ES.pdf" + }, + { + "langId": "it", + "privacy": "https://pcdn.sharethis.com/wp-content/uploads/2021/11/ShareThis-Privacy-Policy-11.2.21_IT.pdf" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://c.sharethis.mgr.consensu.org/disclosures.json" + }, + "34": { + "id": 34, + "name": "NEORY GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.neory.com/privacy.html", + "legIntClaim": "https://www.neory.com/privacy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://ad.ad-srv.net/privacy/tcf/deviceStorage/6505e3798148a611.json" + }, + "37": { + "id": 37, + "name": "NEURAL.ONE", + "purposes": [ + 1, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://web.neural.one/privacy-policy/", + "legIntClaim": "https://web.neural.one/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://web.neural.one/.well-known/deviceStorage.json" + }, + "39": { + "id": 39, + "name": "ADITION (Virtual Minds GmbH)", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": { + "7": 30, + "9": 7, + "10": 7 + }, + "specialPurposes": { + "1": 3, + "2": 3 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adition.com/en/privacy-platform", + "legIntClaim": "https://www.adition.com/en/privacy-platform" + }, + { + "langId": "de", + "privacy": "https://www.adition.com/datenschutz-plattform/", + "legIntClaim": "https://www.adition.com/datenschutz-plattform/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://imagesrv.adition.com/tcf/deviceStorage_adition.json" + }, + "40": { + "id": 40, + "name": "Active Agent (Virtual Minds GmbH)", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": { + "7": 30, + "9": 7, + "10": 7 + }, + "specialPurposes": { + "1": 3, + "2": 3 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adition.com/en/privacy-platform", + "legIntClaim": "https://www.adition.com/en/privacy-platform" + }, + { + "langId": "de", + "privacy": "https://www.adition.com/datenschutz-plattform/", + "legIntClaim": "https://www.adition.com/datenschutz-plattform/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://imagesrv.adition.com/tcf/deviceStorage_activeagent.json" + }, + "44": { + "id": 44, + "name": "Adex (Virtual Minds GmbH)", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://theadex.com/privacy-platform/", + "legIntClaim": "https://theadex.com/privacy-platform/" + }, + { + "langId": "de", + "privacy": "https://theadex.com/datenschutz-plattform/", + "legIntClaim": "https://theadex.com/datenschutz-plattform/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://dmp.theadex.com/.well-known/deviceStorage.json" + }, + "45": { + "id": 45, + "name": "Smart Adserver", + "purposes": [ + 1, + 2, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34214395, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 40, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://smartadserver.com/end-user-privacy-policy/", + "legIntClaim": "https://smartadserver.com/end-user-privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://apps.smartadserver.com/device-storage-disclosures/equativDeviceStorageDisclosures.json" + }, + "46": { + "id": 46, + "name": "Skimbit Ltd", + "purposes": [], + "legIntPurposes": [ + 7, + 8 + ], + "flexiblePurposes": [ + 7, + 8 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://skimlinks.com/privacy-policies/", + "legIntClaim": "https://skimlinks.com/privacy-policies/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://storage.googleapis.com/skimthru-js/js/skimlinks_tcf_disclosures.json" + }, + "52": { + "id": 52, + "name": "Magnite, Inc. ", + "purposes": [ + 1, + 3, + 4, + 5 + ], + "legIntPurposes": [ + 2, + 7, + 10, + 11 + ], + "flexiblePurposes": [ + 2, + 7, + 10, + 11 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 28, + "purposes": { + "10": 90 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.magnite.com/legal/advertising-technology-privacy-policy/", + "legIntClaim": "https://www.magnite.com/legal/advertising-technology-privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://gdpr.rubiconproject.com/dvplus/devicestoragedisclosure.json" + }, + "53": { + "id": 53, + "name": "Sirdata", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 185, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.sirdata.com/en/Privacy", + "legIntClaim": "https://www.sirdata.com/en/Privacy#legitimateinterest" + }, + { + "langId": "fr", + "privacy": "https://www.sirdata.com/fr/Vie-Privee", + "legIntClaim": "https://www.sirdata.com/fr/Vie-Privee#legitimateinterest" + }, + { + "langId": "bg", + "privacy": "https://www.sirdata.com/en/Privacy-bg", + "legIntClaim": "https://www.sirdata.com/en/Privacy-bg#legitimateinterest" + }, + { + "langId": "zh", + "privacy": "https://www.sirdata.com/en/Privacy-zh", + "legIntClaim": "https://www.sirdata.com/en/Privacy-zh#legitimateinterest" + }, + { + "langId": "cs", + "privacy": "https://www.sirdata.com/en/Privacy-cs", + "legIntClaim": "https://www.sirdata.com/en/Privacy-cs#legitimateinterest" + }, + { + "langId": "da", + "privacy": "https://www.sirdata.com/en/Privacy-da", + "legIntClaim": "https://www.sirdata.com/en/Privacy-da#legitimateinterest" + }, + { + "langId": "nl", + "privacy": "https://www.sirdata.com/en/Privacy-nl", + "legIntClaim": "https://www.sirdata.com/en/Privacy-nl#legitimateinterest" + }, + { + "langId": "et", + "privacy": "https://www.sirdata.com/en/Privacy-et", + "legIntClaim": "https://www.sirdata.com/en/Privacy-et#legitimateinterest" + }, + { + "langId": "fi", + "privacy": "https://www.sirdata.com/en/Privacy-fi", + "legIntClaim": "https://www.sirdata.com/en/Privacy-fi#legitimateinterest" + }, + { + "langId": "de", + "privacy": "https://www.sirdata.com/en/Privacy-de", + "legIntClaim": "https://www.sirdata.com/en/Privacy-de#legitimateinterest" + }, + { + "langId": "el", + "privacy": "https://www.sirdata.com/en/Privacy-el", + "legIntClaim": "https://www.sirdata.com/en/Privacy-el#legitimateinterest" + }, + { + "langId": "hu", + "privacy": "https://www.sirdata.com/en/Privacy-hu", + "legIntClaim": "https://www.sirdata.com/en/Privacy-hu#legitimateinterest" + }, + { + "langId": "it", + "privacy": "https://www.sirdata.com/en/Privacy-it", + "legIntClaim": "https://www.sirdata.com/en/Privacy-it#legitimateinterest" + }, + { + "langId": "ja", + "privacy": "https://www.sirdata.com/en/Privacy-ja", + "legIntClaim": "https://www.sirdata.com/en/Privacy-ja#legitimateinterest" + }, + { + "langId": "lv", + "privacy": "https://www.sirdata.com/en/Privacy-lv", + "legIntClaim": "https://www.sirdata.com/en/Privacy-lv#legitimateinterest" + }, + { + "langId": "lt", + "privacy": "https://www.sirdata.com/en/Privacy-lt", + "legIntClaim": "https://www.sirdata.com/en/Privacy-lt#legitimateinterest" + }, + { + "langId": "no", + "privacy": "https://www.sirdata.com/en/Privacy-no", + "legIntClaim": "https://www.sirdata.com/en/Privacy-no#legitimateinterest" + }, + { + "langId": "pl", + "privacy": "https://www.sirdata.com/en/Privacy-pl", + "legIntClaim": "https://www.sirdata.com/en/Privacy-pl#legitimateinterest" + }, + { + "langId": "pt", + "privacy": "https://www.sirdata.com/en/Privacy-pt-PT", + "legIntClaim": "https://www.sirdata.com/en/Privacy-pt-PT#legitimateinterest" + }, + { + "langId": "ro", + "privacy": "https://www.sirdata.com/en/Privacy-ro", + "legIntClaim": "https://www.sirdata.com/en/Privacy-ro#legitimateinterest" + }, + { + "langId": "ru", + "privacy": "https://www.sirdata.com/en/Privacy-ru", + "legIntClaim": "https://www.sirdata.com/en/Privacy-ru#legitimateinterest" + }, + { + "langId": "sk", + "privacy": "https://www.sirdata.com/en/Privacy-sk", + "legIntClaim": "https://www.sirdata.com/en/Privacy-sk#legitimateinterest" + }, + { + "langId": "sl", + "privacy": "https://www.sirdata.com/en/Privacy-sl", + "legIntClaim": "https://www.sirdata.com/en/Privacy-sl#legitimateinterest" + }, + { + "langId": "es", + "privacy": "https://www.sirdata.com/en/Privacy-es", + "legIntClaim": "https://www.sirdata.com/en/Privacy-es#legitimateinterest" + }, + { + "langId": "sv", + "privacy": "https://www.sirdata.com/en/Privacy-sv", + "legIntClaim": "https://www.sirdata.com/en/Privacy-sv#legitimateinterest" + }, + { + "langId": "tr", + "privacy": "https://www.sirdata.com/en/Privacy-tr", + "legIntClaim": "https://www.sirdata.com/en/Privacy-tr#legitimateinterest" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.sirdata.eu/sirdata_device_storage_disclosure.json" + }, + "57": { + "id": 57, + "name": "RATEGAIN ADARA INC", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "2": 365, + "3": 365, + "4": 365, + "7": 730, + "9": 730, + "10": 730 + }, + "specialPurposes": { + "1": 730, + "2": 365 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adara.com/privacy-promise/", + "legIntClaim": "https://adara.com/privacy-promise/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://storage.googleapis.com/adara-public/iab/device-storage-disclosure.json" + }, + "61": { + "id": 61, + "name": "GumGum, Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 400, + "purposes": { + "3": 720, + "4": 720 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.gumgum.com/terms-and-policies/privacy-policy", + "legIntClaim": "https://gumgum.com/terms-and-policies/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://marketing.gumgum.com/devicestoragedisclosures.json" + }, + "62": { + "id": 62, + "name": "Justpremium BV", + "purposes": [ + 1, + 2, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 400, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://justpremium.com/privacy-policy/", + "legIntClaim": "https://justpremium.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.justpremium.com/devicestoragedisclosures.json" + }, + "66": { + "id": 66, + "name": "adsquare GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 400, + "purposes": { + "2": 0, + "11": 0 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adsquare.com/privacy/", + "legIntClaim": "https://adsquare.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "deviceStorageDisclosureUrl": "https://adsquare.com/deviceStorage.json" + }, + "70": { + "id": 70, + "name": "Yieldlab (Virtual Minds GmbH)", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 4, + "purposes": { + "2": 30, + "3": 30, + "4": 30 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.yieldlab.com/datenschutz/", + "legIntClaim": "https://www.yieldlab.com/datenschutz/" + }, + { + "langId": "en", + "privacy": "https://yieldlab.com/privacy-platform/", + "legIntClaim": "https://yieldlab.com/privacy-platform/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://ad.yieldlab.net/deviceStorage.json" + }, + "75": { + "id": 75, + "name": "M32 Connect Inc", + "purposes": [ + 1, + 2, + 3, + 4, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://m32connect.com/privacy-consent-management/privacy-cookie-policy/", + "legIntClaim": "https://m32connect.com/privacy-consent-management/privacy-cookie-policy/" + }, + { + "langId": "fr", + "privacy": "https://m32connect.com/fr/vie-privee-et-gestion-du-consentement/politique-de-confidentialite/", + "legIntClaim": "https://m32connect.com/fr/vie-privee-et-gestion-du-consentement/politique-de-confidentialite/" + } + ], + "dataDeclaration": [ + 1, + 2, + 5, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://rdc.m32.media/gdpr/vendors_disclosure.json" + }, + "77": { + "id": 77, + "name": "Comscore B.V.", + "purposes": [ + 1, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 62208000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.scorecardresearch.com/privacy.aspx" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 11 + ], + "deviceStorageDisclosureUrl": "https://census-web.scorecardresearch.com/tcf_vendor_disclosures.json" + }, + "83": { + "id": 83, + "name": "Visarity Technologies GmbH", + "purposes": [], + "legIntPurposes": [ + 8 + ], + "flexiblePurposes": [ + 8 + ], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://primo.design/docs/PrivacyPolicyPrimo.html", + "legIntClaim": "https://primo.design/docs/PrivacyPolicyPrimo.html" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://script.visarity.com/tcf/tcf-visarity.json" + }, + "85": { + "id": 85, + "name": "Crimtan Holdings Limited", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": { + "7": 1095, + "10": 1095 + }, + "specialPurposes": { + "2": 1095 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.crimtan.com/privacy-policy/", + "legIntClaim": "https://www.crimtan.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://a.ctnsnet.com/tcf.json" + }, + "87": { + "id": 87, + "name": "Betgenius Ltd", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://geniussports.com/policies/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://gsm-tcf.s3.eu-west-1.amazonaws.com/gsm-tcf.json" + }, + "90": { + "id": 90, + "name": "Teroa S.A.", + "purposes": [ + 1, + 2, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 220752000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 3650, + "purposes": { + "2": 0 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.e-planning.net/privacy-policy.html", + "legIntClaim": "https://www.e-planning.net/privacy-policy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://www.e-planning.net/deviceStorageDisclosureUrl.json" + }, + "92": { + "id": 92, + "name": "1plusX AG", + "purposes": [ + 1, + 3, + 5 + ], + "legIntPurposes": [ + 7, + 8, + 9 + ], + "flexiblePurposes": [ + 7, + 8, + 9 + ], + "specialPurposes": [], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.1plusx.com/privacy-policy/", + "legIntClaim": "https://www.1plusx.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://device-storage-disclosure.1plusx.io" + }, + "93": { + "id": 93, + "name": "Adloox SA", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7 + ], + "flexiblePurposes": [ + 7 + ], + "specialPurposes": [ + 1 + ], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 396, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adloox.com/legal/privacy-policy", + "legIntClaim": "https://www.adloox.com/legal/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://j.adlooxtracking.com/ads/tcf.json" + }, + "94": { + "id": 94, + "name": "Blis Global Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34560000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 400, + "purposes": {}, + "specialPurposes": { + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://blis.com/blis-privacy-policy-for-online-advertising-and-related-uses/", + "legIntClaim": "https://blis.com/legitimate-interests-statement/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://privacy.blismedia.com/.well-known/deviceStorage.json" + }, + "100": { + "id": 100, + "name": "Fifty Technology Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 183, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://fifty.io/privacy-policy", + "legIntClaim": "https://fifty.io/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://fifty.io/privacy/deviceStorage.json" + }, + "104": { + "id": 104, + "name": "Sonobi, Inc", + "purposes": [ + 1, + 2, + 3, + 4 + ], + "legIntPurposes": [ + 7, + 8 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 5184000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 548, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://sonobi.com/privacy-policy/", + "legIntClaim": "https://sonobi.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 3, + 8 + ], + "deviceStorageDisclosureUrl": "https://sonobi.com/tcf2-device-storage-disclosure.json" + }, + "108": { + "id": 108, + "name": "Rich Audience Technologies SL", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://richaudience.com/en/privacy/" + }, + { + "langId": "es", + "privacy": "https://richaudience.com/es/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 8 + ], + "deviceStorageDisclosureUrl": "https://cdnj.richaudience.com/52a26ab9400b2a9f5aabfa20acf3196g.json" + }, + "109": { + "id": 109, + "name": "LoopMe Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [ + 10 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 396, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://legal.loopme.com/privacy-center#contract-hyartvn1o", + "legIntClaim": "https://legal.loopme.com/privacy-center#contract-hyartvn1o" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://co.loopme.com/deviceStorageDisclosure.json" + }, + "111": { + "id": 111, + "name": "Showheroes SE", + "purposes": [ + 1, + 3, + 4, + 9, + 10 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 11 + ], + "flexiblePurposes": [ + 2, + 7, + 8 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 33955200, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 393, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://showheroes.com/privacy-policy/", + "legIntClaim": "https://showheroes.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 3, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://static-origin.showheroes.com/gvl_storage_disclosure.json" + }, + "114": { + "id": 114, + "name": "Sublime", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 34164060, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": { + "2": 0, + "7": 365, + "9": 365 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://ayads.co/privacy.php" + } + ], + "dataDeclaration": [ + 1, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://gdpr.ayads.co/cookiepolicy.json" + }, + "115": { + "id": 115, + "name": "smartclip Europe GmbH", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 120, + "purposes": { + "2": 30, + "3": 365, + "4": 365 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://privacy-portal.smartclip.net/de/privacy-policy", + "legIntClaim": "https://privacy-portal.smartclip.net/de/privacy-policy" + }, + { + "langId": "en", + "privacy": "https://privacy-portal.smartclip.net/en/privacy-policy", + "legIntClaim": "https://privacy-portal.smartclip.net/en/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.smartclip.net/iab/deviceStorageDisclosure.json" + }, + "124": { + "id": 124, + "name": "Near Intelligence", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": { + "7": 180 + }, + "specialPurposes": { + "1": 30, + "2": 30 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://near.com/fr/privacy-policy/", + "legIntClaim": "https://near.com/fr/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 9 + ], + "deviceStorageDisclosureUrl": "https://near.com/iab/disclosures.json" + }, + "126": { + "id": 126, + "name": "DoubleVerify Inc.​", + "purposes": [], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 31, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://doubleverify.com/privacy-notice/solutions-privacy-notice", + "legIntClaim": "https://doubleverify.com/privacy-notice/solutions-privacy-notice" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.doubleverify.com/static/Doubleverify_TCF.json" + }, + "131": { + "id": 131, + "name": "ID5 Technology Ltd", + "purposes": [ + 1 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://id5.io/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://id5-sync.com/tcf/disclosures.json" + }, + "132": { + "id": 132, + "name": "Teads France SAS", + "purposes": [ + 1, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [ + 2 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 120, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.teads.com/privacy-policy/", + "legIntClaim": "https://privacy-policy.teads.com/privacy-policy/european-privacy-notice/" + }, + { + "langId": "fr", + "privacy": "https://privacy-policy.teads.com/privacy-policy/privacy-policy-general-notice-fr/", + "legIntClaim": "https://privacy-policy.teads.com/privacy-policy/politique-de-confidentialite-europe/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://iab-cookie-disclosure.teads.tv/deviceStorage.json" + }, + "133": { + "id": 133, + "name": "digitalAudience B.V.", + "purposes": [ + 1, + 3, + 5, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31557600, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://digitalaudience.io/legal/" + } + ], + "dataDeclaration": [ + 1, + 3, + 5, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://dadocuments.blob.core.windows.net/documents/IAB-dA-Device-Storage-Disclosure-08092022.json" + }, + "134": { + "id": 134, + "name": "SMARTSTREAM.TV GmbH", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.smartstream.tv/en/productprivacy", + "legIntClaim": "https://www.smartstream.tv/en/productprivacy" + }, + { + "langId": "de", + "privacy": "https://www.smartstream.tv/de/produktdatenschutz", + "legIntClaim": "https://www.smartstream.tv/de/produktdatenschutz" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://tcf.adtech.app/gen/deviceStorageDisclosure/stv.json" + }, + "136": { + "id": 136, + "name": "Ströer SSP GmbH (SSP)", + "purposes": [ + 1, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": { + "2": 0 + }, + "specialPurposes": { + "1": 183, + "2": 0 + } + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.stroeer.de/ssp-datenschutz", + "legIntClaim": "https://www.stroeer.de/ssp-datenschutz" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.stroeer.de/StroeerSSP_deviceStorage.json" + }, + "137": { + "id": 137, + "name": "OS Data Solutions GmbH & Co. KG", + "purposes": [ + 1, + 3, + 5 + ], + "legIntPurposes": [ + 9, + 10 + ], + "flexiblePurposes": [ + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://osdatasolutions.de/datenschutz/", + "legIntClaim": "https://osdatasolutions.de/datenschutz/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.stroeer.de/StroeerDSP_deviceStorage.json" + }, + "138": { + "id": 138, + "name": "ConnectAd Demand GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 2628000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://connectadrealtime.com/privacy/", + "legIntClaim": "https://connectadrealtime.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 11 + ], + "deviceStorageDisclosureUrl": "https://connectad.io/tcf_storage.json" + }, + "139": { + "id": 139, + "name": "Permodo GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://permodo.com/de/privacy.html", + "legIntClaim": "https://permodo.com/de/privacy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://tcf.adtech.app/gen/deviceStorageDisclosure/per.json" + }, + "140": { + "id": 140, + "name": "Platform161 B.V.", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34164000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": { + "3": 390, + "7": 30, + "10": 365 + }, + "specialPurposes": { + "1": 7 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://verve.com/dsp-cookies-privacy/", + "legIntClaim": "https://verve.com/dsp-cookies-privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://static2.creative-serving.com/deviceStorage.json" + }, + "149": { + "id": 149, + "name": "ADman Interactive SLU", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31535998, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "es", + "privacy": "https://admanmedia.com/politica.html", + "legIntClaim": "https://admanmedia.com/politica.html" + } + ], + "dataDeclaration": [ + 2 + ], + "deviceStorageDisclosureUrl": "https://admanmedia.com/deviceStorage.json" + }, + "150": { + "id": 150, + "name": "Inskin Media LTD", + "purposes": [ + 1, + 3, + 4, + 9, + 10 + ], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31622400, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "2": 4320, + "3": 90, + "4": 90, + "7": 4320, + "9": 90, + "10": 4320 + }, + "specialPurposes": { + "1": 90, + "2": 4320 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.inskinmedia.com/privacy-policy.html", + "legIntClaim": "https://www.inskinmedia.com/privacy-policy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.inskinad.com/deviceStorageDisclosure.json" + }, + "151": { + "id": 151, + "name": "MOOT TECHNOLOGY LTD", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 0, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 390, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://admedo.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://admedo.com/admedo_device_storage_url.json" + }, + "153": { + "id": 153, + "name": "MADVERTISE MEDIA", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 10368000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 120, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://madvertise.com/en/gdpr/", + "legIntClaim": "https://madvertise.com/en/gdpr/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://mobile.mng-ads.com/deviceStorage.json" + }, + "154": { + "id": 154, + "name": "YOC AG", + "purposes": [ + 1, + 3, + 4, + 10 + ], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://yoc.com/privacy/", + "legIntClaim": "https://yoc.com/privacy/" + }, + { + "langId": "de", + "privacy": "https://yoc.com/de/datenschutz/", + "legIntClaim": "https://yoc.com/de/datenschutz/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.yoc.com/visx/sellers/deviceStorage.json" + }, + "155": { + "id": 155, + "name": "AntVoice", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 34819200, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 403, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.antvoice.com/en/privacypolicy/", + "legIntClaim": "https://www.antvoice.com/en/privacypolicy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://av-eu-marketing.storage.googleapis.com/deviceStorage.json" + }, + "156": { + "id": 156, + "name": "Basis Global Technologies, Inc.", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "2": 0, + "3": 180, + "4": 180, + "7": 35, + "10": 540 + }, + "specialPurposes": { + "1": 540, + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://privacy.basis.net/", + "legIntClaim": "https://privacy.basis.net/#gdpr" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://privacy.basis.net/devicestorage.json" + }, + "160": { + "id": 160, + "name": "Audience Solutions S.A.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "pl", + "privacy": "https://audience-solutions.com/privacy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://audience-solutions.com/.well-known/deviceStorage.json" + }, + "161": { + "id": 161, + "name": "SMADEX, S.L.U.", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://smadex.com/privacy-policy/", + "legIntClaim": "https://smadex.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://statics.smadex.com/tcf-storage.json" + }, + "163": { + "id": 163, + "name": "Bombora Inc.", + "purposes": [ + 1, + 3 + ], + "legIntPurposes": [ + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 7, + 9, + 10 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://bombora.com/privacy", + "legIntClaim": "https://bombora.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 8, + 10 + ], + "deviceStorageDisclosureUrl": "https://ml314.com/deviceStorage.json" + }, + "164": { + "id": 164, + "name": "Outbrain UK Ltd", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 396, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.outbrain.com/privacy", + "legIntClaim": "https://www.outbrain.com/privacy" + }, + { + "langId": "fr", + "privacy": "https://www.outbrain.com/privacy/fr", + "legIntClaim": "https://www.outbrain.com/privacy/fr" + }, + { + "langId": "de", + "privacy": "https://www.outbrain.com/privacy/de/", + "legIntClaim": "https://www.outbrain.com/privacy/de/" + }, + { + "langId": "it", + "privacy": "https://www.outbrain.com/privacy/it/", + "legIntClaim": "https://www.outbrain.com/privacy/it/" + }, + { + "langId": "ja", + "privacy": "https://www.outbrain.com/privacy/jp/", + "legIntClaim": "https://www.outbrain.com/privacy/jp/" + }, + { + "langId": "nl", + "privacy": "https://www.outbrain.com/privacy/nl/", + "legIntClaim": "https://www.outbrain.com/privacy/nl/" + }, + { + "langId": "pt", + "privacy": "https://www.outbrain.com/privacy/pt/", + "legIntClaim": "https://www.outbrain.com/privacy/pt/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.outbrain.com/privacy/wp-json/privacy/v2/devicestorage.json" + }, + "173": { + "id": 173, + "name": "Yieldmo, Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 390, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.yieldmo.com/privacy/", + "legIntClaim": "https://www.yieldmo.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://s3.amazonaws.com/devicestoragedisclosureurl.yieldmo.com/deviceStorage.json" + }, + "185": { + "id": 185, + "name": "Bidtellect, Inc", + "purposes": [ + 2, + 3, + 4, + 5, + 6, + 7, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 28, + "purposes": { + "5": 365, + "6": 365 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.bidtellect.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 10 + ], + "deviceStorageDisclosureUrl": "https://cdn.bttrack.com/iab/deviceStorageDisclosure.json" + }, + "190": { + "id": 190, + "name": "video intelligence AG", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.vi.ai/legal/privacy-policy/", + "legIntClaim": "https://www.vi.ai/legal/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.vi.ai/deviceStorage.json" + }, + "195": { + "id": 195, + "name": "advanced store GmbH", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 60, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.advanced-store.com/de/datenschutz/", + "legIntClaim": "https://www.advanced-store.com/de/datenschutz/" + }, + { + "langId": "en", + "privacy": "https://www.advanced-store.com/en/data-privacy/", + "legIntClaim": "https://www.advanced-store.com/en/data-privacy/" + } + ], + "dataDeclaration": [ + 3 + ], + "deviceStorageDisclosureUrl": "https://ad4m.at/.well-known/deviceStorage.json" + }, + "206": { + "id": 206, + "name": "Hybrid Adtech GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://hybrid.ai/data_protection_policy", + "legIntClaim": "https://hybrid.ai/data_protection_policy" + } + ], + "dataDeclaration": [ + 2, + 3 + ], + "deviceStorageDisclosureUrl": "https://st.hybrid.ai/policy/deviceStorage.json" + }, + "209": { + "id": 209, + "name": "Delta Projects AB", + "purposes": [ + 1, + 2, + 3, + 4 + ], + "legIntPurposes": [ + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 547, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://deltaprojects.com/data-collection-policy", + "legIntClaim": "https://deltaprojects.com/data-collection-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.de17a.com/policy/deviceStorage.json" + }, + "210": { + "id": 210, + "name": "Zemanta Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.zemanta.com/privacy/", + "legIntClaim": "https://www.zemanta.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.zemanta.com/wp-content/uploads/2022/06/deviceStorage.json" + }, + "211": { + "id": 211, + "name": "AdTheorent, Inc", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 63071995, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adtheorent.com/privacy-policy", + "legIntClaim": "https://adtheorent.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://public-cdn.adtheorent.com/iab/AdTheorent-IAB-TCFv2-deviceStorageDisclosure.json" + }, + "215": { + "id": 215, + "name": "ARMIS SAS", + "purposes": [ + 1, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 33696000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "7": 180 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://armis.tech/en/armis-personal-data-privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 8 + ], + "deviceStorageDisclosureUrl": "https://armis-rgpd-acotedemoi.acotedemoi.com/" + }, + "216": { + "id": 216, + "name": "Mindlytix SAS", + "purposes": [ + 1, + 2, + 3, + 5, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 5356800, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 185, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://mindlytix.com/privacy/", + "legIntClaim": "https://mindlytix.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://mindlytix.com/tcf/tcf.json" + }, + "226": { + "id": 226, + "name": "Publicis Media GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.publicismedia.de/datenschutz/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.vtracy.de/iab/deviceStorage.json" + }, + "227": { + "id": 227, + "name": "Opt Out Advertising B.V. ", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31622400, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": { + "1": 30 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://optoutadvertising.com/privacy-policy/", + "legIntClaim": "https://optoutadvertising.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://adserving.optoutadvertising.com/dsd" + }, + "228": { + "id": 228, + "name": "M.D. Primis Technologies Ltd.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 7, + 8, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2160000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.primis.tech/privacy-policy/", + "legIntClaim": "https://www.primis.tech/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.primis.tech/deviceStorage.json" + }, + "231": { + "id": 231, + "name": "AcuityAds Inc.", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://privacy.acuityads.com/corporate-privacy-policy.html", + "legIntClaim": "https://privacy.acuityads.com/corporate-privacy-policy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://privacy.acuityads.com/deviceStorageDisclosure.json" + }, + "237": { + "id": 237, + "name": "VGI CTV, Inc", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://verve.com/privacy-policy/index.html", + "legIntClaim": "https://verve.com/website-privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://lkqd.com/disclosures.json" + }, + "241": { + "id": 241, + "name": "OneTag Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34160000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 548, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.onetag.com/privacy/", + "legIntClaim": "https://www.onetag.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://onetag-cdn.com/privacy/tcf_storage.json" + }, + "242": { + "id": 242, + "name": "twiago GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 60, + "purposes": { + "7": 14 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://a.twiago.com/privacy.php", + "legIntClaim": "https://a.twiago.com/privacy.php" + }, + { + "langId": "en", + "privacy": "https://a.twiago.com/privacy.php", + "legIntClaim": "https://a.twiago.com/privacy.php" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://control.twiago.com/deviceStorage.json" + }, + "244": { + "id": 244, + "name": "Ermes", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 33696000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 395, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.ermes.ai/politique-de-confidentialite/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://tag.leadplace.fr/consents/consents.json" + }, + "246": { + "id": 246, + "name": "Smartology Limited", + "purposes": [ + 1, + 3, + 4, + 8 + ], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": { + "3": 0, + "4": 0 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.smartology.net/privacy-policy/", + "legIntClaim": "https://www.smartology.net/legitimate-interest-assessments/" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://www.smartology.net/deviceStorageDisclosure.json" + }, + "248": { + "id": 248, + "name": "Converge-Digital", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://converge-digital.com/privacy-policy/", + "legIntClaim": "https://converge-digital.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2 + ], + "deviceStorageDisclosureUrl": "https://data.converge-digital.com/deviceStorage.json" + }, + "251": { + "id": 251, + "name": "Yieldlove GmbH", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "2": 7, + "7": 0, + "10": 183 + }, + "specialPurposes": { + "1": 183, + "2": 7 + } + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.yieldlove.com/de-de/datenschutz/", + "legIntClaim": "https://www.yieldlove.com/de-de/datenschutz/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn-a.yieldlove.com/deviceStorage.json" + }, + "252": { + "id": 252, + "name": "Jaduda GmbH", + "purposes": [ + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": { + "2": 3650 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.splicky.com/en/web/privacy-delivery", + "legIntClaim": "https://splicky.com/en/web/privacy-policy/legitimate-interests" + }, + { + "langId": "de", + "privacy": "https://www.splicky.com/de/web/privacy-delivery", + "legIntClaim": "https://splicky.com/de/web/privacy-policy/legitimate-interests" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn-global.splicky.com/devicestorage.json" + }, + "253": { + "id": 253, + "name": "Improve Digital", + "purposes": [ + 1, + 3, + 4, + 9 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.improvedigital.com/platform-privacy-policy", + "legIntClaim": "https://www.improvedigital.com/platform-privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://sellers.improvedigital.com/tcf-cookies.json" + }, + "254": { + "id": 254, + "name": "LiquidM Technology GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 14, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://liquidm.com/privacy-policy/", + "legIntClaim": "https://liquidm.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://liquidm.com/disclosures.json" + }, + "255": { + "id": 255, + "name": "Onnetwork Sp. z o.o.", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8 + ], + "flexiblePurposes": [ + 2, + 7, + 8 + ], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 4320000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": { + "5": 30, + "6": 30 + }, + "specialPurposes": { + "2": 30 + } + }, + "urls": [ + { + "langId": "pl", + "privacy": "https://www.onnetwork.tv/pp_services.php#pl", + "legIntClaim": "https://www.onnetwork.tv/pp_services.php#pl" + }, + { + "langId": "en", + "privacy": "https://www.onnetwork.tv/pp_services.php#en", + "legIntClaim": "https://www.onnetwork.tv/pp_services.php#en" + } + ], + "dataDeclaration": [ + 10 + ], + "deviceStorageDisclosureUrl": "https://video.onnetwork.tv/vendor255.json" + }, + "259": { + "id": 259, + "name": "ADYOULIKE SA", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 60, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.adyoulike.com/pages/privacy", + "legIntClaim": "https://www.adyoulike.com/pages/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://adyoulike.com/deviceStorageDisclosureURL.json" + }, + "270": { + "id": 270, + "name": "Marfeel Solutions, SL", + "purposes": [ + 1 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.marfeel.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 8 + ], + "deviceStorageDisclosureUrl": "https://live.mrf.io/statics/marfeel/resources/lib/deviceStorage/touch.json" + }, + "272": { + "id": 272, + "name": "A.Mob", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34128000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 395, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.we-are-adot.com/privacy-policy/" + }, + { + "langId": "en", + "privacy": "https://we-are-adot.com/en/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://adserver.adotmob.com/tcf/tcf.json" + }, + "274": { + "id": 274, + "name": "Golden Bees", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://applies.goldenbees.fr/privacyPolicy/fr", + "legIntClaim": "https://applies.goldenbees.fr/privacyPolicy/fr" + } + ], + "dataDeclaration": [ + 2 + ], + "deviceStorageDisclosureUrl": "https://cdn.goldenbees.fr/proxy?url=http%3A%2F%2Fstatic.goldenbees.fr%2Fcdn%2Fjs%2Fcmp%2FdeviceStorage.json&attachment=0" + }, + "279": { + "id": 279, + "name": "Mirando GmbH & Co KG", + "purposes": [], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://get.mirando.de/download/gdpr.php", + "legIntClaim": "https://get.mirando.de/download/gdpr.php" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://get.mirando.de/download/gdpr.php" + }, + "281": { + "id": 281, + "name": "Wizaly", + "purposes": [ + 1, + 7, + 8, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 7, + 8, + 9 + ], + "specialPurposes": [], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1095, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.wizaly.com/terms-of-use#privacy-policy", + "legIntClaim": "https://www.wizaly.com/terms-of-use#privacy-policy" + }, + { + "langId": "fr", + "privacy": "https://www.wizaly.fr/mentions-legales#politique-de-confidentialite", + "legIntClaim": "https://www.wizaly.fr/mentions-legales#politique-de-confidentialite" + } + ], + "dataDeclaration": [ + 1, + 2, + 5, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://t.wizaly.com/iab-tcf-vendor-device-storage-and-operational-disclosures.json" + }, + "282": { + "id": 282, + "name": "Welect GmbH", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 1209600, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.welect.de/datenschutz", + "legIntClaim": "https://www.welect.de/datenschutz" + }, + { + "langId": "en", + "privacy": "https://www.de.welect.de/en/privacy-policy/", + "legIntClaim": "https://www.de.welect.de/en/privacy-policy/" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://www.welect.de/deviceStorage.json" + }, + "284": { + "id": 284, + "name": "Weborama", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 10 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 11 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 33955200, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 395, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://weborama.com/respect-de-la-vie-privee-2-2/", + "legIntClaim": "https://weborama.com/politique-de-confidentialite/#interet-legitime-weborama" + }, + { + "langId": "en", + "privacy": "https://weborama.com/en/privacy-2/", + "legIntClaim": "https://weborama.com/en/privacy-2/#legitimate-interest" + }, + { + "langId": "it", + "privacy": "https://weborama.com/it/privacy-3/", + "legIntClaim": "https://weborama.com/it/privacy-3/#interesse-legittimo" + }, + { + "langId": "es", + "privacy": "https://weborama.com/es/privacidad/", + "legIntClaim": "https://weborama.com/it/privacy-3/#interesse-legittimo" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://weborama.com/deviceStorage.json" + }, + "285": { + "id": 285, + "name": "Comcast International France SAS", + "purposes": [ + 1, + 2, + 4 + ], + "legIntPurposes": [ + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 15768000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 547, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.freewheel.com/privacy-policy", + "legIntClaim": "https://www.freewheel.com/privacy-policy#tab2_section2_4" + }, + { + "langId": "nl", + "privacy": "https://www.freewheel.com/privacy-policy/nl", + "legIntClaim": "https://www.freewheel.com/privacy-policy/nl#tab2_section2_4" + }, + { + "langId": "fr", + "privacy": "https://www.freewheel.com/privacy-policy/fr", + "legIntClaim": "https://www.freewheel.com/privacy-policy/fr#tab2_section2_4" + }, + { + "langId": "it", + "privacy": "https://www.freewheel.com/privacy-policy/it", + "legIntClaim": "https://www.freewheel.com/privacy-policy/it#tab2_section2_4" + }, + { + "langId": "es", + "privacy": "https://www.freewheel.com/privacy-policy/es", + "legIntClaim": "https://www.freewheel.com/privacy-policy/es#tab2_section2_4" + }, + { + "langId": "de", + "privacy": "https://www.freewheel.com/privacy-policy/de", + "legIntClaim": "https://www.freewheel.com/privacy-policy/de#tab2_section2_4" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://iab.fwmrm.net/g/devicedisclosure.json" + }, + "290": { + "id": 290, + "name": "Readpeak Oy", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 180, + "purposes": { + "7": 4320, + "10": 4320 + }, + "specialPurposes": { + "2": 4320 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.readpeak.com/terms/readpeak-privacy-policy", + "legIntClaim": "https://www.readpeak.com/terms/legitimate-interest-assessment-lia" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://static.readpeak.com/tcf/deviceStorage.json" + }, + "294": { + "id": 294, + "name": "Jivox Corporation", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.jivox.com/privacy", + "legIntClaim": "https://www.jivox.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 3, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.jivox.com/files/privacy/deviceStorage.json" + }, + "301": { + "id": 301, + "name": "zeotap GmbH", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://zeotap.com/product-privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://spl.zeotap.com/assets/iab-disclosure.json" + }, + "304": { + "id": 304, + "name": "On Device Research Limited", + "purposes": [ + 1, + 2, + 3 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://s.on-device.com/privacyPolicy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 9 + ], + "deviceStorageDisclosureUrl": "https://on-device.com/deviceStorage.json" + }, + "311": { + "id": 311, + "name": "Mobfox US LLC", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 1209600, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": { + "1": 365 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.mobfox.com/privacy-policy/", + "legIntClaim": "https://www.mobfox.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 8, + 9 + ], + "deviceStorageDisclosureUrl": "https://www.mobfox.com/disclosures.json" + }, + "312": { + "id": 312, + "name": "Exactag GmbH", + "purposes": [ + 1, + 7, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 2 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 210, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://exactag.com/privacy-policy/", + "legIntClaim": "https://exactag.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 2, + 3, + 5, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.exactag.com/.well-known/deviceStorage.json" + }, + "314": { + "id": 314, + "name": "Keymantics", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.kmtx.com/privacy/", + "legIntClaim": "https://www.kmtx.com/privacy/" + } + ], + "dataDeclaration": [ + 2, + 6 + ], + "deviceStorageDisclosureUrl": "https://cdn.keymantics.com/.well-known/deviceStorage.json" + }, + "318": { + "id": 318, + "name": "Accorp Sp. z o.o.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 720, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://instytut-pollster.pl/privacy-policy/index.html", + "legIntClaim": "https://instytut-pollster.pl/privacy-policy/index.html" + }, + { + "langId": "pl", + "privacy": "https://instytut-pollster.pl/privacy-policy/index.html", + "legIntClaim": "https://instytut-pollster.pl/privacy-policy/index.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://content.pollster.pl/deviceStorage" + }, + "321": { + "id": 321, + "name": "Ziff Davis LLC", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 9 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 1080, + "purposes": { + "2": 360, + "3": 360, + "4": 360, + "5": 360, + "6": 360 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.ziffdavis.com/privacy-policy", + "legIntClaim": "https://www.ziffdavis.com/privacy-policy#lawful" + }, + { + "langId": "fr", + "privacy": "https://www.ziffdavis.com/privacy-policy-f/", + "legIntClaim": "https://www.ziffdavis.com/privacy-policy-f/#lawful" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://static.ziffdavis.com/jst/zdcookiedisclosure.json" + }, + "323": { + "id": 323, + "name": "Footballco Media Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 34190000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.goal.com/en-gb/legal/privacy-policy" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://www.footballco.com/gvl-device-storage.json" + }, + "325": { + "id": 325, + "name": "Knorex", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 63071999, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.knorex.com/privacy", + "legIntClaim": "https://www.knorex.com/privacy" + } + ], + "dataDeclaration": [ + 3, + 4, + 7, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.brand-display.com/gvl/deviceStorageDisclosure.json" + }, + "326": { + "id": 326, + "name": "AdTiming Technology Company Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adtiming.com/en/privacypolicy.html", + "legIntClaim": "https://www.adtiming.com/en/privacypolicy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6 + ], + "deviceStorageDisclosureUrl": "https://img.adtiming.com/webrt/AdTiming.TCFv2.json" + }, + "328": { + "id": 328, + "name": "Gemius SA", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 157680000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1096, + "purposes": { + "3": 1, + "4": 30, + "8": 1827, + "10": 1827 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.gemius.com/privacy-policy.html" + } + ], + "dataDeclaration": [ + 2, + 3, + 6, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://gemius.com/Gemius_SA_Vendor_Device_Storage.json" + }, + "329": { + "id": 329, + "name": "Browsi", + "purposes": [ + 1, + 7, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "7": 730, + "8": 400 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://browsi.com/privacy-policy-2/" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.browsiprod.com/ads/tcf.json" + }, + "331": { + "id": 331, + "name": "ad6media", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.ad6media.fr/privacy", + "legIntClaim": "https://www.ad6media.fr/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10 + ], + "deviceStorageDisclosureUrl": "https://www.ad6media.fr/tcf.json" + }, + "333": { + "id": 333, + "name": "InMobi Pte Ltd", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 9, + 10 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": { + "2": 0, + "3": 395, + "4": 395 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.inmobi.com/privacy-policy-for-eea", + "legIntClaim": "https://www.inmobi.com/privacy-policy-for-eea" + }, + { + "langId": "pt", + "privacy": "https://www.inmobi.com/privacy-policy-por", + "legIntClaim": "https://www.inmobi.com/privacy-policy-por" + }, + { + "langId": "es", + "privacy": "https://www.inmobi.com/privacy-policy-es", + "legIntClaim": "https://www.inmobi.com/privacy-policy-es" + } + ], + "dataDeclaration": [ + 1, + 3, + 8, + 9 + ], + "deviceStorageDisclosureUrl": "https://publisher.inmobi.com/public/disclosure" + }, + "336": { + "id": 336, + "name": "Telecoming S.A.", + "purposes": [], + "legIntPurposes": [ + 2, + 7, + 9 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 3650, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.telecoming.com/privacy-policy/", + "legIntClaim": "https://www.telecoming.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 3, + 4 + ], + "deviceStorageDisclosureUrl": "https://telecoming.rtb.lynxio.org/deviceStorageDisclosureURL.json" + }, + "337": { + "id": 337, + "name": "SheMedia, LLC", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.shemedia.com/ad-services-privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://ads.shemedia.com/static/tcfdisclosures.json" + }, + "345": { + "id": 345, + "name": "The Kantar Group Limited", + "purposes": [ + 1, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 78892380, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.kantar.com/cookies-policies" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://secure.insightexpressai.com/DeviceStorageDisclosure.json" + }, + "347": { + "id": 347, + "name": "Ezoic Inc.", + "purposes": [ + 1, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 220752000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.ezoic.com/terms/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://privacy.ezodn.com/storage_disclosure.json" + }, + "350": { + "id": 350, + "name": "Samba TV, Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 33696000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "2": 395, + "3": 395, + "4": 395, + "5": 395, + "6": 395, + "7": 1125, + "8": 1125, + "9": 1125, + "10": 1125 + }, + "specialPurposes": { + "1": 1125 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "ar", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "bg", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "bs", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "ca", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "cs", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "da", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "de", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "el", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "es", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "et", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "fi", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "fr", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "hr", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "hu", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "it", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "ja", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "lt", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "lv", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "nl", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "no", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "pl", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "pt", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "ro", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "ru", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "sk", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "sl", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "sv", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "tr", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "zh", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + }, + { + "langId": "sr - cyrl", + "privacy": "https://samba.tv/legal/privacy-policy/", + "legIntClaim": "https://samba.tv/legal/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://ads.samba.tv/disclosures.json" + }, + "351": { + "id": 351, + "name": "Samba TV UK Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 33696000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "2": 395, + "3": 395, + "4": 395, + "5": 395, + "6": 395, + "7": 1125, + "8": 1125, + "9": 1125, + "10": 1125 + }, + "specialPurposes": { + "1": 1125 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "ar", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "bg", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "bs", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "ca", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "cs", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "da", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "de", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "el", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "es", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "et", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "fi", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "fr", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "hu", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "it", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "ja", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "lt", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "lv", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "nl", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "no", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "pl", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "pt", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "ro", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "sr - cyrl", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "ru", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "sk", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "sl", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "sv", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "tr", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + }, + { + "langId": "zh", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy1" + }, + { + "langId": "hr", + "privacy": "https://samba.tv/users/privacy-policy", + "legIntClaim": "https://samba.tv/users/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://pixel.mtrcs.samba.tv/disclosures.json" + }, + "358": { + "id": 358, + "name": "MGID Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.mgid.com/privacy-policy", + "legIntClaim": "https://www.mgid.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.mgid.com/assets/devicestorage.json" + }, + "368": { + "id": 368, + "name": "VECTAURY", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.mobsuccess.com/en/privacy", + "legIntClaim": "https://www.mobsuccess.com/en/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.mobsuccess.com/deviceStorage.json" + }, + "371": { + "id": 371, + "name": "Seeding Alliance GmbH", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://seeding-alliance.de/datenschutz/", + "legIntClaim": "https://seeding-alliance.de/datenschutz/" + } + ], + "dataDeclaration": [ + 1, + 2 + ], + "deviceStorageDisclosureUrl": "https://c.nativendo.de/cdn/asset/tcf/purpose-specific-storage-and-access-information.json" + }, + "373": { + "id": 373, + "name": "Nielsen Media Research Ltd.", + "purposes": [ + 1, + 3 + ], + "legIntPurposes": [ + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 10368000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 396, + "purposes": { + "3": 45 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/", + "legIntClaim": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/" + }, + { + "langId": "de", + "privacy": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/", + "legIntClaim": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/" + }, + { + "langId": "fr", + "privacy": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/", + "legIntClaim": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/" + }, + { + "langId": "it", + "privacy": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/", + "legIntClaim": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/" + }, + { + "langId": "es", + "privacy": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/", + "legIntClaim": "https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://iab-privacy-disclosure.exelator.com/.json" + }, + "375": { + "id": 375, + "name": "RevX", + "purposes": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://revx.io/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://storage.googleapis.com/revx-product/privacy/tcf/deviceStorage/device_storage_disclosure.json" + }, + "377": { + "id": 377, + "name": "AddApptr GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 9 + ], + "legIntPurposes": [ + 7, + 10 + ], + "flexiblePurposes": [ + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.gravite.net/data-privacy", + "legIntClaim": "https://www.gravite.net/data-privacy" + }, + { + "langId": "de", + "privacy": "https://www.gravite.net/data-privacy", + "legIntClaim": "https://www.gravite.net/data-privacy" + } + ], + "dataDeclaration": [ + 2, + 3, + 6, + 9 + ], + "deviceStorageDisclosureUrl": "https://addapptr.com/tcfDeviceStorageDisclosures.json" + }, + "381": { + "id": 381, + "name": "Solocal SA", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 7, + 9, + 10 + ], + "legIntPurposes": [ + 2, + 8 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 34164000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "2": 0, + "3": 91, + "4": 91, + "5": 91, + "6": 91, + "7": 4320, + "8": 4320, + "9": 4320, + "10": 4320 + }, + "specialPurposes": { + "1": 372 + } + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.solocal.com/protection-de-la-vie-privee", + "legIntClaim": "https://www.solocal.com/protection-de-la-vie-privee" + } + ], + "dataDeclaration": [ + 2, + 3, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://prd-cdn.adhslx.com/ui/login/assets/tcf/tcf-registration.json" + }, + "382": { + "id": 382, + "name": "The Reach Group GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://trg.de/en/privacy-statement/", + "legIntClaim": "https://trg.de/en/privacy-statement/" + }, + { + "langId": "de", + "privacy": "https://trg.de/datenschutzerklarung/", + "legIntClaim": "https://trg.de/datenschutzerklarung/" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://hal9000.redintelligence.net/privacy/tcf/deviceStorage/2723ad85dc4fd6c3.json" + }, + "388": { + "id": 388, + "name": "Numberly", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 183, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://numberly.com/en/privacy/" + }, + { + "langId": "fr", + "privacy": "https://numberly.com/fr/privacy-fr/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://dco.mmtro.com/a?tagid=6575638-eec14e25c2d8ce8f341c134e24e9de46&campid=0&banid=2712&output=json" + }, + "394": { + "id": 394, + "name": "AudienceProject Aps", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1826, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://privacy.audienceproject.com", + "legIntClaim": "https://privacy.audienceproject.com/en-GB/for-users/privacy-policy#transparency-and-consent-framework-tcf" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://sak.userreport.com/tcf.json" + }, + "410": { + "id": 410, + "name": "Adtelligent Inc.", + "purposes": [ + 1, + 2, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 8035200, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": { + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adtelligent.com/privacy-policy/", + "legIntClaim": "https://adtelligent.com/tos/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://adtelligent.com/.well-known/deviceStorage.json" + }, + "412": { + "id": 412, + "name": "Piano Software Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 8, + 9, + 11 + ], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1096, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.piano.io/privacy-policy", + "legIntClaim": "https://www.piano.io/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.cxense.com/.well-known/deviceStorage.json" + }, + "413": { + "id": 413, + "name": "Eulerian Technologies", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 33696000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.eulerian.com/en/privacy/" + }, + { + "langId": "fr", + "privacy": "https://www.eulerian.com/vie-privee" + }, + { + "langId": "es", + "privacy": "https://www.eulerian.com/es/privacidad" + }, + { + "langId": "it", + "privacy": "https://www.eulerian.com/it/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 7 + ], + "deviceStorageDisclosureUrl": "https://eu.euleriancdn.net/ea-rt/tcfDeviceStorage.json" + }, + "416": { + "id": 416, + "name": "Commanders Act", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": { + "7": 730, + "10": 30 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.commandersact.com/en/privacy/" + }, + { + "langId": "fr", + "privacy": "https://www.commandersact.com/fr/vie-privee/" + }, + { + "langId": "de", + "privacy": "https://www.commandersact.com/de/datenschutz/" + }, + { + "langId": "it", + "privacy": "https://www.commandersact.com/it/privacy/" + } + ], + "dataDeclaration": [ + 1, + 3 + ], + "deviceStorageDisclosureUrl": "https://cdn.trustcommander.net/iab-v2/additional_vendor_information_list.json" + }, + "422": { + "id": 422, + "name": "Brand Metrics Sweden AB", + "purposes": [ + 1, + 7, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 33350400, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 386, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://collector.brandmetrics.com/brandmetrics_privacypolicy.pdf", + "legIntClaim": "https://collector.brandmetrics.com/brandmetrics_privacypolicy.pdf" + } + ], + "dataDeclaration": [ + 6, + 7 + ], + "deviceStorageDisclosureUrl": "https://collector.brandmetrics.com/deviceStorageDisclosure.json" + }, + "423": { + "id": 423, + "name": "travel audience GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34300800, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 397, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://travelaudience.com/product-privacy-notice/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 8, + 10 + ], + "deviceStorageDisclosureUrl": "https://ads.travelaudience.com/deviceStorage.json" + }, + "430": { + "id": 430, + "name": "AdServing Factory srl", + "purposes": [ + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 1, + "purposes": { + "7": 30 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adservingfactory.com/privacy-policy.html", + "legIntClaim": "https://www.adservingfactory.com/privacy-policy.html" + } + ], + "dataDeclaration": [ + 2 + ], + "deviceStorageDisclosureUrl": "https://content.adunity.com/tcf-vdso.json" + }, + "431": { + "id": 431, + "name": "HUMAN", + "purposes": [], + "legIntPurposes": [ + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 1095, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.humansecurity.com/privacy", + "legIntClaim": "https://www.humansecurity.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 8 + ], + "deviceStorageDisclosureUrl": "https://humansecurity.com/hubfs/devicestoragedisclosure.json" + }, + "434": { + "id": 434, + "name": "DynAdmic", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 360, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://eu.dynadmic.com/privacy-policy/", + "legIntClaim": "https://eu.dynadmic.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.dynadmic.com/device-storage-disclosures.json" + }, + "435": { + "id": 435, + "name": "SINGLESPOT SAS ", + "purposes": [ + 1, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 385, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.singlespot.com/privacy_policy", + "legIntClaim": "https://www.singlespot.com/privacy_policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://singlespot-public.s3.eu-west-1.amazonaws.com/disclosures.json" + }, + "436": { + "id": 436, + "name": "INVIBES GROUP", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 9 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.invibes.com/terms.html", + "legIntClaim": "https://www.invibes.com/terms.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.invibes.com/deviceStorage.json" + }, + "438": { + "id": 438, + "name": "INVIDI technologies AB", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 315360000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": { + "3": 0, + "7": 765, + "9": 765 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.invidi.com/privacy-policy-ad-tech-services/", + "legIntClaim": "https://www.invidi.com/privacy-policy-ad-tech-services/#legal-basis" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://storage.googleapis.com/iab-consent-framework/device-storage.json" + }, + "440": { + "id": 440, + "name": "DEFINE MEDIA GMBH", + "purposes": [ + 1, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.definemedia.de/datenschutz-conative/", + "legIntClaim": "https://definemedia.de/de/datenschutz-conative" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://definemedia.de/tcf/deviceStorageDisclosureURL.json" + }, + "450": { + "id": 450, + "name": "Neodata Group srl", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31556952, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.neodatagroup.com/en/services-privacy-policy-en/", + "legIntClaim": "https://www.neodatagroup.com/en/services-privacy-policy-en/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://support.neodatagroup.com/deviceStorage.json" + }, + "452": { + "id": 452, + "name": "Innovid LLC", + "purposes": [ + 1, + 4 + ], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.innovid.com/privacy-policy", + "legIntClaim": "https://www.innovid.com/privacy-policy/#additional-information-europe-residents" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://iab.inbake.com/Innovid-IAB-TCFv2-disclosure.json" + }, + "459": { + "id": 459, + "name": "uppr GmbH", + "purposes": [ + 1 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://netzwerk.uppr.de/privacy-policy.do", + "legIntClaim": "https://uppr.emcustomers.de/api/tcf/definitions/disclosures.json" + } + ], + "dataDeclaration": [ + 7 + ], + "deviceStorageDisclosureUrl": "https://uppr.emcustomers.de/api/tcf/definitions/disclosures.json" + }, + "461": { + "id": 461, + "name": "B2B Media Group GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.b2bmg.com/en/data-privacy/", + "legIntClaim": "https://www.b2bmg.com/en/data-privacy" + }, + { + "langId": "de", + "privacy": "https://www.b2bmg.com/de/datenschutz", + "legIntClaim": "https://www.b2bmg.com/de/datenschutz" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://b2biq.net/iab_vendor_storage.json" + }, + "466": { + "id": 466, + "name": "Papirfly AS", + "purposes": [], + "legIntPurposes": [ + 7 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": { + "7": 4320 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://tacticrealtime.com/privacy/", + "legIntClaim": "https://tacticrealtime.com/privacy/dsar/" + } + ], + "dataDeclaration": [ + 2 + ], + "deviceStorageDisclosureUrl": "https://tacticrealtime.com/privacy/iab-device-storage.json" + }, + "468": { + "id": 468, + "name": "Neustar, Inc., a TransUnion company", + "purposes": [ + 1, + 3 + ], + "legIntPurposes": [ + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 540, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.home.neustar/privacy", + "legIntClaim": "https://www.home.neustar/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://gdpr-tcf.agkn.com/NeustarDeviceStorage.json" + }, + "473": { + "id": 473, + "name": "Sub2 Technologies Ltd", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.sub2tech.com/privacy-policy/", + "legIntClaim": "https://www.sub2tech.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 6, + 8, + 10 + ], + "deviceStorageDisclosureUrl": "https://cdn.sub2tech.com/privacy/devicestorage.json" + }, + "479": { + "id": 479, + "name": "INFINIA MOBILE S.L.", + "purposes": [ + 2, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "es", + "privacy": "https://www.infiniamobile.com/avisopolitica.html#pri", + "legIntClaim": "https://www.infiniamobile.com/avisopolitica.html#pri" + }, + { + "langId": "en", + "privacy": "https://www.infiniamobile.com/avisopolitica-us.html#pri", + "legIntClaim": "https://www.infiniamobile.com/avisopolitica-us.html#pri" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.infiniamobile.com/tcf/tcf2.0.json" + }, + "488": { + "id": 488, + "name": "Opinary GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 5184000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": { + "2": 60, + "3": 0, + "4": 60, + "5": 0, + "7": 60 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://opinary.com/privacy-policy/", + "legIntClaim": "https://opinary.com/opt-out" + }, + { + "langId": "de", + "privacy": "https://opinary.com/datenschutz/", + "legIntClaim": "https://opinary.com/opt-out" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.opinary.com/.well-known/device-storage.json" + }, + "490": { + "id": 490, + "name": "PLAYGROUND XYZ EMEA LTD", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 15552200, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 45, + "purposes": {}, + "specialPurposes": { + "1": 30 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://playground.xyz/privacy", + "legIntClaim": "https://playground.xyz/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://playground.xyz/tcf-disclosure.json" + }, + "491": { + "id": 491, + "name": "SevenData S.p.a.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "it", + "privacy": "https://www.shinystat.com/it/informativa_privacy_generale.html" + } + ], + "dataDeclaration": [ + 2, + 3, + 4, + 6 + ], + "deviceStorageDisclosureUrl": "https://www.shinystat.com/shinystat_cookie.json" + }, + "493": { + "id": 493, + "name": "Magnite, Inc. (Carbon AI Limited)", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "legIntPurposes": [ + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7689600, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.magnite.com/legal/advertising-technology-privacy-policy/", + "legIntClaim": "https://www.magnite.com/legal/advertising-technology-privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://nai-edge.ccgateway.net/privacy/disclosure" + }, + "495": { + "id": 495, + "name": "Arcspire Limited", + "purposes": [ + 2, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://public.arcspire.io/privacy.pdf", + "legIntClaim": "https://public.arcspire.io/privacy.pdf" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://public.arcspire.io/disclosures.json" + }, + "496": { + "id": 496, + "name": "Automattic Ads", + "purposes": [ + 1, + 2, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 4320, + "purposes": { + "2": 730, + "4": 90 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://automattic.com/privacy/", + "legIntClaim": "https://automattic.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://c0.pubmine.com/device-storage.json" + }, + "497": { + "id": 497, + "name": "Little Big Data sp. z o.o.", + "purposes": [ + 1, + 3, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 94608001, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 2555, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "pl", + "privacy": "https://www.dataexchanger.pl/privacy-policy", + "legIntClaim": "https://www.dataexchanger.pl/privacy-policy" + } + ], + "dataDeclaration": [ + 2, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://dtxngr.com/additional-vendor-information-list.json" + }, + "498": { + "id": 498, + "name": "Mediakeys Platform", + "purposes": [ + 1, + 2, + 3, + 4, + 6, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1825, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://arago.com/fr/politique-de-confidentialite/", + "legIntClaim": "https://arago.com/fr/politique-de-confidentialite/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://resourcekeys.com/deviceStorageDisclosure.json" + }, + "507": { + "id": 507, + "name": "AdsWizz Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adswizz.com/privacy-policy/", + "legIntClaim": "https://www.adswizz.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.adswizz.com/deviceStorage.json" + }, + "511": { + "id": 511, + "name": "Admixer EU GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 7, + 9 + ], + "legIntPurposes": [ + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://admixer.com/privacy/", + "legIntClaim": "https://admixer.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 7, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://admixer.com/tcf.json" + }, + "512": { + "id": 512, + "name": "Verve Group Europe GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": { + "7": 4320, + "8": 4320, + "10": 4320 + }, + "specialPurposes": { + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://pubnative.net/privacy-notice/", + "legIntClaim": "https://pubnative.net/privacy-notice/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://resources.verve.com/hubfs/deviceStorage.json" + }, + "516": { + "id": 516, + "name": "Pexi B.V.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "nl", + "privacy": "https://pexi.nl/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3 + ], + "deviceStorageDisclosureUrl": "https://dash.pexi.nl/api/public/device-storage-url.json" + }, + "517": { + "id": 517, + "name": "SunMedia ", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 10368000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 120, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.sunmedia.tv/en/cookies-users/" + }, + { + "langId": "es", + "privacy": "https://www.sunmedia.tv/cookies-users/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 8 + ], + "deviceStorageDisclosureUrl": "https://vod.sunmedia.tv/sunmedia/cookies.json" + }, + "530": { + "id": 530, + "name": "Near Intelligence Pte. Ltd.", + "purposes": [ + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 1460, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://near.com/privacy-policy/", + "legIntClaim": "https://near.com/privacy-policy/#services-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://near.com/iab/disclosures.json" + }, + "531": { + "id": 531, + "name": "Smartclip Hispania S.L.", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 0, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 120, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "es", + "privacy": "https://rgpd-smartclip.com/" + } + ], + "dataDeclaration": [ + 1, + 3, + 4, + 6, + 7, + 8, + 10 + ], + "deviceStorageDisclosureUrl": "https://cdn.smartclip-services.com/.well-known/deviceStorage.json" + }, + "535": { + "id": 535, + "name": "INNITY", + "purposes": [ + 1, + 2, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "2": 365, + "4": 720, + "5": 720, + "6": 720, + "7": 365, + "8": 365, + "9": 720, + "10": 720 + }, + "specialPurposes": { + "1": 365, + "2": 365 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.innity.com/privacy-policy.php", + "legIntClaim": "https://www.innity.com/privacy-policy.php" + } + ], + "dataDeclaration": [ + 1, + 4, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.advenueplatform.com/tcf" + }, + "536": { + "id": 536, + "name": "GlobalWebIndex", + "purposes": [ + 1, + 7, + 8, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31622400, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://legal.trendstream.net/non-panellist_privacy_policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://gwiq.globalwebindex.net/tcf2/deviceStorage.json" + }, + "539": { + "id": 539, + "name": "AdDefend GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.addefend.com/en/privacy-policy/", + "legIntClaim": "https://www.addefend.com/en/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 4 + ], + "deviceStorageDisclosureUrl": "https://www.addefend.com/deviceStorage.json" + }, + "544": { + "id": 544, + "name": "Kochava Inc.", + "purposes": [ + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "7": 395 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.kochava.com/support-privacy/" + }, + { + "langId": "de", + "privacy": "https://www.kochava.com/support-privacy/" + }, + { + "langId": "ru", + "privacy": "https://www.kochava.com/support-privacy/" + }, + { + "langId": "es", + "privacy": "https://www.kochava.com/support-privacy/" + }, + { + "langId": "ja", + "privacy": "https://www.kochava.com/support-privacy/" + }, + { + "langId": "zh", + "privacy": "https://www.kochava.com/support-privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://iab.kochava.com/DeviceStorageDisclosure.json" + }, + "546": { + "id": 546, + "name": "Smart Traffik", + "purposes": [ + 1, + 3, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 34187400, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": { + "1": 90 + } + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://okube-attribution.com/politique-de-confidentialite/", + "legIntClaim": "https://okube-attribution.com/politique-de-confidentialite-precisions-sur-la-source-de-donnee-smartbox/" + }, + { + "langId": "en", + "privacy": "https://okube-attribution.com/en/privacy-policy/", + "legIntClaim": "https://okube-attribution.com/en/privacy-policy/privacy-policy-details-of-the-smartbox-data-source/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://std-prod-static-crossorigin.s3.eu-west-1.amazonaws.com/public/deviceStorage.json" + }, + "550": { + "id": 550, + "name": "Happydemics", + "purposes": [ + 1, + 2 + ], + "legIntPurposes": [ + 9, + 10 + ], + "flexiblePurposes": [ + 9, + 10 + ], + "specialPurposes": [ + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 129600, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "2": 90, + "9": 1095, + "10": 1095 + }, + "specialPurposes": { + "2": 90 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://happydemics.com/en/terms_and_conditions", + "legIntClaim": "https://happydemics.com/en/terms_and_conditions" + }, + { + "langId": "fr", + "privacy": "https://happydemics.com/fr/conditions-generales", + "legIntClaim": "https://happydemics.com/fr/conditions-generales" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://files.happydemics.com/iab-tcf/device_storage_disclosure.json" + }, + "565": { + "id": 565, + "name": "Adobe Audience Manager, Adobe Experience Platform", + "purposes": [ + 1, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adobe.com/privacy/policy.html", + "legIntClaim": "https://www.adobe.com/privacy/policy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://aam-iab-tcf-vendor.s3.amazonaws.com/aam_device_storage_disclosures.json" + }, + "568": { + "id": 568, + "name": "Next Media SRL", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "it", + "privacy": "https://next14.com/media/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://js.datafront.co/next14_dmp_device_storage_information.json" + }, + "570": { + "id": 570, + "name": "Czech Publisher Exchange z.s.p.o.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31622389, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "cs", + "privacy": "https://www.cpex.cz/pro-uzivatele/ochrana-soukromi/" + } + ], + "dataDeclaration": [ + 1, + 2, + 5, + 6, + 7, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cpex.cz/storagedisclosure.json" + }, + "573": { + "id": 573, + "name": "Dailymotion SA", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 34214390, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 92, + "purposes": { + "3": 366, + "4": 366, + "5": 186, + "6": 186, + "8": 731, + "9": 731, + "10": 2192, + "11": 30 + }, + "specialPurposes": { + "1": 1096 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://legal.dailymotion.com/en/privacy-policy/", + "legIntClaim": "https://legal.dailymotion.com/en/legitimate-interest/" + }, + { + "langId": "fr", + "privacy": "https://legal.dailymotion.com/fr/politique-de-confidentialite/", + "legIntClaim": "https://legal.dailymotion.com/en/legitimate-interest/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://statics.dmcdn.net/a/vds.json" + }, + "580": { + "id": 580, + "name": "Goldbach Group AG", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 94670856, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://goldbach.com/ch/de/datenschutzerklaerung/goldbach-group-ag", + "legIntClaim": "https://goldbach.com/ch/de/datenschutzerklaerung/goldbach-group-ag" + }, + { + "langId": "en", + "privacy": "https://goldbach.com/ch/en/privacy-policy/goldbach-group", + "legIntClaim": "https://goldbach.com/ch/en/privacy-policy/goldbach-group" + }, + { + "langId": "fr", + "privacy": "https://goldbach.com/ch/fr/politique-de-confidentialite/goldbach-group", + "legIntClaim": "https://goldbach.com/ch/fr/politique-de-confidentialite/goldbach-group" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://dai-video.s3.eu-central-1.amazonaws.com/JSON/TcfGoldbachDeviceStorage.json" + }, + "601": { + "id": 601, + "name": "WebAds B.V", + "purposes": [ + 1, + 2 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 28, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://privacy.webads.eu/", + "legIntClaim": "https://privacy.webads.eu/" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://nojazz.eu/int/iab/tcf-storage.json" + }, + "602": { + "id": 602, + "name": "Online Solution", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": { + "1": 365 + } + }, + "urls": [ + { + "langId": "de", + "privacy": "https://adsafety.net/privacy.html", + "legIntClaim": "https://adsafety.net/privacy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://tcf.adtech.app/gen/deviceStorageDisclosure/os.json" + }, + "606": { + "id": 606, + "name": "Impactify SARL", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": { + "7": 7, + "8": 7, + "9": 7, + "10": 7 + }, + "specialPurposes": { + "1": 14 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://impactify.io/privacy-policy/", + "legIntClaim": "https://impactify.io/privacy-policy/#legal-basis-and-purposes-for-processing" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://ad.impactify.io/tcfvendors.json" + }, + "612": { + "id": 612, + "name": "Adnami Aps", + "purposes": [], + "legIntPurposes": [ + 7 + ], + "flexiblePurposes": [ + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adnami.io/privacy-policy-services", + "legIntClaim": "https://www.adnami.io/privacy-policy-services" + }, + { + "langId": "de", + "privacy": "https://www.adnami.io/privacy-policy-services-de", + "legIntClaim": "https://www.adnami.io/privacy-policy-services-de" + } + ], + "dataDeclaration": [ + 1, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://macro.adnami.io/macro/iab/deviceStorage.json" + }, + "613": { + "id": 613, + "name": "Adserve.zone / Artworx AS", + "purposes": [ + 10 + ], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adserve.zone/adserveprivacypolicy.html", + "legIntClaim": "https://adserve.zone/adserveprivacypolicy.html#legitimateinterestclaim" + } + ], + "dataDeclaration": [ + 1, + 8 + ], + "deviceStorageDisclosureUrl": "https://adserve.zone/tcf/deviceStorageDisclosure.json" + }, + "620": { + "id": 620, + "name": "Blue", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.getblue.io/privacy/", + "legIntClaim": "https://www.getblue.io/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://getblue.io/iab/iab.json" + }, + "621": { + "id": 621, + "name": "Seznam.cz, a.s.", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 31556926, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": { + "2": 540, + "5": 1460, + "6": 1460, + "10": 14 + }, + "specialPurposes": { + "1": 540 + } + }, + "urls": [ + { + "langId": "cs", + "privacy": "https://www.seznam.cz/ochranaudaju", + "legIntClaim": "https://o.seznam.cz/personalizace-obsahu-a-reklamy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://h.seznam.cz/js/deviceStorage.json" + }, + "624": { + "id": 624, + "name": "Norstat AS", + "purposes": [ + 1, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63113904, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "9": 1080 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.norstatpanel.com/en/data-protection" + }, + { + "langId": "no", + "privacy": "https://www.norstatpanel.com/nb/personvern" + }, + { + "langId": "de", + "privacy": "https://www.norstatpanel.com/de/datenschutz" + }, + { + "langId": "sv", + "privacy": "https://www.norstatpanel.com/sv/dataskydd" + }, + { + "langId": "da", + "privacy": "https://www.norstatpanel.com/da/data-beskyttelse" + }, + { + "langId": "fi", + "privacy": "https://www.norstatpanel.com/fi/tietosuoja" + }, + { + "langId": "pl", + "privacy": "https://www.norstatpanel.com/pl/ochrona-danych" + }, + { + "langId": "it", + "privacy": "https://www.norstatpanel.com/it/protezione-dati" + }, + { + "langId": "fr", + "privacy": "https://www.norstatpanel.com/fr/protection-des-donnees" + }, + { + "langId": "et", + "privacy": "https://www.norstatpanel.com/et/andmekaitse" + }, + { + "langId": "nl", + "privacy": "https://www.norstatpanel.com/nl/data-protection" + }, + { + "langId": "lv", + "privacy": "https://www.norstatpanel.com/lv/datu-aizsardziba" + }, + { + "langId": "lt", + "privacy": "https://www.norstatpanel.com/lt/privatumo-politika" + }, + { + "langId": "es", + "privacy": "https://www.norstatpanel.com/es/proteccion-de-datos" + }, + { + "langId": "ru", + "privacy": "https://www.norstatpanel.com/ru/zaschita-dannykh" + } + ], + "dataDeclaration": [ + 7 + ], + "deviceStorageDisclosureUrl": "https://aws.norstat.no/iab/tcf.json" + }, + "626": { + "id": 626, + "name": "Hivestack Inc.", + "purposes": [ + 1, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 394, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://hivestack.com/privacy-policy" + } + ], + "dataDeclaration": [ + 3, + 9 + ], + "deviceStorageDisclosureUrl": "https://tcf.hivestack.com/TCF_File.json" + }, + "628": { + "id": 628, + "name": ": Tappx", + "purposes": [ + 1, + 2, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 10800, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.tappx.com/en/privacy-policy/", + "legIntClaim": "https://www.tappx.com/en/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 11 + ], + "deviceStorageDisclosureUrl": "https://tappx.com/devicestorage.json" + }, + "630": { + "id": 630, + "name": "Contact Impact GmbH/Axel Springer Teaser Ad GmbH", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 43200000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://contactimpact.de/privacy", + "legIntClaim": "https://contactimpact.de/privacy.html#section-3" + } + ], + "dataDeclaration": [ + 1, + 2, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.c-i.as/d/gdpr/deviceStorage.json" + }, + "631": { + "id": 631, + "name": "Relay42 Netherlands B.V.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 1096, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://relay42.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://relay42.com/relay42-iab-disclosures.json" + }, + "646": { + "id": 646, + "name": "Notify", + "purposes": [ + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "9": 390 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://fr.notify-group.com/en/mentions-legales/" + } + ], + "dataDeclaration": [ + 7 + ], + "deviceStorageDisclosureUrl": "https://notify-group.com/cookies/tcf.json" + }, + "647": { + "id": 647, + "name": "Axel Springer Teaser Ad GmbH", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adup-tech.com/privacy", + "legIntClaim": "https://www.adup-tech.com/en/privacy-policy/#c4489" + }, + { + "langId": "de", + "privacy": "https://www.adup-tech.com/rechtliches/datenschutz/", + "legIntClaim": "https://www.adup-tech.com/rechtliches/datenschutz/#c4488" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://s.d.adup-tech.com/gdpr/deviceStorage.json" + }, + "655": { + "id": 655, + "name": "Sportradar AG", + "purposes": [ + 1, + 3, + 4, + 10 + ], + "legIntPurposes": [ + 2, + 7, + 9 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 100, + "purposes": { + "4": 1095 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.sportradar.com/about-us/privacy/", + "legIntClaim": "https://www.sportradar.com/about-us/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://creatives.sportradarserving.com/TCF_Sportradar_device_storage_url/sportradar_device_storage_url.json" + }, + "656": { + "id": 656, + "name": "Content Ignite", + "purposes": [], + "legIntPurposes": [ + 2, + 11 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": { + "1": 7 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.contentignite.com/privacy-policy/", + "legIntClaim": "https://www.contentignite.com/privacy-policy/" + } + ], + "deviceStorageDisclosureUrl": "https://contentignite.com/deviceStorage.json" + }, + "658": { + "id": 658, + "name": "BLIINK SAS", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34186669, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 395, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://bliink.io/privacy-policy", + "legIntClaim": "https://bliink.io/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://bliink.io/disclosures.json" + }, + "659": { + "id": 659, + "name": "Research and Analysis of Media in Sweden AB", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7, + 8, + 9 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 2 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 32000000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www2.rampanel.com/privacy-policy/", + "legIntClaim": "https://www2.rampanel.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 3 + ], + "deviceStorageDisclosureUrl": "https://www.rampanel.com/tcf/deviceStorage.json" + }, + "662": { + "id": 662, + "name": "SoundCast", + "purposes": [ + 1, + 2, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 0, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 390, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://soundcast.fm/en/data-privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 11 + ], + "deviceStorageDisclosureUrl": "https://soundcast.io/devicestorage.json" + }, + "663": { + "id": 663, + "name": "Mobsuccess", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 150, + "purposes": { + "2": 730 + }, + "specialPurposes": { + "1": 730 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.mobsuccess.com/en/privacy", + "legIntClaim": "https://www.mobsuccess.com/en/privacy" + }, + { + "langId": "fr", + "privacy": "https://www.mobsuccess.com/fr/privacy", + "legIntClaim": "https://www.mobsuccess.com/fr/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.mobsuccess.com/deviceStorage.json" + }, + "667": { + "id": 667, + "name": "Liftoff Mobile, Inc.", + "purposes": [], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://liftoff.io/privacy-policy/", + "legIntClaim": "https://liftoff.io/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://vungle2-cdn-prod.s3.amazonaws.com/sdks/IAB/IABVendorDisclosure.json" + }, + "671": { + "id": 671, + "name": "MEDIA FORCE COMMUNICATIONS (2007) LTD", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "legIntPurposes": [ + 2, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://comparisons.org/privacy.php", + "legIntClaim": "https://comparisons.org/privacy.php" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 9 + ], + "deviceStorageDisclosureUrl": "https://comparisons.org/privacy.json" + }, + "674": { + "id": 674, + "name": "Duration Media, LLC.", + "purposes": [ + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.durationmedia.net/privacy-policy", + "legIntClaim": "https://www.durationmedia.net/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2 + ], + "deviceStorageDisclosureUrl": "https://duration-media.s3.amazonaws.com/dm-vendor-device-storage-and-operational-disclosures.json" + }, + "676": { + "id": 676, + "name": "Businessclick Sp. z o.o.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "legIntPurposes": [ + 10 + ], + "flexiblePurposes": [ + 7, + 8, + 9 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 94608000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": { + "7": 1095, + "8": 1095, + "10": 1095 + }, + "specialPurposes": { + "1": 1095, + "2": 1095 + } + }, + "urls": [ + { + "langId": "pl", + "privacy": "https://www.businessclick.com/documents/Polityka_prywatnosci.pdf", + "legIntClaim": "https://www.businessclick.com/documents/Polityka_prywatnosci.pdf#page=7" + }, + { + "langId": "en", + "privacy": "https://www.businessclick.com/documents/Privacy_Policy.pdf", + "legIntClaim": "https://www.businessclick.com/documents/Privacy_Policy.pdf#page=7" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://ssp.wp.pl/deviceStorage.json" + }, + "677": { + "id": 677, + "name": "Intercept Interactive Inc. dba Undertone", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 7, + 8, + 10 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31556926, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.undertone.com/privacy-center/", + "legIntClaim": "https://www.undertone.com/privacy-center/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://cdn.undertone.com/js/deviceStorage.json" + }, + "681": { + "id": 681, + "name": "MyTraffic", + "purposes": [ + 1, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "9": 105 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.mytraffic.io/en/privacy" + }, + { + "langId": "fr", + "privacy": "https://www.mytraffic.io/fr/privacy" + } + ], + "dataDeclaration": [ + 2, + 3, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://app.mytraffic.io/static/json/iab/disclosures.json" + }, + "702": { + "id": 702, + "name": "Kwanko", + "purposes": [ + 1, + 2, + 7, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 5184000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": { + "2": 30 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.kwanko.com/fr/rgpd/politique-gestion-donnees/", + "legIntClaim": "https://www.kwanko.com/fr/rgpd/politique-gestion-donnees/" + }, + { + "langId": "en", + "privacy": "https://www.kwanko.com/gdpr/privacy-policy/", + "legIntClaim": "https://www.kwanko.com/gdpr/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.kwanko.com/.well-known/deviceStorage.json" + }, + "703": { + "id": 703, + "name": "MindTake Research GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 10 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.mindtake.com/en/reppublika-privacy-policy", + "legIntClaim": "https://www.mindtake.com/en/reppublika-privacy-policy" + }, + { + "langId": "de", + "privacy": "https://www.mindtake.com/de/reppublika-datenschutzordnung", + "legIntClaim": "https://www.mindtake.com/de/reppublika-datenschutzordnung" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 10 + ], + "deviceStorageDisclosureUrl": "https://pub.mindtake.com/TCF_DeviceStorageDisclosure/703/ " + }, + "707": { + "id": 707, + "name": "Dentsu Italia SpA", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 5184000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "it", + "privacy": "https://www.dentsu.com/it/it/policies/info-cookie", + "legIntClaim": "https://www.dentsu.com/it/it/policies/legittimo-interesse" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://cloud.thebignow.it/data/" + }, + "713": { + "id": 713, + "name": "Dataseat Ltd", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8 + ], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 86400, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://dataseat.com/privacy-policy", + "legIntClaim": "https://dataseat.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3 + ], + "deviceStorageDisclosureUrl": "https://assets.dataseat.com/GDPR_TCF.json" + }, + "714": { + "id": 714, + "name": "Upwave Inc.", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7, + 8, + 9 + ], + "flexiblePurposes": [ + 7, + 8, + 9 + ], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 32000000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 400, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.upwave.com/privacy-policy/", + "legIntClaim": "https://www.upwave.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3 + ], + "deviceStorageDisclosureUrl": "https://www.upwave.com/tcf.json" + }, + "715": { + "id": 715, + "name": "BidBerry SRL", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.bidberrymedia.com/service-privacy-policy/", + "legIntClaim": "https://www.bidberrymedia.com/service-privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.bidberrymedia.com/deviceStorage.php" + }, + "717": { + "id": 717, + "name": "Audience Network", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://audiencenetwork.pl/en/internet-advertising-privacy-policy", + "legIntClaim": "https://audiencenetwork.pl/en/internet-advertising-privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://audiencenetwork.pl/deviceStorage.json" + }, + "718": { + "id": 718, + "name": "XChange by SFBX®", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 12, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": { + "2": 90 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://sfbx.io/politique-de-confidentialite/" + }, + { + "langId": "en", + "privacy": "https://sfbx.io/en/politique-de-confidentialite/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.appconsent.io/iab/xchange-by-sfbx.json" + }, + "724": { + "id": 724, + "name": "Between Exchange", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://en.betweenx.com/pdata.pdf", + "legIntClaim": "https://en.betweenx.com/pdata.pdf" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://en.betweenx.com/deviceStorage.json" + }, + "726": { + "id": 726, + "name": "YouGov", + "purposes": [ + 1, + 3, + 5, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 9, + 10 + ], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31557600, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://account.yougov.com/gb-en/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/gb-en/account/privacy-policy" + }, + { + "langId": "de", + "privacy": "https://account.yougov.com/de-de/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/de-de/account/privacy-policy" + }, + { + "langId": "fr", + "privacy": "https://account.yougov.com/fr-fr/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/fr-fr/account/privacy-policy" + }, + { + "langId": "es", + "privacy": "https://account.yougov.com/es-es/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/es-es/account/privacy-policy" + }, + { + "langId": "it", + "privacy": "https://account.yougov.com/it-it/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/it-it/account/privacy-policy" + }, + { + "langId": "da", + "privacy": "https://account.yougov.com/dk-da/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/dk-da/account/privacy-policy" + }, + { + "langId": "cs", + "privacy": "https://account.yougov.com/cz-cs/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/cz-cs/account/privacy-policy" + }, + { + "langId": "nl", + "privacy": "https://account.yougov.com/nl-nl/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/nl-nl/account/privacy-policy" + }, + { + "langId": "no", + "privacy": "https://account.yougov.com/no-nb/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/no-nb/account/privacy-policy" + }, + { + "langId": "el", + "privacy": "https://account.yougov.com/gr-el/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/gr-el/account/privacy-policy" + }, + { + "langId": "tr", + "privacy": "https://account.yougov.com/tr-tr/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/tr-tr/account/privacy-policy" + }, + { + "langId": "ar", + "privacy": "https://account.yougov.com/ae-ar/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/ae-ar/account/privacy-policy" + }, + { + "langId": "fi", + "privacy": "https://account.yougov.com/ae-ar/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/ae-ar/account/privacy-policy" + }, + { + "langId": "sv", + "privacy": "https://account.yougov.com/se-sv/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/se-sv/account/privacy-policy" + }, + { + "langId": "hr", + "privacy": "https://account.yougov.com/hr-hr/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/hr-hr/account/privacy-policy" + }, + { + "langId": "hu", + "privacy": "https://account.yougov.com/hu-hu/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/hu-hu/account/privacy-policy" + }, + { + "langId": "pl", + "privacy": "https://account.yougov.com/pl-pl/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/pl-pl/account/privacy-policy" + }, + { + "langId": "pt", + "privacy": "https://account.yougov.com/pt-pt/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/pt-pt/account/privacy-policy" + }, + { + "langId": "ro", + "privacy": "https://account.yougov.com/ro-ro/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/ro-ro/account/privacy-policy" + }, + { + "langId": "sk", + "privacy": "https://account.yougov.com/sk-sk/account/privacy-policy", + "legIntClaim": "https://account.yougov.com/sk-sk/account/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 3, + 5, + 7, + 11 + ], + "deviceStorageDisclosureUrl": "https://d4a766y0k7kjw.cloudfront.net/global-panel/static/tcf/TCF-1.json" + }, + "727": { + "id": 727, + "name": "Pinpoll GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.pinpoll.com/pdf/data-protection-declaration.pdf", + "legIntClaim": "https://www.pinpoll.com/pdf/data-protection-declaration.pdf" + } + ], + "dataDeclaration": [ + 1, + 7 + ], + "deviceStorageDisclosureUrl": "https://www.pinpoll.com/deviceStorage.json" + }, + "728": { + "id": 728, + "name": "Appier PTE Ltd", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 11 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 397, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.appier.com/en/about/privacy-policy/", + "legIntClaim": "https://www.appier.com/en/about/privacy-policy/" + }, + { + "langId": "ja", + "privacy": "https://www.appier.com/ja-jp/about/privacy-policy", + "legIntClaim": "https://www.appier.com/ja-jp/about/privacy-policy" + }, + { + "langId": "zh", + "privacy": "https://www.appier.com/zh-tw/about/privacy-policy", + "legIntClaim": "https://www.appier.com/zh-tw/about/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://tcf.appier.com/deviceStorage.json" + }, + "730": { + "id": 730, + "name": "INFOnline GmbH", + "purposes": [ + 1, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "8": 180 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.infonline.de/datenschutz/" + }, + { + "langId": "en", + "privacy": "https://www.infonline.de/en/datenschutzerklaerung/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6 + ], + "deviceStorageDisclosureUrl": "https://www.infonline.de/deviceStorage.json" + }, + "732": { + "id": 732, + "name": "Performax.cz, s.r.o.", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 8 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 34164000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "cs", + "privacy": "https://www.performax.cz/cs/privacy-policy/", + "legIntClaim": "https://www.performax.cz/cs/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3 + ], + "deviceStorageDisclosureUrl": "https://www.performax.cz/sellers.json" + }, + "742": { + "id": 742, + "name": "Audiencerate LTD", + "purposes": [ + 1, + 3, + 5 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 1296000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.audiencerate.com/full-data-privacy-compliance" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://a.audrte.com/tcfDeviceDisclosures.json" + }, + "744": { + "id": 744, + "name": "Vidazoo Ltd", + "purposes": [ + 1, + 2, + 3, + 4 + ], + "legIntPurposes": [ + 7, + 10 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 2600000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://vidazoo.gitbook.io/vidazoo-legal/privacy-policy", + "legIntClaim": "https://vidazoo.gitbook.io/vidazoo-legal/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://vidazoo.com/gdpr-tcf/deviceStorage.json" + }, + "745": { + "id": 745, + "name": "Justtag Sp. z o.o.", + "purposes": [ + 1, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "pl", + "privacy": "https://www.justtag.com/POLITYKA_PRYWATNOSCI.pdf", + "legIntClaim": "https://www.justtag.com/POLITYKA_PRYWATNOSCI.pdf" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 8, + 9, + 10 + ], + "deviceStorageDisclosureUrl": "https://www.justtag.com/.well-known/deviceStorage.json" + }, + "748": { + "id": 748, + "name": "AUDIOMOB LTD", + "purposes": [ + 1, + 2, + 7, + 8, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.audiomob.com/privacy", + "legIntClaim": "https://www.audiomob.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.audiomob.com/deviceStorage.json" + }, + "749": { + "id": 749, + "name": "Good-Loop Ltd", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7, + 10 + ], + "flexiblePurposes": [ + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2678400, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 31, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://doc.good-loop.com/policy/privacy-policy.html", + "legIntClaim": "https://localdoc.good-loop.com/policy/privacy-policy.html#2a-legitimate-interests" + } + ], + "dataDeclaration": [ + 1, + 2 + ], + "deviceStorageDisclosureUrl": "https://portal.good-loop.com/gvl.json" + }, + "751": { + "id": 751, + "name": "Kiosked Ltd", + "purposes": [], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://kiosked.com/privacy-policy/", + "legIntClaim": "https://www.kiosked.com/data-processing-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 11 + ], + "deviceStorageDisclosureUrl": "https://resources.kiosked.com/tcf.json" + }, + "755": { + "id": 755, + "name": "Google Advertising Products", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 34190000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 548, + "purposes": { + "3": 180, + "4": 180 + }, + "specialPurposes": { + "1": 1096 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://business.safety.google/privacy/", + "legIntClaim": "https://policies.google.com/privacy#europeanrequirements" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.gstatic.com/iabtcf/deviceStorageDisclosure.json" + }, + "756": { + "id": 756, + "name": "Fandom, Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 99999999, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.fandom.com/privacy-policy", + "legIntClaim": "https://www.fandom.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://script.wikia.nocookie.net/fandom-ae-assets/tcf/v2/deviceStorage.json" + }, + "758": { + "id": 758, + "name": "GfK SE", + "purposes": [ + 1, + 7, + 8, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 720, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://help.sensic.net/privacypolicy_en.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://sensic.net/deviceStorage.json" + }, + "759": { + "id": 759, + "name": "RevJet", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.innervate.com/privacy", + "legIntClaim": "https://www.innervate.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 3, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://tcf.revjet.com/TCFV2-disclosures.json" + }, + "768": { + "id": 768, + "name": "Global Media Group Services Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 46657000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 37, + "purposes": { + "5": 3285, + "6": 3285, + "11": 3285 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://global.com/legal/privacy-policy/", + "legIntClaim": "https://global.com/legal/privacy-policy/" + }, + { + "langId": "nl", + "privacy": "https://global.com/nl/privacy-policy/", + "legIntClaim": "https://global.com/nl/privacy-policy/" + }, + { + "langId": "es", + "privacy": "https://global.com/es/legal/politica-de-privacidad/", + "legIntClaim": "https://global.com/es/legal/politica-de-privacidad/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "deviceStorageDisclosureUrl": "https://thisisdax.com/tcfdeviceStorage.json" + }, + "769": { + "id": 769, + "name": "MEDIAMETRIE", + "purposes": [ + 1, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "8": 1095 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.mediametrie.fr/fr/gestion-des-cookies" + }, + { + "langId": "en", + "privacy": "https://www.mediametrie.fr/en/management-cookies" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://tcf.mediametrie.com/Mediametrie_deviceStorageDisclosure.json" + }, + "770": { + "id": 770, + "name": "MARKETPERF CORP", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.marketperf.com/assets/images/app/marketperf/pdf/privacy-policy.pdf", + "legIntClaim": "https://www.marketperf.com/assets/images/app/marketperf/pdf/privacy-policy.pdf" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 5, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://s.marketperf.com/tcf.json" + }, + "771": { + "id": 771, + "name": "bam! interactive marketing GmbH ", + "purposes": [ + 1, + 3, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 86400, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 7, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://bam-interactive.de/datenschutz/", + "legIntClaim": "https://bam-interactive.de/datenschutz/" + } + ], + "dataDeclaration": [ + 2, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://libs.adtron.io/iab_tcf.json" + }, + "774": { + "id": 774, + "name": "Wagawin GmbH", + "purposes": [], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 7, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.wagawin.com/privacy-en/productprivacy", + "legIntClaim": "https://www.wagawin.com/product-privacy-policy" + }, + { + "langId": "de", + "privacy": "https://www.wagawin.com/product-privacy-policy", + "legIntClaim": "https://www.wagawin.com/product-privacy-policy" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://docs.wagawin.com/deviceStorage.json" + }, + "778": { + "id": 778, + "name": "Discover-Tech ltd", + "purposes": [ + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 93, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.discover-tech.io/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 3 + ], + "deviceStorageDisclosureUrl": "https://www.discover-tech.io/_functions/api/disclosure.json" + }, + "780": { + "id": 780, + "name": "Aniview LTD", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": { + "1": 100 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.aniview.com/privacy-policy/", + "legIntClaim": "https://www.aniview.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://player.aniview.com/gdpr/gdpr.json" + }, + "781": { + "id": 781, + "name": "FeedAd GmbH", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 8, + 9 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://feedad.com/privacy/", + "legIntClaim": "https://feedad.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://api.feedad.com/tcf-device-disclosures.json" + }, + "784": { + "id": 784, + "name": "Nubo LTD", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2, + 7 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 86400, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 1, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://api.recod3suite.com/privacypolicy.php", + "legIntClaim": "https://api.recod3suite.com/privacypolicy.php" + } + ], + "dataDeclaration": [ + 1, + 2, + 8 + ], + "deviceStorageDisclosureUrl": "https://api.recod3suite.com/deviceStorage.json" + }, + "786": { + "id": 786, + "name": "TargetVideo GmbH", + "purposes": [ + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "8": 1 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.target-video.com/datenschutz/" + } + ], + "dataDeclaration": [ + 2 + ], + "deviceStorageDisclosureUrl": "https://www.target-video.com/vendors-device-storage-and-operational-disclosures.json" + }, + "787": { + "id": 787, + "name": "Hearts and Science München GmbH", + "purposes": [ + 1, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 5184000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 45, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.nonstoppartner.net", + "legIntClaim": "https://www.nonstoppartner.net" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://a.nonstoppartner.net/tcf.php" + }, + "788": { + "id": 788, + "name": "Ad Alliance GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 395, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.ad-alliance.de/datenschutz/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10 + ], + "deviceStorageDisclosureUrl": "https://static.emsservice.de/iabtcf/deviceStorageDisclosure.json" + }, + "791": { + "id": 791, + "name": "Media Square", + "purposes": [ + 1, + 2 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.mediasquare.fr/e-privacy/", + "legIntClaim": "https://www.mediasquare.fr/e-privacy/" + } + ], + "dataDeclaration": [ + 2, + 3, + 11 + ], + "deviceStorageDisclosureUrl": "https://mediasquare.fr/deviceStorage.json" + }, + "794": { + "id": 794, + "name": "Kubient Inc. ", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 31104000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://kubient.com/privacy-policy/", + "legIntClaim": "https://kubient.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://kubient.com/wp-content/uploads/2022/08/TCFv2.json" + }, + "795": { + "id": 795, + "name": "Factor Eleven GmbH", + "purposes": [ + 1, + 2, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://de.f11-ads.com/privacy.php", + "legIntClaim": "https://de.f11-ads.com/privacy.php" + }, + { + "langId": "en", + "privacy": "https://de.f11-ads.com/privacy.php", + "legIntClaim": "https://de.f11-ads.com/privacy.php" + } + ], + "dataDeclaration": [ + 1, + 2, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.factor-eleven.de/tcf/deviceStorage2.json" + }, + "796": { + "id": 796, + "name": "EASY Marketing GmbH", + "purposes": [ + 1, + 2, + 7, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://trck.easy-m.de/privacy-policy.do", + "legIntClaim": "https://trck.easy-m.de/privacy-policy.do" + }, + { + "langId": "en", + "privacy": "https://trck.easy-m.de/privacy-policy.do", + "legIntClaim": "https://trck.easy-m.de/privacy-policy.do" + } + ], + "dataDeclaration": [ + 2, + 3, + 4, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://trck.easy-m.de/api/tcf/definitions/disclosures.json" + }, + "798": { + "id": 798, + "name": "Adverticum cPlc.", + "purposes": [ + 1, + 2, + 3, + 4, + 8, + 9, + 10 + ], + "legIntPurposes": [ + 7 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adverticum.net/english/privacy-and-data-processing-information/", + "legIntClaim": "https://adverticum.net/english/privacy-and-data-processing-information/" + } + ], + "dataDeclaration": [ + 1, + 2 + ], + "deviceStorageDisclosureUrl": "https://adverticum.net/static/deviceStorageDisclosure.json" + }, + "800": { + "id": 800, + "name": "Reppublika Data Analytics and Technologies GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 10 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.reppublika.com/privacy-policy", + "legIntClaim": "https://www.reppublika.com/privacy-policy" + }, + { + "langId": "de", + "privacy": "https://www.reppublika.com/datenschutzordnung", + "legIntClaim": "https://www.reppublika.com/datenschutzordnung" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 10 + ], + "deviceStorageDisclosureUrl": "https://pub.mindtake.com/TCF_DeviceStorageDisclosure/?vendorID=800" + }, + "806": { + "id": 806, + "name": "Aarki, Inc.", + "purposes": [ + 1, + 2, + 3, + 4 + ], + "legIntPurposes": [ + 7, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": { + "3": 3650, + "4": 3650, + "7": 1500 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://corp.aarki.com/privacy", + "legIntClaim": "https://corp.aarki.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 7, + 8 + ], + "deviceStorageDisclosureUrl": "https://www.aarki.com/hubfs/device_storage_disclosure.json" + }, + "807": { + "id": 807, + "name": "Moloco, Inc.", + "purposes": [ + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": { + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.moloco.com/privacy-policy", + "legIntClaim": "https://www.moloco.com/advertising-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 8 + ], + "deviceStorageDisclosureUrl": "https://www.moloco.com/device-storage-disclosure-json" + }, + "810": { + "id": 810, + "name": "lead alliance GmbH", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7 + ], + "flexiblePurposes": [ + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.lead-alliance.net/dataprotection2", + "legIntClaim": "https://www.lead-alliance.net/dataprotection2" + } + ], + "dataDeclaration": [ + 1, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://files.leadalliance.eu/devicestorage.json" + }, + "812": { + "id": 812, + "name": "Nielsen International SA", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 7, + 10 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 33696000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 390, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.nielsen.com/eu/en/legal/privacy-statement/digital-measurement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "sv", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "pt", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "it", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "fr", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "es", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "cs", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "no", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "pl", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "da", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + }, + { + "langId": "gl", + "privacy": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/", + "legIntClaim": "https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/#personal-data" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 11 + ], + "deviceStorageDisclosureUrl": "https://files.imrworldwide.com/deviceStorageDisclosure.json" + }, + "820": { + "id": 820, + "name": "Kameleoon SAS", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 7, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 10 + ], + "specialPurposes": [], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://developers.kameleoon.com/local-storage.html#list-of-collected-data", + "legIntClaim": "https://www.kameleoon.com/en/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://developers.kameleoon.com/tcf/kameleoon-tcf.json" + }, + "821": { + "id": 821, + "name": "vitrado GmbH", + "purposes": [ + 1, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": { + "7": 4320 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.vitrado.de/datenschutz", + "legIntClaim": "https://www.vitrado.de/datenschutz" + } + ], + "dataDeclaration": [ + 2 + ], + "deviceStorageDisclosureUrl": "https://static.ppro.de/deviceStorage.json" + }, + "826": { + "id": 826, + "name": "DNA-I.COM", + "purposes": [ + 7, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "7": 1095, + "8": 1095 + }, + "specialPurposes": { + "1": 30, + "2": 30 + } + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.adn.ai/fr/politique-confidentialite-adserver", + "legIntClaim": "https://www.adn.ai/fr/politique-confidentialite-adserver" + } + ], + "dataDeclaration": [ + 2, + 6 + ], + "deviceStorageDisclosureUrl": "https://static.adn.ai/deploymanuel/tcf/deviceStorageDisclosure.json" + }, + "828": { + "id": 828, + "name": "TX Group AG", + "purposes": [ + 1, + 3, + 5, + 6 + ], + "legIntPurposes": [ + 8, + 9, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 94608000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://tx.group/de/datenschutzerklaerung/", + "legIntClaim": "https://tx.group/de/datenschutzerklaerung/#process_personal_data" + }, + { + "langId": "en", + "privacy": "https://tx.group/privacy-policy/", + "legIntClaim": "https://tx.group/privacy-policy/#process_personal_data" + }, + { + "langId": "fr", + "privacy": "https://tx.group/fr/declaration-de-confidentialite/", + "legIntClaim": "https://tx.group/fr/declaration-de-confidentialite/#process_personal_data" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://tx.group/iab/tcf-glv.json" + }, + "831": { + "id": 831, + "name": "United Internet Media GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.united-internet-media.de/de/datenschutzhinweis/", + "legIntClaim": "https://www.united-internet-media.de/de/datenschutzhinweis/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.united-internet-media.de/services/deviceStorage.json" + }, + "835": { + "id": 835, + "name": "Quality Media Network GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 25920000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.qualitymedianetwork.de/datenschutz/", + "legIntClaim": "https://ads.qualitymedianetwork.de/privacy.php" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.qualitymedianetwork.de/json-file/deviceStorage2.json" + }, + "836": { + "id": 836, + "name": "Bring! Labs AG", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7, + 8, + 10 + ], + "flexiblePurposes": [ + 7, + 8 + ], + "specialPurposes": [], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.getbring.com/en/privacy-policy", + "legIntClaim": "https://www.getbring.com/en/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 5, + 7, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://files.getbring.com/iab/DeviceStorageDisclosure.json" + }, + "839": { + "id": 839, + "name": "PIXFUTURE MEDIA INC.", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.pixfuture.com/terms-and-conditions#platform-terms", + "legIntClaim": "https://www.pixfuture.com/terms-and-conditions#platform-terms" + } + ], + "dataDeclaration": [ + 4 + ], + "deviceStorageDisclosureUrl": "https://pixfuture.com/vendor-disclosures.json" + }, + "844": { + "id": 844, + "name": "SPICY MOBILE Karczewski Zawadzki Spółka Jawna", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 2419200, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://spicymobile.pl/polityka-prywatnosci" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7 + ], + "deviceStorageDisclosureUrl": "https://spicyrtb.com/static/iab-disclosure.json" + }, + "848": { + "id": 848, + "name": "BSmartData GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 0, + "purposes": { + "3": 7, + "4": 7 + }, + "specialPurposes": { + "1": 7 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.bsmartdata.com/en/privacy/", + "legIntClaim": "https://www.bsmartdata.com/en/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 10 + ], + "deviceStorageDisclosureUrl": "https://ad.bsmartdata.com/DeviceStorage.json" + }, + "849": { + "id": 849, + "name": "Epom Ltd.", + "purposes": [ + 1, + 2, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 3, + "purposes": { + "2": 730 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://epom.com/privacy-policy", + "legIntClaim": "https://epom.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 8 + ], + "deviceStorageDisclosureUrl": "https://epom.com/deviceStorage.json" + }, + "850": { + "id": 850, + "name": "Publisher First, Inc.", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 604800, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://freestar.com/privacy-policy/", + "legIntClaim": "https://freestar.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://iab.pub.network/json/freestar-us.json" + }, + "855": { + "id": 855, + "name": "Adnuntius AS", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 214748364, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": { + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adnuntius.com/resources/privacy-policy/", + "legIntClaim": "https://adnuntius.com/resources/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://delivery.adnuntius.com/.well-known/deviceStorage.json" + }, + "856": { + "id": 856, + "name": "Petal Ads", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": { + "2": 7 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.aspiegel.com/en/privacy", + "legIntClaim": "https://h5hosting.dbankcdn.com/cch5/PPS/ads/interests/legitimate_interests.htm" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://h5hosting-dre.dbankcdn.com/cch5/PPS/ads/tcfvendor/disclosure.json" + }, + "857": { + "id": 857, + "name": "SOMQUERY SOMTAG - (SevenOne Media)", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 10 + ], + "flexiblePurposes": [ + 2, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.seven.one/datenschutzhinweise/somquery-somtag", + "legIntClaim": "https://www.seven.one/datenschutzhinweise/somquery-somtag" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://ad.71i.de/consent/deviceStorage.json" + }, + "858": { + "id": 858, + "name": "Mediavine, Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31560000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.mediavine.com/privacy-policy", + "legIntClaim": "https://www.mediavine.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.mediavine.com/deviceStorage.json" + }, + "861": { + "id": 861, + "name": "Triple13 Ltd", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": { + "7": 730, + "8": 730, + "9": 730, + "10": 730 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://freestar.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://static.s2s.t13.io/iab/deviceStorageDisclosure.json" + }, + "862": { + "id": 862, + "name": "Truvid Inc.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8 + ], + "legIntPurposes": [ + 7, + 10 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 5184000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 60, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.truvid.com/terms/privacy_policy", + "legIntClaim": "https://www.truvid.com/terms/privacy_policy" + } + ], + "dataDeclaration": [ + 2, + 7, + 8 + ], + "deviceStorageDisclosureUrl": "https://www.truvid.com/deviceStorage.json" + }, + "864": { + "id": 864, + "name": "I.R.V. D.O.O.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.contentexchange.me/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6, + 8, + 10 + ], + "deviceStorageDisclosureUrl": "https://hb.contentexchange.me/template/deviceStorage.json" + }, + "866": { + "id": 866, + "name": "YieldLift LLC", + "purposes": [ + 1, + 2, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://yieldlift.com/privacy-policy.html", + "legIntClaim": "https://yieldlift.com/privacy-policy.html" + } + ], + "dataDeclaration": [ + 11 + ], + "deviceStorageDisclosureUrl": "https://yieldlift.s3.amazonaws.com/yl-vendor-device-storage-and-operational-disclosures.json" + }, + "868": { + "id": 868, + "name": "Converto AG", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 360, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.converto.com/datenschutz-privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://converto-docs.s3.eu-central-1.amazonaws.com/TCD+2.0+json/converto-tcf-vendor-cookie.json" + }, + "878": { + "id": 878, + "name": "Natív Hirdetés Korlátolt Felelősségű Társaság", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2, + 7, + 8 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 5184000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 60, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "hu", + "privacy": "https://related.hu/adatkezeles/", + "legIntClaim": "https://related.hu/adatkezeles/" + }, + { + "langId": "en", + "privacy": "https://related.hu/en/privacy-policy", + "legIntClaim": "https://related.hu/en/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 8 + ], + "deviceStorageDisclosureUrl": "https://related.hu/tcf/tcf.json" + }, + "881": { + "id": 881, + "name": "Hillside (Sports) GP Limited", + "purposes": [ + 1, + 2, + 7, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 388800, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 45, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.bet365partners.com/privacypolicy", + "legIntClaim": "https://www.bet365partners.com/privacypolicy" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.bet365partners.com/privacypolicy/iab_tcf/device_storage.json" + }, + "882": { + "id": 882, + "name": "NumberEight Technologies Ltd", + "purposes": [ + 1, + 3, + 5, + 10 + ], + "legIntPurposes": [ + 9 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 183, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://portal.eu.numbereight.ai/policies-license#software-privacy-notice", + "legIntClaim": "https://portal.eu.numbereight.ai/policies-license#software-privacy-notice" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://server.eu.numbereight.ai/.well-known/deviceStorage.json" + }, + "885": { + "id": 885, + "name": "Dianomi PLC", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 8, + 9 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.dianomi.com/legal/privacy.epl", + "legIntClaim": "https://www.dianomi.com/legal/privacy.epl" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.dianomi.com/device_storage.json" + }, + "889": { + "id": 889, + "name": "Admo.tv (Clickon)", + "purposes": [ + 8, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 32000000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 390, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.admo.tv/en/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://vol.admo.tv/cookie-properties.json" + }, + "890": { + "id": 890, + "name": "Channel Pilot Solutions GmbH", + "purposes": [ + 1, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 12690000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "7": 30 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://channelpilot.co.uk/privacy-policy" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://static.content.channelpilot.com/tcf.json" + }, + "896": { + "id": 896, + "name": "IPSOS MORI UK LTD", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 8, + 9 + ], + "flexiblePurposes": [ + 8, + 9 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 40, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://iris.ipsos.com/site-centric-privacy/", + "legIntClaim": "https://iris.ipsos.com/site-centric-privacy/#legitimateInterests" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://download.dotmetrics.net/Privacy/deviceStorage.json" + }, + "898": { + "id": 898, + "name": "Mobkoi Ltd", + "purposes": [], + "legIntPurposes": [ + 2, + 10 + ], + "flexiblePurposes": [ + 2, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "2": 365, + "10": 365 + }, + "specialPurposes": { + "1": 0, + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.mobkoi.com/advertising-platform-privacy-policy/", + "legIntClaim": "https://www.mobkoi.com/advertising-platform-privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.maximus.mobkoi.com/tcf/deviceStorageDisclosure.json" + }, + "900": { + "id": 900, + "name": "Advisible AB", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.advisible.com/privacy", + "legIntClaim": "https://www.advisible.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 8 + ], + "deviceStorageDisclosureUrl": "https://misc.advisible.com/static/deviceStorage.json" + }, + "901": { + "id": 901, + "name": "STUDIO GONG GmbH & Co. Studiobetriebs KG", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34128000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.studio-gong.de/datenschutzerklaerung", + "legIntClaim": "https://www.studio-gong.de/datenschutzerklaerung" + } + ], + "dataDeclaration": [ + 1, + 2, + 3 + ], + "deviceStorageDisclosureUrl": "https://www.studio-gong.de/devicedisclosure_vendor_studiogong.json" + }, + "907": { + "id": 907, + "name": "AWIN AG", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7 + ], + "flexiblePurposes": [ + 7 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1096, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.awin.com/gb/privacy", + "legIntClaim": "https://www.awin.com/gb/privacy" + }, + { + "langId": "de", + "privacy": "https://www.awin.com/de/datenschutzerklarung", + "legIntClaim": "https://www.awin.com/de/datenschutzerklarung" + }, + { + "langId": "fr", + "privacy": "https://www.awin.com/fr/politique-de-confidentialite", + "legIntClaim": "https://www.awin.com/fr/politique-de-confidentialite" + }, + { + "langId": "it", + "privacy": "https://www.awin.com/it/privacy", + "legIntClaim": "https://www.awin.com/it/privacy" + }, + { + "langId": "pl", + "privacy": "https://www.awin.com/pl/prywatnosc", + "legIntClaim": "https://www.awin.com/pl/prywatnosc" + }, + { + "langId": "sv", + "privacy": "https://www.awin.com/se/privacy", + "legIntClaim": "https://www.awin.com/se/privacy" + }, + { + "langId": "nl", + "privacy": "https://www.awin.com/nl/privacy", + "legIntClaim": "https://www.awin.com/nl/privacy" + }, + { + "langId": "pt", + "privacy": "https://www.awin.com/pt/privacy", + "legIntClaim": "https://www.awin.com/pt/privacy" + }, + { + "langId": "es", + "privacy": "https://www.awin.com/es/privacidad", + "legIntClaim": "https://www.awin.com/es/privacidad" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 5, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://privacy.awin.com/AwinDeviceStorage.json" + }, + "909": { + "id": 909, + "name": "MobileFuse LLC", + "purposes": [ + 1, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://mobilefuse.com/privacy-policy/", + "legIntClaim": "https://mobilefuse.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 7, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://mobilefuse.com/storage-disclosures.json" + }, + "918": { + "id": 918, + "name": "SPORTORITY UK LTD", + "purposes": [ + 1, + 2, + 5, + 6 + ], + "legIntPurposes": [ + 7, + 8, + 9, + 10, + 11 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 1800, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 2555, + "purposes": { + "2": 0 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.90min.com/privacy", + "legIntClaim": "https://www.90min.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://disclosures.mmctsvc.com/device-storage.json" + }, + "919": { + "id": 919, + "name": "Livewrapped AB", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://livewrapped.com/privacy-policy", + "legIntClaim": "https://livewrapped.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://content.lwadm.com/deviceStorageDisclosure.json" + }, + "922": { + "id": 922, + "name": "Amnet GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 30758400, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://mediaintelligence.de/privacy-policy.do", + "legIntClaim": "https://mediaintelligence.de/privacy-policy.do" + }, + { + "langId": "en", + "privacy": "https://mediaintelligence.de/privacy-policyeng.do", + "legIntClaim": "https://mediaintelligence.de/privacy-policyeng.do" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 5, + 6, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://min.easyapi.de/api/tcf/definitions/disclosures" + }, + "931": { + "id": 931, + "name": "Traffective GmbH", + "purposes": [ + 1, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 365, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.iubenda.com/privacy-policy/30563919", + "legIntClaim": "https://www.iubenda.com/privacy-policy/30563919/legal" + } + ], + "dataDeclaration": [ + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.opencmp.net/vendor-device-storage-disclosures.json" + }, + "935": { + "id": 935, + "name": "INIS sp. zo.o.", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 7, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 7, + 8 + ], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": { + "3": 365, + "5": 365, + "10": 365 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "pl", + "privacy": "https://www.inis.pl/polityka-prywatnosci", + "legIntClaim": "https://www.inis.pl/polityka-prywatnosci" + } + ], + "dataDeclaration": [ + 1, + 2, + 7 + ], + "deviceStorageDisclosureUrl": "https://www.inis.pl/tcf/vendor.json" + }, + "938": { + "id": 938, + "name": "dataXtrade GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": { + "1": 365 + } + }, + "urls": [ + { + "langId": "de", + "privacy": "https://dataxtrade.com/de/privacy.html", + "legIntClaim": "https://dataxtrade.com/de/privacy.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://tcf.adtech.app/gen/deviceStorageDisclosure/dxt.json" + }, + "940": { + "id": 940, + "name": "Terminus Software Inc.", + "purposes": [], + "legIntPurposes": [ + 7 + ], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "7": 4320 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://terminus.com/privacy-policy/", + "legIntClaim": "https://terminus.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://iabdisclosure.terminusplatform.com/deviceStorageDisclosureURL.json" + }, + "941": { + "id": 941, + "name": "ADSOCY", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 25920000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 60, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "es", + "privacy": "https://adsocy.com/politica-de-privacidad-y-aviso-legal/", + "legIntClaim": "https://adsocy.com/politica-de-privacidad-y-aviso-legal/" + } + ], + "dataDeclaration": [ + 1, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://adsocy.com/vendor.json" + }, + "943": { + "id": 943, + "name": "Marfeel Solutions, SL (Compass)", + "purposes": [ + 1, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 780, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://community.marfeel.com/t/marfeel-saas-privacy-policy/7500" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://live.mrf.io/statics/marfeel/resources/lib/deviceStorage/compass.json" + }, + "944": { + "id": 944, + "name": "AudienceRun corp", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.audiencerun.com/privacy-policy", + "legIntClaim": "https://www.audiencerun.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 5, + 7, + 8 + ], + "deviceStorageDisclosureUrl": "https://www.audiencerun.com/tcf.json" + }, + "950": { + "id": 950, + "name": "Stream Eye OOD", + "purposes": [], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": {}, + "specialPurposes": { + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://app.streameye.com/policy/net", + "legIntClaim": "https://app.streameye.com/policy/net" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://static.streameye.net/iab/dsdu.json" + }, + "952": { + "id": 952, + "name": "ProSiebenSat.1 Digital Data GmbH", + "purposes": [ + 1, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1110, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.7pass.de/psdd/datenschutzbestimmungen-cdb.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.7pass.de/psdd/deviceStorage.json" + }, + "953": { + "id": 953, + "name": "adbalancer Werbeagentur GmbH", + "purposes": [], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": {}, + "specialPurposes": { + "2": 0 + } + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.adbalancer.com/hosting-datenschutzerklaerung", + "legIntClaim": "https://www.adbalancer.com/legitimes-interesse" + } + ], + "dataDeclaration": [ + 8 + ], + "deviceStorageDisclosureUrl": "https://streaming-cdn.ad-balancer.at/deviceStorageDisclosure.json" + }, + "955": { + "id": 955, + "name": "Konodrac S.L.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "es", + "privacy": "https://konodrac.com/politica-privacidad/" + }, + { + "langId": "en", + "privacy": "https://konodrac.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.konograma.com/public/device_storage_disclosure.json" + }, + "956": { + "id": 956, + "name": "Avantis Video Ltd", + "purposes": [ + 1, + 2, + 7, + 8, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 400, + "purposes": { + "2": 0, + "11": 0 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.avantisvideo.com/privacy-policy/", + "legIntClaim": "https://www.avantisvideo.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://avantisvideo.com/local-storage-disclosure.json" + }, + "966": { + "id": 966, + "name": "socoto gmbh & co. kg", + "purposes": [ + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "7": 0 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.socoto.com/datenschutz/" + } + ], + "deviceStorageDisclosureUrl": "https://www.socoto.com/.iab/deviceStorage.json" + }, + "968": { + "id": 968, + "name": "WEMASS MEDIA AUDIENCE SAFE SOLUTIONS, S.L. ", + "purposes": [ + 1, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 94608000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "es", + "privacy": "https://wemass.com/privacidad/", + "legIntClaim": "https://wemass.com/privacidad/" + } + ], + "dataDeclaration": [ + 2, + 4, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://sellers.wemass.com/deviceStorage.json" + }, + "970": { + "id": 970, + "name": "Frameplay Corporation", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 547, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.frameplay.gg/terms", + "legIntClaim": "https://www.frameplay.gg/terms" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 8 + ], + "deviceStorageDisclosureUrl": "https://www.frameplay.gg/deviceStorageDisclosure.json" + }, + "978": { + "id": 978, + "name": "ARKHEUS", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.arkheus.fr/conditions-d-utilisation/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.arkheus.fr/tcf.json" + }, + "982": { + "id": 982, + "name": "Netpoint Media GmbH", + "purposes": [ + 1, + 2 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 3600, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "2": 30 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.netpoint-media.de/technik/datenschutz" + } + ], + "dataDeclaration": [ + 6 + ], + "deviceStorageDisclosureUrl": "https://cdn.netpoint-media.de/iab/deviceStorage.json" + }, + "987": { + "id": 987, + "name": "Media16 ltd", + "purposes": [ + 1, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 3 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "7": 30 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://media16.tv/privacy-policy/" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://media16.tv/disclosure.json" + }, + "991": { + "id": 991, + "name": "iProspect GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 30758400, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://inetpro.io/privacy-policyeng.do", + "legIntClaim": "https://inetpro.io/privacy-policyeng.do" + }, + { + "langId": "de", + "privacy": "https://inetpro.io/privacy-policy.do", + "legIntClaim": "https://inetpro.io/privacy-policy.do" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://n2.min.emcustomers.de/api/tcf/definitions/disclosures" + }, + "993": { + "id": 993, + "name": "QUARTER MEDIA GmbH", + "purposes": [ + 1, + 2, + 3, + 7, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 90, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://quartermedia.de/daten/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.quartermedia-ad-service.net/prebid/device-storage.json" + }, + "994": { + "id": 994, + "name": "Leadoo Marketing Technologies Ltd", + "purposes": [ + 3, + 4, + 5, + 6, + 9 + ], + "legIntPurposes": [ + 7, + 8, + 10 + ], + "flexiblePurposes": [ + 9 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1825, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://leadoo.com/privacy-policy/", + "legIntClaim": "https://leadoo.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://res.leadoo.com/tcf/deviceStorage.json" + }, + "1001": { + "id": 1001, + "name": "wetter.com GmbH", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 400, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.wetter.com/internal/news/datenschutzhinweise_aid_607698849b8ecf79e21584fa.html", + "legIntClaim": "https://www.wetter.com/internal/news/datenschutzhinweise_aid_607698849b8ecf79e21584fa.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://cs3.wettercomassets.com/iab/disclosure.json" + }, + "1002": { + "id": 1002, + "name": "Extreme Reach, Inc", + "purposes": [ + 1, + 2, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 7, + 10 + ], + "specialPurposes": [], + "features": [ + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 15552000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://extremereach.com/privacy-policies/", + "legIntClaim": "https://NotApplicableConsetOnly" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://beacons.extremereach.io/gdpr-tcfv2.json" + }, + "1015": { + "id": 1015, + "name": "Samsung Ads", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://policy.samsungrs.com/consent/eu/privacy_policy_en.html", + "legIntClaim": "https://policy.samsungrs.com/consent/eu/privacy_policy_en.html#use-information" + }, + { + "langId": "de", + "privacy": "https://policy.samsungrs.com/consent/eu/v1.0.0/privacy_policy_de.html", + "legIntClaim": "https://policy.samsungrs.com/consent/eu/v1.0.0/privacy_policy_de.html#use-information" + }, + { + "langId": "it", + "privacy": "https://policy.samsungrs.com/consent/eu/v1.0.0/privacy_policy_it.html", + "legIntClaim": "https://policy.samsungrs.com/consent/eu/v1.0.0/privacy_policy_it.html#use-information" + }, + { + "langId": "fr", + "privacy": "https://policy.samsungrs.com/consent/eu/v1.0.0/privacy_policy_fr.html", + "legIntClaim": "https://policy.samsungrs.com/consent/eu/v1.0.0/privacy_policy_fr.html#use-information" + }, + { + "langId": "es", + "privacy": "https://policy.samsungrs.com/consent/eu/v1.0.0/privacy_policy_es.html", + "legIntClaim": "https://policy.samsungrs.com/consent/eu/v1.0.0/privacy_policy_es.html#use-information" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://policy.samsungrs.com/consent/eu/deviceStorageDisclosure.json" + }, + "1020": { + "id": 1020, + "name": "Baidu USA", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31622400, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.mediago.io/policy/", + "legIntClaim": "https://www.mediago.io/policy/" + } + ], + "dataDeclaration": [ + 6 + ], + "deviceStorageDisclosureUrl": "https://cdn.mediago.io/js/tcf.json" + }, + "1027": { + "id": 1027, + "name": "Exit Bee Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.exitbee.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 7, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.exitbee.com/DeviceStorageDisclosure.json" + }, + "1028": { + "id": 1028, + "name": "Sparteo", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.bricks-co.com/confidentialite", + "legIntClaim": "https://www.bricksfounders.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://bid.bricks-co.com/.well-known/deviceStorage.json" + }, + "1032": { + "id": 1032, + "name": "Project Agora Ltd", + "purposes": [ + 1, + 7, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://projectagora.com/privacy-policy/", + "legIntClaim": "https://projectagora.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 2, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://projectagora.net/1032_deviceStorageDisclosure.json" + }, + "1035": { + "id": 1035, + "name": "Allegro sp. z o.o.", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": { + "3": 180 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "pl", + "privacy": "https://allegro.pl/terms/attachment/5" + }, + { + "langId": "cs", + "privacy": "https://allegro.cz/podminky/priloha/5" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://naanalle.pl/iab/deviceStorage.json" + }, + "1036": { + "id": 1036, + "name": "VIADS ADVERTISING S.L.", + "purposes": [ + 1, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [ + 2, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://viads.com/privacy-policy", + "legIntClaim": "https://viads.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://viads.com/deviceStorage.json" + }, + "1041": { + "id": 1041, + "name": "Sqreem Technologies Private Limited", + "purposes": [], + "legIntPurposes": [ + 2, + 7, + 9 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://sqreemtech.com/privacy/", + "legIntClaim": "https://sqreemtech.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 3 + ], + "deviceStorageDisclosureUrl": "https://ttd-misc-public-assets.s3.us-west-2.amazonaws.com/deviceStorageDisclosureURL.json" + }, + "1044": { + "id": 1044, + "name": "TMT Digital Inc", + "purposes": [], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": {}, + "specialPurposes": { + "1": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://mediatrust.com/privacy-statement/", + "legIntClaim": "https://mediatrust.com/privacy-statement/" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://webcontentassessor.com/tcf.json" + }, + "1048": { + "id": 1048, + "name": "Questpass Sp. z o.o.", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "pl", + "privacy": "https://questpass.pl/pl/regulaminy/polityka-prywatnosci/", + "legIntClaim": "https://questpass.pl/pl/regulaminy/polityka-prywatnosci/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.dqst.pl/static/prod/consents/tcf_disclosures.json" + }, + "1050": { + "id": 1050, + "name": "Hurra Communications GmbH", + "purposes": [ + 1, + 2, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7 + ], + "specialPurposes": [ + 1 + ], + "features": [ + 2 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536500, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 396, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://privacy.hurra.com/tcf/", + "legIntClaim": "https://privacy.hurra.com/tcf/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 8, + 9 + ], + "deviceStorageDisclosureUrl": "https://privacy.hurra.com/tcf/disclosures.json" + }, + "1051": { + "id": 1051, + "name": "Samoukale Enterprises Limited dba ADEX", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 7, + 8, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adex.com/privacy", + "legIntClaim": "https://adex.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 5, + 7, + 11 + ], + "deviceStorageDisclosureUrl": "https://adex.com/gdpr.json" + }, + "1060": { + "id": 1060, + "name": "Next Millennium Media INC", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 36000, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 7, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://nextmillennium.io/privacy-policy/", + "legIntClaim": "https://nextmillennium.io/privacy-policy/" + } + ], + "dataDeclaration": [ + 3, + 4, + 6 + ], + "deviceStorageDisclosureUrl": "https://nextmillennium.io/deviceStorage.json" + }, + "1064": { + "id": 1064, + "name": "optimise-it GmbH", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 8 + ], + "flexiblePurposes": [ + 8 + ], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 0, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "8": 13 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://optimise-it.de/datenschutz", + "legIntClaim": "https://optimise-it.de/datenschutz" + } + ], + "dataDeclaration": [ + 1, + 2, + 7 + ], + "deviceStorageDisclosureUrl": "https://optimise-it.de/.well-known/deviceStorage.json" + }, + "1067": { + "id": 1067, + "name": "Arpeely Ltd.", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 540, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.arpeely.com/privacy", + "legIntClaim": "https://www.arpeely.com/privacy" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://cdn.rtbrain.app/deviceStorageDisclosureUrl.json" + }, + "1069": { + "id": 1069, + "name": "BCOVERY SAS", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": { + "10": 365 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.bcovery.com/politique-de-confidentialite.html", + "legIntClaim": "https://www.bcovery.com/legitimate-interest-claim.html" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.bcovery.com/dsd-bcovery.json" + }, + "1070": { + "id": 1070, + "name": "Playhill Limited", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://playhill.com/privacy", + "legIntClaim": "https://playhill.com/privacy" + } + ], + "dataDeclaration": [ + 1, + 2 + ], + "deviceStorageDisclosureUrl": "https://playhill.com/iab.json" + }, + "1072": { + "id": 1072, + "name": "Adrino Mobile Sp. z o.o.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 360, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "pl", + "privacy": "https://adrino.pl/wp-content/uploads/2021/01/POLITYKA-PRYWATNOS%CC%81CI-Adrino-Mobile.pdf" + } + ], + "dataDeclaration": [ + 1, + 8 + ], + "deviceStorageDisclosureUrl": "https://cdn.adrino.cloud/iab/gvl.json" + }, + "1080": { + "id": 1080, + "name": "CITISERVI EUROPE, S.L.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 5000000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "es", + "privacy": "https://www.citiservimedia.com/politica-de-privacidad-plataforma-citiservimedia/", + "legIntClaim": "https://www.citiservimedia.com/politica-de-privacidad-plataforma-citiservimedia/#legitimate-interest" + } + ], + "dataDeclaration": [ + 2, + 3, + 4, + 5, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://csm.citiservi.es/static/device-storage-disclosure.json" + }, + "1081": { + "id": 1081, + "name": "C Wire AG", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.cwire.com/privacy-policy", + "legIntClaim": "https://www.cwire.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.cwi.re/artifacts/iab/iab.json" + }, + "1085": { + "id": 1085, + "name": "Njuice AB", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 34560000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 400, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://squidapp.co/en/privacy-policy.php", + "legIntClaim": "https://squidapp.co/en/privacy-policy.php" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://squid-tcf.s3.eu-central-1.amazonaws.com/disclosure.json" + }, + "1087": { + "id": 1087, + "name": "CASTOOLA D.O.O.", + "purposes": [ + 1, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [ + 2 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://castoola.com/wp-content/uploads/2022/01/castoola_pp_06.01.2022.pdf", + "legIntClaim": "https://castoola.com/wp-content/uploads/2022/01/castoola_pp_06.01.2022.pdf" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://privacy.castoola.tv/deviceStorage.json" + }, + "1089": { + "id": 1089, + "name": "Teavaro", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 120, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.teavaro.com/privacy-policy/" + }, + { + "langId": "de", + "privacy": "https://teavaro.com/de/datenschutz-bestimmungen/" + }, + { + "langId": "es", + "privacy": "https://teavaro.com/es/politica-de-privacidad/" + } + ], + "dataDeclaration": [ + 1, + 2, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://service.tvtestenv1.net/utiq/prebid/deviceStorage.json" + }, + "1090": { + "id": 1090, + "name": "Score Media Group GmbH & Co. KG", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://score-media.de/datenschutzerklaerung/", + "legIntClaim": "https://score-media.de/datenschutzerklaerung/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://ad.tag.score-media.de/privacy/tcf/deviceStorage/93a705a5f5d52cf1.json" + }, + "1091": { + "id": 1091, + "name": "Octave IP Limited", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 34190000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://octaveip.com/policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://octaveip.com/deviceStorage.json" + }, + "1094": { + "id": 1094, + "name": "ADMAX", + "purposes": [ + 1 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://admaxmedia.io/privacy-policy/", + "legIntClaim": "https://admaxmedia.io/privacy-policy/" + }, + { + "langId": "fr", + "privacy": "https://admaxmedia.io/privacy-policy-fr/", + "legIntClaim": "https://admaxmedia.io/privacy-policy-fr/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.admaxmedia.io/deviceStorage.json" + }, + "1100": { + "id": 1100, + "name": "Relevant Digital Oy", + "purposes": [ + 1 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.relevant-digital.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://cdn.relevant-digital.com/resources/deviceStorage.json" + }, + "1101": { + "id": 1101, + "name": "PIA Advertising GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.performance-advertising.de/datenschutz/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://imagesrv.adition.com/banners/268/xml/cm/ts/tcf/deviceStorage.json" + }, + "1104": { + "id": 1104, + "name": "Covatic Ltd", + "purposes": [ + 1, + 2, + 3, + 4, + 8, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 0, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://covatic.com/terms/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://tcf.covatic.io/onDeviceStorage.json" + }, + "1110": { + "id": 1110, + "name": "KÖNIGSTEINER digital GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.koenigsteiner.digital/datenschutzerklaerung", + "legIntClaim": "https://www.koenigsteiner.digital/datenschutzerklaerung" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 8 + ], + "deviceStorageDisclosureUrl": "https://roqad-public.s3.eu-central-1.amazonaws.com/tcf-disclosure.json" + }, + "1116": { + "id": 1116, + "name": "Anonymised", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.anonymised.io/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 7, + 8, + 10 + ], + "deviceStorageDisclosureUrl": "https://static.anonymised.io/deviceStorage.json" + }, + "1119": { + "id": 1119, + "name": "Novatiq limited ", + "purposes": [ + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1, + "purposes": { + "7": 0 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://novatiq.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 4, + 5, + 11 + ], + "deviceStorageDisclosureUrl": "https://novatiq.com/privacy/iab/novatiq.json" + }, + "1120": { + "id": 1120, + "name": "Bababam", + "purposes": [ + 1, + 2, + 3 + ], + "legIntPurposes": [ + 7, + 8, + 9, + 10, + 11 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 730, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.bababam.com/terms", + "legIntClaim": "https://www.bababam.com/terms" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.bababam.com/.well-known/deviceStorage.json" + }, + "1122": { + "id": 1122, + "name": "Arbeitsgemeinschaft Media-Analyse", + "purposes": [ + 1, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31622400, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": { + "9": 180 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.agma-mmc.de/datenschutz" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 5, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.agma-mmc.de/ioam/deviceStorage.json" + }, + "1127": { + "id": 1127, + "name": "XAD spoteffects GmbH", + "purposes": [ + 1, + 3, + 5, + 7, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 63072000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 396, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://xadspoteffects.com/en/privacy-policy/" + } + ], + "dataDeclaration": [ + 2, + 3, + 4, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://trck.spoteffects.net/tcf2/ops-disclosure.json" + }, + "1129": { + "id": 1129, + "name": "Brandhouse/Subsero A/S", + "purposes": [], + "legIntPurposes": [ + 8 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 360, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://subserohost.com/privacy_policy.aspx", + "legIntClaim": "https://subserohost.com/privacy_policy.aspx#datacoll_legitimateinterest" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://subserohost.com/device_storage_disclosure_tcfv2.json" + }, + "1130": { + "id": 1130, + "name": "WebMedia", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 120960, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://mobupps.com/pdf/Mobupps_Privacy_policy.pdf", + "legIntClaim": "https://mobupps.com/pdf/Mobupps_Privacy_policy.pdf" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 8 + ], + "deviceStorageDisclosureUrl": "https://mobupps.com/tcf.json" + }, + "1134": { + "id": 1134, + "name": "Bidmatic Inc", + "purposes": [ + 1, + 2, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 8035200, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": { + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://bidmatic.io/privacy-policy/", + "legIntClaim": "https://bidmatic.io/tos/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://bidmatic.io/.well-known/deviceStorage.json" + }, + "1136": { + "id": 1136, + "name": "Infolinks Media, LLC", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 4320, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.infolinks.com/privacy-policy", + "legIntClaim": "https://www.infolinks.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://resources.infolinks.com/static/tcf/devicestoragedisclosure.json" + }, + "1144": { + "id": 1144, + "name": "Unicredit BankAustria AG", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31536000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 180, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.bankaustria.at/rechtliches-datenschutz.jsp" + } + ], + "dataDeclaration": [ + 1, + 3, + 4, + 10 + ], + "deviceStorageDisclosureUrl": "https://js.ucg-at.datafront.co/next14_dmp_ucg-at_device_storage_information.json" + }, + "1147": { + "id": 1147, + "name": "MADINAD PC", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 7 + ], + "legIntPurposes": [ + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 604800, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 7, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://madinad.com/privacy-policy/", + "legIntClaim": "https://madinad.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6 + ], + "deviceStorageDisclosureUrl": "https://static.madinad.com/static/iab-tcf.json" + }, + "1149": { + "id": 1149, + "name": "AdInMo LTD", + "purposes": [], + "legIntPurposes": [ + 2, + 7, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": { + "2": 30, + "10": 4320 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.adinmo.com/privacy-policy/", + "legIntClaim": "https://www.adinmo.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 11 + ], + "deviceStorageDisclosureUrl": "https://rtb.adinmo.com/iab-tcf-vendor" + }, + "1154": { + "id": 1154, + "name": "Alphonso Inc. ", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 800, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu/" + }, + { + "langId": "bg", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-bulgarian/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-bulgarian/" + }, + { + "langId": "hr", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-croatian/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-croatian/" + }, + { + "langId": "cs", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-czech/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-czech/" + }, + { + "langId": "da", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-danish/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-danish/" + }, + { + "langId": "nl", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-dutch/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-dutch/" + }, + { + "langId": "fi", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-finnish/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-finnish/" + }, + { + "langId": "et", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-estonian/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-estonian/" + }, + { + "langId": "fr", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-fr/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-fr/" + }, + { + "langId": "gl", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-gaelic/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-gaelic/" + }, + { + "langId": "de", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-de/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-de/" + }, + { + "langId": "el", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-greek/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-greek/" + }, + { + "langId": "hu", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-hungarian/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-hungarian/" + }, + { + "langId": "it", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-it/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-it/" + }, + { + "langId": "lv", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-latvian/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-latvian/" + }, + { + "langId": "lt", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-lithuanian/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-lithuanian/" + }, + { + "langId": "mt", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-maltese/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-maltese/" + }, + { + "langId": "pl", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-polish/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-polish/" + }, + { + "langId": "pt", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-portuguese/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-portuguese/" + }, + { + "langId": "ro", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-romanian/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-romanian/" + }, + { + "langId": "sk", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-slovak/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-slovak/" + }, + { + "langId": "sl", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-slovenian/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-slovenian/" + }, + { + "langId": "es", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-es/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-es/" + }, + { + "langId": "sv", + "privacy": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-swedish/", + "legIntClaim": "https://alphonso.tv/privacy/smart-tvs/smart-tv-privacy-policy-eu-swedish/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://cdn.alphonso.tv/static-assets/iab-tcf/policy/device-storage-disclosure.json" + }, + "1157": { + "id": 1157, + "name": "Refine Direct Srl", + "purposes": [ + 1, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 1, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "it", + "privacy": "https://www.refine.direct/it/cookie-policy/", + "legIntClaim": "https://www.refine.direct/it/legitimate-interest-assessment/" + }, + { + "langId": "en", + "privacy": "https://www.refine.direct/en/cookie-policy/", + "legIntClaim": "https://www.refine.direct/en/legitimate-interest-assessment/" + } + ], + "dataDeclaration": [ + 1, + 2, + 4 + ], + "deviceStorageDisclosureUrl": "https://cdn.refine.direct/tcf2/tcf2.json" + }, + "1160": { + "id": 1160, + "name": "streaMonkey GmbH", + "purposes": [], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.streamonkey.de/de/datenschutz", + "legIntClaim": "https://www.streamonkey.de/de/datenschutz" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://www.streamonkey.de/iab_disclosures.json" + }, + "1161": { + "id": 1161, + "name": "freenet DLS GmbH", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 7884000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://www.freenet-mobilfunk.de/legal/datenschutz/", + "legIntClaim": "https://www.freenet-mobilfunk.de/legal/datenschutz/" + } + ], + "dataDeclaration": [ + 2, + 3, + 6, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.freenet-mobilfunk.de/deviceStorage.json" + }, + "1165": { + "id": 1165, + "name": "Kueez Entertainment Ltd.", + "purposes": [ + 1, + 3, + 4, + 5, + 6 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10, + 11 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.kueez.com/en/privacy", + "legIntClaim": "https://www.kueez.com/en/privacy" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://en.kueez.com/tcf.json" + }, + "1168": { + "id": 1168, + "name": "Voxnest Inc", + "purposes": [ + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": { + "1": 180, + "2": 4320 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.voxnest.com/privacy/", + "legIntClaim": "https://www.voxnest.com/privacy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.voxnest.com/iab-tcf-disclosures.json" + }, + "1170": { + "id": 1170, + "name": "Zeit Agency ApS", + "purposes": [], + "legIntPurposes": [ + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://zeitagency.com/privacy.html", + "legIntClaim": "https://zeitagency.com/privacy.html" + } + ], + "dataDeclaration": [ + 1, + 2 + ], + "deviceStorageDisclosureUrl": "https://zeitagency.com/domains.json" + }, + "1176": { + "id": 1176, + "name": "AlgoriX Technology Pte. Ltd.,", + "purposes": [ + 1, + 3, + 4, + 7 + ], + "legIntPurposes": [ + 2, + 10 + ], + "flexiblePurposes": [ + 2, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2, + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 7, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.algorix.co/privacy-policy/", + "legIntClaim": "https://www.algorix.co/privacy-policy/#section-3-3" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 9, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.algorix.co/gdpr-disclosure.json" + }, + "1178": { + "id": 1178, + "name": "First-id", + "purposes": [ + 1, + 2, + 3, + 4, + 7 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [ + 2 + ], + "cookieMaxAgeSeconds": 34128000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 395, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "fr", + "privacy": "https://www.first-id.fr/fr/politique-de-confidentialite" + }, + { + "langId": "en", + "privacy": "https://www.first-id.fr/politique-de-confidentialite" + } + ], + "dataDeclaration": [ + 1, + 2, + 7, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://static.first-id.fr/tcf/cookie.json" + }, + "1181": { + "id": 1181, + "name": "BotTalk UG (haftungsbeschränkt)", + "purposes": [ + 1, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 2592000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://bottalk.io/privacy", + "legIntClaim": "https://bottalk.io/privacy" + } + ], + "dataDeclaration": [ + 2 + ], + "deviceStorageDisclosureUrl": "https://bottalk.io/gvr.json" + }, + "1184": { + "id": 1184, + "name": "Schwarz Media GmbH ", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": 7776000, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 89, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "de", + "privacy": "https://gruppe.schwarz/datenschutz", + "legIntClaim": "https://gruppe.schwarz/datenschutz" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 8, + 9, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://dmp.theadex.com/.well-known/deviceStorage.json" + }, + "1187": { + "id": 1187, + "name": "AccountInsight Ltd", + "purposes": [], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": {}, + "specialPurposes": { + "1": 180, + "2": 365 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.accountinsight.ai/privacy-policy/", + "legIntClaim": "https://www.accountinsight.ai/privacy-policy/#IP_Processing" + } + ], + "dataDeclaration": [ + 1 + ], + "deviceStorageDisclosureUrl": "https://static.accountinsight.cloud/TCF/Device%20Storage%20Disclosure.json" + }, + "1195": { + "id": 1195, + "name": "Amplified IntelligenceTechnologies", + "purposes": [ + 7, + 9, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 7, + 9, + 10 + ], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 3650, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.amplifiedintelligence.com.au/privacy-policy/", + "legIntClaim": "https://www.amplifiedintelligence.com.au/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 8 + ], + "deviceStorageDisclosureUrl": "https://www.amplifiedintelligence.com.au/tcfv2.json" + }, + "1196": { + "id": 1196, + "name": "MEDIAWAYSS Sp. z o.o.", + "purposes": [ + 1, + 2, + 3, + 4, + 5, + 7, + 8 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 31449600, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 364, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://vidverto.io/privacy-policy/", + "legIntClaim": "https://vidverto.io/privacy-policy/#interest" + } + ], + "dataDeclaration": [ + 2, + 3, + 4, + 6, + 8, + 10, + 11 + ], + "deviceStorageDisclosureUrl": "https://ad.vidverto.io/delivery/iab_tcf_ds.json" + }, + "1199": { + "id": 1199, + "name": "Adsyield Inc", + "purposes": [ + 1, + 2, + 7, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 2 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 2, + "purposes": { + "2": 1, + "8": 1 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adsyield.com/privacy-policy/", + "legIntClaim": "https://adsyield.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 4, + 6 + ], + "deviceStorageDisclosureUrl": "https://adsyield.com/sellers.json" + }, + "1201": { + "id": 1201, + "name": "hyScore.io GmbH", + "purposes": [ + 2, + 7, + 8, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://hyscore.io/data-privacy/" + } + ], + "dataDeclaration": [ + 8, + 9 + ], + "deviceStorageDisclosureUrl": "https://act.hyscore.io/tcf/tcf.json" + }, + "1202": { + "id": 1202, + "name": "Edge226 Ltd", + "purposes": [ + 2, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [ + 2, + 7, + 10 + ], + "specialPurposes": [ + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1 + ], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": { + "2": 90 + }, + "specialPurposes": { + "2": 1 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://edge226.com/privacy-policy/", + "legIntClaim": "https://edge226.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 8 + ], + "deviceStorageDisclosureUrl": "https://snatch.adjns.com/cdn_storage/tcf/tcf.json" + }, + "1204": { + "id": 1204, + "name": "fraud0 GmbH", + "purposes": [], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1 + ], + "features": [], + "specialFeatures": [], + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "purposes": {}, + "specialPurposes": { + "1": 730 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.fraud0.com/privacy-policy/", + "legIntClaim": "https://www.fraud0.com/privacy-policy/" + }, + { + "langId": "de", + "privacy": "https://www.fraud0.com/de/datenschutz/", + "legIntClaim": "https://www.fraud0.com/de/datenschutz/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 6 + ], + "deviceStorageDisclosureUrl": "https://api.fraud0.com/iab.json" + }, + "1207": { + "id": 1207, + "name": "Feeltapmedia Limited", + "purposes": [ + 1 + ], + "legIntPurposes": [ + 2 + ], + "flexiblePurposes": [ + 2 + ], + "specialPurposes": [], + "features": [], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "purposes": { + "2": 90 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://feeltapmedia.com/Privacy-policy/", + "legIntClaim": "https://feeltapmedia.com/Privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3 + ], + "deviceStorageDisclosureUrl": "https://feeltapmedia.com/ftm.json" + }, + "1209": { + "id": 1209, + "name": "Memob Plus FZ LLC", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 9 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 2 + ], + "specialFeatures": [ + 1 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://memob.com/privacy-policy/", + "legIntClaim": "https://memob.com/privacy-policy/" + } + ], + "dataDeclaration": [ + 1, + 2, + 3, + 4, + 6, + 7, + 9, + 10 + ], + "deviceStorageDisclosureUrl": "https://gdpr.memob.com/deviceStorage.json" + }, + "1210": { + "id": 1210, + "name": "ADNOW I RENODO MEDIA LTD", + "purposes": [ + 1, + 2 + ], + "legIntPurposes": [ + 7, + 8, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 8, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [ + 1, + 2 + ], + "overflow": { + "httpGetLimit": 128 + }, + "cookieMaxAgeSeconds": 1209600, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 30, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adnow.com/privacy-policy", + "legIntClaim": "https://adnow.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 8 + ], + "deviceStorageDisclosureUrl": "https://adnow.com/vdsod.json" + }, + "1212": { + "id": 1212, + "name": "Ads Interactive Ltd.", + "purposes": [ + 1, + 2, + 3, + 4, + 7, + 10 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": 4838400, + "usesCookies": true, + "cookieRefresh": false, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 60, + "purposes": {}, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://adsinteractive.com/privacy-policy", + "legIntClaim": "https://adsinteractive.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://adsinteractive.com/vendor.json" + }, + "1214": { + "id": 1214, + "name": "Kamino Retail", + "purposes": [ + 1, + 3, + 4 + ], + "legIntPurposes": [ + 2, + 7, + 9, + 10 + ], + "flexiblePurposes": [ + 2, + 7, + 9, + 10 + ], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1 + ], + "specialFeatures": [], + "cookieMaxAgeSeconds": 365, + "usesCookies": true, + "cookieRefresh": true, + "usesNonCookieAccess": false, + "dataRetention": { + "stdRetention": 365, + "purposes": {}, + "specialPurposes": { + "2": 0 + } + }, + "urls": [ + { + "langId": "en", + "privacy": "https://www.kaminoretail.com/privacy-policy", + "legIntClaim": "https://www.kaminoretail.com/privacy-policy" + } + ], + "dataDeclaration": [ + 1, + 2, + 5, + 6, + 8, + 11 + ], + "deviceStorageDisclosureUrl": "https://privacy.kaminoretail.io/privacy/kaminoretaildevicesstoragedisclosures.json" + }, + "1218": { + "id": 1218, + "name": "AIDEM Technologies LTD", + "purposes": [ + 1, + 2, + 7, + 10, + 11 + ], + "legIntPurposes": [], + "flexiblePurposes": [], + "specialPurposes": [ + 1, + 2 + ], + "features": [ + 1, + 2, + 3 + ], + "specialFeatures": [], + "overflow": { + "httpGetLimit": 32 + }, + "cookieMaxAgeSeconds": null, + "usesCookies": false, + "cookieRefresh": false, + "usesNonCookieAccess": true, + "dataRetention": { + "stdRetention": 90, + "purposes": { + "7": 30, + "11": 0 + }, + "specialPurposes": {} + }, + "urls": [ + { + "langId": "en", + "privacy": "https://kb.aidem.com/privacy/policies/privacy-policy/", + "legIntClaim": "https://kb.aidem.com/privacy/policies/privacy-policy/#4-how-we-use-your-data" + } + ], + "dataDeclaration": [ + 1, + 2, + 6, + 11 + ], + "deviceStorageDisclosureUrl": "https://www.aidem.com/tcf.json" + } + } +} \ No newline at end of file diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index 35fda85..a1ac55d 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 3.0.11-SNAPSHOT + 3.1.1-SNAPSHOT iabgpp-extras @@ -18,13 +18,6 @@ maven-surefire-plugin 2.22.2 - - - org.junit.platform - junit-platform-surefire-provider - 1.3.2 - - diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/Cmp.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/Cmp.java index 3aacf32..ed0e661 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/Cmp.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/Cmp.java @@ -25,38 +25,39 @@ public interface Cmp { - /** - * A CMP id: a numeric ID which is incrementally assigned and never re-used – inactive CMPs are marked as deleted - * - * @return CMP id - */ - int getId(); - - /** - * Name of the CMP - * - * @return CMP name - */ - String getName(); - - /** - * Whether or not the CMP is a commercial service - * - * @return true, if the CMP is available as a commercial service - */ - boolean isCommercial(); - - /** - * If available, the date/time after which CMP is considered inactive - * - * @return {@link Optional} time after which CMP is inactive - */ - Optional getDeletedDate(); - - /** - * Check whether the CMP is deleted - * - * @return true, if the CMP is considered deleted - */ - boolean isDeleted(); + /** + * A CMP id: a numeric ID which is incrementally assigned and never re-used – inactive CMPs are + * marked as deleted + * + * @return CMP id + */ + int getId(); + + /** + * Name of the CMP + * + * @return CMP name + */ + String getName(); + + /** + * Whether or not the CMP is a commercial service + * + * @return true, if the CMP is available as a commercial service + */ + boolean isCommercial(); + + /** + * If available, the date/time after which CMP is considered inactive + * + * @return {@link Optional} time after which CMP is inactive + */ + Optional getDeletedDate(); + + /** + * Check whether the CMP is deleted + * + * @return true, if the CMP is considered deleted + */ + boolean isDeleted(); } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java index 5b62d38..5f3c3d4 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java @@ -25,26 +25,26 @@ public interface CmpList { - /** - * Last Updated Date - * - * @return {@link Instant} time when the record was last updated - */ - Instant getLastUpdated(); + /** + * Last Updated Date + * + * @return {@link Instant} time when the record was last updated + */ + Instant getLastUpdated(); - /** - * List of CMPs - * - * @return {@link List} of {@link Cmp} objects - */ - List getCmps(); + /** + * List of CMPs + * + * @return {@link List} of {@link Cmp} objects + */ + List getCmps(); - /** - * Get the CMP object for a give CMP id - * - * @param cmpId CMP id - * @return {@link Cmp} object - */ - Cmp getCmp(int cmpId); + /** + * Get the CMP object for a give CMP id + * + * @param cmpId CMP id + * @return {@link Cmp} object + */ + Cmp getCmp(int cmpId); } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java new file mode 100644 index 0000000..e7e62cc --- /dev/null +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java @@ -0,0 +1,29 @@ +package com.iab.gpp.extras.gvl; + +/* + * DataCategory + */ +public interface DataCategory { + + /** + * id + * + * @return id + */ + Integer getId(); + + /** + * name + * + * @return name + */ + String getName(); + + /** + * description + * + * @return description + */ + String getDescription(); + +} diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java new file mode 100644 index 0000000..12615df --- /dev/null +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java @@ -0,0 +1,53 @@ +package com.iab.gpp.extras.gvl; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/*- + * #%L + * IAB TCF Java GVL and CMP List + * %% + * Copyright (C) 2020 IAB Technology Laboratory, Inc + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ + +/* + * DataRetention + */ +public interface DataRetention { + + /** + * stdRetention + * + * @return stdRetention + */ + Optional getStdRetention(); + + /** + * purposes + * + * @return purposes + */ + Map getPurposes(); + + /** + * specialPurposes + * + * @return specialPurposes + */ + Map getSpecialPurposes(); + +} diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Feature.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Feature.java index e6f330f..946fa85 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Feature.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Feature.java @@ -1,5 +1,8 @@ package com.iab.gpp.extras.gvl; +import java.util.List; +import java.util.Optional; + /*- * #%L * IAB TCF Java GVL and CMP List @@ -25,31 +28,38 @@ */ public interface Feature { - /** - * A feature id - * - * @return feature id - */ - int getId(); - - /** - * Name of the feature - * - * @return feature name string - */ - String getName(); - - /** - * Description of the feature - * - * @return feature description string - */ - String getDescription(); - - /** - * Legal description of the feature - * - * @return legal description string - */ - String getDescriptionLegal(); + /** + * A feature id + * + * @return feature id + */ + int getId(); + + /** + * Name of the feature + * + * @return feature name string + */ + String getName(); + + /** + * Description of the feature + * + * @return feature description string + */ + String getDescription(); + + /** + * Legal description of the feature + * + * @return legal description string + */ + Optional getDescriptionLegal(); + + /** + * A list of illustrations + * + * @return A {@link List} of strings + */ + Optional> getIllustrations(); } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java index 29d29df..a1a6e54 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java @@ -22,84 +22,93 @@ import java.time.Instant; import java.util.List; +import java.util.Optional; public interface Gvl { - /** - * A Global Vendor List Specification Version - * - * @return global vendor list specification version - */ - int getGvlSpecificationVersion(); + /** + * A Global Vendor List Specification Version + * + * @return global vendor list specification version + */ + int getGvlSpecificationVersion(); - /** - * A Global Vendor List version incremented with each published file change - * - * @return global vendor list version - */ - int getVendorListVersion(); + /** + * A Global Vendor List version incremented with each published file change + * + * @return global vendor list version + */ + int getVendorListVersion(); - /** - * A TCF Policy Version. - * - * @return tcf policy version - */ - int getTcfPolicyVersion(); + /** + * A TCF Policy Version. + * + * @return tcf policy version + */ + int getTcfPolicyVersion(); - /** - * Last Updated Date - * - * @return timestamp when the record was last updated - */ - Instant getLastUpdated(); + /** + * Last Updated Date + * + * @return timestamp when the record was last updated + */ + Instant getLastUpdated(); - /** - * A list of standard purposes - * - * @return A {@link List} of standard {@link Purpose} objects - */ - List getPurposes(); + /** + * A list of standard purposes + * + * @return A {@link List} of standard {@link Purpose} objects + */ + List getPurposes(); - /** - * A list of special purposes - * - * @return A {@link List} of {@link SpecialPurpose} objects - */ - List getSpecialPurposes(); + /** + * A list of special purposes + * + * @return A {@link List} of {@link SpecialPurpose} objects + */ + List getSpecialPurposes(); - /** - * A list of standard features - * - * @return A {@link List} of standard {@link Feature} objects - */ - List getFeatures(); + /** + * A list of standard features + * + * @return A {@link List} of standard {@link Feature} objects + */ + List getFeatures(); - /** - * A list of special features - * - * @return A {@link List} of special {@link SpecialFeature} objects - */ - List getSpecialFeatures(); + /** + * A list of special features + * + * @return A {@link List} of special {@link SpecialFeature} objects + */ + List getSpecialFeatures(); - /** - * A list of stacks - * - * @return A {@link List} of {@link Stack} objects - */ - List getStacks(); + /** + * A list of stacks + * + * @return A {@link List} of {@link Stack} objects + */ + List getStacks(); - /** - * A list of vendors - * - * @return A {@link List} of {@link Vendor} objects - */ - List getVendors(); + /** + * A list of vendors + * + * @return A {@link List} of {@link Vendor} objects + */ + List getVendors(); - /** - * Return the vendor object for a given id - * - * @param vendorId vendor id - * @return A {@link Vendor} object - */ - Vendor getVendor(int vendorId); + /** + * Return the vendor object for a given id + * + * @param vendorId vendor id + * @return A {@link Vendor} object + */ + Vendor getVendor(int vendorId); + + /** + * A list of data categories + * @since 3.0 + * + * @return A {@link List} of {@link DataCategory} objects + */ + Optional> getDataCategories(); } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java index 74c1a0b..12a74b0 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java @@ -23,10 +23,10 @@ public interface Overflow { - /** - * The vendor's http GET request length limit; 32 or 128 are the only supported options - * - * @return vendor's http GET request length limit - */ - int getHttpGetLimit(); + /** + * The vendor's http GET request length limit; 32 or 128 are the only supported options + * + * @return vendor's http GET request length limit + */ + int getHttpGetLimit(); } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java index 1b7fba6..ec5b214 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java @@ -1,5 +1,8 @@ package com.iab.gpp.extras.gvl; +import java.util.List; +import java.util.Optional; + /*- * #%L * IAB TCF Java GVL and CMP List @@ -25,47 +28,54 @@ */ public interface Purpose { - /** - * A purpose id - * - * @return purpose id - */ - int getId(); + /** + * A purpose id + * + * @return purpose id + */ + int getId(); + + /** + * Name of the purpose + * + * @return purpose name string + */ + String getName(); - /** - * Name of the purpose - * - * @return purpose name string - */ - String getName(); + /** + * Description of the purpose + * + * @return purpose description string + */ + String getDescription(); - /** - * Description of the purpose - * - * @return purpose description string - */ - String getDescription(); + /** + * Legal description of the purpose + * @deprecated since 3.0 + * @return legal description string + */ + Optional getDescriptionLegal(); - /** - * Legal description of the purpose - * - * @return legal description string - */ - String getDescriptionLegal(); + /** + * A list of illustrations + * @since 3.0 + * @return A {@link List} of strings + */ + Optional> getIllustrations(); - /** - * An optional flag where false means CMPs should never afford users the means to provide an - * opt-in consent choice - * - * @return consentable boolean - */ - boolean getConsentable(); + /** + * An optional flag where false means CMPs should never afford users the means to provide an opt-in + * consent choice + * + * @return consentable boolean + */ + boolean getConsentable(); - /** - * An optional flag where false means CMPs should never afford users the means to exercise a - * right to object - * - * @return consentable boolean - */ - boolean getRightToObject(); + /** + * An optional flag where false means CMPs should never afford users the means to exercise a right + * to object + * + * @return consentable boolean + */ + boolean getRightToObject(); } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Stack.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Stack.java index e8c56df..86c5442 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Stack.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Stack.java @@ -28,38 +28,38 @@ */ public interface Stack { - /** - * Stack id - * - * @return stack id - */ - int getId(); + /** + * Stack id + * + * @return stack id + */ + int getId(); - /** - * A list of special features - * - * @return A {@link List} of special feature ids - */ - List getSpecialFeatures(); + /** + * A list of special features + * + * @return A {@link List} of special feature ids + */ + List getSpecialFeatures(); - /** - * A list of purposes - * - * @return A {@link List} of purpose ids - */ - List getPurposes(); + /** + * A list of purposes + * + * @return A {@link List} of purpose ids + */ + List getPurposes(); - /** - * Name of the stack - * - * @return stack name string - */ - String getName(); + /** + * Name of the stack + * + * @return stack name string + */ + String getName(); - /** - * Description of the stack - * - * @return stack description string - */ - String getDescription(); + /** + * Description of the stack + * + * @return stack description string + */ + String getDescription(); } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java index 8889d3c..dc2833f 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java @@ -26,136 +26,163 @@ public interface Vendor { - /** - * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors - * are just marked as deleted - * - * @return vendor id - */ - int getId(); - - /** - * Name of the vendor - * - * @return vendor name - */ - String getName(); - - /** - * List of Purposes for which the vendor is requesting consent - * - * @return A {@link List} of purpose ids that require consent - */ - List getPurposes(); - - /** - * List of Purposes for which the vendor requires to be transparently disclosed as their - * legitimate interest - * - * @return A {@link List} of purpose ids disclosed as legitimate interests - */ - List getLegIntPurposes(); - - /** - * List of purposes where the vendor is flexible regarding the legal basis; they will perform - * the processing based on consent or a legitimate interest. The 'default' is determined by - * which of the other two mutually-exclusive purpose fields is used to declare the purpose for - * the vendor - * - * @return A {@link List} of flexible purpose ids - */ - List getFlexiblePurposes(); - - /** - * List of Special Purposes that the vendor transparently discloses as their legitimate interest - * that a user has no right to object - * - * @return A {@link List} of special purpose ids - */ - List getSpecialPurposes(); - - /** - * List of Features the vendor uses across Purposes - * - * @return A {@link List} of features - */ - List getFeatures(); - - /** - * List of Special Features the vendor uses across Purposes - * - * @return A {@link List} of special features - */ - List getSpecialFeatures(); - - /** - * GDPR/privacy policy page URL - * - * @return policy url string - */ - String getPolicyUrl(); - - /** - * If available, a date/time after which the vendor is deleted from the GVL - * - * @return {@link Optional} time after which the vendor is considered deleted - */ - Optional getDeletedDate(); - - /** - * object specifying the vendor's http GET request length limit. It is optional. If a vendor - * entry does not include this attribute then the vendor has no overflow options and none can be - * inferred. - * - * @return A {@link Overflow} object - */ - Optional getOverflow(); - - /** - * Check if the vendor is deleted based on the current time (UTC) - * - * @return true, if the vendor is deleted - */ - boolean isDeleted(); - - /** - * The number of seconds representing the longest potential duration for cookie storage on a device. - * If a Vendor uses multiple cookies with differing durations, cookieMaxAgeSeconds represents the cookie with - * the longest duration. Note: cookies are the only method of storage or device access that permit a predictable - * duration to be set. - * This is required only if usesCookies is set to true, else optional - * @return The number, in seconds, of the longest potential duration for storage on a device, as set when using - * the cookie method of storage. A negative number or a 0 indicate session storage similar to the Set-Cookie spec. - * A "-100" value no longer indicates no cookie usage. - * Note: this only includes what is declared when the storage is set and does not consider duration extensions - * should storage be refreshed - */ - Optional getCookieMaxAgeSeconds(); - - /** - * This boolean field indicates whether the vendor uses cookie storage (session or otherwise). - * @return True indicates cookie storage is used - */ - boolean getUsesCookies(); - - /** - * This true or false field indicates whether any cookies in scope for cookieMaxAgeSeconds are refreshed after - * being initially set. - * @return True indicates the vendor refreshes this cookie - */ - boolean getHasCookieRefresh(); - - /** - * This boolean field indicates whether the vendor uses other, non-cookie methods of storage or accessing - * information already stored on a user’s device. Examples of non-cookie storage and access may be localStorage, - * indexDB, mobile ad IDs, etc. - * @return True indicates non-cookie access is used - */ - boolean getUsesNonCookieAccess(); - - /** - * Link to a recommended, vendor-hosted, secure URL for disclosing additional storage information - * @return Location of vendor-hosted deviceStorage.json file - */ - Optional getDeviceStorageDisclosureUrl(); + /** + * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors are + * just marked as deleted + * + * @return vendor id + */ + int getId(); + + /** + * Name of the vendor + * + * @return vendor name + */ + String getName(); + + /** + * List of Purposes for which the vendor is requesting consent + * + * @return A {@link List} of purpose ids that require consent + */ + List getPurposes(); + + /** + * List of Purposes for which the vendor requires to be transparently disclosed as their legitimate + * interest + * + * @return A {@link List} of purpose ids disclosed as legitimate interests + */ + List getLegIntPurposes(); + + /** + * List of purposes where the vendor is flexible regarding the legal basis; they will perform the + * processing based on consent or a legitimate interest. The 'default' is determined by which of the + * other two mutually-exclusive purpose fields is used to declare the purpose for the vendor + * + * @return A {@link List} of flexible purpose ids + */ + List getFlexiblePurposes(); + + /** + * List of Special Purposes that the vendor transparently discloses as their legitimate interest + * that a user has no right to object + * + * @return A {@link List} of special purpose ids + */ + List getSpecialPurposes(); + + /** + * List of Features the vendor uses across Purposes + * + * @return A {@link List} of features + */ + List getFeatures(); + + /** + * List of Special Features the vendor uses across Purposes + * + * @return A {@link List} of special features + */ + List getSpecialFeatures(); + + /** + * GDPR/privacy policy page URL + * @deprecated since 3.0 + * @return policy url string + */ + Optional getPolicyUrl(); + + /** + * If available, a date/time after which the vendor is deleted from the GVL + * + * @return {@link Optional} time after which the vendor is considered deleted + */ + Optional getDeletedDate(); + + /** + * object specifying the vendor's http GET request length limit. It is optional. If a vendor entry + * does not include this attribute then the vendor has no overflow options and none can be inferred. + * + * @return A {@link Overflow} object + */ + Optional getOverflow(); + + /** + * Check if the vendor is deleted based on the current time (UTC) + * + * @return true, if the vendor is deleted + */ + boolean isDeleted(); + + /** + * The number of seconds representing the longest potential duration for cookie storage on a device. + * If a Vendor uses multiple cookies with differing durations, cookieMaxAgeSeconds represents the + * cookie with the longest duration. Note: cookies are the only method of storage or device access + * that permit a predictable duration to be set. This is required only if usesCookies is set to + * true, else optional + * + * @return The number, in seconds, of the longest potential duration for storage on a device, as set + * when using the cookie method of storage. A negative number or a 0 indicate session + * storage similar to the Set-Cookie spec. A "-100" value no longer indicates no cookie + * usage. Note: this only includes what is declared when the storage is set and does not + * consider duration extensions should storage be refreshed + */ + Optional getCookieMaxAgeSeconds(); + + /** + * This boolean field indicates whether the vendor uses cookie storage (session or otherwise). + * + * @return True indicates cookie storage is used + */ + Optional getUsesCookies(); + + /** + * This true or false field indicates whether any cookies in scope for cookieMaxAgeSeconds are + * refreshed after being initially set. + * + * @return True indicates the vendor refreshes this cookie + */ + Optional getCookieRefresh(); + + /** + * This boolean field indicates whether the vendor uses other, non-cookie methods of storage or + * accessing information already stored on a user’s device. Examples of non-cookie storage and + * access may be localStorage, indexDB, mobile ad IDs, etc. + * + * @return True indicates non-cookie access is used + */ + Optional getUsesNonCookieAccess(); + + /** + * Link to a recommended, vendor-hosted, secure URL for disclosing additional storage information + * + * @return Location of vendor-hosted deviceStorage.json file + */ + Optional getDeviceStorageDisclosureUrl(); + + /** + * This object indicates how long vendors retain user's data for each declared purpose + * @since 3.0 + * + * @return {@link DataRetention} object + */ + Optional getDataRetention(); + + /** + * This list indicates unique urls to privacy policies by language and link to an + * explanation of their legitimate interests at stake + * @since 3.0 + * @return A {@link List} of {@link VendorUrl} objects + */ + Optional> getUrls(); + + /** + * This list of integers indicates data categories {@link DataCategory} that vendors collect and process + * @since 3.0 + * + * @return A {@link List} of integers + */ + Optional> getDataDeclaration(); } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java new file mode 100644 index 0000000..7a495de --- /dev/null +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java @@ -0,0 +1,51 @@ +package com.iab.gpp.extras.gvl; + +import java.util.Optional; + +/*- + * #%L + * IAB TCF Java GVL and CMP List + * %% + * Copyright (C) 2020 IAB Technology Laboratory, Inc + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ + +/* + * VendorUrl + */ +public interface VendorUrl { + + /** + * langId + * + * @return lang id + */ + String getLangId(); + + /** + * privacy + * + * @return privacy + */ + String getPrivacy(); + + /** + * legIntClaim + * + * @return legIntClaim + */ + Optional getLegIntClaim(); + +} diff --git a/pom.xml b/pom.xml index bad74e4..f0fce41 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iabgpp iabgpp-core - 3.0.11-SNAPSHOT + 3.1.1-SNAPSHOT IAB GPP Core Library https://github.com/IABTechLabs/iabtcf-java Encode and decode consent information with the IAB GPP v3.0.