From 323d32e148b32fcd0ce4b0fde218db922ef4687d Mon Sep 17 00:00:00 2001 From: Cassie Coyle Date: Tue, 9 Sep 2025 17:19:48 -0500 Subject: [PATCH 01/30] Multi-application Workflows (#4847) * cross-app docs Signed-off-by: Cassandra Coyle * Extended cross-app docs Signed-off-by: Albert Callarisa * called suborchestrators 'child workflow' for consistency Signed-off-by: Albert Callarisa * Merge both multi-app pieces Signed-off-by: Albert Callarisa * Changed link from workflow overview Signed-off-by: Albert Callarisa * Applied suggestions from review Signed-off-by: Albert Callarisa * Shortened sample code to show just the necessary pieces Signed-off-by: Albert Callarisa * Update daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md Signed-off-by: Mark Fussell * Update daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md Signed-off-by: Mark Fussell --------- Signed-off-by: Cassandra Coyle Signed-off-by: Albert Callarisa Signed-off-by: Mark Fussell Co-authored-by: Albert Callarisa Co-authored-by: Mark Fussell --- .../workflow/workflow-multi-app.md | 155 ++++-------------- .../workflow/workflow-overview.md | 6 + .../workflow/workflow-patterns.md | 35 ++-- .../workflow-multi-app-callactivity.png | Bin 0 -> 59779 bytes .../workflow-multi-app-child-workflow.png | Bin 0 -> 83374 bytes 5 files changed, 57 insertions(+), 139 deletions(-) create mode 100644 daprdocs/static/images/workflow-overview/workflow-multi-app-callactivity.png create mode 100644 daprdocs/static/images/workflow-overview/workflow-multi-app-child-workflow.png diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md index 8eb2f439430..e74954e23de 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md @@ -8,6 +8,7 @@ description: "Executing workflows across multiple applications" It is often the case that a single workflow spans multiple applications, microservices, or programing languages. This is where an activity or a child workflow will be executed on a different application than the one hosting the parent workflow. + Some scenarios where this is useful include: - A Machine Learning (ML) training activity must be executed on GPU-enabled machines, while the rest of the workflow runs on CPU-only orchestration machines. @@ -16,6 +17,8 @@ Some scenarios where this is useful include: - Different parts of the workflow need to be executed in different geographic regions due to data residency requirements. - An involved business process spans multiple teams or departments, each owning their own application. - Implementation of a workflow spans different programming lanaguages based on team expertise or existing codebases. +- Different team boundaries or microservice ownership. + ## Multi-application workflows @@ -25,8 +28,6 @@ This workflow will be executed across all replicas of that app ID, not just the It is possible to execute activities or child workflows on different app IDs by specifying the target app ID parameter, inside the workflow execution code. Upon execution, the target app ID will execute the activity or child workflow, and return the result to the parent workflow of the originating app ID. -Workflows being durable, if the target activity or child workflow app ID is not available or has not been defined, the parent workflow retry until the target app ID becomes available, indefinitely. -It is paramount that their is co-ordination between the teams owning the different app IDs to ensure that the activities and child workflows are defined and available when needed. The entire Workflow execution may be distributed across multiple app IDs with no limit, with each activity or child workflow specifying the target app ID. The final history of the workflow will be saved by the app ID that hosts the very parent (or can consider it the root) workflow. @@ -38,62 +39,37 @@ Similarly, all app IDs must use the same actor state store. Finally, the target app ID must have the activity or child workflow defined, otherwise the parent workflow will retry indefinitely. {{% /alert %}} -## Multi-application activity examples - -The following examples show how to execute activities on different target app IDs. - -{{< tabpane text=true >}} - -{{% tab "Go" %}} +{{% alert title="Important Limitations" color="warning" %}} +- **SDKs supporting multi-application workflows** - Multi-application workflows are used via the SDKs. Currently Java (activities calling) and Go (both activities and child workflows calling) SDKs are supported. The SDKs (Python, .NET, JavaScript) are planned for future releases. +{{% /alert %}} -```go -package main +## Error handling -import ( - "context" - "log" +When calling multi-application activities or child workflows: +- If the target application does not exist, the call will be retried using the provided retry policy. +- If the target application exists but doesn't contain the specified activity or workflow, the call will return an error. +- Standard workflow retry policies apply to multi-application calls. - "github.com/dapr/durabletask-go/backend" - "github.com/dapr/durabletask-go/client" - "github.com/dapr/durabletask-go/task" - dapr "github.com/dapr/go-sdk/client" -) +It is paramount that there is co-ordination between the teams owning the different app IDs to ensure that the activities and child workflows are defined and available when needed. -func main() { - ctx := context.Background() +## Multi-application activity example - registry := task.NewTaskRegistry() - if err := registry.AddOrchestrator(TestWorkflow); err != nil { - log.Fatal(err) - } +Diagram showing multi-application call activity workflow pattern - daprClient, err := dapr.NewClient() - if err != nil { - log.Fatal(err) - } +The following example shows how to execute the activity `ActivityA` on the target app `App2`. - client := client.NewTaskHubGrpcClient(daprClient.GrpcClientConn(), backend.DefaultLogger()) - if err := client.StartWorkItemListener(ctx, registry); err != nil { - log.Fatal(err) - } - - id, err := client.ScheduleNewOrchestration(ctx, "TestWorkflow") - if err != nil { - log.Fatal(err) - } +{{< tabpane text=true >}} - if _, err = client.WaitForOrchestrationCompletion(ctx, id); err != nil { - log.Fatal(err) - } -} +{{% tab "Go" %}} +```go func TestWorkflow(ctx *task.OrchestrationContext) (any, error) { var output string - err := ctx.CallActivity("my-other-activity", + err := ctx.CallActivity("ActivityA", task.WithActivityInput("my-input"), - // Here we set custom target app ID which will execute this activity. - task.WithActivityAppID("my-other-app-id"), + task.WithActivityAppID("App2"), // Here we set the target app ID which will execute this activity. ).Await(&output) + if err != nil { return nil, err } @@ -111,41 +87,14 @@ public class CrossAppWorkflow implements Workflow { @Override public WorkflowStub create() { return ctx -> { - var logger = ctx.getLogger(); - logger.info("=== WORKFLOW STARTING ==="); - logger.info("Starting CrossAppWorkflow: {}", ctx.getName()); - logger.info("Workflow name: {}", ctx.getName()); - logger.info("Workflow instance ID: {}", ctx.getInstanceId()); - - String input = ctx.getInput(String.class); - logger.info("CrossAppWorkflow received input: {}", input); - logger.info("Workflow input: {}", input); - - // Call an activity in another app by passing in an active appID to the WorkflowTaskOptions - logger.info("Calling cross-app activity in 'app2'..."); - logger.info("About to call cross-app activity in app2..."); - String crossAppResult = ctx.callActivity( - App2TransformActivity.class.getName(), - input, - new WorkflowTaskOptions("app2"), + String output = ctx.callActivity( + "ActivityA", + "my-input", + new WorkflowTaskOptions("App2"), // Here we set the target app ID which will execute this activity. String.class ).await(); - // Call another activity in a different app - logger.info("Calling cross-app activity in 'app3'..."); - logger.info("About to call cross-app activity in app3..."); - String finalResult = ctx.callActivity( - App3FinalizeActivity.class.getName(), - crossAppResult, - new WorkflowTaskOptions("app3"), - String.class - ).await(); - logger.info("Final cross-app activity result: {}", finalResult); - logger.info("Final cross-app activity result: {}", finalResult); - - logger.info("CrossAppWorkflow finished with: {}", finalResult); - logger.info("=== WORKFLOW COMPLETING WITH: {} ===" , finalResult); - ctx.complete(finalResult); + ctx.complete(output); }; } } @@ -155,60 +104,24 @@ public class CrossAppWorkflow implements Workflow { {{< /tabpane >}} -The following examples show how to execute child workflows on different target app IDs. +## Multi-application child workflow example + +Diagram showing multi-application child workflow pattern + +The following example shows how to execute the child workflow `Workflow2` on the target app `App2`. {{< tabpane text=true >}} {{% tab "Go" %}} ```go -package main - -import ( - "context" - "log" - - "github.com/dapr/durabletask-go/backend" - "github.com/dapr/durabletask-go/client" - "github.com/dapr/durabletask-go/task" - dapr "github.com/dapr/go-sdk/client" -) - -func main() { - ctx := context.Background() - - registry := task.NewTaskRegistry() - if err := registry.AddOrchestrator(TestWorkflow); err != nil { - log.Fatal(err) - } - - daprClient, err := dapr.NewClient() - if err != nil { - log.Fatal(err) - } - - client := client.NewTaskHubGrpcClient(daprClient.GrpcClientConn(), backend.DefaultLogger()) - if err := client.StartWorkItemListener(ctx, registry); err != nil { - log.Fatal(err) - } - - id, err := client.ScheduleNewOrchestration(ctx, "TestWorkflow") - if err != nil { - log.Fatal(err) - } - - if _, err = client.WaitForOrchestrationCompletion(ctx, id); err != nil { - log.Fatal(err) - } -} - func TestWorkflow(ctx *task.OrchestrationContext) (any, error) { var output string - err := ctx.CallSubOrchestrator("my-sub-orchestration", + err := ctx.CallSubOrchestrator("Workflow2", task.WithSubOrchestratorInput("my-input"), - // Here we set custom target app ID which will execute this child workflow. - task.WithSubOrchestratorAppID("my-sub-app-id"), + task.WithSubOrchestratorAppID("App2"), // Here we set the target app ID which will execute this child workflow. ).Await(&output) + if err != nil { return nil, err } diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md index 67e4941f880..dd546f239ca 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md @@ -46,6 +46,12 @@ Child workflow also supports automatic retry policies. [Learn more about child workflows.]({{% ref "workflow-features-concepts.md#child-workflows" %}}) +### Multi-application workflows + +Multi-application workflows, enable you to orchestrate complex business processes that span across multiple applications. This allows a workflow to call activities or start child workflows in different applications, distributing the workflow execution while maintaining the security, reliability and durability guarantees of Dapr's workflow engine. + +[Learn more about multi-application workflows.]({{% ref "workflow-multi-app.md" %}}) + ### Timers and reminders Same as Dapr actors, you can schedule reminder-like durable delays for any time range. diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md index faa92d946ae..a0f0e66bbd4 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md @@ -615,8 +615,7 @@ await context.CallActivityAsync("PostResults", sum); {{< /tabpane >}} -With the release of 1.16, it's even easier to process workflow activities in parallel while putting an upper cap on -concurrency by using the following extension methods on the `WorkflowContext`: +You can process workflow activities in parallel while putting an upper cap on concurrency by using the following extension methods on the `WorkflowContext`: {{< tabpane text=true >}} @@ -1428,33 +1427,33 @@ The following diagram illustrates this flow. ```java public class PaymentProcessingWorkflow implements Workflow { - + @Override public WorkflowStub create() { return ctx -> { ctx.getLogger().info("Starting Workflow: " + ctx.getName()); var orderId = ctx.getInput(String.class); List compensations = new ArrayList<>(); - + try { // Step 1: Reserve inventory String reservationId = ctx.callActivity(ReserveInventoryActivity.class.getName(), orderId, String.class).await(); ctx.getLogger().info("Inventory reserved: {}", reservationId); compensations.add("ReleaseInventory"); - + // Step 2: Process payment String paymentId = ctx.callActivity(ProcessPaymentActivity.class.getName(), orderId, String.class).await(); ctx.getLogger().info("Payment processed: {}", paymentId); compensations.add("RefundPayment"); - + // Step 3: Ship order String shipmentId = ctx.callActivity(ShipOrderActivity.class.getName(), orderId, String.class).await(); ctx.getLogger().info("Order shipped: {}", shipmentId); compensations.add("CancelShipment"); - + } catch (TaskFailedException e) { ctx.getLogger().error("Activity failed: {}", e.getMessage()); - + // Execute compensations in reverse order Collections.reverse(compensations); for (String compensation : compensations) { @@ -1462,24 +1461,24 @@ public class PaymentProcessingWorkflow implements Workflow { switch (compensation) { case "CancelShipment": String shipmentCancelResult = ctx.callActivity( - CancelShipmentActivity.class.getName(), - orderId, + CancelShipmentActivity.class.getName(), + orderId, String.class).await(); ctx.getLogger().info("Shipment cancellation completed: {}", shipmentCancelResult); break; - + case "RefundPayment": String refundResult = ctx.callActivity( - RefundPaymentActivity.class.getName(), - orderId, + RefundPaymentActivity.class.getName(), + orderId, String.class).await(); ctx.getLogger().info("Payment refund completed: {}", refundResult); break; - + case "ReleaseInventory": String releaseResult = ctx.callActivity( - ReleaseInventoryActivity.class.getName(), - orderId, + ReleaseInventoryActivity.class.getName(), + orderId, String.class).await(); ctx.getLogger().info("Inventory release completed: {}", releaseResult); break; @@ -1494,7 +1493,7 @@ public class PaymentProcessingWorkflow implements Workflow { // Step 4: Send confirmation ctx.callActivity(SendConfirmationActivity.class.getName(), orderId, Void.class).await(); ctx.getLogger().info("Confirmation sent for order: {}", orderId); - + ctx.complete("Order processed successfully: " + orderId); }; } @@ -1597,7 +1596,7 @@ The compensation pattern ensures that your distributed workflows can maintain co - [Try out Dapr Workflows using the quickstart]({{% ref workflow-quickstart.md %}}) - [Workflow overview]({{% ref workflow-overview.md %}}) - [Workflow API reference]({{% ref workflow_api.md %}}) -- Try out the following examples: +- Try out the following examples: - [Python](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) - [JavaScript](https://github.com/dapr/js-sdk/tree/main/examples/workflow) - [.NET](https://github.com/dapr/dotnet-sdk/tree/master/examples/Workflow) diff --git a/daprdocs/static/images/workflow-overview/workflow-multi-app-callactivity.png b/daprdocs/static/images/workflow-overview/workflow-multi-app-callactivity.png new file mode 100644 index 0000000000000000000000000000000000000000..7b2a28561d804d02c526d4d4de297c652e9d9c50 GIT binary patch literal 59779 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டhj?Gs{mCB}xE$q4c`*bDOw8kQ@KsW;W>SlW8`JcN6V=eP(?JhNbhSQ* z6Q$7IW_MvspUDjeyhnPxmm6+8c-W8Zz#x_UWZnX<$l46|GrIG%?X|05QKW|nI<62r zKTh<~BV&ih-q7Gg&{W=E9uu1Ma*OySQkjAemzI2r>Ntg(|z=Z-zQKV7E9ze(jvy{R&smNSS=JQfwvL_7;np-3B8|kXD!;y z<|vecjmDGyrSM~ZUm?pdQ0%??0dY+fD)_lrPe+i*LYWeiS)cUNVTA1UgNc+~Iu=1^ zg+DS1osYn-qSy}Nt#g1!RCu5(N3MadgZ8&w9B!3eb8{g4KW6Qv|4 zsA$Ea*>s6XV6>EaB8)1PvM5^OUbc|HD?gqW{5 zkNGv~~i>Q0C+PK`|#-cy)`KZDEm|D+PyteravTutGviO$`m$HhQvsKEi-M z?7DS({!|bBi4-Q&nY^GuCT7F|hiTprpy{Z;SfTb$;iV`O3IyX^>y5VKt!{qnjvKKE zWrW$C{n3Qel)Sd+5grtKF58}Y)`{Id%^cq-n5WlQ{Woa?CZI#tU}f<9si3AJ3BkU; zzE0#YI&z}e_9nxug96(a#9tw~Es=J>JGS*Olr}b2Czn(3FN0Q`nu?iALmsQbTo^RP zhShe%K()pR8qW46SW#PX-K~B7Q|G2onBz44C%V=Fr@SQVt;k@ldky{rx^x63|5pp7 zn*5qnxm;b9kfHXEU~RI4`J!uey;Zs`e1UBsm=8&_Zy3reV3R#v_an~K8i=D~eUnwD zAnd}VS1%wSBJjGGPm~qpR)wH6%n@j^K3*tKZh9%ZQg?yJ-i}oe5dr(B%b%ikkQ~87 zIGh_M^r-;F0yNvb00?V=LX9sKNukNq^)S^$QRpXj#vcmoo>-$UKv7uZ@o25Y-YQK% zc}6pSJ%nph@`_)mCYVRu+?=M#dLvxJrc((V z!f-siFM8Amp|!$kGIrQB0VCs&Kl-ZsoeOqk%U(3M?a3^8;ujV^J_1DE``Fb&oo?^t zW}EEiOLOg}l32f_=1q54psjw|VlW(CdWl)bDgx*zVzaEFrrg4I&I}_ESIY8gBoBZ8 z8Bf#4D1`u1Yd$j_fOP+48~!wllwB zkD!dbA)*_;RUqODOz|tK=iq)YrOPKijSC-@} zN?J%`*Od&LQ*pwmOe!3}n@1a0!ujVa&L1|QmXick@&}cptsbqX6S}>uPgF$FZfXIg z4$+Tn4;Bw3{noS9GJ*Yy5lauT?>No-h*nY(5(0VIcE-@CeP}wuKiUBs)JPCp3A10| zWHRED@m!ZQ@vF%+c4@BY@5LJ6A7N%3oXX^GT)?{z}OSuIpyHeaTsno^mA8e@RHysN24@TV=ddBxwR|o((0t&9)Z0=WbZ0aPsk%(51 z)diN#wLnt?)}d$zZV$}O!FO6|@kmdajJnIHwed5(`8)>1k4kca6u)UL&1VPxfS1>7 z3k5*H!*GMyFROBzX%WI~P}>wP9tbx59w9^nxNPzsUXL3tG;YQpci*koIX-C`*GuAZ z$L00>;8M@)N-~62?dn8BpYQu%8B03QR=HN<4OSb>QoiZ=iz11xO}PM=niufX#V`R~ zUEgCdBZ-<07SWG%!zcFbm+2wWF%4Y>e29)56|Uw~sSeEzVJN-h`_ zf310N)u~ADy6Vj%9-zVB(~m0*T5(#(O=J+#jQv__n41ms2cGfdxNuwfu&73 zo?lvO9@z`87oOh>E}gpK5d>WNV*C1Shupw z(<1T-&KYi6fX&DRPHZBRTjgNnPrNpU6G0UKD*i$7r_2cUt@VJ>>6&i_pNN`$?KGr| zPEFeCvt(955Ij$98>4+HL-^uJU8{&;gGZ$GS^K7m5ra$l$rMsw3~ z#MLVmtVy<-V901{x!Je4m=cgW6{$<2C0^<64Mo8S9tKgJNmBIxPOxkws!sSUv`Wr* z&j1wGJqL}tVju8;FfCnONj237GZql_AMuOOkFO)y$G3iKkUT7jO*mgA5x>&?CX}$l z4L+uwqY`61lrYAFV!@#14QsPLlKKOEWby1q+@BaShE4)?MtxFzA9+^<#N*#3f#8bf zY##}fIYvad{&2mN#4L}Y`ngf~%d!NykxSG(Z;`J2tFzV4SwA8=oBiupLCWeeQuBs$ zI!nwd9$asys)kEFN_Hf41@ zQ~O4LfbTbdFfaLAW)f-8z!CD{DU~V83mcnPl6E~G;_gXc7%4@apIfqOmhfb=WpXt-m=XD+nh`;r(buX@2N|?hw1Y}vr5&^F_XZD+#QE;wMbejZe)2H zIObuN(|Z>9ZQ$B z=?I?$z#*r2!x!^_1QKRxL02Z6WcKXFYkyz#Wo8@13xC!x(HRe5$=YUkOs1`t0`qAC z=*=rDd?Z{b8h@G8Bb_HBCuK^?1onKKuBt|`I7RP zCw#o*)iTqL{-G*trTuKWKB47jW`^F|oOfyh#o%bOQ+am8B2c;rCl{SCh!PvF4@B`9 zOwxm2&$p`C#g|G7JbK5K|5+c=O(tpObJoF%WK(tRE=v~H=#yIIZb0R;KMm|=G>X(W zNh6}jHBDzKpidXdEqL7T4(VN8Zia!Q{6DP|M!$Ob8Q0@D%BbSxut$n0LJQ5qNGI3^ z%S|xgZo-6dD^~{TOjes1h+GhFj3J(GFFvAd{J806L7o_xTqrR3Z@!4#Vh0NNnDq7# zQ@`leW!cajr6phF`M~!*W)m7^z(fXrgZmek5eEy)H+?wjJ45op#9qw0iCtUrA$?DX zl!|J_9w>N~ia>M=af1HXI_6;JKXqd?V3Sa@L)`IZqp{uogB*#=kALFE31!F{j6mSK ziri?~AQr85&TW%!Eq}v4#nhMqE&JmVDhJ3}^IC_^{YAL|pFp*rQMtFGq}L$Def)vOIJl8d)XOnxB zJU1HcKU=~sK{IG%wl_?94ejNvPG>4=8L3U1$KubH*2M15UD0a&zZsascM>VG zCR15Kp6?&S#&-)D|3)py0o2EZa=n{1Siqp*S~@+5su(RWZJjyOBuxttj%Cq_D8}J! zvd0JdJu#|kaP9e|fd05=0owPocd~+)rArc9#kyw$@`>*Yc4uPfeR>s?7m3>Q3lcJUjlDou#5e--Tv zg`LDK*E_7Y+8yqWZ;xh?SZr8;4qQY|PB$ny0283Qo{RU4kHhXD?;Ou`;$F5NAymA7 zH~@7VCNPMnHCb}}7K&W`A-Aham4(k7JBE!g8K-quu!$9%T>o9Yc}Twka1G$4!XF#m*! z#ETz#!g>W$#~p|;y=is+IRE6dl;a=4q=eCw)}3;=yS{sgGRL&Bv9WxAFD}2BvI3S{ zCd`Aiy5s*?0PB1P%!^f@;POX#itvaLdICC}r14}+OkNH)#Y)u;=9v<6JE;=m>$Hqv zi!^oP5R@<+@c=!WV|K$>3twzIi`yD-9);F+aWdU-)c(2tqo+BV%8VN7dB$!io+<`t zSGLGDeIBihoV~L`|Bvr3mj!AslDVYqKBNz*-j2MkF~v8iF#lTK7|m3Q^TZh~DjBS& z#F;J?8MSK0P!{^K0%S!894L=}L(t-KVbK-F?_C(uW2! zGN?JRDXka*nI8}clOHHA_jG$eGKx3=#OBEH|FIXB(|XDo`2&E!h7-}rKKL~TpPj+J z2o2Oj!O?X$&}cIhGus1)n6)f%w}R(4XcIj!9mZ;lKPd}z2`%NZ4=*qzeJFIvBor)C z);lO;KhlC=93KYrkI}()PkuSEgM+C;Wg6?v`CN=?gy(<9t}GY$R>!bobp7=oWdFOR z^S9T+WLYNfJNvz18^Iico5p?=7ON-K%l)Zx+T5)w%yI`19oc+f)j(i0wR$!-;3Kx& zCiRbp*T+XW?&p{O935)E>sr$j5ltfSzQfm%Fk&@7zrOBuir%HN_fhp>|L4ut82KGa zjpUUP^NfPz7_q$)8ovv>HFAQbbNqoLF~bM-U=4&kOW z?0O>(IACn|+o#*OfBQ~kb?SB*p-v2JA?}Ra@e5QNNQGIvGh?ZXc}5LLheWoIA)?rH z{3S62m6!Q1y3_-;#p}>;ox}OJXd?kSCsJ3(NKPR54`kRQ(ecnY4_-R4`4ZwTGWC~U zjq4jW@+P`n+o~d8VZi6QgVdawSl}y|V{!ENX)7T{&6doH(?1}_CrUF;!(U+sv=v(o z7^!VuU>WoMa(jP25c7yHY6^et|M##qpt6(RJtTrn2r{lTvzQV2*uPs=JEMOth3N)j z>ev13_ZVZylG^k^^#l1(;r_iwwJrB=@y=fu8&Q9W#N$JX;kD#kY&`e3-QJld5|7?C zq>fF8uC6}aRb!zmxX0YarqUJv_f2Oe4V9?mG(kA=j$wD#yzaUpQily{ zT^1=Nn4}g}*Y8%&ys5_wv6*GlP*mI6+O`|r9GE`D#wjZPn)kT>cXD4r4{%ltCNj}L*ZpIZKgyh=5of2hC}}Cwv8oHj?8a(mKiD5Xui;Qica|L zxlull1+C`a6?-;73eA?vk3frir~eVNZ+LiE@e0VE+#V>IK!>@G>+FA?;Ty^v&T_n+ zH;1}ksSpkSKA)SOMkMs9fdUdAXC!Fl|ISpBliSXHHAX*vaid;Sa+JRgvc%sGom=_I z8+_?Byvk8OtpJ(_7|qL!L~Ij@#0~W_spaT^idgvIKqi%LHz<8Nd+*UWzd+_{BRx&( z^*G;o`QA&KgwurLgvYLl3(DDl<48hYaI{5wHw%QH_tvfr? zu<6jh2@1AEC(?i%Q3kDR^v(Zyw&#e|G>mJ)vO!t>|;dr-n{qnzwuKvxz9V zHv4peprYD%&Knr6*T(U`$&I>5$19aAT`%VbBRQSVWE#--=vo}!?fP4lB1 zF)i@Hv_R2$+-Lidz+daJilVt<_d~;q{p#jZO#ktoyyfY6%U2B(osp3-vE%k+n6N?O z!;Br>MD)Kz*+Mj^Qh90c3mZI()Z^#8<377#Wd6kK+n>Q+jY%UjCpU*`_%9cKhpuk4 zG5mqdgG6UQ9E-1|d(fQ$2tcC$P|6MP&2l}&;QMk(*^Hk^w=reUWT@H%KDScmKDOv6 zk6A2Rh6#5!YoxVTT?ZUYM;80qKk7;X&bvr7BEPv6g2Q6|_g?`A+Yi+O&V((0?iY(bhx%WUnnV?h@g<+$@Oy0ja?2KGnekX>b7EIjy&W-iBPRcsNh=C{f3fj(GTkfO zt-3pEGQAngWgNYg+&l6P1Dfyw3oj#BoYXP&x*_vQq+XP0H$jy*X~30~VQo;A(W=P( z!QAyFEQGkd#ufmvR_XX=w^VOMiUaQs3`jj~uQFNe_EL~t4;q_mjLMH^b=i#Y!j$PL zcyNM9Jk?zkPc*kI%O57SH{Ic8Xg|abM`437s$2lX#%=AZe5JWjgtn(wH+nBg6Llq;TgZDm=A$%TbPo00q~}*&psd&V;*E(VAF<$1Nq zi&8oC4dv5vO*`ij$kPhmFiW+W^ve@sC_B=Fdz&S(I?R>)TttvM`pSC-=Q?|82i4-z z?HVIz)xmWV(mE~%*6F`WG7n=cL06I;KWJ7pCYF_i_3BR|87V$s!ZSR?(EY= zqINdV=SiFj)d%uCgZ<*K<0nE%v|a6FI>8UbBmy%4tq#7^L0$*$LrG_Uyy8mBH3EE` z1-;8r9&XN!St~|jMwOI#1DZQw!}i<5DF~Ds1)>Wg93h*8r*p~(26E7xJw5mjazHp= z`sDfz98V=js`zhgb;&W7XR|Rco8=q)bGw5n7qeV!+g^dY+1Y-(Lk|0T8DvRMV0|*K zrpP#q3F6J=9*9>J0vFSM2^`dTb+__UAut z!*Ztcf`U6=lIm=D8Arr962XjNx#gvSU}CBb z?T+`IZ%{NeHV#t>c3-Nq^Kf(P?eEv>;MqCZ`G4*GWmH{D6E=zl0s(?sfFQx$-63dj z2o~Jk-GaLl!zDm)5AN>n?(Xh(CJEWe&ikGF>z*;ry<_Lc8f%2vYj#&xS3MwS`GDz3K00*c^6B!tN6y zP=+CRNyW_p6r3VZbJOqWKuN+}={~^V!y$YMi?hVweKWJLX>_q8%^!mP;>F8sZjO$A zn8l@HZ>*Hh$bh5b5|Ao#cU+oKqzkm5QxKtvv+Nw=2}&|Qt+R(<%);s>nKB)tT*1c# zPhkKIj8RJ;$(4?&GerK?iXAWjctLW2GMi1t7O>DjbB-Sd-jDzNX_06EkZ9+8?z{f4 zMg4x@zhOVhi2q5m|48!xJ(5_KPJJxWRG>h>!7(q@(`o#nAHH6I&dtrWB_zZrG`i1+ zV#OEHfxt^i=>)2&s$Eo@jx4}DF!c5dO=zg?Ivz^wU$XWe?roq3tk=Ts=`PV<7#S!{ z{>an0Du7$$zhQsU?Eg8ED4%`l>g{d4^Y*7RUlI?&VgUzIwf$Aw10Uh!Kf6LIjRZ3O z5vxT9OPIG{Jg1BMvL5ZQ*MSG0jZK6qJkAnY2<}ygZ$WKlWCGA63c{D^?}m7uZ=nl) z1+t)a&%pvkMBdftvQ61;c}qnWATUPLgmrv@C`UBFG=|g3ORiYTb3<2?616 zTbP-&@!~59h^WLDKuGBdI5Rxmq%2Xkg79j$_xV(fM~hcWts2l;IEYNUe0FWMvSB5d znIKDb0P*J*{&-u1xCa|y4=t9RLRnA+7FxKJLT;NE%L}MyG4M?h9DH{thA;j6!eM^z}7&t6-N(an5I5Nc4N-gN)_97k7FpqCl5` znDc{I@VC;SeSRP^_-4_OLHRtSzwY9Nw{TedHuSs9G#USYv=V@csj=x$M;p%rHk=Sopht1 z?ti`St4A|n5-xtN2Yu+SSLTY=7MA4ckK_6raQX^-7fskmO!h7=Ajy{63}Y5END*y! z_IrlhBvKX^k!q9~wMHE2JvAy67jA&7D@4P3?evMnu#|*`ZaNl-=(X;2g{28BC8EvJ1HPb4S_BVT9R@m;3CQX=^ni!$W8Sv zPe>9Ya;?jG!x7Pb)9C1dNqaIM_C{2={9ha%Aq6CayvIGOaU{Y+6pPG5;dgZN>yBC$ zkQd~AT^58O1D-TyCvBq40%n)_R82q3^m#Jrb1?iKPhDv~>UD5p-38Er-xJHXBZxk(P8hFwEEON zADw7<{@y-C@qQ8CXmy$#9dDX>!xkTXVbilpDnwxWJRSF|pu`tUJ|Mg7>ud1mN1(`x zdLOS%8lezB59n<#%oC#I&Buf|-($j(SV&n>AzmPmh`f2z5Encr++WvRXw1SPtjI5|$R{Y5DxPg&{~@IrvEK`3)@Q zEpBc5#xoX45auwJ1S71IN#ZuyvNgxUh<2>K&>jl5S^cJ;JOvwyFjB{?J-*w1iR%73 zDISDG(V(ThU1#a@^kAKu3MbvQ+sVe15@U&`3Di?U_g}W;qe>}se*jMhINf8A>nS=1 ziyv2)O2u1V=<=iUpTm4;0O8)<{tBe>FJjApSB03OLPo&o4cXz-MBqKeq;J4oMy3X` z*^&k@MxB|2R^l)}eBWjiuoWno>1aH=x7X|mm9^|XA*;9!!^p%|4{rA9ifjB!c6uZ{ zgcgKZ-kE3}^j(V`HV#QyZ7va^>PE~moG48m7$O8Yhr{@3d_wqg{u*x9XplT5gsNoh z#rIMlY7Vr$MsCBaCDw0P;esn(upOK)U`ZTUXZ@i#O@O&vuU?>Ak0M z1d{9iB?HEQo{c`GvmcNmNeBp@Zo5zZNTs-j$3if$LV`cFMwjB6Y4Sp_mK7f4O8tV) z)eP=D=#?_?fkD)97ayL%gbFWCbVFVYwxK`JS}^bu8;?@ULqA_FU93k4ID%3`gv@+WN@^V*~&pPG^F(qXb-7 z!)q-O_iO55G~AA0My!o>;=hHJN8WSG2`S8KnN3*W4 zg6e8fu2rCF7U&`JIrXo#-+osvNC^7J68gm)nsE=?(c$`uz@WqE7_c69E-)(2JtyBt zzJOm};!(4Qi@&XrzD{m5yj_F=D+%N^7Yd`(N;75C%KJnaN1kMe_#rM4_I|B&Kxibn zFSU6AYa?%qSVb0S^tAY4(uVdb-Du)sT3;T!w?%oo&H8VM$2$l#&6Oz$9X0I)pvNIH z$>APEci~lVf&4aTjOlCQ3|l0AZ%}D28 zr}7E7sThDWDe5$o>wKa#T%ePv@3BNgM6%m`O;MBkd;Ao)rwnObAZv^j5T%aU0Z}nH z)Nl}B(TYluVyIlXYKT>(immF(HL!7*+!3%FhFp-xKh^ii@+hL&2Xx-8{28X(CAKW_ zTnJjCt138yDgF~#f!WHxnooPA0;v>QX%3uBM6mOBg)jDLF2P8`UMZ%@c|v}$XiRm3 z^^w@|GIou7DN5soh)N$~;G_~$8i|1TY?(GW5f8+$(h{HAj5}!K%RTOKixX?00!kKH z=fy&5+Qh~7e#LUxW`)tt8z8_R=|JZ6<7(TVCzJFkAQ-!z6y-|dsR(o^?z9F+voGW9 zOxJ6a*dsJMWS&GMBN`T^{RAikuJK|!t3bcy&=i%B#qep-0ubF)I zeDH92yql6WRAcB%3~t-DsPlg{o)4rc2RY+L@oRQ1(mlN{7044wSd^{K#*+g4eI%y? ziR0hDmaGyY#OKJf4atKquJCa^7bIOG`_Kt>Y#KQ<%XKk&)S=gyY?Y-Y&NY zBQBP>peo}?@XM3rTm@kwYBmfyDzW(bv*-WzRJuk~92 zPs+2pyEB(urE0ivZpT-|66nDIV#Dsv`RJbE^tb+QMO-LMYLy}PcP+uA7&p6tZElxn zoIzX9(e!a%=y~%#-F3+F`gb!M}`n2Rd*U<&T#Z9+`U`m^6Gk@ttnMTqFsQJCn zLEAk;*2=(X{IgGL$UF2}dKfWrpo~pYgtfMZ*1`$X&M9X-IIKrEF9|K!!APXwwX&Ll zTHIvnDzxT3mNnO7IoZ(un-}!t2vWZquKt6ZTY=n`lnJ@CX*xPGC<^W$ZfMWwXhS=C z)UOCsxHYl<_&1S>kXzEiZFnP3OUAhP-LCsLUxL!N`@o!$Qqa*T3o*KAQ6kxwwomG* zd~jQ!#2xE=(!w&I*QjxC+TODXK!y@1NSK5Aw$93!e`^Q8O~?<}2wnV4`|t{oDTIA!u}D<}GcEQpLP+msKfH#z z9NGaW?4eLPpnoVQz{v?F$(@+Z6hs&nTI=zUfAw{dMXNo(wxg@-?R1bk-QF)}-aiyb zd+7L5;^m7)^AypV-FXL$xW7V-^CGOdNT*Td z%05eqk*7>g5q&dX*nClv=7U8h|LExlXOWl7pMLtltmkk}@L(rdvKh42Glb&tZX|Hn z+}YG$XREcODK#9>VfneKgb-wi2nXQA{ znw!L|3*}EnZgz}S7BrmSMYGe-rz!IQ-ftI-c!;NH;qXNzWeXP8%J`7@+a7x!C^B0L zI8Y^Cg-&y$KH6>?X7Gy+P+AWLwLGY(O54Ro_%|Q^I2}X?3$lt(1J5}GFy9_^1Fc5~ z29XcPruVZneM~8mySw~MPI(#CX+e6|=VA8QaKP6dz)wOu zPP$mrgM8S%A4ey^*)w;)pp)Y3(}Rq6hYUrL@YGd$yUx?__D~$GB#f3g_j45eTA(Ic zC{h>NGOZDXinw7LK94_^9l_Vi4w@p}XHBoLV4^g6Homt8kSx^)qtPr3wkNgme$ddK zZJU>O3)EKit^NfRemP|t?4B2Px7m3aRhv{kLqbAseY#_FvAKSla_!p}fhEIvv(*}r z;Q3Vf>!J>Ra!N4z((9An2!2@rUrH1%&4<2*3gARqa$~Km!nM`KJY~PT5>i#FS6qok z0D&no>rZrzwwkU5GNNhb)GxlHhZ69jPS}P8(eM=fEuRvBz&PpRtoWNZEh*6Uyi9fw%k+w%&uG(f^Z1=;S(;xV)+^0>0K`+vO-radO!u-=JN^pXGAM{ zx|&S~&*ra22elg=Ri|vh*14xbb}}8U=1&5`gWDlqQ8mXVjp^*&>!(WXCmx(1Gub`O z@>n`T`imQO9=h~s&&Z6{XmB>{&ALMtCpp7ipS|*sgu%{w$+Hrq=~GQ%9Ku_5NdP(aHopC=n}F*D#L4C){?tmYwfBtE zJb~d{F4VzUMX%o%! z5B3M&*!EX|%$0g4clXdGhQenFJ>O0mR2B>P*tPH}K3+9m#zxfz%r2Xx%IYStr9OVsuB<1q0Pc-tx-$gts`uw$#5D7@~?nw7~@Bw(!$-owx~l)?yzKvoe{1s_&m2HF@{f8>!jfwHnV zO>qf}>VO~Gy3MMnSp`c`yz$*B#{ZC2j6C#K)@tiS>11Op=3Jxm@GsYq=MsPutzbzE z4A7drvmhlaMj&~sQOkoN@DOr!(uKBgUJE?lsxD#)=*-b-oL z#>sZs(pa)RvWi!K`?KCXFZA_EYnP9NX%@(K^tox|ZIRF2vHbMnvq#1G(b=>XsuIy( z6htM9IJa{bRR1{sx6%iMZNuP0PSeT!ld+_KG2DYll!kf;w}7(K{ExCiv9tyF5$l%4 z<{rJ=LMk4FCKkje>nw!pTtrF@W1dqtmf@sh!hz91s4cO5`8`X_$S~0l+40t zK$vFG{pmaRzn1opk@w(0gxaWiY#989E&kuq{-)OdAM9HG7fT8C?_OZ^)Wo>*B-ftb38(Tx?7N$5)Bcta)Hp_V zj99-MZG~;{w>!My4p6p*^)A`QwwwLlZLv(X?w_shhQ^+@U3Nu_Ot>Nq@>s}5<=zkM^~Wr*UqIpsIQbhug+2Gm-{@AI(}sNG zIFcJyh?uZ|WZKbd>C~O9jV4&o?YpCHRr|>lTxJBNd^cc9u{s2S``J|Vqd_S*9JoDRo9Pw`tUyzx8a z{JF%o)2R@L-K{Cgp*}UQq=|4KZv2}R4__x9GR@8$q!90u$nN<{aeC!oy{nnzL7*nF z@wMj3z)HHawBe=~B3PO^vZt0FINb(gAq~a@@(!9|dj1Cb=25L3h~-ie?o$jGefNiZoj}X@uuD90QanY*8W)sodlP(6xJ}k#<4?wEc-~0Yi5FnI zb9G|aseY%Fx`tAdOe-@{Dwbz)Jfm*%98BKDIc7J`>Xp{uK#MHzPoF-KbNmQ26ry^T zlrZYZoU$iemG@M50f~xuo;@(bwCj~@l{ac-$u8|FfQ;vLbgXEmpJ+o)YMx8{D9_1E zgNrzlp1eV=h2Geds*HPsDTuo{p`?1Zjr)>IQ`FYT?MuU&-Jss8P8&70r`cAr=(XR4 z$&HvXOAIB0J1?KP;rZGuB*ws)W419%NlTy0T&u5y3&Qm^bw>@7FF5*;&Jsek6YP1-;#vHF0_J?}wjWR>p#;{>08S1Bsxsd8fD&*< z3^U`oty{&b-%)70&+4g?7_3xI1({>}f^$*YuYmp!vy}iF%j|mn{Kee+ivEr-^-Cd! zPG2RIimaw6sV%qyVpFSLMwMc`D*pCyiv4mATLu;()s8rk)uK+h_j)W>Su;U(5m`%A zI_5p)6naF!)t<#pTyf75Ivbc_%Qy81DvF8IMlZjAGNK;U@D6ZM7K)=fZ^|<1yE6Sg zf21QSv)Y_<=75JlTbckEiZ$=pDq-nZM#K%glHx~bHqdNTzp_S#lAzey@7q3f=!-Z= zA%5j>NX;MZ{o<06O#;h!=Kt2%4RsIkA)Q<)t$cf(5hBXa>Pk=XSjpwsx~XVXu>vlFy>9!DC_3jNNAP{keH_(9*NaF{*Y< z<8QU0@uPC(tHBtv%uGQ(I4*=JucIlzZpuWBcHeNW9lze)LhCTls!KTjAO3puu~SG} zA1`v}oEfTXR;%J6t1K}!r;Fi-3*345>VhB@~=M?dH?Ln;4O`>X+*| zj5(oW1vA-R@NHkTi3k@iUXiA>;P$izk{ zMeYPku2X*DDEQdvy_veF-PH4PUJYBvd-ZQg;lf*;$AG4QpBF04XFC$?{h)?GUx@uy zvISR#aOg9?Z&lzJ;$_BCB;CE0YWhEJk4KVTBLN7nZqFcQRERjPX3pmmb>bd5f{ecJ zLg4?9z#M#nc+T8{isJu}w4)Bd(%kd8LfyZ&iWj6B6)5*mU0d2(@Qyba()R8`#?C`3 z;bkj#;p8xKgdLImY7FVw>zNOKYc*0_Kq)U2fT+6GAk0)A+KF8R>PE%?Ju44TB1Fxo z(2tpi=zpUwfQY}-?f#GBcvA?CIUjE&{Hd!v-#%RXBj?5u{~LAyz*pqKFb{kg{&2JL z&q2VWkG1u}A%MC8e-i@8DFBKeq_pY$JqUP|^a~)Y(w3GR{~iSV{$~LIMEt*IdHHGV zvHz@2^9!hREl%;C6UrtAhF~NOJMlB;!=!ln7B^Y_IoXvu>t=%UdEYWKWmUUZ=D@wK z$CbA}c-$)9&O9cDY4U?gN=hCa9=7$VRTn55ldxv(vM0d#!(mffYXJG&C5Ceq9lJBX zNu93<1i*w4+?oHkP2emR1SK$j)d z# zeb76FYMyw&O?haGxueF4AyZ=a!j#wESDCULGp6u;zejyX1jufR<@DlFqK`fgsW+0V z`;Osv)l)uHVTe;g3$Ksv@H3z3$1{&XlMfk>;^t>h zRjOYscDvF)r%&1*Q2r>>Lj&^)1;|eAt?;L>^U+_e1-Ux!8P0+(sdu|j?{lr}d)P%q zrak1lNb_n=M3^{CcibD~xmGhDoS#!zQs@6xK6-c$z9`bQbiHmvpGC+^OY-%S)ooUI zhf+GgY&Wae97xmausZ&61ECNDgl)<%IJkSXds~;Ss_h^dOKo{eb4K*>9P=6hyHnwp zC>dpfekC3!>(`YTFJ?lHV(2bY?Z7)a2f7{l)LZkc>&+q7e?0V>LB79zXdQAF~FNL z#%x5T(Nb$?Zzm{e%?`(T!zRgjNc3G&!|O&Z;?qr8k`wdNboSXi3pd6r-Qy3+=5i{676xw2C%RCtu%YR5>XMUUE&M!qwptixK6g13jkIztY;l zik=55{XN4EMgRtb6QP^i8FRK;*=^Y{OXQWLRKt zyJP`!Xm2nBDY^TU@&5bu>Va*cn86ki@vST?DX+}!sgam>n(HuLE#APpz!-cKfp7iB zHSvAa$Fnuty$cJ`iAKJ!#s$54@5x!esuu;%t{*ppaA{D)d7b3$)Wt#VeYpdPhm5?z zeY^YQQ$kNLNKb^x*Jlz+-|&MV@k#BnDipVsqm%_rO84i}P>t_j80Vp)%7CC|iGgSc z3d*6#37n~&6%y@;flhX~^d!0=5(DvUo=4-DM>H_7bfj2iyy1F+_X!9X@DvCbIiH75 z3t8q>Mxp)g%xl?sciH|>tmKiAXZmG6m*EoPD`DAa8#OoYOBZ9{CGhd3wALbFF}HyV7aK)9H|hno zH}ULc7TZ{>_mc-nUc$ip8+JkYpS`LM$&e65xj)Z!udgFYtacSYfq$GFpKJpP@7IKE zk6XPwg(@IpwT60Mrqw#OPvBNioF%8)n%8MC}GPw)Y zDOs*%BX(Muwpbnks-|(>j-_N^>dfQK??Q}x3yE;H5`S5Nq!G*4Fh%Xi9hwk&w zPWA!doA_fo4r{84r`L1`K4G}=|BbBJX6e=H#N81bn~Y3eama}Po<<3+}70R zkMf9NprD|fHyW=``YxhI@0++Oog83DIS_cil0%LZMCFdi|@)VAI#+uYRPjS(!3O-VHct7LH2cPz#<*GqsuH=t$s&ed*`8{heaP(13su8k%Z> zadp?qp_j~->`UQBm*+tY_y9>7(a>!VeU?#;;9ZI4hFg_Hc;LR=4CK`2`O zlz6>eGpx}5H^akH+}TF5#92Tow7ShZ=0nXpWp~Xn@(hK>w!>mO)^c1+yZc?Ro=C`u z&#uj^5S+n%))SP2RYpr#RCT*{yVu6Pa+(IBJ`^+WOD*Ol3&Ne$-QRC;Cwz$9nhBCU z3$`Hycn9GnsCSQeK*yWnw{k`HMnzLdt@g!%|8P|Rz*WyRPw(|=&EgnN_f&LF_c)d% zB)r!8%&_|Clh+DPRWxq9MyMSpvuF@;^gf|dA}doT7j{D42kzuT7Ka$D8FZH{q$`#< zoviBzj=f)xgsl!SFgDIke03V4em7nWh%8^5&ph^bvIhYVY%K42QSowXu+~M>5oi-% z)dAEF;QvQfiFx=4fQwGUm($S=ZjCNex-vSY$j0Hau}!{5Iin(Ta+Hc>zS(sz-I!x3 zwYVJPmAdhziJ?NoWxMoqR}dKFFdOW8%A;p^cxz#D8$d=rVb`G4HatZ_OuV%gmp^<_ zM3dP*sfL1$y^4axbt&iw0nkUf6zm!74jTFZjq|Crsj2M(8|Lrbf{uvDG+azM9?y>X zs&#&^P+WiYMp4}@>(UZyQRPE3N*!l~?I(p94t0uqP9VxY@)L`!Tl|&n&sp_oW~56(GHzwy73b?}PaD6DpG;3%yzTY5_!J)r4Zd4kHQG(ON~;R+Y&Kxg#>kY=)AYzY&T0`P0#z}2}!evz-u`s zMWd19R3@7>%3*K5<776z>pInBCurvEvxYEH%qg`GhedtI`0F5g* z9Ue2o=<4i+)uySiZ4cWm)$OE*&>nN(d4fdfX?c7vU-s3odE{A-9MoHw3d#rB#k&ga z69aE|166l4Yd0~*LJJiHPwf6J!;dGYH;yGv{X$<5C3f@`zN~T9X7f||92)`+S11mX zrjiC@tg}QgnzEEv;|=h6d9_-mXVjwOu?F04?;;bP7nf_YGHZ!S=I2!J*9dx3@1fD2 z<74UwHNb*$IP8v9u#jwCzgjaI%}$ybAiB~7yQzN`abn*e&JXmD9!ZmhP}9?wv)`H+ z}R( z%GXWn>=nA7l-N=m4la;bWMl^WC_m>=zxw7(OtvUrfP3#~;{*l@nwsdYgiKPKQBzaX zz|A~Epm}e$IxlkGlIkec$DNbo$8(x#OhWWxzV}Q9l#nnCbdd}c(&s@rL_Aj<-Ojy7 zYb@PnHoTa>OYTqarwt7B?&G};4E!d>p0hY$9wd=v#2pN=263SeDt9`Gw1&1yKv0H^ z-}L!YrBvKKgCa-zjiEvx>&JkAurQedo2u=^YICbdjnip`+N764KD>sID=}59=R7AQ zuGh2i0~@rp0u8>PfF?U_;t|S}?_Q(cN#Ljw;A_IR`icgeE@luUBt4tuOzRhguM&@Y zzkfCv&)5#Del;+p*Dc88~fB^y^9og_++wq{?MohsE$gH6qD^SH6Z@D0!ta0p{ z?3f^zxHUVkdza@?6%g%z0hk@`RtRW!6T@sW)+ihQ|C76taR}bA?A3VsG>8JX3Nz%$Qv>AVpjI zw%SqP2}nKfu)-acnaY9pnEPGw^P~5I8pYqg+m5@!n+*BTq13{V7X3gA2wR|n-3UHc zwAt$S%gf8Q?H1+(@k&WsXDSwS_3tP2CYw-ju(RTsFqCgQIF#8i9y_GUx4K`lwz?rU-UTf67a9cNFH~x+#Opn=-zOHI5W#f{M<}L@)N) z(z_Z!$*($`q7V`CQLfpv`10aiJ)Ro!T&$dS2o(gpd``FD#}LxwCSc zzCH7TRdzh4xH4KH>6%YUJ%B`(bk}ZbT_(>nk>qQwGi=jre;bjI!_+V3&=$?)kRaPK z#BxQO;C@%>YE${I0M6QHjYGC)G`FPFH+UjX+~}L^PF*se%s=N}1vMSqw$#LZo8p@ognJV;~fV z0>@fOiJ$XXfz;;YVtCGJ43(~#AtdeswWqf~oYC5NF=#?i-j{De>+q1A22Vl2B-L=a znIy7iT_E5J1q*oMxET)OVSgfhJ|#eV1_;p9WO}UnqMeL=b|Be^S(GB>rk-O_!6$#~ zf39ybd(f$DJI=bRQYC_z{zRX&Cz6z#0w14wh;q47K6o$jYpIm$*XHWtcon&wkcf9S z^_PY7^LaqQ7fDy=bK8_P7N`#hLlR(|1hmUJO8TgCUJZ`2?B~(~guWC{aZPb8V?ndH z!Uzd>l7Wl)YmEI3(|}q7$Yz=GM38D0BkHY-o`u94(d;yhd0M$!YF4TKyXE;<`cr~k zp2B%HVh7iB1@41L<1?dFzwt9^)nQ$1YT8qx9dWQ>Rhf$+4T7f450$rs_~J^K=Z3>7 z^CtZ#L?4wT2zrP$#SL=ggXQOs`-ccGyStuG zv0OH>RknLOC|)qo#o*M_B>%lfQSZJnGBbXJ&&iVYB{Cqt zso^tN98>4HJAZ#M$M#xj+u_38|Dd1^ki7@)*lcQ-rl<+!7xan5?kV2sJY|wC?6M^I z4$E-9!m)as5{+G3OiL%*m<7Ww$n9H4Vl>1UGTbr?l)pgQ4e(36C{aTt@KX7N^Zmj?T#o~I@yTY2==>2RXecL^)&EOlG>p^&$Do0D_ zBQpC1UR4Qr`I?xLN$bNVMoE+zEmA)8bEZ-F!3@bZCyk~E2J4y3p{=1B&PP#{T(sMX z-u60Wj~C?OXA7c9d@OWuL1W_hl1$m#7eq@H5kfodZv*|A&Mc6*_9#sWwq@r0rI9%r zohuBBn0=YynE3geYmT%1wsDtgbc>*jbqgER{9m)l&IJ$w`Ag+{7;hWr_`J?^+Lc_3 z`tg07n^bxRhiD%UvX@S@Qk(tm=~T-GS%bA`S#yGB@)2Kbbjy4sDC5oFHen&Z5r|&l z(^Ul246o_f|9Kz=pcQTVTk zc=g<@h&%l{c@E7}K zHc`WAA*>f%AdUe8l zjIu+Ho&HtVF&eH%EknU?{SIX-ne2HZF+n^AJaMwLF@>lQYap}=1wQfHoTO_x zF$>I`+xa}JzD1Qb2644&+p&}IyHp5whYSFkv1go|=Zzd6Ke!kkEceF`-Y+PCH{lD+ z_94XT{lP0#)HEoa`#hkThI(q^t2{QI9-wangD;7LdkHVk`+A|yC_9Dboa&fKxDUiE zS~*f!rQ(J%_)Rz);_0;IhNf-~`Sf%5GMCfmWIefii*ag*`DJD*+hZCU7UumM_%3Du znE3PUPXMgQdBuQ$jh%OVee!l5x^HxXWo{(Xy-s&aOjk6$#k)3CCx?u;(&mbu37eT0 zDi1R{3&~&JFmlZ{TjQ#?hnu06?^@AxG}a)4%;1!H@|%#OkBEBoEl}rXsFww9)Q-R4 zt7aNde&eSy`iBdIJ$!up-4Sl=u-#mnnYPByL2Iwtz;3Tw6?a0hB(?EqTr(87S!G72 zGqNUcZy$U+*xaAj1ANL~q8_%>5n$ReznlhjQL1SW`$)a630Y!LDDee4{6_m+akU zWfI}Dkl))1e2cFF&YEm__R#*xc$A?Y64Y|rjo2|7^@-JD9tJUnmdfsw9ph4ec$TbxSrF;eI*-8@KOIY8>l#GBf@tJyQ(iWb zu!WLnwDo<`G8p)=r8r2qc#FxJNnO%rNR7lOeOp6=l*sH#IvVa`1)(n8BT*f+41oJ3 zBmm1`HI(*KNMY|-V8v3Dw?slfw>$%0q7q_;SC0$eoMQlW(3p@%D*?3moB_}E>-oD9 zvV)s-^A-WYY}r)jDF<4`ZWarkHQU+PjIF8SX~VXz&{%qlRl0&CQ-29aPWH^GCGC`x zo|662bq^6CG?U&fk}SzkW92HNYB;PesC`4HOsq~pGXsLSVsal^Y^+~20v?=RMq zq8T2U)58Sp-PtfxvZaPFlF8`EQ~kicR-V3*QAM@n=n3QWcWG+mjN(ASf-QF$4Fin+ zYV+zr5upi0T8buDt8c=9dxO(6--xWQ6+VWYqwLgVw!?|Cz`|f8E6tx~D_v`C+i^F{ zhJ%cXPIBDA#HJ=ns;WS-TWITJWNu_DF;iwdyff^gK$Blkt97n z%Y6O`A(4EzeD6y-p7Ro{@W&0OexQAdW)w(w6N4?+s zeAhNAx68k5V(D>hG%>h##)0d@a1_61V7MwZQyv?(!g@T-71ACm%&O=pEcRsNRCT+WV(0r4-Pw~3mIs}`L;+i~a{rz8?#IWt^09j6teoqq8OIgiBu#J&s~ zxI1l*gm?|VmT5A4RaL?d?RqL(rBA7rQN^@u+kdHMOUt9-ers8Fe77`@FX8&NUA#A- zsj2y@dt_1)Y3cmdB~!@OCz0CO%_XT%l%tT$^p)v7lb$7#g z6g3UlfJB`^gmC_0b4mMxnHF_^j%A8Rlu-FT<`iG)T>L3w!&>ObO4t}$0Iq&VRWMdN z>@L!n+hdxBgJA*c6GEXc1tu|ZrkeN1a<>Wg=GJqfSiVopc!SyMW(Mx+uRT9SOcd>V z^ofhu=4oB?JzNm+yBK2QTak%oy{6uzL~(@P?)9!kZrU|Ms`iO$5=xuZ@Ed6{(D5t$%T<9@ z7*q`O3CCKTGE!N(k3^4L3w>(i%l%D_@f(jp zNm5MPGf+J%aX5Eb$eOSg0LOeG{K^C)Zmo<#O<#h@Q z1ERD5?Na)9Xf)UDIo8%mQChL|yVaxPpn6>-;=20O6N~W{5$Vs4g9K8hO%%lJLi2q$ z69feM(LdN%{=r<952M!k;eO7v^>oX_gvg(q$_-%kDjFlELl37rY&eX~qW$k#IZ20v8@@_IQ zuJq3}-fus>r?5le85m11WFj*yE@c)yHqofpmFZtv*L<`&!T11_B(TvEl=yT1Jb0&5 z;JYT=l)-bME+H{ARh4reI!sWU5uflu7!xqt8N zUh%jondqBuv3${?5_IjSp3PH?;`SdA?fvtJWNIciuge65ugvuhxHwAp85AvsG-V64 zA}&R@5eY#oZc=tn~d_52s$pLZp0%fwH<6G~ftC;ZT@nXUZ>7*Y|51 z%qtfOn<#4->Apz$T&FskmbMkGgn|~g(z-#jhVA-1@#h)$;Dv;Wh=5Gi9F+f|+Z>=L z;5*CocDlLE>6_~GO_(o&8O|7Uta_9yWi$#Vz83HL+sf)5)g5zeU+v|UPEy_*@ocbU zEvv|Dt2?KUna=7-AsS-1xRyIi$dk3ra7wf36NO*Km6`M?9zWeDGh41dR$zw;ROl>C zh(*(<_fDr_tMw5`SCSzZ?a8mGG;om(Psu8#Z(EkF8|+K@!hENLMB03nkVkFQ8SB`N zU^Y`MHA+ArPm^2)7pp75G;HA>%*a4C)I&v4=4$Qb_TJ>i6n`~0MH%^S`O!9i;yHlK zddrjLGl#xO_Y*{X!5`@C(J$QPD8_FIoSI5eMz~vjz3U<@c`ca~qes2lg=F8xcRj)` zN#8_FlTM{lkde{HzV_Lr*qX6>W=ZQ4RGFr}Xz$A{&9Gw@7gHlMsWCjW=_pjvhDv&y z47UEFeHz;#n0B7-X`3hxK(i5v?UruG6-)_&v+p7T5L1MJ=YFsfytytTP-$qGm|#fa zyIxDlzF2&TO0i!b`Kz-2U}kfQL*+w~;THvViBpGDQ)rBj$OBT%leU=gqs5)>Mwn-! z;&)zW=T$k)f)y<*HZTNI63=#=SIOZ#mpyDM0^+&OH+P5D?8Od}vLwlVeYqOKISlqj zDr}Ueo6jm^nY2I4rB*TT&QPeRq}0X09u}BT%az5DSv6D0&JGAFo@<>7?^Eau!b`qV z(rX?~PO$-ayuk?iTUuJe8J+y92Z0SyPFDc>LkJ0wb$HZ;%{{6YZSUpN^bKq#Xxu5x zCZ+DTIe(mIK=zHI;o`}h>hwVVL=TX$4XxO5Ij+rB?W*;9)+xm_?K3HSzv5sP&m$rZ z^k*=b{@Jf`JAw>*0VA|Hg)ZZlX|+j!`|^j5lC}eT^F}V=9X--d0;!T5G=(^c2Ibh# zxaG}!=ZAn>#W`oP|G%FFpqRdE{Gu-Jf+0xcEvK^2`s2_4c*oBdEdpqVJU$xw-!|m~ zO$HyL5HA+leopp}k#ZFPT6j*f_CJ5XwJZVtk}BvJ_K2!~4??8|Lds2nl@EVdpz_?v z%xv(0wuS>Q13bi@-=R@fu$6F_=z|1@x~Mxp{1|5bfXLGg2hacte0>fHTwjVr7aS|2 zB1$|41Kgz=xGvXa4X*G* zvR`p|q$W8Wz`{gDb5SSsA5<*xe(4vuc!*ttsr$f-J)ps>Y>hQi6fvOJKRfmzgCVeT zd4_=7q&0apyvCj?hcbN(-Sd(HK}5*ajX?+CH-Jz{o-(uIr?yZ~E{;MXwHUEAh{T5n zGpHjRHoh|V+?2F{D8gXKEwTM_ILiZAJNYHsRVYA`igycS6kggrQ zo`8~|y}NG}W{-FI#%fxS$ThMN;zz<0;qY^(5I}+L;lq7niwLX%lF3u->RdjGI^pST zU-wi&>#~O2S=g?pD-h{u2n1JfKhn^nW-K>BDV>;j$8|K|dYAFY!3am7TE6MNH>Bvi zY0rU*1d3ay73hG5Pj9%pg|Iz^EjOAj3u$=Lgil~6Q~)hsEzcn@mW@5p{|prJ0_+G* z-(-F*RGH_NAA72}7$`!Sh@CuFzoGua;|}=G_%v{-sHjdLWZDpcEg*=Gf+xURT-{)> z2a}Y-bsc^&Yt`>f^bzTf!ADpi_M3p3udv{i!(o7j0r<|mzxCOkg1Y^f6)cYX4t$lV z<^6J9o8*uE8hF^Rsl(LsFO&dReQd16dN`*R^KP@p*F46ZLwb1JNLArLe3Gz*WW$00 zN3py(Yz9>RvUVZp2Wz2{0mJa^*c`qf1E+VDuge1=6U7q<8YmZpCS?L0_7uBLDi<0cIBwEZ%~@ zJeZF@n}1t2zh!`jM+P8m9LZ;3Ui>%@e|$JVMnqT&V{L%{F{>Z1Nqjh+S(Xg%9ya8U z0bnzD0Ce~nBmCnHz^WWY0f$jWQ}2HZ`Ax6?cI5w;SgYx|#PLV~#*gHOKaVLSn3@L$ z(rb7S?0+8xKrOfc=eq{YM(E#uMF2Mp0Pb@zE->5QyzuyKAHb~#>OB~bnC`bQcnu&8 z#1n*pKM&iFvsXg`oH!RcgO=aV{`>|^%ST{8+r5NrX_ z@!vxJO|SoUL&yGiM*fppf6Czh58`*>{z)d7l@O@bC+8=?KM_GmfqXtqum1}c CL(O{t literal 0 HcmV?d00001 diff --git a/daprdocs/static/images/workflow-overview/workflow-multi-app-child-workflow.png b/daprdocs/static/images/workflow-overview/workflow-multi-app-child-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5cec79b38507d6a461a852fc48f02eb6730fe4 GIT binary patch literal 83374 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 Q3;5Hzrhm2M%H7BR1)bF4VE_OC literal 0 HcmV?d00001 From 8c611f5e34c258258d66bdf3c9f9cf6d3ec4b184 Mon Sep 17 00:00:00 2001 From: Mark Fussell Date: Tue, 9 Sep 2025 21:26:45 -0700 Subject: [PATCH 02/30] Update README with clearer navigation instructions Clarified instructions for navigating to the docs repo root folder and updated submodule instructions. Signed-off-by: Mark Fussell --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3af7bb0833e..075cc139434 100644 --- a/README.md +++ b/README.md @@ -68,13 +68,9 @@ Continue with the [Run local server](#run-local-server) steps. 1. Ensure pre-requisites are installed. 1. [Fork](https://github.com/dapr/docs/fork) and clone this repository. -1. Change to daprdocs directory: +1. Make sure you are in the root folder for the docs repo. You should find a hugo.yaml file in this directory. -```sh -cd ./daprdocs -``` - -4. Update submodules: +1. Update submodules: ```sh git submodule update --init --recursive From f65aaeccb6543559b7de9ef92df4ca47a619fa04 Mon Sep 17 00:00:00 2001 From: msfussell Date: Tue, 9 Sep 2025 21:48:51 -0700 Subject: [PATCH 03/30] Update Alpha APIs doc --- daprdocs/content/en/operations/support/alpha-beta-apis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/daprdocs/content/en/operations/support/alpha-beta-apis.md b/daprdocs/content/en/operations/support/alpha-beta-apis.md index f8dd6e3ce11..6706d8b4a6c 100644 --- a/daprdocs/content/en/operations/support/alpha-beta-apis.md +++ b/daprdocs/content/en/operations/support/alpha-beta-apis.md @@ -16,6 +16,7 @@ description: "List of current alpha and beta APIs" | Bulk Subscribe | [Bulk subscribe proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/appcallback.proto#L57) | N/A | The bulk subscribe application callback receives multiple messages from a topic in a single call. | [Bulk Publish and Subscribe API]({{% ref "pubsub-bulk.md" %}}) | v1.10 | | Cryptography | [Crypto proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L118) | `v1.0-alpha1/crypto` | The cryptography API enables you to perform **high level** cryptography operations for encrypting and decrypting messages. | [Cryptography API]({{% ref "cryptography-overview.md" %}}) | v1.11 | | Jobs | [Jobs proto](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto#L212-219) | `v1.0-alpha1/jobs` | The jobs API enables you to schedule and orchestrate jobs. | [Jobs API]({{% ref "jobs-overview.md" %}}) | v1.14 | +| Streaming Subscription | [Streaming Subscription proto](https://github.com/dapr/dapr/blob/310c83140b2f0c3cb7d2bef19624df88af3e8e0a/dapr/proto/runtime/v1/dapr.proto#L454) | N/A | Subscription is defined in the application code. Streaming subscriptions are dynamic, meaning they allow for adding or removing subscriptions at runtime. | [Streaming Subscription API]({{% ref "subscription-methods/#streaming-subscriptions" %}}) | v1.14 | | Conversation | [Conversation proto](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto#L221-222) | `v1.0-alpha1/conversation` | Converse between different large language models using the conversation API. | [Conversation API]({{% ref "conversation-overview.md" %}}) | v1.15 | From 62f930f01f07c03e9e4ecfd3ca2fac4b1b1328ef Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 10 Sep 2025 10:49:52 -0500 Subject: [PATCH 04/30] feat: conversation api toolcalling support documentation (#4769) * docs: add tool call support in conversation api docs Signed-off-by: Samantha Coyle * fix: address feedback Signed-off-by: Samantha Coyle --------- Signed-off-by: Samantha Coyle Signed-off-by: Marc Duiker Co-authored-by: Mark Fussell Co-authored-by: Marc Duiker --- .../conversation/conversation-overview.md | 18 +- .../en/operations/support/alpha-beta-apis.md | 3 +- .../en/reference/api/conversation_api.md | 186 +++++++++++++++--- 3 files changed, 174 insertions(+), 33 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md b/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md index 4f98d726a12..7f05b660466 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md @@ -14,7 +14,12 @@ Dapr's conversation API reduces the complexity of securely and reliably interact Diagram showing the flow of a user's app communicating with Dapr's LLM components. -In additon to enabling critical performance and security functionality (like [prompt caching]({{% ref "#prompt-caching" %}}) and [PII scrubbing]({{% ref "#personally-identifiable-information-pii-obfuscation" %}})), you can also pair the conversation API with Dapr functionalities, like: +In addition to enabling critical performance and security functionality (like [prompt caching]({{% ref "#prompt-caching" %}}) and [PII scrubbing]({{% ref "#personally-identifiable-information-pii-obfuscation" %}})), the conversation API also provides: + +- **Tool calling capabilities** that allow LLMs to interact with external functions and APIs, enabling more sophisticated AI applications +- **OpenAI-compatible interface** for seamless integration with existing AI workflows and tools + +You can also pair the conversation API with Dapr functionalities, like: - Resiliency circuit breakers and retries to circumvent limit and token errors, or - Middleware to authenticate requests coming to and from the LLM @@ -45,6 +50,17 @@ The PII scrubber obfuscates the following user information: - SHA-256 hex - MD5 hex +### Tool calling support + +The conversation API supports advanced tool calling capabilities that allow LLMs to interact with external functions and APIs. This enables you to build sophisticated AI applications that can: + +- Execute custom functions based on user requests +- Integrate with external services and databases +- Provide dynamic, context-aware responses +- Create multi-step workflows and automation + +Tool calling follows [OpenAI's function calling format](https://platform.openai.com/docs/guides/function-calling), making it easy to integrate with existing AI development workflows and tools. + ## Demo Watch the demo presented during [Diagrid's Dapr v1.15 celebration](https://www.diagrid.io/videos/dapr-1-15-deep-dive) to see how the conversation API works using the .NET SDK. diff --git a/daprdocs/content/en/operations/support/alpha-beta-apis.md b/daprdocs/content/en/operations/support/alpha-beta-apis.md index 6706d8b4a6c..8b1d81e8218 100644 --- a/daprdocs/content/en/operations/support/alpha-beta-apis.md +++ b/daprdocs/content/en/operations/support/alpha-beta-apis.md @@ -17,8 +17,7 @@ description: "List of current alpha and beta APIs" | Cryptography | [Crypto proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L118) | `v1.0-alpha1/crypto` | The cryptography API enables you to perform **high level** cryptography operations for encrypting and decrypting messages. | [Cryptography API]({{% ref "cryptography-overview.md" %}}) | v1.11 | | Jobs | [Jobs proto](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto#L212-219) | `v1.0-alpha1/jobs` | The jobs API enables you to schedule and orchestrate jobs. | [Jobs API]({{% ref "jobs-overview.md" %}}) | v1.14 | | Streaming Subscription | [Streaming Subscription proto](https://github.com/dapr/dapr/blob/310c83140b2f0c3cb7d2bef19624df88af3e8e0a/dapr/proto/runtime/v1/dapr.proto#L454) | N/A | Subscription is defined in the application code. Streaming subscriptions are dynamic, meaning they allow for adding or removing subscriptions at runtime. | [Streaming Subscription API]({{% ref "subscription-methods/#streaming-subscriptions" %}}) | v1.14 | -| Conversation | [Conversation proto](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto#L221-222) | `v1.0-alpha1/conversation` | Converse between different large language models using the conversation API. | [Conversation API]({{% ref "conversation-overview.md" %}}) | v1.15 | - +| Conversation | [Conversation proto](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto#L226) | `v1.0-alpha2/conversation` | Converse between different large language models using the conversation API. | [Conversation API]({{% ref "conversation-overview.md" %}}) | v1.15 | ## Beta APIs diff --git a/daprdocs/content/en/reference/api/conversation_api.md b/daprdocs/content/en/reference/api/conversation_api.md index 1a4e006b348..8b04ee8f585 100644 --- a/daprdocs/content/en/reference/api/conversation_api.md +++ b/daprdocs/content/en/reference/api/conversation_api.md @@ -10,14 +10,16 @@ weight: 1400 The conversation API is currently in [alpha]({{% ref "certification-lifecycle.md#certification-levels" %}}). {{% /alert %}} -Dapr provides an API to interact with Large Language Models (LLMs) and enables critical performance and security functionality with features like prompt caching and PII data obfuscation. +Dapr provides an API to interact with Large Language Models (LLMs) and enables critical performance and security functionality with features like prompt caching, PII data obfuscation, and tool calling capabilities. + +Tool calling follow's OpenAI's function calling format, making it easy to integrate with existing AI development workflows and tools. ## Converse -This endpoint lets you converse with LLMs. +This endpoint lets you converse with LLMs using the Alpha2 version of the API, which provides enhanced tool calling support and alignment with OpenAI's interface. ``` -POST http://localhost:/v1.0-alpha1/conversation//converse +POST http://localhost:/v1.0-alpha2/conversation//converse ``` ### URL parameters @@ -30,34 +32,117 @@ POST http://localhost:/v1.0-alpha1/conversation//converse | Field | Description | | --------- | ----------- | +| `name` | The name of the conversation component. Required | +| `contextId` | The ID of an existing chat (like in ChatGPT). Optional | | `inputs` | Inputs for the conversation. Multiple inputs at one time are supported. Required | -| `cacheTTL` | A time-to-live value for a prompt cache to expire. Uses Golang duration format. Optional | -| `scrubPII` | A boolean value to enable obfuscation of sensitive information returning from the LLM. Set this value if all PII (across contents) in the request needs to be scrubbed. Optional | -| `temperature` | A float value to control the temperature of the model. Used to optimize for consistency and creativity. Optional | +| `parameters` | Parameters for all custom fields. Optional | | `metadata` | [Metadata](#metadata) passed to conversation components. Optional | +| `scrubPii` | A boolean value to enable obfuscation of sensitive information returning from the LLM. Optional | +| `temperature` | A float value to control the temperature of the model. Used to optimize for consistency (0) or creativity (1). Optional | +| `tools` | Tools register the tools available to be used by the LLM during the conversation. Optional | +| `toolChoice` | Controls which (if any) tool is called by the model. Values: `auto`, `required`, or specific tool name. Defaults to `auto` if tools are present. Optional | #### Input body | Field | Description | | --------- | ----------- | -| `content` | The message content to send to the LLM. Required | -| `role` | The role for the LLM to assume. Possible values: 'user', 'tool', 'assistant' | -| `scrubPII` | A boolean value to enable obfuscation of sensitive information present in the content field. Set this value if PII for this specific content needs to be scrubbed exclusively. Optional | +| `messages` | Array of conversation messages. Required | +| `scrubPii` | A boolean value to enable obfuscation of sensitive information present in the content field. Optional | + +#### Message types + +The API supports different message types: + +- **`ofDeveloper`**: Developer role messages with optional name and content +- **`ofSystem`**: System role messages with optional name and content +- **`ofUser`**: User role messages with optional name and content +- **`ofAssistant`**: Assistant role messages with optional name, content, and tool calls +- **`ofTool`**: Tool role messages with tool ID, name, and content + +#### Tool calling + +Tools can be defined using the `tools` field with function definitions: + +| Field | Description | +| --------- | ----------- | +| `function.name` | The name of the function to be called. Required | +| `function.description` | A description of what the function does. Optional | +| `function.parameters` | JSON Schema object describing the function parameters. Optional | -### Request content example +### Request content examples + +#### Basic conversation ```json REQUEST = { - "inputs": [ - { - "content": "What is Dapr?", - "role": "user", // Optional - "scrubPII": "true", // Optional. Will obfuscate any sensitive information found in the content field + "name": "openai", + "inputs": [{ + "messages": [{ + "of_user": { + "content": [{ + "text": "What is Dapr?" + }] + } + }] + }], + "parameters": {}, + "metadata": {} +} +``` + +#### Conversation with tool calling + +```json +{ + "name": "openai", + "inputs": [{ + "messages": [{ + "of_user": { + "content": [{ + "text": "What is the weather like in San Francisco in celsius?" + }] + } + }], + "scrub_pii": false + }], + "parameters": { + "max_tokens": { + "@type": "type.googleapis.com/google.protobuf.Int64Value", + "value": "100" }, - ], - "cacheTTL": "10m", // Optional - "scrubPII": "true", // Optional. Will obfuscate any sensitive information returning from the LLM - "temperature": 0.5 // Optional. Optimizes for consistency (0) or creativity (1) + "model": { + "@type": "type.googleapis.com/google.protobuf.StringValue", + "value": "claude-3-5-sonnet-20240620" + } + }, + "metadata": { + "api_key": "test-key", + "version": "1.0" + }, + "scrub_pii": false, + "temperature": 0.7, + "tools": [{ + "function": { + "name": "get_weather", + "description": "Get the current weather for a location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA" + }, + "unit": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use" + } + }, + "required": ["location"] + } + } + }], + "tool_choice": "auto" } ``` @@ -71,21 +156,62 @@ Code | Description ### Response content +#### Basic conversation response + ```json -RESPONSE = { - "outputs": { - { - "result": "Dapr is distribution application runtime ...", - "parameters": {}, - }, - { - "result": "Dapr can help developers ...", - "parameters": {}, - } - }, +RESPONSE = { + "outputs": [{ + "choices": [{ + "finish_reason": "stop", + "index": 0, + "message": { + "content": "Dapr is a distributed application runtime that makes it easy for developers to build resilient, stateless and stateful applications that run on the cloud and edge.", + "tool_calls": [] + } + }] + }] +} +``` + +#### Tool calling response + +```json +{ + "outputs": [{ + "choices": [{ + "finish_reason": "tool_calls", + "index": 0, + "message": { + "content": null, + "tool_calls": [{ + "id": "call_123", + "function": { + "name": "get_weather", + "arguments": "{\"location\": \"San Francisco, CA\", \"unit\": \"celsius\"}" + } + }] + } + }] + }] } ``` +### Tool choice options + +The `tool_choice` is an optional parameter that controls how the model can use available tools: + +- **`auto`**: The model can pick between generating a message or calling one or more tools (default when tools are present) +- **`required`**: Requires one or more functions to be called +- **`{tool_name}`**: Forces the model to call a specific tool by name + +## Legacy Alpha1 API + +The previous Alpha1 version of the API is still supported for backward compatibility but is deprecated. For new implementations, use the Alpha2 version described above. + +``` +POST http://localhost:/v1.0-alpha1/conversation//converse +``` + ## Next steps - [Conversation API overview]({{% ref conversation-overview.md %}}) From 94668b694996da5c157a06df610c4bb07a6ef1c8 Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Wed, 10 Sep 2025 22:41:19 +0100 Subject: [PATCH 05/30] Workflow multi app typo (#4876) * Update Alpha APIs doc * Fixed typos and rephrased a confusing sentence Signed-off-by: Bilgin Ibryam * Reverting accidental changes Signed-off-by: Bilgin Ibryam --------- Signed-off-by: Bilgin Ibryam Co-authored-by: msfussell --- .../building-blocks/workflow/workflow-multi-app.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md index e74954e23de..3f4fca6e5e4 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md @@ -6,7 +6,7 @@ weight: 7000 description: "Executing workflows across multiple applications" --- -It is often the case that a single workflow spans multiple applications, microservices, or programing languages. +It is often the case that a single workflow spans multiple applications, microservices, or programming languages. This is where an activity or a child workflow will be executed on a different application than the one hosting the parent workflow. Some scenarios where this is useful include: @@ -16,15 +16,15 @@ Some scenarios where this is useful include: - Different parts of the workflow need to be executed in different trust zones or networks. - Different parts of the workflow need to be executed in different geographic regions due to data residency requirements. - An involved business process spans multiple teams or departments, each owning their own application. -- Implementation of a workflow spans different programming lanaguages based on team expertise or existing codebases. +- Implementation of a workflow spans different programming languages based on team expertise or existing codebases. - Different team boundaries or microservice ownership. ## Multi-application workflows Like all building blocks in Dapr, workflow execution routing is based on the [App ID of the hosting Dapr application]({{% ref "security-concept.md#application-identity" %}}). -By default, the full workflow execution is hosted on the app ID that started the workflow. -This workflow will be executed across all replicas of that app ID, not just the single replica which scheduled the workflow. +By default, the full workflow execution is hosted on the app ID that started the workflow. This workflow can be executed across any replicas of that app ID, not just the single replica which scheduled the workflow. + It is possible to execute activities or child workflows on different app IDs by specifying the target app ID parameter, inside the workflow execution code. Upon execution, the target app ID will execute the activity or child workflow, and return the result to the parent workflow of the originating app ID. @@ -50,7 +50,7 @@ When calling multi-application activities or child workflows: - If the target application exists but doesn't contain the specified activity or workflow, the call will return an error. - Standard workflow retry policies apply to multi-application calls. -It is paramount that there is co-ordination between the teams owning the different app IDs to ensure that the activities and child workflows are defined and available when needed. +It is paramount that there is coordination between the teams owning the different app IDs to ensure that the activities and child workflows are defined and available when needed. ## Multi-application activity example From 79c66133f052887be468583ea897956ca3600af5 Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Thu, 11 Sep 2025 23:02:25 +0100 Subject: [PATCH 06/30] docs: add Dapr Agents references to core documentation pages (#4870) * docs: add Dapr Agents documentation references across core pages (fixes #4869) Signed-off-by: Bilgin Ibryam * Addressing the feedback in the pr Signed-off-by: Bilgin Ibryam --------- Signed-off-by: Bilgin Ibryam Co-authored-by: Mark Fussell --- daprdocs/content/en/concepts/overview.md | 8 ++++++++ daprdocs/content/en/concepts/terminology.md | 10 ++++++---- .../content/en/developing-applications/sdks/_index.md | 6 ++++++ .../content/en/getting-started/quickstarts/_index.md | 3 ++- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/daprdocs/content/en/concepts/overview.md b/daprdocs/content/en/concepts/overview.md index 273ab87e698..881c5fd521d 100644 --- a/daprdocs/content/en/concepts/overview.md +++ b/daprdocs/content/en/concepts/overview.md @@ -141,6 +141,14 @@ Dapr can be used from any developer framework. Here are some that have been inte | [JavaScript](https://github.com/dapr/js-sdk) | [Express](https://expressjs.com/) | Build Express applications with Dapr APIs | [PHP]({{% ref php %}}) | | You can serve with Apache, Nginx, or Caddyserver. +#### Dapr Agents + +![Dapr Agents Overview](/images/dapr-agents/concepts-agents-overview.png) + + +[Dapr Agents]({{% ref "../developing-applications/dapr-agents" %}}) is a Python framework for building intelligent, durable agents powered by LLMs. It provides agent-centric capabilities such as tool calling, memory management, [MCP support](https://modelcontextprotocol.io/) and agent orchestration, while leveraging Dapr for durability, observability, and security, at scale. + + #### Integrations and extensions Visit the [integrations]({{% ref integrations %}}) page to learn about some of the first-class support Dapr has for various frameworks and external products, including: diff --git a/daprdocs/content/en/concepts/terminology.md b/daprdocs/content/en/concepts/terminology.md index 1c74bf22366..da9b4f08030 100644 --- a/daprdocs/content/en/concepts/terminology.md +++ b/daprdocs/content/en/concepts/terminology.md @@ -10,15 +10,17 @@ This page details all of the common terms you may come across in the Dapr docs. | Term | Definition | More information | |:-----|------------|------------------| -| App/Application | A running service/binary, usually one that you as the user create and run. +| App/Application | A running service/binary, usually one that you as the user create and run. | Building block | An API that Dapr provides to users to help in the creation of microservices and applications. | [Dapr building blocks]({{% ref building-blocks-concept %}}) | Component | Modular types of functionality that are used either individually or with a collection of other components, by a Dapr building block. | [Dapr components]({{% ref components-concept %}}) | Configuration | A YAML file declaring all of the settings for Dapr sidecars or the Dapr control plane. This is where you can configure control plane mTLS settings, or the tracing and middleware settings for an application instance. | [Dapr configuration]({{% ref configuration-concept %}}) | Dapr | Distributed Application Runtime. | [Dapr overview]({{% ref overview %}}) +| Dapr Actors | A Dapr building block that implements the virtual actor pattern for building stateful, single-threaded objects with identity, lifecycle, and concurrency management. | [Actors overview]({{% ref actors-overview %}}) +| Dapr Agents | A developer framework built on top of Dapr Python SDK for creating durable agentic applications powered by LLMs. | [Dapr Agents]({{% ref "../developing-applications/dapr-agents" %}}) | Dapr control plane | A collection of services that are part of a Dapr installation on a hosting platform such as a Kubernetes cluster. This allows Dapr-enabled applications to run on the platform and handles Dapr capabilities such as actor placement, Dapr sidecar injection, or certificate issuance/rollover. | [Self-hosted overview]({{% ref self-hosted-overview %}})
[Kubernetes overview]({{% ref kubernetes-overview %}}) +| Dapr Workflows | A Dapr building block for authoring code-first workflows with durable execution that survive crashes, support long-running processes, and enable human-in-the-loop interactions. | [Workflow overview]({{% ref workflow-overview %}}) | HTTPEndpoint | HTTPEndpoint is a Dapr resource use to identify non-Dapr endpoints to invoke via the service invocation API. | [Service invocation API]({{% ref service_invocation_api %}}) | Namespacing | Namespacing in Dapr provides isolation, and thus provides multi-tenancy. | Learn more about namespacing [components]({{% ref component-scopes %}}), [service invocation]({{% ref service-invocation-namespaces %}}), [pub/sub]({{% ref pubsub-namespaces %}}), and [actors]({{% ref namespaced-actors %}}) | Self-hosted | Windows/macOS/Linux machine(s) where you can run your applications with Dapr. Dapr provides the capability to run on machines in "self-hosted" mode. | [Self-hosted mode]({{% ref self-hosted-overview %}}) -| Service | A running application or binary. This can refer to your application or to a Dapr application. -| Sidecar | A program that runs alongside your application as a separate process or container. | [Sidecar pattern](https://docs.microsoft.com/azure/architecture/patterns/sidecar) - +| Service | A running application or binary. This can refer to your application or to a Dapr application. +| Sidecar | A program that runs alongside your application as a separate process or container. | [Sidecar pattern](https://docs.microsoft.com/azure/architecture/patterns/sidecar) diff --git a/daprdocs/content/en/developing-applications/sdks/_index.md b/daprdocs/content/en/developing-applications/sdks/_index.md index 079a06d3297..1982360b30e 100644 --- a/daprdocs/content/en/developing-applications/sdks/_index.md +++ b/daprdocs/content/en/developing-applications/sdks/_index.md @@ -31,6 +31,12 @@ Select your [preferred language below]({{% ref "#sdk-languages" %}}) to learn mo | [C++](https://github.com/dapr/cpp-sdk) | In development | ✔ | | | | [Rust]({{% ref rust %}}) | In development | ✔ | | ✔ | | + +## Frameworks + +| Framework | Language | Status | Description | +|----------------------------------------|:----------------------|:---------------|:-----------------:| +| [Dapr Agents]({{% ref "../dapr-agents" %}}) | Python | In development | A framework for building LLM-powered autonomous agents that leverages Dapr's distributed systems capabilities for durable execution, with built-in security, observability, and state management. | ## Further reading - [Serialization in the Dapr SDKs]({{% ref sdk-serialization.md %}}) diff --git a/daprdocs/content/en/getting-started/quickstarts/_index.md b/daprdocs/content/en/getting-started/quickstarts/_index.md index 102aae1f5b2..6b5d17f6553 100644 --- a/daprdocs/content/en/getting-started/quickstarts/_index.md +++ b/daprdocs/content/en/getting-started/quickstarts/_index.md @@ -25,6 +25,7 @@ Hit the ground running with our Dapr quickstarts, complete with code samples aim | [Service Invocation]({{% ref serviceinvocation-quickstart %}}) | Synchronous communication between two services using HTTP or gRPC. | | [Publish and Subscribe]({{% ref pubsub-quickstart %}}) | Asynchronous communication between two services using messaging. | | [Workflow]({{% ref workflow-quickstart %}}) | Orchestrate business workflow activities in long running, fault-tolerant, stateful applications. | +| [Agents]({{% ref dapr-agents-quickstarts.md %}}) | Build LLM-powered autonomous agentic applications. | | [State Management]({{% ref statemanagement-quickstart %}}) | Store a service's data as key/value pairs in supported state stores. | | [Bindings]({{% ref bindings-quickstart %}}) | Work with external systems using input bindings to respond to events and output bindings to call operations. | | [Actors]({{% ref actors-quickstart %}}) | Run a microservice and a simple console client to demonstrate stateful object patterns in Dapr Actors. | @@ -33,4 +34,4 @@ Hit the ground running with our Dapr quickstarts, complete with code samples aim | [Resiliency]({{% ref resiliency %}}) | Define and apply fault-tolerance policies to your Dapr API requests. | | [Cryptography]({{% ref cryptography-quickstart %}}) | Encrypt and decrypt data using Dapr's cryptographic APIs. | | [Jobs]({{% ref jobs-quickstart %}}) | Schedule, retrieve, and delete jobs using Dapr's jobs APIs. | -| [Conversation]({{% ref conversation-quickstart %}}) | Securely and reliably interact with Large Language Models (LLMs). | \ No newline at end of file +| [Conversation]({{% ref conversation-quickstart %}}) | Securely and reliably interact with Large Language Models (LLMs). | From 95f444243533b2a9242d5e75067bbdca8b902872 Mon Sep 17 00:00:00 2001 From: Josh van Leeuwen Date: Fri, 12 Sep 2025 01:06:00 -0400 Subject: [PATCH 07/30] [1.16] Update Go workflow examples to use vanity client (#4874) * [1.16] Update Go workflow examples to use vanity client Signed-off-by: joshvanl * Rename `StartWorkflow` to `ScheduleWorkflow` Signed-off-by: joshvanl * Updates types for workflow multi-app example Signed-off-by: joshvanl --------- Signed-off-by: joshvanl Co-authored-by: Mark Fussell --- .../workflow/howto-author-workflow.md | 150 +++++++++++++----- .../workflow/workflow-multi-app.md | 14 +- .../quickstarts/workflow-quickstart.md | 96 ++++++----- 3 files changed, 165 insertions(+), 95 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md index ddb92b63ac3..36d2df7b3bb 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md @@ -874,86 +874,98 @@ package main import ( "context" + "errors" "fmt" "log" "time" - "github.com/dapr/durabletask-go/api" - "github.com/dapr/durabletask-go/backend" - "github.com/dapr/durabletask-go/client" - "github.com/dapr/durabletask-go/task" - dapr "github.com/dapr/go-sdk/client" + "github.com/dapr/durabletask-go/workflow" + "github.com/dapr/go-sdk/client" ) var stage = 0 - -const ( - workflowComponent = "dapr" -) +var failActivityTries = 0 func main() { - registry := task.NewTaskRegistry() + r := workflow.NewRegistry() - if err := registry.AddOrchestrator(TestWorkflow); err != nil { + if err := r.AddWorkflow(TestWorkflow); err != nil { log.Fatal(err) } fmt.Println("TestWorkflow registered") - if err := registry.AddActivity(TestActivity); err != nil { + if err := r.AddActivity(TestActivity); err != nil { log.Fatal(err) } fmt.Println("TestActivity registered") - daprClient, err := dapr.NewClient() - if err != nil { - log.Fatalf("failed to create Dapr client: %v", err) + if err := r.AddActivity(FailActivity); err != nil { + log.Fatal(err) } + fmt.Println("FailActivity registered") - client := client.NewTaskHubGrpcClient(daprClient.GrpcClientConn(), backend.DefaultLogger()) - if err := client.StartWorkItemListener(context.TODO(), registry); err != nil { - log.Fatalf("failed to start work item listener: %v", err) + wclient, err := client.NewWorkflowClient() + if err != nil { + log.Fatal(err) } + fmt.Println("Worker initialized") + ctx, cancel := context.WithCancel(context.Background()) + if err = wclient.StartWorker(ctx, r); err != nil { + log.Fatal(err) + } fmt.Println("runner started") - ctx := context.Background() - // Start workflow test - id, err := client.ScheduleNewOrchestration(ctx, "TestWorkflow", api.WithInput(1)) + // Set the start time to the current time to not wait for the workflow to + // "start". This is useful for increasing the throughput of creating + // workflows. + // workflow.WithStartTime(time.Now()) + instanceID, err := wclient.ScheduleWorkflow(ctx, "TestWorkflow", workflow.WithInstanceID("a7a4168d-3a1c-41da-8a4f-e7f6d9c718d9"), workflow.WithInput(1)) if err != nil { log.Fatalf("failed to start workflow: %v", err) } - fmt.Printf("workflow started with id: %v\n", id) + fmt.Printf("workflow started with id: %v\n", instanceID) // Pause workflow test - err = client.PurgeOrchestrationState(ctx, id) + err = wclient.SuspendWorkflow(ctx, instanceID, "") if err != nil { log.Fatalf("failed to pause workflow: %v", err) } - respGet, err := client.FetchOrchestrationMetadata(ctx, id) + respFetch, err := wclient.FetchWorkflowMetadata(ctx, instanceID, workflow.WithFetchPayloads(true)) if err != nil { - log.Fatalf("failed to get workflow: %v", err) + log.Fatalf("failed to fetch workflow: %v", err) } - fmt.Printf("workflow paused: %s\n", respGet.RuntimeStatus) + + if respFetch.RuntimeStatus != workflow.StatusSuspended { + log.Fatalf("workflow not paused: %s: %v", respFetch.RuntimeStatus, respFetch) + } + + fmt.Printf("workflow paused\n") // Resume workflow test - err = client.ResumeOrchestration(ctx, id, "") + err = wclient.ResumeWorkflow(ctx, instanceID, "") if err != nil { log.Fatalf("failed to resume workflow: %v", err) } - fmt.Printf("workflow running: %s\n", respGet.RuntimeStatus) - respGet, err = client.FetchOrchestrationMetadata(ctx, id) + respFetch, err = wclient.FetchWorkflowMetadata(ctx, instanceID, workflow.WithFetchPayloads(true)) if err != nil { log.Fatalf("failed to get workflow: %v", err) } - fmt.Printf("workflow resumed: %s\n", respGet.RuntimeStatus) + + if respFetch.RuntimeStatus != workflow.StatusRunning { + log.Fatalf("workflow not running") + } + + fmt.Println("workflow resumed") fmt.Printf("stage: %d\n", stage) // Raise Event Test - err = client.RaiseEvent(ctx, id, "testEvent", api.WithEventPayload("testData")) + + err = wclient.RaiseEvent(ctx, instanceID, "testEvent", workflow.WithEventPayload("testData")) if err != nil { fmt.Printf("failed to raise event: %v", err) } @@ -964,44 +976,99 @@ func main() { fmt.Printf("stage: %d\n", stage) - respGet, err = client.FetchOrchestrationMetadata(ctx, id) + waitCtx, cancel := context.WithTimeout(ctx, 5*time.Second) + _, err = wclient.WaitForWorkflowCompletion(waitCtx, instanceID) + cancel() + if err != nil { + log.Fatalf("failed to wait for workflow: %v", err) + } + + fmt.Printf("fail activity executions: %d\n", failActivityTries) + + respFetch, err = wclient.FetchWorkflowMetadata(ctx, instanceID, workflow.WithFetchPayloads(true)) if err != nil { log.Fatalf("failed to get workflow: %v", err) } - fmt.Printf("workflow status: %v\n", respGet.RuntimeStatus) + fmt.Printf("workflow status: %v\n", respFetch.String()) // Purge workflow test - err = client.PurgeOrchestrationState(ctx, id) + err = wclient.PurgeWorkflowState(ctx, instanceID) if err != nil { log.Fatalf("failed to purge workflow: %v", err) } + + respFetch, err = wclient.FetchWorkflowMetadata(ctx, instanceID, workflow.WithFetchPayloads(true)) + if err == nil || respFetch != nil { + log.Fatalf("failed to purge workflow: %v", err) + } + fmt.Println("workflow purged") + + fmt.Printf("stage: %d\n", stage) + + // Terminate workflow test + id, err := wclient.ScheduleWorkflow(ctx, "TestWorkflow", workflow.WithInstanceID("a7a4168d-3a1c-41da-8a4f-e7f6d9c718d9"), workflow.WithInput(1)) + if err != nil { + log.Fatalf("failed to start workflow: %v", err) + } + fmt.Printf("workflow started with id: %v\n", instanceID) + + metadata, err := wclient.WaitForWorkflowStart(ctx, id) + if err != nil { + log.Fatalf("failed to get workflow: %v", err) + } + fmt.Printf("workflow status: %s\n", metadata.String()) + + err = wclient.TerminateWorkflow(ctx, id) + if err != nil { + log.Fatalf("failed to terminate workflow: %v", err) + } + fmt.Println("workflow terminated") + + err = wclient.PurgeWorkflowState(ctx, id) + if err != nil { + log.Fatalf("failed to purge workflow: %v", err) + } + fmt.Println("workflow purged") + + cancel() + + fmt.Println("workflow worker successfully shutdown") } -func TestWorkflow(ctx *task.OrchestrationContext) (any, error) { +func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { var input int if err := ctx.GetInput(&input); err != nil { return nil, err } var output string - if err := ctx.CallActivity(TestActivity, task.WithActivityInput(input)).Await(&output); err != nil { + if err := ctx.CallActivity(TestActivity, workflow.WithActivityInput(input)).Await(&output); err != nil { return nil, err } - err := ctx.WaitForSingleEvent("testEvent", time.Second*60).Await(&output) + err := ctx.WaitForExternalEvent("testEvent", time.Second*60).Await(&output) if err != nil { return nil, err } - if err := ctx.CallActivity(TestActivity, task.WithActivityInput(input)).Await(&output); err != nil { + if err := ctx.CallActivity(TestActivity, workflow.WithActivityInput(input)).Await(&output); err != nil { return nil, err } + if err := ctx.CallActivity(FailActivity, workflow.WithActivityRetryPolicy(&workflow.RetryPolicy{ + MaxAttempts: 3, + InitialRetryInterval: 100 * time.Millisecond, + BackoffCoefficient: 2, + MaxRetryInterval: 1 * time.Second, + })).Await(nil); err == nil { + return nil, fmt.Errorf("unexpected no error executing fail activity") + } + return output, nil } -func TestActivity(ctx task.ActivityContext) (any, error) { +func TestActivity(ctx workflow.ActivityContext) (any, error) { var input int if err := ctx.GetInput(&input); err != nil { return "", err @@ -1011,6 +1078,11 @@ func TestActivity(ctx task.ActivityContext) (any, error) { return fmt.Sprintf("Stage: %d", stage), nil } + +func FailActivity(ctx workflow.ActivityContext) (any, error) { + failActivityTries += 1 + return nil, errors.New("dummy activity error") +} ``` [See the full Go SDK workflow example in context.](https://github.com/dapr/go-sdk/tree/main/examples/workflow/README.md) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md index 3f4fca6e5e4..410b4fc91cd 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md @@ -63,11 +63,11 @@ The following example shows how to execute the activity `ActivityA` on the targe {{% tab "Go" %}} ```go -func TestWorkflow(ctx *task.OrchestrationContext) (any, error) { +func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { var output string err := ctx.CallActivity("ActivityA", - task.WithActivityInput("my-input"), - task.WithActivityAppID("App2"), // Here we set the target app ID which will execute this activity. + workflow.WithActivityInput("my-input"), + workflow.WithActivityAppID("App2"), // Here we set the target app ID which will execute this activity. ).Await(&output) if err != nil { @@ -115,11 +115,11 @@ The following example shows how to execute the child workflow `Workflow2` on the {{% tab "Go" %}} ```go -func TestWorkflow(ctx *task.OrchestrationContext) (any, error) { +func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { var output string - err := ctx.CallSubOrchestrator("Workflow2", - task.WithSubOrchestratorInput("my-input"), - task.WithSubOrchestratorAppID("App2"), // Here we set the target app ID which will execute this child workflow. + err := ctx.CallChildWorkflow("Workflow2", + workflow.WithChildWorkflowInput("my-input"), + workflow.WithChildWorkflowAppID("App2"), // Here we set the target app ID which will execute this child workflow. ).Await(&output) if err != nil { diff --git a/daprdocs/content/en/getting-started/quickstarts/workflow-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/workflow-quickstart.md index 0c6be63d31d..72473207839 100644 --- a/daprdocs/content/en/getting-started/quickstarts/workflow-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/workflow-quickstart.md @@ -1756,11 +1756,8 @@ import ( "log" "time" - "github.com/dapr/durabletask-go/api" - "github.com/dapr/durabletask-go/backend" - "github.com/dapr/durabletask-go/client" - "github.com/dapr/durabletask-go/task" - dapr "github.com/dapr/go-sdk/client" + "github.com/dapr/durabletask-go/workflow" + "github.com/dapr/go-sdk/client" ) var ( @@ -1774,43 +1771,46 @@ func main() { fmt.Println("*** Welcome to the Dapr Workflow console app sample!") fmt.Println("*** Using this app, you can place orders that start workflows.") - registry := task.NewTaskRegistry() + r := workflow.NewRegistry() - if err := registry.AddOrchestrator(OrderProcessingWorkflow); err != nil { + if err := r.AddWorkflow(OrderProcessingWorkflow); err != nil { log.Fatal(err) } - if err := registry.AddActivity(NotifyActivity); err != nil { + if err := r.AddActivity(NotifyActivity); err != nil { log.Fatal(err) } - if err := registry.AddActivity(RequestApprovalActivity); err != nil { + if err := r.AddActivity(RequestApprovalActivity); err != nil { log.Fatal(err) } - if err := registry.AddActivity(VerifyInventoryActivity); err != nil { + if err := r.AddActivity(VerifyInventoryActivity); err != nil { log.Fatal(err) } - if err := registry.AddActivity(ProcessPaymentActivity); err != nil { + if err := r.AddActivity(ProcessPaymentActivity); err != nil { log.Fatal(err) } - if err := registry.AddActivity(UpdateInventoryActivity); err != nil { + if err := r.AddActivity(UpdateInventoryActivity); err != nil { log.Fatal(err) } - daprClient, err := dapr.NewClient() + wfClient, err := client.NewWorkflowClient() if err != nil { - log.Fatalf("failed to create Dapr client: %v", err) + log.Fatalf("failed to initialise workflow client: %v", err) } - client := client.NewTaskHubGrpcClient(daprClient.GrpcClientConn(), backend.DefaultLogger()) - if err := client.StartWorkItemListener(context.TODO(), registry); err != nil { - log.Fatalf("failed to start work item listener: %v", err) + if err := wfClient.StartWorker(context.Background(), r); err != nil { + log.Fatal(err) } + dclient, err := client.NewClient() + if err != nil { + log.Fatal(err) + } inventory := []InventoryItem{ {ItemName: "paperclip", PerItemCost: 5, Quantity: 100}, {ItemName: "cars", PerItemCost: 5000, Quantity: 10}, {ItemName: "computers", PerItemCost: 500, Quantity: 100}, } - if err := restockInventory(daprClient, inventory); err != nil { + if err := restockInventory(dclient, inventory); err != nil { log.Fatalf("failed to restock: %v", err) } @@ -1827,31 +1827,29 @@ func main() { TotalCost: totalCost, } - id, err := client.ScheduleNewOrchestration(context.TODO(), workflowName, - api.WithInput(orderPayload), - ) + id, err := wfClient.ScheduleWorkflow(context.Background(), workflowName, workflow.WithInput(orderPayload)) if err != nil { log.Fatalf("failed to start workflow: %v", err) } waitCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - _, err = client.WaitForOrchestrationCompletion(waitCtx, id) + _, err = wfClient.WaitForWorkflowCompletion(waitCtx, id) + cancel() if err != nil { log.Fatalf("failed to wait for workflow: %v", err) } - respFetch, err := client.FetchOrchestrationMetadata(context.Background(), id, api.WithFetchPayloads(true)) + respFetch, err := wfClient.FetchWorkflowMetadata(context.Background(), id, workflow.WithFetchPayloads(true)) if err != nil { log.Fatalf("failed to get workflow: %v", err) } - fmt.Printf("workflow status: %v\n", respFetch.RuntimeStatus) + fmt.Printf("workflow status: %v\n", respFetch.String()) fmt.Println("Purchase of item is complete") } -func restockInventory(daprClient dapr.Client, inventory []InventoryItem) error { +func restockInventory(daprClient client.Client, inventory []InventoryItem) error { for _, item := range inventory { itemSerialized, err := json.Marshal(item) if err != nil { @@ -1879,18 +1877,18 @@ import ( "log" "time" - "github.com/dapr/durabletask-go/task" + "github.com/dapr/durabletask-go/workflow" "github.com/dapr/go-sdk/client" ) // OrderProcessingWorkflow is the main workflow for orchestrating activities in the order process. -func OrderProcessingWorkflow(ctx *task.OrchestrationContext) (any, error) { - orderID := ctx.ID +func OrderProcessingWorkflow(ctx *workflow.WorkflowContext) (any, error) { + orderID := ctx.ID() var orderPayload OrderPayload if err := ctx.GetInput(&orderPayload); err != nil { return nil, err } - err := ctx.CallActivity(NotifyActivity, task.WithActivityInput(Notification{ + err := ctx.CallActivity(NotifyActivity, workflow.WithActivityInput(Notification{ Message: fmt.Sprintf("Received order %s for %d %s - $%d", orderID, orderPayload.Quantity, orderPayload.ItemName, orderPayload.TotalCost), })).Await(nil) if err != nil { @@ -1898,8 +1896,8 @@ func OrderProcessingWorkflow(ctx *task.OrchestrationContext) (any, error) { } var verifyInventoryResult InventoryResult - if err := ctx.CallActivity(VerifyInventoryActivity, task.WithActivityInput(InventoryRequest{ - RequestID: string(orderID), + if err := ctx.CallActivity(VerifyInventoryActivity, workflow.WithActivityInput(InventoryRequest{ + RequestID: orderID, ItemName: orderPayload.ItemName, Quantity: orderPayload.Quantity, })).Await(&verifyInventoryResult); err != nil { @@ -1908,64 +1906,64 @@ func OrderProcessingWorkflow(ctx *task.OrchestrationContext) (any, error) { if !verifyInventoryResult.Success { notification := Notification{Message: fmt.Sprintf("Insufficient inventory for %s", orderPayload.ItemName)} - err := ctx.CallActivity(NotifyActivity, task.WithActivityInput(notification)).Await(nil) + err := ctx.CallActivity(NotifyActivity, workflow.WithActivityInput(notification)).Await(nil) return OrderResult{Processed: false}, err } if orderPayload.TotalCost > 5000 { var approvalRequired ApprovalRequired - if err := ctx.CallActivity(RequestApprovalActivity, task.WithActivityInput(orderPayload)).Await(&approvalRequired); err != nil { + if err := ctx.CallActivity(RequestApprovalActivity, workflow.WithActivityInput(orderPayload)).Await(&approvalRequired); err != nil { return OrderResult{Processed: false}, err } - if err := ctx.WaitForSingleEvent("manager_approval", time.Second*200).Await(nil); err != nil { + if err := ctx.WaitForExternalEvent("manager_approval", time.Second*200).Await(nil); err != nil { return OrderResult{Processed: false}, err } // TODO: Confirm timeout flow - this will be in the form of an error. if approvalRequired.Approval { - if err := ctx.CallActivity(NotifyActivity, task.WithActivityInput(Notification{Message: fmt.Sprintf("Payment for order %s has been approved!", orderID)})).Await(nil); err != nil { + if err := ctx.CallActivity(NotifyActivity, workflow.WithActivityInput(Notification{Message: fmt.Sprintf("Payment for order %s has been approved!", orderID)})).Await(nil); err != nil { log.Printf("failed to notify of a successful order: %v\n", err) } } else { - if err := ctx.CallActivity(NotifyActivity, task.WithActivityInput(Notification{Message: fmt.Sprintf("Payment for order %s has been rejected!", orderID)})).Await(nil); err != nil { + if err := ctx.CallActivity(NotifyActivity, workflow.WithActivityInput(Notification{Message: fmt.Sprintf("Payment for order %s has been rejected!", orderID)})).Await(nil); err != nil { log.Printf("failed to notify of an unsuccessful order :%v\n", err) } return OrderResult{Processed: false}, err } } - err = ctx.CallActivity(ProcessPaymentActivity, task.WithActivityInput(PaymentRequest{ - RequestID: string(orderID), + err = ctx.CallActivity(ProcessPaymentActivity, workflow.WithActivityInput(PaymentRequest{ + RequestID: orderID, ItemBeingPurchased: orderPayload.ItemName, Amount: orderPayload.TotalCost, Quantity: orderPayload.Quantity, })).Await(nil) if err != nil { - if err := ctx.CallActivity(NotifyActivity, task.WithActivityInput(Notification{Message: fmt.Sprintf("Order %s failed!", orderID)})).Await(nil); err != nil { + if err := ctx.CallActivity(NotifyActivity, workflow.WithActivityInput(Notification{Message: fmt.Sprintf("Order %s failed!", orderID)})).Await(nil); err != nil { log.Printf("failed to notify of a failed order: %v", err) } return OrderResult{Processed: false}, err } - err = ctx.CallActivity(UpdateInventoryActivity, task.WithActivityInput(PaymentRequest{ - RequestID: string(orderID), + err = ctx.CallActivity(UpdateInventoryActivity, workflow.WithActivityInput(PaymentRequest{ + RequestID: orderID, ItemBeingPurchased: orderPayload.ItemName, Amount: orderPayload.TotalCost, Quantity: orderPayload.Quantity, })).Await(nil) if err != nil { - if err := ctx.CallActivity(NotifyActivity, task.WithActivityInput(Notification{Message: fmt.Sprintf("Order %s failed!", orderID)})).Await(nil); err != nil { + if err := ctx.CallActivity(NotifyActivity, workflow.WithActivityInput(Notification{Message: fmt.Sprintf("Order %s failed!", orderID)})).Await(nil); err != nil { log.Printf("failed to notify of a failed order: %v", err) } return OrderResult{Processed: false}, err } - if err := ctx.CallActivity(NotifyActivity, task.WithActivityInput(Notification{Message: fmt.Sprintf("Order %s has completed!", orderID)})).Await(nil); err != nil { + if err := ctx.CallActivity(NotifyActivity, workflow.WithActivityInput(Notification{Message: fmt.Sprintf("Order %s has completed!", orderID)})).Await(nil); err != nil { log.Printf("failed to notify of a successful order: %v", err) } return OrderResult{Processed: true}, err } // NotifyActivity outputs a notification message -func NotifyActivity(ctx task.ActivityContext) (any, error) { +func NotifyActivity(ctx workflow.ActivityContext) (any, error) { var input Notification if err := ctx.GetInput(&input); err != nil { return "", err @@ -1975,7 +1973,7 @@ func NotifyActivity(ctx task.ActivityContext) (any, error) { } // ProcessPaymentActivity is used to process a payment -func ProcessPaymentActivity(ctx task.ActivityContext) (any, error) { +func ProcessPaymentActivity(ctx workflow.ActivityContext) (any, error) { var input PaymentRequest if err := ctx.GetInput(&input); err != nil { return "", err @@ -1985,7 +1983,7 @@ func ProcessPaymentActivity(ctx task.ActivityContext) (any, error) { } // VerifyInventoryActivity is used to verify if an item is available in the inventory -func VerifyInventoryActivity(ctx task.ActivityContext) (any, error) { +func VerifyInventoryActivity(ctx workflow.ActivityContext) (any, error) { var input InventoryRequest if err := ctx.GetInput(&input); err != nil { return nil, err @@ -2017,7 +2015,7 @@ func VerifyInventoryActivity(ctx task.ActivityContext) (any, error) { } // UpdateInventoryActivity modifies the inventory. -func UpdateInventoryActivity(ctx task.ActivityContext) (any, error) { +func UpdateInventoryActivity(ctx workflow.ActivityContext) (any, error) { var input PaymentRequest if err := ctx.GetInput(&input); err != nil { return nil, err @@ -2051,7 +2049,7 @@ func UpdateInventoryActivity(ctx task.ActivityContext) (any, error) { } // RequestApprovalActivity requests approval for the order -func RequestApprovalActivity(ctx task.ActivityContext) (any, error) { +func RequestApprovalActivity(ctx workflow.ActivityContext) (any, error) { var input OrderPayload if err := ctx.GetInput(&input); err != nil { return nil, err From 8d411e74151d78914b00ff52035fd3d38641e9bd Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Fri, 12 Sep 2025 12:23:43 +0100 Subject: [PATCH 08/30] Fix for issue #4879: Added consistent code samples, instructions and links Signed-off-by: Bilgin Ibryam --- .../conversation/howto-conversation-layer.md | 138 ++++++++++++++++-- 1 file changed, 123 insertions(+), 15 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md b/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md index 99b7803b8d6..1015171226f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md +++ b/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md @@ -56,7 +56,7 @@ spec: ## Connect the conversation client -The following examples use an HTTP client to send a POST request to Dapr's sidecar HTTP endpoint. You can also use [the Dapr SDK client instead]({{% ref "#related-links" %}}). +The following examples use [the Dapr SDK client instead]({{% ref "#related-links" %}}) to interact with LLMs. {{< tabpane text=true >}} @@ -83,7 +83,7 @@ var response = await conversationClient.ConverseAsync("conversation", DaprConversationRole.Generic) }); -Console.WriteLine("Received the following from the LLM:"); +Console.WriteLine("conversation output: "); foreach (var resp in response.Outputs) { Console.WriteLine($"\t{resp.Result}"); @@ -92,6 +92,77 @@ foreach (var resp in response.Outputs) {{% /tab %}} + +{{% tab "Java" %}} + +```java +//dependencies +import io.dapr.client.DaprClientBuilder; +import io.dapr.client.DaprPreviewClient; +import io.dapr.client.domain.ConversationInput; +import io.dapr.client.domain.ConversationRequest; +import io.dapr.client.domain.ConversationResponse; +import reactor.core.publisher.Mono; + +import java.util.List; + +public class Conversation { + + public static void main(String[] args) { + String prompt = "Please write a witty haiku about the Dapr distributed programming framework at dapr.io"; + + try (DaprPreviewClient client = new DaprClientBuilder().buildPreviewClient()) { + System.out.println("Input: " + prompt); + + ConversationInput daprConversationInput = new ConversationInput(prompt); + + // Component name is the name provided in the metadata block of the conversation.yaml file. + Mono responseMono = client.converse(new ConversationRequest("echo", + List.of(daprConversationInput)) + .setContextId("contextId") + .setScrubPii(true).setTemperature(1.1d)); + ConversationResponse response = responseMono.block(); + System.out.printf("conversation output: %s", response.getConversationOutputs().get(0).getResult()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} +``` + +{{% /tab %}} + + +{{% tab "Python" %}} + +```python +#dependencies +from dapr.clients import DaprClient +from dapr.clients.grpc._request import ConversationInput + +#code +with DaprClient() as d: + inputs = [ + ConversationInput(content="Please write a witty haiku about the Dapr distributed programming framework at dapr.io", role='user', scrub_pii=True), + ] + + metadata = { + 'model': 'modelname', + 'key': 'authKey', + 'cacheTTL': '10m', + } + + response = d.converse_alpha1( + name='echo', inputs=inputs, temperature=0.7, context_id='chat-123', metadata=metadata + ) + + for output in response.outputs: + print(f'conversation output: {output.result}') +``` + +{{% /tab %}} + + {{% tab "Go" %}} @@ -189,21 +260,40 @@ dapr run --app-id conversation --dapr-grpc-port 50001 --log-level debug --resour {{% /tab %}} - -{{% tab "Go" %}} + +{{% tab "Java" %}} ```bash -dapr run --app-id conversation --dapr-grpc-port 50001 --log-level debug --resources-path ./config -- go run ./main.go + +dapr run --app-id conversation --dapr-grpc-port 50001 --log-level debug --resources-path ./config -- mvn spring-boot:run ``` -**Expected output** +{{% /tab %}} + + +{{% tab "Python" %}} + +```bash + +dapr run --app-id conversation --dapr-grpc-port 50001 --log-level debug --resources-path ./config -- python3 app.py ``` - - '== APP == conversation output: Please write a witty haiku about the Dapr distributed programming framework at dapr.io' + +{{% /tab %}} + + + +{{% tab "Go" %}} + +```bash +dapr run --app-id conversation --dapr-grpc-port 50001 --log-level debug --resources-path ./config -- go run ./main.go ``` + {{% /tab %}} + + {{% tab "Rust" %}} @@ -211,17 +301,17 @@ dapr run --app-id conversation --dapr-grpc-port 50001 --log-level debug --resour dapr run --app-id=conversation --resources-path ./config --dapr-grpc-port 3500 -- cargo run --example conversation ``` +{{% /tab %}} + +{{< /tabpane >}} + + **Expected output** ``` - - 'conversation input: hello world' - - 'conversation output: hello world' + - '== APP == conversation output: Please write a witty haiku about the Dapr distributed programming framework at dapr.io' ``` -{{% /tab %}} - -{{< /tabpane >}} - ## Advanced features The conversation API supports the following features: @@ -230,6 +320,8 @@ The conversation API supports the following features: 1. **PII scrubbing:** Allows for the obfuscation of data going in and out of the LLM. +1. **Tool calling:** Allows LLMs to interact with external functions and APIs. + To learn how to enable these features, see the [conversation API reference guide]({{% ref conversation_api %}}). ## Related links @@ -246,7 +338,23 @@ Try out the conversation API using the full examples provided in the supported S {{% /tab %}} - + + +{{% tab "Java" %}} + +[Dapr conversation example with the Java SDK](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/conversation) + +{{% /tab %}} + + + +{{% tab "Python" %}} + +[Dapr conversation example with the Python SDK](https://github.com/dapr/python-sdk/tree/main/examples/conversation) + +{{% /tab %}} + + {{% tab "Go" %}} [Dapr conversation example with the Go SDK](https://github.com/dapr/go-sdk/tree/main/examples/conversation) @@ -264,6 +372,6 @@ Try out the conversation API using the full examples provided in the supported S ## Next steps - +- [Conversation quickstart]({{% ref conversation-quickstart %}}) - [Conversation API reference guide]({{% ref conversation_api %}}) - [Available conversation components]({{% ref supported-conversation %}}) From 23de64e9d7ae8ed8541200baabcceb5b1bc24b3c Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Fri, 12 Sep 2025 16:15:40 +0100 Subject: [PATCH 09/30] Updated conversation api docs to latest alpha v2, refresh sample request, add metadata, remove redundant fields like name, fixes #4687 Signed-off-by: Bilgin Ibryam --- .../conversation/conversation-overview.md | 10 +- .../en/reference/api/conversation_api.md | 270 +++++++++++------- 2 files changed, 168 insertions(+), 112 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md b/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md index 7f05b660466..c0d88523baf 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md @@ -20,10 +20,10 @@ In addition to enabling critical performance and security functionality (like [p - **OpenAI-compatible interface** for seamless integration with existing AI workflows and tools You can also pair the conversation API with Dapr functionalities, like: -- Resiliency circuit breakers and retries to circumvent limit and token errors, or -- Middleware to authenticate requests coming to and from the LLM -Dapr provides observability by issuing metrics for your LLM interactions. +- Resiliency policies including circuit breakers to handle repeated errors, timeouts to safeguards from slow responses, and retries for temporary network failures +- Observability with metrics and distributed tracing using OpenTelemetry and Zipkin +- Middleware to authenticate requests to and from the LLM ## Features @@ -31,7 +31,7 @@ The following features are out-of-the-box for [all the supported conversation co ### Prompt caching -Prompt caching optimizes performance by storing and reusing prompts that are often repeated across multiple API calls. To significantly reduce latency and cost, Dapr stores frequent prompts in a local cache to be reused by your cluster, pod, or other, instead of reprocessing the information for every new request. +Prompt caching improves performance by storing and reusing prompts repeated across API calls. Dapr keeps frequent prompts in a local cache for reuse with your app, reducing latency and cost by avoiding reprocessing for every request. ### Personally identifiable information (PII) obfuscation @@ -67,7 +67,7 @@ Watch the demo presented during [Diagrid's Dapr v1.15 celebration](https://www.d {{< youtube id=NTnwoDhHIcQ start=5444 >}} -## Try out conversation +## Try out conversation API ### Quickstarts and tutorials diff --git a/daprdocs/content/en/reference/api/conversation_api.md b/daprdocs/content/en/reference/api/conversation_api.md index 8b04ee8f585..ee25aee0c17 100644 --- a/daprdocs/content/en/reference/api/conversation_api.md +++ b/daprdocs/content/en/reference/api/conversation_api.md @@ -12,7 +12,7 @@ The conversation API is currently in [alpha]({{% ref "certification-lifecycle.md Dapr provides an API to interact with Large Language Models (LLMs) and enables critical performance and security functionality with features like prompt caching, PII data obfuscation, and tool calling capabilities. -Tool calling follow's OpenAI's function calling format, making it easy to integrate with existing AI development workflows and tools. +Tool calling follows OpenAI's function calling format, making it easy to integrate with existing AI development workflows and tools. ## Converse @@ -32,32 +32,34 @@ POST http://localhost:/v1.0-alpha2/conversation//converse | Field | Description | | --------- | ----------- | -| `name` | The name of the conversation component. Required | -| `contextId` | The ID of an existing chat (like in ChatGPT). Optional | +| `context_id` | The ID of an existing chat (like in ChatGPT). Optional | | `inputs` | Inputs for the conversation. Multiple inputs at one time are supported. Required | | `parameters` | Parameters for all custom fields. Optional | -| `metadata` | [Metadata](#metadata) passed to conversation components. Optional | -| `scrubPii` | A boolean value to enable obfuscation of sensitive information returning from the LLM. Optional | +| `metadata` | Metadata passed to conversation components. Optional | +| `scrub_pii` | A boolean value to enable obfuscation of sensitive information returning from the LLM. Optional | | `temperature` | A float value to control the temperature of the model. Used to optimize for consistency (0) or creativity (1). Optional | | `tools` | Tools register the tools available to be used by the LLM during the conversation. Optional | -| `toolChoice` | Controls which (if any) tool is called by the model. Values: `auto`, `required`, or specific tool name. Defaults to `auto` if tools are present. Optional | +| `tool_choice` | Controls which (if any) tool is called by the model. Values: `auto`, `required`, or specific tool name. Defaults to `auto` if tools are present. Optional | #### Input body | Field | Description | | --------- | ----------- | | `messages` | Array of conversation messages. Required | -| `scrubPii` | A boolean value to enable obfuscation of sensitive information present in the content field. Optional | +| `scrub_pii` | A boolean value to enable obfuscation of sensitive information present in the content field. Optional | #### Message types The API supports different message types: -- **`ofDeveloper`**: Developer role messages with optional name and content -- **`ofSystem`**: System role messages with optional name and content -- **`ofUser`**: User role messages with optional name and content -- **`ofAssistant`**: Assistant role messages with optional name, content, and tool calls -- **`ofTool`**: Tool role messages with tool ID, name, and content +| Type | Description | +| ---- | ----------- | +| `of_developer` | Developer role messages with optional name and content | +| `of_system` | System role messages with optional name and content | +| `of_user` | User role messages with optional name and content | +| `of_assistant` | Assistant role messages with optional name, content, and tool calls | +| `of_tool` | Tool role messages with tool ID, name, and content | + #### Tool calling @@ -69,81 +71,136 @@ Tools can be defined using the `tools` field with function definitions: | `function.description` | A description of what the function does. Optional | | `function.parameters` | JSON Schema object describing the function parameters. Optional | + +#### Tool choice options + +The `tool_choice` is an optional parameter that controls how the model can use available tools: + +- **`auto`**: The model can pick between generating a message or calling one or more tools (default when tools are present) +- **`required`**: Requires one or more functions to be called +- **`{tool_name}`**: Forces the model to call a specific tool by name + + +#### Metadata +The `metadata` field serves as a dynamic configuration mechanism that allows you to pass additional configuration and authentication information to conversation components on a per-request basis. This metadata overrides any corresponding fields configured in the component's YAML configuration file, enabling dynamic configuration without modifying static component definitions. + +**Common metadata fields:** + +| Field | Description | Example | +| ----- | ----------- | ------- | +| `api_key` | API key for authenticating with the LLM service | `"sk-1234567890abcdef"` | +| `model` | Specific model identifier | `"gpt-4-turbo"`, `"claude-3-sonnet"` | +| `version` | API version or service version | `"1.0"`, `"2023-12-01"` | +| `endpoint` | Custom endpoint URL for the service | `"https://api.custom-llm.com/v1"` | + +{{% alert title="Note" color="primary" %}} +The exact metadata fields supported depend on the specific conversation component implementation. Refer to the component's documentation for the complete list of supported metadata fields. +{{% /alert %}} + +In addition to passing metadata in the request body, you can also pass metadata as URL query parameters without modifying the request payload. Here is the format: + +- **Prefix**: All metadata parameters must be prefixed with `metadata.` +- **Format**: `?metadata.=` +- **Multiple parameters**: Separate with `&` (e.g., `?metadata.api_key=sk-123&metadata.model=gpt-4`) + +Example of model override: +```bash +POST http://localhost:3500/v1.0-alpha2/conversation/openai/converse?metadata.model=sk-gpt-4-turbo +``` + +URL metadata parameters are merged with request body metadata, URL parameters take precedence if conflicts exist, and both override component configuration in the YAML file. + ### Request content examples #### Basic conversation ```json -REQUEST = { - "name": "openai", - "inputs": [{ - "messages": [{ - "of_user": { - "content": [{ - "text": "What is Dapr?" - }] - } - }] - }], - "parameters": {}, - "metadata": {} -} +curl -X POST http://localhost:3500/v1.0-alpha2/conversation/openai/converse \ + -H "Content-Type: application/json" \ + -d '{ + "inputs": [ + { + "messages": [ + { + "of_user": { + "content": [ + { + "text": "What is Dapr?" + } + ] + } + } + ] + } + ], + "parameters": {}, + "metadata": {} + }' ``` #### Conversation with tool calling ```json -{ - "name": "openai", - "inputs": [{ - "messages": [{ - "of_user": { - "content": [{ - "text": "What is the weather like in San Francisco in celsius?" - }] - } - }], - "scrub_pii": false - }], - "parameters": { - "max_tokens": { - "@type": "type.googleapis.com/google.protobuf.Int64Value", - "value": "100" - }, - "model": { - "@type": "type.googleapis.com/google.protobuf.StringValue", - "value": "claude-3-5-sonnet-20240620" - } - }, - "metadata": { - "api_key": "test-key", - "version": "1.0" - }, - "scrub_pii": false, - "temperature": 0.7, - "tools": [{ - "function": { - "name": "get_weather", - "description": "Get the current weather for a location", - "parameters": { - "type": "object", - "properties": { - "location": { - "type": "string", - "description": "The city and state, e.g. San Francisco, CA" +curl -X POST http://localhost:3500/v1.0-alpha2/conversation/openai/converse \ + -H "Content-Type: application/json" \ + -d '{ + "inputs": [ + { + "messages": [ + { + "of_user": { + "content": [ + { + "text": "What is the weather like in San Francisco in celsius?" + } + ] + } + } + ], + "scrub_pii": false + } + ], + "parameters": { + "max_tokens": { + "@type": "type.googleapis.com/google.protobuf.Int64Value", + "value": "100" }, - "unit": { - "type": "string", - "enum": ["celsius", "fahrenheit"], - "description": "The temperature unit to use" + "model": { + "@type": "type.googleapis.com/google.protobuf.StringValue", + "value": "claude-3-5-sonnet-20240620" } }, - "required": ["location"] - } - } - }], - "tool_choice": "auto" -} + "metadata": { + "api_key": "test-key", + "version": "1.0" + }, + "scrub_pii": false, + "temperature": 0.7, + "tools": [ + { + "function": { + "name": "get_weather", + "description": "Get the current weather for a location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA" + }, + "unit": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use" + } + }, + "required": ["location"] + } + } + } + ], + "tool_choice": "auto" + }' ``` ### HTTP response codes @@ -159,17 +216,19 @@ Code | Description #### Basic conversation response ```json -RESPONSE = { - "outputs": [{ - "choices": [{ - "finish_reason": "stop", - "index": 0, - "message": { - "content": "Dapr is a distributed application runtime that makes it easy for developers to build resilient, stateless and stateful applications that run on the cloud and edge.", - "tool_calls": [] - } - }] - }] +{ + "outputs": [ + { + "choices": [ + { + "finishReason": "stop", + "message": { + "content": "Distributed application runtime, open-source." + } + } + ] + } + ] } ``` @@ -177,32 +236,29 @@ RESPONSE = { ```json { - "outputs": [{ - "choices": [{ - "finish_reason": "tool_calls", - "index": 0, - "message": { - "content": null, - "tool_calls": [{ - "id": "call_123", - "function": { - "name": "get_weather", - "arguments": "{\"location\": \"San Francisco, CA\", \"unit\": \"celsius\"}" + "outputs": [ + { + "choices": [ + { + "finishReason": "tool_calls", + "message": { + "toolCalls": [ + { + "id": "call_Uwa41pG0UqGA2zp0Fec0KwOq", + "function": { + "name": "get_weather", + "arguments": "{\"location\":\"San Francisco, CA\",\"unit\":\"celsius\"}" + } + } + ] } - }] - } - }] - }] + } + ] + } + ] } ``` -### Tool choice options - -The `tool_choice` is an optional parameter that controls how the model can use available tools: - -- **`auto`**: The model can pick between generating a message or calling one or more tools (default when tools are present) -- **`required`**: Requires one or more functions to be called -- **`{tool_name}`**: Forces the model to call a specific tool by name ## Legacy Alpha1 API From 2f7d17d3b9df17fe4f92a6054b4eca1e3a94384c Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Fri, 12 Sep 2025 16:53:01 +0100 Subject: [PATCH 10/30] =?UTF-8?q?Added=20'How=20the=20Outbox=20Works'=20se?= =?UTF-8?q?ction=20and=20expand=20requirements=20with=20int=E2=80=A6=20(#4?= =?UTF-8?q?875)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added 'How the Outbox Works' section and expand requirements with internal topic details Signed-off-by: Bilgin Ibryam * Update daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md Co-authored-by: Mark Fussell Signed-off-by: Bilgin Ibryam * Update daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md Co-authored-by: Mark Fussell Signed-off-by: Bilgin Ibryam * Update daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md Co-authored-by: Mark Fussell Signed-off-by: Bilgin Ibryam * Update daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md Co-authored-by: Mark Fussell Signed-off-by: Bilgin Ibryam * Update daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md Co-authored-by: Mark Fussell Signed-off-by: Bilgin Ibryam * Update daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md Co-authored-by: Mark Fussell Signed-off-by: Bilgin Ibryam * Update daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md Co-authored-by: Mark Fussell Signed-off-by: Bilgin Ibryam * Update daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md Co-authored-by: Mark Fussell Signed-off-by: Bilgin Ibryam * Update howto-outbox.md Applied suggestions from the review manually. Signed-off-by: Bilgin Ibryam * Updated the diagram with Dapr-styled version Signed-off-by: Bilgin Ibryam --------- Signed-off-by: Bilgin Ibryam Co-authored-by: Mark Fussell Co-authored-by: Marc Duiker --- .../state-management/howto-outbox.md | 67 ++++++++++++++++-- .../images/state-management-outbox-steps.png | Bin 0 -> 139577 bytes 2 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 daprdocs/static/images/state-management-outbox-steps.png diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md index f99f44c3b88..40fc8719475 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md @@ -16,23 +16,72 @@ For example, you can use the outbox pattern to: With Dapr's outbox support, you can notify subscribers when an application's state is created or updated when calling Dapr's [transactions API]({{% ref "state_api.md#state-transactions" %}}). -The diagram below is an overview of how the outbox feature works: +The diagram below is an overview of how the outbox feature works at a high level: 1) Service A saves/updates state to the state store using a transaction. 2) A message is written to the broker under the same transaction. When the message is successfully delivered to the message broker, the transaction completes, ensuring the state and message are transacted together. 3) The message broker delivers the message topic to any subscribers - in this case, Service B. -Diagram showing the steps of the outbox pattern +Diagram showing the overview of outbox pattern +## How outbox works under the hood + +Dapr outbox processes requests in two flows: the user request flow and the background message flow. Together, they guarantee that state and events stay consistent. + +Diagram showing the steps of the outbox pattern + +This is the sequence of interactions: + +1. An application calls the Dapr State Management API to write state transactionally using the transactional methods. + This is the entry point where business data, such as an order or profile update, is submitted for persistence. + +2. Dapr publishes an intent message with a unique transaction ID to an internal outbox topic. + This durable record ensures the event intent exists before any database commit happens. + +3. The state and a transaction marker are written atomically in the same state store. + Both the business data and the marker are committed in the same transaction, preventing partial writes. + +4. The application receives a success response after the transaction commits. + At this point, the application can continue, knowing state is saved and the event intent is guaranteed. + +5. A background subscriber reads the intent message. + When outbox is enabled, Dapr starts consumers that process the internal outbox topic. + +6. The subscriber verifies the transaction marker in the state store. + This check confirms that the database commit was successful before publishing externally. + +7. Verified business event is published to the external pub/sub topic. + The event is sent to the configured broker (Kafka, RabbitMQ, etc.) where other services can consume it. + +8. The marker is cleaned up (deleted) from the state store. + This prevents unbounded growth in the database once the event has been successfully delivered. + +9. Message is acknowledged and removed from internal topic + If publishing or cleanup fails, Dapr retries, ensuring reliable at-least-once delivery. + ## Requirements -The outbox feature can be used with using any [transactional state store]({{% ref supported-state-stores %}}) supported by Dapr. All [pub/sub brokers]({{% ref supported-pubsub %}}) are supported with the outbox feature. +1. The outbox feature requires a [transactional state store]({{% ref supported-state-stores %}}) supported by Dapr. + [Learn more about the transactional methods you can use.]({{% ref "howto-get-save-state.md#perform-state-transactions" %}}) -[Learn more about the transactional methods you can use.]({{% ref "howto-get-save-state.md#perform-state-transactions" %}}) +2. Any [pub/sub broker]({{% ref supported-pubsub %}}) supported by Dapr can be used with the outbox feature. -{{% alert title="Note" color="primary" %}} -Message brokers that work with the competing consumer pattern (for example, [Apache Kafka]({{% ref setup-apache-kafka%}})) are encouraged to reduce the chances of duplicate events. -{{% /alert %}} + {{% alert title="Note" color="primary" %}} + Message brokers that support the competing consumer pattern (for example, [Apache Kafka]({{% ref setup-apache-kafka%}})) are recommended to reduce the chance of duplicate events. + {{% /alert %}} + +3. Internal outbox topic + When outbox is enabled, Dapr creates an internal topic using the following naming convention: `{namespace}{appID}{topic}outbox`, where: + + - `namespace`: the Dapr application namespace (if configured) + - `appID`: the Dapr application identifier + - `topic`: the value specified in the `outboxPublishTopic` metadata + + This way each outbox topic is uniquely identified per application and external topic, preventing routing conflicts in multi-tenant environments. + + {{% alert title="Note" color="primary" %}} + Ensure that the topic is created in advance, or Dapr has sufficient permissions to create the topic at startup time. + {{% /alert %}} ## Enable the outbox pattern @@ -682,3 +731,7 @@ The `data` CloudEvent field is reserved for Dapr's use only, and is non-customiz Watch [this video for an overview of the outbox pattern](https://youtu.be/rTovKpG0rhY?t=1338): {{< youtube id=rTovKpG0rhY start=1338 >}} + +## Next Steps + +[How Dapr Outbox Eliminates Dual Writes in Distributed Applications](https://www.diagrid.io/blog/how-dapr-outbox-eliminates-dual-writes-in-distributed-applications) diff --git a/daprdocs/static/images/state-management-outbox-steps.png b/daprdocs/static/images/state-management-outbox-steps.png new file mode 100644 index 0000000000000000000000000000000000000000..a520b443b97e629b7a1b966e26321b50d749e704 GIT binary patch literal 139577 zcmd?Q^;eW_)HV!KN{UjFf`m$UgDBmCbaxNkDTtsbNO!1&NH;@wcXu;%cfaST_xnC; zJwJSZz&C5LmTSD`n)BLm>|-B$&nHEB2`qGCbOZzhEGbD*B?JW269j~No%d0}J0G4E zOd=rMWk`vNymQmto^@9rQ@Oo6SXFn&Lx9WyL%NH`Q5CFADDdNoD>OdLQo@ zamtlf-&N8XtCvtJ4(|VaWtT9(?)}d}WMjrpqce0oN|MdoDYX2HL;pgDsU=D$J zS$TQmYg^di&*-L7o5zxDgfhu%GvCBF54EY5Bc(RCS=2(nh49x12Kwfw;NT7ms>n}f zPR84oju(T(ZQAo35xuPr(#CbHaV=)CDiqeULeU~N5)r7c9x0bI>Wh*%KKp0v@G1on zLGW*0IiAkARB7>iC}~GZ?=Q5>NG$4WXD*|wL=uFS2)8!^gD^v08aBOck@g_=-#F!c zB%i_s%8tizvxPFXaR*+D{(YtEDk>^~e;PN7dN@6iL1o!yrx?y>~K!ARhM>wg@h-;n7c{7e=s)(2no^d#j~u>-g82mS>`_@&IBW8zvYkcx^+ zEU^&&Ukg0@V}W4OvQ^nyPwHoTdtZ%=r6xOEV-oiecsi4~!=r9lMJKT^ zn|(tpr(>fCl{=jhrenjCyVzaBj8|s+za{K2J3u5&mSzLi2f04Rm9w^#?sPBEWfprC zT=d~jR3~NQVEvGgmE723*?xO0N!+;-h)>34?s9K01Jlf9wZLepMz%{>mMdE!)~k)C zqG*_1W^*WBJ+tP=9ZvUrc4ZBz8CUl_Nq1T$(QE8_rsk(FArGJBc>8A7V@V6`(V-4k z9N($npw0@0k6@_?ef#U+V97wI%oOnNj<>1VvC^Me<2D)!d9Bv3tZ~|yUMLHCG1Z-Q zC+)&|^p_gQzvyUZe$`lcn0dpMXkgQWZ=$D0`gp8>@?u(qdM;VKb+N+yqpV)vcH+-o ze1sJr{)9TINM2I(9LZxc$4)oycu7YT&V5~k4w{?R@6^KDlb-t_HO7xZgh<4+H^!=D zX;TKni*k^rRl1JvC{I)a8Y!Zfndw~*cp}gQ-c(I%D}Q7RWld!?Y{JL)er)E)=bJV8%%G_oalm^C#PRv4?Gs(T;zhVH>sRJiD$yWHr%TxtwM|4W_*a zM6vFA(Xw{5*xhZ=+k@LO={LihuFYCBw9s$Bn;LeCc3g#H)O3ZR9vLmBIz~)TBlPiu zxt}!*GsI}62HoX7beJes`;q=8_h)GRs^a=lbWIEcLCrT=j&C<}`VqRn*P};zJUiW3 zKeaR?*6udPu{b_SEH3Wo>Z01JK#{GY$M&1K__@KVPxT}Nv79L4jx%wRJ#2?}2&=&gi4ILO>q^jXZAg@h* z!jwypHFdgYq?_7Z+`~{@%vEF!L;mP|Rw3ofR}|5&`CtARPG!>pBRP=rpFB-DsApU% z(v40UIo&aT9YMQH9bu4a!nX4p{nVK8iA4Kt|F=&8Z-oiiHoTO*ReP4`zg9Wxl8Z2ahHS)f0j61}R& z6L&(hi-^(f&Ck<)9H;a4RaivnH|8%*h=sh-BfXiINl6ion}(mVdBnw!$&8+G+7X4- z3K1U(RXp}(me0KFrWp9yY?Q9@XaFg=#*(;X@5DFXqF??cmU#+8Ul`pvl1B@xP;G=C zx!<$Uc33PjPV(@RJKavoAbfjFqp2%=lw$-cDIXVs2M9fsI}(ny|7B_G-*Ux^E%o34 z_5-1aTh_3Vi=wVy{2gg9Qp5Y7O$`d}QaI@kt(X|-nNma%VoJ8Tm38i@BM{>H&gq6a z^VVl7_bFwi6Wh)`A9tbrls~VnRF1#;bl1LO){d*EQT<5DHI#CSKuVjzSS5Mm@I!`= zQ2Sl8$}*911aXN{cry{_%$?CContmb?pmc)sRd!GRASvR<0mv`O&e@KcwvFR-pT%f z(eTL5_})YJ;rR0bN%1+Gy00cvs7GWkAIZJ;qS4yM4hj7}L@@X)?$}@WKJ*$Y`s4MF z_3)^s3BoM)wP{R;qh8lvEeCb6z3~iaPeWVIyIi?rHn~$6)Ud6F+9Kb%;}xMAM`%1k z_$m{8w&#>9K96|2|9n2Pq(@uhN0lG5=;P^0ZQB2!fHOJUHHqAP1($$Xx92?)8jsul z)4;$$7;Of*+XCY4X+?c}h|JD(MHqX(z_7M<_G)+R@DDKzNBiuxRNoXeJ?~L%?e94S zbqU;aZq3@HX^v}sDs}b6LU-4Wm#3U`JA8&yr4|C$`^~T=^w#$FqgFz_xDX_28k!== zET5x&psw$Yb3PPC3~or_dmS!(v!MX4Du>14tv>|oFLZW>&v1%U>F26&QL*LiP&(+MNkk`fv=X_`bBIc!Ne5iC9gN!#n7)!3L+=dcmD zAo}~8AaIO~tSrZylW}l1Jbe7t&C#6RR>a+!Bl)_^O?q%ka-Va9+v_#q#E`9+Wgg{% zO&0`cx^TGc(C`LLHggWaSrhHp^=K(!!Lf5ItHBL%+q)y$g(RCe7gcKSpJv>nQwQkmYTkHk)9`GgH zS^!&6Q=dN$P&M9}DyunYBRO6l41mm50e6PIys`=(?gSy!b$5Fvj7`e(N>`Ws;v%{r z=GV?aXHPu4`+g%@Z!11u!a*lZtaeiZr&UiY{_pPI z24TL}0WXv@<;tBP<2Emmeg1&%Y83#dY)}OKhBiG^kxYf(BoMD z_WA-GKuy~oB}X-n4McE8tnN}9i7f|V?B!~#Ugd7p7BCF}8+~AAa3#1MH%LfMaOL+P za>JfDR&Wdr4UOZiad_^0`GQHzX=x0MHlnO>Fs5Z2A42ccjK#fw*v$;0kyM7_Y*bBe zFh`9Uob+tYGt7Ru4Sor*Ih*Gxh)qAEjpa<)_$GWcZ38Bz=$M$c{Y9GWSHB0VoUME= zRtdos2F)K2ZqDZ639}NZ;4rS^3h*RPuRbM&sS1R2_U2_}{mqW;^;!KLIHq|^Fs=YN z4LGKJR-}9~ANacHloa`Dmz|#03|-G1&RdXLz~LO`15f9C@4Ue`%+-39xbEq~ljeH= z4Jsy)K6oII;cS*8&%v8j&RgP|nh8*zhG;e2&coGPnu<~PgI2;PT-I^GZ^b6vm7Bj` zGJDAce*9SMbK?Q-=($%L+b?wWB{=wgQ&W?)?N<`+Ob}~M+Y{lZJJZ8OMiPcbMmb4W zko8jKerkI9oT(5ZKM){CAPNhu#`Aw-yTO}+jc3cP)Q@ER^#|9&^qa0q;suAj5?czT zE5=7_*0*R2^%KLI1g+Fr93O?vM$397M&#K|568Kg>HR>JrEZQ&DPgLMRnGh|l9BZZ zoPf=0j3LEi^M#UNn$0OyHCt7ktIf?Y6*(bYIU!Z=@Yq-h7Z)xPZiw;d zZ-t9d=Jyv%3IVsmu2DTxRCPQg1HIa<1^^rC;><`xe+`P95%|tYvs9JprPV^`gLx*O-c^ocIiBl<|kbyj6nzNV+A=jZL~l1b~) zd<5^Evhh$4=kc;}-EPK;8AFg`sj0prIaV(;UXbGBn}BZ|l%O~`Xr}=A^(QS|w$;H? zE;a{IoGg6-K2U>p@iH=g9oO@n1t$OrrBaRI0&qa0_TK(`H1Y+13?>!;9w0+=w0pHw zMMaVKYR^(YvK;jb_ZQUPS~BGiq~0E98Ew+Ze@d9kUX!P3-L)mW>R{s%)Y6z&>J7~^ znp#vnv2ui&M#wM>;$u-JO)~h};z^zLQW8qKafXPU#fq+5F4Y<wv;WAFbVdw zE4MLY0dZ{$xzSYLw3k9Tkt@@-^(KcaodD?W_U>+kJx;eRn3y=7H{YeWEj<8cX!}aS zuHS&bRDXT=vYm^{c`}rYUs6tPwVSz~q4#&8!>Tl>C8iL~O*o9^Rm}YWfyZGv5-k3e z*nsFG^huKcLFeH0mGHKC8=X;msL2tm7u1K*wS&&x*=p!s-BnL(^d+DiAst zcuY&`T%Jl|TT|4f^Wo}rXZh}S?+*U({l2%#tB{qmdEZn3n1BF%2eAHYiZ>rzi(4>m z1)?W}xlYpBdUbgN5EoY98<3 zkz9=u%e8l@K9?4%`PzVj4eV6R_W=Y49xn5~a=AT>tp}H>%xbS_+19G;$WJy$L`LQ$ z(+kJ!HG-PL>j-<7_+Y!Rq>nEI@WvKxQhiWbNO|nwM3OGW?MD};4+bGqu8Y~00lz?@m5O<3>}iIdRmU2C zIs>I6bPNoQ3J6&uw=FF@dn6VKmmNR`)p(bRU%!I)>hDrym}^J0N1rCSY;Xg*(ksV3 zD|&Z(lrHrO3arraw&cBUo)4{t2CVBDn=XmMZ)jm#YovOy zAJ5Kc_NtPVYL57v4CzmbL$rn@TTGhOqnCY(_RMD2KWUzz<&%g=qafBM;JI!+zk~3v z8H)>Pp2WX@!koF^W9p~gHlulyU-vN+_~d&2?uLT7{+jJ*t=|lAc6gZ)01>6_I_q3& zIr_VFXQ43wX_sC}tv6LT6;91k1U(OdPh&CGL8I^$6#j}XYwAB1aB%qW;ln_d0!4o9 zsV2GCz6h;CinhrsoCSc4YoYwR3joB|0J|65#3VXtwZI>dk(FHmkgC7f6qsRx9TZ@d z5B&%y=kq>SUqSvK{;4-KYM{?fmnMsl+C^9}K5Sl=v+72(?fGA`O2t+ql`g zCyIQyoj3yG3=Nz1)N?%1J?JUVfzH#`zkioBP`?-cnb?DQ@J!z1wXmOdrXE@Qz!{re z0@4@H;V0Z_wo(fWDG!)2=^s3gAsmM7@0M#9{|?4g%{d~<6kPJn?IC=;VZWAim>R~O zSW5S3W$1qY2V$sTK<0FI{`ptm%ulffqa@uhKnzp)S*QM*v}s6cd}D+;e0nzLWir0 z9XVHz@E?gSHCwQFFCVz z_uoF~FCbdeDp|6cADspkrw%y-Zuo zEL1W{oRe_(aNb39bv#FE=J7hpLJ%Z4P+&AVCA&RKx|mbs`$!~8=A&a{bpOF8gMr}< z1W{eKK(RgAD`A`$Sti{v+K#=PqfFnls+=s!%w7g3S(_B#7#SJ4Zx^+n1KYZRL?ROM za%x_uBG&(3k zMveX`GY;L1D&&VRfxR4Rs0tFqVPTIYLs9J_E_R$U>)4~SQ<>?;vFu%YX_se>mv-Y? zqUhxvLZzPWHj1rW^Sr0Dx$h;oCrjfT=xe1pv;QLZ!XDE;({a^uyH=EzoyPHT35D!a z;yb4L?VZV6t@1lgp35)#r`4n-em@H8sz zC_#gsO5pKFCmC_9^*C7qSicCmqeW)l3yj_bPNaq%mm^SM?Ln#7-^?jcdiTz_&Z<`b z985Q$itwPb40XJ67#d=~Y5cyg{s^t*F&PA+;+X`EH%@1!W1qjPe#VvZhiJrX6@MZ2 zWQNc|tq8+o-bV13Xpnw7C=#XU4FN*6C%gKw4eG5Lfz*s&U5mJcY6AMZ(B9uFIh9MF z>F;$xpsNIMxrFLj&I8y#S%)+LkWXFrRebOl?RQAPsJRb-VX)GE+3&C_Uj*gk@bD0T z;6Kq^lFZ>esTh>{s2EP0sVF!^fTH<4EwAHX=;S-NE;yL99F#b6-)sB2+e<5i{F+1Q zIgc$y#}dAR#`Jlw)o3+INlE?rI&av^zX9|nA|m4a_G<3}w65}!lJ^lnjeZ6=G3ZB< zmX-{UbVNe|r|^1R?{lMG?UDzT{*$EgZ)~PY7eTc%0`2+n=4eP(s?XF+y6&$t{*%L_ zBPifAQZh0~3x8#j4VdZQ%76yAK?o?J{>*jfKT318Dj@KN9(1;hX?c>)+DwGYZC{t` z?{1h8lKGqsLCcDahL)K4*Hk0?Cmvb4pb~+e*WLnvY0Xg|hWWEUH+EJ7{kJ<%RNRhw zxn*2;^0X>K)6=Q{^aqaN(k5nRj^N2-P>-K$99xuWB29rF3%o|uPF%9)0Fd+mhWuJY z1TiY9@nE-lZ>T^|*zsS2p|P>EKN0fciI0z;aT=Dp-qO2ckXjQjFe?!rlHSmqzgP!0JpY7~EnioyeKL0q4&7X}4b z2(U;tZv4LiFa})L_3Q0V1fX#6mzed_vat=#Y)56QnQivQvj=(ZLbEv1Vk07&0D9;7 z!RHz9p_M5pRq&%`Al70q*L(wtg(4z+7zM^r5YUIUK`M|6U3N4fRU4T@Mhlz%9{3}m zLZ0!|6z#*alDTI8-baJD#J_%!L^=Zzxa`D-Sb2N76))t?haJ>BBm2jaE5EQvdA@0s zm=2~(J$^2A=6khMk(ijwcJlJZ^zB<*cpc$An{nJ433~qLfy=V;$<>+4y4Q{lfHJY@ z0Cl_E$SPY<{&O?S9?;TPUT)^dum@;+Y-GqL^WlfAj_gL~sQsN$;qunP9~v$f0)Zx~ zvXaNK?9USiOMX=^HhusXaKyyK5N3SuZmw_ke7U)ERQ?XJf+cIe{Sh&m5zXi81Obbn zV_@j{_Yk7#;$C+*XP6X1q+#s=21H)xi$O`gw-+$eGT6xOW4ynHlP1)*Lo`cvCP2_C zw>AJCh0*@?Ar&VKB+|+!x)i^NX9$2~>bmUB*+5jS{ta5gJsM3*-~>5=+ZMaw`r;^F zz`Yn6|KGu%@H$Wjpy8nE1Ck}1$kjWOKKA@3^Uwc|(1VV3b;_!sb?d~iOcUNkgEpI; z``_#?8yD!g>FMcq(>4|My`1B5IaYGX)7fiB7nQ3qTIa{Z3cV_SkC@~~(+q=G8!DfupZtFM8Qo%MccM7PrQIbzkseLE5!qV z`=6_t0IZ$a48K1gT-w!5+9UF;PhGtcq(n^YZCef# z?gJ`Ck6b$WRK2h8g9i^**4B)OQ0Kjlux6`Wx&JwVH*X|9+2anVuQE776#Oo^_dNc5 zol@TZzTKSnnU2r-A{xpu@i(bR+VIp=oCeU1{{EMzBNjm=iYeC4hFNoCd0JAkvS2DV zn5)4a!=&@M*YrO(hodqH3#Y={o$G5az#~9M`5h$OKhUPiikjXrJ>8zHIqaf`Cyl_x zN+gVyGhcpt#1m-7GOio5&f_}h>wj}ODKk?cRkupU7I3nE?@1;{rKa}J-`%=`X0$1Y z!bj4;;5$_6EB~rUEfN~`{$dcty#+g-%A3>a|IEI^v2fx62XtxQdeAK2+x+8GKqEUk zI);p%f}#lA`0?L8;I^sMW3CS6fOxlwf8FK{-Ucc!8p`*_i0ZFT=TUY?mzvs8Z|O$1>E02j>iPppLVWdMzi znwlD+(4?DSXlSTM&N6C|f6}1&XQ}5IM6=Y~fQjJmmBU~1asCEk-8tYKm0;$8SP3kM z6pHuD!kP9LoUKw(DLq!rRc{0)>A1bQatE2vJNoB+z+~H&4+cui6u_h2fAE0v*)yc- zSqMb+nY{a@+~03Va02!@Y(%4A@xApzM@R4Ze;>6hbJ)m;y{D+I-T{zVAEIRRA5x&M zE`>0ord3v+r|Zi8GZcch%cMz$urKI%5S=-t{vn}-A}SW~yUQb>ec#*sYZFmRO&}p! zboGKhDI(JOFxmfaC=R88*8gG7C^`*V%)jA&k}M@9rM6uo3J)nZ=;+?a%ZCDQv3SwZ zYyZV*htJx+Hz(;?SxEaJ<%YqNI{pKlaN@}1WH~3NQfQ@kazwJn)>xiVUlMPwPW6~J z%^&MHGyx`;G?W_4pz%nN&Kd4wI5NP6ZMDD8G(tkhpVpp@zUd7J0UWF`i8+Gr0AT;; z$j3@9W^xp;rALeEmB{fftLKc&&r2V+xe7%0Yw&+uj#vkKNSAD z@28`*zX#A;-bY~A0N3XKjT>GAvm|>|1kbbGRlopXmf6p`m@cKun-cRt709Uu!OuFzen_1Lk$n1H3jRWSu5TjWy`mfM)Ti$%O0H4edZf|Kp z9{FdeC>bW`2O#=6w&JTrWiCZknE>?52oZAj{_7{DGEJOKG9aTKuK{ff<=@9THhx-b zjsTGi?Z5kQ!?{dxH`7ns`MMdGX&cz)W7RE@+M1f0p;Y{T3qri!t1wv1Eh#v);=lNx z2c2@E$BCuO&QvQ(}=H9D}z1zlx-^r_OLYpf%~HE|(2%sqwGocXTQ#D!%gY z;M>^Pu%0Mv)Mj*UXn2nl&uK*fW-oAau>afl8Q~X7WnQS~+yGA}-$wH2kK+(0s+{S8 zzA6a+i=>rf`)@gDgg%SoA42?t1FBKwKifI~5)st5(ErajP~pvBPXcF1wsKZNj(ptW z(S;YRDbfNY)b>OXk{`LC$3UgM(Z9S4e_Rd-8_0R&22j%)fY53EudY!k*^XSw*8&%X zfBW|8^=tos73jaCNqip*@EBsb@DkF7a07PaR;vqVO(Tdx6qN!(HDy&2df>bcK+ItL z?_u@4PohCYr_UX^-5Bjp^+v)I8!Ou1!=Y&g!o9_9dN{)VxbhZ;%Ww{%cIEl2~% zRr@!Ts;1Q)%u06f1tv9aod`7c@9@@)djg(ZC)|lI=`s+O4>S4L7_0^Dy*ca zZe9nVY~;u5*sxU%$Zc)uxA9>Njr#HCHLK5VM)rvFHV#E+-(3EBY$RPUsD@!eu_rME z!i?y*~tE@LaC$CovmfbF)pK?3Z)vDP0 zR~?Qv){f4%e%^((-^~kO7~P;A&5DVp6Igd1u-F7fp2ZRrTLMmBz3ZG|pZkH%Sgm;=d@&Y-d(#ztwGp=W3GxpOg#9|*36T!7u{O`7n z=BlXbX4PfCW7Md4jgp`uYb<_Qe+t=sEIX{2cZQ1_K6L~iCJem6LEHx-tlb}u4qtJb zbk`Nq-Z1WEB5WOP*gYSxvN|@k*orz(R~9hr2LK5g_=_rsy7Vk92HNgsOTpDO@+;I@k*#={rS`2cC5JRQgIF4lL+P?L#krLO*bT-O<8T+bEXd%2&Q zgPJ-G(2~&PVJwnU=!JzNYqx8qeS(q&s>XMt$MkFEI6w5PNVIU=&g~;Zq9-BfpOL0D z8BvSgsxk$a4QE9si(|_%fUd3cXR-&ClHMwwhepwG?^)vK$%HM&Sh8mV6KM)xzGCp9 z4!&$^>YvuWt{D|G4MmH!pi6Bw9VqzvwdGXA$b~_lEA~mi?|%+?uom2(5;$FC48s&s+Oih-08KN zA@kOoBVC&Z=#B^rM;9H_MX5U&+mJyh>5N| zck?dX@eA7H#xF6q(ZiwxgU)@7?4f=st$rdp+X5U< zqeA%6h8Y<4>4gP4nl$ouz6kJtSo9_n4MaX2Mq#4JDW0i0v!dK%d||Andm)7eFEn6B zA~ZmEPFK6(N(MutHplB#fqPsd+0E<965spYhSs1NlZHuae$=Wgm0>Yr#$0U*J$2aF zJtH`moK|nC_u*+7-wLr;bL2_|;F08mHxj8t9v0+%<>+Q|IIZouoY!;3_Z4iSgmM%T zA#?ac$M=lSB_e0urr&2X5~EbeT0OdA!VyE?1+gIcU@P*^YRJAZP#jXv zK{_B3@i{#w<8xx+4%dW%AfGD>Vutmu4br77F7u`?I}xCiJ_tpB2CLaUhVHRdVeW>^ z;^Hal;Wx9~4-2KH{Z20u{vB@(Un$BnxVWTAW3oE_uGiIgZ|co*8*Zuj9A=IRbWT(h z+tJf2cY4cUcZy0#OS$Ft^{|E;DoEGWVn`$A#%h{L{JTVnXDz$)(DCn|qN&2dkmPL} zG$_Q#)uUGpZ**~7azu=R#LT<_Ks>kt)7%Ttt{@O`m_PKsJZ9wvf)0(B5CvM2P|S`U zyNwtw1~;LyHF~}nGRZN-WEmzzsXfC>)Xo|jmKdn9G2A6CTG;sAkOD1Ps4MgkhsQg& z$01yKfo25q@QLAzifVWP-b?}gdk|Pwdi~}NTqy*kPtSXgFu0`G z+1-s}txr_Slf_QPy!WPCs0cZb|E0E#ODX&~<=X~VVNa}YJ!nw)k@~0EF#|%2cBJaI z4R4*A%bYf54nCwPfFwV<(7zJF5w>P9H7QR7HG0*hOH4wY=pl)y7d;6pE`9;Jkfu;- zSb&(&*tWybY^LGZ&Wm~m9)XTDPe&3YzA4^kQy*86!L3B)ZL3}POo2X$0N>?^Vbn?h z#c_l$6(?rT>A=X8)pz^E?pNjYh(>=57t^|VmIMaLq6ofO8xQ>c$!N67??LgQk%JTb^QM45HohQaWRl7d`W&!VKkooris zh$e3RK1Mn5c2+G-W336lwpYqqQTg{4hKToZxOkpT^_2+*Sm5S=nWIuVv!1Pr2J2<_ z{eTD^3}3GUCJ9FF=sIFED~l|v7F;28M{?;yXzX@>=ju<5)cwts7u(YmmCD!+BKA zVVz&`=+oNi+6LX7d_`aK18h~m1c`-W(aOm{OuOTfoI!g>Cm3#L-CuZhJ2yICWuabiBa^Xp6eFHM(#}*7kn{LSe8x`tiD^ZlQb`pl|rmr z^G}=shjaey@1gX}WpA>(zn)<=`7HC`s6ghx14$xK!jHXr1?lFty02s4w_%V9Ysp;R_o>R;j1XQaxFc;aDb7}OzSYrY*SUR*daq$pVBtHuICcL1k8(Jd!$Al z#4_(|5kX$aWcBI(^#`?ckH)j@*^2s^T>(#HB0<~gZ(M86?YK`=bE=PCE;BjU>vxln z`6TuA1zH{8qrp5JdHgpfz6+ksIFpR)M$1ZeWIuTQId}v)Yr0(_QKv^wucz)FGn2x? zc=0UyT4{-+yV@PpS;To^1~Y8D9Wg5`wF3XhU7QuAb(M~Q7=`56%4ltqyph8p>2i+% zmsb$5Zz?K$-i70XPD{FO*D4!@>}V;$2avd572WGMOX{ko6E(v z)K6gJJZCG5N64Y-d8+hC%sgRq6nFH=hWz>^lW<{hldWRBeM}pNU5((NUDp+w>`s96 z;~6GoduO31#)ZLIpXxgmFA8~P!EtJZn)a>wyQTof8K=yETN`VhZRaDwV9Dl;G%(j7 z1tpqrB*WJJU{IP)EVI=KK}3}&C+}+%`{bSZ#+&dsAEy@R~)wIzs-%?(x+ z0A6qu|Cj)umuv>lD#!~3Yp5Lx8}%%!^TU#N?hhcY3ryTr<}AJa<`P*}myc(;336(8 z(VCLb(ACd6nYXVOT@PKi+s!mX2_`F9T`}(-kLyIrW`!0Zqioa&;$~NClT&E8>k`=5 zA2eqgqHAY59x*&5Gg#a%cR_VVrxK`y$kRrtY@ZfUb+=ZKgiMyszj?c$2CBNR;o=fg zqZ7oEMzj&!hX$@$+<*1HyS-`_LSX%z)+mf*IKjZ*W*{T}Yr4Eh60S|NE)JD}yO=J_ z_PJ>%7h&~bO`K8Gcb9e&GuBnGNHS%-^2Ou)m zFK%msgi}k2>X80)xz}o>;Rc8&&dKA;CU=(%<>@zVV<`2DU7X1n=0wNagI_7fwL4G7 zb);mSy8S$G!>jaN>tc@?Td#|IdqV?OE6T(IiIS%K`apPo%I%72f|;QuT& zzfH^Dt_&HqdlnQZ#H#ve8f_37kEJymruJDf(R+y*UjE~!gx-m5z_c@k#npC~qPa)~^Jxi0V4 z-QmG4@L@gA)odyvlo9SZNw@fj&0d z+H;I?ZK0PJLSpGYii!ohSL;8++`z&vf*UN}>_0(0v>PDA(HKFIS5~4oN@kw>tDpLn zrB*Cv6#$}o{4-KQ>%E02MCLmk)eZ{J?!6v%zjbj`-%XIS=AHptIj5wD z`*TD0*j(JR%}WQVTV6}gKU~t9W-USBX`(;D} z>{DGf-fzqa#tI4Ud3pn-$nN0aC0+GVcfG5h?jRRXEMDh`6L26Cf*|(I1#}&ZGG1p- z!&5da#0M5m*T#O4=gRx;Vch2-Vq)16_UU2Ik<}#k?m*-~6tod;M9E~5xts=TkOW?Rd(nQ`96n2aovLS$ZMBX4ot26r4KbYcTm)g(u{5u*GCVaPYog z`$ODpDbGW}>$nZrFlQhrDVZImBFrya7HTG*=5OH28eTnpy@O@T_MIWbU?4L*aF@}V z1G~tsu%laK`13}t0P_=1ffc;-`xySe9s+GcviAWN77Zok`<50_KG$9A{1|2U&t-Vu z3Q<^3tS#m^i>2q&n_59GFrV!FWY8YtjH6%n-xx_ZVERQ*KLYsdrd4Eygi(?dI z-jJC>NJWs`m0+a+=vp3H+D@dx8@xB)j}uQ?PRaP)my_@IN3S``_d1%EACRV_a)+dK zJFlJh_lATv8QM%lwwQw7&5nPkIyKqW-`RFLy{;OZ`LMswvgDcCsN;&g_E{zpKCPi^ zSq{{zsFs{oY=M#Dv}Qt)k=BQ&+Gvsk)+bs%E_2kFpSpP)ueoc~+Bk2N+v7+RP6r~;ng!q5?3CUw z(HHD>sJrqKLZ2ZpV%IRAaUhAFDH*MY0Tkh)Q=5A!cWU6+1$}Dh& z%sR*jA7Zsz&r>qr>24aIFsTKawR56#RhFd&lxR+VPp9D1A=}NWAm86_WTPW_$z$~` z;yAtel81-A?JoWksG}TUzX85BhXCKahSZ*@0%jfVP$Q&X-rOodpS;bB7q@v^NY0p- z-okH=Zy=c0J|FcY09Yl?qWg0P{Y&3LL!trxslGfjUh_x4Tj9)_ZVBAW0E{+7#l_)M z633GVK**niuPTG|L2m%L1Kn@J=#@k6=@!#v(=_&b$jEg&+ls`^4 zuv@dMZjH5NxAu7T=z^#8>gkqgM#)iD8Qw0RKIC->thaJ4e;WGoLTReP%5e(kP;6zw z&HMJ~IZz_leZ5&x@*4`2k<1B9?Nmwl)ts<0i(HbUmrpOxEo4|NNIrM+tut0s4_dzW z$=lJM;tU@9n#W_knI$GlObmW?8E*7;{jg}+FV=l4iD7=D%_?CKz5I1f8v)ZUX%BQ~ zJ8QPDW)ti*of3LnIOyPZyHrl9Df&pWP)#fp=Y!UTE7;V4UxV+f^tGANOOU*tT zRuDb_7C~ZhT36(ATGxj-XgXHUGUy$U*w$Ym_Sc@H=cpFE(0Pk;J7fHnzkT3h%8}=& zk2;~ftg+Di$3zbcrhgMz>GtsZw&WkIm;wH^Xa_M;RKCB`{Ekz7O;&$%g5?0sR?)`< z#KikNfOU2<9v9m=vff?Q2J2No!B6L!0s;CH>)4bE8Qy6VN zAU`2>y1b`~b>&sKoEAG@EJ*tD^wDDBz=VOw5jvP21oZ(M{aic|F%1m@iEzGhM#bhR z5QQc2+zR|Rh$(DgH5vzn9WZ|Ae8xmUtQj+=Ar^UXYr+@pz`*6XHP-v zxxL1n0NU>#3C2Ozlm7hQVg>)n=C`CI?K!u#d9Rd9POWlC`>F%Vh*mS16Li;lN@pYz z=zN7!Hi#!m&>z>YPjjcbC{nMR>Y@`5-0uxLii&<1F0iE#pG#>HBcy%=G*ZyH+*>$2 zR}Wu>C7y@@$$x>taYDdv6x1vbJbc_Gj||mV_RR4;y^P6@3(Z49_PC*TRY*Z}To|R8 z6?TB35V}5~J?0RIR1{6890D`3Y*H)tO&rsj{RCzN-?Wsu8698K=h@%( zOM@@%+%+oNd%3rCa%Xqij1nlFCNTLp%N*?2o_dH)A5Q|Ulr$p}s;p4*)!DCodC^zT zt5qykx1Bz6-k`ayrvYe^X=1O{nA~reJh1A&we2L*r@4OdZz3&~U+?nEf-Ln6#u_1` z`S`fIUwB>Jyxy(aqihp8yz3COV*z?Lb=E+8lwNYpjU(dLX%xp#~?1UG^d_>RwI)e{~Zb6@0ky-bBjfg&YJj2%V@#HpjO z0-OWT>1epWM-)U_pB(CXOc=yk8XLg%6@P$V^}7p(x8e3oDp6NqT_bX$yo)_3vUT0P ziNb`3do+RgDXs94WSIqbE19^+oLbBn4+3_eUQY|Fn-a@4MXM zOcLJpATERWw^|NP+O`Aq!)$IKeBIUHEc}IOk>&JPPQ4kOZ#2L1q_yst{hc&XAPQhm}c*Q$@gt6{YMR0X zc=v3-k2%QA=ztQ?s0GGI<1W+pTwfVy#`+tP)&d8AhvVmn8SO8d5TRmMH>SyBrzl{r z`G<;dxDX+}*bA8v@|jv%Dk?ZUzYL=~C3GumkO!m!k2eEsYxl%8q7Z89LxvWhvk=t+ zjczl?dc(1#{?4vB{D}s`f#>BYdCcn~+cdQgY$tgNbuB++O~{>omgVxT{hZsnwNHSW z$zL{YL!C4nMiQjkY!XY2J6ZYmRc$bbHGHtQV^;+5faJ`*OQ-bX)OQ7Xk~Qc1KY$dc zn*7vP3Gn0nH>RvI71fi`Ygjz|C~y*d#5b`qP79!t!DQSbI9L(95;oJp4+fleXC?s~ z65YHXMp#aa{VT)$Yeg=zmww6a z2<3(PeAH(d-b&0r_{v)hho7DpA6|IzIN}t!o^XwMAF^Mm*)$3m&6G+-fl|e9yXb$^ z*J?P3suupSXDdKO1KyMw4*TE)eU^)S@ail^m1%=icFk0k%D?pGxiS6e`9#8&0gw<0 zOsnh?``#95rr8*Q*-we1LHpC!PID>2QD8xnF#r|o-oi%`$O70ary7d3JiCSDePAX;t~gby+t0^iSCK3pOKJt!T^(D4g}A`+8$k%>d5o z8CktWYX1I^Y0_RKfLwMm^AADCW>|7QEGE6Pf8j;yaG_objbmo}%%g4$L8NpEfcH$( z&*Cx-G?BrsS(6m@=En3XwIg4M`o;9#jN_di^dKhOI9H3};Q;%#DivQ@`rbqi^gM8p zV}tbTC}j9)S@lA`)- zJ0r$uiOS)ToA)=Z_0{RGOt%-almxbnOoRhgc-G%0=KAKD(T()8^j`-!)mhkpRIeUQ zQ&uMNt$+SS_yn7lmWpLIQ+R#Nv==0U=T*-LU9DmhF$TUgd!^D|b@(S%&SMO`@e?kX=5X#Dc z`gMvc<05|NllkQt;qovgchwo{B)BIiBP|i5iDs=m{XWE8#e4-Hzd1X zfceCZeI#^VrU*^*gVz1xjk}*68^(an*4*7*AslZ{MuL5f893ZoO6i7&*>YE%d&%L} zLtMkv@Q8Xa%9<~VT=F+Io)*<6cRWNn-Xsn&02IGGsa}8&ov=&fVEuE*V_(HiZDeXlJ+gwK;sR>=Bs6xUWEBtC9UAa+-+iD__P18 z(H{hzDrNHSI%=-2HT}`H*Ng5On8QL3%z%y;sQ^EE-mzd- z@&!CMZBVZo@E_n#UM&}`-R2pN{AX_(maZ>PHwn?rj4VMEd@L_a+7ejAMX=TSSZN2` zWcM{SW7-Vf;zY~<*3@F%`ji0lDZjM=`hjidOcIk*gQSGw(sxYut_@p894Z7_-SPbM z{vZHQMt!*vW(l#GsE*jz&Fcz_{LnAJG0-~WJ3*>$UE4u8=7i8Szc;<8P#{$PBJq3? z<3JhMPB6K4-1`p|cPiZ+5&VbSbhHwpDCTLevYxuZ<1$v`u+Q+ZJU7QJ(U4yw#kLdJ}bK&{W+rVc5+>2{f z-s4`tfy?b5rP(9R5ISYzcZ;WcKj~X79D!uQJfhyHwk=-Br=Ef*NTMA9Pi)7D`&&y) zl`wD#aDg4M7BJ%U7>>(D^YeHDF6~Au3UQxkgSbiF?N50CI5jt_u>KMm2GGh{34)46 zH$Hw-38cddxV9UuFT@QT8oh1wKEHe1Ng%hmzjacy0gq+6EAqE*W!as*j^y5Z(AwL-Sg|0FdarJ1pmY&DZEw&67N z=3uM(<>Wo+_-AqFM*E;@-3{))!Xv`&FiAw++$JugK3l8;NKsAI=#*6lauBce_XLz$ zh752m35d7Mnn^%Z=E7ccA#Gy~s7{NQx9DnpF0Ku!P+z26VLyoFJDKO}>47{4;F6R@ zTs_Kb+Xk#Ptbk;aN}%k~r-AMdLbK-l3*u}^WG=e2H@J6RVH_9=_^4b!$rS6;A)>0j z!X*}IEA0w5cuxNz6oo!MZr}MF3VuC%oY9hx+=b~SGUpfY+1$h%)Q;bGWH{7q%4uHy z3>^A18M3bUF*-ASV7U9BFReDrH`VE`7BhaVMxH5#mFQD{X2AH)pzi!Xdb>3Dwt!|b z&t7Iz$C}2DCD#`qkbt-=nZqe1fN>}?E@#u>LA`OIvty{6d1Z~qc>-<$wSl|J&NGnW z{$GXBM3$Y|D?pqG$S`{QmxnT%A#<%F_>oYD*=Q*ipkI#xPzrOrn$d-@>|{Vn>-(g^ z1PFk}RMG|$E1c@bbPh5AjG4_<*7u-M;eNPoV_VQ>o>v|Ol5Xuhr0}U+7$Lp_9728r9qik5jvbY_t!ING&)p#_p7d;N&eW%5YH~-IUDATGb0;?8{nzPahriEEpgwE&T{v?UDr=_!r zmmtE+#*73I#p{pgqTDD|`br`!bigG5=yYJS2iqGfX~yKJkJOx~UNXZ9@)p`&dA?53 zA&1gWan0tuD>+YXks>Un3)iFocbW-+FX$wLOuRj~Adk4Gg_nLOIK(+*G!)uOTO&Zg z`x$zDBqdlYg0CAT4(XDho z$@~2~3Rr)8`{;?@Xm6ix!*0{6bsN4QBn)~+#+dD)6g!ELV{I2ts+~+{bUfM4WamAg z2}{8FI0tC4DAukY*Y@}fuPMVLj>{#;V&yFF6(!Mx|A2M^S-)DZ&yHbr}ZF@&^4!%4bzJ0zSIBSMr zt&h5fQGI8y0|Fb`Dai!rG0PwK6&i63vx`wfokuDAO-u0#zv@OOvT>#{&#%*!6+Di9 z=(4iWn9)aYdY2X5`Bg@t5Z~!=&~Ths$9}j|M2rFMvV7(u)-P#`>uU; zjq;554*@Bel_`*K7FKz}90^C7PdP={G$NoIV_BeRBVz&tyiosLydlDe)eiyM zTuDH1+gG_siZ*MO8%g4st*{yId*xNp8R^uc&yF$sY@b!Upl~TpX8s0a4jClGkqe!9 zWvb;{Me&=ZBaHZqRhlKJ&BrpzRzxx>>8LH?q;i3I-Q9_)f+l>tiZbE zxbu=4grgimT~1EL`}tc0t{yLeDq?*CRLJNlJ`jYLtG!#tC)nJ8no-=#NcjfvPO9?U zpc8&rm(BCw3tfU-1Nlm??K=z%qgi>eI#@#ys7j4Qwa7FncWps$*T}IZ75*UIV(2PC zR%3bA0CT3J2lzYy`~Q1LU^fWx%_3H;rUrSTEcF?7?LwiiU+8^N3(N}nVm=4qhRN56 z7~2)MGr3J7mUMbv7drK>##kWX0E5wHb1=+$vqYPZA{wYY_K!-v;I9<2-XdPy-ltk8 zKlR~1#=%gAv$B4gX126SlTtrr)_LQa3nR%$zAN`gyUbrNmO^9|L`H?~zfr z0)A*s9gqNq4^-FpS$T6A9s+c$y=is2z9mvTzu^juBo785dO6;Qv}%%zUb7eDbqH|N zXUVH{r0~+!DIuu_l7`}amU{cOoIX-sj|Cd9rC-Wu5{XKirDIQ}$xE3d%_nNm4zNwS ziHI|l^!^VQpgIq7*VLO;An`tlFd%UFu@Yfk*5IS1V)a}8Ko#f!Li-HVzWvP4E+34X z@9Zypibt8|B@7_~VDSZH)!$zfegV8BKt$&P!Y3e&TLPSjWBhr;p96!28}? zSY>=Cv+Qyp8cz?Ju&aGyX6;K9Q2iDL3!3FZSVpbxr$G%; z3`5?)Ym(JSMK6PkCR`Vkw<^sD@N;IkI76ofymkvLykm7r;-8v(_tw8wM842PNgCo2 z6M@k8+5kR`;8e*~u7asViFc@aHKEJ}@ZqjsfKxDS>I;cYLZ*M8?r-UcRPC%|+xh4AZ)C2lv*W534>``8=MZQ5O~{+Qk{A|k!!2swS4=7FURezGmIYSvZ({&C1eTv0I!S6!gD5%mY)Xh}|5KZBf zD-pV;NB#xpLvA(S?%&cU=nhTAyhD&0+7FA~-N)qC>cz0LfSv{A%)2IG&&-Obt17&W zekLTrETZxN_=)?h42Py1UaXR=a)gD7*%DeKtLK%Lk%P{ivvu40v-gb*i;2*Llj-uU z1Kjr~OkOZ!7Z-vVo%F$~=MyE8tHWMK_^Y3@-oA*g8zo*B^QkKRif#n@C}?!o^RP7A z0smQ_>PKA#vdkIi@k(vQ`A`|CT)1cv&d-40Qn-prOtU2lFZ8QNHu=>u0df8XA(G-Ebtqie8z|7DRFf!lZN zGs}oMjxFIl6*m75u1EucOUrrhK9QVgM_s~T7enl2&t^dJK6o&+g5y1ah}jF zC1^l^0vIbZ-*afCN9c>L?&_DQDFgayM;v}VXC6}4{oIS+xuSMJ*?Bqj&hz=kxefyl zVRDW*aJ<+V(y-z}HngFMI7!M<1|2w_((1dlp{zG|Ugs2Ⓢ)`Iz1GrGamKNzqGIb zTk+I?cif|cer!SP9igz)B{I86+<0aTp|SeJ**8Org>PlWd?o*fxJ7fv_;`NZPT=Ad z2~QnRQHqV&VCHl?*kJ>wKhL54#o9Z1ExV>I9$SI{(MBm0K(O%J+@2VEvEx$wLS*$kBNBbjuaJR<1~5{%#RAtvQ}&lAl~ zPhXG}0fb)Cy*Z_Vv%ZLB?dJmt)tA~|7a~CE1e`1ai@M|o*L51@f06*1C?IHg=3&9} z^{e4gUKc|` zAl%UU*_aMi++0BCt?ec~cGfDg>lbr|FzE)9`jalGhdu&s$Q?Kw(GKlOnCBtZMJU`<|$=|tiHsM^u` zlSkyS&fUT+qEw5;*H5lGj-1Z>=}uLD{QVWKPe#y?b~St~x@erJVcy2W_x7Aa>zYiz z>Hjf)SQK3xwFli){Bd}iaP_PCiTxGuFbhgcd;8jiUUt4JTly{4NqU>n($K%DfhR%# zI!f5DjO-D1x+alS_*Rn&I!m4jT>{b1+~rP;VvRJMwk3DV>xq4v-W*+BG@Pzg^`&%E zK&&=4QR#j9H1f)jidh>Mf3O+(MbfVRTBz_lPpIfff)gPB|18tw3vkf0{g23Q%`k`b z?cjivs0Y_~709%J1@X40Bf%NEO=(i^Dl0=y!U&zNkQU9DW!At7)oW)Sdol$YMgzkw zl#lxK~bZFhHM&0Dob7Nh%qalDzouar-fu-Gap*hqyWWI45*C(B~ zkD@Kht6YoKd-KLkRKA1nB13lXc~yTtZ6a6VjoT~L#_*cprCpJ0Mz?ShKLe4<&vmm~ z>sPfa8};~lYi;dKzaFM|Br_?)>deLe)#lV}LsZ+-+q+(q%D#0Qdn?Jl_B1z`0Rrri z>Ca}r+rBbx;)+Xp9oxsfq_ZDr7#Zo?-SX>K2GAGNGg}8xj|;=^{%CPEzHw77`h0}P zdO|cPv=b0Rf-g64+GhSKe?ii7HLoxmkL$Pliu#!)(iyZ-g1OR%!zuO0vtj*_J%Ip4 zNDG^4i+WaRpF5aYWyUnN*@=H+xm2X=LEK`lA>H=*1hnn(kK*?t5m8t2jkZiHBI3mT z;qbd%Y2Sa~Atz7QHI?g)B1 zxZIf8H&flJ1-$frCh<0gd;^h&MDOPa|1eOL4qmXGjhkCXXL=P>FXFBJzG+UhpY})` zE09-Vu8Dm@WVHLqhw;ArJl(qYo@1j|!x;gN*ShN$SY_AkyND05Kj5&~0SF>!7}Ji$ zMz&&jkEwFL$9ZjGtuiyN`|gonY~JDzke_`GH4K#3?_W^)+Z?`Y)B@fbCzmlk#Qx>d z^Q6m0?ofQ{N|=PRFdmFU8W{pwi(;P7Xaq$p&FC`&Z$s0 z%o?lmfxn|;)vEo4@^9=-xzh@3EdoMk?I_qdEA3Tu7dNkn%v3pK6fbk5eqP|&Sf4q` z8;A$5{UA}LZbyx7=-IidfLy71y4=2fxjx-IGYqQ6h3naNo;M^?9L;r%PvOx9ON|+GDSh5`)kewbQ~1mB&ZCt zqgtQ~$n!%niBvin2>!+oTn6^UyzUYf_BMcCTr!O(9l?=gC!NmJh0rToMx(lVREkW^ z?-vfv>041K>t5KPSW=h3X`o$A+4Tdo%fwfdqb%mx$emY_MyrqRoD=D7^|4YOIWeA7 zSWu%(IjYyIv4wI)?e&wr7tmPEm>T+v+`^nx;>j=R&~j$Bz~W*OJfYcBI%0I(_ow}v z&MrI6&j@jW;*!|UpEz|&`DNP$%|=7c-)Vrhh->nnR5eX2w1O25hr44XMyqAzK0U(?uQDR3y!0M%O4X zQixfZ!bC?i0>!K;05HgWEBLZu4cY?YtJic?xL;;MQ)hFJ=1R$nhq^Rnu+Dzy3fhM! z-Jw!QTPVnteCydvV6stX2z)CITqC zIK*uQ`8jSGI*9=A7a1$Hm6y3}r|-$;&@Dr4MlEMw-7iBJ+Oa5K-+%}$+MV1M-G#vs z4XBc#J-J%|Y6{kKNoG^tAxEyuH2ryz`c-_t(tm^C3babllN0!azX@e#inaJPT+yZa zZ-7nEJ4g2wA#)L{k?(@^@v_mfv)$*k`g%TdzM;iFm%$Leo9W?;s7%OUV8}q9?e13& zCbg6Ge7zd-E6cT!gr~k4u%U zp*cpY<=)~O^5It$@F-vL+xH2LiDaKjWo1({q5C9!#~JxPVCr!WvR1gm2t>z?OZejO zvkw%B{-^Ux^ZU_Qgdsq0+|PhAd%hJiKGmU)s)=#ft&z<}Uv1{MM@AoMKp^gD(Wh}k zk7MttKYSl442!GH^ZW$+LoHx-z_e3q{}?+rW<&tdnJR)A21ZgM>pL=XmIo+|`>KXoMtJT06`X~lX_Er8{W5diq&gacX z_h_!($NDb?yDuvBDRd`oFZ8Dghq(MDPDJmItkmxU{iTT;hn-HQM~08~&+GY@dT;u* zbY^2)ZgeEX4+?(SMF(t;9{U!%n+pRKeOvbVWllI|J)` zyxWW&0wi;+>FLd(U|pABT3I!?Y7rfvC$$W)$^_gxqJXw_W8)!D(vaS>e&hA#*gp6e z-E^t*GqTo+TtwSfMc~+mC2d#KwB$k8ADEu~p1u@k!N`A9wVNnsNZa>hIp|0JTjW(PNXS8Kc zr$+Nej4p$6bo38;sm}?$byKeh!-&7u2nJMm?{L0V;1nSn_{~Z?GVyq7ej?j%zPE{h zI;*(p+E#CXZWPOpZAd_Xr38?A1lJ$#m-&+~+p5fS@t!JdMZ6%4;R`3vj|JA9k{&&y zSXG2};Gq>^SW|;kGf8ZWSLa!J(Sq%En^I*`)+rp@qN&XSfniJ$ zNWcuH?$vt!HKm?zblHJ!Wj^skqc;}zmv3Fcmu!I#4ehv@_?qY1loH81oT!E|J)Gc9 zC5PK#Ips_OnaB@-t41fqU$1vKJ0=;I$m=Iw>Rl_)@SQeq-&_*|%arlwKSe*5v(W;E zK`{t}0G4??kvVrh6++Fx>uvhPKlbcx{5h5P@70ocfC1(hV@MY?VD!AnDt8NzQNKv* zn57;#etVSIZ^r<3AWlx#wu;53mTY@lY|_l~mfD58NipyrG;l>S1rjf3ly|kpy#lx+ z8TUd3I4^@I8G9DZ!Yql!_Lix`2J6RlYXew8vkgO)=hI%7$5Y!~6} zUDe?Rr^MeqC!(*v(r)Zju6Q3GQqS-P01F|u(m0@v!^f3u@0@&NTw2!ER~HbS&Gm4B zYE`74rZZ(ZE0mc)EHKk$d6}(OVbv*oAsdI|WSl{B4l4}XvnUm@jW~^Q9pik~RjfPV zC@jwm`rC9;lu{_dQv?Ms<)C@@5)rWboHvyi5yvY zn)byjNxH<;jiyqs^7+?M(Ry%=iP~+_u;rYwwTK;4bIS-i^T@kf zDSPQ=u7n6)1sY4=*xqAl)JAi-zNai(zC^AkZ*fEGG_uoVl9h{3J+i@m4ut(()?Bvy z{UoRItOFth@`iF$I5P;#l0PMtDgv|C8)78|CAIj>znwn_1KNd&Qm&b#&HUIJB8rF> zX#HG+vMgS_b~O}d;ZM%s5sf{BXKvx|-Sg4l`3=+eqq<>v+FV(xY!P+zvA~B!DI0RH z=k=2V&Ve%VW%lGQf@gaW^@endx%i&5+;uGu;XG|Zbf((aS|e8y-*0N)%nY%BsvPoa z(c_rCF!^Jt!}P*$wkJ51bQ>6C1P=sOH_^Pfi`+h3&nMU^PUg9N@Mfo#2^NMM&z{{o zjCaFT1l%Vp$*-U5u(YH`86J4`2@rrfpz63W%@pkD7qjYSU_coO+aUDRvkxOxm$xxx zznUf^pj7JW>cYgq5&PyRD&_ut<08c5(TO?KF(xVPWeN+G1SzbAkC``o%vOm;m_2=~ zewA-=MN;7LbxA(r1cxc63e#g4Meq$`op ztyw|&gq4uX+8I;8hJgB*sJ-0VR=nZKXuIGwP9M7$coQ7cER;GJ@+QuN??zS7ll2LG zF{6Ew*ofd>nFut5-nwIv(8?7T@s=)T?b53j)dLI~HlcDh|yfT$V@XQ0J+s8 zh7Nwoms5&H1lNm3rWK64V#g#u#yvkarql>F)7UsjFy~gir=P!xi+(B5UZM^@*F)Ta zCQ9qeidrt`Q$_t>vdF4|dy8YWrW+WlyYTZHs?ML3_f5xXPl-$w^OpG*O_a*S+VEeP zAx})_uwF(MKn&Kf93^$w4c4!icKc8mXF$-^1sylvq_9|%bV4~t|Hulq{#fJ_sAAW{iCduK$Ld%;sa5~&pzav zt-(DuHYSc>Y}spaU*embf)+g^Z=j+JOyN7k7=0aRud>>E)QqDLt#P(eo2W_ zaf+71u_@AnG4daL6U{)IkNh)UZP(y|-u?lDYnx}IJV9GNYfok)&kM!H2kX?NQ53I` z$Sacp4_eU8lN~q*uIV~03|$_l#+_z_f z*GA|qpC?|gM0WWKq*oxv%ku*c6k9Y;g|<0w90)$!$(K?&f!WWN!H=PDONr&qkv$~8 z8S{%7A#gQ67%|UpQ0M1Z_su8xT8~iCX=7`Qx8_Xtb{XFn8A&^f9X6x%_G$Di*5)U* z7*!^_9q^4ar7iaAYrA9gY)9xjNf?;vC2cU$FdcEMdmr8eaPD8&sgTfH%p40f-Hy{# zIv=sJR0SYRJY>k4*<0buvr74@)rn+Io#ZN2^OjW?o0U1Gecb0fM2CD@P@ye0F>;F} z5O+zX1|J?SS0z4>yTz3(FcSXGKt0})BN_FLCO5{^!EPe5wa2b_!2vX%a`usJF$qbJ z6uq>sA3A`VTNZ)C_3fzZd;6+)41C7r#%~+RMwQQ=Ume-oe-?eQ0r%WA zv|d3o{k6QfC8BCTv-(zz%wwG}BqSoID*SLhgzJPr>T8!$4he1{^rZ)^Rj)I`dH^+t z89}F1k>WT2uGn!k39*wsNPhpz352a18~dAP%WY!r%N~4(qG&~~ln68h+s%iX_ExDR zonOE2Nz;4l8+S~t9`!GH4ucNM^6gFlcb;%s$8WAjGqT4*9M1lej5czlw6AuhE7doW znC5OEVAGhKe}83<)NA@)I1H=v^?35N^cVaMg>831#9uiAfn=aWMlb#iGF^0FT#yG3 zHGgWxDAqs_XyDPijMj)yi-@GC=h}qX{tZo(;3)Tf?HA5Xe`K1qwhDKwEw-^pRXPf8h?nNw%(4ZNir$SL!CsfQ*e zduT(|%S+^s-j*nHs~jikhDIEJKu%?(fjy=()WUS-;52^#@^IQwkKLO4;GA|NLsvhz zF8qqbR`7cK14)fkrKgT6HO|5oEth4>9;9@LJug0N%C?8oV3{UnV49b>qxvTBbrgv0 zBRjiuLvau{J=s%`x4SW+#juDfi~+#GBR?~>7nVl70vE6(llj1! zZ5z0)DNc{J{70wW*!>o#^pScafJYiU%4PDZhQBfhy{%k5sJV`J$x4bZhO%?-KeGDg z)yeiYT7v0o@tkdtA>nx$yfH3b%+-Mfo#3uw{i{F~`b&zOqpx|X_$8rgQPp$UJPnSq|b?^G_Z3in9TM|P|2JOiG2?vr~zI5Zi%Dubu8sLNB zHpu32IC6~|pl+0MVGLo|M?JO?WHF^UU`D6x4AL4ci%ZaT>x*CNZ$jr_@I(__NlxEQ zo)wD9ZK%YoNi<B!-iu0^7&vNP$cqfU>BIy=9uysG;Y{MpIm zbkI;=8X>IPv9C;#;!g<7a}Wh~=DtlIA4y+yKP=T?i1cds@{9M42(>rOuc<=Z%mjy<-Onk+e0vPY?US zCR{RJ6+Rr-;bMeO%KUSmE^%YkFO0UH=7R}4>K=-cY%MOkN^cVhi; zC|sTw7>K0FRfHZlQWC0m#80|?uWn|t(IRNsxBcNLV*8|({JJnqH*sQTFu`LTpM#V4rciqjZ+pnQ1Pu^ufpZ!mi)0<(3ZIR>vGl> zEKB98|1ok&q)&vf(P>EOx;K8gAWbpLXr%>HmhxH7Ib+$?@{7{{r@%R@Gg}e ztJP?vPn@lD{ctoG8K3He+#KzMJHv*&-y#mlo69}wzy^s`fZi{oZ8@ym2sk&+?c8`h zBxhx2@R<8AK45&9JJXa%1_U+Oi6yal*XofM$1P|*D z+wQ5NR-RWL&&Z*n0(PpZUo0Yw=8?V5fpZUz;we}OcIWFIo8&T8@p!<@b{zwpd(Pqd zgD4Z~QA$#(`ybX74jCAE*^_hL;meYbIe)@_MMy}$EIV0i>!k6b2nBq2K$StmhNG}^ z;p*1%!1_Wd-?;i!-Wsn9t-X^33Su2#YgCGb{&I4Z{!u02(0b?Ylhq*u_3%3>INPJgVQB(-G?*3*K;<-o;e@iqXNxQB)PS?;+V zh%vNg+YdPS2;3qa3F7@a=oG$%nQNV&aO#1P8u#RTJvTss8xB;ho0y zHPZS}AyZ`cFOFQC_Sdyu;Rds9b#3<1Kef3zrn;%Jjbz5@z_BK}NOr~ik%mgsRCH*O z&^2v^eSs17`=0j8@NlXwq(3JmvC?Ii?niv<4M_w2C6P_xKK`PHeLcf;^ zzcvV1C>|@xhfBbd{n82N?x_i<%sbMjvliA)5E~vt$L^#qnq$D1)JC+|AdJ86M2}e+ zHl7&dp!w&0Xr0e>w)Q@N?uvr3qwR-4Pz5=7I{KFMW<$<7}}H`-99B~up1krWvQ%UoYip-+n)nyL^ZnBp_(HBSug8F zh7{JBOSKdTh=pXfCee}06YeDXyF&?Lx{}?b*iy^3#c~mgZ6_Pjhld~2`GCAd_LGKK z&a$-lPbu!=8@*2oS~^4TMU6Q($gaye`fp1H`4|1OgNZrgQJra|BS%a%Oz|`{ylc&P zNzAMgY>GtSje8#KBZ?)4GI}OQUI%b=q~*65XYn6Lf7!~&?^vkK{;O+Zj_nHjkjKK- zm6+I>QVmQ5ec}i}3q#nk%M*!``qm-N8Npk=qX51n6iaTvqhfOnn`^aVe0E#8$*16_ z3`88^m1BCo#a*U*P*V?;LIddJUu0n!iD=QtVaXcUy$=?G*$QrLM_ndX1ukXXSoJU+ z?C*UeEXl?}bb0%8%h?mm-byEI*`wd3hOJSOgkI)&rHNM$^_^o##LhOc;V^*?vUyCb zmixn!GvVU?35rAvCqj+J;C#~%-d&RzZ-8abTpz*Gnqoe?oSP&anmjzbCHAPDzcp^A zs}+y6G`G)OT+X)oEEc~J9sLCn(~WnsvxmKZK8_)Jzf@y<{x8~iXpLpL%a@{zGSr3ZtRsb%UH@B78iK)VO zgbFZFV9AOFq=MJwX3KWyM}rJ3_TrLu*Khk~eGY~}Zt)fB%nps)7Acwb#^2jooj;QsltqK}3Y^z116OVN;>9-?b0>$Q&NSfS@h~D$QHy); zCyC8#gCurLI#OND><%$~aAssB9O$~s6Cf|?o=DQPv$@GCgL38QS=`MKdpeZWGFCj{ zJT(&6ZvDDDV`}L5kqD?(%#IJ%zcK0ZJ3+DMB4;Pkir6(E(Zl65=Uj+Vr=2tA75eO|k$&-q?UU@0x_ zC2x_eGi%#*^|n`E!%+`8@PwRHHmv>_j&CN9=$Qr03)wGuK<1t(^4)N4S79G z0MQWbuWT&()ImJwuT@j5+*UU2ORi8aUF^~AZ*_q3`elLuV0fQXzwb8%I3)uH^DjQr zFMt1uZCR+U)ZKla!_apGVv|(1IA<)BcW%q}H-`CQc!lyeo9g{;W$X%f@;L=;CVZqx z7&?u-QR!MUUmJ5dOAxK zk*1{cq)|~*I};7*<&aH1d3Gkb*>#CAH@>q#+ar;r`o$IgCC^??c1r=gPCQkLVS0`- zQ8Y^!J&-n&zYa&@j7r(A?ZM2WNK5O=JtD~dZ#~#di$=`q)GP9Ap-{-{$4sdZu!~Ih z>d6A8J|E(GAV-$UdcjfAj{r7ly}H%MQr-qH{xu}wVgo!y7e1eTK?mOL>YsgqoDmQ? z>LuKch!=6JNz-JaMD^zYBnaHF{(cec%&f!Fw@7{fp^dhaU<;UsJBwcw(hrjMaLn@h z18t);8MX~E=?#aC?O!J5sa9apB!ZsLS5|Cwl>6qSKT=;6islFkCY+J0Jsw8rc1rER zmka9e46OaiyIA-V?@7Pu3Ct#*@|c<`k99<&wsRZMe|$S(`=%mN?qv?T$5CNL3lx-m z#`SlX#%_mwk2K$_WwQZ?$YiF-_Syho_%K9Ze)6fcaS0lqeS^sz39qAm|Ei%vn@X@& zv;Xk`8(&Fy5xgi1HeZ}#u7FYPy}=El1n4t zO!SESW8c{TZPB|d&B?WX^xvC8)!wio{X!CT*UrsZGh(`5`{|NEBF)-rZ{$vREkcSS zK2Emhd(w)~&B7R}CwKaxqOykWQ2$QndMVLo=2dqi=8@vkRrtols$I$FNRLKxFlSnl z`m^{TeH9bxZ_^Pe$}Qh_84v1nF@(=$E)=m~R>J;CG+e>$`9joYd;U2l(^yq}i5)65 z2|7Yr@OLP=wVv%b4cDPAVpRKVY9?jp;>SaI@FFck4%yI~R#yfZp%mSg6{vKNy)

LTJtdW`M(~qD`0wM|OvU_`rnhFqIJXaa(7};_up(TO? zw0!!0R3~S;K2-aWgNsyV-0Dqr^P!w(#+>kP9gndbd+wtcw|H0!&KRr(ll3Lj5L1 zD}J-0*XzMdjhe?cpX{&H1BBIJ5NhW&zLu!->QDHo`#8t(qV|qGBEB183^wh&;`n$fJ$xMeUs(Vb)yG+d2T?Hg_+_tEv-P;A{u$fHrl?Z% zvB6(KlO$Rskwd9HQBwMy#t6K;LHi;}(aw>VD*=FgBuz-yPQu%0)CUWvws&>64?VGP zFSFhlt=Kn~lRDEPci8WOfz&gIaw}FmPoDhsr=Dz&V1UU~x4-WnW(ecQpA}5T;+3Nz z4Qgh}jhSiz(n8%XKhL%pu#^Sa=anKT=b0~P(A9{9L7GFHR-P_aDrPyOC+T?mK`m?M z8GJIlk@fc;F~TdrfDljPJ#H5oF0Pu5{37-Qs;uk)*$iGS9{EFkoJIo6&&a&^JPpP< zx&*qsJPkTk#?6qFkosRJsUhr@=Wrs z;rqqc;q_zyDFN)7h^qEy8N{WWt7U@mHI?MR5>jkscz zBqwbf;mYXQ{K)nK?jY$H+D;pTcwhT->w@}4QqmVHq@$v z2STi8%JozBZkk;meslKr1RU&FVue}l%Jy;}S<5R4WQ&O%Y5Ha0;G3!3;a6aoj3wB* z;5}LGp6t0GAo6WYd2uicjMP*}L>A(GpA5kA<7cL%lhHcz{OO+DLS7_p;&BtU)N^N2 zUKfc!+}@e|U;r1b1^mNBefI-L{dU_nt~j)n;X*$Ot)l`kv4H3Ld&!9O(G!6OxAC7p z)Rb26_Tj=cxkhDlv zS032S7H)c(G&bnsg;9}VPz(bTZ)Bu&o_lhB?U$C9qut7&)E5pTn?a1ixp027I>M*Z zPab;sHW??jqejEyR8;h^6n8M4J7tWGg>L;5xCqyC$R{De~yJh&Dj`NxDlxB&{Q z8AH>sv6jTMGJl-dcfyLy^lmF8Z&)HqFTlgK1AEkO-xuc4?bi_ZSWgG`wdR&v{-pS@ zF?#_+m53bEy~$9?@GId57J4J;LW%rnCn`ziXUg4B<+kH1LF5NI@7?bkNY#OpZ?Wb_ zOvklV4@15fkoRt~oTcgEYJx(|QGC7%xCB(}DRU2Gp1w9=R7(A~a)pJ6ead_$FdSF> zM3QBgfU`|FkP*4V={fkrw2AzWJihAi$*SSMOtH&cOF49ar5g^*;7&XhD;#xrKVXz~ zY>v2_s3&Q&6JhYj4&n^f6v5VJB3ASHs@mW5Mj6&3ZjfMrm-<}(TQkvVB1xR8y~xps z2>u`3Ql{Z+T_idmcvMi z6s=R@alLbQ%->fj0i5)l{;_46u$F6geJpxw3nK*)@~>T$;HP)n3MuXDSMw(ih6{-C zpCM0U0}^XSnKFZJ|3xvi0t2y9nD;~ zehbk2I>K{3l*h8UwRbOkNW;B1fycY@u9W2i(m%gPO(JQf9aKbMKaLlZv}DNzO9<}rq+}_M)tQm!I3FPan6u*(Au{Ih47j~G8$rSezdD98S2MhC)jB%P z18$USAo~9-K*;!6!SY`zE->hFVns4=TMrFCMCIdo2RTlw##@fP0iX_f%(WSF&#;&R5q%44}ae}a0O z8WeZ){f`qPd~yigja|E#DxxpjJ5XVRqmoI6@YW+b=YuEV`_KBc?uhsUyNx&}pFZ_tB&HVM)1HWehgicUtUoZ(aXgnV3#U zZD>dGyv{}I#`+tbfhHT6|88;_z2$H9ZMK;El`pGeL;N{Pobis?%s`18ORC%H-uj=* zqou*eIC)K1zQ9=;F|rl2W*sCmgT`kCrmaRvO8TpF>8y>-RZ^)RBW*Gd^5q2x(^cW= z{2mGA^gT-I1y2x%bGzIdEyeLV*-%ZL6-+quAKXL=CC}-yT3Mnqw3|y+A2C?T0(DsQ zjzzP_Z0-j>uu71OlS3?SJKeAQl#Mw%iDss9feEfO^z<7?M?-rP^XlJB3YRkDD3Cs; zHlr$Le)^nA)LoD-fi>TEub(iukhv-;!LeV+?o&klJMh>|3jybP@`HpBwsvVxIqm=A z<|D7-Bg7AQlak+6LH{qZh5+#~Fp-SDD>1GQ#VlSjy|A$Gt@<3t&*ZrqSz3?(93^bF--eQzTiHFdk^S+X*KzhmIEu2qr~_M{?%)tS0@oerxsIn)6Zy9G}tK)*8b)L z0ry798XE3TOL(z%@zUEzVyhIEPh7>4Tkw~oXv-hm{{Q(EvHcF5vz8}lXDNAJigEqv zwd4L%^Qrb_ms3ol#-A@yUv%ZG6u=;joL)H0f4#2`sffY@zMIb+ymfm;_F9;Gf3|pf zh8M1#2*i65ew-#3lSasqdiYV)ec)yTowGk=Lu{$ zQB2_Fr^!msn<(-eLdP|MIr@Wx8wn!0Kn|wBPdX8M=n3g*IAV2%~`;G`J_KTby{ND0BaNZ2>39!R|1g2J`U0HFTgjw^os3k z$jB2>ZB?;v(&Xh~P)h~5HmuLgMD6f0fc&YU3cr;L<@%?bs0!$jd?;RCHyX-zj9z3R z(doku&7}9-(_fPk)gH?o^r~sKr%Aggla?kDu&pZrZWmBgy0%Sbq3#h5t&pxgkI!peZCM1Y@`>L-5N+owu3Ylu@tkN);h+5c$yTLjO3lYoJN7g+HBW9qG=qWZ!% zP!$lB5>aUorMrF$o9yA+V_&Y>Fy7+@Ik9)92bzI)f2nLlQ& zIp@r~_uJ2YANP8A=*$0+iWpO!*#Y+5gKVDr6l@MNIkEInENUK*!Wg&y%8b0Jp3oWb z=9IXqcM*Zw>zW2P4dvsOpMAGUc;3VghyQmGrT&p#y-k^0wYzqeF7K-aP4y?Dw9-JI z^~}L+AF-V3wXx;U_tA(!m$-T3-EJY2g;BM7FT{@8%$gr}3h#d;^5ceqZwkGcJ?m_qHFHYM&+~riO)4P! zpDpdYMfaBE3SMa>C|FF2#n08Hzip_m`r20cINf$4vNx5)W~QO7zn#fys)`p|-~Re; zGcJ{c*LxyQPA!$sjUJ#O1Q@6FS^wXs1SWa`-xvW*V*o|x-~aC^31#ws`+oCFB7qan zjTg*tz5elgGtbN!acy_kKGcgBl~AAfyyzz&h`Y{$&odll_@1i}@&DcFx>{Piw=S2h zVCZ}c*)bDQ=n#QedW`Gl8%xe>Ux=X}u#l;7RaEYm?zJQ{8^KE2f zI3+dV%-gq*KhJh174{mSyeN(`IeQie?ofJ0|hi~EX@sjh20@kwEYQ#6r@8=8b6tkycuSL$*D9iZeIS2thS_uqi^?ovUlR&x08E^iMG zxK`8g3k?XAOV|y^s~{j;W1^pBEFYIGr%yv!$rI)j@jQ-7&k(Kl+@;WM@OnE${_7Ft z`O#J{hoZ-y9z~q&Sbf?@;IbKRUi>5e2HRv?I4mneu6mDTbi@coHaddabP_{hEi{#X7lCmlpt@v zlHohpsH`;)Qpz1{$oz5bI$PHxja2Ee!hERc>lSX`T1PyeZVO=;nwORddEy`-D5Fn2)IT0sjMvOw3F$x< zYnyGYkr>BfW?s~;F#o76B7IN@y0O?!G&4+gmt0-cz&V z**`VhIqWpSt#Nc_L3-rYtCUV1rr)E@HzST_yA!c8eZNE<*9m9Q0b`PjXr`1NKg{ZQ zix8I+!df>M(yCOb!`BGwfk=mcN#rw&&2RySI~a><$$DlNQB&BnvojbLP(iL3!9Kip z#}rK`O3f_c`l6&*L>nR5^%s$NDsjbAJy?4-+arB>bW@m6L z??h&K2`}nFbNi+{MqJL9%dhX+eZ9{n6CC6QUWmDs9ErBo`_BAMFtQZZJX?@$^YS$} z0QLraCH$jvLpGK^8GU@pVe7NFcV)dA@sbyMjj#2PHaDs?fR!7N$yXk)oBd$F!k%}7 zt;HT$(1s#6@G_uWCNyGa7hO2UPl{i*9IPZOmZ;Ds*U2oUF%@SM8HBW%A%Rr#S!PgD5X+FV#9zhCWbPFYy?K!8$s-!ia zl;IzI66MOVV4-gvuwCk|+@J<&LY?VG7Ys`5;K;bx!ja!G6g+?;h+PbfFtZAqx=g?l zNUq+Z>bR~!2dSS5hUUJ7U4j9_@JHQ>lc?H$Df`3V$sLrnlI~4zZCw3OOIxN8nuWbR z89qyoil(Nee%TDJsNjD_09CXR#~vz8!@E@gHrPIjv@yYnWe+eMWXFRkIrc`kj}(6= zzVK<28y-#p%%!7MZ(cy<%P< z6w`CvKIDz{&D6K+h6X5Eyxo2m9S=kd9wo3~7jXpNDbI(PuhCvjYZHB}j+gs&2c~A> zS^CL(9pLn&Bm!e&<3_dlSF2ylacB+aB zhL$b)@&pnE66^)-Pnj(Mm$W5a8lL_xv@9_onr+`d%Cb6@TtnUK(^AJikB_QTFvReI zVgB`$i@g#~a-#dTwjN-Q|MawEfFG_SD38spXWy4u1LL~8M@OS7^jcCfOISk-QgpBY z(p|IZ616A53?EjWIC3S?Js5S`*kYf9%P;-ahe@pik$8}Z$S2>+>8@# zMn}EBd|Z?M3o8C6aiV|%#OK&@up?vTf&y>QUS`?dH6^{J!ps>ph^+3ii}kAz`?UEC>Di{v)sp7w^O@lyj*jcApuyRw$6IgX}8 z3^Mjb@>6Qn$eux=wOGZDvE#2tyXQW%-%Z5!hpwNCEf=U4Blr5ZXgRPt5JtF=)tR}; zyfmgkh2hoN;>_HE>52`mN_G`NSjXN&$U&6~9kJn3X7VwEJ%9 zhrjy8u;Mg51J2It)Vw>7SFGg?7!*v_y&Wpq*LtBH1C162AB5J3o+xY3NZKa{w#nV5 z;_e6kx=KCFta|F!ehI3PhF+e7?@swRl2mhNUf&=cbRz|xHAA;gMum;KPeO*n)tfT} zLBG?|el;}k6e^|`JguMw6hTxlJNOOo!CVS3J!HGT20lJ=5@E3n`9$<(f}eM;Oo!S( z@T4VVrw@m}3XmU=iH8qf#b5h^aPTwcxEmDmp3&z-@4V(h=v3p?+Ss@sPknbQO`I&K zqhKohpo$ON!5ZVy#I3_}X_79_NR*Z9I_i#}wqxpXpz&MP(LnHi+^k<4>>zKJ%NIyr z){@PK+j9g@7xN)H_#>Unk06$>>H^)jhkRmY4brXj%O=#!loWje|2IJ8nzZCh7dhE%_SB^`olFUnQYF`l?%D=+zAao}w^^Lk8h0H*pevQ+}V)POkgaHw<` zK)g`)HQmIEHa0aJ_8tsA)^+tj!0DwfEnKH!*0uHsBnH0x$gJf5FH;b8mMOV^I5LZD z^bF6+Q1UR%PkIg!xFb$IoJ9k26y2PLlY_In9q`$KA8W4v*7VG|dP78p7^LrZzkwRYK{&Kb= zHnDIFw#d&rRg5->M$yYyw6g{6GwoombctS{7^?*9yDMPt?VS-dy-$3+KwQtmJwkXS zQ`iCAsJ*qd6_e(T7e7#`P+&ufY5BrUC*hmY=*S56?7!frW^O??;y8zgSVonlvv1_v z@k_MThJL;MUu&JM0Pt_Ki;9Z20*uBa!r-M_*Sbb8czu7n2?`I1X(V;;|M-Bn4OqpM zPnJ?a{|Uq0{j*myh0|ChiF&c>Qggbbs8P1pxBqONT24+50lVpoD8WktAe!EpVG@7U zxu4U=@`0aUr^8{#G-_zDPKIv|Et`76l5?|ws9NMJAg!4{ROCQf=yb-7na4m&`+-WL zWyIXADC{ZdW03|*Ub$Cdn@QOGj4n5e{TJyoc8sX1{i*<^ruB^tVB908FyoX+p+fqb z%=iy4+*Xbj8(!kzSZwyi04(=OYNhH<7yD{(V>RlveYaR&i`=(90fq;vXfm%j;O94Q z(CJ1lmgNSf-eF&uevNo`-C$q%O;brwv~6igxBcNB1n&}iH(zIyh@=4iU#iF1ru2%} z4rxGOpcg>MIM?pWZ(X<0su>TAV&8DrZU#eF)PmcF`hnzRt~!7bZ9mQDu6?QpSBfWD zI=T68zO--b9kFyj^-W#Gi~Z>*B|~y=8^Y%!^{EDLpL$C#tvIZ)N$34 zKmzpLp8LgxyU>mfq*eCwgXI<;JZd>ZfXs1ohZwwyCi;3m2LqqE(sfVy`toQHn2J7J zAfGBHd7&PpT9fR}{1{A81T`UP;aJ}p&~fk&f6X)%$&%=%S0?iAA|@w*aF(^~PURi= z;m*T+Bu(1T@IzBm({^DHz4Psr(=!y5WF7}HHa52HLf}@mE5M9Hpi9m10uyr+pikUd z{S&w?L9Ye|Kh@F-)>lKvr^y=$hU$t|y3IGp%~~gLU4Ajv;OP?GF7}B1jdid%E9nMT zDU+|DahzrSIj!nVucfxQf`=Lo21eKD`3eOx z12)xAII!`jcps^I>t^*ov9d-d8i11x{O+b(zvh3&$G514DWgwjy>LrphrEsl6rg_@ zutUqXDSVB6(R_q_1RR^raRUS7XauO zmNDF<>{IqsvzrB?r=}0vpb9M})dq`G!wD)8Gf4_A*F?UoiA^fH?}ue)SsC5tldxeC zozbM~ujyy2OnN;5e(c?ed<>NWIU|5bY+K@oc1c#2KQN~)CKQim0-&5;@q6$E5b3IOw9Tk2M`19uvqi$m~9*sg0eko_<#jy!dT&+r)rwu9kigxe!Q3ZKf=QVR( zjG_6yVz82LBj&NMG#@4k#wHy&S?khjuqWklP={Vqi1h<1i@e&1A_PeL6a`LE0e0PY zdwap0P66&%DQRiX02tA>x;8da5=x8^uRqqdhxUsWmw8?21c~*RFY*G$M&4duG{WZ7 zivTKs>DmMcO$5%z#D5X61z-_#JKoe=Nrn%6bgS(h+2v{A%d;Dwu9BU%w$rOlAw1r3 zuOQ^>v5CL^1g&c7(iA#4<1Snu9#v4;rudpc?Sw2da97uC%2kZItl+X9F;j%Hvq`9zi=7yt!#A z^l2TE9*adJX8X9Q7^H{bn*Z1w~!1($<=Omc6!1fV+@ z9{+{%f`LILCHuq|4Y19Vz3W^7c6W}W8()RlKg2J{-YDFF4|WA@KSA1V_zOpp3UK=R znN}6N?L&3U6V@}H`(-Of+}f`QnhiJn6^p-TL!!yJ!&$ziTml1xJR?j`W>(Y94zY8FJBf!C3-cc9BP!NQ8L@}iYz6dbRS8t zuXGfgMY|l;bM>i6VRYf88p~CM$j2M~6BU zr+jP%N?May8Kq?-1<$HI+`sHwLZG8V1Csgdx9tgP`ub$TwyEEFcIoLky0wt5}aBtY>e){EO z9(Sl-GPN|Ux};*j1%34@4l(ry{&oN~knFIHvOTfoRrXT&Uu7ZBWIaqffNVizOnj{t z3mFi-W^np1hgKm&TC|*5$6qmnT6jKv z2m>Z4xKYs$R{QLJNFXgOohIbFaH|@m1{$js#@hZQlN*n>GO?dRG+ z{mPq~{dyZR-&zVhRbhs)>`KZ>8KEBq@g$l9sy%j6IK0~r!`%7Rwq53f%gPwrZ;tr^ zzab7V4{O%j5!w`?L`zdrK{ zU7W-BSaMn3d1&kTv;l4`EJI!*LMfeHFy@*NAG_{rlBGF3s!X6}_61v6eH#0aQ*&)* zpy2U$a~|}9s5XPkfb0_+@8rIrWysTmV=uc6rmJk0&|BoQ-GK0_hdg#fI`kzO$;eL& zu<1Rz-`U!Z6!HZA>9%sC6*-9^mfYRbQw6wiF)^{LQNMffFJDl3d1vZrv5xanxoJuD zU>kC6^xs7OWdM4_I{*%`jdOZ(admgB`a}aJ8BAIzIpxA8q~iu;%2Seo0*C3OF;nBo z-ar{S_5#(#1+GLtxYAbR_W*wM@Hdx7$$}tmzk6h%7jAaKT#W_JWT9dqFi?CbQ@CTK ztiyvx&?zz%u2gb;CWuNA0 zH<`z74Ev_nEsh9j#l`ClGIq4}Dto(D|MR!ZL z!SL#y)gr7IlHvfmG+^_y0x!AUXE<-`bl^gNr=`d%%e*Hq6OcPu#cI7+6OGJJpy2Oy zgaD6$B*@F&n%V;p?10$8r10U3wl_0iZTa__z8p7o z{(PykJLX3^dJnZ9_51k^xS0gOeB0Hl$O zPxlzu@bU)Z$^w$i!=5IdDph|}Fq6ErNpwXP0Exz5x$n8QZ!;Hr&6Pvn0>`L%M|~4{ zktTn6@P>wG^3vTr!AL~GPW4Ds@DEYMsii|Lhyr&Kv+)T}|J0?yGsD>`s{9Dp$b3^q zo5{+w-GMZ%yI|j7+H@i)u?<4btReM_Zx7SLg2`wn%j=Nrju|A?F}O1BQ0+2Cayhaf z?X3J#w046(qT)htgbZCZnG$lptzXA&@6vQ%fE->$*H%9+YKi`|`N- zKsXnIL(a|eamwi1w{NXy0}Qne(2R$hj)x6E$G0VH#k?iSptihSNyUp=h-JEC?JCD& zNtBRCs1e8--?SG?WMn?j}I>DnoVMR(D?gF zK}D&DF6;~*Uv_`?x#s=-$R50bE?@7t$k`Fe%FQk-2lO@qC4`iP@&duqSs zPm0;5%LS7|K5(A<>ziiep7XcT>25u_jr1*aFZ&sLV+Bf+p8RNLjg$Us6S?HJ)Q%iT zuCf-q=xiJ)Qt8Q=jPQ5BPn&a1x8j6~DwT@2MTXp{M^}b(qHvt(+MOp`_1h?R${+6f z861u`#!kPK9w&eJT6ViOIxt`iOq&DgbmY*VQTmj#|xj}A+aHyjx%ETsW^aaBdst#*9nzXR?l28{d?4(fq zW%7*y%@9B=xuBw>!$Rpioc^7aQ4)R2$=hV*?93qx`&z3&ft1#0sz=bC zf}(!A(#>9Taw3~H3;O$6=CfP@avjM@NqrWX zzW=&#gol728o3_M@>QP6y|%#cQ-yBRUnz3m?m!%&zM^lrSJwxS{ytg|X%#h}7j+P! z!{OEe(}N>VDW-w5zjpcBS6g;SJHCXv`(EIwjLYR;JADvK7|f5)fvpZ?rI04Q)m10e z=u@{Zl-i<&^tqacej#lRuKx9>3$XX?SI2K5EPNt|$#F8pfrZQcW|xZ{H5WS=o15{M z#0)Rqxd7Rw9TA8S{bg z8eZJeVYB`JfsjaSFe4m9n^Vb$C?tg|TiDXuK@r@0F^6ehn)t5Oy?)cm&F~Pt@;txCu09Ne4KdXnknhw zO(o<1)0_$(m-;_I3td#H2Bg|$N5TDY?oSYg$He=NGcF88x0lNQMTb#elcPIaT-)k%7rkQ&X5*+F^Ajz#H zv1yN2d(fAkKOH83cV+3IJKX2cazDHcDGB%^YIDA~){A2x@IAGZBFphwm!74yKG6>n zClIFbaePFz?1e?LAbIQQhuD9v0GH})<0K6gnAx5g`y4j?%cM}{D}!0V=1&T{tNlsb z?U2E(|Etorz0~tLOkNs9!%24YJdK#f8~b2M2A5*G}fbFpR~|115%85&cnyWDymWgx*ol za)eirg3aOR3t9~NkP6eoILWQ%?T;n09aRnklIz18pOh7!CHQtmO9{$jTi7QJdXQUB zhN6`*S^c=6yR6fZ35DB8j%?(ciC!<<;Ph=Y?v{ZCy5YHrMYu;N@vl@+yz4LYMk!CNwfaRe?gCWGJ{R+XFdWp7o7 zfC3@aql2X>RO|e(j%_K&15<$~k=WR`_k-Ne76~Qo8Q#9~y}JXlPF8Q%9xMV@|HpDY z`TLU2KY{4HZu@b_wO21OFg8wm$t|u<*0u`=82=BjLpsyKE&lG*T603V-36qTdwL582)Ly)Hr@ysT9iXu%cVwuOop;%q<5cH#&rfv;88w zX$5!mL^GeK@&Bbfa#Q1|AWqaZK<(RFuz4^;U>{j>6^_F_-KC?y=`keAvM87v#JP`x zE}bP6JLFXf50aa1W~w&gQ5M{mf7KCnS4K=)nyG4V7MoP)D|BJGgbJapO7%GmzO;67 z5Uhm@KYTjl*kG8LHYh|jBvT%EIN*05nv+lQS{OUyc^(j8=}alAIfMIV|ujCJ=5h{=p%v+{_W3#Q%U z^YLag?84+j(|qvta2$`yBVjEo7g)`;IN4hOdi{FYs&C)$`h~*0) zop35k|1P%shh0t)FpFo4hv3{4<<6v-8#a6^)zx284@*63uVdoQH|IwbFt&FUd-8P4n4lbdxm;1=N zZvLbFHY|I81-zt6`I{tmU`n`8uf~QubkT4cPDyLbM6vAF@^AK&n@9=$R8(3W!Bovz z%G0lcosr)U#%7iBnH%SJjQcb<#8$6I2{}7YTGWjLm%hvgcq6}+B9D8zG@B1UDgai+ zNGrPCr29(S(b@lYT@vnYI+ls?f^ol$j-tq7*v+$}IgL$)k(*Y=_0zRMB-71Hvjq1a zww7?l3WrdJSyU?&O<3}ORRR#Y2yDp?6`b1Gt z(KqB01xLUTyg)xqI@J=JF&F^EehKMLRL_6Vt2l|aVKxQ4WI6soU4K2}Tl!TAQhjS- z`hj7^_l3oLTV@rPsG!XOl#8oqwp?dRH%iH+v8CnUV3C4?0)cv=jeR6Dsv-5E3P^Cg z|G90b56-Z!u0TFGy7u(wAsjU0yF+7Kc%5H%2Km=zvQw%q;{R?j!!>Bj#~9l^s5UFL z*tXZ{)^H#Q5I{t`n<~X+S7`c>PC6@%3RY6_I%zPC*uyhAezT1dmGAf%e_GoBb4+oi z3pgnc^v?=6Qc-mH8op^PP07lzVx4B69DP2>4ZoIOIDFH?4>8lIGeVcPg6YRL5L{xj4SyyJ`fXSkSDN94;zuLrb zp>&Ii@>ZQG*BTt}$M4&VS%aZ;{>08sk^39ygK`#Y`Q2AW)LNUkywW@*rt#e9np_l? z#oziJOSQMS{5L3tt}iK5m^BA$LT1kn*ATlE4z`!ZeQP-zqm!yPKS;dlXtQ<#prsg| z-0mDKJ;5CA(k!*ZX1s;^%f?M?74%=WNJYl@YY6I{-=l~z4RKZiiZB75%fZ?88r2^; zhp!2M%sD3g$O12uT|yUqri{@g_W0PdcJCfeejFqHjW}Eprc9&EyG4Qtpd=K@@0<{} z8UoPgwEo^1cK16+Ukj1@$b6Ekrlb#wU<&5043nWu=*a}qA?X&*`0Rp|Z0B?3uHzmo zH}61`_bWN3{LP7pLcE2SYQ*zceVW&F&^TqzuCg|t4vm(f1+7AxL# z<^>A+T)9$F=Bu6Gea^?FblZLATQwuj4!(Q3AGN63J#AZm`@UqZk}e_F;`gxPd@H%% zeWG0pW_p_$)jm{AJ~lbI-vjE~tD-0<0aTl=)igFi| zFKftm64!FTw|)ETz7kIb0|=_C0KT~S{bavA6z_-^x=m^Q7Tg?nb25_cd4sRB z=(8)541UTY)-W}B!;Kg+b0x&#&!P!E-p!8J5ZoYm;gv%$_MaKvP9EP14_X-2jt z{^j^*U_34D^4c5Hrp|;8ZN~e$)!;##trw?r(BtGMvwzWhKMZ>B;eh1*6#Wb&BPO2{ zs0sTSy~vZkdwc+ks2~pHiF2^9P8=@<;Nrl4@{OArRgtUkLxF!}H^GS`KRDJ>UtYaa zOXBd`KuqW35Yg@N1xGNy3f8Cc-nK8(WBupDoLD#CX!~0Ww79@kW+!zu=o*Aw>LFBX!_%O^?^ zQ!j2KYSbhQ{&AvOm#}A+7JvX514@Afq);Z0I%4^4>GgZjA_2R_db8uDrdxmw$_MZl zm_(d?tzRR)6{%L;r)o~H4`j$LN|;B9Q|)X(FX3qSOdEeM-n{(GFI|;5^J^eEHur6^ z$$a}J7tx&GF1?fj^|HzyfKOS2!A2P%t$%@2ZUcpx;IQ1G+RFmEjponOEI&ns6>`=5 zF_iJ~m-w;F`u^rTccwTEsl&1_ZlPgb$!PQh5#)!sc8<5~Hip;7fG=5{n(ND54{aqC z_I`$AtgZ*l?rLGC=E%AwyZVP)glF{roK%v$zaXP90gYR0vfOHG5oJ3pbD?;4R4459 zCU7{)oOKjS>|BKIXO4`==6u^f$&$ z=2eCNvbqllxFZVH-wyA}ezb=&+s{2P7m66_tGFi~k+3tIz zS#A0fXf1QovApO3sK(8J$$E#24N>zo7C;$+82*tfSS;K0BC)rBm;pE=c&Yr7nf*rQ z=y!+X9yY&U+mDi89bFQ$%6R`a=cH@tj`Gb~3G!uzf2*-k77}@@tn7D=#}xcPHiJAQ^i#t9s9| z;9dPM^Nu4n54ZkCrO=PAKiB%xf-iC{Z4K>9toUS0r6Z1I1#{g4 zT0(#!aZOovc!xqI{Ci@B4v8F=N#xAO%%8n(#*ObmzmoOeD)A2>GnovcCc6;?T*5C{ zJkTAT|Fj_-CGV9uKfh*2kktt&eS>TsSk`T#bp2|VMgQ60td!nemRVGfUQI7%Qk%i! zKV>O@u<$hxT2{QrbN6AVH)^h-fc7^ugA7zKF-7=Q_;2>O4()*4vgaS=Ys~tPyp(9L z3Jr{!$K$p?-(bBl)wDe_gHU$VA%VSS55%xL4sG^M|Y-=g|uRs#pb^UqTO7-0JI zvQKvvZcimyJP0{5U?b7r?>%`OMT=Ek&g5PZbEi{Zdm4upJO5IXyq3pL7VJWAFrS#z zvs|9Q0PuDZd2;o~zcvoaAF^tzV>e^a?~wLK8;DB z)&@vN?o$7aeZS{ozT3uNX*C3YEfPCDJx$}+5F1FAQHAIW`tsGb`^vi_QsdnL-!+^rq2=&Q!J*#s~f(3c9Cwsc82uzE4TS z{=BV!eUf)mUw3|N>P*x)5YrCljd{-cbL~MPH)y`DR`V3Ai@c4e&x%d&8{4ePzS|~s z%sGxH8aI1hIDKGu2aB`qJoYP?HO%>d#(Ugt;q~Ex;kCS4c37Z;?fOhV>XS4QQl#%F z_d){)swuO6YZ0Wwpvk#scl_OKu?o%Y-Q6$_hT7^#*cSx|fkM z4;i*yP+}p6On!>WLtZs_k`9|xw$^*O&BOe{Y}<8`JB@3PXP9?kalF`9e4)Y0e@J>D z9TSaaBrn>Tp-{2_s@v$8jWo)BbBEl?G&R@e&nze90Bdm`&ZIUfKpHJ2vhZ3%)%I?UE%NseyhQ!N~@ z>B_QQY#A?zC%~lkX0yYDrAh{HVA~m=lUWore~E`T#E_T~P|W)wIj)}14s%_+g1?%( z-$lQ^(_appzf<`kojgzvzVim498PX-<>%l`Yn*+%mDXgyJ3c*`(Q#0_$yutSE9w>g zuM(AbKTh_bCcC#l__;bLQ=er3e^X&`6n`R{l#9AZ!;}8EusLZxn6f5+hX<#dNnbST z^~SS;u(lA@GZ(eol2`lhz7?xpk9>!MCp*?&@j7q5kWaOawSLJ3?5RQmA)iL%nzI)W zQ~|l$mwZ8knEe;~09>v8ehm{t_%^&OZDLZ}?clIW3WixA+xu_35I9Lxw(J>TmU$;{ z?!H&d!Gv}JG-)!dAje$1=Ao+e*#@KLW%sK_w>}5SnbiFJnTlOeHJ7QH)#YC|w8pda zWB=K=-dOudV%vnY1to`96{;lNFX&h3j?&hdh;Gwv-5N}up2sDVG;kNu)WwdqyP>=v z!ltP05XLr-sLR`wWBymjQDm^CYRte;M577;`unP0G$WNpUFW12+oJm)w?*4l zMN2T=QZ2lxnlUz|Gq1sjxsTKbE^&X?y}b~v846ZrVZ52-b&Q|7c#J- zN*{yrri5Rk`bO{p9d)z|nU2UXX+HO46Is8U58{i)Cw^t zahHVh(|Pyz*Z)FVz*%}agEeIU&~vWIg$5X4y9)FbwhIRj?-0-(7P{+~50&47o`m)%%cZx4 zm{=$)>EONuQpM4gmB>H7I+eHSA&d>^&aX7_z-goHLRMx>+jWwf$N zqgv*pCOCCQBeHE)%hmUSHl~@^H1Fyp#T%I0se1=Y*@1S!G%=s6WjuDC%~E3(_^x$z z)et^uNKrJ)Sc@lUK&n+9`14nwchB^AnA<-8-^>-e+IAQtX2qU4?hEh;dKW|z(i&GOVl$XWa3yn9`n~Zeqmu4NIS$eKG zc+__D2}W6kKs`T<;d14fFS#SnaKtHA9l%o*`13D7!nxjdy|DY`dO5m*o2l#{Pjz>Gkls&i+X^gV4TLWz36NpZ#dy$l@#^lWBox{VS52-8RJDC-&3K{E-O`lKhZBPifTHAmNh|G=%G5XrP z29D1qWj2T8h)7I{9?1n&|9)}@;@M~!l{`7g;szf1$!$ubhPH^}>!FL?@xaIamP(-l zE*aSfP)!ZT+SO7{((x`#WvcSv`L%kXQ#nz&9THS-*%n^n68h;u98d5!$T?QbpmF?}V|SCA=|ljfYEzf)w6`s7#be;uHGWuzlV@Fot5e(48JpN|x^sRYJN+A7dHl2y5fcy1Mi) z{lrmlZa5K(kRz_zHP^=0cq2nTWD%N8PW~(O@Zab3~{r-H>?j(Y9w9w~3FeAXsAbvLzq;LQ$ zcOiB_k&FGM+Fpxtn~$^0^--xoq28TX;etxeg=@&W1w456q@#@FPB5`qC*@38&No@d zG)~C;OX2x}Qu^ni`HqU;$y(mz>bU6mlQUwXk#5P^w%@+H6P09?F8UHF=}0poI$v@H z){tZUngPr5LrDAG5!K(&8ue5J!W`i7tJu6f)ART8V}+ND3~uKyfAuc%V)_QJb+DMt zB?L(>V)DhYb;&Lue@i+;DF#gqL&z^=lC(5{&M*TJmv#44u?m21#0T=XjgE&qh^C(+ zEAH#pooT!-R|k-eE1-;=%xU$8j4U7B%DQ@}%%^lFsxr27vE~L>QwCBI8!MPgZl@Sk zu~iBt6V$r4-14@M{6#wb-QA8Tj)2iIf%jyfHpA6+vGZ0npNMoO64(6Gui^Q5Y0s<> z@+d5<&hhMX>t0-j<3K8Tq82t^W!B+aYea`^wmU#TO2uI@V)}4@_gFXsmSnOrJLug; zxl)qG%C^_h=0tY65RkFH_|enLcYRpCrhEGa-|0LX9YOm_CzEw&jCByXvHAjE2%Lv z++BNJO(xT&coz3vf4fIQHI*xSsz!opL;cWyZRL|7dV^54Nm1Kq?P5-?jjo>grtYka zDxfVF=XNl23IOdYJx|wVq`xyyF$O-zT8~u}0>C^NWx7qj$CNNsD6NyjHIB1tKcWOG ze&Q+kbs*!bXaQHD)~-8w^aQNJw(*Am9F8(EgN(IE#YEq;9#j=L7Y4-6X4iR!L^CYN z6o$XU(=jg<-E->v?%o`%Rxn2nrOkxDSD%Wgae390p?U3FNtxF|USqHuQ7Vgk&iyKY z>p3Pt=h@aEuiw2uCit38oN>#)HlRc)s2~CLVnUtylXfE4xYZ$J@Y{U#DDB}$EHenm zNV#Kh>)NSFdU>&DG4{476S?E_RAFVN(1WpoW5?A7HDLB|mLN}ure(TPzxGwh{!`z7 z+Uq)RJBNfjg>QzsteUzVZnelwZHP>*qARzq*)4GJG~(R&I}JM8GtAU=dxNKMx!i=H z7iohr%G96VJ2`UQeZZ)JH4X5ITfLtu-7%*V(E-Kje!@Mj`PWD|`cp9R>wD=w6ReO! zzWQ1|rUDo74G0cZL!{<4u97py8O{K4!)S{hrz=6$)29!60fAnroG_w2v$UVtbJyto zJ&X_Po{lU#5t%GSSX62{4Dcq~Zvd*)^X_6cG&0g0zCHYllwZ9pRzu3m%jy%2!%mdplQUNNQmg*_t98k=xH2H- zI>)p&c59)JQ;&wK5Zyj-#6Cu zfI)J*3-=^DwyALu15yihOi!45-ZUU+rB7#~BALdKn#@PjD~UNfalt}zSDiHvLCJBeDx!r%TftM=gAFTZ*vM|H@RUti0 zuUx2~r>0z67WRFWy4KEa`AJ=STk7~s$L6uJ?6LW_PJErou81FzXFOR^O-<}rm9O}- z#RLI@%8vs3yr*NG>gv;80Dg3BFD8HX+gqf}#KbUvbUBBeGEXe$eSne{K)Kh{ti6a* zvUSLq+nz|l|D!}CbRg`4qjX>xHsiF)G`JYrftmbX)vw&77rz-31E_W1tFt_NKSC{{ z!6SR)$WTSvxoP7X|GGgQ!!Wzm(I`2gJ6GX(Qxw3xd|_8s%NA*Lr2We2$+2x^@I<-XQo}Up}GBT${3o z0dxAsAu$~5fQauRU!`bkexW2&*!+MP9rGx;?O;y8oL{1g$|vJkM}|)xevmY}g4KNR zwOM9~7(S1m&#-Xg#HW)iI$4!rMJ@+6-@8+&r&qMUUJ+c9z5im}TwVA6hxN|*N>PlD z;P)2k&^+P`j~N#6p6Lo%^nK!^9ovP@aRYmRP)d-YkJ7G--WbfmNk2HW@|op=)c#9q z{xof)^xwrrIdgbS+}Gkk(YI-vyBr2CN6q7P#c`&0O+msdLd7~BN~Pcj5t&2o3IIOh zB$1oFzP?V+NhDLG7mPzb0&EIi&?Td60%O(uH)xQ|yQZ*-4%kBd+26g4@s|mJSFxNQ zLP=JccRsh+d8^4K`e#s25-$@pJ4~zKSa>!}R4eJLNGMOFqkuG#b`i!2FOD5rjv<~= zu1#oD71Qx!+1DAL|M+6-;-m|w27oUECoDz*D(c-?NTyc|yVb7U!na~p8`CLpgymfB zu7gl$4a9e7MMKCOhF<7uwLpwpYaIZ7dbQL>JpbnUqrru5%&>~zq*;U`h2a|QZAmlB zVhayx73ZhR|+^+L}$(=C9r9UPt&sEMejI zym|pIwD`V~n-1OC@VAir#z3w|%zF9J&q-03b1gWsk`&O=Ncx0z&l~ZP_7fhu3@OVy zD~U!m;gVK~oriqv2yh{&U1RPnc#Y3zTUg4F7i@iK7Wp+|riN}vJ*&!CkWnXZh~bNx z;jW=8q9~+Ie10GI-$K3JAW(kb^*s3?e1G)`z>0UbC3t90p|!WSx1RjP0E}S>P-Hv< zKq>1x8khcFcG1c4ip3aAD0+OHwe*f?hAefTijp{yRQ=V)OtzrnAL>l4j+M@18Hpj7 znUXWJF@q(=ih`xj2j1Z6eRU-HB{Ii>Vj&71cFgd3pKP%sGjr zifKjEl)TAB)cOT{{2Q4P8p842pi;?&KT}*pcn(T&mwALjqTV{<7b1~4nJ5J9@HfMV2)vJVF#x5H8g8n+0za@z2j|sADS+jk& zR$Cpo0ZR)*UYWFU0J__~8*lx}$B+Vvs?|3jb z{K`h>+qJjiGhwfc_dQDl#dxOnIu@3rt;TV@xs#~RBREhK!%e(N8-6}0d5~tqd6isA zC;Zuch1gjpp}DR6JwwjLC~x-)U~Qr(8?@3#CVJ&x8Xa^O>o~8YnO&^Tzn!0ZCO%|2 z2VWVErOkviNDb2(S}pI|syCVNt=rMbJpFNmuKZngMyl+W0Xnq5L*aAO4190Po0b9B?BJ?SeQ3y=cKmnC8!jSi)*ARC z^eT=bdxl$!;ct+?VgiR@XIq3_=DY)&^Tw~=P${ji{1c!%$5z=Fs(e8TChHD8OZbHe zs1>^X-BhCQXD3l!Tv4V~L7p#hgabpU)7CnMvx4HM7nLC<7uu47I_+73Z9{)3i!`Fk zMRJ*M5FJdcFvD|KMCYHCzk)0wLcZ50K#UyK*!USh_`{o3I!dWXNJ!2PHc5rSX$>ph z;g3)Z{L-2MZS;nQhMXL)sELDBclY1y(;%uhl{EzuItuO+)q)LyTt`o_ipnkVli_xU z!GZCC)T9Q zzwOWCZqBvNxwVNV>CU~#h>A;zY3wX|Z&eED$jeJCMhySr;8~i{tw60`cY#4sS^G(c zEOyc`J2+!&0!_Jk>tIp*s8;*GvlGIBECgsx`EWKKgDIiR`0s$|dssTBBk(Joo-E@< zD)9L|U7C@}v7KxqrdMPYZr3UOWnF}p6X`dz8=th{0PpSZ<;|2V%dYZ4Kt1W*1y({` z)ELnld9EE^t!7ucQuXp@A3lBz0GxOVez9_>bibUJ6E}^qBFgIj0kgKqk>9@Y2q%dT zIY@va_Rg1WYU!-WchV`TZSfKkV~!;u(B8?s-EfLM#Y@Gx(EH5Y|L|Ch(_)us#+ksb zH?B$TKQXxA4C3gZuG)=$coFQwJ2t?XDPzy9^L2=YDnHsKo8rG>n()efhEB-CG|WNshV2tMsk!ntnBU`= z1b9Cd;dOyyz5v*5tk#Myy!HiR`G4wbpY0ZEjeuikkB3pX?G}>oTOc{i_$R~CUB7@# zg(PXErSX+2Qn!uS;@_=7sL=nz);mVm)rRlBX=62PY&&V#*tQ$nwvz^p**GhFXj{QHzTJnfEU>mP(_PpPO7(2&C(;u94Jd@5Dgc3eMDlxIA!6t&Xq^v_kH{e z8(+^^G+A)nW99YqAXUSU@qKC4!Tf;iv!;eRN;scqV2P6-@t&HbUgs3|P_kYpp_OB~ zLyzU1o+VqVIZ$@mSDwpIFEa+LX4Zxa-e z?6TRCDCdUXbc6eMwp4Mx>OdW5=VfLEp3*MaE5HRT6?gx7J!ECG?q>rC8x?N%;5W!M zVm0gwD}r@UgxAwW35~Mc`#72H0Y`pLmijOLtk-g$Tuj^T`=c_jrA4RxxJyh2Tm3g{ zXRSEzQ#kSDHxd8Jc$3o<#rB7L9vfUh1p|T32?VKFqyR;o?|`bR^rY&|QydS&#=?TZx(RCGonv9VeE<8#_*?ZG9%I*) z7Qh58*=eo4wK?&_B=q14AT5%fn7scVM!ngTu7jW&Vv2M} zYX9l4uDXYq--~!p*E`#htXiPw)e1BBy^2lQkyNYoo_PKy`M&;<#$ljV2MoXK0ayv3 zI8<#f=SLBPG()KMp+k3rNl5h#BvDn_>0Rdu5rw0Q18C(*HT(Fk!crW&W64=54Q3HbvV`F^sxxc;fhU+s)5S>jby8;C}0u` zj9w>iTc)-x%RwpBD<&Dzwiug3!MpWl)GlNmD!xC4B*oN||YsXXW zP0fA5aQkRWV-wzjS^G|kb(!HJ*gWE0*;;8d7!8OXvH-z82?@!VJUrVHAO?KAndAo) z60TA3hpL#VV+2SsGgc913~MCYX)YxT%yrkC_-^o`u%CFPwbSu0of+TYzv*NSPXCC9 z7$9G1TxDX)uKh|gf4X6|emrK`5S&*tY`jL#+hBS_VRF%zpwNgi7oa~eJ|5+;GjIhI zi_!4$$ARpwlr=l#SDe2`lk}*l?T)s#J?x=G*@o}eFIcLf=Ukf3r4pp=sMwpyhMztA z9UZ&-tH|j+U%swl8_<`u6}@+=3>@ri{SE4v)<-pI4CrZ}ncZ5>?ZJbj`DL&m&>M_s zUoP-GKErB0^%LL@M+2#USaES~zedpURI`IoG#+QqzoChgZ$_3X0##gWmb;}o=`H9X z(G-q@BQ6`2y2)r>om8S}cR;R0>_qbhx|`bMD3_B@O-UDBE8qqaTiF2}$U*sn6v9S{ z0;QWb`F?2C@b6qwSI&$bI>r+da)$F})G(s|pPtnFs3j{*A|^sN}h+Ez|2=&y?*8K%{FIAD=6ZX zUag9n#I?x+jc4BA4(adQ?AP6fe`n7gPG63E^r7x;qBmY@{DrXEkTBRZo-cecV*X>O z_#?{<>;6P3*zbv?W5Xj@_ku?_YZ8Y2==lMfVX%OP!bf%nMm42Um z)wKLWddE8l$iPdD>9oUt?t#fq02Y}2g#ZI+cT}cF^QeIKn&uy5)wn988vVrX$&^}$( zbx~8%wWO2VRz|a0Xg?!t>wSb$?*AY;R`M;nxrSSQ9~G@6|60ML`NVuqvs8aZcy3A~ zRUTNTVoB1Nv6ue!lNi9vNPA4!U_cGJHlHg-`6rSEgom&1FBfC!obmhPWoGCdb#*L= z$6iMdiJWi=El=d{XD|Uk)!XsUG!Vt420A`rn6rDVryMEJCCI7*sE)df9`t6jpT zAKpIIUB`EjRRZcFN^|msm!-t$T4I(G_`ldo0gz-?xZOp(SKRj?T zS?zQodQETK4czB^v)!v@b;?JNO_Q5hwX56M=}Ot7lHEj0#H#j&m^Z(EOzx=*IZp;$ zj;#GM!ikiuQWYG;(>GH8N%qVwxz;^T;mq9F4n_4JooXP*YSug642$&{MH6j) z(2R}Ff-_F8@a7dgdocyQ$Ve_+v5H-Y|dBQ7O=W3pC6Kg!=R$ZLK?GJg6 z7L#3ldZPlq>fLAcc<+3fL*iB+`*)(y&1pY)H+Kgo^O>x+FTAf@=*%WI0ep1KZ6wdc zhZm@dJStp`2hhO>a$05+IG`a@pqTf2vEQY z6X|K5&KN_|Lif{|Xd}co9;OW8bl&Bn=BSI^RJEs9oH*ZPyxE8Lt9~9u14KrQ89=HX zX`A6~Uu{^?uI1+V)Yar?ww#9bg|MZ2Tx%H+vD)9YrsH?Lj=qxnRUgLpl2?}LXw*8w zJ-&i|_;?X*r{O*6KsMPPAp6`xjq<+$knFeqD1dbtqB)lrfwX}rH3lMsF=_lCowucL z^GeI2Q}6V2tk5@ZRk>8<6PN%+d-@^;Ch3P%ewl=Ww~M=&1ybwqsvu7^wFQ0)>WudPRDzMpk}$m6o=(*Hf$L zPUW8aZUdQ8-->oAxd>_i{2>kLVkwg>aKd%}^@+weEc~EB6dH@gg*ztl#UEwT+GJ#n z*Sq$eD!Ed#>0H+Vhr@9vZfapagnndP8TDyYbicDH>)UK28v8pm0VuyCX&zS|*-t0> z7wj)pp@Ieb<2Bi&%4mZbKR0IY9wdY;Kz^*Z(cQBL&FQ`iMPo(c`Dd1tn}}`XfdQsb z27n5!Y%;MlC@2bS;Gb}9LUgCstBPwPo`{wibX?wlNU0Svu5d zarooPzRC>s6ae+GZ4b+_-Z$FnuSf0DE%@S&-l{)bKi2W10>_q_jyL>o^9aaqjMvyA z+Zk!0p}C)Lt)*ru3W~NMBw7-C&Ga&iSFF020A;L)@fs2jC);meP?gg00TLZDiA7!I zS9$v9#*6tz=*%<>$t8E2RpXViu1ny7Z}IGX{^YwO?uL4z49`9~ScJkb5nQjWA?b#! z$eY95>^!s3p@n!7n(V@F@$f4|u}?8iDK1|7A;5FF1e?MN7OK9HL0L`I=l$v66%hCX zfRpb3WW)+pcAK4JsVpI!PWw~2za(l@Z-&jkQ2-*tZLOfG^(JWkGpQ$V)lMsmZRrF7|CvCL8`q1aPnPex^K zwtxDfUO6l&JxS{l)iwjrIX$5`a_nLX)%2tVbHWoq%i7`c|Bk*-FWyPKvYLigRJFN? z*S^mB%)cnOiL_ao9vcxTFK+G3VyUb5s{9(mwU}oIQ$w~4c&Q60EydQ%q)Tc{9_qH9s9i}hx# zq!AaXQ>m8KQF9w7vxSV=D=4|MGn{A%E=)wIt?|>dPeX2OJGw`Pl|HOXa$Xt2foZU_ z0M)$lTn&0U*y2E|5y(c1 zKW#TqfZ_xKG*chOXlomst*h$@^^0>aYnv9PA*#HS_WnG0xitLN8t!;X^V~8qd@TWi zwbiu|n27g3TLlUvF6Vwog$m<1Q~RU9rtD9+&7yU{OB;w^@D2vs&XJy1Xbe6<(1Z_w z-LN0cVZTcL4G$U!Ux*Uvu0LblN!mn5NT0D=kN#^g)@oeksnF=R15 zJiw`3PFg$T%wmhWOhKShlm%(S&xZ)O&@B9_rZ#V7jqxJ;Kdy+@`ld77ZNvz1+_A-? zVTE+IXPZ&@q7Y9!O(`~Wm^e275oVaP&TVAwFVfo#YVA&J-<)JWK3rX0olmDWcH4o! zmdr(WcBIul-ub($R}&nr4t-TmHHek*xV@N7FR=SHQ(F=OfVN5wjwO8LPiBvj6Gb@M zs!4D>+L$i(_=4{3sFgP1+2v^xXLy?v}#f$oiH3DS0 z!e)?grJ`wM5`EhC{=TVFA$#c$+5f1J)*?5B1ay7}!~;AyKPmyH>s)jZ0pe~=&Zi~S zYzMkH37}pdZ=)A&`nrQZa;J?7JC?c;Auc4#Els;Be(|NSK<|l*FC8y`%&UbXiw-B; z?G2~Bw4O*M2MV!W23UB)j?j%GoCSo|w{h1{chroEr~o_1BliNYd+o#wOKJr;&i`0Y z(M2JV@)$_l@oogUS_cEoZHbwmM|Ej(Oq7vKc@{GsbP0ckw4r_ZqJ(#P7QTL3Q1J08 zRp3hJUhZUQ6=EmdmDAwyJrB7_d7oq|nHGo%_Q)xau7KpzY zz1<(SZa&|G=0yvsC;G`k)%`OXo!!TV}YRnU2Os2?&{x$9XaLbB~oAiLb|N`@xx zmJ6J2*)b3U_(#k0$)S^C*Y@UCr}XWePih;jWkB52$UE=m0hh=uma%f8U{WDLik$VX zVsJJF($RfU1PY1jtxe35vb(09J*oqL&kHj^p@ZOX9v>Q7*o%w*jzNPO`#+xHvgDb) z%>tO0dar(LeRDn++ES<29XriBD(3zDJw*Ne;CRD5^c`7RD{>Os@BbTC)UY)(kZ8@$ zulB~pi=4SQ1kr*G>*uUqow0IQK+i9lS-tIrvolZwx3u-(|7?*P*DP?>MFkdZM zqG4>hm#1Q3@0c+2XB7JbgTVRXRNDLlF$9N7!^oQKMmu| z913G8*_XG-l{DfYz{mNSH|^;Zz7AImqK12<>5K^R@0?{q5Z^(=$MxU(*mE&y*_vzd*kGhasK+#T-u{ zU@fJ4dXkdMXdBM@w#ezip7>biXj`!NJ6;{8^{&VVr*)=M7W~=Su4n80z25pf3`n3E zN#)|orgYoLQM1Kk89UmZQnP9$fZ=9V_S8T>y@T5pE$z;o{Zm24B!SFD$^)#`1JOq2-UU(0sJKDHR+9rwL)T58>H z{LH840?RmdPd`p*2Ia_|wjH@7sZ)(jFtZoT12Z@7GAx$I0xR)xS+@L5Z;$swBEAX= z`~>E)9WIAlq|9fg^5bxOp_&?>IcY~ndO7THjhFwbZE-k|Z8mWL0cWaBOOg`{`X{i(A@pkw-R>n| zX4E_Z+#`Thh%MnCQeHzA<~Rqw*u-=%J}Fb$RP7T$51O+)JLLhg?|+d1C>N#`EnR+= zlI*&D&0ilTXK6dsWL;Wa-9A1A{%vINMkPge%k?wMGY$*p>5k`b11Nv;O`m71-Vmt6 z2d5jjmW-qb9%aEyp)jceF-x-$8H)b(ao7tehUR1zRRvixVAjy&aYvtZQtpkBld}a( zLI)rFZuUfCgfl=7*%DONm9>2cy?XazlX)n*cqDAy8V{h}k?)S1*1kz~wOH(E2J_u! z1L)^sIW|CnC{m*G?>vAFqnz!hU%xD;5O*D&T>i9m!XqAYt4qJNWh?Y&-0}d(p50xH zTonwR2>iRX^vlYN$f6L0lCP=XrRo5jJ>AFO;wJ;NDBRY|8xAA$JZY3tH7nrRBckVx z0cN4D;Z?Fh(+7VIV~W}kfHPrFv{Z(;3%dSMbItPJ^s4;k8~@4w*5{?f@`(T?=%s?G z>L>rcx9mU{fQUfy;{}f?46aXal&Da;nLXU2s;hsCsL*UA`g<~Iv0hr>F-M{OUsg%K(ap2#kb!2I8`LB z{CsaIb#dU;j3b6H(W_|L4c7)WhkaVBzO{q+!i35H+qK??Tp6CkQmESZxa zTe*7*UxiCpkqabYnD|mZ6$Ry+4YZtrU7$aKFNDi=j;b^x2<{M8$mD448#0oc+gm41 z(a+tTEk1SbalV-{u#qhQp2joq_AA>hC7U}tacJt!sP)68O5%=ysHy_kvlZ5CL7(J* zM+)4n4dqStO|S$S8+{ZVul~{5Q~&J$1_*=~v8mo7SeQn&C(_QB4L#MKN=UDTmDE){PE)i`{2!xn zoJyrsO2$ottSSgyJb>s&k)RKwrz;XOrz_iW`EVz&zrwumoU<~;B2UNmi(jj!173>z z6Tir=qqwky2o8V6$74N`z_{pC3V}@P$#9~?_<@`f;-tZHIY8|_n9io9iREOBt1|#> zDqkHJpaQ;p2&$T|`fw$?W-%=j-s==_8FE1?k{id~-mV&7xNv5z?uyx90M#p|T1>Vh#9X@O{Z`W*_zVKD zv9^(A=#{+a`JSsi8KhY)m?4y@8;C#Nc0fYpMi*n^x7ppUwj+s%| z0R55S;kb7nLIH|+3ncTc{UZptD5zy1yyCf5W>0e%C6puFtbj<_DOgM02vs%aHpa=Q-1%sh$A}x}PfE zfW6Tr2t)wbg#S>NFBX0!JPzpVj`h8s;9ne;ZR)6hkP;;>5tlJLiXwbT81{9c()?(m zS@_ghCD>8wF8tqxQ<2G0`n3{1t;wktNr3^;%@u>_hb1n)E<+9=i!gr=b-FCJrw}cX z0fb~eVjDzgRvZRfeoO5>Q*C~%5H3A#s)6qA%*^#bbA`=O;DazO3YF(=Ib@a%Ka}N> zM`*KUX+N*jFI<$}z=dwQ4g8lW#F!#pS}%%pWo4ubK6g=5m{@nOpER}L`bl?f_BDMA zgt}*=R>o(=vFXyB_M@HkK|EIN$NkUPA;<7v;HeaRh#l-F@TL6#Vz?fN;jPMyyBD_| zJ4cQUCXhI?bt+JS+nOfOH^aL1csV2oc+V*bWoOrQH_bI4gm0Z*9i9lMm;o8!*& z{qz-M@-#3)kQR$`w7hSomASXk(1OV2J7+ps(4H>hH1h?*ilr@P@%=+ca7lcDhp+Km+yFpw0HlYDk;T2?ny=g;m7A;b0lWUn^sT89_!7G=TA+1Jz!v)MI^1-)Dd6 z#+u^zr>ENZr^l_?xgHAegc1=So;08S6cummVr&D$MBh->M+`Fd)TU?(fv7%m4}`DIe_uOnw8SQGx43L#+q z$1h(mP%9fAZK5cqT$n=(3iotbkOpQmP9EyeE@HiJYyVq;zEsLR-ovxzcP#$-H6Eg{ zJVbX{hXSpL+mY-`++n_)n+jyGME_Q_1dZe8D;Z9(dhdAIDk$YE*fD=Pt`wmWM0l;t z;K)Eb)JRuX{UzLQ`$!lNIjAM`fW)8ezdNA~FshRa`OO^Z&W22EaiUlOrRx6ao>)Be z3Q5f(yYl>#ROKsbgjh0PQR7HUhUD=!ym`XP!}iwJpV3)LQ2EinGf`707PIJg%g_YC zu&_dq%gf7GV?jlCFQx6De{Kbgr*x z^Rr~8F4~%#FSEYo$&9EJF?K!%{3GgJUfSO%e^mo0_8vF;0Lo89NeLAk`U_A@g%Oga zjM2ZYr}~q{(ZoQqw9ziGcXQel%3JmfMx@sTi?VatD2XAB2Ynp=E5wSTGF!={s)4jl;|1S0#Bp79i9CIE`(F6w!`S`1_B8X#d-b z)z$oTV4c$P?L@VDR${|Je0o}#pNABr(p~CBny$`i^8Ems`D-n)#=v&pI#HPy8=oR= zz@+lcGrT+jA>OD#Qm`?=uSo=ihs$#OZKcV^2r#Y&#;gHLsply`MgBjh2$WhZSvcbu zWlfQ`o;GFaN?$MX4WAIO<%oWg1S*B>j0RNUC%{ z!Es(+7qSDi)`?a6IRTo6U?JK-PY;iO4`LshaiYrb)`Qe`mgTw3#B- z0e<^({F!`E{XLSo%k_P~IMI^f?0Yax6&RSfI5YtwuF#Gc;&?<-hLYf#KaAQ~W>12J zatgBz18rv%No6gK>9V7evhtml#z}ZMyrM{@PIg-(H2@C_2nBZ_Urdb9t*d{~_qHiW z6!qs}OPrg__4J+gomLZi)3JD8`b#}i?kyLAo=>nT+!x}6_;7N@cFLKl`S%2)!_=bb z&*O>|E$td1kRsW9saGmy!@0I06HOyplmGXEv&+(b_5pgu&4ge6?FzK^`I}kJKLyu6 za1I}7^V?%Ie61U>%H7RN9%6zUTYR|Qjq>;~QyNJ6?{Qa)zwk^Q27TS)OqG?cXE`X1 z@}ZXG`wA;EK_EkG28#-9*4~~TCqd?Zhc}rf?07RHhE8UkF}h`nN`?wMf!JZ6BoX`F z&FHo0+Yo(2^8I*!Qz~O;T^?BMM@R5g_sXKv{dLc>U_f74&>${Lr)?OEE@HzZ>DBQ- zLR3vZAD_XQy*KEI*}KA3)8qKQ1>wu>44)c_;NN-we=8+b$#f=0Z<^$~^Ti^3mFLRf zbMOTDwWA~wME{<|esJRqUt=bw?gT2?7hPvieQ*lv&5V#uu9^iEU412LGA*zaD3G^8 zyBJ(%zdygd-db0lam(f~P!Yj2j>%byhkPSmYU4VJq5jR>T>k=r)8Nu2&-M$*u&y_h zhjtL~5r7^1);4ht&*PznyrWIwwqU|za`t(b{rH-#2d}0DWrIvU8)c}mF z9C5mHL&k=8HMd@3fa7K+$%`%>L4*1%XeR>Z_OAaSOx9crQnB6ow$s}OFmAMZ@@#Gm zM%DvfFM5SRw4V)AR>y8R2kjd6ZT(-T;DTScc2=Ff@91e6H0xbV>buM9rTc``{k4-m zONCfKnCaXYC8z76+2kYG3|?_Gz-6I2bA^2n_w8J1P4%>_Da<5N3HG$Ljl{tYE(#%r zGickQT__?#hp>{s&#%Xy#|;Z?1W-+-lCL*B8ewi@5ex1f*qqv%ei$av>}^p% zoi3h&Cn~w9$U_lC{BJS-LFt9$L@7!%7(a|s2J6JasL+5um>ULuI48?(G`aNaYtWok z|6xp?gu>9J#c|#`kDxD405;%K`Sg9_Rq5VJA_EDdR3m*M{Mod#bNe-+VDz~beLE{+kO9r1(nqT_wP#u4%sPPww7gPYXv zDU>t4o?{B|G0rFW(R~Q!S9n@`D-inf9pd2Ubouw#pF)Lg`-Ob&B$W57*g=oM)qew? z@`6@`3e>bRd|4Q~n*G)Sh*U&6JZ)ugK3IXG{80=!eyhO9uzS2?fPUGUH;)Cs0T>oN zr<;pBomWt{MJkXHJOW7lxaH+ep}RrU&*=tR}EL1On`7AGluZxnT}p!IZ_(1YDf zoAS(gXhI^}H*@co1O+5|RRquiEg0cO39vtYGo%NO$Uw)Q%3ibPew1g7G--hpdYUMc?;1VEh$I68F25}Bf`a^_w&q z7%&t&CrB4;LP3G({39Ve)#aw*GDdU8d*kQ8 zkBv>a++hojyKuH|EJc7Fw{uCBcqs`V`t77S?gB@C=oE`6g#*bndw5poCJLSTnmII+ z5Mcys|30-Rley3w)eSP%WBBvclV~4?c+m0UQ!-eF0?rA-a{*I~^ z<7y(Fg`4RE#f|$rR@D0pF%5m4!G|}s6p*}jpI}0&$FmXsO4HsltUM@zwr-Rbi=P|n z(pW_VjvAVS$;=RNr+b6-HAZLjLzf*nvx&Tch@Lcg^h$zi)YyKsZKMWUHV=-$@86XJ zL$QADZ_h?C0eZw^W9dTf8qDyc z4@?_=&58ncC_Ym7Kk-K!qe=vb@(8~n9({U@#+{`4S!V^qZ{@q-S>x5117<9bXtstH z-yk?;$5B(1U#evIJx|;m+%^-fDK5_C_xeRgd51diMQdfap`CHvjbWJrG}}A%cWzey zVp8wnwfiP7Omikg$u8M`ld4=>S-zsCvyuTuX!!K(%)@8G&qALyR?dMoUV1eqS7k2x zIhaT#NE)0YjeicZWK7XZ035bWF4l9u)MFZlmXbdHX7e>nljCp=*lqyX>J)o+1F#(a zmu)AUPa*X1C4w6S`LUP6;RIr*zmoqRsxVz$ft0}p%zuOP!iMe*v_y@fsml{*cp0{Lg-P9>; zdTx4Cou2g95zZiva`{q)h&j(H_9>{={KfJa%o@ooUQ(MmF@CUqa`7N;%8O5al2WbO z8+pi>GK@Xd0dw#=6=f*y8v}E==-U{9#f4-R`SfWf6}ZQDmZZcwG|A?wIm?q-yM5~N z6K|l4cFM!Mmddw>eR_tdcOI_7Nx66?T!5b85pd>o4QMQk<@1@L!B}b7)LrpNcdlh` za@nHADz*o<{UkX(HT=eghr?o$I>b9Xze>BIyzDs|ep>F6wZ`$Xi-iNbP_z#B#>S4l z+{Q5+o7BoNcLiA=yFYKq9~!MJ(pcPU91lR2$AQ;6Skt;fWkmjYTK%yBOBDVU6oK1n zD%Kf7?Qep3_-U{SB@@m$ZLFAmpYqeBgG?q&?4NL#y%uFG$S)=`1hdd9LCho2M8A2V z$47Dc=s-DE5p*Qaqlypplmc2^1b5361H)iXIBLo0Dr_X1Y`+9hrpi>&pJ>V!=4Q=_ zx&+9Nw*nL-U$xi|_An`o%!*D(7R{Tl4mkhy{_?lctuy;3q5(&jOY2P$Kbb`JKhp)= z3TxwR)LLjIaEW*tooM}MGH*2$oqRkmW8d-c>TO`O$p1@yWUxmA!mMJ!4NyS!f`wAa zQhj67kpxDK9rY=fIyF?6#&fl@bW<)ASben?K7b`~I!8DX`v?JO6pwK0nBX1@iT!9T zMB!(h*OHM%!X?5MiEz2)MNwli`F=7L{3mHbijP8KM)EYy zjL0v9n<9_%O1fy+1}q0#;AF40MN8PhLgT7Qx1e7%Y>>Z9u$Y0TFg1v0D*mJM`!ZRz z8|^;HB2s!;1AGd6Km)J|?c~**Z7w24%~L~neBH?!?(|s9x0a1hOrIzi>QX#fxT|hz zGFzL?J6x*?^2}334P7b1FJU_ltNuMp^##s|=O;MP zyM;gcC6YV-qC+*g_gWZ8wadm|Obqjt+@+fGvERS2un-LF<5p5cP$k6S)^VOtd98J{ zMHZTRY<|JSiUdHHjJC=D_8pm;KKXk(*28fy)11>Jsi6gw?Sa&p>b&=guCp{l5reO> zG%b)hAS-Qbw)^OK>PtieeA-$v0^mpwzyrwYRs2c5 z_gs{V@8P8a^=^=>>RnMt_?aHaVI2%A`3v?t4=nk39g$)-d!g}``P1eST`6M)LqN?8 zsz4rxKlop#iQ0?5La!_HE3MikfPw)G`l^9}7JNSM6yP`2hW&7WYR1%86FDet_Zn`X z3k4dY&RYkTWrSud>q?rv+8|@k=7ImkLj!84H;h%zAU-V@-kBV^0m!8cn6ltC*x2ULWf zsf$(Hwn@uW{TNH2|NHl>2q-yBF3j|H)rEOlm`0(oM=)4{3gwvJ;f zc-8?5qileE`z5UbP`pOc*_xTyVY3}51+vE7R-b$V=3T~QsR9`fR~~%u)zk#~rrbyQ z68}<~hAai$IkaL`oICsQu@UKL;)AB-!etyO=-tmE}w3 zvi}XW6te=QC<9@rt3y(;ZZJf$vyYG)t=uTUOKjZoTQRBZbHm~V=Gyq)?uwq`kkv*S zFb0$sZ{uo)1X@n-nYG(w@>c9Re=r&=|hw|9;BU zttN9L0u(6wGv?UYO^`drdLqmJr-A}8d2QMdhz%JYK}= zFHAtU5pGJb8Ar|=1SjhKDA_yh${}VX&5ZYItg%?e>j^N9#p)0LR&kk;5AraTs|3xf zeHLvzkK^kM7HfEKyg(605tLbr<<@H)u zr+lwRsgl@J)qLl z{*43F%8-xuNkCAV3HHeF1T#%4Xoy|qf?DXVy zB)=9VJws?UHwD6GlpC0wT+A=0FT4L|lGYGQk|c4n`~$k!pIM{D|ejmPd=U8ugm``PC+O~?Iv z(PXY3c6PDVZIT<-G`mISSlgAlzQo#ru)jYN8fW`9lcioPl=4wuMsYC87j-&15GLhv zB0Y~yFhox&$r%G}(0KiS>@%$9`K9E8iT$n=7W-*b#F8o&T4Q zBk92Cali%hXgU4;mE*U(_BU#`u6(>Up*7$g?Q(MXiHFr3?4t7yN2z2k-&*uGl@;1g zpvIMT$4vvzwNO^$Y4dAAm8zMfD|#F>m=HGGP&viJko&+V?I>e;YL_Lr)m8y+VR`mw zn?0CAK|E0Bd}Rl(t;}#LJ(xLH+7%L*2ukPtGk4K>eQ@jA@q-~uPK9B*He5x zm9QraFyB0P00?WdKT(+2Wc+L6DYWO-e%lUmfN6J;zxQXI7L^q8hhscW{_D55TpB09P5$u?=sR8#c>Q(As z%oP07gNGtmc@&@fYRnV&RM`cR9nHhoixARqNuploV;MBCFNb^bm)xx%@gRfO)fy5Q1ds??T}zi)K4Z)#o=kNtL0jn4(FS(UbO?@iF(Mx zi7t+W`Bt-r&N-O$?z{=^#qrTHaTVhlmuy-50*v)#a_j?aA_8FAgSLF|vl{;a>`)li zwrGgO_6l2EVzz`dk?YCl;1@T2|8}JAy<#33R~tj5KiLil9Fr_|gd>-OV1HpYb^8rU zbL+FhVUq0XRZtlF_jpBgAvH1P52SZ`cT-oM?Z(8*D$>J>i5%-1D+#z9>;>VPtsq+>a&yDVN1gsja>;Wit7o%i2wr}2bw&OB+Ts54@qB%E zJZOHbKD}xGP4(Fac7E;q{S2-7Slilkc5B&%@xjZpaw0^Zx$@NP)F(t62Wnto_)m zb-tx4td|#Ow?GecPUMEU!5g;;-nJ11S{&ABBY0s3l0l4xGE9FvZ-_+Q-40mnU^f0M zij0Hw;u$vPNI(}oMAd)$tuz?ODGL-QsMJh`R@hkg*6g)#w6FW+H(`1|!tp(zdv> zV{$ReklpZpAzwhX3z$NqJQyMTY6->`3edMAb4A5*v6O3CjxoHjG_OC{9HwxcXUtEJ z6jvUn&QbkEgKG4?H-!tL8X5we2G*L1t0tf9_A2tsgv6GTVMV$M@R=~0e8XL3jiG^> zywPfU2cRYimeuW*q~n% z`=*Ntv96XXjrN1dcGQC%;R?b8!HGL0rEm(G~W2q;j0pti1DLX$e=|Bb-?cP+_+p?!z*;NrcT0zj7A{A+Me34nE3}I)ivq`j| z!C79ica^_|@PNp}eMV)rfke?F4O_z*PHPI8&DnOp2g^jm{MJ%14IUx0Ht=Lp-5i5C z(cPQ+VgM1RwOFmcrtf{?GF6CBd(nGcvBD}zu`*^L-$%t0hsIVHc;8w?uRq=dbPR01 zuOEASd)DGa9=lGNzb%<-)FO)Tord~qw0Zc`Y0Dm?e7^Hy$WEQ9po?*xPhzU`-l`Sb zi|f5E*ZG0&H}$89$KdEizWdd$WB5S1=nu8XaQ8>o>W`ZgiC1O7s^bjnS)Z0qgEiqR zJoL?Y5h)f&DH>usLLC{faOs|{LRMdnt6TiFn)5GTu)n|YNq=Gv2jm-N9dYC^^Ccc# z0xW`7?t#7e9V)!Bf&k=9Gj(Q%JJr3LbNhc61}dID5+eTiI$ zqLVlh&vzl3*W&ZrW^|v)wP`DdUQjZ8zB+&dclJ0M89!oa<;IC@rM z3AWgyll2ll!InRkC$PbP`f^HvdPc`NdJ;3KzlwM!8@AlJ$_jJ5uTePn3~Lo)b+LGA zSUJiUJM5LK@ea1~M>nh6a6p%y9GF-Bs~lqyAFy2SN+!L}KNJEFJqt`)ot}we0!$2LSkEG ziXx2gy*G0N|D{w$rq%9F=p|B@9>$#0)YD_r1(a+DEUus`|E6TaN3>*)7Eg*`~0me?@n5;soYVCw#Gg{dFyTZ>@N{d*bf^;+j)lcl52JRbIY&B_1IBzUN)Q0_D{@D8Y^mA>5vpf z2$&{TwgS6sO|#e1=48UrmC%$WI}{z4|7c97e-tATQCg-Y`ge@R1!X~cQ?Rs#JPrT; z#m9z?oxOx*!71Aj$E)SyCXKCr`n(fY) z-*pO}>U7!8UQHQeCQ?th{841jRwbSJ5Nc=qv&sckWiyXenX2|%_`e?HPSsY=w; z3S5wCfU}wZtom7#zPKR(9vR&@j@%j*CI|wCjF>p}?e!f-dY_C6CW!9g1n`teon&Dd zmXVl9fAQdxKTrBvK7J=4M01o}7@MN7%3-Ve#u-6+cifpzHjokD@sV_Td3BsNf|i9V zP=w)Hd3KyDjtgC53n}er;QmU{CjHsFes=Ph*Y|avqDUv{Q2%vLv9A?$FNs;g&8gMs zwAg`E&En>^bk`_B>Er8(mI389xL=>uWG}cYw0iZy%$;k6Gh)ExPIDWIHE4i19gkztkj(&S9+B>h+R)yTk8_ z>C>ys*>dwKH_`vL6NxfLo>eLQ+AgvHtP8xq`frsG7#5o?shNp7CN z1I(C(lQ|=mfTP!sBjl>c+C}qE05l~_6LRomh4J(mWv4PTw6p2)@vJ-j71KkK#6U;j zp4SNZ&CG<%I*idKd#ck-O&K_+aiNRZu_ci$Rb4H=v3FFMCmVhx%++7BL~CyM>yP-^ zFW}tYu@nC0`lRDG?YzEOM|fxa9YMy0fAg+hpUnJCG%s(w;U$WGgfD+CNae`j(ZQGL zXTa|FJUaUSu=mzcRklz6D2ReehlKQ|m6C3x6eIXCi1;(EL;wDM@OM4(|u}c zpOE&Y%|w4~dfUlD!!gGNf$=f_m&9en#Xx)A__R)%Ok=Dg#IsHBW7qSh%dd0c?Nl6b z!Cuj)%fTLXQlg^Q7M0v!YRbvZ^h;skJ6q#PJ*j;ksqr?6xs+SdldeC62&kAdU`}!* zqKzLVFFP<&l({u=U%taRr@nbbdMPk3Gk42jsjXqIj7;j;(II|waA<=2`{(_lNXEn(N2aW{e}yzFQ(+kKT~+066Fv z_Zvn&0&UzI?u2xt;zs_cd-rVcoxXG6@v?;63o@s6Q|*M(%wZ)$MwX}VxxB2Q_E3A< zd2z?%`1TcC$tRYIn%eLq8JV!S>B5BdB%9D>J}(R{+`AofJ2dOhliMEZMb9qWl+Zet zU&r41Kny$gPN7%G#pmsUT83IeXC&D_aG$BOrIL0k*;AD1-m%|tp$q^-{8#7$Bn`>^NdJcg| zXg5j>(UfMxx@>*#)H<$0fsToCvLQa=EaT56Qjb#)l#OxT?J`KPN`3(Y%qkG&F`4fYcl8SBO=KF~^I zMe*3Tu3kH?h19Pi>DIjzZRs?}&J+}H%;L^=ae|AlnQ1bzro1;u@LN5VwR=ov=k5|5OfyYP_;P2J zSO+BE8!Y#^hpNwP&g6CAW(N=dT=BZ3VP4L@eOWI6&YMf%lU?Lhm+3PhEk1NWR)$8O z(kT~*Yd>EP&#($GB9S(eKSGFlCrJq}#^=bsCnGYK$88Q1qL6lzHuGkeXQkF6+fzCAtPEakiKsMo#r zl`c(O@UNr|y+NN7&)MB+VBTB-=WT=9_j-(}vl};9L!p8wff@ViglZ4AsBFRNB;13n z*fKgiAH~hl7#0hE&M_C|x@oQJz4HgJWxV%JEDsVGF(*D<6e{Jgp=BED+=)9uI&0s2 zh4yyj3ciG3AS1(@_fl+t@r1B%BOu<;y*|mK*CU9=UC_I^)O0{^!fYZyZK4tDW;esvK*OP7(ch~kE_LFkH`B!rUFS{6Q=-@50n2*L% z(p%u(gkA2cM{Valjy`Pg%jNEM`z$+(27U9nd^6XIPrc~tgKUbgZl>hkyoKl@7Q2#I zas~F7l8SgF)8YB(vg;!=ycb(Qt_NSBdOWipZ!ZIDmviQ4&~uXyD@zL05|56b9w&c^ zF_w_he2~qFo^_VcisPF%!aJGDT9dJs?b`dKgCQneizjkh_nnw}c?wEB&qwhmo!7R{ zB+G~{-AFj2#42s@NltX!dtcQq^KnbnSMd(_X}6Lz^fklZRJMuiF79*qwZHvHXU=H6 z+Q7v@@ODN0+Y~SQ-0Y_Q>(9|$s?>}VDELE@t$F+u{sBhTCXZI`bTiSe47O($Z`9tZ zNYZ@fRANK2@WKUDs@%dERZ}>u=b>n8qTsYz04bJm^#nJ#O7GY1z(%1Q~{V z%Ywhv@Ih7ghOLIh5>M$ElMeS&gN_yj>j;D`heG2ymM(_NH3DCupffH+&AAYy-K6LB z0(d94e(@iKYkA7gJ(Et$FD9&LJ6>z`3aZgDn10$=TU%1JkF8{TAkrs8W)!AIv=XjP znzVj?ph~UEV~V(=W2QdZDd9|m_gdz)`3diqNZJ6g^{||Yc7Ze zKI%4VSV#679NcBzH}>0X4dVrqmZhH>NBOX-yM+d}+LcrT_AFI;v2oh*eTBMl4*+<_ zX!+XUwn}m&2)%+@Ujbe)!yZo zu6h(yCR}}1R$VLwEj1VV{oFq3B;G`WHJfnpoY20+7vGTN!g@gh8RJer;c_!9CbfCq zn{QRwzcQ>&I$3?a&5H%mj(N9k|J?Z{o>B(aPYlES!YbJnsjr!xnE9Pi-tafYlii6! zu{nG?>WFydMK;S+n6}abK0K8LxHZS5nm5xXrd^YP?bvglnLoi}=IL0qDiT|`E*}Jl zBVg>GeVb4a?Wi)8VK6nP!Fb4!JVy9oVy8+flO zSHY+DmlKLOxrNqDT@Px*;?wPHhl+y{;@oAs2_D8!yGV+-Cay0-Yu(Wz{BFMxJlA0* zRI;_Sa&kd3i!(_L8Ic7rcq*ve#T#_neMw5cYSh|k?*%#BX=!h@o^|kLUh>_u9F0^O zpkHGPi|1LOqf6Ire>}G4Ohz7gB&i@S^^K`Li{#Zq8x^QA8r5_4_dIUAR9FsmiB+|% z;NYDY(^E>tHv(Ft!o}nd9BC)xngicfI$DOaBs0+k1gLM66S_!xyGG$@k7|-$c8jo| zOiP*?Sc%Ya`~}cuh6y3r+RX3 zT@%XZobZyET>I}e8`GSmipu+*Qt3}*aLr6{y_Au)+J)!nS8Gc-uHGm5&V51qG#}7v;7g7}?QX-62JW76P|UrwE$o>s#A`mIFMZ z=>g1*Y;~h6XJ|X&l{=T^*4_SuM&ld-8ymD+7}+!rwMbqJ)k@Z-9A~-`-e7Dqq8%Q{ zkS493AE=y+6cY|G_O*>B#H)|e-6^la?=YTHd%PgXEl@^+A}6mhdQ(@$@r=XQAt>1} z)%#4GFt(iTSehAs#nS2lz{J%^?tJJRlH~rSiApBp5YAVF(U?lsD-GgBYpZk5x~u(@ z!E~)>p12H4mX+_zI-|pJHb(5%47=^#boxC zE+$TrMoklnKRs8;D3wZ|?lse`Yaj8W9;}LVj}q-`NeRS2=5RcB4XJ;@OXj&|erApi ziU-zw4ew(XN z?=|b>a&U>@(}STY>v-zfMv0GNz0!dRr_P8sI5;>)ZtZpMD)5j`qgm$i4HIiW0M9$!ExLSX_*-u%p}+wxqcUGasl0eYkS7 zqq^*VZ&4XJ)YRtFohGjM65;&uoM&fPf+h@N2365S;yEf|m%CH6Qf2rElV78=zMp)n*P&xJQc1U-U(Lt6Z@xCZZ~Qn_r5c7J3(BdkSb49XW+8OpF{+k}jEt!=0xr8(m&JugMM>K1!VxF*j7Jxo*=vkXy{3WGqxO z;pNPz`iXBrF_nFNlD>IbB6#=SOJVxipR3{dSIWzLeyCV+la)NJtp$vXM5-|~!9AfA z`Z&=MOVINPCH%T}3*92aeiHW^Xc7Xm(E!1F&kEAh}X>6_EYq({}R+f2whDiwas zo+ecl_z_Ex>=@K6>WR)m-F@q%&L2x;d!{EvwX{b3Z-pbUdCDwVuCVa1KL^}eS+C=C zzusi0bq-s6dpcr(%(hz-`&Ddo@F7VEgwToWMZ^>Lng_##BzIqeq+%c+J+00G8{}DB zU~lz2g*9WurIbK7wAi{lB*D)lQQ5zsd6oG4$@JFLPzpA(^vum68SqiLJ<#HM`ZvpZ z!rinm5Dpt_l(5bP2bzgKE&vB5F`G^>!?k@PXap*-( zXqe|OXjCocPRS!Z2;MVvJ7KWAbCCEF3BGx1Yu!@p42KTEh|ok=8;J&ix5DUA9=3yY z43kmOv9{;-th?gQ!E$-eH=ButR9yQZp2~{U+Hmnw%SV`)+*BW(vwj+h-P1Ck=n>Ss z#M`@ecxl+5oS1uZo4bn)Z%I%o>$l<{uN`7h zo=3av?0!!^&`&MtUJD5NJ$=6$H_q48wr|dOLCq`SKUU`i4w9S~O_?J&barzsSkVO| zD8sjBm9!ajxwcC-qlJ?$e~i1kNQ(~OXssC1N2|NvZzx7ZU%nhHAJ3Q(JTU)J z$)n+7<3CdP{QlSu6gtPjBTUUkCCWXv*c89f$<81>-wkC2eM z!*@UZKQ$W+K)M#XWEg+!EJ3<5SRX(jc00kGa|&;5>wU?-BiqO*K0K=P1-vMSHjA*(jljA($+>oLYS)D zm}&ZfjU4>EgN@sft!1;;J!@ z!e|FemV(-#HS^jv2xQ0+HdEZ~@+9=jmj-YGTi$B1jt7|FNm{PyB*36m7vC>%iQ@S> z?ZqINRJZj7v6&fVikiy0)wAyCrwzf&5XAzUamMfK>2uAiIA$}=DGV;pAn`3_CIKlY zL8xKIu@O5@sez(QT(mtza}Sm5DB6bE`swY8IZ1`bopCf`sW)%*V4_K!em6kXC=?xK zpQ?d)Pd}yLky;(uHXo7BWeQnFB1S;3sVEOhg0fNa9rAGfYS)^|!R~dJs|ZyY$fTL2 z6E95~qh0u1r&u@bwKOhf958G zzw#ZJS80w+s^W$scfd`xPE}@9$7!Jjq$sIH+ugtH7Op8DZQqMl+@B<=FQrF)zPkt~ z>t-71B$d>GnAzr29OGkb z;HwNJQ|7pF9uaghaLzW=&pSpw5WFD=M`AZAn!VNRz*}hOGIM1+e#CKW!u=9G0;}l6 zE8Mx6P5SDQ=1Km1>uqLT6Q0KzXJQjp&-+Vjv6o_2PW1vkF01)9SJ4FNwwuYdP|?k2 zeyCxwlV_8Wp)*OiVy}>qe!Op#>G1J>DN<8W6xJi#J*kM(K*-#zs4aPog%Y#PgkGfW z?I-AN9kC-ObZ7LYe$v;NYXsKaarXVPUvDEpToT`{Fy%_$FAP4{Z<`!$L& z>|7mvHzKKE32QO1FX{I3_wT4oIf+{rDmHkAQoZ*6;-v1AHd#kwst8fuH?G&{iWl4k z1~f>Vd#wf2{{BI21gr8n<<2cAAGyAU_n&YI>JC38eO>p|)h?sgAZut z-Fh-(ws{jGUr&HY**^7ivP~$WJ9)-X-oSX+F?mK$M99-RNus2iY%DJ-{y4xm7U!+c z8GV00At7Jx6ydkQwJfpp#?>8-PjzfzPkDK)c#kgv{6{#!fYJ2iWKU2?UiD%EamL4n?mbCVBW9X^9hHGXv+U4-KePiYZITq<)n{=Y>K;m_+ zDIJu&3EdCa2XEXX@C!Qv+>g=OGnFQU8=Ttr%%o<}k`F0m%$B=gHaU%@9C#AT4sa)3Gf8s546(zQ3Pk1C_&GM}{ zTv9c=H&a|e@%3vf9fd>1JXJboEX-`0Cs)*J=!j<`0>^o`SDR~-?Z#FThw14Q?qN%9tIZy8t1>-*D_Ej`ZQ5QstuNnyeob|3ON3s5H7SXH={_xP_(M3zk=2DTb7sV2`J7FKX-`dDBVj5RmkxwXK z=`FrsiaWV1ys;~pPByb4oZlf4N-C4tc8+!y0`|hN4Zd_kfLc|7eRJ7yCq+yaT5Fu*wmt$_s7O z^2Jr#jjU%sf;c00ZfiM#2xR8MZ>B@iSyISiFASlt9Rs1ZMzNPl8U`-J~doc-s%HRvu?auddrAVrdst* zf<@yOiGX$(Yqn>8uvALX!NxSkf5lHeH@Bj1=k7_7 z7@N}oNnnPse>g&8T!NsQ^4tjIOAWW+`5?R$p`TcIcU|{9c)Z2fPjS%R{O9i4;fZ}M zH2}v^+7S~yR{_$bA7`Jqp+(Ax*W7+Vl1)flrj+VaUJ-PzRq@!3&%cBv zTy|a>Ve{hUkt^>$$eG@;XRNG1F8@@K$lLCgr1*dVnEy}(G0)?rWp&b=(+d+breVG& zZ8<|47~e57^CQw_T_S*{rOM4+VDhJ~lGV2tCYc79h|$zMAO%V_d5UCTivp1k7Ustc z^`*f75D(6|nq4(icsDvXHadw?@hu~vF(E-cc7t*(PhwzQgiNm}i>(8=SJ$h^kcS?Q zvj+G8c{b+zIu~$gtU{fMMMXt(aW>iIsi-pOul2ZZ<2jQelRUio@!Zq(LIRSdlW=%u zC!*5@=q5Bi7gV{rBn~|+yESA#CpF77J#BoP$FaPuL*Ot?Tj$ViDbMutyJ8$fIzrGW zOzAPiB|7?%6Z{i;8r*FTBRmt`=Pr2T>0AK;1B6pHt%S@fT5@*shSQDDgB9ass)a&0 z>=836HpZreA{2}h{YTQ}WJS{#v-jgn>5rhDGJ+uUK4Z8hnMDJ)G>+0SGD_Pn4CVf? z$?PH2=~Q})O?VnPW?D+H!%_j#)JHqSB_TGjh}yq{4y<5{a0-SW8Xk0vckj@zM^HiD znbOr0zHjYyN$q#S=vj834%}ypcH9)8nqH%?HgR;C@rHz!Y6V$Pa@&%t!hS=WB<2Dx zf!B_bWr$c2FEq20(5IG4Xl`ajAL{NAJgOtZOW8JYrrCernZ~%jwz#yOzT-nM2?s9X z`yLcTe*hmvS#bhp#G=(GBOs@d5lcz*7jM?Pqpul0>T*?6I@ygW+k1VIsxeTV=lz<0 zw#0vkgTRmipG75MZ#^%VB=CvURcT3eJ$+|q9zR6f)PSNX1;G*%3{izmJF3xSlF16c zxxQ5EHq7V~sjaEuJA^{vH|A=23kwU!$fd`;yv45Sf67AVJOtCPjP9k#oeAYoa0E)W zqh~ZH?^dKzl+4c&+`m8|nzZo`zP<8kT2*_7u=w&D_*%4`>4O0T!NqFMS{JE_U>|aza1s%q$wZc_ksNQj>Ql4V{U51AlmAyhT|UBmMNW&eu4W z=pfc~hE%%~jZ}-cND3JdaLTjOTosu%Z*!#i6Cl=AIGX|fY-mE*96RXy2TGdOXm?Gd z;8;C_)Fuh6LxV`nh}eej7UVwyu?{bm&W?bfWZmIwc@-OBjW`1iXBuw&F{%$fM*K+t zf{s55*E)ZeBv0y_xq`)I#>?HTC=%e(fKPh5)$z6>?> zJt8IoBRh@tRTw^yhch7~(03mfu4;Rx)$LdHdXDH`X1qy=e;rE$F?^Atd0lS%Q{JF2 z{y_u(=}hzSxRwQoIjn^Na;-JNC9PacI5Ybn`zVg;G4m?fedlo>S*fyYry0qc*jX;- zcef}0F*(N8W&8#3AF4EXAV&F>%%vy3{-zWXlPMw8=sxGXu5oiXG(YLFpbdN{WJy=N z>Ph5oc?R|{HDk@3&#FgVf^@#Su*$Cchs0Py7L7=I?)tA6WT5gxLCrIzii^o@7U>>7 zOGS=rx?fP+5w;DFi3U)}P!AYsiIr-%w4xA9yAF%2JUp!}dPPEgj0h>J#0EGgC2Y#Q z`l$Rn%2VX>Z(P85!Oo5jIPHt0pEGvj8e`-T$UCXzbV$qhT6j?6N|`9?LP>V=5y~$^ zGnWZYw)+Hhceh)Z)WZCzFrUr8+`t>9s??hKP@a=m$E+fO=MEkSTSEZkVrcEmwBBCM z4!a&2b3BTSRMsl%Natd#b;0j6##^@JeHN>X?ljEy%$vOH&z>2rvH05)NH3j+f`rvcnqwElMG1aXyjPA4>)0S2omJyK z7qZ~wRL2r3$vF^Yf>_@?di3aEGbjHJ>^K_pibX^iarximoE>znq7%SzN>nQoJ`$ik zjXBH7dk#H&XXfsi&8I zlcnUxj%(wl1fueld3yXf`9srn&26LnT3wxI=@zGIcg0eg#AC;2beu<-cKv8$)@kx8 z>N0aL<0gu2vHi+dM3}G0O7(*r%^$lHQ`GZ*fWLNLw*7vb;2-bdg<;B#p{<`7!hR0_ z#&XkVm!Naqv?KYEW3MpI&IsdUxfGH~Z_uB5Bwv=M7ZItv3HqTkTvYMT#-QjZ&o zhy88<1mur)G}LFhywVQph(TUvYzq`z&g;2n(>0Rv*%$<7$=tRTT)E~GW)*5JU$|%^ z6U(*4^jxKsYg3T#iQxR`)$gv4QmCOy(q8R+8$_g*;Lz&n&Ue&M3;1}ywcf|$r%Vvk z=GR*OW@6+wwVlmBmSSmeA;gxiKP1E{P*iZG93&`nsS~W^Nt4vg;H8h4=j_;DW4c0F#kBNQ{td^1(Y!o?;_bo95N!T7bWQ zJf6u|ZsXSRk}c2A`TF|bRc5t1SMH}uKkjNDZ4BCOPYm*i_6>Z_w?8<;_E-qlpM2xY zH^vegP^j+QUrLF-9Y~S7xLa-*OASiQYO0M@^-S;jFSp2yxSy9#8ex)l_j_=}@OqrN z5uv>VM9Yfs{n&jlt1_tk?AyNI`<{qW0_KY1a5a~TfB@b->;fu9B^&a%~-}2zeK> zPW6`i5kntBR3qzym`_5F{mK;9<1|g6` z29Pd_&@2z|92!NIn z*N{P$t{3@~NaLDBLh`H`Fb>&n(bd=aq#YdKWwjN#J`6_oo`Y$qaQN)+aT0j!iqJwW z8h_djq`7eVqSOT{GN@T^47>|OBVH3VAY`GNcKhO%wAWx$L1b7gK65ZQVS0S)+2=6Q z`~#iy3+uYV;Z1eoa}|AMeroDiH4B115%en`D?xm*EyV}#>@Y(wQY)v)N`u4g3ps?T zao&D?r{+a++z1Nahp)VSn2m_d7D~o%v5{|*JI7Mt_RNkCl8BfN^c;*F+K+?iG1Wv7ECm?D$1q$Ja~MBj4{yM+?R4+TP`|(_FE;%RJ*0HZ5 zOOM2IXoMRv?wQyZT^(?q9p;nDm6+p^&vzQz{cg2f&sb+Y-_Z@R>`i_e5EzJ3jSj@r zw&OWxmM}BO8FqjGkuY9NzMumfBF7`dnDV}62)T! z?_hyDI{N3OD3aaBPsg9Qf-?Kv&a3nf=UUGDh&|57E%n<(vj^1rH&jUy{4bGf3BT2>sGK064<*wW?5W#9p1_< z;C`UV4f5UlF~?i@SKpXg;*UuZH53~&uZ4iK(o*wj)&_xDCQ4wYtQyiYOr9NpDnk=S zvbEF;pe%Lk4uU~$rl4a&jz#Es^Cm~McY03M;Og2%jm|TN}fy zhONa8CF4+oz1PWf&QYAJ9c=?(#Y}1MV-&fjV4``;9N7D6uA~A?L`!&y0aC9*<6-JK zmpy*DOKHq(-8wQDJ>SlIz0E_^V4)IkSPlwZXuft1M^2%@>X5pd z(HqQsg>r$tmL>ounv!$8Z4}55Z|Z>mShe(hD;OgQIB07j5!mT}&p=6a3xiwMers0Ds_FpN#5Dyz4MxO40Gzc_0Oa&hBms3JL^IlOL77VAQ*s zpTEC2wnH)>D15*dL2Fi`746c${Sb=~s@FpTHA(S+^6{VUE|E7FCa3q53#VW9-H-`& z6YyoBI+xmo%?(O~aNsdIg3^4bWxGhNkI&t)d@T!xq)6n)o5mTMv&e|vE2gu3getcN zyIaU~{MI0i?@dC-xiu94epf&{Up0CgNF1L$e2?E4NszVTq z(#63u#KD<+vsg+S0o2byf3SB7o)`w9(+#?#1J3z5$e^`|AIh(ll6WaeefpF@%-j)Y~5SAe`h9G}7=SKqJpnm3B(HumhohR%={G+y|H5l(D z#tx4l4el7;Sxj+R7(x_>V7tapS0k|-g@n1e(a=Z#5#EQ#ATp8y)v3t4=k0hT*68Eb zaA=h5oE60ul-YUx{bN-6a~OLoj><*NvJ6?T{H-6WJ6PT2RNrpe8968idf)~)oW3}1 z<_;5^Vn_YHt?h|I?2vInfd*zH4-F>98*>jG-m)f=MZTQyvP@$T>Gs{QSDK!WTX$Kb zEBg&RNuff>-{|)~l}!c<*tdBA>NGsVK09LYH{r`vw##NS5u0mEcX@j$`WV$& zrLkp`--pyYlslX)loXp%rbgpeHH)3-j)=fR^+=6*uuif>(%PNnUa zuI$k%z#H0qd;QTF3VJ5M%yzh|i}CtQrF>0T?cI@2v&?+Hv3{+-l@R%+7c_!^RLwZc z2^gWQt<_A8TrZ704zYCjUrW0FYQQJK??X-9T(gqj`?7E41Yd|umdiBF z<<+?B%EW3pwGU-J`=OUz?%#VK|D@44e~NQ2(;QQjOUjf-2`nb0opvN#;fbJXDZ%ZL9Y|=Fuk6;-YR8TO*b-b})8Xoil zhH+TJq4V!!@5Ir7fH|h2ER`(Cns1x-;n-JplmWWAKIv>mKy+YWTUlfIGHJ^zldRO{ z3H<6gx$6!1UEzpE2gc6}U7uxUw6IYE{YR7@9&grz6K(fLm9*doDs2p>N{n>@izJ`# zc!!#F@2Jq$FGM7goSrvmp+p3<%#GXI4e_*n-ct5M9%iFEjREoe0w_(KXRuE@y{JY3 z&BqIwBlkg1!XRb^=z&lMJt7t*X6;HnF4xjG&|ReMzG(&BRZTs4z66U6>1v_bfLBIs zH^t;>yCYx}sErN1ADf43a( zrw@oA)9oyW*ca&w#IU5T3ZMc}(d!R|qBftKJ zhk$?pPAW+tp?bHf8|0nonosDF4~&0A0}_;o79F!FUc&@a-_kBH2!1CX)H^4vnZ-}c zNkLS$f48Zf$IQ|y=lgY`OSv7^j(j`}hDsH_(PU+$7KNb_a*&$sq!4eWTJt;Ph;koQ@RvS@mW{5PdrI*=^+_7E~pDm-2Sy|>-= z=kK>AcM606F;ZymJ=;qDiXQYtKbHq3s-KS=^#jnb*kG+1qIF)MaaT%2#a@7(1NWq4*Ii=*I` z=1xVeR6M_L|Hw~S3nLeE10H1yt1&`oPRz(!m|z$;k>^0kkY+kzcEQg836=znhsMUn=~-FB8IpJ=DvSlv zaU2I=A|?W?`^))s*9>L?dy}X}nEGiR)!)Zr{671BJBl0mbU-$wQfe{R;uWfH6B!={!zo8*M&i2Ti4W9sRz| zzR`W?#IrN1JR+3sg{8w2wAA=lhcKw@0X9~=cHpQ|xrwZqbc?H2zO!&b`blqsU1>O5 z*Ts}0ffjUd3d{y{;yW4S70hbq}nIg7a(Cwk=qI8UwH zi}9n)QD9z=ljUez7MHM|d{!KwE@a1Kj0UYE{_4+TVq$XDkMH^N;$B5AlEfV}uwM{Xn~~;B#y&2#6@!^L1{Nl#~VT*UlhO9XV(D z4vH;B#l@X{eVOU$Eviw7T?WOW14Z|Uc}f(LX&~~ld1ptuQ6Bpo-GUd%ZJOU;SPZe= zbt|*Jmm|)#)2g{b0m&INGf3w4*f#Zi5#paH9V-kn!PMMY0vf3VuY z!bIiwkNy6eE>yLi=<*c|*u&8Yp?_rwIndm^sq_Vyg$9CjQW9OeJG;rCbnFW%~LhWTt&Xi}1_ zySo7Bn941s|1F=PWLQo4UoJ3zjc=s8yPLNV)7jWK`|o{!?k0mVVk;|p&c~bj3<;$? z=*MflaqSy}X$1VvY+GY_|5$2o z7u%CeW7T{flRv+n{`$$2Cpw@h6{I&HA^CNSKbzzK{sBzsOIKki;{*WJU+fh z@a6#hufl!*6+Hb@zyE16zn=;-d;K4>!FlvZOjY$Uz-HT@L#=-#h-obMj~hl(M39P# ziaNTwbPiWK$BKSGhPZd?U+rYP-^~2}8XzdR(o>wzSED<7dRAKTwEieLESLr~Fid}s zx5odz-;n6nOqH$n-w%m8D#=va@`-@eaq%NwZbq@d;dp~|A=2iV;?0*FEFB)^dAyYc8qo;?Gl{Fj;ANUV= z1hBzjKGOl@4#3~{4*-T*B>!F6|Ff42eUUBVhX&9tG%~Vvr8E35f`uaf!>V4re*HQ< zBO^2_>P0l8M(!Vo`{xaR#L~gd4EBVB(NRA~bE5y4#b$QapEU>(yqWl`nSbOO1d!$T z5*b#Wp&!C zJ4>UczBysWqY777cR%!UJV0^qY9Sxkz#p#~KZ!rEJ zLpB{EVB2r!&Rw(LKB zv9%Ds@9TeJLN`;r6o73o86@?$O2Dd00L1kS42oP%&HtKh?EPUjlYipR&x~l8?3rrz zKm7SrnJEES32gx8+f$|8|L-aiK8xP{-yYv;IT#c&|KQo@clhsa6D9H3MtDi*zx-12 z`_BQQrM(O>09eR(dj*BLp**#6>fin!mIVGWd^WC3V_%?#8Uu2BuC5}#zYz|UYXKI9 zCnWR&lmDk3t$y(RcO*RQ{U6o-&*JxaxnExZgKYDJNBE7kb8nS2#D2R`+s%>Af0vN) z7uZ%7-~oQ^A^qjCst>!Kf&lR$K&2Gj_RoKp`j0Iuk2w8R`a1=HEC%KS9D?3#mEGSP z-~1!SWAqOu zWMmBfN<4lG;h#4^@O<9k(+HGJ9-X}T_5U8%flf~r=OZI(sju2FtMM2=8c~o9jgOZC zfh4GK75=p{X&>WQ8UeJA!tdCBp;D;tMi5gS882_#+Z;ueU-tR`B(_m4H<$kHnJKBL z{$e-kf2&zyVz2=`KtGCg+tEx^HoeG2eE(S5xRyulp9daV_?k&@vR7#f=ym7;>aXC) zA8uuJ^%;2E7a=6Q(0)OSzut$97AWt(1%9Cxng6?v;SWe-awFXU1}zMD2QU^r@0VYn z+bN%y`3<4}60-gIfbo}$lO0L$($|-#faZmT)c>CfkwcN2m_K2YPMbQrJo#m}sPnPx zCLMi!2FIJDznr&&baylp4e-anuh{R+!MH%!C64_rb}b-8Bt=eH`j-}_lV5box;McB zXF>Ox{~ySJjQ%5}`%fU#^g|<-G4&zA!!!J=$G^nu&n6DM2m}B{Pb_=4Dvt@+p*-t; zx$`@85zE)C{fnr76!Bk^uZ0FLgg?*=nhpQPIN2}$#^vf5z}@NpiEu$sH~t4dL*M@g z5`zZ1%;Q(!H;mN*D#kq1Z42lh9v+Sn^l+cR2gNCa?kENnLJky9@PGC}0bSK^frCp?tRGYZoy@q;??F7DF&F=&cDw`MitP;Gux>sAw%SkU!mA|cje+Z42p<#?h zD4!1Ig?u`UMo$W}nAa;WwJ zVDB$kWlv65$WDZepL6R1Ykm~h{f&}+?7z}9X-^RLg-+e`7J4NaB4=Ci6$H#SXO_>9 z&~OV)PDxJI_9z^bNX{=G(lXMSVJ*(a1O^09bJK-_T@8cTBD_4dMlYvZL}AZgB*w>} z+A<6gKzmurkuq9)&_>92G#~=UcfJxng{`#K26C%Eh>d0T1`$pm8=pWWE+7RO{|k@%0qmq(bgKU)?}J|5JW)DeRgXj2q8@cEZ#l@Q=yTam*WMsjer&M0sr7 zs_-vAKPKXSxcUf@hGc`tl83mZwGE4KI=*5;d1+bq=S(&Q*dmyIa5yW zGZOvT41Ohgv6=ten4keF+}pIL9-D60A;;WjfDPBs|ex8L0JBUUX(37vU7Rqn;XutP~T zA@P1ET|d`b@jwPbA+zhEM0)Q7wOFe=TI9u~OM~odt1q>e-rKxJMYkB+bR~<&LLGO9 zedIbQ^%Oq_&Qqg&vaGDA@gV(C$AX%)PU~@@K>c;U1-pI~bb*wi;Q{jE7izFc|9Y*J zTv&@vW^zS(1kgjU1G@c$n0Krdbk^s>DMfR zLvA88EHG}EJcSAjgwyRveo6oeY9$uYro>MGb^I%9`}ZgE0xh7af+FTZcV1-feWECGW!@!=685q{9=254SFpit@LQ)O;6Di(FkFO%pE z`{!KIh#A+m=ISam$S=~HB5Nr&h8eC)sL04yB7skuazFhKXarVy2 zbw9%TIltnN7OMCqX@lB8Z0i6=Au7Vf@gg|Ts{Ikdg{ohGzq;HXn}iZ5Zv7Z z0fM^+7$iWD;OP;e}j+7=taEs3`;8sDU?2bfW7T^d4m&=X>^-wKPT43DI^%)b*T1-J1$iP#dPnzd zHzQ$ftDoB5|I*94$ayig#E8KEVQLQVVWFYayekvU9`DtA9zRo1+TO7pc~`(h&sY+g zk2ePO$3StD)-%No7AX!w_@acslV5U@cxc!=YzSFUzb@L0wtAwp*7N(pa%dgjvwTar z{U&Kcw2`f>jonnb^<@Y(t&VlqEZS~hhyQx$DARPeci?#Xn(!rn0~9>{XE5}^o^1vX zEnKa1-tT0>yWh^XR+ug(O_TpQpngyaxHpYUgWPjxE(;L!3Vbt?Ji?W=isYs1MoMnjPBcJ>Ci3^lua`c+5w;U$sgjz(7wM z{?BFo51%MfCXG%4GLG0*A4BRd^Vxn~3^$R0HN;p6z}y{ge_M~U^{<3bqAaD4rK@Lt z?kqGM+D+cbbN~6eQ$cztzlRkicfn<@)`i_fm~%vMA^52UL%!#=OQUlYCb6**0nNN4 zUQ$Ap#f8>k<2IDd)0nqctp%z?RD$M_+RI#Qq&NOwuzISY&!XJf_Itp227rE$)6r7K zpFbM=0Cxo@Z}0yvBkF93Q+B%KE)MePA+7t!8!+BJOk@7EFm!OX#Rodl>nu%t5J{h4 z7thN_l8@oyB~2_ptF|gl0yg;@@U^pq7^_v^8z9d0wli2KaF;EcA_MZ8&yX1r+0Crx*{seU+i6%^nCa>6-iSrwH<10%6*idpB|7j z|01HEZ4k$h@bH^eUF@5Q!6aTC9W1pb_loxAM}3m@R(#Q#yi6&1iOKvt$TQUFT<@P6eUSv?-$#H^$hK8GX5?1tu zTuVxU9aFgefXQAncCy_O47G^~`_*C%j!*a6p;I=)5>cd^} zp76_O%$ghi$-U-(cq&meIyC?`I*BJqk!c)lSSFan^Mb?r@>(M59qCh8MocdUs#6{Y zReDg5q?JstC?At$rBs8-Yj{b2`J{1P$V^VHOQIIHYDn}@MpxROC1TIaTC;BP!E@wu zZ#VulHC+F&rv<36{=v{sr`DKVs(1EaulnSyr&Iea7B3(hN#o(Ut`9ga{0&K$zv}_J zji?mxLILE(e(mi1+-Ykhi;O#8QG+K95z=3)ryZ`7`0H1oj=|q~YDb&eX-mvLa*k4d zW%XB4V!?u}ky11H6EwIEYNZCA35h`!uOZ2Xz- zw_J*prx8sZ!ED<>!om{$_pcQYpQK}As(FDKTbh^FQ!d6!%3JSkz(t-s@yNm?Ql%xXN=+U3J?gL? z_QskD3T+`A)NH3cf`GNtdCV5?wstV2V&mp7DBN%PE%`i3EmUeEuC+WS3|$5l`5X&d zhBS+y+ZpLRkF;tQ<<=$K^m5%^$AyhRe9CL)%a@Ob>8vTv`Zhn8{;8M^;)e|yA;V`k zkxXdmp9=~^)}w)t9tQxwOqXi^b6L}ANFBE2vmJ|_@>{eK7JI4lEQpL8qSgcxHeMl4aN#t`H=BYBa6HaJ~8%MSU;Oi7HOoe zU*@E-E`Q@S0&{x>%-ZM6(&vYc>7mtY$ySJ*KdI=eiSpTPIkOF%b~bhlei_pu)N746L`j&J#M*j zq9pc|?&&*(gqVkI`}0U1)(FWp?GI`KE;EKQ8Cl`Z*XAc1RjkGYQgW|438lR5EARet zM5PRT?CAAj{hD_vMZ@AcT-xZfRDZl5GEze5PwJUI9NSB}eLdq-Mz-w*mXHlKPrcuJ z%2!s?L-QRnW#7`GdF4^hh63v`&PovcUdcaPUpAD2uj&V?*&7U#C1TsPi`$aUe{pGM zgcmzxT(b0&hXr^Soh5%X_V+c9i&Dx1jCsN5j2qeDWkEci6?a3NPC!2N7m3tbnkgwL z2)B<*Nm4nWe zr3Wk8yZN+RMsjzs&@545N78WTV4V;$q7m#8-dSzK9A6$q^N^Arzb*iabI1gC=Y2Hr zi#y)G(#Wlji;s>c4yAPN)96{|NEZw{G>(q%D0B~^>CGBiPv74z3=H7WDs27W}{^a{xY*q*QI&daX*<;F;e6 zKat{f#A({nl-ThD_JdiM_n8cyKn!$3#m1`B8s++~r}WgrrkbtLZWJXOTWlAMwB^Xu z1VL;p>iO!Je0UL~MrUr4DVtfp>6ZcSGckxkuao#gzSbLY`t?IeDDa@*CaE{?pgR-3 z9f!|g<#ZOvkA%Jab^BkD&?aX*eg@euS2zk41-}0NAL;8xj7&&y9=%~ivx+KR4ib>I zKe0Dq5S)TxKk?t#9Wt6WbB3ThekocwhVl0O8__?wr>84QU~C(@$iu?TE5tulHay9>tbeK zG|)r}_!o=R5QP+k@eV~@znks6Ap-|;3pVy_B3I~`bNz8x?&$Sa+{7&S)1axfq4f}v z0OO-Hb%XF88QyW1YT{Pbp$e(@sv?%(f-8PVO^8ghBUX{`_7SqC()?aqq+@auvR$;< zLQK56=a#(jo<;UHc8QxYm@YA5Z1EEqSxrEezJl9$uix%3v6Y@GE_43UyL2%Lx1q%| zMN`3*;Ckq)natU0V$)u$Odoi==ugANT&tQ0%Nt$-60$?n*7Kc$ zWcJQZf3_)5hra7l+BM0w+~{3&H&!&hsO7$0)}bG0Z~hC~ndb#_6x<>)L8!VLER!!3 zh{D|Z9)s!@UrJz5ZepbDck(he4mCj5NUe23?7Uk)DQj_}B zZi=^PZ2j9^MhAQXDt1J;`_UL-JTBbEkrq?~qhYx{OpPz;^%-nVQ+82dwf>JGpa$M4tF=Qe)o{RW6xHdG{cr)n2gfj67$@2cIm0nu^F@Ys! zo9semlYaH)d|5U>WJFQfab+c^VuWSaL`vcVQF2$J9LZ&Tj$ZrY1CZ|iB1)0}1!Fl; z(Rl1LZdrYLkQ|msrAaC-SNl~<-?qZK>d=cGdFKA`&ToxdLk)NHkWn>o{n0j>k^B*h zmocR^CTMz~$&wZ>d)%Q|OgvKd6?pLe&Pdvt3HebEA&=F^D$8PKyTTpUH*JB3hGTUJ zv7lbY^fLH|cF7+%k5!Ge17(6N1jY;*z^Li$k)t}R31Xbp@TUQ#)06Nkqwy5!uF>i= z*Kav;LCB?}yc;sL{JSR{AA$AUvn@31f&GR6e8qwJVGp3<>2;YbR?;+lX#QuGIvBp7 z5V7JNqQmg2ej{`1cMTaL3q$g(r8I3=i6vEPmX$V_mA+=&mZe;UTD;Sa@06GR^lu5N z1X)^=`S^EFy();aVh^FgBwWrgTqf(L-QR3)NT=7AA>qi(0hJFSwvJ38{}AbyGbWs= zp1Z(_(MDJ?Jh-3j)ry|>(X1-IJ&+R}v@_j2G-($VmCB2uI%7}q*rpBEC6dpZcw@e! zf_GS03cH&^=j8~!NJ%M0#G1S1c=4cU!d$(yCX>+%2tDmqS*TD>EB7EDXsDox7yC@< z>Azv+`gRin!yGCakoi@qhX0xgf45$2(s+w#e~CU z_cY;CUSR_3Tj?;RG`XNoydz}Wg#lF25uWr_wDn%aS@pMg87YXy` zt3)+ZwBwh7FL!cdct5!ham0tOWBiSoWbvEXLJG);Rp1&Wf~W61P!@0{hFHga}Of;hWx_)z=htctw8@5ZH&vn?d+4gp5~5XhQ) zJ{+h4j+GBU*3|w?`F}C1|04~oSe@l1D7m5Sz;V8n17f^cJS%x@Gfu&1SyFP=x}b18_SL;2RlkX$ z34-NrzHIIynG7~Oo|v;@r(l3VWbSaT+L-&B_;A;&E&PqCl>k){1ACNEVRC2%ZaenuiT(TyRRo#%6Ps(>oe4{z}mesWp{lP z!D~tE56qG3Dv&MMNOE**6l&8Er=p7G^fHaS{MrctBl1)nSFXxDG{F<}*QZ&UU-kEI z=b~3!_B*YmU3?M~pIRUGvLfl6>*e@6(tyE}pjj?Ue(`fovyt$w?n6XmK-`Qt=CWW0 zA|!pF;|5vt9fW$qW>@b1Pq#3MF&VKwu89_JR1KlGHO$FDyd ziFQp{g7qLMh%vo2CM7yD+qN2z4JpIv4eL;SH>%4-KqD#7^s_S(MBf?P+IpA z|1di^nA|lvGd*3E3lJlFZdI%_#O9?_px^OP4X_hJ?o{xmr+vm_`}&rdOfE&uyQUC) z0ZQiecjAIxUP6uWN@QAHUxZLXTxnwX99&e>dNbv#9Xk__4Hzo|`-g(r&aQc!_etpS z)k@!hzc(YNc-*~ZPtqjA#j^EE4Jwx-XKL5Ff%`CPvcw-(WIO#!e!-hS$d#?yrquf3 zjWA;Pk?g0gfz`U#ceVZLX~nvguH@Kdue+`GfA@5)f}h%t!bOgKII^;Q^vklD$k%ktZkYgIsJ?~p5MhWW;nuu=d-L8rD&)1N1;lcpQ58CE z+RLI@OKgMq{~rqV4{P;(ZlSSFms7!-#8vEYf+4Xt)~1{wJ^Z6)Be6+}FhLt`Oc**J7guAO(j28E@Lig;NPY(yr&8ac-QL`_M#o+FkwI2A zMvNVZ<9i`kos^ItD|Y5n+MfVd>eTurDiG@^tNiK3!`etU$F$t8^fbO1ZaZGFxiC#m zbq`F!BU!aGe^WxOq)spJe(A9=oi643{eH8sM)pi~c>g-KF@c-rMkSZ$i@c|}2>%Z$ z7gbL zbw0;qB(?aC=ze$AZJas0%TzhdM^ zlGOtFuczbwAkyXjx>f+F1aPwnvQX2#413OKm%zoAeg+nkgC>p?7XX%9;P(RrrSaB1 z)kcCgd?u;9B6(1dzAIh3akFB;TF%Dx)tE{na#9k2>`C_5-KRWb2C=q)nei{*#+=WJ zJ3zWgoc$nEBXc;Ef}Gjw!_ul!fUDpo$8P^epYweRHJ>7mE(e!Wq+j=YBk&E|PhUCA zVv}_5+BoIQ+8iYUlN|~IgoMWZi|@n@>nxp@5dE<5%+9H*G_kxxkk^k5;$^UW*(p{MgBHJH~-L^-V>W}Wwl;YZ1qu{;Z1ckgBh79i4 zzb;(bk(amX_tY-xfdxyK;>)+u1N#_`PnJ%Lj>90X_*^1R85&G`SeVy<`3vo1rh8w4PYl<%7HAli^mr8IH;Xp!?nnKJO zr?)Sl$Jll=IBb)7FQ=f9E+-x6xQiA9!(;7*`>}v!lqRwt`43w8?+H&bg)FYDMPbU+ z*ASj%$*qhbqAipi*QU3}yw}TVhg5rmFY(c5WEp|gid#j!P1~+;tzoWp`S~aUqw#vYO2Qyl`v;-Iqnb$Qd?67QnzdLH?sk~(Q=fO39d$x*!+K>)lgHs+X z_!xtw&1zOEv+C;`%Oevj$yZD)-q-IJ8P%F2lyavP zSgWJ)g5JiRU!;&OfZ+i`As!j>ZY_T8DCH6iFtdWlWmfMP&r%yJMVKvam?43f%j=%W zn+7jyPL+hALH;|eBTiO|b*V4qjn?C%MT`q4HFYrZ%*Y(UW4z;ScH&seC3`3Q(dj*L z&C~4#3`r@S@sbuo{wYm>4J*@w8rsW>g3|d$&>1IXK<-dSqlz(Jv8bSICf{VX|1Kgz zo+Wc6)|?QD^e)RZT+r$npiTdJL*CnG(OI1yy*;s9@$f{B~6> z%-S4P+#lxHE-{|W*V29WK4waXdNQSKGl??e@#87?b6Ous!p1s>qxSex+f||qi zTUwV(SQl@$$$&_{UPec~>qlC5GZH#=`A@55KRj~p+ypXPMkYyrZi3_G?x*5Yni^qT zjmUzRIWj9nmBPNoP>n?7o_(Lt(4M#4rOURnB@gnfPVupJr3P0ArZ)!x5b4{ipK7#; z6&vk`P7pW5AkTOLAzL}`vd*n^%3>MU-o%=JYO4%i(AS%nqdnNpr6GV5!t_Z zwVBb8NIshEkJQbq1RR%?b3bQ0<(Pp%a;dje-#HwUYN#D9Z=ItJdnTuUoo&B+v^9cR zZtnST75?V8t|Km)uaLppjU_#>U%%bAwvukuN}#ctbdcwp+-lqxWmJ8cTh4Dxr_Pv5)!`qN z>UoX%>q3TO>%NSOC$HD2ny!mq9o#EgvdnC1t*E+#C4m^EofzZps=qcbZ(taEp|vT%DQG!hd1KLM|BeT9iq6RhJ` zBhzG0KMS>UHh_zhgj=z703`X{k*9?-%-%N%3Nugi%JA1}jXBI0_f}TG?68M@fc>h1 zN8-64(4G91KZOg(JV}Z&D!ZsHU<%p28h(3W%U@Jd(s*P9VPo)_eFg}aq~1pA$SiMj zXBFbBkUljUTKA}IX?52AKO@IIu3qE!<}wU~BPFW*bY&$-t2|Hl#M7p5NGbg6L57gw zp!(Rs+3H{#I5p(+;Vow{dB~tXQ~psoe&vn9W+fuDBZ1B9=dj(l@sVlGZ< z`SM$zjuyfpPVkao=E+t1FBEIrX1~yM1}Q}59v$L=^((IJl%h)T(}0H0r6~SGQ-~d( zg}xs?65$5!A2-*A{%Xfx_owokCScv3SMsE*e#=Sh-qVI#Pj!JTb+5mdP<(D~NT(_n z>WUKh%J}#*!R*mJxxba=(`mfK^(!rf54M#)0acEPk z8I9vdj>mIJ##YY?URMZ9;_$%&(%EoBL&QE`RL~;nW~cwhL2UAPsZYbuJ+4qlW*k5E zO{y%lH!n~fgmn8lZW0G9Q)FKAN936Tjp zu9GX_h`*|Qyq0v|=8XY$N|P_(*{!&mcd4Qy+sEGy%z{%9{%Q>x4QwQI%;d9s<6{6F zor*Kf+;T7clnI{1(Hw11T5n~(-#Z{8`=odDdqz_pxc0U%gYE7}fRKS!=^^z+60%z( zO`Axfmq#whP2)aE252!T#JCbx{3FN$^nU=|kfD~)&Xj5ky!E>Rj4M=K#T@#Cp=}jH1J9&Lzy7Nz&KHJe^Xq?=o0`W{6^Whl`#^%_b%$cFW#Z|8mBg zi_03n06|W6cJ`gg{yBMovlgJOp*OjFP}W55TI37yugdUx=ZaUY$LCJCJnun_$vdMX zM|?0>U%#fra}^P>`ITnw_~b91Ox9n6olWvoiGX=kTsTd4FSwu&aJ&uF1JiKHP4D{F zS#BF1@Nx4Vjxl%^^!qwTa89G^&?`MA6w$uI(Ul`8?xL=qg&@Glidd`zq|7h@)PfL% zXr8XImwcc<*Q!*u%yg?^Nmpk9A;?m#)uBg^Khv{>){Un--jJ1FRvUVTHs7KCX82Jz zQDRh`QlC!Era0Q99h$ZL$@pYY1IR-dO5oRKJwKIf{0Z>aTBA2*q-$pavv@N>Ltuee zv9Ku4ZaGEK(*s4tk#Z_xsPW)r@??+mt;M!sf%og6yEH9|a8?K&>)E4VV6Orx-mo@8 zTc5rxITvF>asI&D{6(3_m;vu~MtTP1KlfYL%738ZC{%5bZ8YJOzQjr+v+ z+eve~C;^~HF;ag^X^y&jX(O`h{l0%}9a=fw&g&$Ry~;GzVAv9y;HT2K-~L04jRluS z$@Ok)P-WAJ1j7Jezg5 z>zSU1hRF>sX_;2v+*axjCVLk`|!K5J=bE-Q69`5)!hC@CxXdMUhTz!y0$< z89}1fG|l4CZ7|WBODQ5&cK5h5&3CGt{$8182Y~}9f)=r}Y_j)Lp!zo@z? z2I(IJHQzmKkRdo!{CT%&QK4-AM^>vR<)<}l7}LQ|o7HSpWcZUI>n?Fo863{=T1@Ou zql|NMPI<3G9tKIjwIBt{&lE?c8 z07+7F)~X}6O8${9*6B_*W_D6E#6@(Nz!&_=E-<$ z^u}mN@o)dCJwQzOhK8-9j_ev-(KD>IeLa2a(CPu7SrC>Bl`=Ej) z#YGnyNLKsShzd$O4qh8&^kZAC)R(W>YOqW(U3g(yGI>EX@7ueOs8!rUt;f2MWED8m z5(oT!n?&rAEb$z8TZJy;W@n|j`?r2?KX?o=%<`I}$Fp>r>O*mTOsrOV%dn;xI<14O z-RQ$z&a-`Ep>`VzeKHR&&>rMVIGSo`$r{!Ooa{w56vO(sp{sr<7rfRk0>Fe_Y9kq1 zdpt5-*I)T)X?n@m#OUY;eLWO0ozk#PpsPmhE{yvg_< zwx2tK24q?FEr13ZFc#-{UiRliKcab78H_O z&i9Lb=`~jJ$)PE2p#9doHI8n)f_l*0t{X z&JbCzGZTuOL}dRcf<1^&Y`@B`V2O8q=?}fEr_ko0yQ1Zd%{T*7ri)*p^NMlCZ~wy1 z{r9kXr${R6t{SWjF6;(J)0@^!ZNGalE z4RyJ$^vp=&Oj>VtW&`xB6k^|>i8ZXIL~|{|Nyp?y#NdY_y-W?OBNr=kZ)bUwz32Vi z>MSe!oatCtfEf5~pCP>W3gIh-W{$5&Y=n|~ocgCe0_@-lHbUB023|C;IBZeC(v>{RYoCZRLXR;Y}A4N(Iuv46E+8#H}w6r%enN`{h@NV26@ou!J?z>zY8!}B> z^M*KU53jnG`vep?w7wUQ!fe&D?OIzVjJ?l;a#SO*e`1NKzk{^2ADmfWo`oU`x&5WU znkZWtGh@7#9d<4mvh2#|AwJn!PCb7Aff7xPXC?ew$|{BH$l=z>h9$msrmjKYtg9eb>C9{+ub2{e8$orx!d5 z5Pd@II^poP+p;3lY1zx#%Mu}HHBrFsiL&b0ID)QRMiyRs+7Ia^MHAV=qHyISY~il$)q)&6h#NEVtem+OpsAv3cLcH zv(6OdsMUcB;bvPc#rj?LOGy!frusY?@wAfe>CxNynSLsRghQ%cG3jVV?I}=^&8S9D z(cWW#uoM)&hD;J_C0%?|YtUb-MF^9Wh_xY8q5*BW#$j?Z5%bj*7YoeCKC6Vk_sYf3 zRXlqalah;ZAsV;}sd*pnC%Oyy3N7)W1*FG%u06AZ<^ER;v)&K>V?aE5<1h7Q|{RFMf|lnf+0CDV8tU z=}w`77o7?orI24e@a@+cOlIe%?VHKwpG4mkQ)qduM0A^dF%Fxc932`l!ctTE1ds~1 z@Y)nA;l{>&^#agltJh*}VN@K??0(6$IsI;wffIeb7qvnD9+sf4i}I4Hc_Unj&!n9G z!-g_dp`bcEIZWU$Vm1mg*h@u&h(@8q7VkHtzie3(so~b^qT!5(PRaX*5!xA2cveS7 zmIM9qRsWpN`&}P=^FEn?$4z#Y$3DE5qZCK67W2)O5}YNK&cPtSS_nLfvg|rlHWJBFy|BVVid6|h65;-2%bNcIt%J!pfgt;DXTgz2 zghtmeEaoiuHk9uiZ@r^Me2AwK-2rb=XO}%3hGk3 zYn7mFIfAl3m;{EDWke_DW{V4AfjC3ctWmWSTl7{QxA4<`@Hps}wd!tF5yF8GqQwG3 zvXgyW{UF=wxZ$!P#j(!lzVhs>CzqRL@>_M5{4YTB>i`cxOo+80$+ru3+9!Z{F+Ys} z)f|8xVcm_1Faim)#T~4Z+UlCc*av;m;84YSKvJPJw=CmQm@@F&3iAHLshwIT(m@O> z3GIvhomOBh9cCxCwFSo)OG+C#hW-6?Hessoy?P0G#agr8mZJ{!?~gNYY~pN>R;#^Y zBMD^LzYO`Bb_?!=$7d&ck5oBwv74@q ze4^p9qy6ZqfY&4x^c^khXJN9yAJA+TZu$%CjV#o%J0XP2#J)l3g%zh}IoF-PF=_9c zi9VGV+t+`F5ga7;e@zTW;i?KL(H+BY{fO2kzYTKCe|04ejk$`nz)lS^o`fRc0)q@Y zaR}H{{0zy33y}zZK#Ra>hmZ%9bgsOIZhy6i9ssY^)JVdPpa84g%HtI3%-1R6iz$kW zfUIh;Q2~k|#PqeNe8p<+53Nk;JFD!Mb&sJ@DePzFgBdDR@;Bs37igIPA&U4>C!+Y6 zgh@NBxc*g!iya?b^!EZrmn?B0f9pItw#{KU+g=NSkFq`r=^yxq+bWCMYP#5;^w>n8 zTYTf#`fk~)UO=apeED!{0}AcV|2lR`@>={%15Zh1`l`9R%wfj*C*dda6OD&3%x=#g z1`ZMEqRDU|Ct9~&S%Lu_zbRyPFkJmlbIX#MWpsSXtrI1lR!cu0X$m7A0+Pif7hdP& z3&h{4&^S$qYNndVA|{H0F2GYheJJm-S*0I^6z03P&3u~t750rat}`$L}umUGc6&qb$o9ZH+G zGTeF&Aw8oM$(OI;!K+uTB*E(H=$$}0!k5;^RqFeT?-+jviTrsWLNN2wXg$Ouu*PQ- z0mlVX0WnP$Z@2~7Fd!Pdpy$`@?yJhxnO6&Fns=M%(P1irHJXkEp{@P=o~0mnVn z?bidT1~`vCtS(jr{;iMXFikv5fpya%Yx44_qH1%j;2I|aA2uNz^kp)C%`24mfi4*0 zX#3GEekJrvcKIdmrQ|q49AC&@M`y=KcCqM2bW7tK+mFjcprgGX3|9qBO3tbVCXAgT zI%U7N?m#i8AZ#A$w3<-Xa3jssjb1cB>t*?(Bf+ zqFDC{l9gd7M;bLV)o!r=n|*{Wuk&_6gme60J@F^?PF|2px>q`fer7_va7Nwze!DR_`D;sgIcDQb^R z$Y!6A)r0sA{$VOH*XT97rP!j3uL#tqClCrDPUvV%3jx(}FsP~X?a0qo<`8oT9+vnkR`s0o3$KmV%;@`rPovtP%?%u!*FX_j)cyg{Yi984 zuLWOX1XWQrekj~3!Nrlub)9Y_E4mOVj0}t1#Cl62CVAWLQSUHRVHChckZn?~$BMlb zOpl0|88AqXiHdt=8S~R5l1tLOvZZ{AqT#(b7Y+Jtr@JIl$o>&gjU>y|Hv_q=MuHEv zli$3&NhVoy*PQq7sRiTw?$IMh9~)u5j!=NqNKSX`~J1YW2 zL?2^+C&su;xocHj`eHv6!UL4j9fgYD?6xypf5*?sk_R4-q%C>>v{~e{TByea0a4k| z-HC#MY9K5doAt@ejFN_?_k@?48jj!f(CN1*Q@u`T*NO=agL383ICWPeY8l`tVMdF* z&B;?eaRtbZXx;QNoKNldBUj|NMQK z6?0vEFIyKvGSzB-7Wn4P&A}GiSUG{hV{#pw+}-K*usi85Mi%GB?t$^+!$X0n5q&&# z$B#67VTZaZ;b-_Is++5wA}61|&-Vs-a)r+#c&qX{)%Yr5`z70L|j*K>lQZbaR27DdI?@M+@8E=c_vmiwyLkd+`kq!jVgwkDQH ziUBJdPN7mJyz4;R9ggNb2*kwBU~;x@NDCQMRsc*sK7Xa}!7k#^SX(r2Y(DZJ*PC1^C0i!{G0rp zo}O&dXLpx{Xm7)~u~i-^#ukp18GDngZC=@87lz7#gT`4{X%H0Qu%BkZm&dO z#JvMP-y;m$Ap~WIG{|uak-~AGKRYhKF%}v1j8ITe=m(l-!}+3zD^k02$<&#$YX(@1 z#o9f&@FRa*rb~>r!k>zeEfh=-+7Zq++7y%V`h`+fEFJl0Rtto;(W0_Ly_o+#q-M-e z(yI|gy#Fo|c!V#9jo6ESj(KDB5s5v&?N+c}vsls8=?O)v&InzsMLE!jCzfOV(&Vk} z*^>h;&G&CQ`o1u@*${VXPQ)PQ_q;>Knv#l8e=;KesN%9V!5j?IN{9FE$w$yGDZ|Et zQ~vvwLSkiFoKwYv|DKLKrzE78sIa5GCYcZ~FuQ^^FftacpEdzf${?#5#l->AK#F~5 zMX{DO{NZHS2&c7?=mhgUf;7Fjj3JZ~XeAs)EDBLnLo3CL-kO6C@xv`vULn*Oe?LN6 zB5DSw&pTQ)cU;X-kivx#iikfYW>#WkM@Dy_HyYk;fB{${FA}JQ_`K=OcUQLT>zTic|AvRdVH$%* z*JB5l0&1LD?&0T?D$ZX`p3&=PN!^|4<6$1Tp7>L1_pp|#?$;FxUYZU1z@-a6oNbRt zxVty3I|Avb;}a7Zr+}nVJi^As4FX6Ih;njrt^x9ejsAlUnv3W8wSfsx8I=hW?YM{O zlHE0h5~xoRf;<0j=0nq2U!3n}!}{fz9Qx;t|LLNogDg}_xYFvaOS<79GYDEJM#ZN zs0J|0JO%*;YzqL9heo3l-7_h@J08Uz6kuK)Z^X;5)y~^=jzAtA6A}{oo^=r*Yfwuj z{_Oy%4-fsZNjJal&u6j-CSPu;vHj#huXL2wu7A>3t9LYT{}k*by5`CFlKfiu z?SG3IO(KfqJuu9C`K%~_oZk>2b7V~$Ib{dApjQ?GzbY9 zna%sw37AQsLrFETpnzxePO!JD>)m&3#SzDw(@$QHH`}LUuebc*N!tR@1w#RzkAjo% zr0=VXi=HG|t&F5w2}|o-+=j~x1u>Q7?=#oLLAij0+`7B#$4;Hn?e+VyU;p{;-Sw7V zDAB>w6=UBNX>-KL@SM;^cLv)7=3aWx+yC1-*z_qlhdk`-|EaOWcR82~vTc2srYrpx z@tPm+n|NegGe)&H*q0(lM-{w)-jk;rE`|z#V&8##gAM@3 zHB+)Yi-GWDUKr?t*KdGE@rQb3lf^g73Bj&!wxac_Y%{)HWiE96`-e^9%~9*qL-{>}m>84M%eVC$ zhwI-%*VNP~6shzL48+sag@>e?_NMST(*tB}KuUhF{d!M-{J+U2z5|5R$+plFAtEB; zH9$b*U*2;2G4uNstFBlSV>S=HDQ#7iP0tdOai#0P(4Q6uTGMEk-~Q2hk9hDz8NG@l zs*nSEpi0y4dBX!dbx<#go#J$_W=5}b-nRAN%9pf}qVNh3Eo4B1LQ-D7_fMtqWUa1hQ;S$4V&zfvCgj-9j)rSrpmBj)dEBJ3J;K;cmioTGKN4Y?uywoU|V` zQVsD$)~oNO3-7#u5ZSp7tM-~jFIv>r-3>KTPim!tKo4L25YXbx?8=)LZS`8meZyy< z-hcw&;j{J0+@qGdb+6KtXyh}UoVqo2bq^Az6#-_)V8C{~`3wj=@dyGxz~D9pqKK!@ zw7R)!FDnfgEBq~>$T0BnX~+(Eyl>C#fAJpy{IN+i{0oxrn-$Tc+dZWo(of%!ybBMl zNg^Rj3vj-0+rKG~b?rzToeb5A&qJE#!N>_n6I#3Lth`dx%qy!z%z7%tW5LrC8N%Iu zdwvi-D}>w~FQh`DLG+p5iL_d;P2qla;I=x6LDMp@!i|Au$ueXZz)_}N9>W&gA4P8AG_aUjTY~8M zXa{#Ak*!s;_ofB02OEW}Wrz^a z)d(g-E(DdB+W;UNJY{@QXJXbphdeKP-y{3drIpv~+D_ss)pgN12|NoFu;0mo+RQod z7=@yVZrqAmyfL}7gMK!&BP7AkzsVMIg6%yhpXbo+KGJUu)SB-d^%Oms_k1hwjH+(5 z1v9VgGgVXXIu*15Z%M0PsDh8E2mf%WRAyIo;0W^+c;wf)iXVp&ENlHpcBi-G37J|R;`|i2toafmWvi?)+s{r=;1W++w$0p#H0FONgSq45v}+8(8floqW3=LV0MSw zoe^do%N6S+e7te;DWi-42PoW_`J%CjdWfNqdHy>Ts)7XN&?)e0GroClrf;LNa zizNqJ?4&N&TsA3P{0;!1@Kpx?=!dDS_t!${{=eAlUX&U_FO}Q{HPGR681ot#i764VXTXli)EH zc9T1r>(;MNP<}@uF-oi=B6v%uuLxhJb~4OXkrVR-s=nBT7rtEJk8wXsj5-P?Mx0FV z{9cAzPI`sA?{N<~BvlFWZaKugFiifD+g9WKoA%(=08Wc1z`>ykxa6nnbCZ<>;j?e*vl+^VXRDncO&`W28 z#OWuIPnDYn-0nNvFMIL@sO&1~OFEm)6o+1AuJ@KgK8H7wOU;9wd@or3`p)3qGR*AQ zn>MXlD(|;-jsp%-Yhpk?*k4$=yfr#v$v@S}FNHT5Qd6*-T)6v4 z5;k?-1CH`e@U!2uxs&0Kn9}O}YF>W7o+e`o>xxi!HFZXh%#~BSbSb{Gao>5fGF0J# zHuoX@`$e6TBIA&5`TO`F6vQ8i@i)&O7d!{FpZ8=*d^jh4n>Nx2_2etX_Kxxe@8E&7hXZIdy(Yak zxh32TgNVHZSRW2}+kvMP;vXpDn%mneB_=6p2oT<$@qt0k#jwpy)5jNkqsX4| zfxmkY_!hHu`aeMowCb17UhQc|iiyn={{Mf$Q$bxF$jcB2`J5G=fS4O#aBp;4S~!qs zrt-NcJ-emn&m5Rf1nZnZiD3f^%sW+md-I!`9~Mk zaP(hqBvAgy7NUZMA!DE;?xX)6{ovZ-;7kkESAl_sj_Kc9rIh6HvTZY(mjX#&e<3J} z6vo#oEhH@M`Xxd`JV1~HUM--BrM~j}VS%jR=x$$`SaCq|x_6C0>+$(L;{xQ{NK^7t z`np#}vkEUf()eB|UVNKH^*ch@5S;>n^S_aro1@9RBn5+y5sw0K}>^V@5`q z)sGBNFZp~9!`~kL1fG!T;hHd=tpollSp)(l_gytC4aq@N z6xri~IZz-3bZnIgI+!VxQD8qA6PTCBDH9uSr?mpP`m&c{Sa>`n}~J<)JBaL>{5lv=l}SLU|w_)uDkzv=AuP=;ay;Mp#SivkIA4|D8xCrLMkrd#Wzx3`+ac{Fn|k&u@rYilf51*M=UofB&B-Dd zwwB!c>zdMnpQDuQNwBp@NkKc0)>hYoWW%x(0SuGFxwTSlE_`J9y`30J4xeJT1uFz- zJg0M2+A~wEXJ*E`!9j+~@VT)c$gWC6)P9NwImn6@fnF@2X$U}&)M1;J0SGdEr|83GNa zFdUw7+C!$M3AtfDaS4iSJelEJfNb_L6UqB14e4jo1kbwwayWg(P(}A~0ae6PUK|S6 zpUMpc$7hxqi*VLEnvrvL08Abtxewn~$4Stqcz$M(CZC~Z-`lcy-F!5PM-%&y>b~GU zgOj^6fHa?g^mE*G`mu|Z*nh1FHhe0rU}PR`59({(NcB)TjiA+);G_pER)n(Ux6Qls zCd_)`{n9@xkp=0Sn53H`-W4VPGR{jC8zPgg)HcKrVCD{m>D%{m+9JSFv{Ss#Gd8(5 zj=Bwmuug+vy1RgUZ{++i|KHHAsYIi^1?%(AxrN0C-(@|eH(r;2y#L6qr1J(cSg1Rv zMkq6b_QiC=1D}aR8eat!!Rz*w=u0KMQ*6rdoQX+cm?RWzgR3gkuBO~ruOjh=L<3ZN zbMi{T@y_h3cXn0ybV-WUmfQv%22t7+SH3?$D`ti#dXXgTNohS9F(uM=wAhjG!ar96 zz^qVoH@8Lc<%Eo)=bbBAW@k6hj4Y`DBTEBiK0(Z%@?%c%dl-Op6$czYEF>Yd-K34( zkn@4KVP0G$s@UcYbR+4+fj`{lEF6IMG`HAk6o%OgdzH%&A_`Oo2C_sLGQJ5fJJx1> zP?J;NkZ$G2o4H|Aa2{#VK_b3jre0@dX!RgxJ;&Eq$Et{?CsxV=j3E5x$FmJJpNcP*v+&9 zfVg~KOs3c_HSr+}dGMd_u`K!IZ5)nb^<7H%ux$`1n3H_;Dc_-zPEN5;Z3)H-J-gi6 zNmQUnE7kVkf4R#O1QY2Vu=vm@o&HI67n8!{K@S@2UL;z;@Dd@HL$;PBZn`s6pVolPnnoE_MgDST1Uo3T}WG;$N; z$vk}B$%%eyeOcW^Qh5VHlTYYW(S6ZL>*v4%pLA|Q4k;wA5q1NLf3ZH_7c5-_LiPE1 zM-|L7`$is5uaGV4wht~d3leWMRMB<%JdYa&RpbpyV@&Z1P6Ah?VCu{8yC8h~-gK-; zcZ$s9l%N#{NUED#f^7w-S19mwZFQ8y70lIZE)@n0UMkkwu(1ve4rj2KKUE>XBHepr z!CFQVpUmtU3Wof%1L#1;tIV2E8>mTm0g+Pc7cuY?MlijzTD~%(L~nmcE3}6#=c-`N zOobv6Rep#kKQ2I5$te0>k_f4m@#A#ao(!FxE!quJVUW=~%K$k$@7-I^X`C+=uJL%Z z)+)<&eH_+fdyi_Q)pql;=0Kq71%Zo;%d@lhg+Y8Qc&t1|2x(3W&*(n+_WRO@6TOTAK6{@uDzz+o)B4y%45sA4lrG^$3w`_jpz!(DCw-M zrs4kxvA)r+S12(VHq;vOA@Mt5fU!`0CY%wom?+j}YH4x<>{???raeLCu~<+sz`YJc zm;UiceX7y&p%ZIWh=>W0X-kb<+wn*#7kpySFo+7f=QsxQHKSSh3wsdX{y0d-Up0&2n>a4ks079||FyKd-@k zoDN)Eptn?g*|keKXr@jtxfFeLUPZNg)08A4+7ytpXy)Ompq5M2bTGd&IRe9Ne-}JCB+(x{*>KDIl z*-ZWjedd_J{27e|+c%_$&RYnJd_9-cD8y0?6|n@NZRiIaBD`p25EBls92SDk6x0Z* zhbkmr0A{=$YgDNtM&|LV9>lRc2sbfe!j4}K%QiA!6j`V>zbgDd>wBiN+iMW1zA8^u zC23rzze@2rnZmjbv_TrN$#=Zm$`WSAn2kD@my8Obz0x2(h}_o?@LS;GGEoOrj%8Ts zZeAMwgUo`;?q3>;mM=;jxB?~Ft*Q00Xn@qX0i=PpH`%~)7o*_7eT9GUZGgeTlSy>u+s zUpyG+#_jByY;WSV8ZOlUGzgXrotSr#5EmCWtoTEa;kw?21pppc%BPA%@CU<@ewtRZ zXldofU%E{JQ6Y&Rh0>YM{meP}d@e3CIXDC%tLDWfxQEG+Ruu`?Js{rsTD3vI)#ra! zJ*T%fr4Q_QNZ5K9B=A&%wROK_>oyA9L4(#K-%~iwXs8GW*f@kh=@j#8m455+W2Zx7AJ&C#fn}c9!6@0Qh}vMparw< zi!)}w=WHcEv9NSrTb)|&&tpE-Bznd2?+DoPCsr970hFkk+DZ^A`VMNZCh_BglQP1j zn2X-Ea*`NPgZ8dh!1v*aE}v~$ElRgEJ`xo;{<172p016Q?8YG;BLGOtbfWbO)dT~_ z;UT^Ez4J{qEbm^p2~d(7O9BP~X$+25Di%%8CpCZZ6e!I@WIS(-V{&`&o6olJc&&V) zmTOZs-Q)f{AeQ$5gXV$yf3(w~TuT()E(?Ff3OK!*U&SBsJKJgwpjW}A#B*3eoRV-T zm=<&-8G&NB+@$F1sqlL}rA^_M;d!a(9`&)y$o-V0Pjb7OZjxCN542_|{`-R90)qc{ z13LqK*!LD|OI1&T3=MOroc41~*SO~NNcTuT_TUxzPP19`R2n-r#y((mN|K5RU^l}- zdcqTOoWBy0jI1)~cJRBMuni3qP&=}hQyLB8k*3E^WE#~Js)0KNjh3mnyxh!MIfns^ zGJD_qIU*!y?l1`=mEl=FrCco*41a;WWqTpoV`Ci%!F`|=u#i~F>~VM|ZANb=IOmoh zvf~Ow@4cKm!{lR@K+=3VALBGG`h3W6Ezmy z`@9+@3NvxYaS&aCS@dR!+f>91&f}(QfOtlTf}8Moa8vGazZ8%iLl?SJ309y^`u7{=}DhCz&X5^?)rNRVm1 z_^dA{sQU-01Uv{f34dInNRwD4g4yj`$d`)yZd!~bWBgLTLYH(6O7u}SkPwPpntSs8 zi}=}#-wx?th^|>dV|g0#Oz7V*%RX#Xo?eI&<+i znX}7)b5ku9Caoe+b*w=gfOS8;re%1@OcO4BKQV@HyKa6}$FT`@>U2%$4Y*1H*@v=%A%o3kx0^c?)AtYCL_k(CCK%d1VLD|02}5Ea2O# z5fBA-q4-m<;N*J+H9 zk96KzIKE}y%$+xWdEloX6DdHjfbwT-I7jqwd~@s7F5nFxMI2LtL7NJnb5N1fL5xe8S(jzH|}ik~EX*LCfl+usly?#6=%=v|n* z$!$Xy*e`!)ir#n9((q{qWTSYv&+6(CPOgf9Mhy3g#a2lizS1egMs`Ue>hr1ivyxEn zM66dZpKqiAb!%Ci>EDl!p&s&ApPXmp_*SE3#WQWx7HSXf#lBGI4e;vst~@VKKQ}Lrmp4c{ zzTx9HZ`J)`QccbE%!~k1kqGM5k^zIxCxRGb1A|~lvR{+g2!P}a{!4wR*^k3{F4`8aY5CH%EdYt9t#nken(1Sm?wJcYqscH zd!{c=*yOy7#L?{-70zXNNl{<2!)+D%S`U2Ir;KRS!H_?HsJWY?b{ND~Tu&HaS`SEc z`$fZzF-d&I8!4s{*(XF%My}!?YhWZMGweV$CSX06IY#;-suRGDtNMRoL|vDd57dOH z)xcJO7-lihvcqdjWB)RzfQ!+W@}!1^37`c5tXZk4HOt6RX_~P_QgKT+na>&=_G7); z&#tBA@}l)2{1HXsvJrZEaL*yw>$tPaT|b`9GBrU@9cN;ivCDX2SUkX8k#wW^WF;nE|pkliSV6^`oU=p=nY=lgVOkkwMt zwuBP|hWtY~#wJ-^*sE_cI66!Tkd7sLJANs;6vAyOPk84cH;oIN+JRZ(Lax=V z{%CF(0H#TDzWE#{qw{j+_01z3t~jLxN5*q@-v9r~AOrZ7!T*i;SzB<@V^y;5)!N}( zo9CfL$MR{6R4iNtWGXZm^g)qAn)vJxw<&S;x=CyAg|6Wwy~FV+N4xV?S?BAC`=d=4 zz9@Yw)i#FPe8X~&(vyR9mkmtf%TRuXDHOA^i1rSadXBd&7^Y$Mn z$D|)Y#wHOz5EYvbbVmPYRQAY4V=%@IcU2)SceDhLb?YsgVvW=7G+s17{bQm|UWKM+ zO5B(XLw;9`?7!nl%JOy8c=hHJ)(pS8)BoVY{lN$4R$N$hDHR3n3t^om#*c{o5aKQM zo0KMS_}L=#n5O9fqtIIJug(1f1DAo)9Y6&^d`48qjX6aWP{OAw_WG22ugdt^!=r#3 zkJnH7v|~2h7cZ+8?T$^-*8^25%nwR@nJU^b6B@2ky1QZN^V10Ua6}-ye%79!l0X=X;OidjEsS*O8@< z+mYM!sYK$>J7`sfN^s9%ofPA9hFGAa!IlcVD-OQ z2IJ4R1N?$b0&hhOST0Yy^;}OP0^m*s5TH>GA`2pnkQ>M#pV9Vt)x>{+&fi=E07Q)b z#SM=jDe&cB_kVlg>XASOO!*7!A$EHU98w5m{!x*;Qo0^zSVO7YP@p6(TXJBUB{@Kh zdHmwi~a9 z^%=I#=D68+>gM(Eyf|<$wOBTk8)t(jJ3QFlDc3Sz2+9|m`}3E14J>NWKS13Q+ikH~ zF5|&P0b<@Z^cPoldWU@l+QWr3|29E#&!GHe^qXh)-G})2crX~;1`O(bE`tCBDFk3P zf`Z3xV_kH*Z+VCFeDjW7}F=z@3HRi8gtq z^_BlWCU&A%M-KZ>wTEQKX?D}u51uz^Q* zH;8PgV2;r4WGmC^-m*^ZdGH)mhC?Ly!}l~828{TRVz`I>jo2rVqu9rIPOYbo-T`6N z;ych9ihM}d)LYLYvH_mVo8BSZ`5+^);tN`ghJdcd%O3TvO8DJs%j*Ju!m>Jg&LIpIYvH zVjP8tU;J;yUB#&e!!fa@lgW(N9vY8xTTKXx+5!d;_--_yJnwJS<47712CAv1IYW3P zJp6>tY!N4$?imwW)q=h+(vkYJXX2oude2e?8cxm59=7eO!@+HiePVq!vEq`yB-rRh zv+nsYLCb!LnUzTWr8WpTGZGR=&zqis-Z^`S7cEV`ff5V5l0>3#5O-hA0h53*BVbw{ zY-MlzJb$&-luJUrd^Tq>chcOL+Wj;j(t-2&G*S%0bybENBYuEcSiHlw!V{E>$!@zs zM7Z5sab>ul$KpF0<4)zAk{t_~IXIq>uwdW{a=|mUa690U^T+{>5RMQCFkr%H>im%1 z$>=P>=sr0^ecDfZ|4f8vyRlZTZPBqg;8a&&9evK+RAtF}4dJ#mBPHtUGvmGIA>B~Q z&ea0{Cw4M#*$?E!!2LabLasE3pE?q{#MX zC+zT5Uf_lDC!ETP+Db9tt4T<8Y)J|9_4UUmje*}^^8SH6daDH~~s#jbNIa#%5`au0FcDug%=OZ+y8xKgF zjZUytJREVc2iV_maP)uYq9J8jtD*XtK0|V`zz*m4;#|13MM#eXrg3Xm-yhY~0&;r? zX1f%T@b(zt{#=ph{>U0IbC0QH5GpDv$mro7m*4eO0>d@Qt;HYtf1G7kn17!+Yi42L zzb`0x=yh}N<3(~!_)vO{v@w*HXks_USq{I5_hOEtg}H^dRM6@@RL+DCF5V1|k59Uv z$hZT33iPLU$Xs{t_~r0mBHUFYw^ybVJ+zjNRS#w@fL$3}cj7pQW&7gWB7vV<_P)qs zi~Fb8zlV=2^S_VRY_$19KICpGww5(~biaUd^hZ#jqk3m*Z8{Yi8V=}M0QQAKW#t0J zQo+q#%?r)B6rody-1wEP?BI)lzR8|l9;*=vJjnA42twixL*X#7ceulYtxa7z#pGI` zPy`O4fL%_D%jWt@Bxu3k8*~66^mObm{KK5K6+fA`{wN*0IMUgA0lpeW(`wcT;t2(g z)_2FnR^fF8XlNRGpPdEgYyP1w zqiL_wEE#H>oZrE_bAYT(1>C9uwjIgFZ4UFMfl&Kc3PpssnW8j zOuP^cf;Q;Q6o6Y=@sRTeF-@^A&msbwm29dke}Z1SQ2@TyvFIm!^7*`uMn8Dn&AA77zD1Sgb6P%Ou&~@5L!+4(&_W` z0U|=vBnsz`4ObM-5!>2G^};mt!tinVvr!~aP`Y~m+yT7>a6H_uZmt2V0?t3%buIoO zcjd@mi*J_W6qo4zAlC=ls&^n0cHTWTQ|Xof9Wn;LnEmB}FdB^aE8k$68GB{@byBMSRP+eYhCJU6K>zOqNO2G#fCil;;L-3;pRnle zcqw~(l7n#Dc+56_dqGpGQ_>k<^uhM*6A?Z>{_3=*IH0M=9`i5PZwpQVgx7CCog&wI zzu)=b@^GPY7C@qn3xYf#y#+kH1t5fkgiaQ{K`@Y*H4j)ojakUM;dNB8~SqiOh;V9)PH9Y6`tg0Nv6&5`2QQt!VzKja!+b z<*Ej4F%^ep5^~YKNXWzE1~L)gMGHq&3c@1cdiy}ZE&;1x^I7a7G1*Rh`W^NhQvrlp4!gT6 z+}KT}PlOMHj}Nm=;C&rPHO>jARfbdN2=v9_x7kY;ns*@mAOkUpw2dfR+Hhp$H&S_|Mis|CdHMcz1V8 zJZ@g|sj{5X(w9?!r#oB>vU%%;uIpLQxy1&nGIjgmo;?OmIkL@P^G%YyCRew4_n&mI z6f_KsaKSDLa8|-0Ac(YjdaUU}{fotQ{zF$_`h0ioK*;Y1*=^m@ZhQBE>+>$|PaLM@ z-xV0;T8)9%J7?hUYNY;cfT@rrC)-^0t6qI{^%sT$x|zWE0tdkW}VyHfb;9LZ(g+67+-DBsoCqknAJ@!5az{W!9RIqRR}wIZ&E5_n`} zWG=UJ!fgWl!?P&~$?Jg7L=dRkdZ@#o9u@@bL)K5j8BTBWv$D{D7prfGyc~fYFKUg@ zo+%7PxB`np9F`&?LYUDLP6P!~pu3^4=z;^a^+tb!hNiLk^^Q#8{2&rF9szh3EbeOH z6}P|fi`eSFixMkQQC9Z*%4Pxy0_JT+3f}%fIc6Z*pE=tBx9XsPz(wCPD+&M!t?nWy z^v7~9wZBl>58rR!sCw$o6=(pfDI>Xth2`l!+nd7azrQ2Oc!5j^2Lf7pgM@`Gy=MN3 ze}aRP|3ypVGV^5r)MK0p5lGuGy^>E(`md)30)vZZInwjL|93H2Gzo)t!{Y>X=iQ2) z)ko^r!T2L*>Zp%80|Z(hObMzm?D^;Vs|gkho~Vmr&C>tUj9?z9f5ffvl=5d9Hu*L> ziRUHRPVkd zX8+!DJ32c%o8{9u%^Wak_qoIkjOcw#*d7&Nz}V@S=gWUy$mqBKx&6OR0Z17f{_(1w z-*kKZ|M)^S)1&kYm@7yIwDO9jmQQ$o^D{Ms01<)0`TuOMf|?p^VDdXKVZ3|s{+!c= z)dA{J&IV{2qk$g!&oSQ_oe10&*wOGgEqBcWToWLwBBiGOmza}pAN?P%-MxbW!dW@9=j9`!C2e~k<9d**gX$2d1JKCid--S z0GonLhEj!9RpX!Zjfv^$5o{(yOFzG|)g83l{Ch~AwrAU_JrBSvcqf@BOox2i>_2kI zalBmlZ5S9B?mWc{eU21cKu!0T!1sJX|4uf=vQvPAz;pkhKt;}MoPT_LeCbga2(UAw z`Ge4Dbh5T%?GH&W?`MF|ZphuVeAb13(hz&U<>S(QN-BuMa$S>tQQi)f#(o z67!-8z>y>(0($<>V2x*$AljJ>FfzN{<6=JOPiGLoKMxNl=Enye0!+xvtSsSwTtkk( z*v#X)9`lCcNqmQqiN~kQD0RnX8t09^vR@3qw&*Hc!q zP5Jm^S-w1R?29k;t=;f)13yLaMY}=?{N0H}-Ac+|b|uNtuyei1X`uD>^`++NhsC{# z>)C*=4cNY<0g%GALtV?rc_W&uSC4{pVDvcGeOW<)?cX)eCLS^nn|LH!1qx*;keaID zb{MaUFb_-KS8!qh?*<3|UTBmPIvS-^;-2g~AC5!jMur!$`BbU6t!)KgA9KSi@C9&E zER9N%hyy&I1(yvX7goiAb7NAAM|K#{ip-yH)UU=pC>WeG@wc~wjGHDz5l}!0>O{>A zm+Y>g!`*AAjmOt-!W(8>!(~_TnS5XbI!Cp#60i7ClN-u2&vFI_f25L2-MoDGB`@e8 zL$Qr5w@U8$HmO8lYXJ4JMMm7@X;`CO|Cq%|+IuSbY+~AX zYnqk|dCiy>$zQXoWS!K3Se<42x@=lkB`dW>S$RL34#VCIs$^^eHE-p^SGU7^q4JaNM zfStFU#FitiFip1IDuz!QyLC~YgXsDZ3(i>?B)VSzf5|Io)4Ln7@)e6?`V zvJtn=tc^atv)C#~PC)?y0@Qk4)89@0=Bci&wtc-xMV0quGD6+AIyMkH(sXdyB&3x?0qc{xIYSHH=nA^diAxcVzb7t=P6!mc>Mh++|h zfd5W`WHR^%odi3FhiCit)NDb=8u6v)UJ>p$?d zf75Iw48R5ji?%PY2iLHBC`1VO)639omm&F@|+aG=&3~p zyB4|a1AXXNjQTO5q3zY#<9odT`|&ctC}t$Vj#EATvcUv6L?|#0X1jeK^e;+f=K9w) z2ry-uWp2s&l~G;ZI<=YF75MNVZ&u8GW0kU;-@4SOgoL}N`!-(Nl`~^N{mrB2fyDjL z=h4lKhKu19`i{-eJ4Aj^)ps*oO%;1pu8G__LX{_k2ufg$o9I;z=}iOtNKR#?l0b4p z1-IRLCZK5nd<_%e*8zXS|7#PsYi7pSA*h5O4~UTJ*`;7qtqVj6=oR(-&m`7gl*k7u zaUFV7}Vo#wjD)K6*V%W>JN$p%jrIH55NaVXp(7kVz*)b(yza6%2K z$#cs*h@i>d@?zlersON0H8|)@?%OuAb)~P{3Q&f*O=_G7=pszfN>{l}GmIScNqkmG z`dE(%hY%_T^nM#@eA^a0wqZG-Pr!<>=d|&jRFidK$|(M`y5w^+$=Ang148#?2iAvC zWumh0Xe)p1p44FH?Z3D1gW-wXp&(JMK4x|{e*KukapwhU z4IZX6f62D%pE)llBv(VkR^@L9kPgEr`V&z=p zbaC0Me3?hUO4zznx*vSb)OgF;{8`!fG+{mHIQL3HfHie{vc_X&4I%07Hoe|4Ui(gg z$!XknuXEsBfbNt=jZ)U`gHuceA)}+Fpv9oAk)>>3+gnRq-`yRtETLdWDr~o}5l2LB zH?pt@nhmsN!a*W#cW$a=_Qc<|BFweNAn)X^ZeaoXfBjjHhzX&W()}mH&C?nZJf{s| z-R+v=vx8j2VdgPIF;7q1UBeQK?;WFbYN8Sq!Kn=LrybgE;)|$@=lYpMvt{+j!@pXX z*2btd7)#p23K@&gNQ@TW>zDi{v7B*c`bR8H0n zVLAnb+V8^%xs@LOG+nKy0HTgzM@o1QRQSOQ3GU+6- zE9Ft9#b}gK`FO9>rGyz%E)gI0_<5s@|y>_gKvtN4D4Apxqe}y{12Iimjh0eeGyQc zJp%=h(V32S$Q#0p%N*}Rd8R+4eHFX9PKe~4D1MhcGwZ*NoUPX~v*vbuB~A0Dw{=U8 zP8JJ4@qi0uTbzxu_nfP9ayOqW$@LaOMTg;!bf#m(=* zg^eGj+B*xjI`Zg@#KM&hTW>!P%}pHhxd=qgjuVKDl7|mmtoj*?hxDwBsaLCESlvaG z?Zj_Nyw}m$2OHj=<_pFH2|;ya4lpZ{)7gRa*ZXe@U&il_#mw($cZjE0eSc-jpu*&@ z>c)NY`r43pomhng1kQmS&{>Wrje~v?xd~ri?F_%WdZ(dNM1v+xw_#Q{N#s%FN5Q8Z zmm2FaF=URXI8^_0ldt4X2eEnPnVGGi6 zLu}JR+^-H#G+dzXP?Hq|$+jFS-1wJMCC*<3iB+B87_pEPhW8HHAETQ~$V4W;jj-l7 z~{A z&i&#+)h94Ha}s)&n)w!M?f4DK_DhrMx;qs+ME`bWq6Tfini)GCbe-1rnq~{nd8}`8 z!VAb{yZR#}6NRzpIf%~fZ3ZxFJ!hk=OSK!RsNN=#N<n zx}3VG6W`gyM}1a0^a?Q?sQkD*Go?NbS;XBkw;h>fnBww3*z@K4&?okXq{l?)Nyn9ci7x=}YctgF z5-I2+eYL= zw#~%OfIF!!^%b_yxmjcO+5#KK#Z@^wl9GQSBJp!|kUSRiEt%WBceO@`vD-C5tPa*} zl_%t!mJvyOo9!z3Wn_kcb3Pu!@>cQNxz+<~$T4+F{=t@naO`P!n^1|AhAw#_^7-d) z)e)%qfgtj(QyDUvs*maRLb-_&>|YCns^mGg-aWIa zmYSiFy%BPRD#&+@%|C;6M#+}mk&E$|Y0xSB(egn_%)gm4;x7|8}bRUFQnN?w1w$I&;JF$*nv~q{)+@LjW}eKdx@%{rk0TQ7 z5lLI(GN&DNK8p~}h}o5l$X|N0gc&UAueP#7gl$!ApmDZFKB41%tWb{DaV4_659!30 zUoW&_Nz{8l^O=*;8b^}53<9l{Aw_s~u>2b>$t<<(_h`%ot=7e2Zs*B+#QYQOumz?$ zs)}LTpnN63!sl^vh508$F0dSm)*b$waqhg!?p2hsuPx&xVO#K2*66dn@Q+#fefGXC z5nCf(x-_8nuAru0qU!hRAEwRq4*eLK=s|P0VG^ASeX}13sA%%8bt`iCDkO=tT9HD1 zu{nim(Hmy7efU;-}xLF-K_Yc5uU|if)}3b{~cO@rvHyxUHVP9)+(n(nqECAV)$GS&^B6|Ze! zo2?>>$4P&i*QnlSpb>-0Bc>}Gy-$njj-bRqW2N zQXFiz$twI*QPW%Vp{a2?U{aqW^x6IWMe9K9UEzSA>m%0K)f-JAuA&kLE-VDV!TPD> zjjwX@lk3Yh^v)*i|z z(ipffo4}&_Jt>b4OdDt?J_&h@rs=x z!jtb$sb_DNZ;)&!Wu_~=!g9NRM^+58#D4BQ#Gj(YbU1i|wNW#&VN+MHn6KUrN9Oa-umQ|?E5w{Z!T{bxJ=N+J&Nqy^8)MypTrT?3N}06BZ zj}^$AqWHdkRicx(SfJKyA(omvnSP&&3DKL z7WXs=DozCE?7G=rmHFA%#&iYlQXxH9QnddY#mq?&8LmoJbGtK-u!iV zwCGE2%Pu?I1Y~{<7V{p~dtghnITG8{A~!By+Eu+4>cXlie<2e=-~!6kth%eJwc0tW z+YCODMchLandyGCy&_-N9`RAb3K1eWw2Qz*WU%In5z({#eV(^ZoHV!z&3&gAySVR{!UrlviC_{Fd%g6I-h$JZ{O z%@rBY4JQ zD4~#u$CN^zk zkH*78E~Zi98lDB!4|3Ni_m6Dz`vyA#MRJl7p{;m6aYmCK^ObqH=O0p`hI-!4Ar_&b z(Y&+Ax-sP$_n|Xo_ZGg^*-AFR1j-SNN+f438HNgk=o=ajjPuItsn}SEJ2SLh$@%`QMn}|%UNO5(Y4@JO0ceRz#ez-Sdj5uy zmeC-mDNa3apoNZT20KBUT@XteRr4J4a}d-!yi9Cb(mIk<0H1xT{+i)(=EyLxT{%oWJMJ}z#2YRW&iU-U{MhZ9J)TxACeez$ zTl8AG3AYXQXn?|h`2j@F*{g@0FGxymNxp!*3nRaFv zrUE!6?c21KV%)PeN&&U@(fJV^K#_*;q+iv!;0ehUahBDy>_uiTj$2KeA+N!Eo}VYFbg0-HH2PYn*x=rEQ#V&J*~Lkl~c zuzqx~ZUcTjudJd&$F4x|FZK0qat(nYlc-Y`ZnyHM0cPFrWe?6S{Ze`lz#&yqX3O)RK!e!2v(jODc>@lnxr<3wZEm+ zzWluO=HTrCAiMH8X5h}5+Q#B^XdB znyMQ@blSRxr*_jDC>Xi$A#}jXW%qRbaDjM{7&`Ndc=|pU$KYWc9ter$H^L-<^_Wk$ z!k~@Tq#)1cR1Xm2hWy5x^ctX}TPyIKDm~8qIBk&cLN_lfPC8a&Q8L+INl(>9I*AQO zFGyC5*HC&WlrVfr#ZdtnzeGV0uMbb$6mR@1!Yg~Q0J*F=qpp{7 zNyYq?5d_~GgG&>^k({4KZVfMg1o2su>{-+4)5uBgnu3sxHw75P&ig;U>Xs9eDu?_6 z=r}6!`tRl)J-NNAUO|)H(h?= z3-_@hib#_#pp=geiWCV|qzY0(?@BKL1VXPWD!oIbgx-4%9aL002t-;a(hLv*0RvKm zJMlZ`+;#ti>sq>ulDw1moteF7WXMar=8xDg8~$bzH$v*%BY% zyXRjNPkENffGVNv$b+PKdEHs(*QpaDTPL&1)i(|4^C+QYbYIQ|ZWCKM(+ zzo9m_V6qWH1r{}ZL(=}NA||bK1xXBAegd(Qzip@WMpfrbB3hv|v1~jK-X9@2hrWDh z4FF<5!3#T0PBp$w#~t~{+U%T)vQ;ld5wHhWMpb?4S!AwDx|1epoe%YQrQ1hQ1N=rz zkd*jsPqmxu%GfgVVgO%p;8ZB`YaM9qz{N3}f=3q@&B}*Y#PI)^?_gGmGhwrD0XyVV zl_A14Hht7RXTVu<8#Na0AI%$~TGx1hG`R1xQ;emIdW++KaxNz;{Y6EkYk#GbxMb%7 z?`I_rlS>eNBNkNn2l4%%qb!G9q_(2Xn-)8tpYDwN|FB!#ead&Sucz^~7XD-O2g0XJna_vg=HofTIhC}DjZ&0bWB=JXq`!x52MZbP67GtJBst zAb*IGM^#-c)rGtZKY3%AUvZDj9y%G^G&eTg7VuSp!%~**RS7)z*SM^Ko!9=BnN3gT z^4rme+XG=jhPRH_%_ge^SdPsp8^+C=@_U}9POKI|qKql>D>aI*eP#C!=9_>EJy_*U zY7F>j2;YADoAUy1b?Y!9V}uR$v37Gm72EpA@%`d3p0&9HKW~_-yXglTQ;7{4BYi1c z@83XKE^#C82bpKFJ|e=ud_?YScIS*nOL{R`S!R4Bc>msP;NB1<6sY>Kqm6tzBY6s{ zB?P&sX^eDh?hR)H6Ls5kZvLl#%~!xf-&>}1Jnkd|8|Q^ZmCA<+>;)y2b4V^{tN1^! ziU*&Sd9Lr9UPu-k4O-N7#I#KaNg+T4GbkruzNS%V;&lYsaBi`-o|{ZxWMqEGFrZDG z2dc=SdRWa*R5UZ4tWs#Rs+YsXS&qMAgU&A(RNr-&FD4WR8uNw@&rjTt9bJ~{M=)C@ zv@=5*j68FwodK1Ak#2;b`wT~haw9b5Lsf#b@3qDV!h)qwO|YMH7CM=xvHdyaDO(Tb ziZ_evH_$HsNOmQ&{9NV1bxhz=%bJmh;E3iH z%7`FZQl_H!PFliOSqqeAKcBC-av4I_fBn%1o(%@YxcXS(8U0b|`3rm8pHK%SK2ezP zG$;HmcY7*6lh&Lxe(fJsWbga#qUq1$wO0nBdgKI@o(E=z{Vunp-7cA_Y_MQkef-Xe$43=G<%C~$Wqo&RhIJSt z4;liIDXwmJ%bZrN%WM3j&p)`moX|er-C3^3u~f^xB3u((asQSdg*@1}Kymt~5{9na z`ObdE;a8T)_{tQHt$Nt#Id?%m=g$_51z`~x87vOba^4o5!H8n2 z*P3FU0H@U-=knRb6Sv!b8m5^DiJtq{sr-xf^Jpx$)#010&K%_*aBN$pH!eS?5UTKy z_Nw@CE>}a!K&xT1VS5ADWi-Iqvlx7eW(&f(*M|Z@0gCQoN{nvdz9!MHc1xf@M}_X-*Hvo zV4F)~TT?k&Fr2NnlQd12J^oNLtC4*535nIoScdw!M?uYgnC9Z%9oA2DmP6ko{!K#G z;=7y#MOf1!dT|An_vUgpdnmlH!#S}^vz+*@!fN`4Kv^k=1#gyt9ZF^2tBJ+Ex*5jT zll`t)G`Ss5-!nQ}GilXbiekTkZr+_KPr>C4eCmB<8nx=4VANj!$Nt8~X{(F&_J>zw zC1tw^25KdarwNs&ZH7o|7czRry)6WgxgLf58neN*73+A^1|%7*-s~KDR$0&P|8bkKo)T@L87NsgZi-2X*x%~H>sCDbMWv@9x6b2 z&h?>@8ivwYF9MP8A{1XRF01VXQM=1C*z1I!`~9kO1J3XTpB^n+Cm+30BVC=CiU5dw z+^i8fbyJ($dyIf;)7-b|Fw_}8u5xo`-6aMvU z&4_|o4t1Z4JfSaKEc*Avrd81?b5MheiO4A?4^tEIw>s@27X%kfe!S1QSRl}VG&e2j z$xu(I8$?qKsXfRGWb?R4+SX~dHQ>*0hMq;wQ^(iI8<+-hew`qRkNQ;JF890)8xO}8 zi>Zcud>qmF4|6RA-G^)PjWri-yJ}IFm5Xy63_-=jAa;qW?fo8fFXmE9oL$Zb>|i=s z!fvyR+s>-=w}i7;xz!WBf*CABdzKtzZ$J9GR|m$=+$RVd$F_k+DZE_iskDa&HZ!=- z?@M_yrj9hZw8h$m*w0?Ma4l=X9FW3FzY&lghREJ}68mQ+ zG3q1Ti!*)U3Up&!Yu0#)wWyfb)A@EkqR~8NLK?2S3|DF3 z<2sQT5o4>M!rq(q$1z}^f7;!w*Ip@;pQ@DR$6f;GBaPi_T#yio3c>XE9l64#QSjG7`cZjGOy?XFf7uj@EffeW+C2(35>MiJYrQbSu2__@N=+cq zxnpQMl&?X1Jo`gVfm8=KHL|3bmC@Ir+^2ASYG;ltGd9jU$&@xk-S6a3a=3~8G#AYM zafe`1jn{tUU(x($=m@IwNBM;|HpKH$YKeD~EI4PKxN+>S9~CB1ri7ASXz@t!)7ont zfwHU9*X@NuhyMio_$GxnZfk9Q$H^C2vy^`S-m=A^K&q=$WPKJp@9<318F$!?Kaxx2 zY6yiiY#|pS4wgHsL<hC;9E;DuO3<97vxRaKPFNS@ zuG?xP!x8YD08FkJhfo#4oy{eTnR7?X7U=n+Wo)j3~bs|Yoz4^Y+Lz77$3c+*__G5_dv z&Kty$H+;&tcM{avoHSz;<6;I0`z;R&JY=$!Fl4WsPwWKRb*1>jKRTH;{|O;I-& zyJu>@iA4sp%RmOFP1i(gU3J6t>oHiUFY0Nw&Gg(?LdCTVYnDB>ofTQ*HU-q3WZMWM z+OUl*2bJlsje~1FyDNp%30A^d{zl^NRc1CrFv-b?RqP1;*imw^f4e5kTPdt}tk2Wv zu-Ht<9h@C=>qPy!>X#R7y`U2r-Zz0hzl|S4cX-ZLgcwV`uuI7B4uig&I!F$(e61}g zKqcg?*&65X5LIU3Cg&~6z85OpXdBzgnXJG_`uqxS-dcE|-K#sBO3mZ{&X zJdWafz^T!=>auxgYnVs~*qV`Cxh_#H)#Sogw@jxUnG8F;>WbT^Q3%)dW1l!>)-^l$ z1nri^2bSb1H3Xgc)LTef=+6C|VO>GQhH8(D(0tuRzXW3onHeRG8qb_+ifO~&ITQe3 zA{~`OQ0FA1we@UHq~u^c`xH|PBW|98&F7oocsatsl&eRU=c`jLYbBkN%JWa+C00sV zZ7-rI6-dEQEpQ!XE}^FKgemqX-bkq9RQnj~niY%vkWQ(P$wzr*Y(cN=mA7)Dsxc*h zLw+GW8^xs(1M>pYv3|!sKIc$aNw>8U*mI>~uA<}XgT@+J3Z9`~IvPImyra^3{ktM* zrw7r)SenW+e|CddLAsh`3T}m5uzmSZ8rTKXzTU=^ogjwU{Vxcydi%z7WmYrFo3PT}*iHo;+riS<4OcJ&mp9oLxy1VftUo?}s2FfBnV9FL!oT}u1>%D~^ zw9+fQ-4|Q9^EBgikX+q@bSSTJo(aw+&BVfI$fS((%56lQbJCv^t}gLQ$^p_sDE&wc zY%R4RPjx#b6(M-+k*Aeao^)CX82`#H3?IhlQX^1Ib%nM$l2oxGjZRM^N>VRoLL_3s zf_ZcU+(Jbof?{7kBOQti5?VFBoyklqLk`MN=9y_sO-W=7SC;F_6@S=Kc*#5^kNqww z#_+IYg~03;$#d6_|DL~klJi495p6Dv?vl+W*~C$CzU-p+apPd2`6u0JTBZb(@2v!u zKwjj+IIP8N3HDs|nT9&F`7jHyFsk-q&UG@wOIz5ZGD8xRp_tGR%RSAVnR=PB%-GL$ zgZCeux-X{zS@VFm_3 zs$*l#$%aFM#q2I>lo;9~8*12Dl)1wnzrhFc+xTXriYOFJeJ@-k%lSD{*I46{8%vi~ zC}=MGI4>~hMZvA7Y_oa}rniJSf#F`neaA&5krG_1U!LZNCa<-@203+3)ff7j4|7a7 zr5m*v+FAI$y}$`eb-oNqdUDd-g5%nfSxav^-t0@l^_f>0ihg7nJ$R9G3T=0^^a3(d z==Sdl<0z`}3(oH?hI^Lh$0a=x6{<}OPp3gwF7upaDGnYxSb7S!Oq!N;dD&BM7#}EA z53DS=(tN<}A-!a<+nHW0#8Na2eWTSWv8o!VYpCeyaV2c7({)N9=d*4UFQG4?-r!YZ zFUJtpX?fjjeJeYz=~@cz+Nt-qY%yKI8W*Kb3YvlONuQog_w(0{M{^1639{Xd8daH@ zoZ{2j=|AnYwS4(6iwg(LFVgXy|FGZi65E%TnD&C_} zqJ&$Ktm_gfVOFDd#M<gKWoLsrB zaV#Mzw_jtuT*vxb@>Xzph5ke6vSzU#uUaGvJPg@i2xO`Vr^WcaI$n_gd2 zt0`FTXEnsoT-q%jm@Sov*d^?BKL6x! z?{=8{LTAtp5j`}8dv+**oZ|xdrM~$&}lg5q*hxs(dPBC{Rcyh0%3@wbpHQL24 zKphgi3YgYuI2{E`OlV*C(#O1$$#_ztn$n>)+O}U6AZqlaN(?(6aND%XTR^wXXz)wO zXlD@hWkU`DC&B1&`P5G8b@V|eCDoj2EUQc;V2@mY05RYj;FNC!I(JW9W|e~RtIBI~ zsxRL2qn~@A$imT%{;X(TRBUdSfgIX}pP(j0kyA`7?OE3ImyZCz%F=c9y z`Q0a;glg2p0qUW$kKN&}ra?Ex5|Qq9qI9gTKGoBr8N< z>Y(tt4$m4TaykZzl-ybO>yZzB*m&_bg&a4rL5v2K-)0DtXyS{8@P(+E5TUx9pYLyR zZj;oMTwID7&N!I20`MvxUfy$%k3Bus09v&xfXc&?5Fp`}O^U>gdcQMUA>wW0C3!sP@Lxa%M zj$0#H;Vn^F5q5D4_%H81Id1de9DnWZH5n7^q&mG6D(das0iAQVa%-+Dkp)s*rvCYX zO!yW6MnLWW0LTe|Vktg*RwHd%Od21zrkUlx!P_(Lw-C5T9=w~B{jEQR|1YNiW3HjD z9C;PO7hhX9weyj^QRlI^h(+T(D+3Chc}}KvQD(Q71B^R)1%>nT!N)FsA_Nb0q|m2U zFFeCvkCu%IjA|f;skgqp^`^7)$~xw7kjK1{i58Nhp|lZ5^2@{;D5+yZEr7EG;Hiw+ zo|8cwyJ-@nbF2HKhY+SLbcp=zh*mY0;RhxjL?z7lPo z4t;qCS%RiJXLmi;LV$!ik3mNcjoy)advPd2BU{qws;7PJ6el7N=eDcoc)^Rn3W;gpV{-s zx7~CFdF1=pogt6TJfsyqf4sH)6{d%Z|E0FAa%5<2hI}9%ZE4~(R1vMDA+hB@ZY8b| zQo}GEr^xQ00YJ>am9`@CakyP>hU*i4!>W$}MFmd2?mU4Ii+lmv%77@eZVeY+t*xoK z6K!e7pEO7FQuR;~6zr$q#6B&#ugbo1#kNVl)fGbFqNB3W5<>n=i12Ma0?U z|9r?2-N^Fg&Nq5nRWDAIpKKU*DOg)`K)%s;{k{Y+YOBUj^CpUobMn5v_t7rc*YD(=ol|Ar5tW84inPyv zjfuIm2dKYlmiSdN&v01`!oVNjA;6lDekbfAZ-ub!*42EPc)}u+;y{lN8JLT!F9(k-aeSW|-qGdr#M`s1>@QJ#&cp?RFi~8#5OIE*t z?T&+=K<2>0EDjG<$c-lo0Cjw<@8&rj|6}9AuWX!hUHM)-IGKDBE4>_}8TT(HRbI>_ zs&|@K)jU1Anb)bNIG|NWOjPt+Z4c{1$I{Kx>yW=7!gm)a?yqvx@e2#9XlO(SiW0SL zUUxxBzlQ`a?}e7*EuLB900KM4A)k5zU*7&#nf>ScVz zV4i?#JM$w}nNn8Tf6X@Y=0~h*pDccO#Um_y8FKOBMIbV~3}}l;d#>}4lTEjfZlGeL zWMqt}G;Jb&?f+tkWLWw3!?!(v-P*kNH7}&1M$}Uwu9SxvR%t&EN5=b-+I4LR)We7wwTQ&x; z;{I~}{-fn~=nyI~G%)ywjp$Hf1-G6@!xU*=2EDN&5NoSs>W513N;%FA*3j z{oaWSiKe#l5Vh_z0Ke=AlUR|yy$WBa;#M5?%!sO#*~(pUTJA*0kTfz zpdcAhCi4BQxu~3+TYeL+#go#d2ZTw>Wl-(I0?BD_zX{&_FgUpLKTbka1Q-yy^f0@% zKPP&keS7yjbaM*}ghJ5Njcm4iwiwB?~^j)KI3h$!$T_ z#>VCwD5H#ZU+#%hAxbEQQTSx!Uny&=GMIXg2>3TU%RK{0;V0k0&;9;d9sG(|G7Slh zkEi^x(8UJk&)tf@HwZI;k_n&#AkQh_s{$+lAP^v^=H=xzYILFn4mZMQkD4%`01EO9 zL^0VS=N@YN8>sN4B{nlO)M77`o!C!x;&wor>5Ywzc?1QOY-~6IkB@6a zVa4aur%%2|>%}{>o+IGW|J7D@Oo0QeD7n*}xGD7JSrZUP=%=_rda~&}(*|9_1_gb% zb#=b<2Q~EtIqF?ByM0HZZdQKi5f!~2r^x%lcP{;xZZuN&2We=FGI^@IGt!Q~ufSwF z28XzR-aEODo0Wo@uOFxF#C76UJ3e|eZ~IZqa<+t=b&i%BRtpWJ3MSDBn!NoS&}!9G zYWVHvVmCD_s}OjsMHX$|E{ES`BinuHG zZTlI1La@}RHg6dG6eP0t*DnMh^CbivY%x}vwRjLe@csMuMYVBJR&Ax+?7QFIUr^K3 zOr4rC8qZ#d2Js7YnsFoIdzH8WdlUwP*?@K>rlmO^@iPSn2a5oivEyVFYTYF?1RSBG z!vRe3_u50^8(1F#^C%<`Xh((j0=GDRKt-jdrnYK7-Cr&-a@&v*0C#z5X=!C^t}PLT z614449{u}1>AdLZYsQUEDMW7QQM{;qWD;{CI$0F} z$lLDjfH3~)-)j<4X|Ps=BO_4WCJS3yum%4(u@@&ODuSzUr=_Kh6+LDS>a{u8nqy}l zE79R7g%w81UITB=b&oD(<<-{KbDrJB=zDmod3eZ&r z0B8kkbkZ+1YpL5A85mH{3fPkT^Br7VzSd)BNvUsWC}nom%yF)@5mTnGPH`8oqqKlu zfPj9PUIKUyS4c^}H4c8;AxaNGz)c3hy(RFlP8MEbP?`Sw@K6m*#>oQ4Fg6nKk=lwL zo}Q~9r%ps7xw}qwqs%(|^+oR8?Rr{e+N23m)Qb8-5V8BiuFxRF8KH=h^#VKl zt=SeBu!%sCxA|U zc5Gq==G9$*bOiShNRjLO2~McT0H#3f&`?t*Y2TVnKXzeZt*uUYC5`qBwS~| zOpgJ++^3NdE&Faj6ch$=eR4Xnsi`Rt!0DhFgXv=G!6!Q^%UvO7e|%bkj?pVP+`uNb z>9IAvfYFm7tH#_3u#xPr}AmmLAOv@uB9lDK#Ub zw}`D-WBYEfj%BIly1}DgmJHx*czB)fj+NxIZ=u7fz#Qh*!`IhFrvZ#jIA0}hqD33b z@u_vT0~>HvFyVr9W&_@rLfDJH{cr`C1A-AI;g*G|G&QvE1|vg|-=N~lH0&h_xeYL1 zgl1^Gz4M^TtR=6$5IoL4uvRSk+p15Iv@BTmv}@>OiD+<0r)zO ze*$sCER1)p!a&E>&}jHG9s(v;FHQkNC=92t125c z>|SnAnaCpLy#^;{NxKuKZtL)+VM$jo?Z7Hc#8BkG6cH)rJh4W++4b4k*~DqlULCBy zlYnIrDoRkCkbH6yINjiw1m*}e1B29Ml8>YLDxa`eQ~QTzW|_;%D$g}hP|4G02Rl3N zhgM&}cXknGC@Lsu4uq9jc6F}e^Q0@ZvSmSxEUhm*+`|okWYkL>0HM|6SY^OB1JOw` zU>{5eAb6(;nxfa>jwio&&{}k^^X-mpQ{zNLbqb&U*fbEnZ#JiC=U8?HQ`6HI*Q?F7 zdYN~A>u|w}FTYZ#tT1l_W&~Mag0ve-?*nEcUgGOhwfU>BsQ7nwz~`NSAm`lX8)&rJ zpTZ?2Won-UVu+fS*5ve9gX1_{VpGVh`AOUD(m$Z%qka6rVyOA#;oV!e-nlQocTLFM zoUZTjUTh6K^gzW(yiHHr1n*Bo)lk{a0`{y%_&Qh)?2bTIgy*fx_m+<)VdLrFDHY5BJ7=Y|jK3kaS0uVxo z5f>%+>GS7)uz!INCo;K+YfqG*eu?%2Fg<{XA?Z;tKraDq6FlJD50HQFZj@JpX&w-_ zv7L~{uh~ulgJ8tjfCb0jQJ}7+g#;8sFeX)1pZU2@fox$KOti!Q0E>pmWzT{0&Jz_0 zApUN^0Y(!U%_R27ULEwNHzHsB)9zR61>*5Zd#Glx0k-HCoh%dX!lDg-3mm%>C{ zXN_RGx&-Z{7n3;8Pr#|fMYuT=>eat58Rrdxzu!h_F#_!JNKfw+^`7TYj*gF$JyNyr z2J^W~Houdm1o)btp|VK9FD;(-JsAVU8zJE~kC`3=?JaP@qM^(HG|opnf*wv~5_P!6 z$jAuI__a3L?H&Vr=lCZRn3aH0IWe8ckH-O`^fcNf12lAEWNZHZW+bHnU(-v)G!`X7eBhq`(!>>zqi=h^#{FDp~ z4sAO>LCT5sO#R*v92*zsGdm~e zx5r&~5ak@ENxwYTqHL6>c%|jp;)~&bw#+yX{`2@PF@<76z0@SBxv|`2xuMqS?_~;< zU|~VQ)VyA^>l_s6rnwJBZ@YUvNJ@mxJXFEJ-W(zj)5-@gNxaT#kVxe3qa&s>FwMe4#BWGwZTz$}>85T&Yg}YXI>4yg%&eBeV071}c-7mpPKsV#cWZ z&aq;A=S_>qM9SSN4<8|)9;~~qkm2X%G9Fwadsa0M?t@%@iJZNXq@~UAgx zh!dSyZ*H4S8$s1pJxd<}e~(JMfS*KyWr*tbd5{_ zYE&aQgqbJtV<`UqnLch!Pr!lc6HN>lSFT@A1@T%PB+bN`6u?9|f!c+b`duL-O9H@X z=qa4X_4i{L;=1DRuXo)oO)O;peFgc()>Fj#e_t(5VJ`gdmGsRF|Np%RePgXl@xNC; zpTRfI{qGfP?EiCt+S1Ga`!C=7;)MUbfKdGZaIv!sx+S-mFO>9uBsN@4NmH>(;mM2t E12!&bBme*a literal 0 HcmV?d00001 From 4867d9dc041d3521b95e8e9b608a2563e9a9d5dc Mon Sep 17 00:00:00 2001 From: Mike Nguyen Date: Fri, 12 Sep 2025 19:06:32 +0100 Subject: [PATCH 11/30] docs: update max-body-size documentation (#4873) * docs: update max-body-size documentation closes #4670 Signed-off-by: Mike Nguyen * docs: update max-body-size documentation and deprecation notices closes #4670 Signed-off-by: Mike Nguyen * docs: clarify deprecation notice closes #4670 Signed-off-by: Mike Nguyen * Update daprdocs/content/en/operations/configuration/increase-request-size.md Signed-off-by: Mark Fussell * tidy Signed-off-by: Mike Nguyen --------- Signed-off-by: Mike Nguyen Signed-off-by: Mark Fussell Co-authored-by: Mark Fussell --- .../configuration/increase-request-size.md | 24 +++++++++++-------- .../breaking-changes-and-deprecations.md | 23 +++++++++--------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/daprdocs/content/en/operations/configuration/increase-request-size.md b/daprdocs/content/en/operations/configuration/increase-request-size.md index 04f6500866c..2246d93bfdd 100644 --- a/daprdocs/content/en/operations/configuration/increase-request-size.md +++ b/daprdocs/content/en/operations/configuration/increase-request-size.md @@ -1,27 +1,29 @@ --- type: docs -title: "How-To: Handle large http body requests" -linkTitle: "HTTP request body size" +title: "How-To: Handle larger body requests" +linkTitle: "Request body size" weight: 6000 description: "Configure http requests that are bigger than 4 MB" --- -By default, Dapr has a limit for the request body size, set to 4MB. You can change this by defining: -- The `dapr.io/http-max-request-size` annotation, or -- The `--dapr-http-max-request-size` flag. +{{% alert title="Note" color="primary" %}} +The existing flag/annotation`dapr-http-max-request-size` has been deprecated and updated to `max-body-size`. +{{% /alert %}} + +By default, Dapr has a limit for the request body size, set to 4MB. You can change this for both HTTP and gRPC requests by defining: +- The `dapr.io/max-body-size` annotation, or +- The `--max-body-size` flag. {{< tabpane text=true >}} {{% tab "Self-hosted" %}} -When running in self-hosted mode, use the `--dapr-http-max-request-size` flag to configure Dapr to use non-default request body size: +When running in self-hosted mode, use the `--max-body-size` flag to configure Dapr to use non-default request body size: ```bash -dapr run --dapr-http-max-request-size 16 node app.js +dapr run --max-body-size 16 node app.js ``` -This tells Dapr to set maximum request body size to `16` MB. - {{% /tab %}} @@ -50,7 +52,7 @@ spec: dapr.io/enabled: "true" dapr.io/app-id: "myapp" dapr.io/app-port: "8000" - dapr.io/http-max-request-size: "16" + dapr.io/max-body-size: "16" #... ``` @@ -58,6 +60,8 @@ spec: {{< /tabpane >}} +This tells Dapr to set the maximum request body size to `16` MB for both HTTP and gRPC requests. + ## Related links [Dapr Kubernetes pod annotations spec]({{% ref arguments-annotations-overview.md %}}) diff --git a/daprdocs/content/en/operations/support/breaking-changes-and-deprecations.md b/daprdocs/content/en/operations/support/breaking-changes-and-deprecations.md index a0895537cc3..3c2214cb711 100644 --- a/daprdocs/content/en/operations/support/breaking-changes-and-deprecations.md +++ b/daprdocs/content/en/operations/support/breaking-changes-and-deprecations.md @@ -58,17 +58,18 @@ After announcing a future breaking change, the change will happen in 2 releases ## Announced deprecations -| Feature | Deprecation announcement | Removal | -|-----------------------|-----------------------|------------------------- | -| GET /v1.0/shutdown API (Users should use [POST API]({{% ref kubernetes-job.md %}}) instead) | 1.2.0 | 1.4.0 | -| Java domain builder classes deprecated (Users should use [setters](https://github.com/dapr/java-sdk/issues/587) instead) | Java SDK 1.3.0 | Java SDK 1.5.0 | -| Service invocation will no longer provide a default content type header of `application/json` when no content-type is specified. You must explicitly [set a content-type header]({{% ref "service_invocation_api.md#request-contents" %}}) for service invocation if your invoked apps rely on this header. | 1.7.0 | 1.9.0 | -| gRPC service invocation using `invoke` method is deprecated. Use proxy mode service invocation instead. See [How-To: Invoke services using gRPC ]({{% ref howto-invoke-services-grpc.md %}}) to use the proxy mode.| 1.9.0 | 1.10.0 | -| The CLI flag `--app-ssl` (in both the Dapr CLI and daprd) has been deprecated in favor of using `--app-protocol` with values `https` or `grpcs`. [daprd:6158](https://github.com/dapr/dapr/issues/6158) [cli:1267](https://github.com/dapr/cli/issues/1267)| 1.11.0 | 1.13.0 | -| Hazelcast PubSub Component | 1.9.0 | 1.11.0 | -| Twitter Binding Component | 1.10.0 | 1.11.0 | -| NATS Streaming PubSub Component | 1.11.0 | 1.13.0 | -| Workflows API Alpha1 `/v1.0-alpha1/workflows` being deprecated in favor of Workflow Client | 1.15.0 | 1.17.0 | +| Feature | Deprecation announcement | Removal | +|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|----------------| +| GET /v1.0/shutdown API (Users should use [POST API]({{% ref kubernetes-job.md %}}) instead) | 1.2.0 | 1.4.0 | +| Java domain builder classes deprecated (Users should use [setters](https://github.com/dapr/java-sdk/issues/587) instead) | Java SDK 1.3.0 | Java SDK 1.5.0 | +| Service invocation will no longer provide a default content type header of `application/json` when no content-type is specified. You must explicitly [set a content-type header]({{% ref "service_invocation_api.md#request-contents" %}}) for service invocation if your invoked apps rely on this header. | 1.7.0 | 1.9.0 | +| gRPC service invocation using `invoke` method is deprecated. Use proxy mode service invocation instead. See [How-To: Invoke services using gRPC ]({{% ref howto-invoke-services-grpc.md %}}) to use the proxy mode. | 1.9.0 | 1.10.0 | +| The CLI flag `--app-ssl` (in both the Dapr CLI and daprd) has been deprecated in favor of using `--app-protocol` with values `https` or `grpcs`. [daprd:6158](https://github.com/dapr/dapr/issues/6158) [cli:1267](https://github.com/dapr/cli/issues/1267) | 1.11.0 | 1.13.0 | +| Hazelcast PubSub Component | 1.9.0 | 1.11.0 | +| Twitter Binding Component | 1.10.0 | 1.11.0 | +| NATS Streaming PubSub Component | 1.11.0 | 1.13.0 | +| Workflows API Alpha1 `/v1.0-alpha1/workflows` being deprecated in favor of Workflow Client | 1.15.0 | 1.17.0 | +| Migration of `http-max-request-size` flags/annotations to `max-body-size`. See [How-To: Handle larger body requests]({{% ref increase-request-size.md %}}) | 1.14.0 | 1.17.0 | ## Related links From ecb99926448c4c75ccc4ef9072a66c3a6cf5b2db Mon Sep 17 00:00:00 2001 From: Mark Fussell Date: Fri, 12 Sep 2025 11:16:01 -0700 Subject: [PATCH 12/30] Update daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md Co-authored-by: Marc Duiker Signed-off-by: Mark Fussell --- .../building-blocks/conversation/howto-conversation-layer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md b/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md index 1015171226f..26ee546a1b4 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md +++ b/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md @@ -56,7 +56,7 @@ spec: ## Connect the conversation client -The following examples use [the Dapr SDK client instead]({{% ref "#related-links" %}}) to interact with LLMs. +The following examples use the Dapr SDK client to interact with LLMs. {{< tabpane text=true >}} From af09da66de4175650ae79ea8fb12127cd5e7a82d Mon Sep 17 00:00:00 2001 From: Mark Fussell Date: Fri, 12 Sep 2025 11:16:17 -0700 Subject: [PATCH 13/30] Update daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md Co-authored-by: Marc Duiker Signed-off-by: Mark Fussell --- .../building-blocks/conversation/howto-conversation-layer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md b/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md index 26ee546a1b4..e79af9f190e 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md +++ b/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md @@ -324,7 +324,7 @@ The conversation API supports the following features: To learn how to enable these features, see the [conversation API reference guide]({{% ref conversation_api %}}). -## Related links +## Conversation API examples in Dapr SDK repositories Try out the conversation API using the full examples provided in the supported SDK repos. From 9c44ff718b2f36bbb511274bb2235536580fdc31 Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Sat, 13 Sep 2025 00:19:04 +0100 Subject: [PATCH 14/30] Order APIs and Components alphabetically (#4883) Signed-off-by: Bilgin Ibryam Co-authored-by: Mark Fussell --- daprdocs/content/en/reference/api/actors_api.md | 2 +- daprdocs/content/en/reference/api/bindings_api.md | 2 +- daprdocs/content/en/reference/api/configuration_api.md | 2 +- daprdocs/content/en/reference/api/conversation_api.md | 2 +- daprdocs/content/en/reference/api/cryptography_api.md | 2 +- daprdocs/content/en/reference/api/distributed_lock_api.md | 6 +++--- daprdocs/content/en/reference/api/health_api.md | 2 +- daprdocs/content/en/reference/api/jobs_api.md | 2 +- daprdocs/content/en/reference/api/metadata_api.md | 2 +- daprdocs/content/en/reference/api/placement_api.md | 2 +- daprdocs/content/en/reference/api/pubsub_api.md | 2 +- daprdocs/content/en/reference/api/secrets_api.md | 2 +- daprdocs/content/en/reference/api/service_invocation_api.md | 2 +- daprdocs/content/en/reference/api/state_api.md | 2 +- daprdocs/content/en/reference/api/workflow_api.md | 2 +- .../components-reference/supported-bindings/_index.md | 2 +- .../supported-configuration-stores/_index.md | 2 +- .../components-reference/supported-conversation/_index.md | 2 +- .../components-reference/supported-cryptography/_index.md | 2 +- .../components-reference/supported-locks/_index.md | 2 +- .../components-reference/supported-middleware/_index.md | 2 +- .../supported-name-resolution/_index.md | 2 +- .../components-reference/supported-pubsub/_index.md | 2 +- .../components-reference/supported-secret-stores/_index.md | 2 +- .../components-reference/supported-state-stores/_index.md | 2 +- 25 files changed, 27 insertions(+), 27 deletions(-) diff --git a/daprdocs/content/en/reference/api/actors_api.md b/daprdocs/content/en/reference/api/actors_api.md index 4fead8ee19d..288c4dcafb4 100644 --- a/daprdocs/content/en/reference/api/actors_api.md +++ b/daprdocs/content/en/reference/api/actors_api.md @@ -3,7 +3,7 @@ type: docs title: "Actors API reference" linkTitle: "Actors API" description: "Detailed documentation on the actors API" -weight: 600 +weight: 200 --- Dapr provides native, cross-platform, and cross-language virtual actor capabilities. diff --git a/daprdocs/content/en/reference/api/bindings_api.md b/daprdocs/content/en/reference/api/bindings_api.md index 81e13eecca7..8c63feb0a01 100644 --- a/daprdocs/content/en/reference/api/bindings_api.md +++ b/daprdocs/content/en/reference/api/bindings_api.md @@ -3,7 +3,7 @@ type: docs title: "Bindings API reference" linkTitle: "Bindings API" description: "Detailed documentation on the bindings API" -weight: 500 +weight: 300 --- Dapr provides bi-directional binding capabilities for applications and a consistent approach to interacting with different cloud/on-premise services or systems. diff --git a/daprdocs/content/en/reference/api/configuration_api.md b/daprdocs/content/en/reference/api/configuration_api.md index ef28fc42a8f..e09a5d9b7bd 100644 --- a/daprdocs/content/en/reference/api/configuration_api.md +++ b/daprdocs/content/en/reference/api/configuration_api.md @@ -3,7 +3,7 @@ type: docs title: "Configuration API reference" linkTitle: "Configuration API" description: "Detailed documentation on the configuration API" -weight: 800 +weight: 400 --- ## Get Configuration diff --git a/daprdocs/content/en/reference/api/conversation_api.md b/daprdocs/content/en/reference/api/conversation_api.md index 8b04ee8f585..43c62b91f58 100644 --- a/daprdocs/content/en/reference/api/conversation_api.md +++ b/daprdocs/content/en/reference/api/conversation_api.md @@ -3,7 +3,7 @@ type: docs title: "Conversation API reference" linkTitle: "Conversation API" description: "Detailed documentation on the conversation API" -weight: 1400 +weight: 500 --- {{% alert title="Alpha" color="primary" %}} diff --git a/daprdocs/content/en/reference/api/cryptography_api.md b/daprdocs/content/en/reference/api/cryptography_api.md index 163abe1d77a..985a247c9d9 100644 --- a/daprdocs/content/en/reference/api/cryptography_api.md +++ b/daprdocs/content/en/reference/api/cryptography_api.md @@ -3,7 +3,7 @@ type: docs title: "Cryptography API reference" linkTitle: "Cryptography API" description: "Detailed documentation on the cryptography API" -weight: 1300 +weight: 600 --- Dapr provides cross-platform and cross-language support for encryption and decryption support via the diff --git a/daprdocs/content/en/reference/api/distributed_lock_api.md b/daprdocs/content/en/reference/api/distributed_lock_api.md index 92914a03768..b4db657cee2 100644 --- a/daprdocs/content/en/reference/api/distributed_lock_api.md +++ b/daprdocs/content/en/reference/api/distributed_lock_api.md @@ -1,9 +1,9 @@ --- type: docs -title: "Distributed Lock API reference" -linkTitle: "Distributed Lock API" +title: "Distributed lock API reference" +linkTitle: "Distributed lock API" description: "Detailed documentation on the distributed lock API" -weight: 900 +weight: 700 --- ## Lock diff --git a/daprdocs/content/en/reference/api/health_api.md b/daprdocs/content/en/reference/api/health_api.md index 164e2dd6d0b..bb0e096074e 100644 --- a/daprdocs/content/en/reference/api/health_api.md +++ b/daprdocs/content/en/reference/api/health_api.md @@ -3,7 +3,7 @@ type: docs title: "Health API reference" linkTitle: "Health API" description: "Detailed documentation on the health API" -weight: 1000 +weight: 800 --- Dapr provides health checking probes that can be used as readiness or liveness of Dapr and for initialization readiness from SDKs. diff --git a/daprdocs/content/en/reference/api/jobs_api.md b/daprdocs/content/en/reference/api/jobs_api.md index aa4c29f940a..690fe834135 100644 --- a/daprdocs/content/en/reference/api/jobs_api.md +++ b/daprdocs/content/en/reference/api/jobs_api.md @@ -3,7 +3,7 @@ type: docs title: "Jobs API reference" linkTitle: "Jobs API" description: "Detailed documentation on the jobs API" -weight: 1300 +weight: 900 --- {{% alert title="Note" color="primary" %}} diff --git a/daprdocs/content/en/reference/api/metadata_api.md b/daprdocs/content/en/reference/api/metadata_api.md index dc5ed7fa953..ed77aca1b6c 100644 --- a/daprdocs/content/en/reference/api/metadata_api.md +++ b/daprdocs/content/en/reference/api/metadata_api.md @@ -3,7 +3,7 @@ type: docs title: "Metadata API reference" linkTitle: "Metadata API" description: "Detailed documentation on the Metadata API" -weight: 1100 +weight: 1000 --- Dapr has a metadata API that returns information about the sidecar allowing runtime discoverability. The metadata endpoint returns the following information. diff --git a/daprdocs/content/en/reference/api/placement_api.md b/daprdocs/content/en/reference/api/placement_api.md index de216c1f156..6b02dd2cbfb 100644 --- a/daprdocs/content/en/reference/api/placement_api.md +++ b/daprdocs/content/en/reference/api/placement_api.md @@ -3,7 +3,7 @@ type: docs title: "Placement API reference" linkTitle: "Placement API" description: "Detailed documentation on the Placement API" -weight: 1200 +weight: 1100 --- Dapr has an HTTP API `/placement/state` for Placement service that exposes placement table information. The API is exposed on the sidecar on the same port as the healthz. This is an unauthenticated endpoint, and is disabled by default. diff --git a/daprdocs/content/en/reference/api/pubsub_api.md b/daprdocs/content/en/reference/api/pubsub_api.md index d2cc67ab03e..32af3bb0d09 100644 --- a/daprdocs/content/en/reference/api/pubsub_api.md +++ b/daprdocs/content/en/reference/api/pubsub_api.md @@ -3,7 +3,7 @@ type: docs title: "Pub/sub API reference" linkTitle: "Pub/Sub API" description: "Detailed documentation on the pub/sub API" -weight: 200 +weight: 1200 --- ## Publish a message to a given topic diff --git a/daprdocs/content/en/reference/api/secrets_api.md b/daprdocs/content/en/reference/api/secrets_api.md index 752736f5fe4..6561823ec90 100644 --- a/daprdocs/content/en/reference/api/secrets_api.md +++ b/daprdocs/content/en/reference/api/secrets_api.md @@ -3,7 +3,7 @@ type: docs title: "Secrets API reference" linkTitle: "Secrets API" description: "Detailed documentation on the secrets API" -weight: 700 +weight: 1300 --- ## Get Secret diff --git a/daprdocs/content/en/reference/api/service_invocation_api.md b/daprdocs/content/en/reference/api/service_invocation_api.md index cc46d982488..811d0021ac8 100644 --- a/daprdocs/content/en/reference/api/service_invocation_api.md +++ b/daprdocs/content/en/reference/api/service_invocation_api.md @@ -3,7 +3,7 @@ type: docs title: "Service invocation API reference" linkTitle: "Service invocation API" description: "Detailed documentation on the service invocation API" -weight: 100 +weight: 1400 --- Dapr provides users with the ability to call other applications that are using Dapr with a unique named identifier (appId), or HTTP endpoints that are not using Dapr. diff --git a/daprdocs/content/en/reference/api/state_api.md b/daprdocs/content/en/reference/api/state_api.md index 328ffec80fd..bf6e2c15272 100644 --- a/daprdocs/content/en/reference/api/state_api.md +++ b/daprdocs/content/en/reference/api/state_api.md @@ -3,7 +3,7 @@ type: docs title: "State management API reference" linkTitle: "State management API" description: "Detailed documentation on the state management API" -weight: 400 +weight: 1500 --- ## Component file diff --git a/daprdocs/content/en/reference/api/workflow_api.md b/daprdocs/content/en/reference/api/workflow_api.md index 85ee207162d..f84996444f6 100644 --- a/daprdocs/content/en/reference/api/workflow_api.md +++ b/daprdocs/content/en/reference/api/workflow_api.md @@ -3,7 +3,7 @@ type: docs title: "Workflow API reference" linkTitle: "Workflow API" description: "Detailed documentation on the workflow API" -weight: 300 +weight: 1600 --- Dapr provides users with the ability to interact with workflows through its built-in workflow engine, which is implemented using Dapr Actors. This workflow engine is accessed using the name `dapr` in API calls as the `workflowComponentName`. diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/_index.md b/daprdocs/content/en/reference/components-reference/supported-bindings/_index.md index bca14fe0607..0f61294f835 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/_index.md @@ -2,7 +2,7 @@ type: docs title: "Bindings component specs" linkTitle: "Bindings" -weight: 4000 +weight: 1000 description: The supported external bindings that interface with Dapr aliases: - "/operations/components/setup-bindings/supported-bindings/" diff --git a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/_index.md b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/_index.md index b8e80f12216..64e4ebf7366 100644 --- a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/_index.md @@ -2,7 +2,7 @@ type: docs title: "Configuration store component specs" linkTitle: "Configuration stores" -weight: 6000 +weight: 2000 description: The supported configuration stores that interface with Dapr aliases: - "/operations/components/setup-configuration-store/supported-configuration-stores/" diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/_index.md b/daprdocs/content/en/reference/components-reference/supported-conversation/_index.md index 179162b3bb2..c6c862960b9 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/_index.md @@ -2,7 +2,7 @@ type: docs title: "Conversation component specs" linkTitle: "Conversation" -weight: 9000 +weight: 3000 description: The supported conversation components that interface with Dapr no_list: true --- diff --git a/daprdocs/content/en/reference/components-reference/supported-cryptography/_index.md b/daprdocs/content/en/reference/components-reference/supported-cryptography/_index.md index c7789d5e4a6..160d3e3427c 100644 --- a/daprdocs/content/en/reference/components-reference/supported-cryptography/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-cryptography/_index.md @@ -2,7 +2,7 @@ type: docs title: "Cryptography component specs" linkTitle: "Cryptography" -weight: 8000 +weight: 4000 description: The supported cryptography components that interface with Dapr no_list: true --- diff --git a/daprdocs/content/en/reference/components-reference/supported-locks/_index.md b/daprdocs/content/en/reference/components-reference/supported-locks/_index.md index 134e75360dc..588e5acc4ff 100644 --- a/daprdocs/content/en/reference/components-reference/supported-locks/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-locks/_index.md @@ -2,7 +2,7 @@ type: docs title: "Lock component specs" linkTitle: "Locks" -weight: 7000 +weight: 5000 description: The supported locks that interface with Dapr no_list: true --- diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/_index.md b/daprdocs/content/en/reference/components-reference/supported-middleware/_index.md index ddb92d740ed..995651d14db 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/_index.md @@ -2,7 +2,7 @@ type: docs title: "Middleware component specs" linkTitle: "Middleware" -weight: 10000 +weight: 6000 description: List of all the supported middleware components that can be injected in Dapr's processing pipeline. no_list: true aliases: diff --git a/daprdocs/content/en/reference/components-reference/supported-name-resolution/_index.md b/daprdocs/content/en/reference/components-reference/supported-name-resolution/_index.md index c27f6f3fea8..ac0beb524dc 100644 --- a/daprdocs/content/en/reference/components-reference/supported-name-resolution/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-name-resolution/_index.md @@ -2,7 +2,7 @@ type: docs title: "Name resolution provider component specs" linkTitle: "Name resolution" -weight: 9000 +weight: 7000 description: The supported name resolution providers to enable Dapr service invocation no_list: true --- diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/_index.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/_index.md index 876e7bedc16..34785d7d65c 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/_index.md @@ -2,7 +2,7 @@ type: docs title: "Pub/sub brokers component specs" linkTitle: "Pub/sub brokers" -weight: 1000 +weight: 8000 description: The supported pub/sub brokers that interface with Dapr aliases: - "/operations/components/setup-pubsub/supported-pubsub/" diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/_index.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/_index.md index d44055ae9d5..03d17ca02cb 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/_index.md @@ -2,7 +2,7 @@ type: docs title: "Secret store component specs" linkTitle: "Secret stores" -weight: 5000 +weight: 9000 description: The supported secret stores that interface with Dapr aliases: - "/operations/components/setup-secret-store/supported-secret-stores/" diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/_index.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/_index.md index 2b2509f53fb..0855682eb22 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/_index.md @@ -3,7 +3,7 @@ type: docs title: "State store component specs" linkTitle: "State stores" description: "The supported state stores that interface with Dapr" -weight: 4000 +weight: 10000 aliases: - "/operations/components/setup-state-store/supported-state-stores/" no_list: true From d84cd60fb7cd67437d2d9658d392ab61f1725243 Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Sat, 13 Sep 2025 00:35:44 +0100 Subject: [PATCH 15/30] Added prompt caching details (#4882) Signed-off-by: Bilgin Ibryam Co-authored-by: Mark Fussell --- .../building-blocks/conversation/conversation-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md b/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md index 7f05b660466..44b0396bf4f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md @@ -31,7 +31,7 @@ The following features are out-of-the-box for [all the supported conversation co ### Prompt caching -Prompt caching optimizes performance by storing and reusing prompts that are often repeated across multiple API calls. To significantly reduce latency and cost, Dapr stores frequent prompts in a local cache to be reused by your cluster, pod, or other, instead of reprocessing the information for every new request. +The Conversation API includes a built-in caching mechanism (enabled by the cacheTTL parameter) that optimizes both performance and cost by storing previous model responses for faster delivery to repetitive requests. This is particularly valuable in scenarios where similar prompt patterns occur frequently. When caching is enabled, Dapr creates a deterministic hash of the prompt text and all configuration parameters, checks if a valid cached response exists for this hash within the time period (for example, 10 minutes), and returns the cached response immediately if found. If no match exists, Dapr makes the API call and stores the result. This eliminates external API calls, lowers latency, and avoids provider charges for repeated requests. The cache exists entirely within your runtime environment, with each Dapr sidecar maintaining its own local cache. ### Personally identifiable information (PII) obfuscation From 8de08db121bcb11fdb940b01bd3a2606c063c90b Mon Sep 17 00:00:00 2001 From: Josh van Leeuwen Date: Fri, 12 Sep 2025 20:30:13 -0400 Subject: [PATCH 16/30] [1.16] Adds workflow limitations (#4865) * [1.16] Adds workflow limitations Updates state store table to include supported stores. Adds a warning emoji to state stores which have workflow limitations. Adds workflow limitation sections to the cosmosDB & dynamodb setup docs. Signed-off-by: joshvanl * Updates limitation sections. Remove localizations Signed-off-by: joshvanl * Apply suggestions from code review Co-authored-by: Mark Fussell Signed-off-by: Josh van Leeuwen * Adds section on the number of records that are saved by workflow shape Signed-off-by: joshvanl * Mark dynamo and cosmosdb state stores as not supporting workflows in table Signed-off-by: joshvanl * Update daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md Signed-off-by: Mark Fussell * Apply suggestions from code review Co-authored-by: Mark Fussell Signed-off-by: Josh van Leeuwen * Adds production warning to cosmos & dynamo Signed-off-by: joshvanl * Removes warning from state template Signed-off-by: joshvanl * Update daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md Signed-off-by: Mark Fussell * Update daprdocs/content/en/reference/components-reference/supported-state-stores/setup-dynamodb.md Signed-off-by: Mark Fussell --------- Signed-off-by: joshvanl Signed-off-by: Josh van Leeuwen Signed-off-by: Mark Fussell Co-authored-by: Mark Fussell Co-authored-by: Marc Duiker --- .../workflow/workflow-architecture.md | 14 ++++++++++++++ .../workflow/workflow-overview.md | 4 +++- .../setup-azure-cosmosdb.md | 16 ++++++++++++++++ .../supported-state-stores/setup-dynamodb.md | 14 ++++++++++++++ daprdocs/data/components/state_stores/azure.yaml | 2 +- .../data/components/state_stores/generic.yaml | 6 +++--- .../data/components/state_stores/oracle.yaml | 2 +- 7 files changed, 52 insertions(+), 6 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md index 2fdd37d1cf8..e5d77c2c18e 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md @@ -175,6 +175,20 @@ Similarly, if a state store imposes restrictions on the size of a batch transact Workflow state can be purged from a state store, including all its history. Each Dapr SDK exposes APIs for purging all metadata related to specific workflow instances. +#### State store record count + +The number of records which are saved as history in the state store per workflow run is determined by its complexity or "shape". In other words, the number of activities, timers, sub-workflows etc. +The following table shows a general guide to the number of records that are saved by different workflow tasks. +This number may be larger or smaller depending on retries or concurrency. + +| Task type | Number of records saved | +| ----------|-------------------------| +| Start workflow | 5 records | +| Call activity | 3 records | +| Timer | 3 records | +| Raise event | 3 records | +| Start child workflow | 8 records | + ## Workflow scalability Because Dapr Workflows are internally implemented using actors, Dapr Workflows have the same scalability characteristics as actors. diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md index dd546f239ca..5c79019fafd 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md @@ -116,7 +116,9 @@ Want to skip the quickstarts? Not a problem. You can try out the workflow buildi ## Limitations -- **State stores:** Due to underlying limitations in some database choices, more commonly NoSQL databases, you might run into limitations around storing internal states. For example, CosmosDB has a maximum single operation item limit of only 100 states in a single request. +- **State stores:** You can only use state stores which support workflows, as [described here]({{% ref supported-state-stores %}}). +- Azure Cosmos DB has [payload and workflow complexity limitations]({{% ref "setup-azure-cosmosdb.md#workflow-limitations" %}}). +- AWS DynamoDB has [workflow complexity limitations]({{% ref "setup-azure-cosmosdb.md#workflow-limitations" %}}). ## Watch the demo diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md index 2e67d46c137..dc225eee5d5 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md @@ -225,6 +225,22 @@ This particular optimization only makes sense if you are saving large objects to {{% /alert %}} +## Workflow Limitations + +{{% alert title="Note" color="primary" %}} + +As described below, CosmosDB has limitations that likely make it unsuitable for production environments. +There is currently no path for migrating Workflow data from CosmosDB to another state store, meaning exceeding these limits in production will result in failed workflows with no workaround. + +{{% /alert %}} + +The more complex a workflow is with number of activities, child workflows, etc, the more DB state operations it performs per state store transaction. +All input & output values are saved to the workflow history, and are part of an operation of these transactions. +CosmosDB has a [maximum document size of 2MB and maximum transaction size of 100 operations.](https://learn.microsoft.com/azure/cosmos-db/concepts-limits#per-request-limits). +Attempting to write to CosmosDB beyond these limits results in an error code of `413`. +This means that the workflow history must not exceed this size, meaning that CosmosDB is not suitable for workflows with large input/output values or larger complex workflows. +A general guide to the number of records that are saved during a workflow executon can be found [here]({{% ref "workflow-architecture.md#state-store-record-count" %}}). + ## Related links - [Basic schema for a Dapr component]({{% ref component-schema %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-dynamodb.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-dynamodb.md index 5a45e374d90..082d4e4875a 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-dynamodb.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-dynamodb.md @@ -158,6 +158,20 @@ $ aws dynamodb get-item \ } ``` +## Workflow Limitations + +{{% alert title="Note" color="primary" %}} + +As described below, DynamoDB has limitations that likely make it unsuitable for production environments. +There is currently no path for migrating Workflow data from DynamoDB to another state store, meaning exceeding these limits in production will result in failed workflows with no workaround. + +{{% /alert %}} + +The more complex a workflow is (number of activities, child workflows, etc.), the more state operations it performs per state store transaction. +The maximum number of operations that can be performed by DynamoDB in a [single transaction is 100](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html). +This means that DynamoDB can only handle workflows with a limited complexity, meaning it is not suitable for all workflow scenarios. +A general guide to the number of records that are saved during a workflow executon can be found [here]({{% ref "workflow-architecture.md#state-store-record-count" %}}). + ## Related links - [Basic schema for a Dapr component]({{% ref component-schema %}}) diff --git a/daprdocs/data/components/state_stores/azure.yaml b/daprdocs/data/components/state_stores/azure.yaml index 287477de780..b340a26db71 100644 --- a/daprdocs/data/components/state_stores/azure.yaml +++ b/daprdocs/data/components/state_stores/azure.yaml @@ -30,7 +30,7 @@ transactions: true etag: true ttl: true - workflow: false + workflow: true - component: Azure Table Storage link: setup-azure-tablestorage state: Stable diff --git a/daprdocs/data/components/state_stores/generic.yaml b/daprdocs/data/components/state_stores/generic.yaml index 289d8ce4305..8d8ce44184c 100644 --- a/daprdocs/data/components/state_stores/generic.yaml +++ b/daprdocs/data/components/state_stores/generic.yaml @@ -52,7 +52,7 @@ transactions: true etag: true ttl: true - workflow: false + workflow: true - component: Hashicorp Consul link: setup-consul state: Alpha @@ -140,7 +140,7 @@ transactions: true etag: true ttl: true - workflow: false + workflow: true - component: PostgreSQL v1 link: setup-postgresql-v1 state: Stable @@ -195,7 +195,7 @@ transactions: true etag: true ttl: true - workflow: false + workflow: true - component: Zookeeper link: setup-zookeeper state: Alpha diff --git a/daprdocs/data/components/state_stores/oracle.yaml b/daprdocs/data/components/state_stores/oracle.yaml index eae48304fde..fc5136684b6 100644 --- a/daprdocs/data/components/state_stores/oracle.yaml +++ b/daprdocs/data/components/state_stores/oracle.yaml @@ -9,7 +9,7 @@ etag: true ttl: true query: false - workflow: false + workflow: true - component: Coherence link: setup-coherence state: Alpha From 8656501840751950dfadb715c26348039057f981 Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Mon, 15 Sep 2025 20:11:16 +0100 Subject: [PATCH 17/30] Reverting back from snake case to camel case Signed-off-by: Bilgin Ibryam --- .../en/reference/api/conversation_api.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/daprdocs/content/en/reference/api/conversation_api.md b/daprdocs/content/en/reference/api/conversation_api.md index c3cdae4cb0a..eab64dd6ed5 100644 --- a/daprdocs/content/en/reference/api/conversation_api.md +++ b/daprdocs/content/en/reference/api/conversation_api.md @@ -32,21 +32,21 @@ POST http://localhost:/v1.0-alpha2/conversation//converse | Field | Description | | --------- | ----------- | -| `context_id` | The ID of an existing chat (like in ChatGPT). Optional | +| `contextId` | The ID of an existing chat (like in ChatGPT). Optional | | `inputs` | Inputs for the conversation. Multiple inputs at one time are supported. Required | | `parameters` | Parameters for all custom fields. Optional | | `metadata` | Metadata passed to conversation components. Optional | -| `scrub_pii` | A boolean value to enable obfuscation of sensitive information returning from the LLM. Optional | +| `scrubPii` | A boolean value to enable obfuscation of sensitive information returning from the LLM. Optional | | `temperature` | A float value to control the temperature of the model. Used to optimize for consistency (0) or creativity (1). Optional | | `tools` | Tools register the tools available to be used by the LLM during the conversation. Optional | -| `tool_choice` | Controls which (if any) tool is called by the model. Values: `auto`, `required`, or specific tool name. Defaults to `auto` if tools are present. Optional | +| `toolChoice` | Controls which (if any) tool is called by the model. Values: `auto`, `required`, or specific tool name. Defaults to `auto` if tools are present. Optional | #### Input body | Field | Description | | --------- | ----------- | | `messages` | Array of conversation messages. Required | -| `scrub_pii` | A boolean value to enable obfuscation of sensitive information present in the content field. Optional | +| `scrubPii` | A boolean value to enable obfuscation of sensitive information present in the content field. Optional | #### Message types @@ -54,11 +54,11 @@ The API supports different message types: | Type | Description | | ---- | ----------- | -| `of_developer` | Developer role messages with optional name and content | -| `of_system` | System role messages with optional name and content | -| `of_user` | User role messages with optional name and content | -| `of_assistant` | Assistant role messages with optional name, content, and tool calls | -| `of_tool` | Tool role messages with tool ID, name, and content | +| `ofDeveloper` | Developer role messages with optional name and content | +| `ofSystem` | System role messages with optional name and content | +| `ofUser` | User role messages with optional name and content | +| `ofAssistant` | Assistant role messages with optional name, content, and tool calls | +| `ofTool` | Tool role messages with tool ID, name, and content | #### Tool calling @@ -74,7 +74,7 @@ Tools can be defined using the `tools` field with function definitions: #### Tool choice options -The `tool_choice` is an optional parameter that controls how the model can use available tools: +The `toolChoice` is an optional parameter that controls how the model can use available tools: - **`auto`**: The model can pick between generating a message or calling one or more tools (default when tools are present) - **`required`**: Requires one or more functions to be called @@ -122,7 +122,7 @@ curl -X POST http://localhost:3500/v1.0-alpha2/conversation/openai/converse \ { "messages": [ { - "of_user": { + "ofUser": { "content": [ { "text": "What is Dapr?" @@ -148,7 +148,7 @@ curl -X POST http://localhost:3500/v1.0-alpha2/conversation/openai/converse \ { "messages": [ { - "of_user": { + "ofUser": { "content": [ { "text": "What is the weather like in San Francisco in celsius?" @@ -157,7 +157,7 @@ curl -X POST http://localhost:3500/v1.0-alpha2/conversation/openai/converse \ } } ], - "scrub_pii": false + "scrubPii": false } ], "parameters": { @@ -174,7 +174,7 @@ curl -X POST http://localhost:3500/v1.0-alpha2/conversation/openai/converse \ "api_key": "test-key", "version": "1.0" }, - "scrub_pii": false, + "scrubPii": false, "temperature": 0.7, "tools": [ { @@ -199,7 +199,7 @@ curl -X POST http://localhost:3500/v1.0-alpha2/conversation/openai/converse \ } } ], - "tool_choice": "auto" + "toolChoice": "auto" }' ``` From 1e03ecea0fbd2ab30f8a76e8afebeecdd310bb9b Mon Sep 17 00:00:00 2001 From: Cassie Coyle Date: Tue, 16 Sep 2025 09:33:02 -0500 Subject: [PATCH 18/30] Multi-app workflows: improve docs and images (#4878) * add complex wf illustration and fix other image Signed-off-by: Cassandra Coyle * cleanup Signed-off-by: Cassandra Coyle * update howto author wfs Signed-off-by: Cassandra Coyle * update go code to use vanity client Signed-off-by: Cassandra Coyle * Apply suggestions from code review Co-authored-by: Mark Fussell Signed-off-by: Cassie Coyle * add scheduleworkflow note Signed-off-by: Cassandra Coyle * update images Signed-off-by: Cassandra Coyle --------- Signed-off-by: Cassandra Coyle Signed-off-by: Cassie Coyle Co-authored-by: Mark Fussell Co-authored-by: Marc Duiker --- .../workflow/howto-author-workflow.md | 120 +++++++++++++++--- .../workflow/workflow-multi-app.md | 59 +++++++-- .../workflow-multi-app-child-workflow.png | Bin 83374 -> 33812 bytes .../workflow-multi-app-complex.png | Bin 0 -> 84376 bytes 4 files changed, 149 insertions(+), 30 deletions(-) create mode 100644 daprdocs/static/images/workflow-overview/workflow-multi-app-complex.png diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md index 36d2df7b3bb..a054393cf56 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md @@ -197,10 +197,12 @@ public class DemoWorkflowActivity implements WorkflowActivity { +### Define workflow activities + Define each workflow activity you'd like your workflow to perform. The Activity input can be unmarshalled from the context with `ctx.GetInput`. Activities should be defined as taking a `ctx workflow.ActivityContext` parameter and returning an interface and error. ```go -func TestActivity(ctx workflow.ActivityContext) (any, error) { +func BusinessActivity(ctx workflow.ActivityContext) (any, error) { var input int if err := ctx.GetInput(&input); err != nil { return "", err @@ -211,6 +213,87 @@ func TestActivity(ctx workflow.ActivityContext) (any, error) { } ``` +### Define the workflow + +Define your workflow function with the parameter `ctx *workflow.WorkflowContext` and return any and error. Invoke your defined activities from within your workflow. + +```go +func BusinessWorkflow(ctx *workflow.WorkflowContext) (any, error) { + var input int + if err := ctx.GetInput(&input); err != nil { + return nil, err + } + var output string + if err := ctx.CallActivity(BusinessActivity, workflow.ActivityInput(input)).Await(&output); err != nil { + return nil, err + } + if err := ctx.WaitForExternalEvent("businessEvent", time.Second*60).Await(&output); err != nil { + return nil, err + } + + if err := ctx.CreateTimer(time.Second).Await(nil); err != nil { + return nil, nil + } + return output, nil +} +``` + +### Register workflows and activities + +Before your application can execute workflows, you must register both the workflow orchestrator and its activities with a workflow registry. This ensures Dapr knows which functions to call when executing your workflow. + +```go +func main() { + // Create a workflow registry + r := workflow.NewRegistry() + + // Register the workflow orchestrator + if err := r.AddWorkflow(BusinessWorkflow); err != nil { + log.Fatal(err) + } + fmt.Println("BusinessWorkflow registered") + + // Register the workflow activities + if err := r.AddActivity(BusinessActivity); err != nil { + log.Fatal(err) + } + fmt.Println("BusinessActivity registered") + + // Create workflow client and start worker + wclient, err := client.NewWorkflowClient() + if err != nil { + log.Fatal(err) + } + fmt.Println("Worker initialized") + + ctx, cancel := context.WithCancel(context.Background()) + if err = wclient.StartWorker(ctx, r); err != nil { + log.Fatal(err) + } + fmt.Println("runner started") + + // Your application logic continues here... + // Example: Start a workflow + instanceID, err := wclient.ScheduleWorkflow(ctx, "BusinessWorkflow", workflow.WithInput(1)) + if err != nil { + log.Fatalf("failed to start workflow: %v", err) + } + fmt.Printf("workflow started with id: %v\n", instanceID) + + // Stop workflow worker when done + cancel() + fmt.Println("workflow worker successfully shutdown") +} +``` + +**Key points about registration:** +- Use `workflow.NewRegistry()` to create a workflow registry +- Use `r.AddWorkflow()` to register workflow functions +- Use `r.AddActivity()` to register activity functions +- Use `client.NewWorkflowClient()` to create a workflow client +- Call `wclient.StartWorker()` to begin processing workflows +- Use `wclient.ScheduleWorkflow` to schedule a named instance of a workflow + [See the Go SDK workflow activity example in context.](https://github.com/dapr/go-sdk/tree/main/examples/workflow/README.md) {{% /tab %}} @@ -383,16 +466,16 @@ public class DemoWorkflowWorker { Define your workflow function with the parameter `ctx *workflow.WorkflowContext` and return any and error. Invoke your defined activities from within your workflow. ```go -func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { +func BusinessWorkflow(ctx *workflow.WorkflowContext) (any, error) { var input int if err := ctx.GetInput(&input); err != nil { return nil, err } var output string - if err := ctx.CallActivity(TestActivity, workflow.ActivityInput(input)).Await(&output); err != nil { + if err := ctx.CallActivity(BusinessActivity, workflow.ActivityInput(input)).Await(&output); err != nil { return nil, err } - if err := ctx.WaitForExternalEvent("testEvent", time.Second*60).Await(&output); err != nil { + if err := ctx.WaitForExternalEvent("businessEvent", time.Second*60).Await(&output); err != nil { return nil, err } @@ -864,7 +947,7 @@ public class DemoWorkflow extends Workflow { [As in the following example](https://github.com/dapr/go-sdk/tree/main/examples/workflow/README.md), a hello-world application using the Go SDK and Dapr Workflow would include: - A Go package called `client` to receive the Go SDK client capabilities. -- The `TestWorkflow` method +- The `BusinessWorkflow` method - Creating the workflow with input and output. - API calls. In the example below, these calls start and call the workflow activities. @@ -889,15 +972,15 @@ var failActivityTries = 0 func main() { r := workflow.NewRegistry() - if err := r.AddWorkflow(TestWorkflow); err != nil { + if err := r.AddWorkflow(BusinessWorkflow); err != nil { log.Fatal(err) } - fmt.Println("TestWorkflow registered") + fmt.Println("BusinessWorkflow registered") - if err := r.AddActivity(TestActivity); err != nil { + if err := r.AddActivity(BusinessActivity); err != nil { log.Fatal(err) } - fmt.Println("TestActivity registered") + fmt.Println("BusinessActivity registered") if err := r.AddActivity(FailActivity); err != nil { log.Fatal(err) @@ -921,7 +1004,7 @@ func main() { // "start". This is useful for increasing the throughput of creating // workflows. // workflow.WithStartTime(time.Now()) - instanceID, err := wclient.ScheduleWorkflow(ctx, "TestWorkflow", workflow.WithInstanceID("a7a4168d-3a1c-41da-8a4f-e7f6d9c718d9"), workflow.WithInput(1)) + instanceID, err := wclient.ScheduleWorkflow(ctx, "BusinessWorkflow", workflow.WithInstanceID("a7a4168d-3a1c-41da-8a4f-e7f6d9c718d9"), workflow.WithInput(1)) if err != nil { log.Fatalf("failed to start workflow: %v", err) } @@ -963,9 +1046,8 @@ func main() { fmt.Printf("stage: %d\n", stage) - // Raise Event Test - - err = wclient.RaiseEvent(ctx, instanceID, "testEvent", workflow.WithEventPayload("testData")) + // Raise Event + err = wclient.RaiseEvent(ctx, instanceID, "businessEvent", workflow.WithEventPayload("testData")) if err != nil { fmt.Printf("failed to raise event: %v", err) } @@ -1008,7 +1090,7 @@ func main() { fmt.Printf("stage: %d\n", stage) // Terminate workflow test - id, err := wclient.ScheduleWorkflow(ctx, "TestWorkflow", workflow.WithInstanceID("a7a4168d-3a1c-41da-8a4f-e7f6d9c718d9"), workflow.WithInput(1)) + id, err := wclient.ScheduleWorkflow(ctx, "BusinessWorkflow", workflow.WithInstanceID("a7a4168d-3a1c-41da-8a4f-e7f6d9c718d9"), workflow.WithInput(1)) if err != nil { log.Fatalf("failed to start workflow: %v", err) } @@ -1037,22 +1119,22 @@ func main() { fmt.Println("workflow worker successfully shutdown") } -func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { +func BusinessWorkflow(ctx *workflow.WorkflowContext) (any, error) { var input int if err := ctx.GetInput(&input); err != nil { return nil, err } var output string - if err := ctx.CallActivity(TestActivity, workflow.WithActivityInput(input)).Await(&output); err != nil { + if err := ctx.CallActivity(BusinessActivity, task.WithActivityInput(input)).Await(&output); err != nil { return nil, err } - err := ctx.WaitForExternalEvent("testEvent", time.Second*60).Await(&output) + err := ctx.WaitForSingleEvent("businessEvent", time.Second*60).Await(&output) if err != nil { return nil, err } - if err := ctx.CallActivity(TestActivity, workflow.WithActivityInput(input)).Await(&output); err != nil { + if err := ctx.CallActivity(BusinessActivity, task.WithActivityInput(input)).Await(&output); err != nil { return nil, err } @@ -1068,7 +1150,7 @@ func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { return output, nil } -func TestActivity(ctx workflow.ActivityContext) (any, error) { +func BusinessActivity(ctx task.ActivityContext) (any, error) { var input int if err := ctx.GetInput(&input); err != nil { return "", err diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md index 410b4fc91cd..64f112c7018 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-multi-app.md @@ -19,28 +19,65 @@ Some scenarios where this is useful include: - Implementation of a workflow spans different programming languages based on team expertise or existing codebases. - Different team boundaries or microservice ownership. +Diagram showing multi-application complex workflow + +The diagram below shows an example scenario of a complex workflow that orchestrates across multiple applications that are written in different languages. Each applications' main steps and activities are: + +• **App1: Main Workflow Service** - Top-level orchestrator that coordinates the entire ML pipeline +- Starts the process +- Calls data processing activities on App2 +- Calls ML training child workflow on App3 +- Calls model deployment on App4 +- Ends the complete workflow +- **Language: Java** + +• **App2: Data Processing Pipeline** - **GPU activities** only +- Data Ingesting Activity (GPU-accelerated) +- Feature Engineering Activity (GPU-accelerated) +- Returns completion signal to Main Workflow +- **Language: Go** + +• **App3: ML Training Child Workflow** - Contains a child workflow and activities +- Child workflow orchestrates: + - Data Processing Activity + - Model Training Activity (GPU-intensive) + - Model Validation Activity +- Triggered by App2's activities completing +- Returns completion signal to Main Workflow +- **Language: Java** + +• **App4: Model Serving Service** - **Beefy GPU app** with activities only +- Model Loading Activity (GPU memory intensive) +- Inference Setup Activity (GPU-accelerated inference) +- Triggered by App3's workflow completing +- Returns completion signal to Main Workflow +- **Language: Go** ## Multi-application workflows -Like all building blocks in Dapr, workflow execution routing is based on the [App ID of the hosting Dapr application]({{% ref "security-concept.md#application-identity" %}}). +Workflow execution routing is based on the [App ID of the hosting Dapr application]({{% ref "security-concept.md#application-identity" %}}). By default, the full workflow execution is hosted on the app ID that started the workflow. This workflow can be executed across any replicas of that app ID, not just the single replica which scheduled the workflow. -It is possible to execute activities or child workflows on different app IDs by specifying the target app ID parameter, inside the workflow execution code. -Upon execution, the target app ID will execute the activity or child workflow, and return the result to the parent workflow of the originating app ID. +It is possible to execute activities and child workflows on different app IDs by specifying the target app ID parameter, inside the workflow execution code. +Upon execution, the target app ID executes the activity or child workflow, and returns the result to the parent workflow of the originating app ID. The entire Workflow execution may be distributed across multiple app IDs with no limit, with each activity or child workflow specifying the target app ID. The final history of the workflow will be saved by the app ID that hosts the very parent (or can consider it the root) workflow. {{% alert title="Restrictions" color="primary" %}} -Like other building blocks and resources in Dapr, workflows are scoped to a single namespace. +Like other API building blocks and resources in Dapr, workflows are scoped to a single namespace. This means that all app IDs involved in a multi-application workflow must be in the same namespace. -Similarly, all app IDs must use the same actor state store. -Finally, the target app ID must have the activity or child workflow defined, otherwise the parent workflow will retry indefinitely. +Similarly, all app IDs must use the same workflow (or actor) state store. +Finally, the target app ID must have the activity or child workflow defined and registered, otherwise the parent workflow retries indefinitely. {{% /alert %}} {{% alert title="Important Limitations" color="warning" %}} -- **SDKs supporting multi-application workflows** - Multi-application workflows are used via the SDKs. Currently Java (activities calling) and Go (both activities and child workflows calling) SDKs are supported. The SDKs (Python, .NET, JavaScript) are planned for future releases. +**SDKs supporting multi-application workflows** - Multi-application workflows are used via the SDKs. +Currently the following are supported: +- **Java** (**only** activity calls) +- **Go** (**both** activities and child workflows calls) +- The Python, .NET, JavaScript SDKs support are planned for future releases {{% /alert %}} ## Error handling @@ -63,7 +100,7 @@ The following example shows how to execute the activity `ActivityA` on the targe {{% tab "Go" %}} ```go -func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { +func BusinessWorkflow(ctx *workflow.WorkflowContext) (any, error) { var output string err := ctx.CallActivity("ActivityA", workflow.WithActivityInput("my-input"), @@ -83,12 +120,12 @@ func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { {{% tab "Java" %}} ```java -public class CrossAppWorkflow implements Workflow { +public class BusinessWorkflow implements Workflow { @Override public WorkflowStub create() { return ctx -> { String output = ctx.callActivity( - "ActivityA", + ActivityA.class.getName(), "my-input", new WorkflowTaskOptions("App2"), // Here we set the target app ID which will execute this activity. String.class @@ -115,7 +152,7 @@ The following example shows how to execute the child workflow `Workflow2` on the {{% tab "Go" %}} ```go -func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { +func BusinessWorkflow(ctx *workflow.WorkflowContext) (any, error) { var output string err := ctx.CallChildWorkflow("Workflow2", workflow.WithChildWorkflowInput("my-input"), diff --git a/daprdocs/static/images/workflow-overview/workflow-multi-app-child-workflow.png b/daprdocs/static/images/workflow-overview/workflow-multi-app-child-workflow.png index 5d5cec79b38507d6a461a852fc48f02eb6730fe4..388fcc8cf27f717956ec7cd3b638aa9f0d3ad2ae 100644 GIT binary patch literal 33812 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�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 literal 83374 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 Q3;5Hzrhm2M%H7BR1)bF4VE_OC diff --git a/daprdocs/static/images/workflow-overview/workflow-multi-app-complex.png b/daprdocs/static/images/workflow-overview/workflow-multi-app-complex.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2c401f89a880c099233db361dade9a289b86ab GIT binary patch literal 84376 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 QfC))nTKQ#(q=C=>0>_x)!2kdN literal 0 HcmV?d00001 From a2839592bfc1312482e945c7bdd3250b8c91d8b9 Mon Sep 17 00:00:00 2001 From: Marc Duiker Date: Tue, 16 Sep 2025 16:54:03 +0200 Subject: [PATCH 19/30] Prepare branch 1.16 to be latest (#4858) Signed-off-by: Marc Duiker Co-authored-by: Mark Fussell --- .github/workflows/website-root.yml | 14 ++-- README.md | 4 +- .../docs-contrib/maintainer-guide.md | 69 +++++++++---------- .../_shortcodes/dapr-latest-version.html | 2 +- hugo.yaml | 25 ++++--- 5 files changed, 54 insertions(+), 60 deletions(-) diff --git a/.github/workflows/website-root.yml b/.github/workflows/website-root.yml index dc437b1ca92..a42578916c4 100644 --- a/.github/workflows/website-root.yml +++ b/.github/workflows/website-root.yml @@ -4,11 +4,11 @@ on: workflow_dispatch: push: branches: - - v1.15 + - v1.16 pull_request: types: [opened, synchronize, reopened, closed] branches: - - v1.15 + - v1.16 concurrency: # Cancel the previously triggered build for only PR build. @@ -50,23 +50,17 @@ jobs: if [ $GITHUB_EVENT_NAME == 'pull_request' ]; then STAGING_URL="https://${SWA_BASE}-${{github.event.number}}.westus2.azurestaticapps.net/" fi - hugo ${STAGING_URL+-b "$STAGING_URL"} + hugo ${STAGING_URL+-b "$STAGING_URL"} --minify - name: Deploy docs site uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_PROUD_BAY_0E9E0E81E }} repo_token: ${{ secrets.GITHUB_TOKEN }} action: "upload" - app_location: "/daprdocs/public/" + app_location: "/daprdocs/public" output_location: "/" skip_app_build: true skip_deploy_on_missing_secrets: true - - name: Upload Hugo artifacts - uses: actions/upload-artifact@v4 - with: - name: hugo_build - path: ./daprdocs/public/ - if-no-files-found: error close_staging_site: if: github.event_name == 'pull_request' && github.event.action == 'closed' diff --git a/README.md b/README.md index 075cc139434..18d2f53b41f 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,8 @@ The following branches are currently maintained: | Branch | Website | Description | | ------------------------------------------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------ | -| [v1.15](https://github.com/dapr/docs) (primary) | https://docs.dapr.io | Latest Dapr release documentation. Typo fixes, clarifications, and most documentation goes here. | -| [v1.16](https://github.com/dapr/docs/tree/v1.16) (pre-release) | https://v1-16.docs.dapr.io/ | Pre-release documentation. Doc updates that are only applicable to v1.15+ go here. | +| [v1.16](https://github.com/dapr/docs) (primary) | https://docs.dapr.io | Latest Dapr release documentation. Typo fixes, clarifications, and most documentation goes here. | +| [v1.17](https://github.com/dapr/docs/tree/v1.16) (pre-release) | https://v1-17.docs.dapr.io/ | Pre-release documentation. Doc updates that are only applicable to v1.16+ go here. | For more information visit the [Dapr branch structure](https://docs.dapr.io/contributing/docs-contrib/contributing-docs/#branch-guidance) document. diff --git a/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md b/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md index 1ebdfb88172..227e590a95e 100644 --- a/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md +++ b/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md @@ -103,24 +103,22 @@ These steps will prepare the latest release branch for archival. git checkout -b release_v1.0 ``` -1. In VS Code, navigate to `/daprdocs/config.toml`. -1. Add the following TOML to the `# Versioning` section (around line 154): - - ```toml - version_menu = "v1.0" - version = "v1.0" - archived_version = true - url_latest_version = "https://docs.dapr.io" - - [[params.versions]] - version = "v1.2 (preview)" - url = "v1-2.docs.dapr.io" - [[params.versions]] - version = "v1.1 (latest)" - url = "#" - [[params.versions]] - version = "v1.0" - url = "https://v1-0.docs.dapr.io" +1. In VS Code, navigate to `hugo.yaml` located in the root. +1. Add the following configuration to the `# Versioning` section (around line 121 and onwards): + + ```yaml + version_menu: "v1.0" + version: "v1.0" + archived_version: true + url_latest_version: "https://docs.dapr.io" + + versions: + - version: v1.2 (preview) + url: https://v1-2.docs.dapr.io + - version: v1.1 (latest) + url: "#" + - version: v1.0 + url: https://v1-0.docs.dapr.io ``` 1. Delete `.github/workflows/website-root.yml`. @@ -146,26 +144,25 @@ These steps will prepare the upcoming release branch for promotion to latest rel git checkout -b release_v1.1 ``` -1. In VS Code, navigate to `/daprdocs/config.toml`. -1. Update line 1 to `baseURL - https://docs.dapr.io/`. -1. Update the `# Versioning` section (around line 154) to display the correct versions and tags: +1. In VS Code, navigate to `hugo.yaml` located in the root. +1. Update line 1 to `baseURL: https://docs.dapr.io/`. +1. Update the `# Versioning` section (around line 121 and onwards) to display the correct versions and tags: - ```toml + ```yaml # Versioning - version_menu = "v1.1 (latest)" - version = "v1.1" - archived_version = false - url_latest_version = "https://docs.dapr.io" - - [[params.versions]] - version = "v1.2 (preview)" - url = "v1-2.docs.dapr.io" - [[params.versions]] - version = "v1.1 (latest)" - url = "#" - [[params.versions]] - version = "v1.0" - url = "https://v1-0.docs.dapr.io" + version_menu: "v1.1 (latest)" + version: "v1.1" + archived_version: false + url_latest_version: https://docs.dapr.io + github_branch: v1.1 + + versions: + - version: v1.2 (preview) + url: https://v1-2.docs.dapr.io + - version: v1.1 (latest) + url: "#" + - version: v1.0 + url: https://v1-0.docs.dapr.io ``` 1. Navigate to `.github/workflows/website-root.yml`. diff --git a/daprdocs/layouts/_shortcodes/dapr-latest-version.html b/daprdocs/layouts/_shortcodes/dapr-latest-version.html index a085fd0e6f5..bdd712552d8 100644 --- a/daprdocs/layouts/_shortcodes/dapr-latest-version.html +++ b/daprdocs/layouts/_shortcodes/dapr-latest-version.html @@ -1 +1 @@ -{{- if .Get "short" }}1.15{{ else if .Get "long" }}1.15.5{{ else if .Get "cli" }}1.15.1{{ else }}1.15.1{{ end -}} +{{- if .Get "short" }}1.16{{ else if .Get "long" }}1.16.0{{ else if .Get "cli" }}1.16.0{{ else }}1.16.0{{ end -}} diff --git a/hugo.yaml b/hugo.yaml index a6e206f75ee..980529773db 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -1,4 +1,4 @@ -baseURL: https://v1-16.docs.dapr.io +baseURL: https://docs.dapr.io title: Dapr Docs # Output directory for generated site @@ -117,21 +117,22 @@ params: # First one is picked as the Twitter card image if not set on page. # images: [images/project-illustration.png] - + + # Versioning # Menu title if your navbar has a versions selector to access old versions of your site. # This menu appears only if you have at least one [params.versions] set. - version_menu: v1.16 (preview) - - # Flag used in the "version-banner" partial to decide whether to display a - # banner on every page indicating that this is an archived version of the docs. - # Set this flag to "true" if you want to display the banner. - archived_version: false + version_menu: v1.16 (latest) # The version number for the version of the docs represented in this doc set. # Used in the "version-banner" partial to display a version number for the # current doc set. version: v1.16 + # Flag used in the "version-banner" partial to decide whether to display a + # banner on every page indicating that this is an archived version of the docs. + # Set this flag to "true" if you want to display the banner. + archived_version: false + # A link to latest version of the docs. Used in the "version-banner" partial to # point people to the main doc site. url_latest_version: https://docs.dapr.io @@ -150,10 +151,12 @@ params: github_branch: v1.16 versions: - - version: v1.16 (preview) + - version: v1.17 (preview) + url: https://v1-17.docs.dapr.io + - version: v1.16 (latest) url: "#" - - version: v1.15 (latest) - url: "https://docs.dapr.io" + - version: v1.15 + url: https://v1-15.docs.dapr.io - version: v1.14 url: https://v1-14.docs.dapr.io - version: v1.13 From 274cac5c9502f4fe7786db98761155c08e3a8fa4 Mon Sep 17 00:00:00 2001 From: Marc Duiker Date: Tue, 16 Sep 2025 21:07:59 +0200 Subject: [PATCH 20/30] Update supported version table (+ procedure) (#4890) Signed-off-by: Marc Duiker --- .../docs-contrib/maintainer-guide.md | 1 + .../support/support-release-policy.md | 29 ++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md b/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md index 227e590a95e..7c72665b2f0 100644 --- a/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md +++ b/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md @@ -191,6 +191,7 @@ These steps will prepare the upcoming release branch for promotion to latest rel | [v1.2](https://github.com/dapr/docs/tree/v1.2) (pre-release) | https://v1-2.docs.dapr.io/ | Pre-release documentation. Doc updates that are only applicable to v1.2+ go here. | ``` +1. Update the _Supported versions_ table in `support-release-policy.md`; add a new line at the top of the table with the new version of the runtime and SDKs. Change the releases which are older than n-2 to be `Unsupported`. 1. Update the `dapr-latest-version.html` shortcode partial to the new minor/patch version (in this example, `1.1.0` and `1.1`). 1. Commit the staged changes and push to your branch (`release_v1.1`). 1. Open a PR from `release/v1.1` to `v1.1`. diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index 579008b70e0..ff1cd0abe05 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -45,26 +45,27 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | Release notes | |--------------------|:--------:|:--------|---------|---------|---------|------------| -| July 31st 2025 | 1.15.9
| 1.15.0 | Java 1.14.2, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported (current) | [v1.15.9 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.9) | -| July 18th 2025 | 1.15.8
| 1.15.0 | Java 1.14.2, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported (current) | [v1.15.8 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.8) | -| July 16th 2025 | 1.15.7
| 1.15.0 | Java 1.14.1, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported (current) | [v1.15.7 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.7) | -| June 20th 2025 | 1.15.6
| 1.15.0 | Java 1.14.1, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported (current) | [v1.15.6 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.6) | -| May 5th 2025 | 1.15.5
| 1.15.0 | Java 1.14.1, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported (current) | [v1.15.5 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.5) | -| April 4th 2025 | 1.15.4
| 1.15.0 | Java 1.14.0, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported (current) | [v1.15.4 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.4) | -| March 5rd 2025 | 1.15.3
| 1.15.0 | Java 1.14.0, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported (current) | [v1.15.3 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.3) | -| March 3rd 2025 | 1.15.2
| 1.15.0 | Java 1.14.0, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.0
JS 3.5.0
Rust 0.16 | 0.15.0 | Supported (current) | [v1.15.2 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.2) | -| February 28th 2025 | 1.15.1
| 1.15.0 | Java 1.14.0, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.0
JS 3.5.0
Rust 0.16 | 0.15.0 | Supported (current) | [v1.15.1 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.1) | +| Sep 16th 2025 | 1.16.0
| 1.16.0 | Java 1.15.0
Go 1.13.0
PHP 1.2.0
Python 1.16.0
.NET 1.16.0
JS 3.6.0
Rust 0.17.0 | 0.15.0 | Supported (current) | [v1.16.0 release notes](https://github.com/dapr/dapr/releases/tag/v1.16.0) | +| July 31st 2025 | 1.15.9
| 1.15.0 | Java 1.14.2, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.9 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.9) | +| July 18th 2025 | 1.15.8
| 1.15.0 | Java 1.14.2, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.8 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.8) | +| July 16th 2025 | 1.15.7
| 1.15.0 | Java 1.14.1, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.7 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.7) | +| June 20th 2025 | 1.15.6
| 1.15.0 | Java 1.14.1, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.6 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.6) | +| May 5th 2025 | 1.15.5
| 1.15.0 | Java 1.14.1, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.5 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.5) | +| April 4th 2025 | 1.15.4
| 1.15.0 | Java 1.14.0, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.4 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.4) | +| March 5rd 2025 | 1.15.3
| 1.15.0 | Java 1.14.0, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.3 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.3) | +| March 3rd 2025 | 1.15.2
| 1.15.0 | Java 1.14.0, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.0
JS 3.5.0
Rust 0.16 | 0.15.0 | Supported | [v1.15.2 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.2) | +| February 28th 2025 | 1.15.1
| 1.15.0 | Java 1.14.0, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.0
JS 3.5.0
Rust 0.16 | 0.15.0 | Supported | [v1.15.1 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.1) | | February 27th 2025 | 1.15.0
| 1.15.0 | Java 1.14.0, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.0
JS 3.5.0
Rust 0.16 | 0.15.0 | Supported | [v1.15.0 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.0) | | September 16th 2024 | 1.14.4
| 1.14.1 | Java 1.12.0
Go 1.11.0
PHP 1.2.0
Python 1.14.0
.NET 1.14.0
JS 3.3.1 | 0.15.0 | Supported | [v1.14.4 release notes](https://github.com/dapr/dapr/releases/tag/v1.14.4) | | September 13th 2024 | 1.14.3
| 1.14.1 | Java 1.12.0
Go 1.11.0
PHP 1.2.0
Python 1.14.0
.NET 1.14.0
JS 3.3.1 | 0.15.0 | ⚠️ Recalled | [v1.14.3 release notes](https://github.com/dapr/dapr/releases/tag/v1.14.3) | | September 6th 2024 | 1.14.2
| 1.14.1 | Java 1.12.0
Go 1.11.0
PHP 1.2.0
Python 1.14.0
.NET 1.14.0
JS 3.3.1 | 0.15.0 | Supported | [v1.14.2 release notes](https://github.com/dapr/dapr/releases/tag/v1.14.2) | | August 14th 2024 | 1.14.1
| 1.14.1 | Java 1.12.0
Go 1.11.0
PHP 1.2.0
Python 1.14.0
.NET 1.14.0
JS 3.3.1 | 0.15.0 | Supported | [v1.14.1 release notes](https://github.com/dapr/dapr/releases/tag/v1.14.1) | | August 14th 2024 | 1.14.0
| 1.14.0 | Java 1.12.0
Go 1.11.0
PHP 1.2.0
Python 1.14.0
.NET 1.14.0
JS 3.3.1 | 0.15.0 | Supported | [v1.14.0 release notes](https://github.com/dapr/dapr/releases/tag/v1.14.0) | -| May 29th 2024 | 1.13.4
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Supported | [v1.13.4 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.4) | -| May 21st 2024 | 1.13.3
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Supported | [v1.13.3 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.3) | -| April 3rd 2024 | 1.13.2
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Supported | [v1.13.2 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.2) | -| March 26th 2024 | 1.13.1
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Supported | [v1.13.1 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.1) | -| March 6th 2024 | 1.13.0
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Supported | [v1.13.0 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.0) | +| May 29th 2024 | 1.13.4
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Unsupported | [v1.13.4 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.4) | +| May 21st 2024 | 1.13.3
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Unsupported | [v1.13.3 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.3) | +| April 3rd 2024 | 1.13.2
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Unsupported | [v1.13.2 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.2) | +| March 26th 2024 | 1.13.1
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Unsupported | [v1.13.1 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.1) | +| March 6th 2024 | 1.13.0
| 1.13.0 | Java 1.11.0
Go 1.10.0
PHP 1.2.0
Python 1.13.0
.NET 1.13.0
JS 3.3.0 | 0.14.0 | Unsupported | [v1.13.0 release notes](https://github.com/dapr/dapr/releases/tag/v1.13.0) | | January 17th 2024 | 1.12.4
| 1.12.0 | Java 1.10.0
Go 1.9.1
PHP 1.2.0
Python 1.12.0
.NET 1.12.0
JS 3.2.0 | 0.14.0 | Unsupported | [v1.12.4 release notes](https://github.com/dapr/dapr/releases/tag/v1.12.4) | | January 2nd 2024 | 1.12.3
| 1.12.0 | Java 1.10.0
Go 1.9.1
PHP 1.2.0
Python 1.12.0
.NET 1.12.0
JS 3.2.0 | 0.14.0 | Unsupported | [v1.12.3 release notes](https://github.com/dapr/dapr/releases/tag/v1.12.3) | | November 18th 2023 | 1.12.2
| 1.12.0 | Java 1.10.0
Go 1.9.1
PHP 1.2.0
Python 1.12.0
.NET 1.12.0
JS 3.2.0 | 0.14.0 | Unsupported | [v1.12.2 release notes](https://github.com/dapr/dapr/releases/tag/v1.12.2) | From 8bb8a155efc7806220c276359030453f809a758a Mon Sep 17 00:00:00 2001 From: Marc Duiker Date: Tue, 16 Sep 2025 19:19:19 +0000 Subject: [PATCH 21/30] Update to download-artifact@v4 Signed-off-by: Marc Duiker --- .github/workflows/website-root.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/website-root.yml b/.github/workflows/website-root.yml index a42578916c4..c9a5f85edad 100644 --- a/.github/workflows/website-root.yml +++ b/.github/workflows/website-root.yml @@ -90,7 +90,7 @@ jobs: with: submodules: false - name: Download Hugo artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: hugo_build path: site/ From b15133a830a6566d52e7a32ac0357fe9ce446ac2 Mon Sep 17 00:00:00 2001 From: Josh van Leeuwen Date: Tue, 16 Sep 2025 15:25:16 -0400 Subject: [PATCH 22/30] [1.16] Adds configuration-overview.md section on Workflow (#4889) * [1.16] Adds configuration-overview.md section on Workflow Fixes https://github.com/dapr/docs/issues/4884 Signed-off-by: joshvanl * Update configuration-overview.md Moving workflow section and adding link in the index Signed-off-by: Mark Fussell --------- Signed-off-by: joshvanl Signed-off-by: Mark Fussell Co-authored-by: Mark Fussell --- .../configuration/configuration-overview.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/configuration/configuration-overview.md b/daprdocs/content/en/operations/configuration/configuration-overview.md index f501710405c..33cc11d8e31 100644 --- a/daprdocs/content/en/operations/configuration/configuration-overview.md +++ b/daprdocs/content/en/operations/configuration/configuration-overview.md @@ -62,13 +62,14 @@ A Dapr sidecar can apply a specific configuration by using a `dapr.io/config` an ### Application configuration settings -The following menu includes all of the configuration settings you can set on the sidecar. +The following menu includes all of the configuration settings you can set: - [Tracing](#tracing) - [Metrics](#metrics) - [Logging](#logging) - [Middleware](#middleware) - [Name resolution](#name-resolution) +- [Workflow](#workflow) - [Scope secret store access](#scope-secret-store-access) - [Access Control allow lists for building block APIs](#access-control-allow-lists-for-building-block-apis) - [Access Control allow lists for service invocation API](#access-control-allow-lists-for-service-invocation-api) @@ -255,6 +256,15 @@ For more information, see: - [The name resolution component documentation]({{% ref supported-name-resolution %}}) for more examples. - [The Configuration file documentation]({{% ref configuration-schema.md %}}) to learn more about how to configure name resolution per component. +#### Workflow + +The `workflow` section contains properties for configuring [Workflows]({{% ref "workflow-overview.md" %}}). + +| Property | Type | Description | +|------------------|--------|-----| +| `maxConcurrentWorkflowInvocations` | int32 | Maximum number of concurrent workflow executions per Dapr sidecar. Default is infinite. | +| `maxConcurrentActivityInvocations` | int32 | Maximum number of concurrent activity executions per Dapr sidecar. Default is infinite. | + #### Scope secret store access See the [Scoping secrets]({{% ref "secret-scope.md" %}}) guide for information and examples on how to scope secrets to an application. @@ -334,6 +344,9 @@ spec: deny: - bindings.smtp - secretstores.local.file + workflow: + maxConcurrentWorkflowInvocations: 100 + maxConcurrentActivityInvocations: 1000 accessControl: defaultAction: deny trustDomain: "public" From 8623168fe7e215f02597f837df656784c72d7007 Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Tue, 16 Sep 2025 22:35:14 +0100 Subject: [PATCH 23/30] Enhanced the OpenAI conversation component docs to include Azure seciton (#4887) * Enhanced the OpenAI conversation component documentation to include Azure OpenAI configuration guidance. Signed-off-by: Bilgin Ibryam * Update daprdocs/content/en/reference/components-reference/supported-conversation/openai.md Signed-off-by: Mark Fussell --------- Signed-off-by: Bilgin Ibryam Signed-off-by: Mark Fussell Co-authored-by: Mark Fussell --- .../supported-conversation/openai.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/openai.md b/daprdocs/content/en/reference/components-reference/supported-conversation/openai.md index 795f9877909..f1c29e2b5f3 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/openai.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/openai.md @@ -46,6 +46,48 @@ The above example uses secrets as plain strings. It is recommended to use a secr | `apiType` | N | Specifies the API provider type. Required when using a provider that does not follow the default OpenAI API endpoint conventions. | `azure` | | `apiVersion`| N | The API version to use. Required when the `apiType` is set to `azure`. | `2025-04-01-preview` | +## Azure OpenAI Configuration + +To configure the OpenAI component to connect to Azure OpenAI, you need to set the following metadata fields which are required for Azure's API format. + +### Required fields for Azure OpenAI + +When connecting to Azure OpenAI, the following fields are **required**: + +- `apiType`: Must be set to `azure` to enable Azure OpenAI compatibility +- `endpoint`: Your Azure OpenAI resource endpoint URL (e.g., `https://your-resource.openai.azure.com/`) +- `apiVersion`: The API version for your Azure OpenAI deployment (e.g., `2025-01-01-preview`) +- `key`: Your Azure OpenAI API key + +Get your configuration values from: https://ai.azure.com/ + +### Azure OpenAI component example + +```yaml +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: azure-openai +spec: + type: conversation.openai + metadata: + - name: key + value: "your-azure-openai-api-key" + - name: model + value: "gpt-4.1-nano" # Default: gpt-4.1-nano + - name: endpoint + value: "https://your-resource.openai.azure.com/" + - name: apiType + value: "azure" + - name: apiVersion + value: "2025-01-01-preview" +``` + + +{{% alert title="Note" color="primary" %}} +When using Azure OpenAI, both `endpoint` and `apiVersion` are mandatory fields. The component returns an error if either field is missing when `apiType` is set to `azure`. +{{% /alert %}} + ## Related links - [Conversation API overview]({{% ref conversation-overview.md %}}) From 79a47282b281571a0e7ab47def47eb2dfe6da829 Mon Sep 17 00:00:00 2001 From: Nelson Parente Date: Thu, 18 Sep 2025 00:44:05 +0100 Subject: [PATCH 24/30] feat: add missing 1.15 versions (#4892) Signed-off-by: nelson.parente --- .../content/en/operations/support/support-release-policy.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index ff1cd0abe05..ba152fada55 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -46,6 +46,9 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | Release notes | |--------------------|:--------:|:--------|---------|---------|---------|------------| | Sep 16th 2025 | 1.16.0
| 1.16.0 | Java 1.15.0
Go 1.13.0
PHP 1.2.0
Python 1.16.0
.NET 1.16.0
JS 3.6.0
Rust 0.17.0 | 0.15.0 | Supported (current) | [v1.16.0 release notes](https://github.com/dapr/dapr/releases/tag/v1.16.0) | +| Sep 17th 2025 | 1.15.12
| 1.15.0 | Java 1.14.2, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.12 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.12) | +| August 28th 2025 | 1.15.11
| 1.15.0 | Java 1.14.2, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.11 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.11) | +| August 21st 2025 | 1.15.10
| 1.15.0 | Java 1.14.2, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.10 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.10) | | July 31st 2025 | 1.15.9
| 1.15.0 | Java 1.14.2, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.9 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.9) | | July 18th 2025 | 1.15.8
| 1.15.0 | Java 1.14.2, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.8 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.8) | | July 16th 2025 | 1.15.7
| 1.15.0 | Java 1.14.1, 1.15.0
Go 1.12.0
PHP 1.2.0
Python 1.15.0
.NET 1.15.4
JS 3.5.2
Rust 0.16.1 | 0.15.0 | Supported | [v1.15.7 release notes](https://github.com/dapr/dapr/releases/tag/v1.15.7) | From 9fe866fa752bb3ef75496ff611b9ee548bc77fe6 Mon Sep 17 00:00:00 2001 From: Marc Duiker Date: Thu, 18 Sep 2025 18:02:50 +0200 Subject: [PATCH 25/30] Add back artifact upload for Algolia search (#4893) Signed-off-by: Marc Duiker --- .github/workflows/website-root.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/website-root.yml b/.github/workflows/website-root.yml index c9a5f85edad..bce0ee19d66 100644 --- a/.github/workflows/website-root.yml +++ b/.github/workflows/website-root.yml @@ -61,6 +61,12 @@ jobs: output_location: "/" skip_app_build: true skip_deploy_on_missing_secrets: true + - name: Upload Hugo artifacts for Algolia + uses: actions/upload-artifact@v4 + with: + name: hugo_build + path: ./daprdocs/public/ + if-no-files-found: error close_staging_site: if: github.event_name == 'pull_request' && github.event.action == 'closed' @@ -89,7 +95,7 @@ jobs: uses: actions/checkout@v4 with: submodules: false - - name: Download Hugo artifacts + - name: Download Hugo artifacts for Algolia uses: actions/download-artifact@v4 with: name: hugo_build From 571a088b38a5e9a8772d1e695a45f3ccef75beb3 Mon Sep 17 00:00:00 2001 From: Marc Duiker Date: Mon, 22 Sep 2025 13:27:17 +0200 Subject: [PATCH 26/30] Change Algolia index name from 'daprdocs' to 'crawler_dapr' Signed-off-by: Marc Duiker --- daprdocs/layouts/_partials/hooks/body-end.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/layouts/_partials/hooks/body-end.html b/daprdocs/layouts/_partials/hooks/body-end.html index ee0ebc1f145..eb321b47a22 100644 --- a/daprdocs/layouts/_partials/hooks/body-end.html +++ b/daprdocs/layouts/_partials/hooks/body-end.html @@ -7,7 +7,7 @@ container: '#docsearch', appId: 'O0QLQGNF38', apiKey: '54ae43aa28ce8f00c54c8d5f544d29b9', - indexName: 'daprdocs', + indexName: 'crawler_dapr', }); @@ -17,4 +17,4 @@ -{{ end }} \ No newline at end of file +{{ end }} From e4655e2fc4bb678724c41754ba0c25e3be101546 Mon Sep 17 00:00:00 2001 From: Bilgin Ibryam Date: Mon, 22 Sep 2025 13:06:08 +0100 Subject: [PATCH 27/30] Fixed random typos from all over the docs Signed-off-by: Bilgin Ibryam --- .../content/en/concepts/security-concept.md | 2 +- .../actors/namespaced-actors.md | 2 +- ...owto-schedule-and-handle-triggered-jobs.md | 2 +- .../workflow/howto-author-workflow.md | 4 +- .../error-codes/errors-overview.md | 2 +- .../multi-app-dapr-run/multi-app-template.md | 2 +- .../support/support-release-policy.md | 2 +- .../supported-bindings/eventhubs.md | 36 ++++++------ .../azure-appconfig-configuration-store.md | 16 +++--- .../supported-pubsub/setup-azure-eventhubs.md | 28 +++++----- .../supported-pubsub/setup-rabbitmq.md | 56 +++++++++---------- 11 files changed, 76 insertions(+), 76 deletions(-) diff --git a/daprdocs/content/en/concepts/security-concept.md b/daprdocs/content/en/concepts/security-concept.md index fa284cde420..2008c38a039 100644 --- a/daprdocs/content/en/concepts/security-concept.md +++ b/daprdocs/content/en/concepts/security-concept.md @@ -244,7 +244,7 @@ The audit was a holistic security audit with the following goals: - Formalize a threat model of Dapr - Perform manual code review -- Evaluate Daprs fuzzing suite against the formalized threat model +- Evaluate Dapr's fuzzing suite against the formalized threat model - Carry out a SLSA review of Dapr. You can find the full report [here](/docs/Dapr-september-2023-security-audit-report.pdf). diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/namespaced-actors.md b/daprdocs/content/en/developing-applications/building-blocks/actors/namespaced-actors.md index b51ffc79f2b..3584e9a7160 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/namespaced-actors.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/namespaced-actors.md @@ -25,7 +25,7 @@ In self-hosted mode, you can specify the namespace for a Dapr instance by settin {{% /tab %}} {{% tab "Kubernetes" %}} -On Kubernetes, you can create and configure namepaces when deploying actor applications. For example, start with the following `kubectl` commands: +On Kubernetes, you can create and configure namespaces when deploying actor applications. For example, start with the following `kubectl` commands: ```bash kubectl create namespace namespace-actorA diff --git a/daprdocs/content/en/developing-applications/building-blocks/jobs/howto-schedule-and-handle-triggered-jobs.md b/daprdocs/content/en/developing-applications/building-blocks/jobs/howto-schedule-and-handle-triggered-jobs.md index 12e50dda952..2057d25ff9c 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/jobs/howto-schedule-and-handle-triggered-jobs.md +++ b/daprdocs/content/en/developing-applications/building-blocks/jobs/howto-schedule-and-handle-triggered-jobs.md @@ -56,7 +56,7 @@ internal sealed record BackupJobData([property: JsonPropertyName("task")] string internal sealed record BackupMetadata([property: JsonPropertyName("DBName")]string DatabaseName, [property: JsonPropertyName("BackupLocation")] string BackupLocation); ``` -Next, set up a handler as part of your application setup that will be called anytime a job is triggered on your +Next, set up a handler as part of your application setup that will be called any time a job is triggered on your application. It's the responsibility of this handler to identify how jobs should be processed based on the job name provided. This works by registering a handler with ASP.NET Core at `/job/`, where `` is parameterized and diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md index a054393cf56..ca3777064b9 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md @@ -364,9 +364,9 @@ export default class WorkflowRuntime { // Register workflow activities public registerActivity(fn: TWorkflowActivity): WorkflowRuntime { const name = getFunctionName(fn); - const activityWrapper = (ctx: ActivityContext, intput: TInput): TOutput => { + const activityWrapper = (ctx: ActivityContext, input: TInput): TOutput => { const wfActivityContext = new WorkflowActivityContext(ctx); - return fn(wfActivityContext, intput); + return fn(wfActivityContext, input); }; this.worker.addNamedActivity(name, activityWrapper); return this; diff --git a/daprdocs/content/en/developing-applications/error-codes/errors-overview.md b/daprdocs/content/en/developing-applications/error-codes/errors-overview.md index 00e56ae61a9..b66ce4bcb0f 100644 --- a/daprdocs/content/en/developing-applications/error-codes/errors-overview.md +++ b/daprdocs/content/en/developing-applications/error-codes/errors-overview.md @@ -6,7 +6,7 @@ weight: 10 description: "Overview of Dapr errors" --- -An error code is a numeric or alphamueric code that indicates the nature of an error and, when possible, why it occured. +An error code is a numeric or alphanumeric code that indicates the nature of an error and, when possible, why it occured. Dapr error codes are standardized strings for over 80+ common errors across HTTP and gRPC requests when using the Dapr APIs. These codes are both: - Returned in the JSON response body of the request. diff --git a/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md b/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md index 7e527d74fe1..7cac1459d1b 100644 --- a/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md +++ b/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md @@ -100,7 +100,7 @@ dapr list -k ## Stop the multi-app template -Stop the multi-app run template anytime with either of the following commands: +Stop the multi-app run template any time with either of the following commands: {{< tabpane text=true >}} diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index ba152fada55..110dbdf266e 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -19,7 +19,7 @@ Dapr releases use `MAJOR.MINOR.PATCH` versioning. For example, 1.0.0. A supported release means: -- A hoxfix patch is released if the release has a critical issue such as a mainline broken scenario or a security issue. Each of these are reviewed on a case by case basis. +- A hotfix patch is released if the release has a critical issue such as a mainline broken scenario or a security issue. Each of these are reviewed on a case by case basis. - Issues are investigated for the supported releases. If a release is no longer supported, you need to upgrade to a newer release and determine if the issue is still relevant. From the 1.8.0 release onwards three (3) versions of Dapr are supported; the current and previous two (2) versions. Typically these are `MINOR`release updates. This means that there is a rolling window that moves forward for supported releases and it is your operational responsibility to remain up to date with these supported versions. If you have an older version of Dapr you may have to do intermediate upgrades to get to a supported version. diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/eventhubs.md b/daprdocs/content/en/reference/components-reference/supported-bindings/eventhubs.md index 989f93ab366..227b9973785 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/eventhubs.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/eventhubs.md @@ -70,24 +70,24 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Spec metadata fields -| Field | Required | Binding support | Details | Example | -|--------------------|:--------:|------------|-----|---------| -| `eventHub` | Y* | Input/Output | The name of the Event Hubs hub ("topic"). Required if using Microsoft Entra ID authentication or if the connection string doesn't contain an `EntityPath` value | `mytopic` | -| `connectionString` | Y* | Input/Output | Connection string for the Event Hub or the Event Hub namespace.
* Mutally exclusive with `eventHubNamespace` field.
* Required when not using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key};EntityPath={EventHub}"` or `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key}"` -| `eventHubNamespace` | Y* | Input/Output | The Event Hub Namespace name.
* Mutally exclusive with `connectionString` field.
* Required when using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"namespace"` -| `enableEntityManagement` | N | Input/Output | Boolean value to allow management of the EventHub namespace and storage account. Default: `false` | `"true"`, `"false"` -| `enableInOrderMessageDelivery` | N | Input/Output | Boolean value to allow messages to be delivered in the order in which they were posted. This assumes `partitionKey` is set when publishing or posting to ensure ordering across partitions. Default: `false` | `"true"`, `"false"` -| `resourceGroupName` | N | Input/Output | Name of the resource group the Event Hub namespace is part of. Required when entity management is enabled | `"test-rg"` -| `subscriptionID` | N | Input/Output | Azure subscription ID value. Required when entity management is enabled | `"azure subscription id"` -| `partitionCount` | N | Input/Output | Number of partitions for the new Event Hub namespace. Used only when entity management is enabled. Default: `"1"` | `"2"` -| `messageRetentionInDays` | N | Input/Output | Number of days to retain messages for in the newly created Event Hub namespace. Used only when entity management is enabled. Default: `"1"` | `"90"` -| `consumerGroup` | Y | Input | The name of the [Event Hubs Consumer Group](https://docs.microsoft.com/azure/event-hubs/event-hubs-features#consumer-groups) to listen on | `"group1"` | -| `storageAccountName` | Y | Input | Storage account name to use for the checkpoint store. |`"myeventhubstorage"` -| `storageAccountKey` | Y* | Input | Storage account key for the checkpoint store account.
* When using Microsoft Entra ID, it's possible to omit this if the service principal has access to the storage account too. | `"112233445566778899"` -| `storageConnectionString` | Y* | Input | Connection string for the checkpoint store, alternative to specifying `storageAccountKey` | `"DefaultEndpointsProtocol=https;AccountName=myeventhubstorage;AccountKey="` -| `storageContainerName` | Y | Input | Storage container name for the storage account name. | `"myeventhubstoragecontainer"` -| `getAllMessageProperties` | N | Input | When set to `true`, retrieves all user/app/custom properties from the Event Hub message and forwards them in the returned event metadata. Default setting is `"false"`. | `"true"`, `"false"` -| `direction` | N | Input/Output | The direction of the binding. | `"input"`, `"output"`, `"input, output"` +| Field | Required | Binding support | Details | Example | +|--------------------|:--------:|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------| +| `eventHub` | Y* | Input/Output | The name of the Event Hubs hub ("topic"). Required if using Microsoft Entra ID authentication or if the connection string doesn't contain an `EntityPath` value | `mytopic` | +| `connectionString` | Y* | Input/Output | Connection string for the Event Hub or the Event Hub namespace.
* Mutually exclusive with `eventHubNamespace` field.
* Required when not using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key};EntityPath={EventHub}"` or `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key}"` +| `eventHubNamespace` | Y* | Input/Output | The Event Hub Namespace name.
* Mutually exclusive with `connectionString` field.
* Required when using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"namespace"` +| `enableEntityManagement` | N | Input/Output | Boolean value to allow management of the EventHub namespace and storage account. Default: `false` | `"true"`, `"false"` +| `enableInOrderMessageDelivery` | N | Input/Output | Boolean value to allow messages to be delivered in the order in which they were posted. This assumes `partitionKey` is set when publishing or posting to ensure ordering across partitions. Default: `false` | `"true"`, `"false"` +| `resourceGroupName` | N | Input/Output | Name of the resource group the Event Hub namespace is part of. Required when entity management is enabled | `"test-rg"` +| `subscriptionID` | N | Input/Output | Azure subscription ID value. Required when entity management is enabled | `"azure subscription id"` +| `partitionCount` | N | Input/Output | Number of partitions for the new Event Hub namespace. Used only when entity management is enabled. Default: `"1"` | `"2"` +| `messageRetentionInDays` | N | Input/Output | Number of days to retain messages for in the newly created Event Hub namespace. Used only when entity management is enabled. Default: `"1"` | `"90"` +| `consumerGroup` | Y | Input | The name of the [Event Hubs Consumer Group](https://docs.microsoft.com/azure/event-hubs/event-hubs-features#consumer-groups) to listen on | `"group1"` | +| `storageAccountName` | Y | Input | Storage account name to use for the checkpoint store. |`"myeventhubstorage"` +| `storageAccountKey` | Y* | Input | Storage account key for the checkpoint store account.
* When using Microsoft Entra ID, it's possible to omit this if the service principal has access to the storage account too. | `"112233445566778899"` +| `storageConnectionString` | Y* | Input | Connection string for the checkpoint store, alternative to specifying `storageAccountKey` | `"DefaultEndpointsProtocol=https;AccountName=myeventhubstorage;AccountKey="` +| `storageContainerName` | Y | Input | Storage container name for the storage account name. | `"myeventhubstoragecontainer"` +| `getAllMessageProperties` | N | Input | When set to `true`, retrieves all user/app/custom properties from the Event Hub message and forwards them in the returned event metadata. Default setting is `"false"`. | `"true"`, `"false"` +| `direction` | N | Input/Output | The direction of the binding. | `"input"`, `"output"`, `"input, output"` ### Microsoft Entra ID authentication diff --git a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/azure-appconfig-configuration-store.md b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/azure-appconfig-configuration-store.md index 3db6a4bba94..b2e2c3919d3 100644 --- a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/azure-appconfig-configuration-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/azure-appconfig-configuration-store.md @@ -50,14 +50,14 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Spec metadata fields -| Field | Required | Details | Example | -|----------------------------|:--------:|---------|---------| -| connectionString | Y* | Connection String for the Azure App Configuration instance. No Default. Can be `secretKeyRef` to use a secret reference. *Mutally exclusive with host field. *Not to be used when [Azure Authentication](https://docs.dapr.io/developing-applications/integrations/azure/azure-authentication/authenticating-azure/) is used | `Endpoint=https://foo.azconfig.io;Id=osOX-l9-s0:sig;Secret=00000000000000000000000000000000000000000000` -| host | N* | Endpoint for the Azure App Configuration instance. No Default. *Mutally exclusive with connectionString field. *To be used when [Azure Authentication](https://docs.dapr.io/developing-applications/integrations/azure/azure-authentication/authenticating-azure/) is used | `https://dapr.azconfig.io` -| maxRetries | N | Maximum number of retries before giving up. Defaults to `3` | `5`, `10` -| retryDelay | N | RetryDelay specifies the initial amount of delay to use before retrying an operation. The delay increases exponentially with each retry up to the maximum specified by MaxRetryDelay. Defaults to `4` seconds; `"-1"` disables delay between retries. | `4s` -| maxRetryDelay | N | MaxRetryDelay specifies the maximum delay allowed before retrying an operation. Typically the value is greater than or equal to the value specified in RetryDelay. Defaults to `120` seconds; `"-1"` disables the limit | `120s` -| subscribePollInterval | N | subscribePollInterval specifies the poll interval in nanoseconds for polling the subscribed keys for any changes. This will be updated in the future to Go Time format. Default polling interval is set to `24` hours. | `24h` +| Field | Required | Details | Example | +|----------------------------|:--------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------| +| connectionString | Y* | Connection String for the Azure App Configuration instance. No Default. Can be `secretKeyRef` to use a secret reference. *Mutually exclusive with host field. *Not to be used when [Azure Authentication](https://docs.dapr.io/developing-applications/integrations/azure/azure-authentication/authenticating-azure/) is used | `Endpoint=https://foo.azconfig.io;Id=osOX-l9-s0:sig;Secret=00000000000000000000000000000000000000000000` +| host | N* | Endpoint for the Azure App Configuration instance. No Default. *Mutually exclusive with connectionString field. *To be used when [Azure Authentication](https://docs.dapr.io/developing-applications/integrations/azure/azure-authentication/authenticating-azure/) is used | `https://dapr.azconfig.io` +| maxRetries | N | Maximum number of retries before giving up. Defaults to `3` | `5`, `10` +| retryDelay | N | RetryDelay specifies the initial amount of delay to use before retrying an operation. The delay increases exponentially with each retry up to the maximum specified by MaxRetryDelay. Defaults to `4` seconds; `"-1"` disables delay between retries. | `4s` +| maxRetryDelay | N | MaxRetryDelay specifies the maximum delay allowed before retrying an operation. Typically the value is greater than or equal to the value specified in RetryDelay. Defaults to `120` seconds; `"-1"` disables the limit | `120s` +| subscribePollInterval | N | subscribePollInterval specifies the poll interval in nanoseconds for polling the subscribed keys for any changes. This will be updated in the future to Go Time format. Default polling interval is set to `24` hours. | `24h` **Note**: either `host` or `connectionString` must be specified. diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-eventhubs.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-eventhubs.md index 21a50e96b55..7b21a4817d0 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-eventhubs.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-eventhubs.md @@ -62,21 +62,21 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Spec metadata fields -| Field | Required | Details | Example | -|--------------------|:--------:|---------|---------| -| `connectionString` | Y* | Connection string for the Event Hub or the Event Hub namespace.
* Mutally exclusive with `eventHubNamespace` field.
* Required when not using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key};EntityPath={EventHub}"` or `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key}"` -| `eventHubNamespace` | Y* | The Event Hub Namespace name.
* Mutally exclusive with `connectionString` field.
* Required when using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"namespace"` +| Field | Required | Details | Example | +|--------------------|:--------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------| +| `connectionString` | Y* | Connection string for the Event Hub or the Event Hub namespace.
* Mutually exclusive with `eventHubNamespace` field.
* Required when not using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key};EntityPath={EventHub}"` or `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key}"` +| `eventHubNamespace` | Y* | The Event Hub Namespace name.
* Mutually exclusive with `connectionString` field.
* Required when using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"namespace"` | `consumerID` | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) -| `enableEntityManagement` | N | Boolean value to allow management of the EventHub namespace and storage account. Default: `false` | `"true", "false"` -| `enableInOrderMessageDelivery` | N | Input/Output | Boolean value to allow messages to be delivered in the order in which they were posted. This assumes `partitionKey` is set when publishing or posting to ensure ordering across partitions. Default: `false` | `"true"`, `"false"` -| `storageAccountName` | Y | Storage account name to use for the checkpoint store. |`"myeventhubstorage"` -| `storageAccountKey` | Y* | Storage account key for the checkpoint store account.
* When using Microsoft Entra ID, it's possible to omit this if the service principal has access to the storage account too. | `"112233445566778899"` -| `storageConnectionString` | Y* | Connection string for the checkpoint store, alternative to specifying `storageAccountKey` | `"DefaultEndpointsProtocol=https;AccountName=myeventhubstorage;AccountKey="` -| `storageContainerName` | Y | Storage container name for the storage account name. | `"myeventhubstoragecontainer"` -| `resourceGroupName` | N | Name of the resource group the Event Hub namespace is part of. Required when entity management is enabled | `"test-rg"` -| `subscriptionID` | N | Azure subscription ID value. Required when entity management is enabled | `"azure subscription id"` -| `partitionCount` | N | Number of partitions for the new Event Hub namespace. Used only when entity management is enabled. Default: `"1"` | `"2"` -| `messageRetentionInDays` | N | Number of days to retain messages for in the newly created Event Hub namespace. Used only when entity management is enabled. Default: `"1"` | `"90"` +| `enableEntityManagement` | N | Boolean value to allow management of the EventHub namespace and storage account. Default: `false` | `"true", "false"` +| `enableInOrderMessageDelivery` | N | Input/Output | Boolean value to allow messages to be delivered in the order in which they were posted. This assumes `partitionKey` is set when publishing or posting to ensure ordering across partitions. Default: `false` | `"true"`, `"false"` +| `storageAccountName` | Y | Storage account name to use for the checkpoint store. |`"myeventhubstorage"` +| `storageAccountKey` | Y* | Storage account key for the checkpoint store account.
* When using Microsoft Entra ID, it's possible to omit this if the service principal has access to the storage account too. | `"112233445566778899"` +| `storageConnectionString` | Y* | Connection string for the checkpoint store, alternative to specifying `storageAccountKey` | `"DefaultEndpointsProtocol=https;AccountName=myeventhubstorage;AccountKey="` +| `storageContainerName` | Y | Storage container name for the storage account name. | `"myeventhubstoragecontainer"` +| `resourceGroupName` | N | Name of the resource group the Event Hub namespace is part of. Required when entity management is enabled | `"test-rg"` +| `subscriptionID` | N | Azure subscription ID value. Required when entity management is enabled | `"azure subscription id"` +| `partitionCount` | N | Number of partitions for the new Event Hub namespace. Used only when entity management is enabled. Default: `"1"` | `"2"` +| `messageRetentionInDays` | N | Number of days to retain messages for in the newly created Event Hub namespace. Used only when entity management is enabled. Default: `"1"` | `"90"` ### Microsoft Entra ID authentication diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md index c3b4e69a8f5..cb65415ba7c 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md @@ -76,35 +76,35 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Spec metadata fields -| Field | Required | Details | Example | -|--------------------|:--------:|---------|---------| -| connectionString | Y* | The RabbitMQ connection string. *Mutally exclusive with protocol, hostname, username, password field | `amqp://user:pass@localhost:5672` | -| protocol | N* | The RabbitMQ protocol. *Mutally exclusive with connectionString field | `amqp` | -| hostname | N* | The RabbitMQ hostname. *Mutally exclusive with connectionString field | `localhost` | -| username | N* | The RabbitMQ username. *Mutally exclusive with connectionString field | `username` | -| password | N* | The RabbitMQ password. *Mutally exclusive with connectionString field | `password` | +| Field | Required | Details | Example | +|--------------------|:--------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------| +| connectionString | Y* | The RabbitMQ connection string. *Mutually exclusive with protocol, hostname, username, password field | `amqp://user:pass@localhost:5672` | +| protocol | N* | The RabbitMQ protocol. *Mutually exclusive with connectionString field | `amqp` | +| hostname | N* | The RabbitMQ hostname. *Mutually exclusive with connectionString field | `localhost` | +| username | N* | The RabbitMQ username. *Mutually exclusive with connectionString field | `username` | +| password | N* | The RabbitMQ password. *Mutually exclusive with connectionString field | `password` | | consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) -| durable | N | Whether or not to use [durable](https://www.rabbitmq.com/queues.html#durability) queues. Defaults to `"false"` | `"true"`, `"false"` -| deletedWhenUnused | N | Whether or not the queue should be configured to [auto-delete](https://www.rabbitmq.com/queues.html) Defaults to `"true"` | `"true"`, `"false"` -| autoAck | N | Whether or not the queue consumer should [auto-ack](https://www.rabbitmq.com/confirms.html) messages. Defaults to `"false"` | `"true"`, `"false"` -| deliveryMode | N | Persistence mode when publishing messages. Defaults to `"0"`. RabbitMQ treats `"2"` as persistent, all other numbers as non-persistent | `"0"`, `"2"` -| requeueInFailure | N | Whether or not to requeue when sending a [negative acknowledgement](https://www.rabbitmq.com/nack.html) in case of a failure. Defaults to `"false"` | `"true"`, `"false"` -| prefetchCount | N | Number of messages to [prefetch](https://www.rabbitmq.com/consumer-prefetch.html). Consider changing this to a non-zero value for production environments. Defaults to `"0"`, which means that all available messages will be pre-fetched. | `"2"` -| publisherConfirm | N | If enabled, client waits for [publisher confirms](https://www.rabbitmq.com/confirms.html#publisher-confirms) after publishing a message. Defaults to `"false"` | `"true"`, `"false"` -| reconnectWait | N | How long to wait (in seconds) before reconnecting if a connection failure occurs | `"0"` -| concurrencyMode | N | `parallel` is the default, and allows processing multiple messages in parallel (limited by the `app-max-concurrency` annotation, if configured). Set to `single` to disable parallel processing. In most situations there's no reason to change this. | `parallel`, `single` -| enableDeadLetter | N | Enable forwarding Messages that cannot be handled to a dead-letter topic. Defaults to `"false"` | `"true"`, `"false"` | -| maxLen | N | The maximum number of messages of a queue and its dead letter queue (if dead letter enabled). If both `maxLen` and `maxLenBytes` are set then both will apply; whichever limit is hit first will be enforced. Defaults to no limit. | `"1000"` | -| maxLenBytes | N | Maximum length in bytes of a queue and its dead letter queue (if dead letter enabled). If both `maxLen` and `maxLenBytes` are set then both will apply; whichever limit is hit first will be enforced. Defaults to no limit. | `"1048576"` | -| exchangeKind | N | Exchange kind of the rabbitmq exchange. Defaults to `"fanout"`. | `"fanout"`,`"topic"` | -| saslExternal | N | With TLS, should the username be taken from an additional field (for example, CN). See [RabbitMQ Authentication Mechanisms](https://www.rabbitmq.com/access-control.html#mechanisms). Defaults to `"false"`. | `"true"`, `"false"` | -| ttlInSeconds | N | Set message TTL at the component level, which can be overwritten by message level TTL per request. | `"60"` | -| caCert | Required for using TLS | Certificate Authority (CA) certificate in PEM format for verifying server TLS certificates. | `"-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----"` -| clientCert | Required for using TLS | TLS client certificate in PEM format. Must be used with `clientKey`. | `"-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----"` -| clientKey | Required for using TLS | TLS client key in PEM format. Must be used with `clientCert`. Can be `secretKeyRef` to use a secret reference. | `"-----BEGIN RSA PRIVATE KEY-----\n\n-----END RSA PRIVATE KEY-----"` -| clientName | N | This RabbitMQ [client-provided connection name](https://www.rabbitmq.com/connections.html#client-provided-names) is a custom identifier. If set, the identifier is mentioned in RabbitMQ server log entries and management UI. Can be set to {uuid}, {podName}, or {appID}, which is replaced by Dapr runtime to the real value. | `"app1"`, `{uuid}`, `{podName}`, `{appID}` -| heartBeat | N | Defines the heartbeat interval with the server, detecting the aliveness of the peer TCP connection with the RabbitMQ server. Defaults to `10s` . | `"10s"` -| `publishMessagePropertiesToMetadata` | N | Whether to publish AMQP message properties (headers, message ID, etc.) to the metadata. | "true", "false" +| durable | N | Whether or not to use [durable](https://www.rabbitmq.com/queues.html#durability) queues. Defaults to `"false"` | `"true"`, `"false"` +| deletedWhenUnused | N | Whether or not the queue should be configured to [auto-delete](https://www.rabbitmq.com/queues.html) Defaults to `"true"` | `"true"`, `"false"` +| autoAck | N | Whether or not the queue consumer should [auto-ack](https://www.rabbitmq.com/confirms.html) messages. Defaults to `"false"` | `"true"`, `"false"` +| deliveryMode | N | Persistence mode when publishing messages. Defaults to `"0"`. RabbitMQ treats `"2"` as persistent, all other numbers as non-persistent | `"0"`, `"2"` +| requeueInFailure | N | Whether or not to requeue when sending a [negative acknowledgement](https://www.rabbitmq.com/nack.html) in case of a failure. Defaults to `"false"` | `"true"`, `"false"` +| prefetchCount | N | Number of messages to [prefetch](https://www.rabbitmq.com/consumer-prefetch.html). Consider changing this to a non-zero value for production environments. Defaults to `"0"`, which means that all available messages will be pre-fetched. | `"2"` +| publisherConfirm | N | If enabled, client waits for [publisher confirms](https://www.rabbitmq.com/confirms.html#publisher-confirms) after publishing a message. Defaults to `"false"` | `"true"`, `"false"` +| reconnectWait | N | How long to wait (in seconds) before reconnecting if a connection failure occurs | `"0"` +| concurrencyMode | N | `parallel` is the default, and allows processing multiple messages in parallel (limited by the `app-max-concurrency` annotation, if configured). Set to `single` to disable parallel processing. In most situations there's no reason to change this. | `parallel`, `single` +| enableDeadLetter | N | Enable forwarding Messages that cannot be handled to a dead-letter topic. Defaults to `"false"` | `"true"`, `"false"` | +| maxLen | N | The maximum number of messages of a queue and its dead letter queue (if dead letter enabled). If both `maxLen` and `maxLenBytes` are set then both will apply; whichever limit is hit first will be enforced. Defaults to no limit. | `"1000"` | +| maxLenBytes | N | Maximum length in bytes of a queue and its dead letter queue (if dead letter enabled). If both `maxLen` and `maxLenBytes` are set then both will apply; whichever limit is hit first will be enforced. Defaults to no limit. | `"1048576"` | +| exchangeKind | N | Exchange kind of the rabbitmq exchange. Defaults to `"fanout"`. | `"fanout"`,`"topic"` | +| saslExternal | N | With TLS, should the username be taken from an additional field (for example, CN). See [RabbitMQ Authentication Mechanisms](https://www.rabbitmq.com/access-control.html#mechanisms). Defaults to `"false"`. | `"true"`, `"false"` | +| ttlInSeconds | N | Set message TTL at the component level, which can be overwritten by message level TTL per request. | `"60"` | +| caCert | Required for using TLS | Certificate Authority (CA) certificate in PEM format for verifying server TLS certificates. | `"-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----"` +| clientCert | Required for using TLS | TLS client certificate in PEM format. Must be used with `clientKey`. | `"-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----"` +| clientKey | Required for using TLS | TLS client key in PEM format. Must be used with `clientCert`. Can be `secretKeyRef` to use a secret reference. | `"-----BEGIN RSA PRIVATE KEY-----\n\n-----END RSA PRIVATE KEY-----"` +| clientName | N | This RabbitMQ [client-provided connection name](https://www.rabbitmq.com/connections.html#client-provided-names) is a custom identifier. If set, the identifier is mentioned in RabbitMQ server log entries and management UI. Can be set to {uuid}, {podName}, or {appID}, which is replaced by Dapr runtime to the real value. | `"app1"`, `{uuid}`, `{podName}`, `{appID}` +| heartBeat | N | Defines the heartbeat interval with the server, detecting the aliveness of the peer TCP connection with the RabbitMQ server. Defaults to `10s` . | `"10s"` +| `publishMessagePropertiesToMetadata` | N | Whether to publish AMQP message properties (headers, message ID, etc.) to the metadata. | "true", "false" ## Communication using TLS From ced54bb2f8fb2cbea0a2f43af6b31501498fef10 Mon Sep 17 00:00:00 2001 From: Kobbi Gal Date: Sat, 4 Oct 2025 01:07:17 -0400 Subject: [PATCH 28/30] add akeyless doc --- .../supported-secret-stores/akeyless.md | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md new file mode 100644 index 00000000000..52fc4514712 --- /dev/null +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md @@ -0,0 +1,139 @@ +--- +type: docs +title: "Akeyless" +linkTitle: "Akeyless" +description: Information about the Akeyless secret store component configuration. +--- + +## Create the Akeyless component + +To setup Akeyless secret store create a component of type `secretstores.akeyless`. See [this guide]({{% ref "setup-secret-store.md#apply-the-configuration" %}}) on how to create and apply a secretstore configuration. See this guide on [referencing secrets]({{% ref component-secrets.md %}}) to retrieve and use the secret with Dapr components. + +## Authentication Methods + +We currently support the following authentication methods: + +### [API Key](https://docs.akeyless.io/docs/api-key) + + + +```yaml +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: akeyless +spec: + type: secretstores.akeyless + version: v1 + metadata: + - name: gatewayUrl + value: "https://api.akeyless.io" + - name: accessId + value: "p-123..." + - name: accessKey + value: "ABCD1233...=" +``` + +### [AWS IAM](https://docs.akeyless.io/docs/aws-iam) + +```yaml +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: akeyless +spec: + type: secretstores.akeyless + version: v1 + metadata: + - name: gatewayUrl + value: "https://api.akeyless.io" + - name: accessId + value: "p-123..." +``` + +### [OAuth2.0/JWT](https://docs.akeyless.io/docs/oauth20jwt) + +```yaml +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: akeyless +spec: + type: secretstores.akeyless + version: v1 + metadata: + - name: gatewayUrl + value: "https://api.akeyless.io" + - name: accessId + value: "p-123..." + - name: jwt + value: "eyJ..." +``` + +### [Kubernetes](https://docs.akeyless.io/docs/kubernetes-auth) + +```yaml +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: akeyless +spec: + type: secretstores.akeyless + version: v1 + metadata: + - name: gatewayUrl + value: "http://release-gw.akeyless.svc.cluster.local:8000/api/v2" + - name: accessID + value: "p-123..." + - name: k8sAuthConfigName + value: "my-k8s-auth-config" + - name: k8sGatewayUrl + value: "http://release-gw.akeyless.svc.cluster.local:8000/api/v2" + - name: k8sServiceAccountToken + value: "eyJ..." +``` + +{{% alert title="Warning" color="warning" %}} +The above examples use secrets as plain strings. It is recommended to use a local secret store such as [Kubernetes secret store]({{% ref kubernetes-secret-store.md %}}) or a [local file]({{% ref file-secret-store.md %}}) to bootstrap secure key storage. +{{% /alert %}} + +## Spec metadata fields + +| Field | Required | Details | Example | +|--------------------|:--------:|-------------------------------------------------------------------------|---------------------| +| `akeylessGWApiURL` | N | The Akeyless Gateway API URL. Defaults to https://api.akeyless.io. | `http://gw-release.akeyless.svc.cluster.local:8000/api/v2` | +| `accessID` | Y | The Akeyless Access ID of the authentication method | `p-1234567890` | +| `accessKey` | N | Fill in when using an API Key (`access_key`) authentication method. | `ABCD1233...=` | +| `JWT` | N | Fill in a `base64`-encoded string of the JWT when using OAuth2.0/JWT (`jwt`) authentication method | `eyJ...` | +| `k8sAuthConfigName` | N | Fill in when using Kubernetes Authentication (`k8s`) authentication method | `my-k8s-auth-conf` | +| `k8sGatewayUrl` | N | Fill in when using Kubernetes Authentication (`k8s`) authentication method. If not filled in, will default to value set for `akeylessGWApiURL`. | `http://gw-release.akeyless.svc.cluster.local:8000/api/v2` | +| `k8sServiceAccountToken` | N | Fill in a `base64`-encoded string of the JWT when using Kubernetes Authentication (`k8s`) authentication method. If not filled in, will read from k8s token in container filesystem | `ej...` | + + +## Retrieve secrets + +You can retrieve secrets from Akeyless using the Dapr secrets API: + +```bash +curl http://localhost:3500/v1.0/secrets/akeyless/my-secret +``` + +This will return the secret value stored in Akeyless with the name `my-secret`. + +## Setup Akeyless instance + +To get started with Akeyless: + +1. Sign up for an Akeyless account at [https://www.akeyless.io](https://www.akeyless.io) +2. Create an Access ID and configure your preferred authentication method +3. Set up your secrets in the Akeyless. +4. Configure the Dapr component using one of the authentication methods above. + +For more detailed setup instructions, refer to the [Akeyless documentation](https://docs.akeyless.io/). + +## Related links + +- [Secrets building block]({{% ref secrets %}}) +- [How-To: Retrieve a secret]({{% ref "howto-secrets.md" %}}) +- [How-To: Reference secrets in Dapr components]({{% ref component-secrets.md %}}) +- [Secrets API reference]({{% ref secrets_api.md %}}) \ No newline at end of file From d2c3a3d73bc8a80374b7d7826edb18f2638ac94c Mon Sep 17 00:00:00 2001 From: Kobbi Gal Date: Thu, 30 Oct 2025 14:23:46 -0400 Subject: [PATCH 29/30] add periods --- .../components-reference/supported-secret-stores/akeyless.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md index 52fc4514712..7fcc528a46d 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md @@ -118,14 +118,14 @@ You can retrieve secrets from Akeyless using the Dapr secrets API: curl http://localhost:3500/v1.0/secrets/akeyless/my-secret ``` -This will return the secret value stored in Akeyless with the name `my-secret`. +This returns the secret value stored in Akeyless with the name `my-secret`. ## Setup Akeyless instance To get started with Akeyless: 1. Sign up for an Akeyless account at [https://www.akeyless.io](https://www.akeyless.io) -2. Create an Access ID and configure your preferred authentication method +2. Create an Access ID and configure your preferred authentication method. 3. Set up your secrets in the Akeyless. 4. Configure the Dapr component using one of the authentication methods above. From 8b4e73077d768a82d147976ee078e631f202b4c3 Mon Sep 17 00:00:00 2001 From: Kobbi Gal Date: Thu, 30 Oct 2025 14:27:56 -0400 Subject: [PATCH 30/30] add component format section --- .../supported-secret-stores/akeyless.md | 109 ++++++++++++++++-- 1 file changed, 97 insertions(+), 12 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md index 7fcc528a46d..3415649f690 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/akeyless.md @@ -9,6 +9,103 @@ description: Information about the Akeyless secret store component configuration To setup Akeyless secret store create a component of type `secretstores.akeyless`. See [this guide]({{% ref "setup-secret-store.md#apply-the-configuration" %}}) on how to create and apply a secretstore configuration. See this guide on [referencing secrets]({{% ref component-secrets.md %}}) to retrieve and use the secret with Dapr components. + +## Component Format + +```yaml +schemaVersion: v1 +type: secretstores +name: akeyless +version: v1 +status: beta +title: "Akeyless Secret Store" +urls: + - title: Reference + url: https://docs.dapr.io/reference/components-reference/supported-secret-stores/akeyless/ +authenticationProfiles: + - title: API Key + description: Authenticate using an API key. + metadata: + - name: accessId + required: true + description: The Akeyless Access ID. + example: "p-123456780wm" + type: string + - name: accessKey + required: true + description: The Akeyless API key. + example: "ABCD1233...=" + type: string + sensitive: true + - title: JWT + description: Authenticate using a JSON Web Token. + metadata: + - name: accessId + required: true + description: The Akeyless Access ID. + example: "p-123456780wm" + type: string + - name: jwt + required: true + description: The JSON Web Token. + example: "eyJ..." + type: string + sensitive: true + - title: AWS IAM + description: Authenticate using AWS IAM. + metadata: + - name: accessId + required: true + description: The Akeyless Access ID. + example: "p-123456780wm" + type: string + - title: Kubernetes + description: Authenticate using Kubernetes. + metadata: + - name: accessId + required: true + description: The Akeyless Access ID. + example: "p-123456780wm" + type: string + - name: k8sAuthConfigName + required: true + description: The name of the k8s auth config. + example: "k8s-auth-config" + type: string + - name: k8sGatewayUrl + required: true + description: The gateway URL that where the k8s auth config is located. + example: "http://gw.akeyless.svc.cluster.local:8000" + type: string + - name: k8sServiceAccountToken + required: true + description: The service account token. + example: "eyJ..." + type: string + sensitive: true +metadata: + - name: gatewayUrl + required: false + description: | + The URL to the Akeyless Gateway API. Default is https://api.akeyless.io. + default: "https://api.akeyless.io" + example: "https://your.akeyless.gw" + type: string +``` + +## Spec metadata fields + +| Field | Required | Details | Example | +|--------------------|:--------:|-------------------------------------------------------------------------|---------------------| +| `gatewayUrl` | N | The Akeyless Gateway API URL. Defaults to https://api.akeyless.io. | `http://gw-release.akeyless.svc.cluster.local:8000/api/v2` | +| `accessID` | Y | The Akeyless Access ID of the authentication method | `p-1234567890` | +| `accessKey` | N | Fill in when using an API Key (`access_key`) authentication method. | `ABCD1233...=` | +| `jwt` | N | Fill in a `base64`-encoded string of the JWT when using OAuth2.0/JWT (`jwt`) authentication method | `eyJ...` | +| `k8sAuthConfigName` | N | Fill in when using Kubernetes Authentication (`k8s`) authentication method | `my-k8s-auth-conf` | +| `k8sGatewayUrl` | N | Fill in when using Kubernetes Authentication (`k8s`) authentication method. If not filled in, will default to value set for `akeylessGWApiURL`. | `http://gw-release.akeyless.svc.cluster.local:8000/api/v2` | +| `k8sServiceAccountToken` | N | Fill in a `base64`-encoded string of the JWT when using Kubernetes Authentication (`k8s`) authentication method. If not filled in, will read from k8s token in container filesystem | `ej...` | + + ## Authentication Methods We currently support the following authentication methods: @@ -97,18 +194,6 @@ spec: The above examples use secrets as plain strings. It is recommended to use a local secret store such as [Kubernetes secret store]({{% ref kubernetes-secret-store.md %}}) or a [local file]({{% ref file-secret-store.md %}}) to bootstrap secure key storage. {{% /alert %}} -## Spec metadata fields - -| Field | Required | Details | Example | -|--------------------|:--------:|-------------------------------------------------------------------------|---------------------| -| `akeylessGWApiURL` | N | The Akeyless Gateway API URL. Defaults to https://api.akeyless.io. | `http://gw-release.akeyless.svc.cluster.local:8000/api/v2` | -| `accessID` | Y | The Akeyless Access ID of the authentication method | `p-1234567890` | -| `accessKey` | N | Fill in when using an API Key (`access_key`) authentication method. | `ABCD1233...=` | -| `JWT` | N | Fill in a `base64`-encoded string of the JWT when using OAuth2.0/JWT (`jwt`) authentication method | `eyJ...` | -| `k8sAuthConfigName` | N | Fill in when using Kubernetes Authentication (`k8s`) authentication method | `my-k8s-auth-conf` | -| `k8sGatewayUrl` | N | Fill in when using Kubernetes Authentication (`k8s`) authentication method. If not filled in, will default to value set for `akeylessGWApiURL`. | `http://gw-release.akeyless.svc.cluster.local:8000/api/v2` | -| `k8sServiceAccountToken` | N | Fill in a `base64`-encoded string of the JWT when using Kubernetes Authentication (`k8s`) authentication method. If not filled in, will read from k8s token in container filesystem | `ej...` | - ## Retrieve secrets