{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Mobile Delivery","description":"Complete documentation for integrating Cheqi's digital receipt platform","keywords":["cheqi","digital receipts","api","sdk","java","javascript"],"llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"mobile-delivery","__idx":0},"children":["Mobile Delivery"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Cheqi uses push notifications as opaque work hints. The durable encrypted"," ","generation queue is the source of truth."]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"flowchart TD\n    A[Encrypted generation job committed] --> B[Durable push outbox]\n    B --> C[APNs or FCM work hint]\n    C --> D[Targeted job fetch]\n    D --> E[Decrypt and generate locally]\n    E --> F[Persist local receipt]\n    F --> G[Submit downstream ciphertext if elected]\n    G --> H[Acknowledge device completion]\n    C -. missed, delayed, or offline .-> I[Foreground queue sync]\n    I --> D\n","diagramHtml":"<svg id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 335.25px;\" viewBox=\"0 0 335.25 1022\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>\n    #diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 foreignObject {\n      overflow: visible;\n    }\n  </style><style>#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .error-icon{fill:#552222;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .error-text{fill:#552222;stroke:#552222;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edge-thickness-normal{stroke-width:1px;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edge-thickness-thick{stroke-width:3.5px;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edge-pattern-solid{stroke-dasharray:0;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .marker{fill:#333333;stroke:#333333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .marker.cross{stroke:#333333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 p{margin:0;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .label{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;color:#333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .cluster-label text{fill:#333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .cluster-label span{color:#333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .cluster-label span p{background-color:transparent;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .label text,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 span{fill:#333;color:#333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node rect,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node circle,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node ellipse,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node polygon,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .rough-node .label text,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node .label text,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .image-shape .label,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .icon-shape .label{text-anchor:middle;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .rough-node .label,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node .label,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .image-shape .label,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .icon-shape .label{text-align:center;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node.clickable{cursor:pointer;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .arrowheadPath{fill:#333333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edgePath .path{stroke:#333333;stroke-width:1px;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .flowchart-link{stroke:#333333;fill:none;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .cluster text{fill:#333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .cluster span{color:#333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 rect.text{fill:none;stroke-width:0;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .icon-shape,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .icon-shape p,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .icon-shape .label rect,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 .node .neo-node{stroke:#9370DB;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].node rect,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].cluster rect,#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M138,86L138,90.167C138,94.333,138,102.667,138,110.333C138,118,138,125,138,128.5L138,132\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo4Nn0seyJ4IjoxMzgsInkiOjExMX0seyJ4IjoxMzgsInkiOjEzNn1d\" data-look=\"classic\" marker-end=\"url(#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd)\"></path><path d=\"M138,190L138,194.167C138,198.333,138,206.667,138,214.333C138,222,138,229,138,232.5L138,236\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTM4LCJ5IjoxOTB9LHsieCI6MTM4LCJ5IjoyMTV9LHsieCI6MTM4LCJ5IjoyNDB9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd)\"></path><path d=\"M106.465,294L99.262,300.167C92.06,306.333,77.655,318.667,70.452,335.5C63.25,352.333,63.25,373.667,63.25,393C63.25,412.333,63.25,429.667,68.692,442.119C74.135,454.572,85.019,462.144,90.462,465.93L95.904,469.716\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-L_C_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MTA2LjQ2NDg0Mzc1LCJ5IjoyOTR9LHsieCI6NjMuMjUsInkiOjMzMX0seyJ4Ijo2My4yNSwieSI6Mzk1fSx7IngiOjYzLjI1LCJ5Ijo0NDd9LHsieCI6OTkuMTg3NSwieSI6NDcyfV0=\" data-look=\"classic\" marker-end=\"url(#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd)\"></path><path d=\"M138,526L138,530.167C138,534.333,138,542.667,138,550.333C138,558,138,565,138,568.5L138,572\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-L_D_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo1MjZ9LHsieCI6MTM4LCJ5Ijo1NTF9LHsieCI6MTM4LCJ5Ijo1NzZ9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd)\"></path><path d=\"M138,654L138,658.167C138,662.333,138,670.667,138,678.333C138,686,138,693,138,696.5L138,700\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-L_E_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo2NTR9LHsieCI6MTM4LCJ5Ijo2Nzl9LHsieCI6MTM4LCJ5Ijo3MDR9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd)\"></path><path d=\"M138,758L138,762.167C138,766.333,138,774.667,138,782.333C138,790,138,797,138,800.5L138,804\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-L_F_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_F_G_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo3NTh9LHsieCI6MTM4LCJ5Ijo3ODN9LHsieCI6MTM4LCJ5Ijo4MDh9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd)\"></path><path d=\"M138,886L138,890.167C138,894.333,138,902.667,138,910.333C138,918,138,925,138,928.5L138,932\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-L_G_H_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_H_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo4ODZ9LHsieCI6MTM4LCJ5Ijo5MTF9LHsieCI6MTM4LCJ5Ijo5MzZ9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd)\"></path><path d=\"M169.535,294L176.738,300.167C183.94,306.333,198.345,318.667,205.548,330.333C212.75,342,212.75,353,212.75,358.5L212.75,364\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-L_C_I_0\" class=\"edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_I_0\" data-points=\"W3sieCI6MTY5LjUzNTE1NjI1LCJ5IjoyOTR9LHsieCI6MjEyLjc1LCJ5IjozMzF9LHsieCI6MjEyLjc1LCJ5IjozNjh9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd)\"></path><path d=\"M212.75,422L212.75,426.167C212.75,430.333,212.75,438.667,207.308,446.619C201.865,454.572,190.981,462.144,185.538,465.93L180.096,469.716\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-L_I_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_I_D_0\" data-points=\"W3sieCI6MjEyLjc1LCJ5Ijo0MjJ9LHsieCI6MjEyLjc1LCJ5Ijo0NDd9LHsieCI6MTc2LjgxMjUsInkiOjQ3Mn1d\" data-look=\"classic\" marker-end=\"url(#diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_F_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_H_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(212.75, 331)\"><g class=\"label\" data-id=\"L_C_I_0\" transform=\"translate(-92.796875, -12)\"><foreignObject width=\"185.59375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>missed, delayed, or offline</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_I_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-flowchart-A-0\" data-look=\"classic\" transform=\"translate(138, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Encrypted generation job committed</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 163)\"><rect class=\"basic label-container\" style=\"\" x=\"-103.828125\" y=\"-27\" width=\"207.65625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-73.828125, -12)\"><rect></rect><foreignObject width=\"147.65625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Durable push outbox</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-flowchart-C-3\" data-look=\"classic\" transform=\"translate(138, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-113.5703125\" y=\"-27\" width=\"227.140625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-83.5703125, -12)\"><rect></rect><foreignObject width=\"167.140625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>APNs or FCM work hint</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-flowchart-D-5\" data-look=\"classic\" transform=\"translate(138, 499)\"><rect class=\"basic label-container\" style=\"\" x=\"-93.6015625\" y=\"-27\" width=\"187.203125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-63.6015625, -12)\"><rect></rect><foreignObject width=\"127.203125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Targeted job fetch</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-flowchart-E-7\" data-look=\"classic\" transform=\"translate(138, 615)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Decrypt and generate locally</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-flowchart-F-9\" data-look=\"classic\" transform=\"translate(138, 731)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.359375\" y=\"-27\" width=\"198.71875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.359375, -12)\"><rect></rect><foreignObject width=\"138.71875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Persist local receipt</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-flowchart-G-11\" data-look=\"classic\" transform=\"translate(138, 847)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Submit downstream ciphertext if elected</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-flowchart-H-13\" data-look=\"classic\" transform=\"translate(138, 975)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Acknowledge device completion</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-flowchart-I-15\" data-look=\"classic\" transform=\"translate(212.75, 395)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.5\" y=\"-27\" width=\"229\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.5, -12)\"><rect></rect><foreignObject width=\"169\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Foreground queue sync</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"diagram-5fadd12c22681a5dd1ccc77ae743b9ec64dee46d9fc2d62c8c1aae1d653369b0-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg>","diagramHtmlDark":"<svg id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 335.25px;\" viewBox=\"0 0 335.25 1022\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>\n    #diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 foreignObject {\n      overflow: visible;\n    }\n  </style><style>#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .error-icon{fill:#a44141;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .error-text{fill:#ddd;stroke:#ddd;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edge-thickness-normal{stroke-width:1px;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edge-thickness-thick{stroke-width:3.5px;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edge-pattern-solid{stroke-dasharray:0;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .marker{fill:lightgrey;stroke:lightgrey;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .marker.cross{stroke:lightgrey;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 p{margin:0;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .label{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;color:#ccc;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .cluster-label text{fill:#F9FFFE;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .cluster-label span{color:#F9FFFE;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .cluster-label span p{background-color:transparent;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .label text,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 span{fill:#ccc;color:#ccc;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node rect,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node circle,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node ellipse,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node polygon,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node path{fill:#1f2020;stroke:#ccc;stroke-width:1px;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .rough-node .label text,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node .label text,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .image-shape .label,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .icon-shape .label{text-anchor:middle;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .rough-node .label,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node .label,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .image-shape .label,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .icon-shape .label{text-align:center;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node.clickable{cursor:pointer;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .root .anchor path{fill:lightgrey!important;stroke-width:0;stroke:lightgrey;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .arrowheadPath{fill:lightgrey;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edgePath .path{stroke:lightgrey;stroke-width:1px;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .flowchart-link{stroke:lightgrey;fill:none;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edgeLabel{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edgeLabel p{background-color:hsl(0, 0%, 34.4117647059%);}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .edgeLabel rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .labelBkg{background-color:rgba(87.75, 87.75, 87.75, 0.5);}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .cluster rect{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .cluster text{fill:#F9FFFE;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .cluster span{color:#F9FFFE;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(20, 1.5873015873%, 12.3529411765%);border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 rect.text{fill:none;stroke-width:0;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .icon-shape,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .image-shape{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .icon-shape p,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .image-shape p{background-color:hsl(0, 0%, 34.4117647059%);padding:2px;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .icon-shape .label rect,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .image-shape .label rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 .node .neo-node{stroke:#ccc;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].node rect,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].cluster rect,#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].node polygon{stroke:url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].node path{stroke:url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-gradient);stroke-width:1px;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].node circle{stroke:url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M138,86L138,90.167C138,94.333,138,102.667,138,110.333C138,118,138,125,138,128.5L138,132\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo4Nn0seyJ4IjoxMzgsInkiOjExMX0seyJ4IjoxMzgsInkiOjEzNn1d\" data-look=\"classic\" marker-end=\"url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd)\"></path><path d=\"M138,190L138,194.167C138,198.333,138,206.667,138,214.333C138,222,138,229,138,232.5L138,236\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MTM4LCJ5IjoxOTB9LHsieCI6MTM4LCJ5IjoyMTV9LHsieCI6MTM4LCJ5IjoyNDB9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd)\"></path><path d=\"M106.465,294L99.262,300.167C92.06,306.333,77.655,318.667,70.452,335.5C63.25,352.333,63.25,373.667,63.25,393C63.25,412.333,63.25,429.667,68.692,442.119C74.135,454.572,85.019,462.144,90.462,465.93L95.904,469.716\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-L_C_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MTA2LjQ2NDg0Mzc1LCJ5IjoyOTR9LHsieCI6NjMuMjUsInkiOjMzMX0seyJ4Ijo2My4yNSwieSI6Mzk1fSx7IngiOjYzLjI1LCJ5Ijo0NDd9LHsieCI6OTkuMTg3NSwieSI6NDcyfV0=\" data-look=\"classic\" marker-end=\"url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd)\"></path><path d=\"M138,526L138,530.167C138,534.333,138,542.667,138,550.333C138,558,138,565,138,568.5L138,572\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-L_D_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo1MjZ9LHsieCI6MTM4LCJ5Ijo1NTF9LHsieCI6MTM4LCJ5Ijo1NzZ9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd)\"></path><path d=\"M138,654L138,658.167C138,662.333,138,670.667,138,678.333C138,686,138,693,138,696.5L138,700\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-L_E_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_F_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo2NTR9LHsieCI6MTM4LCJ5Ijo2Nzl9LHsieCI6MTM4LCJ5Ijo3MDR9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd)\"></path><path d=\"M138,758L138,762.167C138,766.333,138,774.667,138,782.333C138,790,138,797,138,800.5L138,804\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-L_F_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_F_G_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo3NTh9LHsieCI6MTM4LCJ5Ijo3ODN9LHsieCI6MTM4LCJ5Ijo4MDh9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd)\"></path><path d=\"M138,886L138,890.167C138,894.333,138,902.667,138,910.333C138,918,138,925,138,928.5L138,932\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-L_G_H_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_H_0\" data-points=\"W3sieCI6MTM4LCJ5Ijo4ODZ9LHsieCI6MTM4LCJ5Ijo5MTF9LHsieCI6MTM4LCJ5Ijo5MzZ9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd)\"></path><path d=\"M169.535,294L176.738,300.167C183.94,306.333,198.345,318.667,205.548,330.333C212.75,342,212.75,353,212.75,358.5L212.75,364\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-L_C_I_0\" class=\"edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_I_0\" data-points=\"W3sieCI6MTY5LjUzNTE1NjI1LCJ5IjoyOTR9LHsieCI6MjEyLjc1LCJ5IjozMzF9LHsieCI6MjEyLjc1LCJ5IjozNjh9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd)\"></path><path d=\"M212.75,422L212.75,426.167C212.75,430.333,212.75,438.667,207.308,446.619C201.865,454.572,190.981,462.144,185.538,465.93L180.096,469.716\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-L_I_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_I_D_0\" data-points=\"W3sieCI6MjEyLjc1LCJ5Ijo0MjJ9LHsieCI6MjEyLjc1LCJ5Ijo0NDd9LHsieCI6MTc2LjgxMjUsInkiOjQ3Mn1d\" data-look=\"classic\" marker-end=\"url(#diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_F_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_F_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_H_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(212.75, 331)\"><g class=\"label\" data-id=\"L_C_I_0\" transform=\"translate(-92.796875, -12)\"><foreignObject width=\"185.59375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>missed, delayed, or offline</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_I_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-flowchart-A-0\" data-look=\"classic\" transform=\"translate(138, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Encrypted generation job committed</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-flowchart-B-1\" data-look=\"classic\" transform=\"translate(138, 163)\"><rect class=\"basic label-container\" style=\"\" x=\"-103.828125\" y=\"-27\" width=\"207.65625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-73.828125, -12)\"><rect></rect><foreignObject width=\"147.65625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Durable push outbox</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-flowchart-C-3\" data-look=\"classic\" transform=\"translate(138, 267)\"><rect class=\"basic label-container\" style=\"\" x=\"-113.5703125\" y=\"-27\" width=\"227.140625\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-83.5703125, -12)\"><rect></rect><foreignObject width=\"167.140625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>APNs or FCM work hint</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-flowchart-D-5\" data-look=\"classic\" transform=\"translate(138, 499)\"><rect class=\"basic label-container\" style=\"\" x=\"-93.6015625\" y=\"-27\" width=\"187.203125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-63.6015625, -12)\"><rect></rect><foreignObject width=\"127.203125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Targeted job fetch</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-flowchart-E-7\" data-look=\"classic\" transform=\"translate(138, 615)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Decrypt and generate locally</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-flowchart-F-9\" data-look=\"classic\" transform=\"translate(138, 731)\"><rect class=\"basic label-container\" style=\"\" x=\"-99.359375\" y=\"-27\" width=\"198.71875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-69.359375, -12)\"><rect></rect><foreignObject width=\"138.71875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Persist local receipt</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-flowchart-G-11\" data-look=\"classic\" transform=\"translate(138, 847)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Submit downstream ciphertext if elected</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-flowchart-H-13\" data-look=\"classic\" transform=\"translate(138, 975)\"><rect class=\"basic label-container\" style=\"\" x=\"-130\" y=\"-39\" width=\"260\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-100, -24)\"><rect></rect><foreignObject width=\"200\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;\"><span class=\"nodeLabel\"><p>Acknowledge device completion</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-flowchart-I-15\" data-look=\"classic\" transform=\"translate(212.75, 395)\"><rect class=\"basic label-container\" style=\"\" x=\"-114.5\" y=\"-27\" width=\"229\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-84.5, -12)\"><rect></rect><foreignObject width=\"169\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Foreground queue sync</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><defs><filter id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><linearGradient id=\"diagram-771456877d8606d75c82352d2b7a2fc5715cff564fa115bf081b69d581c9ea99-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#cccccc\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(180, 0%, 18.3529411765%)\" stop-opacity=\"1\"></stop></linearGradient></svg>"},"children":["flowchart TD\n    A[Encrypted generation job committed] --> B[Durable push outbox]\n    B --> C[APNs or FCM work hint]\n    C --> D[Targeted job fetch]\n    D --> E[Decrypt and generate locally]\n    E --> F[Persist local receipt]\n    F --> G[Submit downstream ciphertext if elected]\n    G --> H[Acknowledge device completion]\n    C -. missed, delayed, or offline .-> I[Foreground queue sync]\n    I --> D\n"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"push-contract","__idx":1},"children":["Push contract"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Receipt and credit-note hints use this versioned payload:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"eventType\": \"RECEIPT_GENERATION_AVAILABLE\",\n  \"eventVersion\": 1,\n  \"jobId\": \"opaque UUID\",\n  \"documentType\": \"RECEIPT\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["documentType"]}," may also be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREDIT_NOTE"]},". The payload contains no receipt line"," ","items, totals, encrypted generation body, generated document, customer payment"," ","identifier, or reusable recipient identifier."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On receipt, the app fetches only the assigned job using the opaque ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jobId"]}," and"," ","its authenticated device ID. Duplicate and out-of-order hints are safe because"," ","the server claim and local generation state are idempotent."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"durable-backend-behavior","__idx":2},"children":["Durable backend behavior"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The generation job and push-outbox rows are committed transactionally. A"," ","background dispatcher retries temporary APNs or FCM failures with exponential"," ","backoff. Multiple backend instances lock due rows so only one dispatcher sends"," ","a given outbox entry at a time."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An invalid provider token permanently fails that device's outbox entry and is"," ","removed from active use. An APNs or FCM success only means the provider accepted"," ","the hint; it is not proof that the phone generated the receipt."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"ios","__idx":3},"children":["iOS"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Cheqi sends one APNs alert notification with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content-available: 1"]},", immediate"," ","priority, and push type ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["alert"]},". The visible notification remains the primary"," ","delivery class, while ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content-available"]}," gives the containing app a"," ","best-effort background execution window for the targeted fetch."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Cheqi does not send a second pure-silent notification for the same job. Silent"," ","background pushes are low priority, may be throttled, and would duplicate the"," ","same fetch without creating a delivery guarantee."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The iOS target must have:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["the Push Notifications capability"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Background Modes enabled with ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Remote notifications"]}," selected"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["the correct APNs entitlement and environment for the installed build"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["APNs token registration is independent from permission to display alerts. The"," ","app registers for a device token at launch even when visible notifications are"," ","off. Cheqi explains the notification benefit once; it does not repeatedly show"," ","the system permission prompt. If permission is disabled, Profile shows a"," ","passive status and a link to the app's system settings."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["iOS background execution remains best-effort. The system may delay or end the"," ","window, and it normally does not relaunch the containing app after the user"," ","explicitly force-quits it. Opening or foregrounding Cheqi runs the authoritative"," ","queue sync and catches up missed work."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The existing Cheqi notification extension displays receipt notification"," ","content. It is not a Notification Service Extension and is not responsible for"," ","decrypting or storing generation jobs before the main app runs."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"android","__idx":4},"children":["Android"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Cheqi sends a high-priority FCM data message. A data message reaches"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FirebaseMessagingService.onMessageReceived"]}," while the app is backgrounded;"," ","using an FCM notification payload here would allow the system tray to bypass"," ","the app's processing code."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The service:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["validates the versioned work hint"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["posts the visible notification when Android allows it"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["enqueues one unique expedited WorkManager job for the generation-job ID"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["waits for network access"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["fetches and processes the assigned job through the existing idempotent"," ","receipt pipeline"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On Android 13 and later, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST_NOTIFICATIONS"]}," controls whether Cheqi can display"," ","the notification. It does not grant access to the durable receipt queue and is"," ","not the acknowledgement mechanism. Background execution can still be delayed"," ","by device battery policies, and FCM may deprioritize sustained high-priority"," ","traffic that does not result in user-visible notifications. Foreground sync is"," ","therefore still required."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If FCM reports deleted messages, Cheqi schedules a full authoritative sync."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"notification-permission-behavior","__idx":5},"children":["Notification permission behavior"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Notifications matter because they make receipts timely and visible, but"," ","permission is not a data-delivery guarantee."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Ask only after explaining the benefit in context."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Record that the explanation was shown so logout or device re-registration"," ","does not repeat it."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Keep token registration active independently from visible-alert permission."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["When permission is off, show a passive status and settings link instead of"," ","repeatedly prompting."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Always process the durable queue when the app becomes active."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"reliability-guarantees","__idx":6},"children":["Reliability guarantees"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Push is a hint; the encrypted queue is authoritative."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Provider acceptance is not device completion."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Repeated hints and retries are safe."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Each owner device independently generates and stores its own CHEQI receipt."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Exactly one leased device performs downstream fan-out."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Receipt contents remain encrypted until the assigned device decrypts them."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Foreground synchronization repairs missed, collapsed, throttled, offline, and"," ","force-quit delivery."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"production-verification","__idx":7},"children":["Production verification"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before promoting this flow, test physical devices in the APNs/FCM environment"," ","used by the release build:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirm the device token is registered after login and survives normal"," ","account reset/re-registration behavior."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Background the app without force-quitting it and submit an encrypted receipt."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirm the outbox sends one hint and the device performs the targeted fetch."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirm local generation, durable persistence, downstream delivery, and"," ","acknowledgement complete exactly once."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Repeat with visible notification permission disabled."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Repeat while offline, then restore connectivity and verify catch-up."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Force-quit iOS, submit a receipt, reopen Cheqi, and verify foreground sync"," ","catches it up."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Test token rotation and an invalid-token response in the release provider"," ","environment."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Do not treat a successful backend ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["202"]}," or an APNs/FCM acceptance log as the end"," ","of this test. The final evidence is the generated local receipt and completed"," ","durable job."]}]},"headings":[{"value":"Mobile Delivery","id":"mobile-delivery","depth":1},{"value":"Push contract","id":"push-contract","depth":2},{"value":"Durable backend behavior","id":"durable-backend-behavior","depth":2},{"value":"iOS","id":"ios","depth":2},{"value":"Android","id":"android","depth":2},{"value":"Notification permission behavior","id":"notification-permission-behavior","depth":2},{"value":"Reliability guarantees","id":"reliability-guarantees","depth":2},{"value":"Production verification","id":"production-verification","depth":2}],"frontmatter":{"title":"Mobile Delivery","description":"How iOS and Android wake, fetch, generate, and persist encrypted receipts","seo":{"title":"Mobile Delivery"}},"lastModified":"2026-08-02T21:39:49.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/receipts/mobile-delivery","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}