[{"data":1,"prerenderedAt":1015},["ShallowReactive",2],{"docs-nav:en":3,"docs:\u002Fdocs\u002Fbusiness\u002Ftogether":186},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,28,50,75,120,145],{"title":10,"path":6,"stem":11},"What is Fougere","docs\u002Findex",{"title":13,"path":14,"stem":15},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",{"title":17,"path":18,"stem":19},"An app you already have","\u002Fdocs\u002Fexisting-app","docs\u002F02.existing-app",{"title":21,"path":22,"stem":23},"Bring your schema","\u002Fdocs\u002Fbring-your-schema","docs\u002F03.bring-your-schema",{"title":25,"path":26,"stem":27},"The CLI","\u002Fdocs\u002Fcli","docs\u002F04.cli",{"title":29,"path":30,"stem":31,"children":32,"page":49},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[33,37,41,45],{"title":34,"path":35,"stem":36},"Philosophy","\u002Fdocs\u002Fconcepts\u002Fphilosophy","docs\u002F2.concepts\u002F1.philosophy",{"title":38,"path":39,"stem":40},"The Frond","\u002Fdocs\u002Fconcepts\u002Ffrond","docs\u002F2.concepts\u002F2.frond",{"title":42,"path":43,"stem":44},"The shortest path","\u002Fdocs\u002Fconcepts\u002Fshortest-path","docs\u002F2.concepts\u002F3.shortest-path",{"title":46,"path":47,"stem":48},"The base","\u002Fdocs\u002Fconcepts\u002Fthe-base","docs\u002F2.concepts\u002F4.the-base",false,{"title":51,"path":52,"stem":53,"children":54,"page":49},"Schema","\u002Fdocs\u002Fschema","docs\u002F3.schema",[55,59,63,67,71],{"title":56,"path":57,"stem":58},"Entities","\u002Fdocs\u002Fschema\u002Fentities","docs\u002F3.schema\u002F1.entities",{"title":60,"path":61,"stem":62},"Views","\u002Fdocs\u002Fschema\u002Fviews","docs\u002F3.schema\u002F2.views",{"title":64,"path":65,"stem":66},"The identity card","\u002Fdocs\u002Fschema\u002Fcard","docs\u002F3.schema\u002F3.card",{"title":68,"path":69,"stem":70},"Standard Schema","\u002Fdocs\u002Fschema\u002Fstandard-schema","docs\u002F3.schema\u002F4.standard-schema",{"title":72,"path":73,"stem":74},"How a schema moves","\u002Fdocs\u002Fschema\u002Fevolution","docs\u002F3.schema\u002F5.evolution",{"title":76,"path":77,"stem":78,"children":79,"page":49},"Business","\u002Fdocs\u002Fbusiness","docs\u002F4.business",[80,84,88,92,96,100,104,108,112,116],{"title":81,"path":82,"stem":83},"Handlers","\u002Fdocs\u002Fbusiness\u002Fhandlers","docs\u002F4.business\u002F1.handlers",{"title":85,"path":86,"stem":87},"Ports","\u002Fdocs\u002Fbusiness\u002Fports","docs\u002F4.business\u002F10.ports",{"title":89,"path":90,"stem":91},"Presenters","\u002Fdocs\u002Fbusiness\u002Fpresenters","docs\u002F4.business\u002F2.presenters",{"title":93,"path":94,"stem":95},"Collectors","\u002Fdocs\u002Fbusiness\u002Fcollectors","docs\u002F4.business\u002F3.collectors",{"title":97,"path":98,"stem":99},"Errors","\u002Fdocs\u002Fbusiness\u002Ferrors","docs\u002F4.business\u002F4.errors",{"title":101,"path":102,"stem":103},"Seeds","\u002Fdocs\u002Fbusiness\u002Fseeds","docs\u002F4.business\u002F5.seeds",{"title":105,"path":106,"stem":107},"Facts","\u002Fdocs\u002Fbusiness\u002Ffacts","docs\u002F4.business\u002F6.facts",{"title":109,"path":110,"stem":111},"Storage","\u002Fdocs\u002Fbusiness\u002Fstorage","docs\u002F4.business\u002F7.storage",{"title":113,"path":114,"stem":115},"Writes that stand or fall as one","\u002Fdocs\u002Fbusiness\u002Ftogether","docs\u002F4.business\u002F8.together",{"title":117,"path":118,"stem":119},"Repositories","\u002Fdocs\u002Fbusiness\u002Frepositories","docs\u002F4.business\u002F9.repositories",{"title":121,"path":122,"stem":123,"children":124,"page":49},"Client","\u002Fdocs\u002Fclient","docs\u002F5.client",[125,129,133,137,141],{"title":126,"path":127,"stem":128},"Queries & commands","\u002Fdocs\u002Fclient\u002Fqueries-commands","docs\u002F5.client\u002F1.queries-commands",{"title":130,"path":131,"stem":132},"Forms","\u002Fdocs\u002Fclient\u002Fforms","docs\u002F5.client\u002F2.forms",{"title":134,"path":135,"stem":136},"Session","\u002Fdocs\u002Fclient\u002Fsession","docs\u002F5.client\u002F3.session",{"title":138,"path":139,"stem":140},"invoke","\u002Fdocs\u002Fclient\u002Finvoke","docs\u002F5.client\u002F4.invoke",{"title":142,"path":143,"stem":144},"Back-office","\u002Fdocs\u002Fclient\u002Fadmin","docs\u002F5.client\u002F5.admin",{"title":146,"path":147,"stem":148,"children":149,"page":49},"Infrastructure","\u002Fdocs\u002Finfra","docs\u002F6.infra",[150,154,158,162,166,170,174,178,182],{"title":151,"path":152,"stem":153},"The gradient","\u002Fdocs\u002Finfra\u002Fgradient","docs\u002F6.infra\u002F1.gradient",{"title":155,"path":156,"stem":157},"Surfaces — REST & GraphQL","\u002Fdocs\u002Finfra\u002Fsurfaces","docs\u002F6.infra\u002F2.surfaces",{"title":159,"path":160,"stem":161},"Deployment","\u002Fdocs\u002Finfra\u002Fdeployment","docs\u002F6.infra\u002F3.deployment",{"title":163,"path":164,"stem":165},"Hosts","\u002Fdocs\u002Finfra\u002Fhosts","docs\u002F6.infra\u002F4.hosts",{"title":167,"path":168,"stem":169},"Sources","\u002Fdocs\u002Finfra\u002Fsources","docs\u002F6.infra\u002F5.sources",{"title":171,"path":172,"stem":173},"Lifecycle","\u002Fdocs\u002Finfra\u002Flifecycle","docs\u002F6.infra\u002F6.lifecycle",{"title":175,"path":176,"stem":177},"Identity across Fronds","\u002Fdocs\u002Finfra\u002Fidentity","docs\u002F6.infra\u002F7.identity",{"title":179,"path":180,"stem":181},"Observability","\u002Fdocs\u002Finfra\u002Fobservability","docs\u002F6.infra\u002F8.observability",{"title":183,"path":184,"stem":185},"Testing","\u002Fdocs\u002Finfra\u002Ftesting","docs\u002F6.infra\u002F9.testing",{"id":187,"title":113,"body":188,"description":1010,"extension":1011,"meta":1012,"navigation":305,"path":114,"seo":1013,"stem":115,"__hash__":1014},"docs_en\u002Fdocs\u002F4.business\u002F8.together.md",{"type":189,"value":190,"toc":1004},"minimark",[191,195,219,534,553,562,567,581,589,595,601,669,676,688,707,711,735,873,887,890,894,897,936,939,945,961,978,982,989,995,1000],[192,193,113],"h1",{"id":194},"writes-that-stand-or-fall-as-one",[196,197,198,205,206,210,211,214,215,218],"p",{},[199,200,201],"a",{"href":110},[202,203,204],"code",{},"Storage\u003CPost>"," is the port whose every gesture is ",[207,208,209],"strong",{},"one\nstatement",", and one statement is atomic in every engine. ",[202,212,213],{},"Together"," is the port whose unit\nis a ",[207,216,217],{},"block",": what the callback did happens entirely, or not at all.",[220,221,226],"pre",{"className":222,"code":223,"language":224,"meta":225,"style":225},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","export default class TransferHandler {\n  constructor(private together: Together\u003C[Account, Ledger]>) {}\n\n  async move(from: string, to: string, amount: number) {\n    return this.together.run(async ([accounts, ledger]) => {\n      const debited = await accounts.findById(from);\n      await accounts.update(from, { balance: debited.balance - amount });\n      await ledger.create({ from, to, amount });\n    });\n  }\n}\n","ts","",[202,227,228,252,300,307,352,399,432,478,512,522,528],{"__ignoreMap":225},[229,230,233,237,240,244,248],"span",{"class":231,"line":232},"line",1,[229,234,236],{"class":235},"sVHd0","export",[229,238,239],{"class":235}," default",[229,241,243],{"class":242},"sbsja"," class",[229,245,247],{"class":246},"sbgvK"," TransferHandler",[229,249,251],{"class":250},"sP7_E"," {\n",[229,253,255,258,261,264,268,272,275,278,282,285,288,291,294,297],{"class":231,"line":254},2,[229,256,257],{"class":242},"  constructor",[229,259,260],{"class":250},"(",[229,262,263],{"class":242},"private",[229,265,267],{"class":266},"s99_P"," together",[229,269,271],{"class":270},"smGrS",":",[229,273,274],{"class":246}," Together",[229,276,277],{"class":250},"\u003C",[229,279,281],{"class":280},"su5hD","[",[229,283,284],{"class":246},"Account",[229,286,287],{"class":250},",",[229,289,290],{"class":246}," Ledger",[229,292,293],{"class":280},"]",[229,295,296],{"class":250},">)",[229,298,299],{"class":250}," {}\n",[229,301,303],{"class":231,"line":302},3,[229,304,306],{"emptyLinePlaceholder":305},true,"\n",[229,308,310,313,317,319,322,324,328,330,333,335,337,339,342,344,347,350],{"class":231,"line":309},4,[229,311,312],{"class":242},"  async",[229,314,316],{"class":315},"sVXei"," move",[229,318,260],{"class":250},[229,320,321],{"class":266},"from",[229,323,271],{"class":270},[229,325,327],{"class":326},"sZMiF"," string",[229,329,287],{"class":250},[229,331,332],{"class":266}," to",[229,334,271],{"class":270},[229,336,327],{"class":326},[229,338,287],{"class":250},[229,340,341],{"class":266}," amount",[229,343,271],{"class":270},[229,345,346],{"class":326}," number",[229,348,349],{"class":250},")",[229,351,251],{"class":250},[229,353,355,358,362,365,368,370,374,377,380,383,386,388,391,394,397],{"class":231,"line":354},5,[229,356,357],{"class":235},"    return",[229,359,361],{"class":360},"s39Yj"," this",[229,363,364],{"class":250},".",[229,366,367],{"class":280},"together",[229,369,364],{"class":250},[229,371,373],{"class":372},"sGLFI","run",[229,375,260],{"class":376},"skxfh",[229,378,379],{"class":242},"async",[229,381,382],{"class":250}," ([",[229,384,385],{"class":266},"accounts",[229,387,287],{"class":250},[229,389,390],{"class":266}," ledger",[229,392,393],{"class":250},"])",[229,395,396],{"class":242}," =>",[229,398,251],{"class":250},[229,400,402,405,409,412,415,418,420,423,425,427,429],{"class":231,"line":401},6,[229,403,404],{"class":242},"      const",[229,406,408],{"class":407},"s_hVV"," debited",[229,410,411],{"class":270}," =",[229,413,414],{"class":235}," await",[229,416,417],{"class":280}," accounts",[229,419,364],{"class":250},[229,421,422],{"class":372},"findById",[229,424,260],{"class":376},[229,426,321],{"class":280},[229,428,349],{"class":376},[229,430,431],{"class":250},";\n",[229,433,435,438,440,442,445,447,449,451,454,457,459,461,463,466,469,471,474,476],{"class":231,"line":434},7,[229,436,437],{"class":235},"      await",[229,439,417],{"class":280},[229,441,364],{"class":250},[229,443,444],{"class":372},"update",[229,446,260],{"class":376},[229,448,321],{"class":280},[229,450,287],{"class":250},[229,452,453],{"class":250}," {",[229,455,456],{"class":376}," balance",[229,458,271],{"class":250},[229,460,408],{"class":280},[229,462,364],{"class":250},[229,464,465],{"class":280},"balance",[229,467,468],{"class":270}," -",[229,470,341],{"class":280},[229,472,473],{"class":250}," }",[229,475,349],{"class":376},[229,477,431],{"class":250},[229,479,481,483,485,487,490,492,495,498,500,502,504,506,508,510],{"class":231,"line":480},8,[229,482,437],{"class":235},[229,484,390],{"class":280},[229,486,364],{"class":250},[229,488,489],{"class":372},"create",[229,491,260],{"class":376},[229,493,494],{"class":250},"{",[229,496,497],{"class":280}," from",[229,499,287],{"class":250},[229,501,332],{"class":280},[229,503,287],{"class":250},[229,505,341],{"class":280},[229,507,473],{"class":250},[229,509,349],{"class":376},[229,511,431],{"class":250},[229,513,515,518,520],{"class":231,"line":514},9,[229,516,517],{"class":250},"    }",[229,519,349],{"class":376},[229,521,431],{"class":250},[229,523,525],{"class":231,"line":524},10,[229,526,527],{"class":250},"  }\n",[229,529,531],{"class":231,"line":530},11,[229,532,533],{"class":250},"}\n",[196,535,536,537,540,541,544,545,548,549,552],{},"Resolved by type, like ",[202,538,539],{},"RepositoryOf\u003CE>",", ",[202,542,543],{},"Facade\u003CH>"," and ",[202,546,547],{},"Emit\u003CF>"," — the type names the\nsubject, the container holds the realization. Nothing to register, and nothing ambient: no\ndecorator makes an ordinary ",[202,550,551],{},"storage.create()"," transactional behind your back, so the block is\nvisible where you read it.",[196,554,555,556,544,558,561],{},"Inside, you are in the ordinary vocabulary. ",[202,557,385],{},[202,559,560],{},"ledger"," are the same guarded\nentity ports that repositories forward, and every judge still runs: a value the entity\nrefuses is refused here too.",[563,564,566],"h2",{"id":565},"two-realizations-and-the-boot-says-which","Two realizations, and the boot says which",[196,568,569,570,574,575,580],{},"The declaration names its members. Where those members ",[571,572,573],"em",{},"live"," is a\n",[199,576,577],{"href":168},[202,578,579],{},"sources:"," decision, and it decides what the frame can promise:",[220,582,587],{"className":583,"code":585,"language":586},[584],"language-text","Account+LedgerTogether — transaction, source 'db'\nAccount+LedgerTogether — compensated: account in 'db', ledger in 'accounting' — no isolation\n","text",[202,588,585],{"__ignoreMap":225},[196,590,591,594],{},[207,592,593],{},"One engine"," — the members are rebuilt over a real transaction. The engine gives the\nunwind and the isolation, and it costs nothing.",[196,596,597,600],{},[207,598,599],{},"Several engines"," — a transaction reaches one engine, so there is none. The frame keeps\nthe before-image of every write and replays the inverses in reverse order. The port has a\nfixed set of gestures, which is what makes an inverse derivable rather than declared:",[602,603,604,617],"table",{},[605,606,607],"thead",{},[608,609,610,614],"tr",{},[611,612,613],"th",{},"write",[611,615,616],{},"its inverse",[618,619,620,634,647,659],"tbody",{},[608,621,622,628],{},[623,624,625],"td",{},[202,626,627],{},"create(x)",[623,629,630,633],{},[202,631,632],{},"delete(x.id)"," — the row is handed back, so it costs nothing",[608,635,636,641],{},[623,637,638],{},[202,639,640],{},"update(id, patch)",[623,642,643,646],{},[202,644,645],{},"update(id, before)"," — one read first",[608,648,649,654],{},[623,650,651],{},[202,652,653],{},"delete(id)",[623,655,656,646],{},[202,657,658],{},"create(row)",[608,660,661,666],{},[623,662,663],{},[202,664,665],{},"upsertAll(page)",[623,667,668],{},"restore what was there, delete what was not — one read for the page",[196,670,671,672,675],{},"This is why it is not a saga: a saga asks its author for an ",[202,673,674],{},"undo"," per step, because its\nsteps are arbitrary code. These are not.",[677,678,679,685],"warning",{},[196,680,681,684],{},[207,682,683],{},"All-or-nothing holds either way. Isolation does not."," Under a transaction, nobody\noutside can see the block half-done. Compensated, they can — between two writes a reader\nsees the half, and the unwind puts it back afterwards.",[196,686,687],{},"The boot states which realization it built rather than letting you assume the stronger one.",[677,689,690],{},[196,691,692,695,696,699,700,695,703,706],{},[207,693,694],{},"A fact announced inside a frame is not covered."," ",[202,697,698],{},"Emit\u003CT>"," resolves outside the block,\nso an announcement leaves the moment it is made — including from a frame that then unwinds.\nSubscribers will have acted on something that did not happen. Announce ",[207,701,702],{},"after",[202,704,705],{},"run()","\nreturns, where the block has already stood.",[563,708,710],{"id":709},"covering-what-a-collaborator-writes","Covering what a collaborator writes",[196,712,713,714,717,718,721,722,725,726,730,731,734],{},"A member list of entities covers what ",[571,715,716],{},"your"," block writes. A second list names ",[207,719,720],{},"providers","\n— a service, a ",[199,723,724],{"href":118},"repository",", a\n",[199,727,729],{"href":728},"\u002Fdocs\u002Fconcepts\u002Fthe-base#mirror--a-local-copy-of-rows-you-cannot-query","mirror"," — rebuilt\ninside the frame so that what ",[571,732,733],{},"they"," write is covered too:",[220,736,738],{"className":222,"code":737,"language":224,"meta":225,"style":225},"constructor(private together: Together\u003C[RateCard, Ledger], [RateMirror]>) {}\n\nawait this.together.run(async ([rates, ledger], [mirror]) => {\n  await mirror.refresh();          \u002F\u002F its pages are under the same unwind\n  await ledger.create({ … });\n});\n",[202,739,740,772,776,818,841,865],{"__ignoreMap":225},[229,741,742,745,748,750,753,755,758,760,763,766,769],{"class":231,"line":232},[229,743,744],{"class":372},"constructor",[229,746,747],{"class":280},"(private together: Together",[229,749,277],{"class":270},[229,751,752],{"class":280},"[RateCard",[229,754,287],{"class":250},[229,756,757],{"class":280}," Ledger]",[229,759,287],{"class":250},[229,761,762],{"class":280}," [RateMirror]",[229,764,765],{"class":270},">",[229,767,768],{"class":280},") ",[229,770,771],{"class":250},"{}\n",[229,773,774],{"class":231,"line":254},[229,775,306],{"emptyLinePlaceholder":305},[229,777,778,781,783,785,787,789,791,793,795,797,800,802,804,807,810,812,814,816],{"class":231,"line":302},[229,779,780],{"class":235},"await",[229,782,361],{"class":360},[229,784,364],{"class":250},[229,786,367],{"class":280},[229,788,364],{"class":250},[229,790,373],{"class":372},[229,792,260],{"class":280},[229,794,379],{"class":242},[229,796,382],{"class":250},[229,798,799],{"class":266},"rates",[229,801,287],{"class":250},[229,803,390],{"class":266},[229,805,806],{"class":250},"],",[229,808,809],{"class":250}," [",[229,811,729],{"class":266},[229,813,393],{"class":250},[229,815,396],{"class":242},[229,817,251],{"class":250},[229,819,820,823,826,828,831,834,837],{"class":231,"line":309},[229,821,822],{"class":235},"  await",[229,824,825],{"class":280}," mirror",[229,827,364],{"class":250},[229,829,830],{"class":372},"refresh",[229,832,833],{"class":376},"()",[229,835,836],{"class":250},";",[229,838,840],{"class":839},"sutJx","          \u002F\u002F its pages are under the same unwind\n",[229,842,843,845,847,849,851,853,855,858,861,863],{"class":231,"line":354},[229,844,822],{"class":235},[229,846,390],{"class":280},[229,848,364],{"class":250},[229,850,489],{"class":372},[229,852,260],{"class":376},[229,854,494],{"class":250},[229,856,857],{"class":376}," … ",[229,859,860],{"class":250},"}",[229,862,349],{"class":376},[229,864,431],{"class":250},[229,866,867,869,871],{"class":231,"line":401},[229,868,860],{"class":250},[229,870,349],{"class":280},[229,872,431],{"class":250},[196,874,875,878,879,882,883,886],{},[202,876,877],{},"RateMirror"," writes through ",[202,880,881],{},"Storage\u003CRateCard>",", so it receives the framed storage through\nits ordinary constructor. Not one line of ",[202,884,885],{},"Mirror"," knows a frame exists.",[196,888,889],{},"Two lists rather than one, because in a signature an entity and a class are both written as\na name and their types do not separate them. They are two different facts anyway: what the\nunwind covers, and what is rebuilt to make that true.",[563,891,893],{"id":892},"what-a-frame-refuses","What a frame refuses",[196,895,896],{},"At boot, so you never discover it at the first call:",[602,898,899,907],{},[605,900,901],{},[608,902,903,905],{},[611,904],{},[611,906],{},[618,908,909,920,928],{},[608,910,911,917],{},[623,912,913,914],{},"a member whose frond is declared in ",[202,915,916],{},"remotes:",[623,918,919],{},"it registers no storage here — nothing to record, nothing to undo",[608,921,922,925],{},[623,923,924],{},"a name that resolves to nothing",[623,926,927],{},"a typo, whose only other symptom is a frame quietly one member short",[608,929,930,933],{},[623,931,932],{},"a provider writing an entity absent from the first list",[623,934,935],{},"its writes would escape the unwind",[196,937,938],{},"Two more at the call:",[196,940,941,944],{},[207,942,943],{},"A frame opened inside another."," On one engine the second transaction waits for the\nfirst, so the call hangs — measured, five seconds and no answer; split across engines the\nsame code returns. Two frames that must both hold are one frame, and its member list is the\nunion.",[196,946,947,954,955,957,958,960],{},[207,948,949,950,953],{},"A ",[199,951,952],{"href":106},"fact"," announced from inside a frame."," Announcing is dispatch:\nevery subscriber has been handed it and the carrier has already put it on the wire, while\nthe writes can still be taken back. Announce after ",[202,956,705],{}," returns, which is when it is\ntrue. Deferring to the commit was the other option and it was refused — it would make\n",[202,959,698],{}," behave differently depending on where it is called, and the window it opens\nbetween commit and announcement has no remedy short of an outbox.",[196,962,963,964,967,968,973,974,977],{},"And in a compensated frame only: ",[202,965,966],{},"upsert"," on an entity that declares a\n",[199,969,970],{"href":57},[202,971,972],{},"unique"," constraint besides its key. The inverse of an\nupsert is derivable exactly when the conflict is the key; MySQL's ",[202,975,976],{},"ON DUPLICATE KEY UPDATE","\nfires on any unique constraint, so the question is asked of your declaration and never of\nthe engine.",[563,979,981],{"id":980},"where-the-gradient-stops","Where the gradient stops",[196,983,984,985,988],{},"Declaring ",[202,986,987],{},"Together\u003C[Account, Ledger]>"," says these two may not be separated by a change of\ntopology. That is a real cost, and it is the point: it is the one place where moving a\nboundary is refused out loud instead of quietly weakening a guarantee.",[196,990,991,992,994],{},"When two things genuinely live apart and must both end up written, that is not a frame —\nit is a ",[199,993,952],{"href":106},": commit one half, announce, and let the subscriber\ncommit the other. You then own the compensation, and the framework does not pretend\notherwise.",[196,996,997,998,364],{},"Next: ",[199,999,117],{"href":118},[1001,1002,1003],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sVXei, html code.shiki .sVXei{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}",{"title":225,"searchDepth":254,"depth":254,"links":1005},[1006,1007,1008,1009],{"id":565,"depth":254,"text":566},{"id":709,"depth":254,"text":710},{"id":892,"depth":254,"text":893},{"id":980,"depth":254,"text":981},"Together — the port whose unit is a block, its two realizations, and the boot line that says which one you got.","md",{},{"title":113,"description":1010},"BVvhHVcy-TGXKJW6UP3mXnv7CRiwswjVqUiUaJOY-YM",1788560231306]