{"title":"Sports equipment","description":"\u003cp\u003e \u003c\/p\u003e\n\u003c!----\u003e","products":[{"product_id":"union-heimtrikot-1-manner-23-24","title":"Union Home Jersey 1. Men 23\/24","description":"\u003cp\u003e Color: red \/ white\u003c\/p\u003e\n\n\u003cp\u003e \u003cstrong\u003eUnion home jersey season 23\/24\u003c\/strong\u003e\u003c\/p\u003e\n\n \u003cp\u003eThis season, the Irons are wearing red jerseys with stylized wave-breaker silhouettes subtly embossed into the fabric. The jerseys pay homage to the stadium's renovation 15 years ago, along with 2,333 Union fans. The iconic wave-breakers dominate the view of the standing areas of our An der alten Försterei stadium. The neck area is adorned with the club's signature \"UNVEU\" inscription and the club name, while the chest features our club logo. The soft material and moisture-absorbing AEROREADY technology guarantee maximum comfort.\u003c\/p\u003e\n\n\u003cp\u003e \u003cstrong\u003ePrime Green - made with various functional recycled materials.\u003c\/strong\u003e\u003c\/p\u003e\n\n \u003cp\u003eWith the Primegreen label, introduced in 2020, adidas identifies products made with recycled materials. They avoid waste and conserve natural resources while offering full functionality and durability for athletic use. Adidas has set a goal to completely replace virgin polyester with recycled polyester in all its products by 2024, wherever technically feasible.\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"S","offer_id":48472185209173,"sku":"UB332300S","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48472185241941,"sku":"UB332300M","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":48472185307477,"sku":"UB332300L","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":48472185373013,"sku":"UB332300XL","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"XXL","offer_id":48472185569621,"sku":"UB332300XXL","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48472185602389,"sku":"UB3323003XL","price":30.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/4066764337321_home_Ansicht_1.png?v=1705072900"},{"product_id":"adidas-kinder-wollmutze","title":"adidas children's wool hat","description":"\u003cp\u003eColor: Black\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"Default Title","offer_id":48473340084565,"sku":"UB332384","price":20.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332384_01_C987AB3B-F654-4C78-921A-79148A3283CB.png?v=1716407198"},{"product_id":"adidas-sportbeutel-23-24","title":"adidas gym sack","description":"\u003cp\u003eColor: Black\u003c\/p\u003e\n\u003cp\u003e Dimensions: 37 x 47 cm, 14l volume\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"Default Title","offer_id":48472470225237,"sku":"UB332386","price":15.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332386_01_316D356A-05E7-4503-B9B9-502A9EE4737C.png?v=1774355459"},{"product_id":"adidas-wendefischerhut","title":"adidas reversible bucket hat","description":"\u003cp\u003eColor: red, white, yellow \u003cbr\u003eChildren's size: 55 cm circumference \u003cbr\u003eAdult size: circumference: 59 cm\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"55cm","offer_id":48473537118549,"sku":"UB33239001","price":10.0,"currency_code":"EUR","in_stock":true},{"title":"59cm","offer_id":48473537151317,"sku":"UB33239002","price":10.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332390_01_F276F6A1-7C54-4ED9-B969-DF4274B57C89.png?v=1716407253"},{"product_id":"adidas-waschtasche","title":"adidas - wash bag","description":"\u003cp\u003eColor: red, white, yellow \u003cbr\u003eFormat: 14cm x 21cm x 13cm \u003cbr\u003eCapacity: approx. 3.8l\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"Default Title","offer_id":48473323176277,"sku":"UB332391","price":25.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332391_01_C56B1829-C4F0-45F6-A114-BB54B673F034.png?v=1716407262"},{"product_id":"adidas-sweater-schwarz","title":"adidas sweater - black","description":"\u003cp\u003eColor: black\/white\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"S","offer_id":48473490194773,"sku":"UB332392S","price":45.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48473490227541,"sku":"UB332392M","price":45.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":48473490260309,"sku":"UB332392L","price":45.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473490293077,"sku":"UB332392XL","price":45.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473490358613,"sku":"UB332392XXL","price":45.0,"currency_code":"EUR","in_stock":false},{"title":"3XL","offer_id":48473490391381,"sku":"UB3323923XL","price":45.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/Image_fill_UB332392_01_E5517816-5EA1-44F6-99B2-6EC3931CE9DF.jpg?v=1751979051"},{"product_id":"adidas-sweater-grau","title":"adidas sweater - grey","description":"\u003cp\u003eColour: mottled grey\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"S","offer_id":48473229492565,"sku":"UB332395S","price":35.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48473229525333,"sku":"UB332395M","price":35.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":48473229590869,"sku":"UB332395L","price":35.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":48473229623637,"sku":"UB332395XL","price":35.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473229656405,"sku":"UB332395XXL","price":35.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48473229689173,"sku":"UB3323953XL","price":35.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/Image_fill_UB332395_01_AA09C92E-C16D-41B4-8C80-E3E9503B38DD.jpg?v=1751978991"},{"product_id":"union-heimhose-24-25","title":"Union home pants - 24\/25","description":"\u003cp\u003eColor: red \/ white\u003c\/p\u003e\n\u003c!----\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473045664085,"sku":"UB332403XS","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":48473045696853,"sku":"UB332403S","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473045729621,"sku":"UB332403M","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473045762389,"sku":"UB332403L","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473045827925,"sku":"UB332403XL","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473045860693,"sku":"UB332403XXL","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48473045893461,"sku":"UB3324033XL","price":20.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332403_HMS_00.webp?v=1722848042"},{"product_id":"union-kinder-heimhose-24-25","title":"Union Kids Home Pants - 24\/25","description":"\u003cp\u003eColor: red \/ white\u003c\/p\u003e\n\u003c!----\u003e","brand":"adidas AG","offers":[{"title":"128","offer_id":48472692818261,"sku":"UB332404128","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"140","offer_id":48472692851029,"sku":"UB332404140","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48472692916565,"sku":"UB332404152","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"164","offer_id":48472692949333,"sku":"UB332404164","price":15.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332403_HMS_00.webp?v=1722848042"},{"product_id":"union-kinder-heimtrikot-1-frauen-24-25","title":"Union Kids Home Jersey Women - 24\/25","description":"Color: red \/ white","brand":"adidas AG","offers":[{"title":"128","offer_id":48472122130773,"sku":"UB332407128","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"140","offer_id":48472122163541,"sku":"UB332407140","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48472122196309,"sku":"UB332407152","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"164","offer_id":48472122261845,"sku":"UB332407164","price":30.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332494_HMS_00.webp?v=1722868776"},{"product_id":"union-kinder-auswartshose-24-25","title":"Union Kids Away Pants - 24\/25","description":"\u003cp\u003eColor: black\u003c\/p\u003e\n\u003c!----\u003e","brand":"adidas AG","offers":[{"title":"128","offer_id":48472170365269,"sku":"UB332413128","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"140","offer_id":48472170398037,"sku":"UB332413140","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48472170463573,"sku":"UB332413152","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"164","offer_id":48472170496341,"sku":"UB332413164","price":15.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332412_HMS_00_4f281f37-1c8b-45df-b1db-b604ef9cfa32.webp?v=1722846932"},{"product_id":"union-ausweichtrikot-24-25","title":"Union Berlin Men's Third Jersey 24\/25","description":"\u003cp\u003eColor: yellow\/white\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\"\u003eIn the \u003c\/span\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\"\u003eC\u003c\/span\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\"\u003eolours of our \u003c\/span\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\"\u003eC\u003c\/span\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\"\u003eity: Union \u003c\/span\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\"\u003eP\u003c\/span\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\"\u003eresent the \u003c\/span\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\" mce-data-marked=\"1\"\u003eThird\u0026nbsp;\u003c\/span\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\"\u003eJ\u003c\/span\u003e\u003cspan class=\"NormalTextRun SCXW153281085 BCX8\" data-mce-fragment=\"1\"\u003eersey\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan data-contrast=\"auto\"\u003eThe yellow and white striped third jersey is the starting signal for a jersey series that puts Union's home city centre stage. Until the space on the chest of Union’s football gods is given to a new main sponsor, the jerseys will be adorned with the red lettering \"BERLIN\".\u0026nbsp;\u0026nbsp;\u003c\/span\u003e\u003cspan data-contrast=\"auto\"\u003eUnion's kit supplier, adidas, will combine the new kit with yellow shorts and yellow socks, complemented by red details.\u0026nbsp;\u0026nbsp;\u003c\/span\u003e\u003cspan data-ccp-props=\"{\u0026quot;201341983\u0026quot;:0,\u0026quot;335559739\u0026quot;:160,\u0026quot;335559740\u0026quot;:259}\"\u003e\u0026nbsp;\u003c\/span\u003e\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473318719829,"sku":"UB332420XS","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":48473318752597,"sku":"UB332420S","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48473318785365,"sku":"UB332420M","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":48473318818133,"sku":"UB332420L","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":48473318916437,"sku":"UB332420XL","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XXL","offer_id":48473318949205,"sku":"UB332420XXL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48473318981973,"sku":"UB3324203XL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/Image_fill_Image_fill_FW24_FB_FCU_THIRD_SOCIAL_SCHAEFER-3_1x1_d7a2be24-a664-4893-8aa8-25d3947588b0.webp?v=1751968697"},{"product_id":"union-ausweichhose-24-25","title":"Union alternate pants - 24\/25","description":"Color: yellow","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473115230549,"sku":"UB332422XS","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":48473115263317,"sku":"UB332422S","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473115296085,"sku":"UB332422M","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473115328853,"sku":"UB332422L","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473115394389,"sku":"UB332422XL","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473115427157,"sku":"UB332422XXL","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48473115459925,"sku":"UB3324223XL","price":20.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332422_HMS_00.webp?v=1719910736"},{"product_id":"union-kinder-ausweichhose-24-25","title":"Union Children's Alternative Pants - 24\/25","description":"Color: yellow","brand":"adidas AG","offers":[{"title":"128","offer_id":48473338216789,"sku":"UB332423128","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"140","offer_id":48473338249557,"sku":"UB332423140","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48473338282325,"sku":"UB332423152","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"164","offer_id":48473338315093,"sku":"UB332423164","price":15.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332422_HMS_00_836463a7-f1a0-4697-8cdb-e16fe235868c.webp?v=1719920385"},{"product_id":"union-ausweichstutzen-24-25","title":"Union alternative socks - 24\/25","description":"Color: yellow\/red","brand":"adidas AG","offers":[{"title":"28-30","offer_id":48473430196565,"sku":"UB33242428-30","price":5.0,"currency_code":"EUR","in_stock":true},{"title":"25-27","offer_id":48473430229333,"sku":"UB33242425-27","price":5.0,"currency_code":"EUR","in_stock":true},{"title":"31-33","offer_id":48473430262101,"sku":"UB33242431-33","price":5.0,"currency_code":"EUR","in_stock":true},{"title":"34-36","offer_id":48473430294869,"sku":"UB33242434-36","price":5.0,"currency_code":"EUR","in_stock":true},{"title":"37-39","offer_id":48473430360405,"sku":"UB33242437-39","price":5.0,"currency_code":"EUR","in_stock":true},{"title":"40-42","offer_id":48473430393173,"sku":"UB33242440-42","price":5.0,"currency_code":"EUR","in_stock":true},{"title":"43-45","offer_id":48473430425941,"sku":"UB33242443-45","price":5.0,"currency_code":"EUR","in_stock":true},{"title":"46-48","offer_id":48473430458709,"sku":"UB33242446-48","price":5.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332424_HMS_00.webp?v=1719911684"},{"product_id":"adidas-trainingsshirt-rot-team-24-25","title":"adidas training shirt - red team 24\/25","description":"\u003cp\u003eRed color\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473062998357,"sku":"UB332445XS","price":15.0,"currency_code":"EUR","in_stock":false},{"title":"S","offer_id":48473063096661,"sku":"UB332445S","price":15.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48473063162197,"sku":"UB332445M","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473063227733,"sku":"UB332445L","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473063260501,"sku":"UB332445XL","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473063293269,"sku":"UB332445XXL","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48473063326037,"sku":"UB3324453XL","price":15.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/FCU05196_1dfcd80d-5869-4abf-8ccf-7ef0a0b850e9.jpg?v=1726834643"},{"product_id":"adidas-trainingshirt-weiss-team-24-25","title":"adidas training shirt - white Team 24\/25","description":"\u003cp\u003eColor white\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473584959829,"sku":"UB332454XS","price":15.0,"currency_code":"EUR","in_stock":false},{"title":"S","offer_id":48473584992597,"sku":"UB332454S","price":15.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48473585025365,"sku":"UB332454M","price":15.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":48473585058133,"sku":"UB332454L","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473585090901,"sku":"UB332454XL","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473586073941,"sku":"UB332454XXL","price":15.0,"currency_code":"EUR","in_stock":false},{"title":"3XL","offer_id":48473587876181,"sku":"UB3324543XL","price":15.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/shirt_front.webp?v=1719218911"},{"product_id":"adidas-trainingshose-kurz-schwarz-team-24-25","title":"adidas training pants shorts - black Team 24\/25","description":"\u003cp\u003eColor: Black\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"S","offer_id":48473419219285,"sku":"UB332458S","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473419252053,"sku":"UB332458M","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473419284821,"sku":"UB332458L","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473419317589,"sku":"UB332458XL","price":20.0,"currency_code":"EUR","in_stock":false},{"title":"XXL","offer_id":48473419383125,"sku":"UB332458XXL","price":20.0,"currency_code":"EUR","in_stock":false},{"title":"3XL","offer_id":48473419415893,"sku":"UB3324583XL","price":20.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/FCU03803_57e8c8b9-a2d8-4046-b72c-d70c00de9099.jpg?v=1726834802"},{"product_id":"adidas-anthem-jacket-team-24-25","title":"adidas Anthem Jacket - Team 24\/25","description":"Color: red","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473562677589,"sku":"UB332460XS","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":48473562743125,"sku":"UB332460S","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473562775893,"sku":"UB332460M","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473562808661,"sku":"UB332460L","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473562841429,"sku":"UB332460XL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473562874197,"sku":"UB332460XXL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48473562906965,"sku":"UB3324603XL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/anthem.webp?v=1738673942"},{"product_id":"adidas-kapuzenpullover-grau-24-25","title":"adidas hoodie - grey 24\/25","description":"\u003cp\u003eColor gray\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473491374421,"sku":"UB332461XS","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":48473491407189,"sku":"UB332461S","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473491439957,"sku":"UB332461M","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473491472725,"sku":"UB332461L","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473491505493,"sku":"UB332461XL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473491538261,"sku":"UB332461XXL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48473491571029,"sku":"UB3324613XL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/Hoodie_Herren_2.webp?v=1719217223"},{"product_id":"adidas-jogginghose-grau-24-25","title":"adidas jogging pants - grey 24\/25","description":"\u003cp\u003eColor: gray\u003c\/p\u003e\n\u003c!----\u003e","brand":"adidas AG","offers":[{"title":"S","offer_id":48472953389397,"sku":"UB332462S","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48472953422165,"sku":"UB332462M","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48472953487701,"sku":"UB332462L","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48472953553237,"sku":"UB332462XL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48472953586005,"sku":"UB332462XXL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48472953618773,"sku":"UB3324623XL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332462_OS_00.webp?v=1718960200"},{"product_id":"adidas-shorts-grau-24-25","title":"adidas shorts - grey 24\/25","description":"\u003cp\u003eColor gray\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"S","offer_id":48473450807637,"sku":"UB332464S","price":20.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48473450840405,"sku":"UB332464M","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473450905941,"sku":"UB332464L","price":20.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":48473450971477,"sku":"UB332464XL","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473451004245,"sku":"UB332464XXL","price":20.0,"currency_code":"EUR","in_stock":false},{"title":"3XL","offer_id":48473451200853,"sku":"UB3324643XL","price":20.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332464_OS_00.webp?v=1718969712"},{"product_id":"adidas-frauen-trainingshose-kurz-schwarz-24-25","title":"adidas women's training shorts - black 24\/25","description":"\u003cp\u003eColor: Black\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48472259559765,"sku":"UB332466XS","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":48472259625301,"sku":"UB332466S","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48472259658069,"sku":"UB332466M","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48472259690837,"sku":"UB332466L","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48472259723605,"sku":"UB332466XL","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48472259756373,"sku":"UB332466XXL","price":20.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332466_HMS_00.webp?v=1731319880"},{"product_id":"adidas-frauen-langarmshirt-schwarz-24-25","title":"adidas women's long-sleeved shirt - black 24\/25","description":"\u003cp\u003eColor: Black\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473659605333,"sku":"UB332468XS","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"S","offer_id":48473659638101,"sku":"UB332468S","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473659670869,"sku":"UB332468M","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473659703637,"sku":"UB332468L","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473659736405,"sku":"UB332468XL","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473659769173,"sku":"UB332468XXL","price":30.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/langarmshirt.webp?v=1719216247"},{"product_id":"adidas-frauen-trainingshose-schwarz-24-25","title":"adidas women's training pants - black 24\/25","description":"\u003cp\u003eColor: Black\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473325764949,"sku":"UB332469XS","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":48473325797717,"sku":"UB332469S","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473325830485,"sku":"UB332469M","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473325863253,"sku":"UB332469L","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473325896021,"sku":"UB332469XL","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473325928789,"sku":"UB332469XXL","price":30.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332469_OS_00.webp?v=1718960146"},{"product_id":"adidas-frauen-polo-schwarz-24-25","title":"adidas women's polo - black 24\/25","description":"\u003cp\u003eColor: Black\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48472171970901,"sku":"UB332471XS","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":48472172003669,"sku":"UB332471S","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48472172036437,"sku":"UB332471M","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48472172101973,"sku":"UB332471L","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48472172134741,"sku":"UB332471XL","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48472172200277,"sku":"UB332471XXL","price":25.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332471_OS_00.webp?v=1718959687"},{"product_id":"adidas-frauen-jumpsuit-schwarz-24-25","title":"adidas women's jumpsuit - black 24\/25","description":"Color: black","brand":"adidas AG","offers":[{"title":"XS","offer_id":48472645402965,"sku":"UB332472XS","price":35.0,"currency_code":"EUR","in_stock":false},{"title":"S","offer_id":48472645435733,"sku":"UB332472S","price":35.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48472645468501,"sku":"UB332472M","price":35.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48472645534037,"sku":"UB332472L","price":35.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48472645599573,"sku":"UB332472XL","price":35.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48472645665109,"sku":"UB332472XXL","price":35.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/Jumpsuit.webp?v=1719215844"},{"product_id":"adidas-frauen-parka-schwarz-24-25","title":"adidas women's parka - black 24\/25","description":"\u003cp\u003eColor: Black\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"S","offer_id":48473266258261,"sku":"UB332473S","price":75.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473266291029,"sku":"UB332473M","price":75.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473266323797,"sku":"UB332473L","price":75.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473266356565,"sku":"UB332473XL","price":75.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473266389333,"sku":"UB332473XXL","price":75.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/2AF07942.webp?v=1733918154"},{"product_id":"adidas-frauen-hoodie-grau-24-25","title":"adidas women's hoodie - grey 24\/25","description":"\u003cp\u003eColor gray\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473310560597,"sku":"UB332474XS","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"S","offer_id":48473310593365,"sku":"UB332474S","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473310626133,"sku":"UB332474M","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":48473310658901,"sku":"UB332474L","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473310724437,"sku":"UB332474XL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473310757205,"sku":"UB332474XXL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/Hoodie_Damen.webp?v=1719215207"},{"product_id":"adidas-frauen-jogginghose-grau-24-25","title":"adidas women's jogging pants - grey 24\/25","description":"\u003cp\u003eColor gray\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48473111069013,"sku":"UB332475XS","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":48473111101781,"sku":"UB332475S","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48473111134549,"sku":"UB332475M","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48473111167317,"sku":"UB332475L","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48473111232853,"sku":"UB332475XL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48473111265621,"sku":"UB332475XXL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/Jogger_Damen.webp?v=1719215631"},{"product_id":"adidas-frauen-t-shirt-grau-24-25","title":"adidas women's T-shirt - grey 24\/25","description":"\u003cp\u003eColor: gray\u003c\/p\u003e\n\u003c!----\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48472265523541,"sku":"UB332476XS","price":20.0,"currency_code":"EUR","in_stock":false},{"title":"S","offer_id":48472265556309,"sku":"UB332476S","price":20.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48472265589077,"sku":"UB332476M","price":20.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":48472265654613,"sku":"UB332476L","price":20.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":48472265687381,"sku":"UB332476XL","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48472265720149,"sku":"UB332476XXL","price":20.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332476_OS_00.webp?v=1718959941"},{"product_id":"adidas-frauen-shorts-grau-24-25","title":"adidas women's shorts - grey 24\/25","description":"\u003cp\u003eColor: gray\u003c\/p\u003e\n\u003c!----\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":48472177181013,"sku":"UB332477XS","price":25.0,"currency_code":"EUR","in_stock":false},{"title":"S","offer_id":48472177213781,"sku":"UB332477S","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":48472177246549,"sku":"UB332477M","price":25.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":48472177541461,"sku":"UB332477L","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48472177606997,"sku":"UB332477XL","price":25.0,"currency_code":"EUR","in_stock":false},{"title":"XXL","offer_id":48472177672533,"sku":"UB332477XXL","price":25.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332477_OS_00.webp?v=1718959851"},{"product_id":"adidas-kinder-trainingshose-kurz-24-25","title":"adidas children's training pants - short 24\/25","description":"\u003cp\u003eRed color\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"116","offer_id":48472657690965,"sku":"UB332479116","price":15.0,"currency_code":"EUR","in_stock":false},{"title":"128","offer_id":48472657723733,"sku":"UB332479128","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"140","offer_id":48472657756501,"sku":"UB332479140","price":15.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48472657789269,"sku":"UB332479152","price":15.0,"currency_code":"EUR","in_stock":false},{"title":"164","offer_id":48472657822037,"sku":"UB332479164","price":15.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332479_OS_00.webp?v=1718960770"},{"product_id":"adidas-kinder-langarmshirt-rot-24-25","title":"adidas kids' long-sleeved shirt - red 24\/25","description":"\u003cp\u003e Red color\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"116","offer_id":48472254382421,"sku":"UB332480116","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"128","offer_id":48472254415189,"sku":"UB332480128","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"140","offer_id":48472254447957,"sku":"UB332480140","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48472254480725,"sku":"UB332480152","price":20.0,"currency_code":"EUR","in_stock":true},{"title":"164","offer_id":48472254546261,"sku":"UB332480164","price":20.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332480_OS_00.webp?v=1718960674"},{"product_id":"adidas-kinder-trainingsjacke-rot-24-25","title":"adidas children's training jacket - red 24\/25","description":"\u003cp\u003eRed color\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"116","offer_id":48473161793877,"sku":"UB332481116","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"128","offer_id":48473161859413,"sku":"UB332481128","price":25.0,"currency_code":"EUR","in_stock":false},{"title":"140","offer_id":48473161924949,"sku":"UB332481140","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48473162023253,"sku":"UB332481152","price":25.0,"currency_code":"EUR","in_stock":false},{"title":"164","offer_id":48473162088789,"sku":"UB332481164","price":25.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332481_OS_00.webp?v=1718960863"},{"product_id":"adidas-kinder-allwetterjacke-schwarz-24-25","title":"adidas children's all-weather jacket - black 24\/25","description":"\u003cp\u003eColor: Black\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"116","offer_id":48472534122837,"sku":"UB332484116","price":45.0,"currency_code":"EUR","in_stock":true},{"title":"128","offer_id":48472534155605,"sku":"UB332484128","price":45.0,"currency_code":"EUR","in_stock":true},{"title":"140","offer_id":48472534188373,"sku":"UB332484140","price":45.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48472534221141,"sku":"UB332484152","price":45.0,"currency_code":"EUR","in_stock":true},{"title":"164","offer_id":48472534253909,"sku":"UB332484164","price":45.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332484_OS_00.webp?v=1718960440"},{"product_id":"adidas-kinder-kapuzenpullover-grau-24-25","title":"adidas kids' hoodie - grey 24\/25","description":"\u003cp\u003eColor gray\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"116","offer_id":48473519522133,"sku":"UB332485116","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"128","offer_id":48473519554901,"sku":"UB332485128","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"140","offer_id":48473519587669,"sku":"UB332485140","price":25.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48473519620437,"sku":"UB332485152","price":25.0,"currency_code":"EUR","in_stock":false},{"title":"164","offer_id":48473519653205,"sku":"UB332485164","price":25.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332485_OS_00.webp?v=1718960608"},{"product_id":"adidas-kinder-jogginghose-grau-24-25","title":"adidas kids' jogging pants - grey 24\/25","description":"\u003cp\u003eColor gray\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"116","offer_id":48473372393813,"sku":"UB332486116","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"128","offer_id":48473372426581,"sku":"UB332486128","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"140","offer_id":48473372459349,"sku":"UB332486140","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"152","offer_id":48473372492117,"sku":"UB332486152","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"164","offer_id":48473372524885,"sku":"UB332486164","price":30.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332486_OS_00.webp?v=1718960521"},{"product_id":"adidas-zne-jacke-weiss-team-24-25","title":"adidas ZNE Jacket - white Team 24\/25","description":"\u003cp\u003eColor: white\u003c\/p\u003e\n\u003cp\u003e \u003cstrong\u003ePRIMEKNIT\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e Three layers of PRIMEKNIT and a custom-woven mesh lining provide a wonderfully light, warm, and soft cotton feel and a techy aesthetic.\u003c\/p\u003e\n\u003cp\u003e \u003cstrong\u003eSPORTSWEAR TAPE\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e Inspired by the lines of the squares, tracks and playing fields where we come together with people who share our passion.\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"S","offer_id":48472997232981,"sku":"UB332489S","price":70.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48472997265749,"sku":"UB332489M","price":70.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":48472997298517,"sku":"UB332489L","price":70.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":48472997331285,"sku":"UB332489XL","price":70.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":48472997527893,"sku":"UB332489XXL","price":70.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":48472997560661,"sku":"UB3324893XL","price":70.0,"currency_code":"EUR","in_stock":true},{"title":"4XL","offer_id":48472997593429,"sku":"UB3324894XL","price":70.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/Image_fill_FCU03802-Enhanced-NR-Edit.jpg?v=1755526590"},{"product_id":"adidas-damen-zne-jacke-weiss-team-24-25","title":"adidas Women's ZNE Jacket - White Team 24\/25","description":"\u003cp\u003eColor: white\u003c\/p\u003e\n\u003cp\u003e \u003cstrong\u003ePRIMEKNIT\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e Three layers of PRIMEKNIT and a custom-woven mesh lining provide a wonderfully light, warm, and soft cotton feel and a techy aesthetic.\u003c\/p\u003e\n\u003cp\u003e \u003cstrong\u003eSPORTSWEAR TAPE\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e Inspired by the lines of the squares, tracks and playing fields where we come together with people who share our passion.\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XXS","offer_id":48472993694037,"sku":"UB332490XXS","price":70.0,"currency_code":"EUR","in_stock":true},{"title":"XS","offer_id":48472993726805,"sku":"UB332490XS","price":70.0,"currency_code":"EUR","in_stock":false},{"title":"S","offer_id":48472994054485,"sku":"UB332490S","price":70.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":48472994120021,"sku":"UB332490M","price":70.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":48472994152789,"sku":"UB332490L","price":70.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":48472994185557,"sku":"UB332490XL","price":70.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/FCU03695-Enhanced-NR-Edit.jpg?v=1731493913"},{"product_id":"union-ausweichtrikot-pro-af-24-25","title":"Union Third Jersey pro AF- 24\/25","description":"Color: yellow \/ white","brand":"adidas AG","offers":[{"title":"XS","offer_id":49597940105557,"sku":"UB332437XS","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":49597940007253,"sku":"UB332437S","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":49597939974485,"sku":"UB332437M","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":49597939941717,"sku":"UB332437L","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":49597940040021,"sku":"UB332437XL","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XXL","offer_id":49597940072789,"sku":"UB332437XXL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":49597939908949,"sku":"UB3324373XL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332499_HMS_001.webp?v=1727770047"},{"product_id":"union-ausweichtrikot-pro-af-24-25-kinder","title":"Union Third Jersey proAF Men 24\/25 - Kids","description":"\u003cp\u003e Color: yellow\/white\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"128","offer_id":49597953179989,"sku":"UB332438128","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"140","offer_id":49597953245525,"sku":"UB332438140","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"152","offer_id":49597953278293,"sku":"UB332438152","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"164","offer_id":49597953311061,"sku":"UB332438164","price":30.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332498_HMS_00.webp?v=1727770066"},{"product_id":"union-auswartstrikot-pro-af-24-25-kinder","title":"Union Away Jersey proAF Men 24\/25 - Kids","description":"\u003cp\u003e Color: black \/ gray \/ red\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"128","offer_id":49597983359317,"sku":"UB332436128","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"140","offer_id":49597983392085,"sku":"UB332436140","price":30.0,"currency_code":"EUR","in_stock":false},{"title":"152","offer_id":49597983424853,"sku":"UB332436152","price":30.0,"currency_code":"EUR","in_stock":true},{"title":"164","offer_id":49597983457621,"sku":"UB332436164","price":30.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332411_HMS_00_4e3a0ea3-b645-4c93-a323-393794a93e71.webp?v=1727770109"},{"product_id":"union-heimtrikot-tailliert-pro-af-24-25","title":"Union Home Jersey proAF Men 24\/25 - fitted","description":"\u003cp\u003e Color: red \/ white\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":49598011343189,"sku":"UB332433XS","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":49598011212117,"sku":"UB332433S","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":49598011179349,"sku":"UB332433M","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":49598011146581,"sku":"UB332433L","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":49598011244885,"sku":"UB332433XL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":49598011310421,"sku":"UB332433XXL","price":40.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332401_HMS_00.webp?v=1727775133"},{"product_id":"union-auswartstrikot-pro-af-24-25","title":"Union Away Jersey proAF - 24\/25","description":"Colour: black \/ grey \/ red\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;UB332410\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":49598117052757,"sku":"UB332435XS","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":49598116954453,"sku":"UB332435S","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":49598116921685,"sku":"UB332435M","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":49598116888917,"sku":"UB332435L","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":49598116987221,"sku":"UB332435XL","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XXL","offer_id":49598117019989,"sku":"UB332435XXL","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"3XL","offer_id":49598116856149,"sku":"UB3324353XL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/Image_fill_240924-proAF-FCU01962.webp?v=1751968823"},{"product_id":"union-heimtrikot-maenner-24-25","title":"Union Home Jersey - 24\/25","description":"\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;All\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ($r.terminate === true) {\n    return;\n  }\n\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;All\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ($r.terminate === true) {\n    return;\n  }\n\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;All\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ($r.terminate === true) {\n    return;\n  }\n\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;All\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ($r.terminate === true) {\n    return;\n  }\n\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003eColor: red \/ white\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;All\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ($r.terminate === true) {\n    return;\n  }\n\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\u0026quot;advertiser\u0026quot;:{\u0026quot;config\u0026quot;:{\u0026quot;advertiserId\u0026quot;:\u0026quot;40626\u0026quot;,\u0026quot;campaignId\u0026quot;:\u0026quot;10292\u0026quot;,\u0026quot;pagetype\u0026quot;:\u0026quot;product\u0026quot;,\u0026quot;identifier\u0026quot;:\u0026quot;All\u0026quot;,\u0026quot;category\u0026quot;:\u0026quot;Jerseys \u0026amp; Co.\u0026quot;,\u0026quot;accessConfig\u0026quot;:{\u0026quot;location\u0026quot;:false,\u0026quot;referrer\u0026quot;:false,\u0026quot;sale\u0026quot;:true,\u0026quot;basket\u0026quot;:true,\u0026quot;zxParams\u0026quot;:[\u0026quot;pagetype\u0026quot;,\u0026quot;products\u0026quot;,\u0026quot;category\u0026quot;,\u0026quot;identifier\u0026quot;]}}},\u0026quot;plugin\u0026quot;:{\u0026quot;publisherId\u0026quot;:\u0026quot;\u0026quot;,\u0026quot;advertiserId\u0026quot;:41734,\u0026quot;protocol\u0026quot;:\u0026quot;https:\/\/\u0026quot;,\u0026quot;zxParams\u0026quot;:{},\u0026quot;basket\u0026quot;:[]}};AWIN.pluginName = \u0026quot;ReachGroup\u0026quot;;\u003c\/script\u003e\u003cscript\u003evar AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t\/\/ only one of the two can be set\n\t\tif (sScriptSrc \u0026amp;\u0026amp; sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t\/\/ create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text\/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t\/\/ only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t\/\/ set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t\/\/ attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t\/\/ send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\/\/ for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t\/\/ for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t\/\/ append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(iframe); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t\/\/ AWIN.Tracking.hideElement(image); \/\/ not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '\u0026amp;';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('\u0026amp;');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t\/\/ if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t\/\/ start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t\/\/ map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t *\/\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t\/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t *\/\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t\/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t *\/\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t\/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t *\/\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t\/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t *\/\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t\/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t *\/\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t\/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t *\/\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t\/\/ prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}\u0026amp;gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t\/\/ cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData \u0026amp;\u0026amp; success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '\u0026amp;gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\/\/ no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t\/\/ functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t\/\/ Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, \/\/ can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, \/\/ can be added without configuration\n\n\t\t\/\/ new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net\/retarget';\n\n(function ($r) {\n  if ($r.terminate === true) {\n    return;\n  }\n\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i \u003c products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i \u003c products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '\u0026amp;version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '\u0026amp;' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n\u003c\/script\u003e","brand":"adidas AG","offers":[{"title":"S","offer_id":54988315525501,"sku":"UB332417S","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":54988315492733,"sku":"UB332417M","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":54988315459965,"sku":"UB332417L","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":54988315558269,"sku":"UB332417XL","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XXL","offer_id":54988315591037,"sku":"UB332417XXL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":54988315427197,"sku":"UB3324173XL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332417_OS_00.webp?v=1748350088"},{"product_id":"union-heimtrikot-manner-24-25-tailliert","title":"Union Home Jersey Men 24\/25 - fitted","description":"\u003cp\u003e Color: red \/ white\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":54988383191421,"sku":"UB332418XS","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":54988383093117,"sku":"UB332418S","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"M","offer_id":54988383060349,"sku":"UB332418M","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":54988383027581,"sku":"UB332418L","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":54988383125885,"sku":"UB332418XL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":54988383158653,"sku":"UB332418XXL","price":40.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332418_OS_00.webp?v=1739439172"},{"product_id":"union-ausweichtrikot-manner-24-25","title":"Union Third Jersey - 24\/25","description":"Color: yellow \/ white","brand":"adidas AG","offers":[{"title":"XS","offer_id":54989646922109,"sku":"UB332493XS","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":54989646823805,"sku":"UB332493S","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":54989646791037,"sku":"UB332493M","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"L","offer_id":54989646758269,"sku":"UB332493L","price":40.0,"currency_code":"EUR","in_stock":false},{"title":"XL","offer_id":54989646856573,"sku":"UB332493XL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":54989646889341,"sku":"UB332493XXL","price":40.0,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":54989646725501,"sku":"UB3324933XL","price":40.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332493_OS_00.webp?v=1748349018"},{"product_id":"adidas-frauen-shorts-schwarz-25-26","title":"adidas Women's Shorts - Team 25\/26","description":"\u003cp\u003eBrief Description:\n\u003cbr\u003eside pockets\n\u003cbr\u003e3 stripes on the side of the pockets \n\u003cbr\u003esmall grey insert on the leg \u003c\/p\u003e\n\n\u003cp\u003eFit: Regular \n\u003cbr\u003eMaterial: 100% recycled polyester\u003c\/p\u003e\n\n\u003cp\u003eDUFTE Seal: no\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":55323005976957,"sku":"UB332557XS","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":55323005878653,"sku":"UB332557S","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":55323005845885,"sku":"UB332557M","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":55323005813117,"sku":"UB332557L","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":55323005911421,"sku":"UB332557XL","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":55323005944189,"sku":"UB332557XXL","price":29.96,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332557_OS_00.webp?v=1750256733"},{"product_id":"adidas-poloshirt-rot-team-25-26","title":"adidas polo shirt red - Team 25\/26","description":"\u003cp\u003eRed color\u003c\/p\u003e","brand":"adidas AG","offers":[{"title":"XS","offer_id":55331004678525,"sku":"UB332541XS","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"S","offer_id":55331004580221,"sku":"UB332541S","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"M","offer_id":55331004547453,"sku":"UB332541M","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"L","offer_id":55331004514685,"sku":"UB332541L","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"XL","offer_id":55331004612989,"sku":"UB332541XL","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"XXL","offer_id":55331004645757,"sku":"UB332541XXL","price":29.96,"currency_code":"EUR","in_stock":true},{"title":"3XL","offer_id":55331004481917,"sku":"UB3325413XL","price":29.96,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0825\/6271\/1893\/files\/UB332541_OS_00.webp?v=1750253963"}],"url":"https:\/\/fanartikel.union-zeughaus.de\/en\/collections\/sportzeug-s.oembed?page=14","provider":"Union Zeughaus","version":"1.0","type":"link"}