This page requires JavaScript to display.
D DELFI
Unpacking...
// its DIRECT parent over the relay protocol below — so each frame // navigation stays same-origin with its initiator and a deduped page // loads at any depth on any host, including a file:// download's // opaque origins (where a blob minted by one document cannot be // navigated to by another). const pageOrderEl = document.querySelector('script[type="__bundler/page_order"]'); const pageOrder = pageOrderEl ? JSON.parse(pageOrderEl.textContent) : []; const pageSet = new Set(pageOrder); const pageTexts = {}; // ── Nested-page text protocol (parent-chain relay) ── // Page bundles ship once, in the ROOT document's manifest. Every // document mints the blobs for its OWN frames, obtaining page text // through a strict parent-chain relay: a document only ever SENDS to // its direct parent (which, for every document the publisher's own // runtime minted, is another publisher document) and only ACCEPTS // text from that direct parent; requests from below are honored only // for the document's own child frames, and the ROOT never sends // upward at all. That last rule is load-bearing: the artifact host's // frame-ancestors allows claude.ai (and friends) to frame an // artifact, so window.top can be a FOREIGN document — a top-addressed // protocol would hand page uuids to that ancestor and accept forged // "page text" from it, minting attacker HTML as an artifact-origin // blob document. The chain never touches the ancestor: requests stop // at the root, replies are origin-addressed per hop (never '*' when // an origin exists), and both directions are origin-gated (on https // a foreign sender's origin can never equal this document's; in // opaque contexts — file:// — everything serializes as 'null', where // an embedded EXTERNAL frame still fails the gate by carrying its // own real origin, and a sandboxed child of such a frame is excluded // by the own-child-frames check plus uuid unguessability). Shape is // deny-by-default: one request form, one reply form, no error // replies. // window.origin is the SERIALIZED SECURITY origin ('null' in opaque // contexts such as a sandboxed preview iframe) — location.origin is // computed from the URL and stays 'https://…' even when the document // is sandboxed, which would misgate every opaque chain. const OWN_TARGET = /^https?:[/][/]/.test(window.origin || '') ? window.origin : '*'; function trustedOrigin(e) { if (e.origin === window.origin) return true; // https chains; opaque==opaque // file:// trees: Chrome serializes the file document's origin as // 'file://' while the blob: documents it mints serialize as 'null', // so the two legitimate shapes can never string-match — accept the // pair in both directions. https origins never serialize as either, // and sender identity (own child frame / direct parent) is checked // separately. return ( (e.origin === 'null' && (window.origin === 'file://' || window.location.protocol === 'file:')) || (/^file:/.test(e.origin) && window.origin === 'null') ); } // Non-empty only in the root document (nested bundles ship an empty // island), so it doubles as the root marker: the root answers from // local text and treats a miss as authoritative — never relaying to // its (possibly foreign) parent. const isPageRoot = pageOrder.length > 0; const blobUrls = {}; const resourceBlobs = {}; const UUID_SHAPE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/; const pendingFrames = {}; // uuid -> [{el, frag}] awaiting text for own frames const pendingRelays = {}; // uuid -> [childWindow] awaiting text to pass down function mountPage(el, frag, text) { const pageBlob = new Blob([text], { type: 'text/html' }); const u = URL.createObjectURL(pageBlob); resourceBlobs[u] = pageBlob; el.src = u + frag; } function deliverPage(uuid, text) { const frames = pendingFrames[uuid]; delete pendingFrames[uuid]; if (frames) for (const f of frames) mountPage(f.el, f.frag, text); const relays = pendingRelays[uuid]; delete pendingRelays[uuid]; if (relays) { for (const cw of relays) { try { cw.postMessage({ __bundler_page: uuid, __bundler_text: text }, OWN_TARGET); } catch (err) { /* gone */ } } } } function ownFrameWindows() { const out = []; for (const f of Array.from(document.querySelectorAll('iframe'))) { try { if (f.contentWindow) out.push(f.contentWindow); } catch (err) { /* detached */ } } return out; } window.addEventListener('message', function (e) { const d = e.data; if (!d || typeof d !== 'object' || !e.source) return; // Origin gate first; the structural checks below (own-child-frames // for requests, direct-parent + solicited-uuid for replies, the // root's never-relay rule) are what hold in fully opaque chains // where origin strings can't discriminate — a sandboxed root's // FOREIGN wrapper still fails all three even though both serialize // as real-vs-'null' rather than matching. if (!trustedOrigin(e)) return; if (typeof d.__bundler_need === 'string' && UUID_SHAPE.test(d.__bundler_need)) { // Requests are honored only for this document's own child frames. if (ownFrameWindows().indexOf(e.source) < 0) return; const uuid = d.__bundler_need; const text = pageTexts[uuid]; if (typeof text === 'string') { try { e.source.postMessage({ __bundler_page: uuid, __bundler_text: text }, OWN_TARGET); } catch (err) { /* gone */ } return; } if (isPageRoot || window.parent === window) return; // authoritative miss const waiting = pendingRelays[uuid]; if (waiting) { if (waiting.indexOf(e.source) < 0) waiting.push(e.source); return; } // Never-answered uuids would otherwise accumulate forever under a // request spray; past the cap (far above any real page count) new // relays are dropped rather than remembered. if (Object.keys(pendingRelays).length >= 128) return; pendingRelays[uuid] = [e.source]; window.parent.postMessage({ __bundler_need: uuid }, OWN_TARGET); } else if ( typeof d.__bundler_page === 'string' && UUID_SHAPE.test(d.__bundler_page) && typeof d.__bundler_text === 'string' ) { // The shape test is load-bearing beyond tidiness: the solicited // check below uses the in operator, which matches prototype keys // ('__proto__', 'constructor') — an unshaped key would reach // deliverPage and throw, painting the error banner. // Text is accepted only from the direct parent — the document // that minted this one. if (e.source !== window.parent || window.parent === window) return; if (!(d.__bundler_page in pendingFrames) && !(d.__bundler_page in pendingRelays)) return; deliverPage(d.__bundler_page, d.__bundler_text); } }); const uuids = Object.keys(manifest); setStatus('Unpacking ' + uuids.length + ' assets...'); await Promise.all(uuids.map(async (uuid) => { const entry = manifest[uuid]; try { const binaryStr = atob(entry.data); const bytes = new Uint8Array(binaryStr.length); for (let i = 0; i < binaryStr.length; i++) bytes[i] = binaryStr.charCodeAt(i); let finalBytes = bytes; if (entry.compressed) { if (typeof DecompressionStream !== 'undefined') { const ds = new DecompressionStream('gzip'); const writer = ds.writable.getWriter(); const reader = ds.readable.getReader(); writer.write(bytes); writer.close(); const chunks = []; let totalLen = 0; while (true) { const { done, value } = await reader.read(); if (done) break; chunks.push(value); totalLen += value.length; } finalBytes = new Uint8Array(totalLen); let offset = 0; for (const chunk of chunks) { finalBytes.set(chunk, offset); offset += chunk.length; } } else { console.warn('DecompressionStream not available, asset ' + uuid + ' may not render'); } } if (pageSet.has(uuid)) { pageTexts[uuid] = new TextDecoder().decode(finalBytes); return; } if (FONT_MIME.test(entry.mime) && MIME_TOKEN.test(entry.mime)) { // Strict artifact hosts allow font-src data: but not blob:. blobUrls[uuid] = 'data:' + entry.mime + ';base64,' + (entry.compressed ? toBase64(finalBytes) : entry.data); } else { const blob = new Blob([finalBytes], { type: entry.mime }); blobUrls[uuid] = URL.createObjectURL(blob); resourceBlobs[blobUrls[uuid]] = blob; } } catch (err) { console.error('Failed to decode asset ' + uuid + ':', err); const blob = new Blob([], { type: entry.mime }); blobUrls[uuid] = URL.createObjectURL(blob); resourceBlobs[blobUrls[uuid]] = blob; } })); const extResEl = document.querySelector('script[type="__bundler/ext_resources"]'); const extResources = extResEl ? JSON.parse(extResEl.textContent) : []; const resourceMap = {}; for (const entry of extResources) { if (blobUrls[entry.uuid]) resourceMap[entry.id] = blobUrls[entry.uuid]; } // Artifact-host CSP (connect-src 'self') refuses fetch() of blob: URLs — // consumers read these Blobs directly. Survives the swap like the error sink. window.__resourceBlobs = resourceBlobs; setStatus('Rendering...'); // Page uuids have no blob here — they ride inside about:blank# // frame markers the pass below resolves after the swap. for (const uuid of uuids) { if (pageSet.has(uuid)) continue; template = template.split(uuid).join(blobUrls[uuid]); } // Strip integrity + crossorigin — blob URLs from a file:// document inherit // a null origin, so crossorigin forces a CORS fetch that SRI then rejects. // The manifest bytes are ours; SRI protects against CDN compromise, not this. template = template.replace(/\s+integrity="[^"]*"/gi, '').replace(/\s+crossorigin="[^"]*"/gi, ''); const resourceScript = ' DELFI-Kurse mit Nicola Preibisch
D DELFI
Unpacking...

This is an example page. It’s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

Hi there! I’m a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin‘ caught in the rain.)

…or something like this:

The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.

As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!